@inboxsdk/core 2.2.17 → 2.2.19

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 (22) hide show
  1. package/inboxsdk.js +439 -438
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +1 -1
  4. package/pageWorld.js +0 -265
  5. package/pageWorld.js.map +1 -1
  6. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/sync-mole-spacer-with-right-column.d.ts +8 -0
  7. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/sync-mole-spacer-with-right-column.d.ts.map +1 -0
  8. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +3 -0
  9. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts.map +1 -1
  10. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts +20 -0
  11. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts.map +1 -1
  12. package/src/platform-implementation-js/dom-driver/gmail/selectors.d.ts +33 -0
  13. package/src/platform-implementation-js/dom-driver/gmail/selectors.d.ts.map +1 -0
  14. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.d.ts.map +1 -1
  15. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.d.ts.map +1 -1
  16. package/src/platform-implementation-js/lib/dom/mergeSelectorOverrides.d.ts +22 -0
  17. package/src/platform-implementation-js/lib/dom/mergeSelectorOverrides.d.ts.map +1 -0
  18. package/src/platform-implementation-js/lib/dom/selectorRegistry.d.ts +28 -0
  19. package/src/platform-implementation-js/lib/dom/selectorRegistry.d.ts.map +1 -0
  20. package/src/platform-implementation-js/lib/logger.d.ts.map +1 -1
  21. package/src/platform-implementation-js/platform-implementation.d.ts +6 -0
  22. package/src/platform-implementation-js/platform-implementation.d.ts.map +1 -1
package/inboxsdk.js CHANGED
@@ -371,7 +371,7 @@ function isNotNil(value) {
371
371
 
372
372
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- SDK_VERSION is injected by webpack
373
373
  ///@ts-ignore
374
- const BUILD_VERSION = "2.2.17-1783630599514-85b889d6702953de";
374
+ const BUILD_VERSION = "2.2.19-1786580061685-3573e62ec8d2327b";
375
375
  if (false) {}
376
376
 
377
377
  /***/ }),
@@ -630,8 +630,8 @@ function isGoogleChatEnabled() {
630
630
 
631
631
 
632
632
  function overrideGmailBackButton(gmailDriver, gmailRouteProcessor) {
633
- _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.waitForGmailModeToSettle().then(function () {
634
- if (_gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.isStandalone()) {
633
+ _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.waitForGmailModeToSettle().then(function () {
634
+ if (_gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.isStandalone()) {
635
635
  return;
636
636
  }
637
637
  _setupManagement(gmailDriver, gmailRouteProcessor);
@@ -664,7 +664,7 @@ const handleGmailRouteView = (0,ud__WEBPACK_IMPORTED_MODULE_2__.defn)(module, fu
664
664
  }
665
665
  });
666
666
  function _bindToBackButton(gmailDriver, gmailRouteView) {
667
- const backButton = _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getThreadBackButton();
667
+ const backButton = _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.getThreadBackButton();
668
668
  if (!backButton) {
669
669
  return;
670
670
  }
@@ -801,13 +801,13 @@ function setupComposeViewDriverStream(gmailDriver, messageViewDriverStream, xhrI
801
801
  return impStream.flatMapLatest(imp => imp(gmailDriver, messageViewDriverStream, xhrInterceptorStream));
802
802
  }
803
803
  function imp(gmailDriver, messageViewDriverStream, xhrInterceptorStream) {
804
- return kefir_esm.fromPromise(gmail_element_getter/* default */.A.waitForGmailModeToSettle()).flatMap(() => {
804
+ return kefir_esm.fromPromise(gmail_element_getter/* default */.Ay.waitForGmailModeToSettle()).flatMap(() => {
805
805
  let elementStream;
806
806
  let isStandalone = false;
807
- if (gmail_element_getter/* default */.A.isStandaloneComposeWindow()) {
807
+ if (gmail_element_getter/* default */.Ay.isStandaloneComposeWindow()) {
808
808
  elementStream = _setupStandaloneComposeElementStream();
809
809
  isStandalone = true;
810
- } else if (gmail_element_getter/* default */.A.isStandaloneThreadWindow()) {
810
+ } else if (gmail_element_getter/* default */.Ay.isStandaloneThreadWindow()) {
811
811
  elementStream = kefir_esm.never();
812
812
  } else {
813
813
  elementStream = _setupStandardComposeElementStream();
@@ -822,14 +822,14 @@ function imp(gmailDriver, messageViewDriverStream, xhrInterceptorStream) {
822
822
  }))))).flatMap(composeViewDriver => composeViewDriver.ready());
823
823
  }
824
824
  function _setupStandardComposeElementStream() {
825
- return _waitForContainerAndMonitorChildrenStream(() => gmail_element_getter/* default */.A.getComposeWindowContainer()).flatMap(composeGrandParent => {
825
+ return _waitForContainerAndMonitorChildrenStream(() => gmail_element_getter/* default */.Ay.getComposeWindowContainer()).flatMap(composeGrandParent => {
826
826
  const composeParentEl = composeGrandParent.el.querySelector('div.AD');
827
827
  if (composeParentEl) {
828
828
  return (0,make_element_child_stream/* default */.A)(composeParentEl).takeUntilBy(composeGrandParent.removalStream).map(_informElement('composeFullscreenStateChanged'));
829
829
  } else {
830
830
  return kefir_esm.never();
831
831
  }
832
- }).merge(gmail_element_getter/* default */.A.getFullscreenComposeWindowContainerStream().flatMap(_ref => {
832
+ }).merge(gmail_element_getter/* default */.Ay.getFullscreenComposeWindowContainerStream().flatMap(_ref => {
833
833
  let {
834
834
  el,
835
835
  removalStream
@@ -865,7 +865,7 @@ function _setupStandardComposeElementStream() {
865
865
  }).flatMap(makeElementStreamMerger());
866
866
  }
867
867
  function _setupStandaloneComposeElementStream() {
868
- return _waitForContainerAndMonitorChildrenStream(() => gmail_element_getter/* default */.A.StandaloneCompose.getComposeWindowContainer());
868
+ return _waitForContainerAndMonitorChildrenStream(() => gmail_element_getter/* default */.Ay.StandaloneCompose.getComposeWindowContainer());
869
869
  }
870
870
  function _waitForContainerAndMonitorChildrenStream(containerFn) {
871
871
  return kefir_esm.interval(2000, undefined) // TODO replace this with page-parser-tree
@@ -903,7 +903,7 @@ function _informElement(eventName) {
903
903
  const ACTIVE_ADD_ON_ICON_SELECTOR = '.J-KU-KO';
904
904
 
905
905
  const showCustomRouteView = (0,ud__WEBPACK_IMPORTED_MODULE_1__.defn)(module, function showCustomRouteView(gmailDriver, element) {
906
- const contentSectionElement = _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getContentSectionElement();
906
+ const contentSectionElement = _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.getContentSectionElement();
907
907
  if (!contentSectionElement) {
908
908
  return;
909
909
  }
@@ -926,7 +926,7 @@ const showCustomRouteView = (0,ud__WEBPACK_IMPORTED_MODULE_1__.defn)(module, fun
926
926
  });
927
927
 
928
928
  //if any thread sidebar addons are enabled then we need to turn them off
929
- const companionSidebarIconContainerEl = _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getCompanionSidebarIconContainerElement();
929
+ const companionSidebarIconContainerEl = _gmail_element_getter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.getCompanionSidebarIconContainerElement();
930
930
  if (companionSidebarIconContainerEl) {
931
931
  const activeThreadAddOnIcon = companionSidebarIconContainerEl.querySelector(ACTIVE_ADD_ON_ICON_SELECTOR);
932
932
  if (activeThreadAddOnIcon) {
@@ -956,7 +956,10 @@ function _getCustomViewContainerElement(contentSectionElement) {
956
956
 
957
957
  // EXPORTS
958
958
  __webpack_require__.d(__webpack_exports__, {
959
- A: () => (/* binding */ gmail_element_getter)
959
+ y2: () => (/* binding */ COMPANION_SIDEBAR_PANEL_WRAPPER_CLASS),
960
+ MY: () => (/* binding */ MOLE_CONTAINER_SELECTOR),
961
+ pG: () => (/* binding */ MOLE_PARENT_SELECTOR),
962
+ Ay: () => (/* binding */ gmail_element_getter)
960
963
  });
961
964
 
962
965
  // EXTERNAL MODULE: ./node_modules/lodash/once.js
@@ -1053,6 +1056,31 @@ const APP_MENU = '.aeN.WR.a6o.anZ.nH.oy8Mbf[role=navigation]';
1053
1056
  */
1054
1057
  const NAV_MENU = '.aeN.WR.nH.oy8Mbf[role=navigation]';
1055
1058
 
1059
+ /**
1060
+ * The right-hand column holding the companion sidebar. Both the panel and the
1061
+ * icon rail live inside it.
1062
+ */
1063
+ const COMPANION_SIDEBAR_COLUMN = 'div.aUx';
1064
+
1065
+ /**
1066
+ * Class on the companion sidebar's outer wrapper before the 2024-11-07 Gmail
1067
+ * update, when the wrapper and the content container were the same element.
1068
+ */
1069
+ const COMPANION_SIDEBAR_LEGACY_WRAPPER_CLASS = 'bq9';
1070
+
1071
+ /**
1072
+ * Class on the companion sidebar's outer wrapper in the layout Gmail shipped
1073
+ * 2024-11-07, which moved the sidebar icons to the right of the panel. Absent
1074
+ * on older layouts, which use {@link COMPANION_SIDEBAR_LEGACY_WRAPPER_CLASS}.
1075
+ */
1076
+ const COMPANION_SIDEBAR_PANEL_WRAPPER_CLASS = 'WN9Ejb';
1077
+
1078
+ /** Outer flex container for the mole strip (spacers + mole area). Lazily created by Gmail. */
1079
+ const MOLE_CONTAINER_SELECTOR = 'div.dw';
1080
+
1081
+ /** The element compose windows and moles are appended to. */
1082
+ const MOLE_PARENT_SELECTOR = `${MOLE_CONTAINER_SELECTOR} .nH > .nH > .no`;
1083
+
1056
1084
  // TODO Figure out if these functions can and should be able to return null
1057
1085
  const GmailElementGetter = {
1058
1086
  getActiveMoreMenu() {
@@ -1068,6 +1096,9 @@ const GmailElementGetter = {
1068
1096
  // only for Gmailv1 + Gmailv2-before-2018-07-30?
1069
1097
  return document.querySelector('.no > .nn.bnl');
1070
1098
  },
1099
+ getCompanionSidebarColumnElement() {
1100
+ return document.querySelector(COMPANION_SIDEBAR_COLUMN);
1101
+ },
1071
1102
  getCompanionSidebarContentContainerElement() {
1072
1103
  return document.querySelector('.brC-brG');
1073
1104
  },
@@ -1075,6 +1106,21 @@ const GmailElementGetter = {
1075
1106
  getCompanionSidebarIconContainerElement() {
1076
1107
  return document.querySelector('.brC-aT5-aOt-Jw');
1077
1108
  },
1109
+ /**
1110
+ * The wrapper Google's own companions (Calendar, Keep, Tasks, Contacts) and
1111
+ * SDK content panels both render their body inside. Gmail hides it with
1112
+ * `display: none` rather than removing it when nothing is open.
1113
+ *
1114
+ * @param contentContainerEl pass this when you already hold the content
1115
+ * container, so the wrapper is derived from that same element.
1116
+ */
1117
+ getCompanionSidebarOuterWrapperElement(contentContainerEl) {
1118
+ const companionSidebarContentContainerEl = contentContainerEl ?? GmailElementGetter.getCompanionSidebarContentContainerElement();
1119
+ if (!companionSidebarContentContainerEl) return null;
1120
+ // TODO: Once the changes to the GMail DOM have been entirely ramped, drop
1121
+ // the ternary here and always get the parentElement. (Jun 20, 2018)
1122
+ return companionSidebarContentContainerEl.classList.contains(COMPANION_SIDEBAR_LEGACY_WRAPPER_CLASS) ? companionSidebarContentContainerEl : companionSidebarContentContainerEl.parentElement;
1123
+ },
1078
1124
  getComposeButton() {
1079
1125
  if ((0,isIntegratedViewGmail/* default */.Ay)()) {
1080
1126
  return document.querySelector('.aIH .aic div[role=button].L3');
@@ -1082,7 +1128,7 @@ const GmailElementGetter = {
1082
1128
  return document.querySelector('[gh=cm]');
1083
1129
  },
1084
1130
  getComposeWindowContainer() {
1085
- return document.querySelector('.dw .nH > .nH > .no');
1131
+ return document.querySelector(MOLE_PARENT_SELECTOR);
1086
1132
  },
1087
1133
  getContentSectionElement() {
1088
1134
  // New method for finding the content section element that also supports
@@ -2665,7 +2711,7 @@ options.insert = htmlElement => {
2665
2711
  htmlElement.setAttribute('data-inboxsdk-version',
2666
2712
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
2667
2713
  ///@ts-ignore
2668
- "2.2.17-1783630599514-85b889d6702953de");
2714
+ "2.2.19-1786580061685-3573e62ec8d2327b");
2669
2715
  document.head.append(htmlElement);
2670
2716
  };
2671
2717
  options.domAPI = (styleDomAPI_default());
@@ -3090,7 +3136,7 @@ class GmailAppSidebarPrimary {
3090
3136
  if (contentContainer) contentContainer.classList.remove('companion_container_app_sidebar_visible');
3091
3137
  }
3092
3138
  #openSidebarAndActivateButton(buttonContainer, isGlobal) {
3093
- const companionSidebarIconContainerEl = gmail_element_getter/* default */.A.getCompanionSidebarIconContainerElement();
3139
+ const companionSidebarIconContainerEl = gmail_element_getter/* default */.Ay.getCompanionSidebarIconContainerElement();
3094
3140
  if (!companionSidebarIconContainerEl) throw new Error('Could not find companion sidebar icon container element');
3095
3141
  const activeButtonContainer = this.#getActiveButtonContainer();
3096
3142
  if (activeButtonContainer) {
@@ -3113,20 +3159,18 @@ class GmailAppSidebarPrimary {
3113
3159
  if (isGlobal) this.#companionSidebarContentContainerEl.classList.add('companion_global_app_sidebar_visible');
3114
3160
  }
3115
3161
  #setupElement() {
3116
- const companionSidebarIconContainerEl = gmail_element_getter/* default */.A.getCompanionSidebarIconContainerElement();
3162
+ const companionSidebarIconContainerEl = gmail_element_getter/* default */.Ay.getCompanionSidebarIconContainerElement();
3117
3163
  if (!companionSidebarIconContainerEl) throw new Error('Could not find companion sidebar icon container element');
3118
3164
  this.#companionSidebarContentContainerEl.setAttribute('data-sdk-sidebar-instance-id', this.#instanceId);
3119
-
3120
- // TODO: Once the changes to the GMail DOM have been entirely ramped, drop the ternary here and
3121
- // always get the parentElement. (Jun 20, 2018)
3122
- this.#companionSidebarOuterWrapper = this.#companionSidebarContentContainerEl.classList.contains('bq9') ? this.#companionSidebarContentContainerEl : this.#companionSidebarContentContainerEl.parentElement;
3123
- if (!this.#companionSidebarOuterWrapper) {
3165
+ const companionSidebarOuterWrapper = gmail_element_getter/* default */.Ay.getCompanionSidebarOuterWrapperElement(this.#companionSidebarContentContainerEl);
3166
+ if (!companionSidebarOuterWrapper) {
3124
3167
  throw new Error('should not happen: failed to find companionSidebarOuterWrapper');
3125
3168
  }
3169
+ this.#companionSidebarOuterWrapper = companionSidebarOuterWrapper;
3126
3170
 
3127
3171
  // detect 2024-11-07 gmail update that moved sidebar icons to the right of
3128
3172
  // the sidebar
3129
- if (this.#companionSidebarOuterWrapper.classList.contains('WN9Ejb')) {
3173
+ if (this.#companionSidebarOuterWrapper.classList.contains(gmail_element_getter/* COMPANION_SIDEBAR_PANEL_WRAPPER_CLASS */.y2)) {
3130
3174
  document.body.classList.add('inboxsdk__sidebar_icons_right');
3131
3175
  this.#driver.getLogger().eventSite('sidebar_icons_right');
3132
3176
  }
@@ -5662,7 +5706,7 @@ class GmailComposeView {
5662
5706
  if (this.#isStandalone) {
5663
5707
  this.#isFullscreen = true;
5664
5708
  } else {
5665
- const fullScreenContainer = gmail_element_getter/* default */.A.getFullscreenComposeWindowContainer();
5709
+ const fullScreenContainer = gmail_element_getter/* default */.Ay.getFullscreenComposeWindowContainer();
5666
5710
  if (!fullScreenContainer) {
5667
5711
  this.#isFullscreen = false;
5668
5712
  } else {
@@ -6305,8 +6349,7 @@ class GmailComposeView {
6305
6349
  }
6306
6350
  }
6307
6351
  setTitleBarColor(color) {
6308
- // Gmail A/B-renames the `Ht` token; fall back to a structural selector.
6309
- const buttonParent = this.#element.querySelector('.nH.Hy.aXJ table.cf.Ht td.Hm') || this.#element.querySelector('.nH.Hy.aXJ table.cf td.Hm');
6352
+ const buttonParent = this.#driver.selectors.querySelectorByKey(this.#element, 'composeView.titleBarTd');
6310
6353
  if (!buttonParent) {
6311
6354
  // cosmetic; log and skip rather than throw
6312
6355
  this.#driver.getLogger().error(new Error('setTitleBarColor: could not find compose title bar'));
@@ -6328,9 +6371,7 @@ class GmailComposeView {
6328
6371
  if (this.isInlineReplyForm()) {
6329
6372
  throw new Error('setTitleBarText() is not supported on inline compose views');
6330
6373
  }
6331
-
6332
- // Gmail A/B-renames the `Ht` token; fall back to a structural selector.
6333
- const titleBarTable = this.#element.querySelector('.nH.Hy.aXJ table.cf.Ht') || this.#element.querySelector('.nH.Hy.aXJ table.cf');
6374
+ const titleBarTable = this.#driver.selectors.querySelectorByKey(this.#element, 'composeView.titleBarTable');
6334
6375
  if (!titleBarTable) {
6335
6376
  // cosmetic; log and skip rather than throw
6336
6377
  this.#driver.getLogger().error(new Error('setTitleBarText: could not find compose title bar'));
@@ -10336,7 +10377,7 @@ options.insert = htmlElement => {
10336
10377
  htmlElement.setAttribute('data-inboxsdk-version',
10337
10378
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
10338
10379
  ///@ts-ignore
10339
- "2.2.17-1783630599514-85b889d6702953de");
10380
+ "2.2.19-1786580061685-3573e62ec8d2327b");
10340
10381
  document.head.append(htmlElement);
10341
10382
  };
10342
10383
  options.domAPI = (styleDomAPI_default());
@@ -10843,8 +10884,6 @@ class PersistentQueue {
10843
10884
  }
10844
10885
  // EXTERNAL MODULE: ./src/platform-implementation-js/lib/dom/make-mutation-observer-stream.ts
10845
10886
  var make_mutation_observer_stream = __webpack_require__(5938);
10846
- // EXTERNAL MODULE: ./node_modules/ext-corb-workaround/dist/src/index.js
10847
- var src = __webpack_require__(9482);
10848
10887
  // EXTERNAL MODULE: ./src/platform-implementation-js/lib/isStreakAppId.ts
10849
10888
  var isStreakAppId = __webpack_require__(8579);
10850
10889
  ;// CONCATENATED MODULE: ./src/platform-implementation-js/lib/logger.ts
@@ -10857,7 +10896,6 @@ var isStreakAppId = __webpack_require__(8579);
10857
10896
 
10858
10897
 
10859
10898
 
10860
-
10861
10899
  // Yeah, this module is a singleton with some shared state. This is just for
10862
10900
  // logging convenience. Other modules should avoid doing this!
10863
10901
  const _extensionAppIds = [];
@@ -11232,9 +11270,7 @@ async function retrieveNewEventsAccessToken() {
11232
11270
  const {
11233
11271
  text
11234
11272
  } = await (0,ajax/* default */.A)({
11235
- url: 'https://api.inboxsdk.com/api/v2/events/oauth',
11236
- // Work around CORB for extensions that have permissions to inboxsdk.com
11237
- XMLHttpRequest: (0,src/* getXMLHttpRequest */.np)()
11273
+ url: 'https://api.inboxsdk.com/api/v2/events/oauth'
11238
11274
  });
11239
11275
  const accessToken = JSON.parse(text);
11240
11276
  if (isTimestampExpired(accessToken.expirationDate)) {
@@ -11480,7 +11516,7 @@ if (!globalThis.__InboxSDKImpLoader) {
11480
11516
  await onready;
11481
11517
  const {
11482
11518
  makePlatformImplementation
11483
- } = await Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 932));
11519
+ } = await Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7064));
11484
11520
  return makePlatformImplementation(appId, opts, {
11485
11521
  piMainStarted,
11486
11522
  piLoadStarted,
@@ -11629,7 +11665,7 @@ class Keyboard {
11629
11665
 
11630
11666
  /***/ }),
11631
11667
 
11632
- /***/ 932:
11668
+ /***/ 7064:
11633
11669
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
11634
11670
 
11635
11671
  "use strict";
@@ -14067,7 +14103,7 @@ class GmailToolbarView {
14067
14103
  }
14068
14104
  }
14069
14105
  _addToOpenMoreMenu(buttonDescriptor) {
14070
- const moreMenu = gmail_element_getter/* default */.A.getActiveMoreMenu();
14106
+ const moreMenu = gmail_element_getter/* default */.Ay.getActiveMoreMenu();
14071
14107
  if (!moreMenu) {
14072
14108
  return;
14073
14109
  }
@@ -14724,7 +14760,7 @@ class GmailThreadView {
14724
14760
  async #logAddonElementInfo() {
14725
14761
  if (hasLoggedAddonInfo) return;
14726
14762
  function readInfo() {
14727
- const container = gmail_element_getter/* default */.A.getAddonSidebarContainerElement();
14763
+ const container = gmail_element_getter/* default */.Ay.getAddonSidebarContainerElement();
14728
14764
  if (!container) return null;
14729
14765
  const isDisplayNone = {
14730
14766
  parent: container.parentElement ? container.parentElement.style.display === 'none' : null,
@@ -15098,7 +15134,7 @@ options.insert = htmlElement => {
15098
15134
  htmlElement.setAttribute('data-inboxsdk-version',
15099
15135
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
15100
15136
  ///@ts-ignore
15101
- "2.2.17-1783630599514-85b889d6702953de");
15137
+ "2.2.19-1786580061685-3573e62ec8d2327b");
15102
15138
  document.head.append(htmlElement);
15103
15139
  };
15104
15140
  options.domAPI = (styleDomAPI_default());
@@ -15975,7 +16011,7 @@ class GmailRouteView {
15975
16011
  this._setCustomViewElementHeight();
15976
16012
  }
15977
16013
  _monitorLeftNavHeight() {
15978
- var leftNav = gmail_element_getter/* default */.A.getLeftNavHeightElement();
16014
+ var leftNav = gmail_element_getter/* default */.Ay.getLeftNavHeightElement();
15979
16015
  if (!leftNav) {
15980
16016
  return;
15981
16017
  }
@@ -15987,11 +16023,11 @@ class GmailRouteView {
15987
16023
  });
15988
16024
  }
15989
16025
  _setCustomViewElementHeight() {
15990
- const leftNav = gmail_element_getter/* default */.A.getLeftNavHeightElement();
15991
- const gtalkButtons = gmail_element_getter/* default */.A.getGtalkButtons();
16026
+ const leftNav = gmail_element_getter/* default */.Ay.getLeftNavHeightElement();
16027
+ const gtalkButtons = gmail_element_getter/* default */.Ay.getGtalkButtons();
15992
16028
  const customViewEl = this._customViewElement;
15993
16029
  if (!leftNav || !customViewEl) throw new Error('Should not happen');
15994
- const contentSectionElement = gmail_element_getter/* default */.A.getContentSectionElement();
16030
+ const contentSectionElement = gmail_element_getter/* default */.Ay.getContentSectionElement();
15995
16031
  const contentSectionElementBottomMargin = contentSectionElement ? parseInt(getComputedStyle(contentSectionElement).marginBottom, 10) : 0;
15996
16032
  customViewEl.style.height = `${parseInt(leftNav.style.height, 10) + (gtalkButtons ? gtalkButtons.offsetHeight : 0) - contentSectionElementBottomMargin}px`;
15997
16033
  }
@@ -16066,7 +16102,7 @@ class GmailRouteView {
16066
16102
  threadContainerElement
16067
16103
  };
16068
16104
  }
16069
- const previewPaneContainerElement = gmail_element_getter/* default */.A.getPreviewPaneContainerElement();
16105
+ const previewPaneContainerElement = gmail_element_getter/* default */.Ay.getPreviewPaneContainerElement();
16070
16106
  if (previewPaneContainerElement) {
16071
16107
  return {
16072
16108
  previewPaneContainerElement
@@ -16097,7 +16133,7 @@ class GmailRouteView {
16097
16133
  }
16098
16134
  _setupScrollStream() {
16099
16135
  const SCROLL_DEBOUNCE_MS = 100;
16100
- const scrollContainer = gmail_element_getter/* default */.A.getScrollContainer();
16136
+ const scrollContainer = gmail_element_getter/* default */.Ay.getScrollContainer();
16101
16137
  const {
16102
16138
  scrollTop: cachedScrollTop
16103
16139
  } = this._cachedRouteData;
@@ -16320,7 +16356,7 @@ class GmailRouteView {
16320
16356
 
16321
16357
  // Used to click gmail refresh button in thread lists
16322
16358
  refresh() {
16323
- var el = gmail_element_getter/* default */.A.getToolbarElement().querySelector('div.T-I.nu');
16359
+ var el = gmail_element_getter/* default */.Ay.getToolbarElement().querySelector('div.T-I.nu');
16324
16360
  if (el) {
16325
16361
  var prevActive = document.activeElement;
16326
16362
  var prevClassName = el.className;
@@ -16343,7 +16379,7 @@ class GmailRouteView {
16343
16379
  return routeID.split('/').filter(part => part[0] === ':').map(part => part.substring(1));
16344
16380
  }
16345
16381
  _getThreadContainerElement() {
16346
- return gmail_element_getter/* default */.A.getThreadContainerElement();
16382
+ return gmail_element_getter/* default */.Ay.getThreadContainerElement();
16347
16383
  }
16348
16384
  }
16349
16385
  /* harmony default export */ const gmail_route_view = (GmailRouteView);
@@ -17211,7 +17247,7 @@ function isBodyDarkTheme() {
17211
17247
  }
17212
17248
  const stylesStream = kefir_bus_default()();
17213
17249
  async function trackGmailStyles() {
17214
- if (document.head.hasAttribute('data-inboxsdk-gmail-style-tracker') || gmail_element_getter/* default */.A.isStandalone()) {
17250
+ if (document.head.hasAttribute('data-inboxsdk-gmail-style-tracker') || gmail_element_getter/* default */.Ay.isStandalone()) {
17215
17251
  return;
17216
17252
  }
17217
17253
  document.head.setAttribute('data-inboxsdk-gmail-style-tracker', 'true');
@@ -17365,7 +17401,7 @@ class GmailAppMenuItemView extends events.EventEmitter {
17365
17401
  iconClassName
17366
17402
  } = this.#menuItemDescriptor ?? {};
17367
17403
  if (iconUrl) {
17368
- const rawTheme = gmail_element_getter/* default */.A.isDarkTheme() ? iconUrl.darkTheme : iconUrl.lightTheme;
17404
+ const rawTheme = gmail_element_getter/* default */.Ay.isDarkTheme() ? iconUrl.darkTheme : iconUrl.lightTheme;
17369
17405
  if (!rawTheme) return;
17370
17406
  const theme = typeof rawTheme === 'string' ? rawTheme : rawTheme.default;
17371
17407
  const activeImg = typeof rawTheme === 'string' ? rawTheme : rawTheme.active;
@@ -17533,7 +17569,7 @@ class CollapsiblePanelView extends safe_event_emitter/* default */.A {
17533
17569
  if (!iconUrl) {
17534
17570
  return;
17535
17571
  }
17536
- const theme = gmail_element_getter/* default */.A.isDarkTheme() ? iconUrl.darkTheme : iconUrl.lightTheme;
17572
+ const theme = gmail_element_getter/* default */.Ay.isDarkTheme() ? iconUrl.darkTheme : iconUrl.lightTheme;
17537
17573
  if (!theme) {
17538
17574
  return;
17539
17575
  }
@@ -17679,7 +17715,7 @@ async function addCollapsiblePanel(driver, panelDescriptor, insertIndex) {
17679
17715
  const injectionContainer = await waitForAppMenuParentReady();
17680
17716
  const collapsiblePanelView = new CollapsiblePanelView(driver, panelDescriptor);
17681
17717
  if (!injectionContainer || !collapsiblePanelView.element) return;
17682
- const appMenu = await gmail_element_getter/* default */.A.getAppMenuAsync();
17718
+ const appMenu = await gmail_element_getter/* default */.Ay.getAppMenuAsync();
17683
17719
  if (!appMenu) return;
17684
17720
  const panelNodes = injectionContainer.querySelectorAll(CollapsiblePanelView.elementSelectors.NATIVE) ?? [];
17685
17721
  const siblingElement = Number.isInteger(insertIndex) ? panelNodes[insertIndex] ?? null : null;
@@ -17691,9 +17727,9 @@ async function addCollapsiblePanel(driver, panelDescriptor, insertIndex) {
17691
17727
  return collapsiblePanelView;
17692
17728
  }
17693
17729
  const waitForAppMenuParentReady = once_default()(async () => {
17694
- if (!gmail_element_getter/* default */.A.isStandalone()) {
17730
+ if (!gmail_element_getter/* default */.Ay.isStandalone()) {
17695
17731
  try {
17696
- const menuParentElement = await (0,wait_for/* default */.A)(() => gmail_element_getter/* default */.A.getAppMenuContainer());
17732
+ const menuParentElement = await (0,wait_for/* default */.A)(() => gmail_element_getter/* default */.Ay.getAppMenuContainer());
17697
17733
  return menuParentElement;
17698
17734
  } catch (e) {
17699
17735
  lib_logger/* default */.A.error(e);
@@ -17747,13 +17783,13 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
17747
17783
  static #menuItemToPanelMap = new Map();
17748
17784
  static #appMenuItemViews = new Set();
17749
17785
  static getAllPanels() {
17750
- const appMenuElement = gmail_element_getter/* default */.A.getAppMenuContainer();
17786
+ const appMenuElement = gmail_element_getter/* default */.Ay.getAppMenuContainer();
17751
17787
  const nativePanels = appMenuElement?.querySelectorAll(`.${collapsible_panel_view_NATIVE_CLASS}`);
17752
17788
  return Array.from(nativePanels ?? []);
17753
17789
  }
17754
17790
  static getActivePanel() {
17755
17791
  let useSdkActiveSelector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
17756
- const appMenuElement = gmail_element_getter/* default */.A.getAppMenuContainer();
17792
+ const appMenuElement = gmail_element_getter/* default */.Ay.getAppMenuContainer();
17757
17793
  const {
17758
17794
  ACTIVE,
17759
17795
  SDK_ACTIVE
@@ -17782,11 +17818,11 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
17782
17818
  return element.classList.contains(NATIVE_CLASS);
17783
17819
  }
17784
17820
  static getAllMenuItems() {
17785
- const appMenuElement = gmail_element_getter/* default */.A.getAppMenuContainer();
17821
+ const appMenuElement = gmail_element_getter/* default */.Ay.getAppMenuContainer();
17786
17822
  return Array.from(appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}`) ?? []);
17787
17823
  }
17788
17824
  static getActiveMenuItem() {
17789
- const appMenuElement = gmail_element_getter/* default */.A.getAppMenuContainer();
17825
+ const appMenuElement = gmail_element_getter/* default */.Ay.getAppMenuContainer();
17790
17826
  const {
17791
17827
  ACTIVE,
17792
17828
  SDK_ACTIVE
@@ -17816,7 +17852,7 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
17816
17852
  }
17817
17853
  static #adjustTooltipNub() {
17818
17854
  // adjust all menu items' collapsible panel's tooltip nub position
17819
- const appMenuElement = gmail_element_getter/* default */.A.getAppMenu();
17855
+ const appMenuElement = gmail_element_getter/* default */.Ay.getAppMenu();
17820
17856
  for (const menuItem of appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}`) ?? []) {
17821
17857
  const panel = AppMenuItemView.#menuItemToPanelMap.get(menuItem);
17822
17858
  if (!panel) continue;
@@ -17887,7 +17923,7 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
17887
17923
  });
17888
17924
  }
17889
17925
  static #_ = async function init() {
17890
- const gmailAppMenu = await gmail_element_getter/* default */.A.getAppMenuAsync();
17926
+ const gmailAppMenu = await gmail_element_getter/* default */.Ay.getAppMenuAsync();
17891
17927
  if (!gmailAppMenu) {
17892
17928
  return;
17893
17929
  }
@@ -17906,7 +17942,7 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
17906
17942
  // Set up event listeners we use to control menu UI
17907
17943
  // We intercept some events emitted on Gmail (native) menu items to gain full control of the menu (menu items and panels).
17908
17944
  // Thus, some native event handlers won't be invoked so we replicate the Gmail's behavior by ourselves.
17909
- const appMenuElement = gmail_element_getter/* default */.A.getAppMenuContainer();
17945
+ const appMenuElement = gmail_element_getter/* default */.Ay.getAppMenuContainer();
17910
17946
  for (const nativeMenuItem of appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}:not(.${INBOXSDK_CLASS})`) ?? []) {
17911
17947
  // Gmail uses this listener for panel hover state activation. It's prevented from propagation and we handle UI updates
17912
17948
  const buttonElement = nativeMenuItem.querySelector('.V6.CL');
@@ -17940,7 +17976,7 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
17940
17976
  HOVER
17941
17977
  } = GmailAppMenuItemView.elementCss;
17942
17978
  function handleActivate() {
17943
- const appMenuElement = gmail_element_getter/* default */.A.getAppMenuContainer();
17979
+ const appMenuElement = gmail_element_getter/* default */.Ay.getAppMenuContainer();
17944
17980
 
17945
17981
  // deactivate menu items and handle keyboard accessibility
17946
17982
  for (const menuItem_ of appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}`) ?? []) {
@@ -17970,7 +18006,7 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
17970
18006
  const panel = AppMenuItemView.#menuItemToPanelMap.get(menuItem);
17971
18007
  const activeMenuItem = AppMenuItemView.getActiveMenuItem();
17972
18008
  const activePanel = AppMenuItemView.getActivePanel();
17973
- const burgerMenuOpen = gmail_element_getter/* default */.A.isAppBurgerMenuOpen();
18009
+ const burgerMenuOpen = gmail_element_getter/* default */.Ay.isAppBurgerMenuOpen();
17974
18010
 
17975
18011
  // hover-styled panel is displayed for collapsed burger menu
17976
18012
  if (activeMenuItem === menuItem && activePanel === panel && burgerMenuOpen) return;
@@ -18015,7 +18051,7 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
18015
18051
  const activePanel = AppMenuItemView.getActivePanel();
18016
18052
  const activeMenuItemPanel = activeMenuItem && AppMenuItemView.#menuItemToPanelMap.get(activeMenuItem);
18017
18053
  if (mouseEvent.relatedTarget instanceof Node && (menuItem.contains(mouseEvent.relatedTarget) || activePanel?.contains(mouseEvent.relatedTarget))) return;
18018
- const burgerMenuOpen = gmail_element_getter/* default */.A.isAppBurgerMenuOpen();
18054
+ const burgerMenuOpen = gmail_element_getter/* default */.Ay.isAppBurgerMenuOpen();
18019
18055
  if (activePanel === activeMenuItemPanel && burgerMenuOpen) return;
18020
18056
 
18021
18057
  // unhover menu item
@@ -18048,8 +18084,8 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
18048
18084
  for (const panel of document.querySelectorAll(CollapsiblePanelView.elementSelectors.NATIVE) ?? []) {
18049
18085
  panel.classList.toggle(CollapsiblePanelView.elementCss.PANEL_LESS, isPanelLess);
18050
18086
  }
18051
- gmail_element_getter/* default */.A.getAppMenu()?.classList.toggle('aTO', isPanelLess);
18052
- gmail_element_getter/* default */.A.getAppHeader()?.classList.toggle('aTO', isPanelLess);
18087
+ gmail_element_getter/* default */.Ay.getAppMenu()?.classList.toggle('aTO', isPanelLess);
18088
+ gmail_element_getter/* default */.Ay.getAppHeader()?.classList.toggle('aTO', isPanelLess);
18053
18089
  break;
18054
18090
  }
18055
18091
  case 'route-activated':
@@ -18115,7 +18151,7 @@ class AppMenuItemView extends safe_event_emitter/* default */.A {
18115
18151
  const descriptor = {
18116
18152
  ...panelDescriptor,
18117
18153
  className: classnames_default()(panelDescriptor.className, {
18118
- [CollapsiblePanelView.elementCss.COLLAPSED]: !gmail_element_getter/* default */.A.isAppBurgerMenuOpen(),
18154
+ [CollapsiblePanelView.elementCss.COLLAPSED]: !gmail_element_getter/* default */.Ay.isAppBurgerMenuOpen(),
18119
18155
  [CollapsiblePanelView.elementCss.PANEL_LESS]: AppMenuItemView.#isPanelLess()
18120
18156
  })
18121
18157
  };
@@ -18228,7 +18264,7 @@ class AppMenu {
18228
18264
  if (!isShown) {
18229
18265
  return;
18230
18266
  }
18231
- const appMenu = await gmail_element_getter/* default */.A.getAppMenuAsync();
18267
+ const appMenu = await gmail_element_getter/* default */.Ay.getAppMenuAsync();
18232
18268
  if (!appMenu) {
18233
18269
  return;
18234
18270
  }
@@ -18271,7 +18307,7 @@ class AppMenu {
18271
18307
  * @returns whether or not the AppMenu Burger is uncollapsed or not.
18272
18308
  */
18273
18309
  isMenuOpen() {
18274
- return gmail_element_getter/* default */.A.isAppBurgerMenuOpen();
18310
+ return gmail_element_getter/* default */.Ay.isAppBurgerMenuOpen();
18275
18311
  }
18276
18312
 
18277
18313
  /**
@@ -18290,7 +18326,7 @@ class AppMenu {
18290
18326
  * @returns true if the app menu is visible. At time of writing, this typically means they have chose to enable Chat, Meet, or both.
18291
18327
  */
18292
18328
  async isShown() {
18293
- const result = await gmail_element_getter/* default */.A.getAppMenuAsync();
18329
+ const result = await gmail_element_getter/* default */.Ay.getAppMenuAsync();
18294
18330
  return !!result;
18295
18331
  }
18296
18332
  static #monitorInitialized = false;
@@ -18306,7 +18342,7 @@ class AppMenu {
18306
18342
  return;
18307
18343
  }
18308
18344
  this.#monitorInitialized = true;
18309
- kefir_esm["default"].fromPromise(gmail_element_getter/* default */.A.getAppMenuAsync()).filter(isNotNil/* default */.A).flatMap(appMenu => (0,make_mutation_observer_chunked_stream/* default */.A)(appMenu, {
18345
+ kefir_esm["default"].fromPromise(gmail_element_getter/* default */.Ay.getAppMenuAsync()).filter(isNotNil/* default */.A).flatMap(appMenu => (0,make_mutation_observer_chunked_stream/* default */.A)(appMenu, {
18310
18346
  childList: true,
18311
18347
  subtree: true,
18312
18348
  attributes: true,
@@ -19864,7 +19900,7 @@ mole_view_module_options.insert = htmlElement => {
19864
19900
  htmlElement.setAttribute('data-inboxsdk-version',
19865
19901
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
19866
19902
  ///@ts-ignore
19867
- "2.2.17-1783630599514-85b889d6702953de");
19903
+ "2.2.19-1786580061685-3573e62ec8d2327b");
19868
19904
  document.head.append(htmlElement);
19869
19905
  };
19870
19906
  mole_view_module_options.domAPI = (styleDomAPI_default());
@@ -19877,6 +19913,105 @@ var mole_view_module_update = injectStylesIntoStyleTag_default()(mole_view_modul
19877
19913
 
19878
19914
  /* harmony default export */ const widgets_mole_view_module = (mole_view_module/* default */.Ay && mole_view_module/* default */.Ay.locals ? mole_view_module/* default */.Ay.locals : undefined);
19879
19915
 
19916
+ ;// CONCATENATED MODULE: ./src/platform-implementation-js/dom-driver/gmail/gmail-driver/sync-mole-spacer-with-right-column.ts
19917
+
19918
+
19919
+
19920
+ /**
19921
+ * Gmail keeps compose/SDK moles clear of the right side panel by widening a flex
19922
+ * spacer at the end of the mole container.
19923
+ *
19924
+ * Gmail drives that spacer for its OWN companion panels (Calendar, Keep, Tasks,
19925
+ * Contacts) but not for InboxSDK content panels, which render in the same
19926
+ * companion sidebar wrapper. So whenever the sidebar column resizes (or the
19927
+ * first mole appears) we match the spacer using Gmail's own formula — companion
19928
+ * content width + rail inset
19929
+ */
19930
+
19931
+ const MOLE_SPACER_SELECTOR = `${gmail_element_getter/* MOLE_CONTAINER_SELECTOR */.MY} > .jAmAWb`;
19932
+
19933
+ /**
19934
+ * Dispatched by the mole driver whenever a mole is added. Creating a mole
19935
+ * doesn't resize the sidebar column, so our observer wouldn't otherwise fire.
19936
+ */
19937
+ const MOLE_SPACER_REFRESH_EVENT = 'inboxsdk__refreshMoleSpacer';
19938
+
19939
+ /** Prevents multiple InboxSDK instances from each installing the observer. */
19940
+ const INSTALLED_ATTR = 'data-inboxsdk-mole-spacer-sync';
19941
+
19942
+ /**
19943
+ * The rail-inset width Gmail keeps on the spacer when only the icon rail is
19944
+ * showing. We hardcode it because there are cases where we
19945
+ * wouldn't be able to grab it from the DOM.
19946
+ */
19947
+ const RAIL_INSET_WIDTH = 66;
19948
+ function syncMoleSpacerWithRightColumn(driver) {
19949
+ const ResizeObserver = __webpack_require__.g.ResizeObserver;
19950
+ if (!ResizeObserver) return;
19951
+ const root = document.documentElement;
19952
+ if (root.hasAttribute(INSTALLED_ATTR)) return;
19953
+ root.setAttribute(INSTALLED_ATTR, 'true');
19954
+ (0,wait_for/* default */.A)(() => gmail_element_getter/* default */.Ay.getCompanionSidebarColumnElement()).then(rightColumn => {
19955
+ let scheduled = false;
19956
+ // Coalesce bursts of mutations into a single read+write per frame so we
19957
+ // don't thrash layout with getBoundingClientRect on every notification.
19958
+ const update = () => {
19959
+ if (scheduled) return;
19960
+ scheduled = true;
19961
+ requestAnimationFrame(() => {
19962
+ scheduled = false;
19963
+ try {
19964
+ updateSpacer();
19965
+ } catch (err) {
19966
+ driver.getLogger().error(err);
19967
+ }
19968
+ });
19969
+ };
19970
+
19971
+ // Width changes when a panel opens/closes/resizes.
19972
+ new ResizeObserver(update).observe(rightColumn);
19973
+
19974
+ // A mole appearing (which also creates the spacer on the very first one)
19975
+ // doesn't touch the right column, so the mole driver signals us directly.
19976
+ document.addEventListener(MOLE_SPACER_REFRESH_EVENT, update);
19977
+ update();
19978
+ }).catch(() => {
19979
+ // No right column on this page (e.g. a Gmail surface without the side
19980
+ // panel). Nothing to keep the moles clear of.
19981
+ });
19982
+ }
19983
+ function updateSpacer() {
19984
+ // The mole container has two `.jAmAWb` flex spacers: the left one (index 0)
19985
+ // and the right one (last).
19986
+ const spacers = document.querySelectorAll(MOLE_SPACER_SELECTOR);
19987
+ const spacer = spacers[spacers.length - 1];
19988
+ // The spacer is part of the mole container, which Gmail loads lazily once a
19989
+ // compose/thread view has been used. Until it exists there is nothing to size.
19990
+ if (!spacer) return;
19991
+ const companion = gmail_element_getter/* default */.Ay.getCompanionSidebarOuterWrapperElement();
19992
+ // The wrapper stays in the DOM when collapsed (`display: none`); only count
19993
+ // it when a companion/SDK panel is actually showing.
19994
+ const companionWidth = companion && getComputedStyle(companion).display !== 'none' ? companion.getBoundingClientRect().width : 0;
19995
+
19996
+ // Match Gmail: content width + rail inset.
19997
+ // When no panel is open, companionWidth is 0 and we restore the rail inset
19998
+ const targetWidth = companionWidth > 0 ? companionWidth + RAIL_INSET_WIDTH : RAIL_INSET_WIDTH;
19999
+ const target = `${targetWidth}px`;
20000
+ if (spacer.style.width !== target) {
20001
+ spacer.style.width = target;
20002
+ refreshComposeToolbars();
20003
+ }
20004
+ }
20005
+
20006
+ /**
20007
+ * Widening the spacer moves the mole (`.AD`) but Gmail doesn't refresh the
20008
+ * `position: fixed; left` it pins on the compose bottom bar (`.aDj.ahe`), so the
20009
+ * toolbar is left behind at its old coordinates. A window resize makes Gmail
20010
+ * re-lay-out the compose toolbars back under the mole.
20011
+ */
20012
+ function refreshComposeToolbars() {
20013
+ (0,fake_window_resize/* default */.A)();
20014
+ }
19880
20015
  ;// CONCATENATED MODULE: ./src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.ts
19881
20016
 
19882
20017
 
@@ -19889,7 +20024,26 @@ var mole_view_module_update = injectStylesIntoStyleTag_default()(mole_view_modul
19889
20024
 
19890
20025
 
19891
20026
 
20027
+
19892
20028
  const gmail_mole_view_driver_INBOXSDK_CLASS = 'inboxsdk__mole_view';
20029
+
20030
+ /**
20031
+ * Compose and SDK mole selector.
20032
+ *
20033
+ * @note 2023-10-11 on :not selectors:
20034
+ *
20035
+ * style*="order: 2147483647;" is the left mole spacer.
20036
+ *
20037
+ * style*="order: 0;" is the right mole spacer.
20038
+ *
20039
+ * .aJl is the chat placeholder.
20040
+ */
20041
+ const MOLE_SELECTOR = `${gmail_element_getter/* MOLE_PARENT_SELECTOR */.pG} > *:not([style*="order: 0;"], [style*="order: 2147483647;"], .aJl)`;
20042
+ const Selector = {
20043
+ Mole: MOLE_SELECTOR,
20044
+ ComposeMole: `${MOLE_SELECTOR}.nn.nH`,
20045
+ ChatMolePlaceholder: `${gmail_element_getter/* MOLE_PARENT_SELECTOR */.pG} > .aJl`
20046
+ };
19893
20047
  class GmailMoleViewDriver {
19894
20048
  static #page;
19895
20049
  static #moleParentReadyEvent = kefir_bus_default()();
@@ -19914,22 +20068,22 @@ class GmailMoleViewDriver {
19914
20068
  },
19915
20069
  watchers: [{
19916
20070
  tag: "mole",
19917
- selectors: [`${".dw .nH > .nH > .no"} > *:not([style*="order: 0;"], [style*="order: 2147483647;"], .aJl)`],
20071
+ selectors: [Selector.Mole],
19918
20072
  sources: ["moleParent"]
19919
20073
  }, {
19920
20074
  tag: "moleParent",
19921
- selectors: [".dw .nH > .nH > .no"],
20075
+ selectors: [gmail_element_getter/* MOLE_PARENT_SELECTOR */.pG],
19922
20076
  sources: [null]
19923
20077
  }],
19924
20078
  finders: {
19925
20079
  ["moleParent"]: {
19926
- fn: root => [root.querySelector(".dw .nH > .nH > .no")].filter(isNotNil/* default */.A),
20080
+ fn: root => [root.querySelector(gmail_element_getter/* MOLE_PARENT_SELECTOR */.pG)].filter(isNotNil/* default */.A),
19927
20081
  interval(elementCount, timeRunning) {
19928
20082
  return timeRunning <= 15_000 && elementCount === 0 ? 100 : 5_000;
19929
20083
  }
19930
20084
  },
19931
20085
  ["mole"]: {
19932
- fn: root => root.querySelectorAll(`${".dw .nH > .nH > .no"} > *:not([style*="order: 0;"], [style*="order: 2147483647;"], .aJl)`),
20086
+ fn: root => root.querySelectorAll(Selector.Mole),
19933
20087
  interval(elementCount, timeRunning) {
19934
20088
  // For initial Gmail load, we want to prevent an issue where compose moles are reordered to the left SDK moles after 5 seconds when
19935
20089
  //
@@ -19962,9 +20116,15 @@ class GmailMoleViewDriver {
19962
20116
  case 'add':
19963
20117
  {
19964
20118
  const el = change.value.getValue();
19965
- if (el.matches(`${`${".dw .nH > .nH > .no"} > *:not([style*="order: 0;"], [style*="order: 2147483647;"], .aJl)`}.nn.nH`)) {
20119
+ if (el.matches(Selector.ComposeMole)) {
19966
20120
  this.#maybeMoveMole(el);
19967
20121
  }
20122
+
20123
+ // A new mole must clear whatever panel is open in the right column.
20124
+ // The spacer that does that lives outside the mole parent (and is
20125
+ // itself created alongside the first mole), so poke the sync that
20126
+ // sizes it — adding a mole doesn't resize the column on its own.
20127
+ document.dispatchEvent(new CustomEvent(MOLE_SPACER_REFRESH_EVENT));
19968
20128
  break;
19969
20129
  }
19970
20130
  }
@@ -20063,7 +20223,7 @@ class GmailMoleViewDriver {
20063
20223
  this.#driver.logger.error(new Error('Mole show invariant violated. `lastMole` is not an HTMLElement'));
20064
20224
  return;
20065
20225
  }
20066
- const dw = moleParent.closest('div.dw');
20226
+ const dw = moleParent.closest(gmail_element_getter/* MOLE_CONTAINER_SELECTOR */.MY);
20067
20227
  if (dw) {
20068
20228
  dw.classList.add('inboxsdk__moles_in_use', mole_view_module/* inboxsdkMolesInUse */.jq);
20069
20229
  }
@@ -20081,7 +20241,7 @@ class GmailMoleViewDriver {
20081
20241
  // If the gmail mode has settled, we've been loaded for 10 seconds, and
20082
20242
  // we don't have the mole parent yet, then force the mole parent to load
20083
20243
  // by opening a compose view and then closing it.
20084
- kefir_esm.fromPromise(gmail_element_getter/* default */.A.waitForGmailModeToSettle()).flatMap(() => {
20244
+ kefir_esm.fromPromise(gmail_element_getter/* default */.Ay.waitForGmailModeToSettle()).flatMap(() => {
20085
20245
  // delay until we've passed TimestampOnReady + 5 seconds
20086
20246
  return this.#driver.delayToTimeAfterReady(5_000);
20087
20247
  }).takeUntilBy(moleParentReadyEvent).takeUntilBy(this.#stopper).onValue(async () => {
@@ -21422,7 +21582,7 @@ class GmailNavItemView {
21422
21582
  this._level = level || 0;
21423
21583
  this._navItemNumber = ++NUMBER_OF_GMAIL_NAV_ITEM_VIEWS_CREATED;
21424
21584
  this._orderGroup = orderGroup;
21425
- this._isNewLeftNavParent = !gmail_element_getter/* default */.A.shouldAddNavItemsInline() && this._level === 1;
21585
+ this._isNewLeftNavParent = !gmail_element_getter/* default */.Ay.shouldAddNavItemsInline() && this._level === 1;
21426
21586
  this._element = this.#setupElement();
21427
21587
  }
21428
21588
  #setupElement(navItemDescriptor) {
@@ -21541,7 +21701,7 @@ class GmailNavItemView {
21541
21701
  // nested items (i.e. the current item is of type GROUPER and we're in Gmailv2).
21542
21702
  const indentationFactor = this._type === nav_item_types.GROUPER || this._isNewLeftNavParent ? this._level - 1 : this._level;
21543
21703
  const element = gmailNavItemView.getElement();
21544
- if (!gmail_element_getter/* default */.A.shouldAddNavItemsInline()) {
21704
+ if (!gmail_element_getter/* default */.Ay.shouldAddNavItemsInline()) {
21545
21705
  (0,querySelectorOrFail/* default */.A)(element, '.TN').style.marginLeft = 6 * indentationFactor + 'px';
21546
21706
  } else {
21547
21707
  (0,querySelectorOrFail/* default */.A)(element, '.TN').style.marginLeft = getLeftIndentationPaddingValue() * indentationFactor + 'px';
@@ -21633,7 +21793,7 @@ class GmailNavItemView {
21633
21793
  hAlign: 'left',
21634
21794
  vAlign: 'top'
21635
21795
  };
21636
- const container = gmail_element_getter/* default */.A.getLeftNavContainerElement();
21796
+ const container = gmail_element_getter/* default */.Ay.getLeftNavContainerElement();
21637
21797
  if (!container) throw new Error('leftNavContainer not found');
21638
21798
  buttonOptions.dropdownShowFunction = event => {
21639
21799
  // bhZ is the class to indicate the left nav is collapsible mode
@@ -22135,7 +22295,7 @@ async function addNavItem(driver, orderGroup, navItemDescriptor, navMenuInjectio
22135
22295
  await waitForMenuReady();
22136
22296
  const gmailNavItemView = new GmailNavItemView(driver, orderGroup, 1);
22137
22297
  gmailNavItemView.setNavItemDescriptor(navItemDescriptor);
22138
- if (!gmail_element_getter/* default */.A.isStandalone()) {
22298
+ if (!gmail_element_getter/* default */.Ay.isStandalone()) {
22139
22299
  attachGmailNavItemView(gmailNavItemView, navMenuInjectionContainer);
22140
22300
  }
22141
22301
  return gmailNavItemView;
@@ -22144,7 +22304,7 @@ async function addNavItemToPanel(driver, orderGroup, navItemDescriptor, panelEle
22144
22304
  await waitForMenuReady();
22145
22305
  const gmailNavItemView = new GmailNavItemView(driver, orderGroup, 1);
22146
22306
  gmailNavItemView.setNavItemDescriptor(navItemDescriptor);
22147
- if (!gmail_element_getter/* default */.A.isStandalone()) {
22307
+ if (!gmail_element_getter/* default */.Ay.isStandalone()) {
22148
22308
  if (gmailNavItemView.isSection()) {
22149
22309
  const container = getPanelSectionNavItemContainerElement(panelElement);
22150
22310
  attachGmailNavItemView(gmailNavItemView, container);
@@ -22156,14 +22316,14 @@ async function addNavItemToPanel(driver, orderGroup, navItemDescriptor, panelEle
22156
22316
  return gmailNavItemView;
22157
22317
  }
22158
22318
  const waitForMenuReady = once_default()(async () => {
22159
- const appMenu = await gmail_element_getter/* default */.A.getAppMenuAsync();
22319
+ const appMenu = await gmail_element_getter/* default */.Ay.getAppMenuAsync();
22160
22320
  if (!appMenu) {
22161
22321
  await waitForNavMenuReady();
22162
22322
  }
22163
22323
  });
22164
22324
  const waitForNavMenuReady = once_default()(async () => {
22165
- if (!gmail_element_getter/* default */.A.isStandalone()) {
22166
- await gmail_element_getter/* default */.A.waitForGmailModeToSettle();
22325
+ if (!gmail_element_getter/* default */.Ay.isStandalone()) {
22326
+ await gmail_element_getter/* default */.Ay.waitForGmailModeToSettle();
22167
22327
  await (0,wait_for/* default */.A)(() => document.querySelector('.aeN[role=navigation], .aeN [role=navigation]'));
22168
22328
  // Wait for contents of navmenu to load (needed to figure out if it's integrated gmail mode)
22169
22329
  await (0,wait_for/* default */.A)(() => document.querySelector('.Ls77Lb.aZ6 > .pp'));
@@ -22175,12 +22335,12 @@ function _attachNavItemView(gmailNavItemView, navMenuInjectionContainer) {
22175
22335
  (0,insert_element_in_order/* default */.A)(navMenuInjectionContainer, gmailNavItemView.getElement());
22176
22336
  };
22177
22337
  }
22178
- if (!gmail_element_getter/* default */.A.shouldAddNavItemsInline()) {
22338
+ if (!gmail_element_getter/* default */.Ay.shouldAddNavItemsInline()) {
22179
22339
  // If we're in the modern (non-classic-hangouts) leftnav, then put
22180
22340
  // the added nav items in a floating section at the bottom separate
22181
22341
  // from the Mail section.
22182
22342
  return function () {
22183
- const navMenuInjectionContainer = gmail_element_getter/* default */.A.getSeparateSectionNavItemMenuInjectionContainer();
22343
+ const navMenuInjectionContainer = gmail_element_getter/* default */.Ay.getSeparateSectionNavItemMenuInjectionContainer();
22184
22344
  if (!navMenuInjectionContainer) {
22185
22345
  throw new Error('should not happen');
22186
22346
  }
@@ -22210,7 +22370,7 @@ function _createNavItemsHolder() {
22210
22370
  const holder = document.createElement('div');
22211
22371
  holder.setAttribute('class', 'LrBjie inboxsdk__navMenu');
22212
22372
  holder.innerHTML = '<div class="TK"></div>';
22213
- const navMenuInjectionContainer = gmail_element_getter/* default */.A.getSameSectionNavItemMenuInjectionContainer();
22373
+ const navMenuInjectionContainer = gmail_element_getter/* default */.Ay.getSameSectionNavItemMenuInjectionContainer();
22214
22374
  if (!navMenuInjectionContainer) throw new Error('should not happen');
22215
22375
  navMenuInjectionContainer.insertBefore(holder, navMenuInjectionContainer.children[2]);
22216
22376
  (0,make_mutation_observer_stream/* default */.A)(holder, {
@@ -22228,7 +22388,7 @@ function _createNavItemsHolder() {
22228
22388
 
22229
22389
 
22230
22390
  async function addAppMenuItem(driver, menuItemDescriptor) {
22231
- const appMenuInjectionContainer = await gmail_element_getter/* default */.A.getAppMenuAsync();
22391
+ const appMenuInjectionContainer = await gmail_element_getter/* default */.Ay.getAppMenuAsync();
22232
22392
  const gmailAppMenuItemView = new GmailAppMenuItemView(driver, menuItemDescriptor);
22233
22393
  try {
22234
22394
  if (!appMenuInjectionContainer) return undefined;
@@ -22665,9 +22825,9 @@ function showCustomThreadList(driver, customRouteID, onActivate, params) {
22665
22825
  let findIdFailure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _findIdFailure;
22666
22826
  const uniqueSearch = setupSearchReplacing(driver, customRouteID, onActivate, findIdFailure);
22667
22827
  const customHash = document.location.hash;
22668
- const searchInput = gmail_element_getter/* default */.A.getSearchInput();
22828
+ const searchInput = gmail_element_getter/* default */.Ay.getSearchInput();
22669
22829
  if (!searchInput) throw new Error('could not find search input');
22670
- const inputStream = gmail_element_getter/* default */.A.getMainContentElementChangedStream().changes().take(1).map(() => searchInput).flatMapLatest(input => (0,make_mutation_observer_chunked_stream/* default */.A)(input, {
22830
+ const inputStream = gmail_element_getter/* default */.Ay.getMainContentElementChangedStream().changes().take(1).map(() => searchInput).flatMapLatest(input => (0,make_mutation_observer_chunked_stream/* default */.A)(input, {
22671
22831
  attributes: true,
22672
22832
  attributeOldValue: true
22673
22833
  }).filter(mutationRecords => {
@@ -22698,7 +22858,7 @@ var show_custom_route_view = __webpack_require__(3759);
22698
22858
 
22699
22859
 
22700
22860
  function showNativeRouteView(_gmailDriver) {
22701
- const contentSectionElement = gmail_element_getter/* default */.A.getContentSectionElement();
22861
+ const contentSectionElement = gmail_element_getter/* default */.Ay.getContentSectionElement();
22702
22862
  if (!contentSectionElement) {
22703
22863
  return;
22704
22864
  }
@@ -22796,10 +22956,10 @@ function registerSearchSuggestionsProvider(driver, handler) {
22796
22956
  }).map(event => event.suggestions);
22797
22957
 
22798
22958
  // Wait for the first routeViewDriver to happen before looking for the search box.
22799
- const searchBoxStream = driver.getRouteViewDriverStream().toProperty(() => null).map(() => gmail_element_getter/* default */.A.getSearchInput()).filter(isNotNil/* default */.A).take(1);
22959
+ const searchBoxStream = driver.getRouteViewDriverStream().toProperty(() => null).map(() => gmail_element_getter/* default */.Ay.getSearchInput()).filter(isNotNil/* default */.A).take(1);
22800
22960
 
22801
22961
  // Wait for the search box to be focused before looking for the suggestions box.
22802
- const suggestionsBoxTbodyStream = searchBoxStream.flatMapLatest(searchBox => kefir_esm.fromEvents(searchBox, 'focus')).map(() => gmail_element_getter/* default */.A.getSearchSuggestionsBoxParent()).filter(isNotNil/* default */.A).flatMapLatest(make_element_child_stream/* default */.A).map(x => x.el.firstElementChild).take(1).toProperty();
22962
+ const suggestionsBoxTbodyStream = searchBoxStream.flatMapLatest(searchBox => kefir_esm.fromEvents(searchBox, 'focus')).map(() => gmail_element_getter/* default */.Ay.getSearchSuggestionsBoxParent()).filter(isNotNil/* default */.A).flatMapLatest(make_element_child_stream/* default */.A).map(x => x.el.firstElementChild).take(1).toProperty();
22803
22963
 
22804
22964
  // This stream emits an event after every time Gmail changes the suggestions
22805
22965
  // list.
@@ -23245,7 +23405,7 @@ function _createAppButtonElement(driver, onclick) {
23245
23405
  event.preventDefault();
23246
23406
  onclick(event);
23247
23407
  });
23248
- const topAccountContainer = gmail_element_getter/* default */.A.getTopAccountContainer();
23408
+ const topAccountContainer = gmail_element_getter/* default */.Ay.getTopAccountContainer();
23249
23409
  if (!topAccountContainer) {
23250
23410
  const err = new Error('Could not make button');
23251
23411
  const banner = document.querySelector('[role=banner]');
@@ -23266,7 +23426,7 @@ function _createAppButtonElement(driver, onclick) {
23266
23426
  throw err;
23267
23427
  }
23268
23428
  try {
23269
- if (!gmail_element_getter/* default */.A.isGplusEnabled()) {
23429
+ if (!gmail_element_getter/* default */.Ay.isGplusEnabled()) {
23270
23430
  element.classList.add('inboxsdk__appButton_noGPlus');
23271
23431
  }
23272
23432
  insertionElement.insertBefore(element, insertionElement.lastElementChild);
@@ -23287,8 +23447,8 @@ function _updateTitle(element, descriptor) {
23287
23447
 
23288
23448
 
23289
23449
  function addToolbarButtonForApp(gmailDriver, buttonDescriptor) {
23290
- return gmail_element_getter/* default */.A.waitForGmailModeToSettle().then(() => {
23291
- if (gmail_element_getter/* default */.A.isStandalone()) {
23450
+ return gmail_element_getter/* default */.Ay.waitForGmailModeToSettle().then(() => {
23451
+ if (gmail_element_getter/* default */.Ay.isStandalone()) {
23292
23452
  return new Promise((_resolve, _reject) => {
23293
23453
  //never complete
23294
23454
  });
@@ -23427,7 +23587,7 @@ function setupRouteViewDriverStream(gmailRouteProcessor, driver) {
23427
23587
  // getMainContentElementChangedStream doesn't respect custom views so filter
23428
23588
  // out events from it. This filter is needed if the user is already at a custom
23429
23589
  // view of another InboxSDK instance while this starts up.
23430
- gmail_element_getter/* default */.A.getMainContentElementChangedStream().map(_event => ({
23590
+ gmail_element_getter/* default */.Ay.getMainContentElementChangedStream().map(_event => ({
23431
23591
  urlObject: getURLObject(document.location.href),
23432
23592
  type: 'NATIVE'
23433
23593
  })).filter(options => gmailRouteProcessor.isNativeRoute(options.urlObject.name))]).map(options => {
@@ -23438,7 +23598,7 @@ function setupRouteViewDriverStream(gmailRouteProcessor, driver) {
23438
23598
  if (type === 'NATIVE' && urlObject.name === 'search') {
23439
23599
  const customListRouteId = customListSearchStringsToRouteIds.get(urlObject.params[0]);
23440
23600
  if (customListRouteId) {
23441
- const searchInput = gmail_element_getter/* default */.A.getSearchInput();
23601
+ const searchInput = gmail_element_getter/* default */.Ay.getSearchInput();
23442
23602
  if (!searchInput) throw new Error('Should not happen');
23443
23603
  searchInput.value = '';
23444
23604
 
@@ -23738,7 +23898,7 @@ class NativeGmailNavItemView {
23738
23898
 
23739
23899
  function getNativeNavItem(driver, label) {
23740
23900
  return (0,wait_for/* default */.A)(() => {
23741
- const navContainer = gmail_element_getter/* default */.A.getLeftNavContainerElement();
23901
+ const navContainer = gmail_element_getter/* default */.Ay.getLeftNavContainerElement();
23742
23902
  if (!navContainer) return null;
23743
23903
  return navContainer.querySelector(`.aim a[href*="#${label}"]`);
23744
23904
  }, 300 * 1000).then(labelLinkElement => {
@@ -23751,7 +23911,7 @@ function getNativeNavItem(driver, label) {
23751
23911
  }
23752
23912
  return labelElement.__nativeGmailNavItemView;
23753
23913
  }).catch(err => {
23754
- if (gmail_element_getter/* default */.A.isStandalone()) {
23914
+ if (gmail_element_getter/* default */.Ay.isStandalone()) {
23755
23915
  // never resolve
23756
23916
  // eslint-disable-next-line @typescript-eslint/no-empty-function
23757
23917
  return new Promise((_resolve, _reject) => {});
@@ -23850,14 +24010,14 @@ function registerSearchQueryRewriter(pageCommunicator, obj) {
23850
24010
 
23851
24011
 
23852
24012
  async function openComposeWindow(_gmailDriver) {
23853
- await gmail_element_getter/* default */.A.waitForGmailModeToSettle();
23854
- if (gmail_element_getter/* default */.A.isStandaloneComposeWindow() || gmail_element_getter/* default */.A.isStandaloneThreadWindow()) {
24013
+ await gmail_element_getter/* default */.Ay.waitForGmailModeToSettle();
24014
+ if (gmail_element_getter/* default */.Ay.isStandaloneComposeWindow() || gmail_element_getter/* default */.Ay.isStandaloneThreadWindow()) {
23855
24015
  throw new Error('Can not open new compose while in standalone window');
23856
24016
  }
23857
- if (!gmail_element_getter/* default */.A.getComposeButton()) {
23858
- await (0,wait_for/* default */.A)(() => !!gmail_element_getter/* default */.A.getComposeButton());
24017
+ if (!gmail_element_getter/* default */.Ay.getComposeButton()) {
24018
+ await (0,wait_for/* default */.A)(() => !!gmail_element_getter/* default */.Ay.getComposeButton());
23859
24019
  }
23860
- const composeButton = gmail_element_getter/* default */.A.getComposeButton();
24020
+ const composeButton = gmail_element_getter/* default */.Ay.getComposeButton();
23861
24021
  if (!composeButton) throw new Error('Could not find compose button');
23862
24022
  (0,simulate_mouse_event/* simulateClick */.jp)(composeButton);
23863
24023
  }
@@ -23869,7 +24029,7 @@ var gmail_app_sidebar_view = __webpack_require__(2893);
23869
24029
 
23870
24030
 
23871
24031
  function suppressAddon(driver, addonTitle) {
23872
- (0,stream_wait_for/* default */.A)(() => gmail_element_getter/* default */.A.getCompanionSidebarIconContainerElement()).map(iconContainerElement => {
24032
+ (0,stream_wait_for/* default */.A)(() => gmail_element_getter/* default */.Ay.getCompanionSidebarIconContainerElement()).map(iconContainerElement => {
23873
24033
  // .J-KU-Jg is pre-2018-07-30 element?
23874
24034
  const elementToWatch = iconContainerElement.querySelector('.J-KU-Jg, [role=tablist], .brC-bsf-aT5-aOt');
23875
24035
  if (!elementToWatch) {
@@ -24072,6 +24232,157 @@ function parseListPeopleByKnownIdResponse(data) {
24072
24232
  }
24073
24233
  return response;
24074
24234
  }
24235
+ ;// CONCATENATED MODULE: ./src/platform-implementation-js/dom-driver/gmail/selectors.ts
24236
+ /**
24237
+ * Bundled Gmail selector registry.
24238
+ *
24239
+ * Each key maps to an ORDERED list of candidates, tried one at a time until one
24240
+ * matches. An extension can supply overrides to this registry, which are PREPENDED
24241
+ * to the bundled chain.
24242
+ *
24243
+ * Selectors must be ordered by preference (which selector must be tried first),
24244
+ * not in chronological order.
24245
+ *
24246
+ * Never join a chain into one comma-separated selector: `querySelector('a, b')` picks
24247
+ * the first match in document order, which ignores this ranking.
24248
+ */
24249
+ const GMAIL_SELECTORS = {
24250
+ /**
24251
+ * The compose title-bar table, resolved against the compose root.
24252
+ *
24253
+ * The `Ht`-less rung matches a superset of the `Ht` one, so it must stay BELOW it:
24254
+ * above, it would win always and the specific rung would never run.
24255
+ */
24256
+ 'composeView.titleBarTable': ['.nH.Hy.aXJ table.cf.Ht', '.nH.Hy.aXJ table.cf'],
24257
+ /**
24258
+ * The title-bar cell holding the compose window buttons — inside the table above,
24259
+ * but resolved against the same compose root.
24260
+ */
24261
+ 'composeView.titleBarTd': ['.nH.Hy.aXJ table.cf.Ht td.Hm', '.nH.Hy.aXJ table.cf td.Hm']
24262
+ };
24263
+
24264
+ /** Resolved candidates for every key. The merge builds new lists. */
24265
+
24266
+ /** Shape of the `selectors` object in a remote config. */
24267
+ // EXTERNAL MODULE: ./node_modules/lodash/uniq.js
24268
+ var uniq = __webpack_require__(1285);
24269
+ var uniq_default = /*#__PURE__*/__webpack_require__.n(uniq);
24270
+ ;// CONCATENATED MODULE: ./src/platform-implementation-js/lib/dom/mergeSelectorOverrides.ts
24271
+
24272
+
24273
+ /**
24274
+ * Unmounted fragment, used to validate CSS selectors.
24275
+ */
24276
+ let validationRoot;
24277
+
24278
+ /**
24279
+ * Check whether the given selector is valid.
24280
+ */
24281
+ function isValidSelector(selector) {
24282
+ if (!validationRoot) {
24283
+ validationRoot = document.createDocumentFragment();
24284
+ }
24285
+ try {
24286
+ validationRoot.querySelector(selector);
24287
+ return true;
24288
+ } catch {
24289
+ return false;
24290
+ }
24291
+ }
24292
+
24293
+ /** Called for each dropped candidate: silent to the user, loud to the operator. */
24294
+
24295
+ /**
24296
+ * Merges two selector registry objects (defaults and overrides),
24297
+ * filtering out invalid selectors from the overrides. If found,
24298
+ * it prepends the valid overrides to the defaults.
24299
+ *
24300
+ * @example
24301
+ * ```ts
24302
+ * mergeSelectorOverrides(
24303
+ * { 'composeView.someKey': ['.foo'] },
24304
+ * { 'composeView.someKey': ['.bar', 'invalid selector'] }
24305
+ * );
24306
+ * // { 'composeView.someKey': ['.bar', '.foo'] }
24307
+ * ```
24308
+ */
24309
+ function mergeSelectorOverrides(defaults, overrides, onInvalid) {
24310
+ const merged = {};
24311
+ for (const key of Object.keys(defaults)) {
24312
+ const extra = (overrides[key] ?? []).filter(selector => {
24313
+ if (isValidSelector(selector)) {
24314
+ return true;
24315
+ }
24316
+ onInvalid?.(key, selector);
24317
+ return false;
24318
+ });
24319
+ merged[key] = uniq_default()([...extra, ...defaults[key]]);
24320
+ }
24321
+ return merged;
24322
+ }
24323
+ ;// CONCATENATED MODULE: ./src/platform-implementation-js/lib/dom/selectorRegistry.ts
24324
+
24325
+
24326
+
24327
+ /**
24328
+ * Install overrides into the bundled defaults, filtering out invalid
24329
+ * selectors. If there are any errors merging the overrides, we fallback
24330
+ * to the SDK bundled defaults.
24331
+ */
24332
+ function mergeOrFallBack(_ref) {
24333
+ let {
24334
+ overrides,
24335
+ onInvalidSelector
24336
+ } = _ref;
24337
+ if (!overrides) {
24338
+ return GMAIL_SELECTORS;
24339
+ }
24340
+ try {
24341
+ return mergeSelectorOverrides(GMAIL_SELECTORS, overrides, onInvalidSelector);
24342
+ } catch {
24343
+ return GMAIL_SELECTORS;
24344
+ }
24345
+ }
24346
+
24347
+ /**
24348
+ * Resolves named keys to elements, trying each of the key's candidates in
24349
+ * order. Owned by the GmailDriver, so each InboxSDK instance resolves against
24350
+ * its own candidates and a registry is never read before it is built.
24351
+ */
24352
+ class SelectorRegistry {
24353
+ #candidates;
24354
+ constructor() {
24355
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
24356
+ this.#candidates = mergeOrFallBack(options);
24357
+ }
24358
+
24359
+ /**
24360
+ * Resolve a registry key against `el`, returning null on a miss. Use this
24361
+ * method if you want to degrade functionality when a selector is missing,
24362
+ * instead of throwing an error.
24363
+ */
24364
+ querySelectorByKey(el, key) {
24365
+ // Try each candidate in order, returning the first match (null otherwise).
24366
+ for (const candidateSelector of this.#candidates[key]) {
24367
+ const found = el.querySelector(candidateSelector);
24368
+ if (found) {
24369
+ return found;
24370
+ }
24371
+ }
24372
+ return null;
24373
+ }
24374
+
24375
+ /**
24376
+ * Resolve a registry key against `el`, but throws if no candidate matches.
24377
+ */
24378
+ querySelectorByKeyOrFail(el, key) {
24379
+ const found = this.querySelectorByKey(el, key);
24380
+ if (!found) {
24381
+ throw new querySelectorOrFail/* SelectorError */.a(`${key} (${this.#candidates[key].join(' || ')})`);
24382
+ }
24383
+ return found;
24384
+ }
24385
+ }
24075
24386
  ;// CONCATENATED MODULE: ./src/platform-implementation-js/dom-driver/gmail/gmail-driver.ts
24076
24387
 
24077
24388
 
@@ -24129,6 +24440,8 @@ function parseListPeopleByKnownIdResponse(data) {
24129
24440
 
24130
24441
 
24131
24442
 
24443
+
24444
+
24132
24445
 
24133
24446
 
24134
24447
 
@@ -24146,6 +24459,8 @@ class GmailDriver {
24146
24459
  #logger;
24147
24460
  #opts;
24148
24461
  #envData;
24462
+ /** Resolves selector keys against the bundled defaults plus any overrides. */
24463
+
24149
24464
  #customRouteIDs = new Set();
24150
24465
  #customListRouteIDs = new Map();
24151
24466
  #customListSearchStringsToRouteIds = new Map();
@@ -24181,6 +24496,10 @@ class GmailDriver {
24181
24496
  this.#logger = logger;
24182
24497
  this.#opts = opts;
24183
24498
  this.#envData = envData;
24499
+ this.selectors = new SelectorRegistry({
24500
+ overrides: opts.selectorOverrides,
24501
+ onInvalidSelector: opts.onInvalidSelector
24502
+ });
24184
24503
  this.#page = (0,makePageParserTree/* default */.A)(this, document);
24185
24504
  this.#stopper.onValue(() => this.#page.dump());
24186
24505
 
@@ -24248,6 +24567,7 @@ class GmailDriver {
24248
24567
  gmailLoadEvent(this);
24249
24568
  (0,override_gmail_back_button/* default */.A)(this, this.#gmailRouteProcessor);
24250
24569
  trackGmailStyles();
24570
+ syncMoleSpacerWithRightColumn(this);
24251
24571
  temporaryTrackDownloadUrlValidity(this);
24252
24572
  if (opts.suppressAddonTitle != null) {
24253
24573
  suppressAddon(this, opts.suppressAddonTitle);
@@ -24558,7 +24878,7 @@ class GmailDriver {
24558
24878
  }
24559
24879
  setShowNativeNavMarker(isNative) {
24560
24880
  this.#navMarkerHiddenChanged.emit(null);
24561
- const leftNavContainerElement = gmail_element_getter/* default */.A.getLeftNavContainerElement();
24881
+ const leftNavContainerElement = gmail_element_getter/* default */.Ay.getLeftNavContainerElement();
24562
24882
  if (leftNavContainerElement) {
24563
24883
  if (isNative) {
24564
24884
  leftNavContainerElement.classList.remove('inboxsdk__hide_native_marker');
@@ -24572,8 +24892,8 @@ class GmailDriver {
24572
24892
  }
24573
24893
  setShowNativeAddonSidebar(isNative) {
24574
24894
  this.#addonSidebarHiddenChanged.emit(null);
24575
- const addonContainerElement = gmail_element_getter/* default */.A.getAddonSidebarContainerElement();
24576
- const mainContentBodyContainerElement = gmail_element_getter/* default */.A.getMainContentBodyContainerElement();
24895
+ const addonContainerElement = gmail_element_getter/* default */.Ay.getAddonSidebarContainerElement();
24896
+ const mainContentBodyContainerElement = gmail_element_getter/* default */.Ay.getMainContentBodyContainerElement();
24577
24897
  if (addonContainerElement && mainContentBodyContainerElement) {
24578
24898
  const parent = mainContentBodyContainerElement.parentElement;
24579
24899
  if (!parent) return;
@@ -24684,12 +25004,12 @@ class GmailDriver {
24684
25004
  return appSidebar.addGlobalSidebarContentPanel(descriptor);
24685
25005
  }
24686
25006
  waitForGlobalSidebarReady() {
24687
- const condition = () => gmail_element_getter/* default */.A.getCompanionSidebarContentContainerElement() && (gmail_element_getter/* default */.A.getCompanionSidebarIconContainerElement() || gmail_element_getter/* default */.A.getAddonSidebarContainerElement());
25007
+ const condition = () => gmail_element_getter/* default */.Ay.getCompanionSidebarContentContainerElement() && (gmail_element_getter/* default */.Ay.getCompanionSidebarIconContainerElement() || gmail_element_getter/* default */.Ay.getAddonSidebarContainerElement());
24688
25008
  if (condition()) {
24689
25009
  return kefir_esm.constant(undefined);
24690
25010
  }
24691
25011
  return (0,stream_wait_for/* default */.A)(condition).map(() => undefined).mapErrors(err => {
24692
- const el = document.querySelector('div.aUx');
25012
+ const el = gmail_element_getter/* default */.Ay.getCompanionSidebarColumnElement();
24693
25013
  this.#logger.error(err, {
24694
25014
  reason: 'waitForGlobalSidebarReady timed out',
24695
25015
  aUxHtml: el ? (0,censorHTMLtree/* default */.A)(el) : null
@@ -24700,7 +25020,7 @@ class GmailDriver {
24700
25020
  getGlobalSidebar() {
24701
25021
  let appSidebarView = this.#appSidebarView;
24702
25022
  if (!appSidebarView) {
24703
- const companionSidebarContentContainerEl = gmail_element_getter/* default */.A.getCompanionSidebarContentContainerElement();
25023
+ const companionSidebarContentContainerEl = gmail_element_getter/* default */.Ay.getCompanionSidebarContentContainerElement();
24704
25024
  if (!companionSidebarContentContainerEl) throw new Error('did not find companionSidebarContentContainerEl');
24705
25025
  appSidebarView = this.#appSidebarView = new gmail_app_sidebar_view/* default */.A(this, companionSidebarContentContainerEl);
24706
25026
  }
@@ -32139,7 +32459,7 @@ module.exports = function (element, useCapture) {
32139
32459
  return self;
32140
32460
  };
32141
32461
 
32142
- module.exports.prototype.bind = __webpack_require__(4830);
32462
+ module.exports.prototype.bind = __webpack_require__(2449);
32143
32463
  module.exports.prototype.bindMultiple = __webpack_require__(9829);
32144
32464
  module.exports.prototype.trigger = __webpack_require__(9240);
32145
32465
  module.exports.prototype.reset = __webpack_require__(8967);
@@ -32196,7 +32516,7 @@ module.exports = function (useCapture) {
32196
32516
 
32197
32517
  /***/ }),
32198
32518
 
32199
- /***/ 4830:
32519
+ /***/ 2449:
32200
32520
  /***/ ((module) => {
32201
32521
 
32202
32522
  "use strict";
@@ -39140,325 +39460,6 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
39140
39460
  }
39141
39461
 
39142
39462
 
39143
- /***/ }),
39144
-
39145
- /***/ 9482:
39146
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
39147
-
39148
- "use strict";
39149
- var __webpack_unused_export__;
39150
-
39151
-
39152
- var _interopRequireDefault = __webpack_require__(1654);
39153
-
39154
- __webpack_unused_export__ = ({
39155
- value: true
39156
- });
39157
- __webpack_unused_export__ = exports.np = void 0;
39158
-
39159
- var _classCallCheck2 = _interopRequireDefault(__webpack_require__(9131));
39160
-
39161
- var _createClass2 = _interopRequireDefault(__webpack_require__(8463));
39162
-
39163
- var _defineProperty2 = _interopRequireDefault(__webpack_require__(5985));
39164
-
39165
- var _slicedToArray2 = _interopRequireDefault(__webpack_require__(6583));
39166
-
39167
- var _once = _interopRequireDefault(__webpack_require__(8921));
39168
-
39169
- var _moduleId = __webpack_require__(917);
39170
-
39171
- var _transferrables = _interopRequireDefault(__webpack_require__(5440));
39172
-
39173
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
39174
-
39175
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
39176
-
39177
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
39178
-
39179
- var getXMLHttpRequest = (0, _once["default"])(function () {
39180
- // Make sure we communicate to the injected script that's paired with
39181
- // this instance of this module. This is necessary in case there are
39182
- // multiple javascript bundles with this package executing at once in the
39183
- // same page.
39184
- var instancesById = {};
39185
- var channel = new MessageChannel();
39186
- var port = channel.port1;
39187
- port.addEventListener('message', function (event) {
39188
- var _event$data = event.data,
39189
- id = _event$data.id,
39190
- type = _event$data.type;
39191
- var xhr = instancesById[id];
39192
-
39193
- switch (type) {
39194
- case 'COMPLETE':
39195
- {
39196
- var _event$data2 = event.data,
39197
- headers = _event$data2.headers,
39198
- readyState = _event$data2.readyState,
39199
- status = _event$data2.status,
39200
- statusText = _event$data2.statusText,
39201
- response = _event$data2.response,
39202
- responseText = _event$data2.responseText,
39203
- responseURL = _event$data2.responseURL;
39204
- var headersObj = {};
39205
- headers.split('\r\n').forEach(function (line) {
39206
- var _line$split = line.split(':'),
39207
- _line$split2 = (0, _slicedToArray2["default"])(_line$split, 2),
39208
- name = _line$split2[0],
39209
- value = _line$split2[1];
39210
-
39211
- if (name && value) {
39212
- headersObj[name.toLowerCase().trim()] = value.trim();
39213
- }
39214
- });
39215
- xhr._headers = headers;
39216
- xhr._headersObj = headersObj;
39217
- xhr.status = status;
39218
- xhr.statusText = statusText;
39219
- xhr.readyState = readyState;
39220
- xhr.response = response;
39221
- xhr.responseText = responseText;
39222
- xhr.responseURL = responseURL;
39223
- delete instancesById[id];
39224
-
39225
- var _loop = function _loop() {
39226
- var event = _arr[_i];
39227
- var eventObj = {
39228
- name: event,
39229
- target: xhr
39230
- };
39231
- var handlers = Object.prototype.hasOwnProperty.call(xhr._eventListeners, event) ? xhr._eventListeners[event] : [];
39232
- handlers.forEach(function (handler) {
39233
- return handler(eventObj);
39234
- });
39235
-
39236
- if (xhr['on' + event]) {
39237
- xhr['on' + event](eventObj);
39238
- }
39239
- };
39240
-
39241
- for (var _i = 0, _arr = ['load', 'loadend', 'readystatechange']; _i < _arr.length; _i++) {
39242
- _loop();
39243
- }
39244
-
39245
- break;
39246
- }
39247
-
39248
- default:
39249
- {
39250
- // eslint-disable-next-line no-console
39251
- console.error('ext-corb-workaround: Unknown event in content script:', event);
39252
- }
39253
- }
39254
- });
39255
- port.addEventListener('messageerror', function (event) {
39256
- // eslint-disable-next-line no-console
39257
- console.error('ext-corb-workaround: Unknown error in content script:', event);
39258
- });
39259
- port.start();
39260
- window.postMessage({
39261
- type: 'ext-corb-workaround_port',
39262
- moduleId: _moduleId.moduleId,
39263
- port: channel.port2
39264
- }, document.location.origin, [channel.port2]);
39265
- var nextFreeId = 0;
39266
-
39267
- var CORBWorkaroundXMLHttpRequest = /*#__PURE__*/function () {
39268
- function CORBWorkaroundXMLHttpRequest() {
39269
- var _this = this;
39270
-
39271
- (0, _classCallCheck2["default"])(this, CORBWorkaroundXMLHttpRequest);
39272
- (0, _defineProperty2["default"])(this, "UNSENT", 0);
39273
- (0, _defineProperty2["default"])(this, "OPENED", 1);
39274
- (0, _defineProperty2["default"])(this, "HEADERS_RECEIVED", 2);
39275
- (0, _defineProperty2["default"])(this, "LOADING", 3);
39276
- (0, _defineProperty2["default"])(this, "DONE", 4);
39277
- (0, _defineProperty2["default"])(this, "_id", nextFreeId++);
39278
- (0, _defineProperty2["default"])(this, "_eventListeners", {});
39279
- (0, _defineProperty2["default"])(this, "_headersObj", {});
39280
- (0, _defineProperty2["default"])(this, "status", 0);
39281
- (0, _defineProperty2["default"])(this, "statusText", '');
39282
- (0, _defineProperty2["default"])(this, "readyState", 0);
39283
- (0, _defineProperty2["default"])(this, "response", '');
39284
- (0, _defineProperty2["default"])(this, "responseText", '');
39285
- (0, _defineProperty2["default"])(this, "responseURL", '');
39286
- (0, _defineProperty2["default"])(this, "_headers", '');
39287
- (0, _defineProperty2["default"])(this, "responseType", void 0);
39288
- (0, _defineProperty2["default"])(this, "withCredentials", void 0);
39289
- (0, _defineProperty2["default"])(this, "setRequestHeader", void 0);
39290
- (0, _defineProperty2["default"])(this, "open", void 0);
39291
- (0, _defineProperty2["default"])(this, "send", void 0);
39292
- (0, _defineProperty2["default"])(this, "abort", void 0);
39293
- var id = this._id;
39294
- instancesById[id] = this;
39295
- port.postMessage({
39296
- type: 'NEW_XHR',
39297
- id: id
39298
- });
39299
-
39300
- var _iterator = _createForOfIteratorHelper(['responseType', 'withCredentials']),
39301
- _step;
39302
-
39303
- try {
39304
- var _loop2 = function _loop2() {
39305
- var prop = _step.value;
39306
- var value = undefined;
39307
- Object.defineProperty(_this, prop, {
39308
- get: function get() {
39309
- return value;
39310
- },
39311
- set: function set(newValue) {
39312
- value = newValue;
39313
- port.postMessage({
39314
- type: 'SET',
39315
- id: id,
39316
- prop: prop,
39317
- value: newValue
39318
- });
39319
- }
39320
- });
39321
- };
39322
-
39323
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
39324
- _loop2();
39325
- }
39326
- } catch (err) {
39327
- _iterator.e(err);
39328
- } finally {
39329
- _iterator.f();
39330
- }
39331
-
39332
- var _iterator2 = _createForOfIteratorHelper(['setRequestHeader', 'open', 'send', 'abort']),
39333
- _step2;
39334
-
39335
- try {
39336
- var _loop3 = function _loop3() {
39337
- var method = _step2.value;
39338
-
39339
- _this[method] = function () {
39340
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
39341
- args[_key] = arguments[_key];
39342
- }
39343
-
39344
- port.postMessage({
39345
- type: 'CALL',
39346
- id: id,
39347
- method: method,
39348
- args: args
39349
- }, (0, _transferrables["default"])(args));
39350
- };
39351
- };
39352
-
39353
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
39354
- _loop3();
39355
- }
39356
- } catch (err) {
39357
- _iterator2.e(err);
39358
- } finally {
39359
- _iterator2.f();
39360
- }
39361
- }
39362
-
39363
- (0, _createClass2["default"])(CORBWorkaroundXMLHttpRequest, [{
39364
- key: "getAllResponseHeaders",
39365
- value: function getAllResponseHeaders() {
39366
- return this._headers;
39367
- }
39368
- }, {
39369
- key: "getResponseHeader",
39370
- value: function getResponseHeader(header) {
39371
- header = header.toLowerCase();
39372
-
39373
- if (Object.prototype.hasOwnProperty.call(this._headersObj, header)) {
39374
- return this._headersObj[header];
39375
- }
39376
- }
39377
- }, {
39378
- key: "addEventListener",
39379
- value: function addEventListener(event, handler) {
39380
- if (!Object.prototype.hasOwnProperty.call(this._eventListeners, event)) {
39381
- this._eventListeners[event] = [];
39382
- }
39383
-
39384
- this._eventListeners[event].push(handler);
39385
- }
39386
- }, {
39387
- key: "removeEventListener",
39388
- value: function removeEventListener(event, handler) {
39389
- if (Object.prototype.hasOwnProperty.call(this._eventListeners, event)) {
39390
- this._eventListeners[event] = this._eventListeners[event].filter(function (_handler) {
39391
- return handler !== _handler;
39392
- });
39393
- }
39394
- }
39395
- }]);
39396
- return CORBWorkaroundXMLHttpRequest;
39397
- }();
39398
-
39399
- (0, _defineProperty2["default"])(CORBWorkaroundXMLHttpRequest, "UNSENT", 0);
39400
- (0, _defineProperty2["default"])(CORBWorkaroundXMLHttpRequest, "OPENED", 1);
39401
- (0, _defineProperty2["default"])(CORBWorkaroundXMLHttpRequest, "HEADERS_RECEIVED", 2);
39402
- (0, _defineProperty2["default"])(CORBWorkaroundXMLHttpRequest, "LOADING", 3);
39403
- (0, _defineProperty2["default"])(CORBWorkaroundXMLHttpRequest, "DONE", 4);
39404
- return CORBWorkaroundXMLHttpRequest;
39405
- }); // TODO add replacement fetch too?
39406
-
39407
- exports.np = getXMLHttpRequest;
39408
- var installGlobally = (0, _once["default"])(function () {
39409
- window.XMLHttpRequest = getXMLHttpRequest();
39410
- });
39411
- __webpack_unused_export__ = installGlobally;
39412
-
39413
-
39414
- /***/ }),
39415
-
39416
- /***/ 917:
39417
- /***/ ((__unused_webpack_module, exports) => {
39418
-
39419
- "use strict";
39420
-
39421
-
39422
- Object.defineProperty(exports, "__esModule", ({
39423
- value: true
39424
- }));
39425
- exports.moduleId = void 0;
39426
- var moduleId = '1f24 e53a';
39427
- exports.moduleId = moduleId;
39428
-
39429
-
39430
- /***/ }),
39431
-
39432
- /***/ 5440:
39433
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
39434
-
39435
- "use strict";
39436
-
39437
-
39438
- var _interopRequireDefault = __webpack_require__(1654);
39439
-
39440
- Object.defineProperty(exports, "__esModule", ({
39441
- value: true
39442
- }));
39443
- exports["default"] = transferrables;
39444
-
39445
- var _typeof2 = _interopRequireDefault(__webpack_require__(2990));
39446
-
39447
- function transferrables(list) {
39448
- return list.map(function (value) {
39449
- if (value && (0, _typeof2["default"])(value) === 'object' && value.__proto__) {
39450
- if (value.__proto__.constructor.name === 'ArrayBuffer') {
39451
- return value;
39452
- }
39453
-
39454
- if (value.__proto__.__proto__ && value.__proto__.__proto__.constructor.name === 'TypedArray') {
39455
- return value.buffer;
39456
- }
39457
- }
39458
- }).filter(Boolean);
39459
- }
39460
-
39461
-
39462
39463
  /***/ }),
39463
39464
 
39464
39465
  /***/ 5215: