@inboxsdk/core 0.2.27 → 0.2.28-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/inboxsdk.d.ts +1 -805
  2. package/inboxsdk.js +299 -57
  3. package/inboxsdk.js.map +1 -1
  4. package/package.json +6 -4
  5. package/pageWorld.js +46 -12
  6. package/pageWorld.js.map +1 -1
  7. package/src/build/exec.d.ts +2 -0
  8. package/src/build/exec.d.ts.map +1 -0
  9. package/src/build/spawn.d.ts +2 -0
  10. package/src/build/spawn.d.ts.map +1 -0
  11. package/src/common/ajax.d.ts +23 -0
  12. package/src/common/ajax.d.ts.map +1 -0
  13. package/src/common/cachebust-url.d.ts +2 -0
  14. package/src/common/cachebust-url.d.ts.map +1 -0
  15. package/src/common/censorHTMLstring.d.ts +3 -0
  16. package/src/common/censorHTMLstring.d.ts.map +1 -0
  17. package/src/common/censorHTMLtree.d.ts +2 -0
  18. package/src/common/censorHTMLtree.d.ts.map +1 -0
  19. package/src/common/censorJSONTree.d.ts +2 -0
  20. package/src/common/censorJSONTree.d.ts.map +1 -0
  21. package/src/common/connectivity-test.d.ts +4 -0
  22. package/src/common/connectivity-test.d.ts.map +1 -0
  23. package/src/common/defer.d.ts +7 -0
  24. package/src/common/defer.d.ts.map +1 -0
  25. package/src/common/find-parent.d.ts +2 -0
  26. package/src/common/find-parent.d.ts.map +1 -0
  27. package/src/common/get-extension-id.d.ts +2 -0
  28. package/src/common/get-extension-id.d.ts.map +1 -0
  29. package/src/common/get-or-fail.d.ts +7 -0
  30. package/src/common/get-or-fail.d.ts.map +1 -0
  31. package/src/common/get-session-id.d.ts +2 -0
  32. package/src/common/get-session-id.d.ts.map +1 -0
  33. package/src/common/get-stack-trace.d.ts +2 -0
  34. package/src/common/get-stack-trace.d.ts.map +1 -0
  35. package/src/common/html-to-text.d.ts +2 -0
  36. package/src/common/html-to-text.d.ts.map +1 -0
  37. package/src/common/isElementVisible.d.ts +2 -0
  38. package/src/common/isElementVisible.d.ts.map +1 -0
  39. package/src/common/load-script.d.ts +7 -0
  40. package/src/common/load-script.d.ts.map +1 -0
  41. package/src/common/log-error.d.ts +11 -0
  42. package/src/common/log-error.d.ts.map +1 -0
  43. package/src/common/quoted-split.d.ts +2 -0
  44. package/src/common/quoted-split.d.ts.map +1 -0
  45. package/src/common/rate-limit-queuer.d.ts +2 -0
  46. package/src/common/rate-limit-queuer.d.ts.map +1 -0
  47. package/src/common/rate-limit.d.ts +2 -0
  48. package/src/common/rate-limit.d.ts.map +1 -0
  49. package/src/common/version.d.ts +2 -0
  50. package/src/common/version.d.ts.map +1 -0
  51. package/src/inboxsdk-js/check-requirements.js +7 -0
  52. package/src/inboxsdk-js/header.js +18 -0
  53. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +10 -0
  54. package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +5 -0
  55. package/src/inboxsdk-js/inboxsdk-REMOTE.js +3 -0
  56. package/src/inboxsdk-js/inboxsdk-TEST.js +5 -0
  57. package/src/inboxsdk-js/inboxsdk.js +41 -0
  58. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +19 -0
  59. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts +8 -0
  60. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts.map +1 -0
  61. package/src/inboxsdk.d.ts +786 -0
  62. package/src/injected-js/gmail/constants.d.ts +14 -0
  63. package/src/injected-js/gmail/constants.d.ts.map +1 -0
  64. package/src/injected-js/gmail/modify-suggestions.d.ts +24 -0
  65. package/src/injected-js/gmail/modify-suggestions.d.ts.map +1 -0
  66. package/src/injected-js/gmail/modify-suggestions.test.js +21 -0
  67. package/src/injected-js/gmail/setup-gmail-interceptor.d.ts +4 -0
  68. package/src/injected-js/gmail/setup-gmail-interceptor.js +1185 -0
  69. package/src/injected-js/gmail/setup-gmonkey-handler.d.ts +5 -0
  70. package/src/injected-js/gmail/setup-gmonkey-handler.d.ts.map +1 -0
  71. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts +28 -0
  72. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts.map +1 -0
  73. package/src/injected-js/gmail/sync-compose-processor.d.ts +16 -0
  74. package/src/injected-js/gmail/sync-compose-processor.d.ts.map +1 -0
  75. package/src/injected-js/gmail/sync-compose-request-processor.d.ts +4 -0
  76. package/src/injected-js/gmail/sync-compose-request-processor.d.ts.map +1 -0
  77. package/src/injected-js/gmail/sync-compose-request-processor.test.js +90 -0
  78. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +96 -0
  79. package/src/injected-js/gmail/thread-identifier/index.js +157 -0
  80. package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +72 -0
  81. package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +57 -0
  82. package/src/injected-js/inbox/setupAjaxInterceptor.js +268 -0
  83. package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +80 -0
  84. package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +51 -0
  85. package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +29 -0
  86. package/src/injected-js/injected-logger.d.ts +3 -0
  87. package/src/injected-js/injected-logger.d.ts.map +1 -0
  88. package/src/injected-js/main.js +70 -0
  89. package/src/injected-js/message-metadata-holder.js +141 -0
  90. package/src/injected-js/setup-data-exposer.js +187 -0
  91. package/src/injected-js/setup-error-silencer.js +25 -0
  92. package/src/injected-js/setup-event-reemitter.js +52 -0
  93. package/src/injected-js/setupCustomViewEventAssassin.d.ts +2 -0
  94. package/src/injected-js/setupCustomViewEventAssassin.d.ts.map +1 -0
  95. package/src/injected-js/setupInboxCustomViewLinkFixer.js +31 -0
  96. package/src/injected-js/setupPushStateListener.js +16 -0
  97. package/src/injected-js/xhr-helper.js +86 -0
  98. package/src/injected-js/xhr-proxy-factory.js +739 -0
  99. package/src/injected-js/xhr-proxy-factory.test.js +1219 -0
  100. package/src/platform-implementation-js/constants/nav-item-types.d.ts +17 -0
  101. package/src/platform-implementation-js/constants/nav-item-types.d.ts.map +1 -0
  102. package/src/platform-implementation-js/constants/router.js +53 -0
  103. package/src/platform-implementation-js/constants/toolbars.js +7 -0
  104. package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +22 -0
  105. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +214 -0
  106. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts +5 -0
  107. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts.map +1 -0
  108. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts +5 -0
  109. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts.map +1 -0
  110. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.d.ts +6 -0
  111. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.d.ts.map +1 -0
  112. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.d.ts +4 -0
  113. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.d.ts.map +1 -0
  114. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +21 -0
  115. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +78 -0
  116. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.d.ts +2 -0
  117. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.d.ts.map +1 -0
  118. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +70 -0
  119. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +43 -0
  120. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.d.ts +3 -0
  121. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.d.ts.map +1 -0
  122. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.d.ts +3 -0
  123. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.d.ts.map +1 -0
  124. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +33 -0
  125. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +38 -0
  126. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +76 -0
  127. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +61 -0
  128. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +72 -0
  129. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts +2 -0
  130. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts.map +1 -0
  131. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +226 -0
  132. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +27 -0
  133. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.d.ts +5 -0
  134. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.d.ts.map +1 -0
  135. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +23 -0
  136. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +92 -0
  137. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +30 -0
  138. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +207 -0
  139. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +162 -0
  140. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +194 -0
  141. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +233 -0
  142. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +30 -0
  143. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +79 -0
  144. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +516 -0
  145. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +404 -0
  146. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +33 -0
  147. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +50 -0
  148. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +45 -0
  149. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +123 -0
  150. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +171 -0
  151. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts +2 -0
  152. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts.map +1 -0
  153. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +69 -0
  154. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +79 -0
  155. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +108 -0
  156. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +1001 -0
  157. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.d.ts +4 -0
  158. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.d.ts.map +1 -0
  159. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.d.ts +3 -0
  160. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.d.ts.map +1 -0
  161. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts +46 -0
  162. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts.map +1 -0
  163. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.d.ts +33 -0
  164. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.d.ts.map +1 -0
  165. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.d.ts +56 -0
  166. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.d.ts.map +1 -0
  167. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.d.ts +43 -0
  168. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.d.ts.map +1 -0
  169. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.d.ts +3 -0
  170. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.d.ts.map +1 -0
  171. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +98 -0
  172. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.d.ts +4 -0
  173. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.d.ts.map +1 -0
  174. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.d.ts +4 -0
  175. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.d.ts.map +1 -0
  176. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts +43 -0
  177. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts.map +1 -0
  178. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +133 -0
  179. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +162 -0
  180. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +39 -0
  181. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +47 -0
  182. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +33 -0
  183. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +1048 -0
  184. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +27 -0
  185. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +215 -0
  186. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +141 -0
  187. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +422 -0
  188. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +141 -0
  189. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +34 -0
  190. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +909 -0
  191. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +197 -0
  192. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +76 -0
  193. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +34 -0
  194. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +46 -0
  195. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +97 -0
  196. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.d.ts +23 -0
  197. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.d.ts.map +1 -0
  198. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +125 -0
  199. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.d.ts +3 -0
  200. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.d.ts.map +1 -0
  201. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +22 -0
  202. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +29 -0
  203. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +19 -0
  204. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +82 -0
  205. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +67 -0
  206. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +151 -0
  207. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts +4 -0
  208. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts.map +1 -0
  209. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +20 -0
  210. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +31 -0
  211. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +30 -0
  212. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts +5 -0
  213. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts.map +1 -0
  214. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +33 -0
  215. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.d.ts +50 -0
  216. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.d.ts.map +1 -0
  217. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +35 -0
  218. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +533 -0
  219. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +29 -0
  220. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +92 -0
  221. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.d.ts +8 -0
  222. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.d.ts.map +1 -0
  223. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +28 -0
  224. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.d.ts +4 -0
  225. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.d.ts.map +1 -0
  226. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.d.ts +4 -0
  227. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.d.ts.map +1 -0
  228. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +177 -0
  229. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +28 -0
  230. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.d.ts +119 -0
  231. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +1938 -0
  232. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts +6 -0
  233. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts.map +1 -0
  234. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +85 -0
  235. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +950 -0
  236. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts +107 -0
  237. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts.map +1 -0
  238. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +125 -0
  239. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +601 -0
  240. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +309 -0
  241. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.d.ts +16 -0
  242. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.d.ts.map +1 -0
  243. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +1287 -0
  244. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +127 -0
  245. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +744 -0
  246. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +349 -0
  247. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +49 -0
  248. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +893 -0
  249. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +591 -0
  250. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +360 -0
  251. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.d.ts +10 -0
  252. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.d.ts.map +1 -0
  253. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.d.ts +61 -0
  254. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.d.ts.map +1 -0
  255. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts +18 -0
  256. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts.map +1 -0
  257. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts +18 -0
  258. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts.map +1 -0
  259. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +32 -0
  260. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts +29 -0
  261. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts.map +1 -0
  262. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.d.ts +8 -0
  263. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.d.ts.map +1 -0
  264. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.d.ts +5 -0
  265. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.d.ts.map +1 -0
  266. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +57 -0
  267. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.d.ts +9 -0
  268. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.d.ts.map +1 -0
  269. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +148 -0
  270. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +179 -0
  271. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +246 -0
  272. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +504 -0
  273. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +109 -0
  274. package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +9 -0
  275. package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +56 -0
  276. package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +73 -0
  277. package/src/platform-implementation-js/dom-driver/inbox/createLink.js +21 -0
  278. package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +30 -0
  279. package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +22 -0
  280. package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +49 -0
  281. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +33 -0
  282. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +85 -0
  283. package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +33 -0
  284. package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +220 -0
  285. package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +97 -0
  286. package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +30 -0
  287. package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +28 -0
  288. package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +60 -0
  289. package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +152 -0
  290. package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +121 -0
  291. package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +42 -0
  292. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +171 -0
  293. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +74 -0
  294. package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +43 -0
  295. package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +29 -0
  296. package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +156 -0
  297. package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +1164 -0
  298. package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +75 -0
  299. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +15 -0
  300. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +25 -0
  301. package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +42 -0
  302. package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +452 -0
  303. package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +317 -0
  304. package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +251 -0
  305. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +76 -0
  306. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +94 -0
  307. package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +103 -0
  308. package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +400 -0
  309. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +105 -0
  310. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +72 -0
  311. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +362 -0
  312. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +236 -0
  313. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +75 -0
  314. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +252 -0
  315. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +108 -0
  316. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +74 -0
  317. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +55 -0
  318. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +144 -0
  319. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +1027 -0
  320. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +97 -0
  321. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +43 -0
  322. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +386 -0
  323. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +26 -0
  324. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +82 -0
  325. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +348 -0
  326. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +153 -0
  327. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +123 -0
  328. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +413 -0
  329. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +308 -0
  330. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +193 -0
  331. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +143 -0
  332. package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +452 -0
  333. package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +40 -0
  334. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +52 -0
  335. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +73 -0
  336. package/src/platform-implementation-js/driver-common/getAccountUrlPart.d.ts +2 -0
  337. package/src/platform-implementation-js/driver-common/getAccountUrlPart.d.ts.map +1 -0
  338. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +30 -0
  339. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +61 -0
  340. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.d.ts +12 -0
  341. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.d.ts.map +1 -0
  342. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +32 -0
  343. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.d.ts +9 -0
  344. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.d.ts.map +1 -0
  345. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +21 -0
  346. package/src/platform-implementation-js/driver-common/gmailAjax.d.ts +5 -0
  347. package/src/platform-implementation-js/driver-common/gmailAjax.d.ts.map +1 -0
  348. package/src/platform-implementation-js/driver-common/inboxAjax.js +8 -0
  349. package/src/platform-implementation-js/driver-common/render-custom-icon.d.ts +2 -0
  350. package/src/platform-implementation-js/driver-common/render-custom-icon.d.ts.map +1 -0
  351. package/src/platform-implementation-js/driver-common/requestGmailThread.js +35 -0
  352. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +408 -0
  353. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +197 -0
  354. package/src/platform-implementation-js/driver-common/update-icon.d.ts +8 -0
  355. package/src/platform-implementation-js/driver-common/update-icon.d.ts.map +1 -0
  356. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.d.ts +133 -0
  357. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +114 -0
  358. package/src/platform-implementation-js/driver-interfaces/driver.d.ts +142 -0
  359. package/src/platform-implementation-js/driver-interfaces/driver.js +131 -0
  360. package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +49 -0
  361. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +29 -0
  362. package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +32 -0
  363. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +11 -0
  364. package/src/platform-implementation-js/lib/ErrorCollector.d.ts +18 -0
  365. package/src/platform-implementation-js/lib/ErrorCollector.d.ts.map +1 -0
  366. package/src/platform-implementation-js/lib/Membrane.d.ts +13 -0
  367. package/src/platform-implementation-js/lib/Membrane.d.ts.map +1 -0
  368. package/src/platform-implementation-js/lib/ScrollableContainByScreen.d.ts +9 -0
  369. package/src/platform-implementation-js/lib/ScrollableContainByScreen.d.ts.map +1 -0
  370. package/src/platform-implementation-js/lib/array-to-lifetimes.js +67 -0
  371. package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +171 -0
  372. package/src/platform-implementation-js/lib/attemptWithRetries.d.ts +2 -0
  373. package/src/platform-implementation-js/lib/attemptWithRetries.d.ts.map +1 -0
  374. package/src/platform-implementation-js/lib/common-page-communicator.d.ts +20 -0
  375. package/src/platform-implementation-js/lib/common-page-communicator.d.ts.map +1 -0
  376. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +55 -0
  377. package/src/platform-implementation-js/lib/css-selector-escape.js +8 -0
  378. package/src/platform-implementation-js/lib/delay-asap.d.ts +3 -0
  379. package/src/platform-implementation-js/lib/delay-asap.d.ts.map +1 -0
  380. package/src/platform-implementation-js/lib/delay-idle.d.ts +3 -0
  381. package/src/platform-implementation-js/lib/delay-idle.d.ts.map +1 -0
  382. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.d.ts +2 -0
  383. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.d.ts.map +1 -0
  384. package/src/platform-implementation-js/lib/dom/element-view-mapper.js +20 -0
  385. package/src/platform-implementation-js/lib/dom/generic-button-view.d.ts +13 -0
  386. package/src/platform-implementation-js/lib/dom/generic-button-view.d.ts.map +1 -0
  387. package/src/platform-implementation-js/lib/dom/get-insert-before-element.d.ts +2 -0
  388. package/src/platform-implementation-js/lib/dom/get-insert-before-element.d.ts.map +1 -0
  389. package/src/platform-implementation-js/lib/dom/get-selection.js +61 -0
  390. package/src/platform-implementation-js/lib/dom/insert-element-in-order.d.ts +2 -0
  391. package/src/platform-implementation-js/lib/dom/insert-element-in-order.d.ts.map +1 -0
  392. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +113 -0
  393. package/src/platform-implementation-js/lib/dom/is-node-in-range.js +19 -0
  394. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.d.ts +3 -0
  395. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.d.ts.map +1 -0
  396. package/src/platform-implementation-js/lib/dom/make-element-child-stream.d.ts +8 -0
  397. package/src/platform-implementation-js/lib/dom/make-element-child-stream.d.ts.map +1 -0
  398. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.d.ts +4 -0
  399. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.d.ts.map +1 -0
  400. package/src/platform-implementation-js/lib/dom/make-element-view-stream.d.ts +8 -0
  401. package/src/platform-implementation-js/lib/dom/make-element-view-stream.d.ts.map +1 -0
  402. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.d.ts +3 -0
  403. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.d.ts.map +1 -0
  404. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.d.ts +3 -0
  405. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.d.ts.map +1 -0
  406. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +19 -0
  407. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.d.ts +7 -0
  408. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.d.ts.map +1 -0
  409. package/src/platform-implementation-js/lib/dom/parentNodes.d.ts +2 -0
  410. package/src/platform-implementation-js/lib/dom/parentNodes.d.ts.map +1 -0
  411. package/src/platform-implementation-js/lib/dom/querySelectorOne.js +16 -0
  412. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.d.ts +2 -0
  413. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.d.ts.map +1 -0
  414. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.d.ts +2 -0
  415. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.d.ts.map +1 -0
  416. package/src/platform-implementation-js/lib/dom/set-css.js +21 -0
  417. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +14 -0
  418. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +98 -0
  419. package/src/platform-implementation-js/lib/dom/simulate-key.d.ts +2 -0
  420. package/src/platform-implementation-js/lib/dom/simulate-key.d.ts.map +1 -0
  421. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.d.ts +4 -0
  422. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.d.ts.map +1 -0
  423. package/src/platform-implementation-js/lib/dom/trigger-relay-event.d.ts +12 -0
  424. package/src/platform-implementation-js/lib/dom/trigger-relay-event.d.ts.map +1 -0
  425. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts +3 -0
  426. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts.map +1 -0
  427. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +42 -0
  428. package/src/platform-implementation-js/lib/fake-window-resize.d.ts +2 -0
  429. package/src/platform-implementation-js/lib/fake-window-resize.d.ts.map +1 -0
  430. package/src/platform-implementation-js/lib/from-event-target-capture.d.ts +8 -0
  431. package/src/platform-implementation-js/lib/from-event-target-capture.d.ts.map +1 -0
  432. package/src/platform-implementation-js/lib/fromEventsWithOptions.d.ts +4 -0
  433. package/src/platform-implementation-js/lib/fromEventsWithOptions.d.ts.map +1 -0
  434. package/src/platform-implementation-js/lib/handle-compose-link-chips.js +179 -0
  435. package/src/platform-implementation-js/lib/handler-registry.d.ts +13 -0
  436. package/src/platform-implementation-js/lib/handler-registry.d.ts.map +1 -0
  437. package/src/platform-implementation-js/lib/idMap.d.ts +3 -0
  438. package/src/platform-implementation-js/lib/idMap.d.ts.map +1 -0
  439. package/src/platform-implementation-js/lib/imageRequest.d.ts +2 -0
  440. package/src/platform-implementation-js/lib/imageRequest.d.ts.map +1 -0
  441. package/src/platform-implementation-js/lib/incrementName.d.ts +2 -0
  442. package/src/platform-implementation-js/lib/incrementName.d.ts.map +1 -0
  443. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts +2 -0
  444. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts.map +1 -0
  445. package/src/platform-implementation-js/lib/inject-script.d.ts +3 -0
  446. package/src/platform-implementation-js/lib/inject-script.d.ts.map +1 -0
  447. package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +66 -0
  448. package/src/platform-implementation-js/lib/is-valid-app-id.d.ts +2 -0
  449. package/src/platform-implementation-js/lib/is-valid-app-id.d.ts.map +1 -0
  450. package/src/platform-implementation-js/lib/is-valid-email.d.ts +2 -0
  451. package/src/platform-implementation-js/lib/is-valid-email.d.ts.map +1 -0
  452. package/src/platform-implementation-js/lib/isNotNil.d.ts +2 -0
  453. package/src/platform-implementation-js/lib/isNotNil.d.ts.map +1 -0
  454. package/src/platform-implementation-js/lib/isStreakAppId.d.ts +2 -0
  455. package/src/platform-implementation-js/lib/isStreakAppId.d.ts.map +1 -0
  456. package/src/platform-implementation-js/lib/logger.d.ts +29 -0
  457. package/src/platform-implementation-js/lib/logger.d.ts.map +1 -0
  458. package/src/platform-implementation-js/lib/make-revocable-function.js +40 -0
  459. package/src/platform-implementation-js/lib/make-revocable-function.test.js +63 -0
  460. package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +20 -0
  461. package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +28 -0
  462. package/src/platform-implementation-js/lib/persistent-queue.d.ts +14 -0
  463. package/src/platform-implementation-js/lib/persistent-queue.d.ts.map +1 -0
  464. package/src/platform-implementation-js/lib/populateRouteID.js +23 -0
  465. package/src/platform-implementation-js/lib/populateRouteID.test.js +31 -0
  466. package/src/platform-implementation-js/lib/react/ElementContainer.js +35 -0
  467. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +10 -0
  468. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +50 -0
  469. package/src/platform-implementation-js/lib/routeIDmatchesHash.js +20 -0
  470. package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +23 -0
  471. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts +6 -0
  472. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts.map +1 -0
  473. package/src/platform-implementation-js/lib/shared-style.js +22 -0
  474. package/src/platform-implementation-js/lib/stopper-pool.d.ts +11 -0
  475. package/src/platform-implementation-js/lib/stopper-pool.d.ts.map +1 -0
  476. package/src/platform-implementation-js/lib/stream-wait-for.d.ts +10 -0
  477. package/src/platform-implementation-js/lib/stream-wait-for.d.ts.map +1 -0
  478. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.d.ts +7 -0
  479. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +18 -0
  480. package/src/platform-implementation-js/lib/toLiveSet.js +31 -0
  481. package/src/platform-implementation-js/lib/wait-for.d.ts +2 -0
  482. package/src/platform-implementation-js/lib/wait-for.d.ts.map +1 -0
  483. package/src/platform-implementation-js/lib/waitForAsync.d.ts +2 -0
  484. package/src/platform-implementation-js/lib/waitForAsync.d.ts.map +1 -0
  485. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +8 -0
  486. package/src/platform-implementation-js/main.js +83 -0
  487. package/src/platform-implementation-js/namespaces/app-menu.d.ts +38 -0
  488. package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +1 -0
  489. package/src/platform-implementation-js/namespaces/butter-bar.d.ts +11 -0
  490. package/src/platform-implementation-js/namespaces/butter-bar.d.ts.map +1 -0
  491. package/src/platform-implementation-js/namespaces/compose.js +88 -0
  492. package/src/platform-implementation-js/namespaces/conversations.js +156 -0
  493. package/src/platform-implementation-js/namespaces/global.js +51 -0
  494. package/src/platform-implementation-js/namespaces/keyboard.js +48 -0
  495. package/src/platform-implementation-js/namespaces/lists.js +58 -0
  496. package/src/platform-implementation-js/namespaces/modal.js +45 -0
  497. package/src/platform-implementation-js/namespaces/nav-menu.js +55 -0
  498. package/src/platform-implementation-js/namespaces/router.js +217 -0
  499. package/src/platform-implementation-js/namespaces/search.js +36 -0
  500. package/src/platform-implementation-js/namespaces/toolbars.js +195 -0
  501. package/src/platform-implementation-js/namespaces/user.js +67 -0
  502. package/src/platform-implementation-js/namespaces/widgets.js +89 -0
  503. package/src/platform-implementation-js/platform-implementation.d.ts +133 -0
  504. package/src/platform-implementation-js/platform-implementation.js +309 -0
  505. package/src/platform-implementation-js/views/SimpleElementView.d.ts +8 -0
  506. package/src/platform-implementation-js/views/SimpleElementView.d.ts.map +1 -0
  507. package/src/platform-implementation-js/views/app-menu-item-view.d.ts +23 -0
  508. package/src/platform-implementation-js/views/app-menu-item-view.d.ts.map +1 -0
  509. package/src/platform-implementation-js/views/app-toolbar-button-view.js +73 -0
  510. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts +50 -0
  511. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts.map +1 -0
  512. package/src/platform-implementation-js/views/collapsible-section-view.js +88 -0
  513. package/src/platform-implementation-js/views/compose-button-view.d.ts +25 -0
  514. package/src/platform-implementation-js/views/compose-button-view.d.ts.map +1 -0
  515. package/src/platform-implementation-js/views/compose-view.d.ts +90 -0
  516. package/src/platform-implementation-js/views/compose-view.d.ts.map +1 -0
  517. package/src/platform-implementation-js/views/content-panel-view.js +53 -0
  518. package/src/platform-implementation-js/views/conversations/attachment-card-view.js +69 -0
  519. package/src/platform-implementation-js/views/conversations/custom-message-view.js +165 -0
  520. package/src/platform-implementation-js/views/conversations/message-view.js +288 -0
  521. package/src/platform-implementation-js/views/conversations/thread-view.js +156 -0
  522. package/src/platform-implementation-js/views/keyboard-shortcut-handle.d.ts +8 -0
  523. package/src/platform-implementation-js/views/keyboard-shortcut-handle.d.ts.map +1 -0
  524. package/src/platform-implementation-js/views/native-nav-item-view.js +98 -0
  525. package/src/platform-implementation-js/views/nav-item-view.d.ts +24 -0
  526. package/src/platform-implementation-js/views/nav-item-view.js +191 -0
  527. package/src/platform-implementation-js/views/route-view/custom-route-view.js +32 -0
  528. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +40 -0
  529. package/src/platform-implementation-js/views/route-view/list-route-view.js +78 -0
  530. package/src/platform-implementation-js/views/route-view/route-view.js +68 -0
  531. package/src/platform-implementation-js/views/section-view.js +77 -0
  532. package/src/platform-implementation-js/views/thread-row-view.js +117 -0
  533. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts +26 -0
  534. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts.map +1 -0
  535. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.d.ts +23 -0
  536. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.d.ts.map +1 -0
  537. package/src/platform-implementation-js/widgets/buttons/dropdown-view.d.ts +22 -0
  538. package/src/platform-implementation-js/widgets/buttons/dropdown-view.d.ts.map +1 -0
  539. package/src/platform-implementation-js/widgets/drawer-view.js +61 -0
  540. package/src/platform-implementation-js/widgets/modal-view.js +134 -0
  541. package/src/platform-implementation-js/widgets/mole-view.js +47 -0
  542. package/src/platform-implementation-js/widgets/top-message-bar-view.js +20 -0
  543. package/src/types/combokeys-capture.d.ts +1 -0
  544. package/src/types/gulp-add-src.d.ts +7 -0
  545. package/src/types/gulp-dest-atomic.d.ts +4 -0
  546. package/src/types/gulp-streamify.d.ts +1 -0
  547. package/src/types/gulp-terser.d.ts +4 -0
  548. package/src/types/jest-puppeteer.d.ts +11 -0
  549. package/src/types/notp.d.ts +8 -0
  550. package/src/types/sha.d.ts +36 -0
  551. package/src/types/stdio.d.ts +6 -0
  552. package/src/types/thirty-two.d.ts +6 -0
@@ -0,0 +1,317 @@
1
+ /* @flow */
2
+
3
+ import type InboxDriver from './inbox-driver';
4
+ import type { AutocompleteSearchResult } from '../../../injected-js/gmail/modify-suggestions';
5
+
6
+ import Kefir from 'kefir';
7
+ import kefirBus from 'kefir-bus';
8
+ import kefirStopper from 'kefir-stopper';
9
+ import toItemWithLifetimeStream from '../../lib/toItemWithLifetimeStream';
10
+ import makeMutationObserverChunkedStream from '../../lib/dom/make-mutation-observer-chunked-stream';
11
+ import fromEventTargetCapture from '../../lib/from-event-target-capture';
12
+ import insertElementInOrder from '../../lib/dom/insert-element-in-order';
13
+ import searchBarParser from './detection/searchBar/parser';
14
+ import copyAndValidateAutocompleteResults from '../../lib/copyAndValidateAutocompleteResults';
15
+ import setupCustomAutocompleteSelectionHandling from './setupCustomAutocompleteSelectionHandling';
16
+ import autoHtml from 'auto-html';
17
+
18
+ const ORDERING_ATTR = 'data-inboxsdk-search-provider-count';
19
+ const DEFAULT_RESULT_ICON =
20
+ '//www.gstatic.com/images/icons/material/system/2x/search_black_24dp.png';
21
+
22
+ const getProviderOrder = () => {
23
+ const { documentElement } = document;
24
+ if (!documentElement) {
25
+ throw new Error();
26
+ }
27
+ const orderAttr = documentElement.getAttribute(ORDERING_ATTR);
28
+ const providerOrder = (orderAttr ? parseInt(orderAttr) + 1 : 0).toString();
29
+
30
+ documentElement.setAttribute(ORDERING_ATTR, providerOrder);
31
+
32
+ return providerOrder;
33
+ };
34
+
35
+ const handleResultChosen = ({ driver, searchInput, result, event }) => {
36
+ if (typeof result.onClick === 'function') {
37
+ result.onClick();
38
+ }
39
+
40
+ if (typeof result.externalURL === 'string') {
41
+ window.open(result.externalURL);
42
+ }
43
+
44
+ if (result.routeName && result.routeParams) {
45
+ driver.goto(result.routeName, result.routeParams);
46
+ }
47
+
48
+ if (typeof result.searchTerm === 'string') {
49
+ searchInput.value = result.searchTerm;
50
+ searchInput.dispatchEvent(new Event('input'));
51
+ }
52
+ };
53
+
54
+ const renderResultsList = ({
55
+ driver,
56
+ searchInput,
57
+ removalStream,
58
+ results,
59
+ providerOrder,
60
+ }) => {
61
+ const container = document.createElement('div');
62
+
63
+ container.setAttribute('data-order-hint', providerOrder);
64
+ container.classList.add('inboxsdk__search_suggestion_group');
65
+
66
+ results.forEach((result) => {
67
+ const listItem = document.createElement('li');
68
+
69
+ const description =
70
+ result.description || result.descriptionHTML
71
+ ? autoHtml`
72
+ <span class="inboxsdk__search_suggestion_desc">
73
+ ${result.description || { __html: (result.descriptionHTML: any) }}
74
+ </span>
75
+ `
76
+ : '';
77
+
78
+ listItem.classList.add('inboxsdk__search_suggestion');
79
+ listItem.innerHTML = autoHtml`
80
+ <img src="${result.iconUrl || DEFAULT_RESULT_ICON}">
81
+ <span>
82
+ <span class="inboxsdk__search_suggestion_name" role="option">
83
+ ${result.name || { __html: (result.nameHTML: any) }}
84
+ </span>
85
+ ${{ __html: description }}
86
+ </span>
87
+ `;
88
+
89
+ Kefir.fromEvents(listItem, 'click')
90
+ .takeUntilBy(removalStream)
91
+ .onValue((event: MouseEvent) =>
92
+ handleResultChosen({ driver, searchInput, result, event })
93
+ );
94
+
95
+ container.appendChild(listItem);
96
+ });
97
+
98
+ return container;
99
+ };
100
+
101
+ export default function registerSearchSuggestionsProvider(
102
+ driver: InboxDriver,
103
+ handler: (string) => Promise<Array<AutocompleteSearchResult>>
104
+ ) {
105
+ const stopper = kefirStopper();
106
+ const providerOrder = getProviderOrder();
107
+
108
+ toItemWithLifetimeStream(driver.getTagTree().getAllByTag('searchBar'))
109
+ .flatMap(({ el, removalStream }) => {
110
+ const { searchInput } = searchBarParser(el.getValue()).elements;
111
+ if (searchInput instanceof HTMLInputElement) {
112
+ return Kefir.constant({
113
+ searchInput,
114
+ searchInputRemovalStream: removalStream,
115
+ });
116
+ } else {
117
+ return Kefir.never();
118
+ }
119
+ })
120
+ .flatMap(({ searchInput, searchInputRemovalStream }) =>
121
+ toItemWithLifetimeStream(
122
+ driver.getTagTree().getAllByTag('searchAutocompleteResults')
123
+ )
124
+ .takeUntilBy(searchInputRemovalStream)
125
+ .map(({ el, removalStream }) => ({
126
+ searchInput,
127
+ searchInputRemovalStream,
128
+ resultsEl: el.getValue(),
129
+ resultsElRemovalStream: removalStream,
130
+ }))
131
+ )
132
+ .flatMap(
133
+ ({
134
+ searchInput,
135
+ searchInputRemovalStream,
136
+ resultsEl,
137
+ resultsElRemovalStream,
138
+ }) => {
139
+ const inputs: Kefir.Observable<{ target: HTMLInputElement } & Event> =
140
+ Kefir.fromEvents(searchInput, 'input')
141
+ .takeUntilBy(searchInputRemovalStream)
142
+ .takeUntilBy(resultsElRemovalStream);
143
+
144
+ const enterAndTabPresses: Kefir.Observable<KeyboardEvent> =
145
+ Kefir.fromEvents(searchInput, 'keydown')
146
+ .filter(({ keyCode }) => keyCode === 13 || keyCode === 9)
147
+ .takeUntilBy(searchInputRemovalStream)
148
+ .takeUntilBy(resultsElRemovalStream);
149
+
150
+ return inputs.map((event) => ({
151
+ event,
152
+ searchInput,
153
+ resultsEl,
154
+ inputStream: inputs,
155
+ enterAndTabPresses,
156
+ resultsElRemovalStream,
157
+ }));
158
+ }
159
+ )
160
+ .flatMapLatest((item) => {
161
+ const suggestionsResponse = driver
162
+ .getPageCommunicator()
163
+ .ajaxInterceptStream.filter(
164
+ ({ type }) => type === 'searchSuggestionsReceieved'
165
+ );
166
+
167
+ const removalStream = Kefir.merge([
168
+ // Handle cleanup when a new search query is entered. We want to wait
169
+ // to remove our old results until *after* Inbox's results from the new
170
+ // query have come back, since that will allow our modifications to
171
+ // switch from old -> new in sync with Inbox's native suggestions.
172
+ // If we didn't wait on `suggestionsResponse` to trigger cleanup,
173
+ // Our modifications would disappear the moment the user started typing,
174
+ // which ends up looking jarring and inconsistent with Inbox's results
175
+ // which stick around until the new results are ready.
176
+ item.inputStream.take(1).flatMap(() => suggestionsResponse),
177
+
178
+ // Handle cleanup when the user deletes their entire search query.
179
+ item.inputStream.filter(({ target: { value } }) => value === ''),
180
+ item.resultsElRemovalStream,
181
+ ]).take(1);
182
+
183
+ return Kefir.combine([
184
+ Kefir.fromPromise(Promise.resolve(handler(item.event.target.value))),
185
+ // Wait to send results to the UI until Inbox's results have come back
186
+ // to avoid rendering too soon.
187
+ suggestionsResponse.take(1),
188
+ ])
189
+ .takeUntilBy(removalStream)
190
+ .map(([results, _ignored]: [Array<AutocompleteSearchResult>, any]) => ({
191
+ ...item,
192
+ removalStream,
193
+ results,
194
+ }));
195
+ })
196
+ .takeUntilBy(stopper)
197
+ .flatMap(
198
+ ({
199
+ resultsEl,
200
+ searchInput,
201
+ resultsElRemovalStream,
202
+ removalStream,
203
+ enterAndTabPresses,
204
+ results,
205
+ }) => {
206
+ try {
207
+ const validatedResults = copyAndValidateAutocompleteResults(
208
+ driver,
209
+ results
210
+ );
211
+
212
+ return Kefir.constant({
213
+ resultsEl,
214
+ searchInput,
215
+ resultsElRemovalStream,
216
+ removalStream,
217
+ enterAndTabPresses,
218
+ results: validatedResults,
219
+ });
220
+ } catch (error) {
221
+ return Kefir.constantError(error);
222
+ }
223
+ }
224
+ )
225
+ .filter(({ results }) => results.length > 0)
226
+ .onError((error) => driver.getLogger().error(error))
227
+ .onValue(
228
+ ({
229
+ resultsEl,
230
+ searchInput,
231
+ resultsElRemovalStream,
232
+ removalStream,
233
+ enterAndTabPresses,
234
+ results,
235
+ }) => {
236
+ setupCustomAutocompleteSelectionHandling({
237
+ resultsEl,
238
+ resultsElRemovalStream,
239
+ searchInput,
240
+ });
241
+
242
+ const suggestionsElement = renderResultsList({
243
+ driver,
244
+ searchInput,
245
+ removalStream,
246
+ results,
247
+ providerOrder,
248
+ });
249
+
250
+ insertElementInOrder(resultsEl, suggestionsElement);
251
+
252
+ // NOTE: Because we're manually overriding the 'display' property, we've
253
+ // basically taken responsibility for showing/hiding `resultsEl`
254
+ // since Inbox no longer knows when the element is truly visible.
255
+ // When we want to show results for a search term but Inbox doesn't have
256
+ // any results, we need to force the results element to be displayed.
257
+ // When Inbox hides the element it also removes a class that applies
258
+ // some padding adjustments, so we have to force that as well.
259
+ resultsEl.style.display = 'block';
260
+ resultsEl.style.padding = '6px 0';
261
+
262
+ removalStream.onValue(() => {
263
+ suggestionsElement.remove();
264
+
265
+ // Because we've mostly overridden Inbox's native show/hide logic we're
266
+ // responsible for hiding `resultsEl` in a couple removal cases:
267
+ // 1) when we go directly from only custom results to having
268
+ // no text in the search box.
269
+ // 2) when there are only custom results and the user subsequently
270
+ // enters a search that returns no results of any type.
271
+ if (searchInput.value === '' || resultsEl.matches(':empty')) {
272
+ resultsEl.style.display = 'none';
273
+ }
274
+ });
275
+
276
+ // We have to take over responsibility for hiding `resultsEl` when
277
+ // the user presses enter or tab because our other overrides prevent Inbox
278
+ // from handling this sensibly.
279
+ enterAndTabPresses
280
+ .takeUntilBy(removalStream)
281
+ .take(1)
282
+ .onValue(() => {
283
+ resultsEl.style.display = 'none';
284
+ });
285
+
286
+ // When Inbox gets the *first* set of suggestions after opening search,
287
+ // it clears away the current children of the `resultsEl` element.
288
+ // When this happens, our modifications will get cleared away if
289
+ // we've already added them — this can happen if Inbox skips a turn of
290
+ // the event loop between getting the AJAX response back and rendering to
291
+ // the DOM. To handle this case, we watch `resultsEl` for mutations
292
+ // and re-add our modifications if they've been cleared.
293
+ // We also force `resultsEl` to show because the first time
294
+ // we display modifications that aren't accompanied by native results
295
+ // Inbox hides `resultsEl` after we force it to show. Because Inbox
296
+ // removes the previous search's results in the same event loop tick as
297
+ // hiding `resultsEl`, we can hook into the child element removal and
298
+ // re-show it before the hidden state gets painted to the screen.
299
+ // We need to stop this entire process when tab or enter is pressed,
300
+ // because if a custom result was selected when the key was pressed
301
+ // then Inbox will remove the native results that no longer match the
302
+ // search term — causing this observer to fire and subsequently
303
+ // re-show `resultsEl` just as we're trying to manually hide it.
304
+ makeMutationObserverChunkedStream(resultsEl, { childList: true })
305
+ .takeUntilBy(enterAndTabPresses)
306
+ .takeUntilBy(removalStream)
307
+ .onValue(() => {
308
+ resultsEl.style.display = 'block';
309
+ if (suggestionsElement.parentElement !== resultsEl) {
310
+ insertElementInOrder(resultsEl, suggestionsElement);
311
+ }
312
+ });
313
+ }
314
+ );
315
+
316
+ return () => stopper.destroy();
317
+ }
@@ -0,0 +1,251 @@
1
+ /* @flow */
2
+
3
+ import Kefir from 'kefir';
4
+ import fromEventTargetCapture from '../../lib/from-event-target-capture';
5
+ import closest from 'closest-ng';
6
+
7
+ const SELECTION_MASTER_ATTR = 'data-inboxsdk-selection-master-claimed';
8
+
9
+ const hasNativeResults = (resultsEl: HTMLElement) =>
10
+ resultsEl.querySelectorAll('li:not(.inboxsdk__search_suggestion)').length > 0;
11
+
12
+ const hasCustomResults = (resultsEl: HTMLElement) =>
13
+ resultsEl.querySelectorAll('.inboxsdk__search_suggestion').length > 0;
14
+
15
+ const getSelectedNativeResult = (resultsEl: HTMLElement) => {
16
+ const nativeResults = resultsEl.querySelectorAll(
17
+ 'li:not(.inboxsdk__search_suggestion)'
18
+ );
19
+
20
+ // Unfortunately there are no distinguishable features of a selected
21
+ // native result besides its background color... (ಥ﹏ಥ)
22
+ return Array.from(nativeResults).find((result) => {
23
+ const { backgroundColor }: { backgroundColor: string } =
24
+ getComputedStyle(result);
25
+
26
+ const colorValues = backgroundColor.match(/([\d.]+)/g);
27
+
28
+ return colorValues && parseFloat(colorValues[3]) > 0;
29
+ });
30
+ };
31
+
32
+ const selectFirstCustomResult = (resultsEl: HTMLElement) => {
33
+ const firstCustomResult = resultsEl.querySelector(
34
+ '.inboxsdk__search_suggestion_group:first-of-type > ' +
35
+ '.inboxsdk__search_suggestion:first-child'
36
+ );
37
+
38
+ firstCustomResult && firstCustomResult.classList.add('inboxsdk__selected');
39
+ };
40
+
41
+ const setupCustomResultHoverListeners = (resultsEl, resultsElRemovalStream) => {
42
+ Kefir.fromEvents(resultsEl, 'mouseover')
43
+ .takeUntilBy(resultsElRemovalStream)
44
+ .map(({ target }: { target: HTMLElement }) =>
45
+ closest(target, '.inboxsdk__search_suggestion:not(.inboxsdk__selected)')
46
+ )
47
+ .filter(Boolean)
48
+ .onValue((el) => {
49
+ const customResults = resultsEl.querySelectorAll(
50
+ '.inboxsdk__search_suggestion.inboxsdk__selected'
51
+ );
52
+
53
+ // Needed to ensure custom results selected via keyboard events
54
+ // have their selected state removed (since no mouseout event fires).
55
+ Array.from(customResults).forEach((result) =>
56
+ result.classList.remove('inboxsdk__selected')
57
+ );
58
+
59
+ el.classList.add('inboxsdk__selected');
60
+ });
61
+
62
+ Kefir.fromEvents(resultsEl, 'mouseout')
63
+ .takeUntilBy(resultsElRemovalStream)
64
+ .map(({ target }: { target: HTMLElement }) =>
65
+ closest(target, '.inboxsdk__search_suggestion.inboxsdk__selected')
66
+ )
67
+ .filter(Boolean)
68
+ .onValue((el) => el.classList.remove('inboxsdk__selected'));
69
+ };
70
+
71
+ export default function setupCustomAutocompleteSelectionHandling({
72
+ resultsEl,
73
+ resultsElRemovalStream,
74
+ searchInput,
75
+ }: {
76
+ resultsEl: HTMLElement,
77
+ resultsElRemovalStream: Kefir.Observable<any>,
78
+ searchInput: HTMLInputElement,
79
+ }): void {
80
+ if (resultsEl.hasAttribute(SELECTION_MASTER_ATTR)) {
81
+ return;
82
+ }
83
+
84
+ resultsEl.setAttribute(SELECTION_MASTER_ATTR, 'true');
85
+
86
+ // We need to be able to cancel up/down arrow events before Inbox gets them,
87
+ // but we only want to listen for events that happen while the search box
88
+ // is in focus (since that's when up/down arrows manipulate selection).
89
+ // As a result, we need to grab the search box's parent element so we can
90
+ // capture and cancel events prior to Inbox's listeners (and our own).
91
+ const searchInputParent = searchInput.parentElement;
92
+ if (!searchInputParent) {
93
+ throw new Error();
94
+ }
95
+
96
+ const keyboardEvents: Kefir.Observable<KeyboardEvent> =
97
+ fromEventTargetCapture(searchInputParent, 'keydown').takeUntilBy(
98
+ resultsElRemovalStream
99
+ );
100
+
101
+ const upArrowPresses = keyboardEvents.filter(({ keyCode }) => keyCode === 38);
102
+ const downArrowPresses = keyboardEvents.filter(
103
+ ({ keyCode }) => keyCode === 40
104
+ );
105
+ const enterPresses = keyboardEvents.filter(({ keyCode }) => keyCode === 13);
106
+
107
+ upArrowPresses.onValue((event) => {
108
+ const selectedNativeResult = getSelectedNativeResult(resultsEl);
109
+ const selectedCustomResult = resultsEl.querySelector(
110
+ '.inboxsdk__search_suggestion.inboxsdk__selected'
111
+ );
112
+ const customResultGroup =
113
+ selectedCustomResult &&
114
+ closest(selectedCustomResult, '.inboxsdk__search_suggestion_group');
115
+
116
+ if (selectedNativeResult) {
117
+ return;
118
+ }
119
+
120
+ if (
121
+ selectedCustomResult &&
122
+ customResultGroup &&
123
+ selectedCustomResult.matches(':first-child') &&
124
+ customResultGroup.matches(':first-of-type')
125
+ ) {
126
+ // If there are native results, Inbox will automatically select
127
+ // the last one when it sees this up arrow press, so all we need to do
128
+ // is remove the highlighting from our result. If there *aren't* any
129
+ // native results, then nothing will be selected, which is consistent
130
+ // with native behavior (hitting the up arrow with the first item selected
131
+ // leaves *nothing* selected).
132
+ selectedCustomResult.classList.remove('inboxsdk__selected');
133
+ } else if (hasCustomResults(resultsEl) && !selectedCustomResult) {
134
+ event.stopPropagation();
135
+
136
+ const lastCustomResult = resultsEl.querySelector(
137
+ '.inboxsdk__search_suggestion_group:last-of-type > ' +
138
+ '.inboxsdk__search_suggestion:last-child'
139
+ );
140
+
141
+ lastCustomResult && lastCustomResult.classList.add('inboxsdk__selected');
142
+ } else if (selectedCustomResult && customResultGroup) {
143
+ event.stopPropagation();
144
+ selectedCustomResult.classList.remove('inboxsdk__selected');
145
+
146
+ // The case where this is the first result in the first group
147
+ // has already been handled above, so if this check is true then
148
+ // the selected result is the first item in a non-first group.
149
+ if (selectedCustomResult.matches(':first-child')) {
150
+ const previousResultGroup = customResultGroup.previousElementSibling;
151
+ const customResultToSelect =
152
+ previousResultGroup &&
153
+ previousResultGroup.querySelector(
154
+ '.inboxsdk__search_suggestion:last-child'
155
+ );
156
+
157
+ customResultToSelect &&
158
+ customResultToSelect.classList.add('inboxsdk__selected');
159
+ } else {
160
+ const previousCustomResult =
161
+ selectedCustomResult.previousElementSibling;
162
+ previousCustomResult &&
163
+ previousCustomResult.classList.add('inboxsdk__selected');
164
+ }
165
+ }
166
+ });
167
+
168
+ downArrowPresses.onValue((event) => {
169
+ const selectedNativeResult = getSelectedNativeResult(resultsEl);
170
+ const selectedCustomResult = resultsEl.querySelector(
171
+ '.inboxsdk__search_suggestion.inboxsdk__selected'
172
+ );
173
+ const customResultGroup =
174
+ selectedCustomResult &&
175
+ closest(selectedCustomResult, '.inboxsdk__search_suggestion_group');
176
+
177
+ if (
178
+ selectedNativeResult &&
179
+ !selectedNativeResult.matches(':last-of-type')
180
+ ) {
181
+ return;
182
+ }
183
+
184
+ if (selectedNativeResult) {
185
+ selectFirstCustomResult(resultsEl);
186
+ } else if (
187
+ selectedCustomResult &&
188
+ customResultGroup &&
189
+ selectedCustomResult.matches(':last-child') &&
190
+ customResultGroup.matches(':last-of-type')
191
+ ) {
192
+ // Inbox's native behavior is to leave nothing selected when you hit
193
+ // the down arrow while the last item is selected, so we don't
194
+ // try to select any other results if the last custom result is currently
195
+ // selected.
196
+ event.stopPropagation();
197
+ selectedCustomResult.classList.remove('inboxsdk__selected');
198
+ } else if (!selectedCustomResult) {
199
+ // Inbox will automatically select the first native result if
200
+ // one exists.
201
+ if (hasNativeResults(resultsEl)) {
202
+ return;
203
+ }
204
+
205
+ // Theoretically we could stop propegation here, but inbox doesn't do
206
+ // anything with the event anyway given that there's no results to select.
207
+ selectFirstCustomResult(resultsEl);
208
+ } else if (selectedCustomResult && customResultGroup) {
209
+ event.stopPropagation();
210
+ selectedCustomResult.classList.remove('inboxsdk__selected');
211
+
212
+ // The case where this is the last result in the last group
213
+ // has already been handled above, so if this check is true then
214
+ // the selected result is the last item in a non-last group.
215
+ if (selectedCustomResult.matches(':last-child')) {
216
+ const nextResultGroup = customResultGroup.nextElementSibling;
217
+ const customResultToSelect =
218
+ nextResultGroup &&
219
+ nextResultGroup.querySelector(
220
+ '.inboxsdk__search_suggestion:first-child'
221
+ );
222
+
223
+ customResultToSelect &&
224
+ customResultToSelect.classList.add('inboxsdk__selected');
225
+ } else {
226
+ const nextCustomResult = selectedCustomResult.nextElementSibling;
227
+ nextCustomResult &&
228
+ nextCustomResult.classList.add('inboxsdk__selected');
229
+ }
230
+ }
231
+ });
232
+
233
+ enterPresses.onValue((event) => {
234
+ const selectedCustomResult = resultsEl.querySelector(
235
+ '.inboxsdk__search_suggestion.inboxsdk__selected'
236
+ );
237
+
238
+ // If the user hits enter and has a custom result selected, we want to
239
+ // trigger the custom result's action *but* avoid letting the native
240
+ // behavior (hiding `resultsEl`) happen.
241
+ if (selectedCustomResult) {
242
+ event.stopPropagation();
243
+
244
+ selectedCustomResult.dispatchEvent(new MouseEvent('click'));
245
+ }
246
+ });
247
+
248
+ keyboardEvents.onEnd(() => resultsEl.removeAttribute(SELECTION_MASTER_ATTR));
249
+
250
+ setupCustomResultHoverListeners(resultsEl, resultsElRemovalStream);
251
+ }
@@ -0,0 +1,76 @@
1
+ /* @flow */
2
+
3
+ import Kefir from 'kefir';
4
+
5
+ import InboxDriver from './inbox-driver';
6
+ import InboxRouteView from './views/inbox-route-view';
7
+ import InboxCustomRouteView from './views/inbox-custom-route-view';
8
+ import InboxDummyRouteView from './views/inbox-dummy-route-view';
9
+
10
+ import routeIDmatchesHash from '../../lib/routeIDmatchesHash';
11
+
12
+ export default function setupRouteViewDriverStream(
13
+ driver: InboxDriver
14
+ ): Kefir.Observable<
15
+ InboxRouteView | InboxDummyRouteView | InboxCustomRouteView
16
+ > {
17
+ const customRouteIDs = driver.getCustomRouteIDs();
18
+
19
+ let lastRouteView = null;
20
+
21
+ driver.getStopper().onValue(() => {
22
+ if (lastRouteView) {
23
+ lastRouteView.destroy();
24
+ }
25
+ });
26
+
27
+ return Kefir.merge([
28
+ Kefir.merge([
29
+ Kefir.fromEvents(document, 'inboxSDKpushState'),
30
+ Kefir.fromEvents(window, 'popstate'),
31
+ ]).map(
32
+ (e) =>
33
+ (process.env.NODE_ENV === 'test' && e.detail && e.detail.__test_url) ||
34
+ document.location.href
35
+ ),
36
+ Kefir.fromEvents(window, 'hashchange')
37
+ .map((e) => e.newURL)
38
+ // When the user hits back and leaves a hash URL, a hashchange *and*
39
+ // popstate events are emitted. Let's just process the popstate event
40
+ // alone.
41
+ .filter((href) => /#/.test(href)),
42
+ ])
43
+ .toProperty(() => document.location.href)
44
+ .map((href) => {
45
+ const m = /#([^?]*)/.exec(href);
46
+ if (!m) return { type: 'NATIVE' };
47
+ const hash = m[1];
48
+ for (let routeIDs of customRouteIDs) {
49
+ let routeID = routeIDmatchesHash(routeIDs, hash);
50
+ if (routeID) {
51
+ return { hash, type: 'CUSTOM', routeID };
52
+ }
53
+ }
54
+ return { type: 'OTHER_APP_CUSTOM' };
55
+ })
56
+ .map((detail) => {
57
+ if (detail.type === 'CUSTOM') {
58
+ return new InboxCustomRouteView(detail.routeID, detail.hash);
59
+ } else if (detail.type === 'NATIVE') {
60
+ driver.showNativeRouteView();
61
+ return new InboxDummyRouteView('NATIVE');
62
+ } else if (detail.type === 'OTHER_APP_CUSTOM') {
63
+ return new InboxDummyRouteView('OTHER_APP_CUSTOM');
64
+ } else {
65
+ driver.getLogger().error(new Error('should not happen'));
66
+ return new InboxDummyRouteView('UNKNOWN');
67
+ }
68
+ })
69
+ .map((routeView) => {
70
+ if (lastRouteView) {
71
+ lastRouteView.destroy();
72
+ }
73
+ lastRouteView = routeView;
74
+ return routeView;
75
+ });
76
+ }