@inboxsdk/core 2.1.32 → 2.1.34

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 (25) hide show
  1. package/inboxsdk.js +202 -1574
  2. package/package.json +1 -1
  3. package/pageWorld.js +45 -1530
  4. package/src/common/html-to-text.d.ts +10 -22
  5. package/src/common/html-to-text.d.ts.map +1 -1
  6. package/src/common/removeHtmlTags.d.ts +25 -0
  7. package/src/common/removeHtmlTags.d.ts.map +1 -0
  8. package/src/inboxsdk-js/header.d.ts +1 -0
  9. package/src/inboxsdk-js/header.d.ts.map +1 -1
  10. package/src/inboxsdk.d.ts +60 -12
  11. package/src/injected-js/main.d.ts +1 -1
  12. package/src/injected-js/main.d.ts.map +1 -1
  13. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts +4 -1
  14. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts.map +1 -1
  15. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +13 -0
  16. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts.map +1 -1
  17. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts +1 -0
  18. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts.map +1 -1
  19. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.d.ts +1 -0
  20. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.d.ts.map +1 -1
  21. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.d.ts +1 -1
  22. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.d.ts.map +1 -1
  23. package/src/platform-implementation-js/namespaces/global.d.ts +7 -1
  24. package/src/platform-implementation-js/namespaces/global.d.ts.map +1 -1
  25. package/src/platform-implementation-js/views/collapsible-section-view.d.ts.map +1 -1
package/inboxsdk.js CHANGED
@@ -785,31 +785,62 @@ const get = function get(map, key) {
785
785
 
786
786
  /***/ }),
787
787
 
788
- /***/ 9865:
788
+ /***/ 7954:
789
789
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
790
790
 
791
791
  "use strict";
792
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
793
- /* harmony export */ "Z": () => (/* binding */ htmlToText)
794
- /* harmony export */ });
795
- /* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7856);
796
- /* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_0__);
797
792
 
798
- const escapeHTMLPolicy = globalThis.trustedTypes?.createPolicy('inboxSdkEscapePolicy', {
799
- createHTML: string => (0,dompurify__WEBPACK_IMPORTED_MODULE_0__.sanitize)(string)
793
+ // EXPORTS
794
+ __webpack_require__.d(__webpack_exports__, {
795
+ "Z": () => (/* binding */ htmlToText)
796
+ });
797
+
798
+ ;// CONCATENATED MODULE: ./src/common/removeHtmlTags.ts
799
+ /**
800
+ * This function removes all HTML tags from a string.
801
+ * The resulting string may still contain HTML entities and not be suitable to display as plain text.
802
+ *
803
+ * This function's output will never contain `<` and therefore will never contain any HTML
804
+ * tags, so it's safe to use this on arbitrary input and assign the result to an element's
805
+ * innerHTML property.
806
+ *
807
+ * @see Use [htmlToText](./html-to-text.ts) instead if you want to convert HTML to
808
+ * unformatted text to display.
809
+ */
810
+ function removeHtmlTags(html) {
811
+ return html.replace(/<[^>]*>?/g, '');
812
+ }
813
+
814
+ /**
815
+ * This policy object is used to strip HTML tags from a string.
816
+ */
817
+ const removeHtmlTagsPolicy = globalThis.trustedTypes?.createPolicy('inboxSdk__removeHtmlTagsPolicy', {
818
+ createHTML(string) {
819
+ return removeHtmlTags(string);
820
+ }
800
821
  }) ?? {
801
822
  createHTML(string) {
802
- return (0,dompurify__WEBPACK_IMPORTED_MODULE_0__.sanitize)(string);
823
+ return removeHtmlTags(string);
803
824
  }
804
825
  };
826
+ ;// CONCATENATED MODULE: ./src/common/html-to-text.ts
827
+
805
828
 
806
829
  /**
807
- * Quick function for converting HTML with entities into text without
808
- * introducing an XSS vulnerability.
830
+ * Converts HTML to unformatted plain text.
831
+ * Works by stripping all HTML tags and converting entities to symbols.
832
+ * Safe to use on arbitrary input.
833
+ *
834
+ * Converts text like `String with <b>html</b> &amp; entities &lt;&gt;` to
835
+ * `String with html & entities <>`.
836
+ *
837
+ * This is *not* for creating "safe HTML" from user input to assign to
838
+ * an element's innerHTML. The result of this function should not be treated
839
+ * as HTML.
809
840
  */
810
841
  function htmlToText(html) {
811
842
  const div = document.createElement('div');
812
- div.innerHTML = escapeHTMLPolicy.createHTML(html);
843
+ div.innerHTML = removeHtmlTagsPolicy.createHTML(html);
813
844
  return div.textContent;
814
845
  }
815
846
 
@@ -844,7 +875,7 @@ function isElementVisible(el) {
844
875
 
845
876
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- SDK_VERSION is injected by webpack
846
877
  ///@ts-ignore
847
- const BUILD_VERSION = "2.1.32-1708607508797-85b290630a069af5";
878
+ const BUILD_VERSION = "2.1.34-1709323061294-288354aa384296d7";
848
879
  if (false) {}
849
880
 
850
881
  /***/ }),
@@ -1763,6 +1794,7 @@ const GmailElementGetter = {
1763
1794
  }
1764
1795
  return topAccountContainer.querySelectorAll('a[href*="https://plus"][href*="upgrade"]').length === 0;
1765
1796
  },
1797
+ /** @deprecated this doesn't include Gmail themes where the frame is dark and the body is not. Use Global.gmailTheme instead */
1766
1798
  isDarkTheme() {
1767
1799
  return document.body.classList.contains('inboxsdk__gmail_dark_theme');
1768
1800
  },
@@ -1806,7 +1838,7 @@ const GmailElementGetter = {
1806
1838
  /* harmony import */ var lodash_last__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_last__WEBPACK_IMPORTED_MODULE_1__);
1807
1839
  /* harmony import */ var transducers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1095);
1808
1840
  /* harmony import */ var transducers_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(transducers_js__WEBPACK_IMPORTED_MODULE_2__);
1809
- /* harmony import */ var _common_html_to_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9865);
1841
+ /* harmony import */ var _common_html_to_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7954);
1810
1842
  /* harmony import */ var _common_assert__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9817);
1811
1843
 
1812
1844
 
@@ -10558,7 +10590,7 @@ options.insert = htmlElement => {
10558
10590
  htmlElement.setAttribute('data-inboxsdk-version',
10559
10591
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
10560
10592
  ///@ts-ignore
10561
- "2.1.32-1708607508797-85b290630a069af5");
10593
+ "2.1.34-1709323061294-288354aa384296d7");
10562
10594
  document.head.append(htmlElement);
10563
10595
  };
10564
10596
  options.domAPI = (styleDomAPI_default());
@@ -15288,7 +15320,7 @@ options.insert = htmlElement => {
15288
15320
  htmlElement.setAttribute('data-inboxsdk-version',
15289
15321
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
15290
15322
  ///@ts-ignore
15291
- "2.1.32-1708607508797-85b290630a069af5");
15323
+ "2.1.34-1709323061294-288354aa384296d7");
15292
15324
  document.head.append(htmlElement);
15293
15325
  };
15294
15326
  options.domAPI = (styleDomAPI_default());
@@ -15331,7 +15363,10 @@ class GmailCollapsibleSectionView {
15331
15363
  #isCollapsed = false;
15332
15364
  #inboxDropdownButtonView = null;
15333
15365
  #dropdownViewController = null;
15334
- constructor(_driver, groupOrderHint, isSearch, isCollapsible) {
15366
+ #tableRowsUnmountResolution = null;
15367
+ #driver;
15368
+ constructor(driver, groupOrderHint, isSearch, isCollapsible) {
15369
+ this.#driver = driver;
15335
15370
  this.#isSearch = isSearch;
15336
15371
  this.#groupOrderHint = groupOrderHint;
15337
15372
  this.#isCollapsible = isCollapsible;
@@ -15339,6 +15374,7 @@ class GmailCollapsibleSectionView {
15339
15374
  this.#isReadyDeferred = defer();
15340
15375
  }
15341
15376
  destroy() {
15377
+ this.#unmountRows();
15342
15378
  this.#element?.remove();
15343
15379
  if (this.#eventStream) this.#eventStream.end();
15344
15380
  this.#headerElement?.remove();
@@ -15351,6 +15387,10 @@ class GmailCollapsibleSectionView {
15351
15387
  this.#inboxDropdownButtonView?.destroy();
15352
15388
  this.#dropdownViewController?.destroy();
15353
15389
  }
15390
+ #unmountRows() {
15391
+ this.#tableRowsUnmountResolution?.();
15392
+ this.#tableRowsUnmountResolution = null;
15393
+ }
15354
15394
  getElement() {
15355
15395
  const element = this.#element;
15356
15396
  if (!element) throw new Error('tried to access element that does not exist');
@@ -15363,6 +15403,11 @@ class GmailCollapsibleSectionView {
15363
15403
  const stoppedProperty = collapsibleSectionDescriptorProperty.takeUntilBy(this.#eventStream.filter(() => false).beforeEnd(() => null));
15364
15404
  stoppedProperty.onValue(x => this.#updateValues(x));
15365
15405
  stoppedProperty.take(1).onValue(() => this.#isReadyDeferred.resolve(this));
15406
+ this.#driver.gmailThemeStream.onValue(() => {
15407
+ if (Object.keys(this.#collapsibleSectionDescriptor).length) {
15408
+ this.#updateValues(this.#collapsibleSectionDescriptor);
15409
+ }
15410
+ });
15366
15411
  }
15367
15412
  setCollapsed(value) {
15368
15413
  if (!this.#isCollapsible) {
@@ -15579,17 +15624,44 @@ class GmailCollapsibleSectionView {
15579
15624
  if (this.#tableBodyElement) this.#tableBodyElement.appendChild(tableElement);
15580
15625
  const tbody = tableElement.querySelector('tbody');
15581
15626
  const eventStream = this.#eventStream;
15582
- tableRows.forEach(result => {
15627
+ this.#unmountRows();
15628
+
15629
+ /**
15630
+ * @todo use Promise.withResolvers when target ES2024 added to TS.
15631
+ */
15632
+ const promise = new Promise(res => this.#tableRowsUnmountResolution = res);
15633
+ for (const result of tableRows) {
15583
15634
  const rowElement = document.createElement('tr');
15584
- rowElement.setAttribute('class', 'inboxsdk__resultsSection_tableRow zA ' + (result.isRead ? 'yO' : 'zE'));
15635
+ const {
15636
+ iconHtml,
15637
+ isRead = {
15638
+ background: false
15639
+ },
15640
+ title: recipients,
15641
+ shortDetailText,
15642
+ attachmentIcon
15643
+ } = result;
15644
+ const useReadBackground = typeof isRead === 'object' && isRead.background || isRead === true;
15645
+ const arbitraryHTMLAndClassName = [[iconHtml, gmail_collapsible_section_view_module/* iconAtStart */.IF], [recipients, gmail_collapsible_section_view_module/* recipients */.Fz], ...('snippet' in result ? [[result.snippet, gmail_collapsible_section_view_module/* snippet */.DB]] : []), [attachmentIcon, gmail_collapsible_section_view_module/* attachmentIcon */.HM], [shortDetailText, gmail_collapsible_section_view_module/* shortDetail */.n]];
15646
+ rowElement.setAttribute('class', 'inboxsdk__resultsSection_tableRow zA ' + (useReadBackground ? 'yO' : 'zE'));
15585
15647
  rowElement.innerHTML = _getRowHTML(result);
15648
+ for (const [maybeRenderer, className] of arbitraryHTMLAndClassName) {
15649
+ if (!maybeRenderer || typeof maybeRenderer === 'string') {
15650
+ continue;
15651
+ }
15652
+ const el = (0,querySelectorOrFail/* default */.Z)(rowElement, `.${className}`);
15653
+ maybeRenderer({
15654
+ el,
15655
+ unmountPromise: promise
15656
+ });
15657
+ }
15586
15658
  if (!tbody) throw new Error('should not happen');
15587
15659
  tbody.appendChild(rowElement);
15588
15660
  eventStream.plug(kefir_esm.fromEvents(rowElement, 'click').map(() => ({
15589
15661
  eventName: 'rowClicked',
15590
15662
  rowDescriptor: result
15591
15663
  })));
15592
- });
15664
+ }
15593
15665
  }
15594
15666
  #updateMessageElement(collapsibleSectionDescriptor) {
15595
15667
  const messageElement = this.#messageElement;
@@ -15791,7 +15863,7 @@ function _getTableHTML() {
15791
15863
  }
15792
15864
  function _getRowHTML(result) {
15793
15865
  let iconHtml = '';
15794
- if (result.iconHtml != null) {
15866
+ if (result.iconHtml != null && typeof result.iconHtml === 'string') {
15795
15867
  iconHtml = (auto_html_js_default())`<div class="inboxsdk__resultsSection_result_icon inboxsdk__resultsSection_result_iconHtml">
15796
15868
  ${{
15797
15869
  __html: result.iconHtml
@@ -15801,7 +15873,18 @@ function _getRowHTML(result) {
15801
15873
  iconHtml = (auto_html_js_default())`<img class="inboxsdk__resultsSection_result_icon ${result.iconClass || ''}" src="${result.iconUrl}">`;
15802
15874
  } else if (result.iconClass) iconHtml = (auto_html_js_default())`<div class="${result.iconClass}"></div>`;
15803
15875
  const labelsHtml = Array.isArray(result.labels) ? result.labels.map(_getLabelHTML).join('') : '';
15804
- const rowArr = ['<td class="xY PF"></td>', '<td class="xY oZ-x3"></td>', '<td class="xY WA">', iconHtml, '</td>', '<td class="xY WA"></td>', '<td class="xY yX inboxsdk__resultsSection_result_title">', '<div class="yW">', '<span ' + (result.isRead ? '' : 'class="zF"') + '>', escape_default()(result.title), '</span>', '</div>', '</td>', '<td class="xY a4W">', '<div class="xS">', '<div class="xT">', '<div class="yi">', labelsHtml, '</div>', '<div class="y6">', '<span class="bog">', result.isRead ? '' : '<b>', escape_default()(result.body || ''), result.isRead ? '' : '</b>', '</span>', '</div>', '</div>', '</div>', '</td>', '<td class="xY xW">', '<span' + (result.isRead ? '' : ' class="bq3"') + '>', escape_default()(result.shortDetailText || ''), '</span>', '</td>'];
15876
+ const {
15877
+ isRead = {
15878
+ text: true
15879
+ },
15880
+ title,
15881
+ shortDetailText
15882
+ } = result;
15883
+ const useReadText = typeof isRead === 'object' && isRead.text || result.isRead === true;
15884
+ const rowArr = ['<td class="xY PF"></td>', `<td class="xY oZ-x3 ${gmail_collapsible_section_view_module/* iconAtStart */.IF}">`, iconHtml, '</td>',
15885
+ // Native Gmail thread rows include this '<td class="xY WA"></td>',
15886
+ // and this '<td class="xY WA"></td>',
15887
+ `<td class="xY yX ${gmail_collapsible_section_view_module/* resultTitle */.GQ}">`, '<div class="yW">', `<span class="${gmail_collapsible_section_view_module/* recipients */.Fz}${useReadText ? '' : ' zF'}">`, ...(typeof title === 'string' ? [escape_default()(title)] : []), '</span>', '</div>', '</td>', '<td class="xY a4W">', '<div class="xS">', '<div class="xT">', '<div class="yi">', labelsHtml, '</div>', `<div class="y6 ${gmail_collapsible_section_view_module/* snippet */.DB}">`, `<span class="bog${useReadText ? '' : ' ' + gmail_collapsible_section_view_module/* unread */.NM}">`, useReadText ? '' : '<b>', escape_default()('body' in result && result.body || ''), useReadText ? '' : '</b>', '</span>', '</div>', `<div class="${gmail_collapsible_section_view_module/* attachmentIcon */.HM}"></div>`, '</div>', '</div>', '</td>', '<td class="xY xW">', `<span class="${gmail_collapsible_section_view_module/* shortDetail */.n} ${useReadText ? gmail_collapsible_section_view_module/* unread */.NM : 'bq3'}">`, ...(typeof shortDetailText === 'string' ? [escape_default()(shortDetailText)] : []), '</span>', '</td>'];
15805
15888
  return rowArr.join('');
15806
15889
  }
15807
15890
  function _getLabelHTML(label) {
@@ -17121,7 +17204,9 @@ var events = __webpack_require__(7187);
17121
17204
 
17122
17205
 
17123
17206
 
17124
- const RGB_REGEX = /^rgb\s*\(\s*(\d+),\s*(\d+),\s*(\d+)\s*\)/;
17207
+
17208
+ /** should handle rgb and rgba */
17209
+ const RGB_REGEX = /^rgba?\s*\(\s*(\d+),\s*(\d+),\s*(\d+)\s*(,\s*(0\.)?\d+)?\)/;
17125
17210
  function getDensity() {
17126
17211
  const navItemElement = document.querySelector('.aim');
17127
17212
  if (!navItemElement) {
@@ -17148,9 +17233,23 @@ async function checkForDarkThemeSafe() {
17148
17233
  }
17149
17234
  throw e;
17150
17235
  }
17151
- return isDarkTheme();
17236
+ return isFrameDarkTheme();
17152
17237
  }
17153
- function isDarkTheme() {
17238
+ function extractRgbColor(colorString) {
17239
+ const match = RGB_REGEX.exec(colorString);
17240
+ if (!match) {
17241
+ lib_logger/* default.error */.Z.error(new Error('Failed to read color string'), {
17242
+ colorString
17243
+ });
17244
+ return;
17245
+ }
17246
+ return {
17247
+ r: +match[1],
17248
+ g: +match[2],
17249
+ b: +match[3]
17250
+ };
17251
+ }
17252
+ function isFrameDarkTheme() {
17154
17253
  // get the color of the left-nav-menu entries to determine whether Gmail is
17155
17254
  // in dark theme mode.
17156
17255
  const navItem = getNavItem();
@@ -17159,28 +17258,27 @@ function isDarkTheme() {
17159
17258
  return false;
17160
17259
  }
17161
17260
  const colorString = getComputedStyle(navItem).getPropertyValue('color');
17162
- const colorMatch = RGB_REGEX.exec(colorString);
17163
- if (!colorMatch) {
17164
- lib_logger/* default.error */.Z.error(new Error('Failed to read color string'), {
17165
- colorString
17166
- });
17261
+ const {
17262
+ r
17263
+ } = extractRgbColor(colorString) ?? {};
17264
+ if (r === undefined) {
17167
17265
  return false;
17168
17266
  }
17169
- const r = +colorMatch[1],
17170
- g = +colorMatch[2],
17171
- b = +colorMatch[3];
17172
- // rgb(32, 33, 36) is the default color of nav items in Material Gmail
17173
- if (r === 32 && g === 33 && b === 36) {
17267
+ return r > 128;
17268
+ }
17269
+ function isBodyDarkTheme() {
17270
+ const bodyEl = document.querySelector('.bkK > .nH');
17271
+ if (!bodyEl) {
17174
17272
  return false;
17175
17273
  }
17176
- if (r !== g || r !== b) {
17177
- lib_logger/* default.error */.Z.error(new Error('Nav item color not grayscale'), {
17178
- r,
17179
- g,
17180
- b
17181
- });
17274
+ const bgColor = getComputedStyle(bodyEl).backgroundColor;
17275
+ const {
17276
+ r
17277
+ } = extractRgbColor(bgColor) ?? {};
17278
+ if (r != null) {
17279
+ return r < 128;
17182
17280
  }
17183
- return r > 128;
17281
+ return false;
17184
17282
  }
17185
17283
  const stylesStream = kefir_bus_default()();
17186
17284
  async function trackGmailStyles() {
@@ -17199,19 +17297,28 @@ async function trackGmailStyles() {
17199
17297
  currentDensity = newDensity;
17200
17298
  document.body.classList.add('inboxsdk__gmail_density_' + currentDensity);
17201
17299
  }
17202
- const newDarkTheme = isDarkTheme();
17300
+ const newDarkTheme = isFrameDarkTheme();
17203
17301
  if (currentDarkTheme !== newDarkTheme) {
17204
17302
  currentDarkTheme = newDarkTheme;
17205
17303
  if (currentDarkTheme) {
17206
- document.body.classList.add('inboxsdk__gmail_dark_theme');
17304
+ document.body.classList.add("inboxsdk__gmail_dark_theme");
17207
17305
  } else {
17208
- document.body.classList.remove('inboxsdk__gmail_dark_theme');
17306
+ document.body.classList.remove("inboxsdk__gmail_dark_theme");
17209
17307
  }
17210
- stylesStream.emit({
17211
- type: 'theme',
17212
- isDarkMode: newDarkTheme
17213
- });
17214
17308
  }
17309
+ const newBodyDarkTheme = isBodyDarkTheme();
17310
+ if (newBodyDarkTheme) {
17311
+ document.body.classList.add("inboxsdk__gmail_dark_body_theme");
17312
+ } else {
17313
+ document.body.classList.remove("inboxsdk__gmail_dark_body_theme");
17314
+ }
17315
+ stylesStream.emit({
17316
+ type: 'theme',
17317
+ isDarkMode: {
17318
+ frame: currentDarkTheme,
17319
+ body: newBodyDarkTheme
17320
+ }
17321
+ });
17215
17322
  }
17216
17323
  try {
17217
17324
  await (0,wait_for/* default */.Z)(() => document.querySelector('.TO .TN') && document.querySelector(navItemSelector));
@@ -18469,10 +18576,11 @@ var content_panel_view = __webpack_require__(1346);
18469
18576
 
18470
18577
  class Global {
18471
18578
  #driver;
18472
- #piOpts;
18473
- constructor(appId, driver, piOpts) {
18579
+ constructor(appId, driver, _piOpts) {
18474
18580
  this.#driver = driver;
18475
- this.#piOpts = piOpts;
18581
+ }
18582
+ get gmailTheme() {
18583
+ return this.#driver.gmailTheme;
18476
18584
  }
18477
18585
  async addSidebarContentPanel(descriptor) {
18478
18586
  // kefirCast casts to Observable<any, any> which is not what we want
@@ -19302,7 +19410,7 @@ mole_view_module_options.insert = htmlElement => {
19302
19410
  htmlElement.setAttribute('data-inboxsdk-version',
19303
19411
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
19304
19412
  ///@ts-ignore
19305
- "2.1.32-1708607508797-85b290630a069af5");
19413
+ "2.1.34-1709323061294-288354aa384296d7");
19306
19414
  document.head.append(htmlElement);
19307
19415
  };
19308
19416
  mole_view_module_options.domAPI = (styleDomAPI_default());
@@ -20173,8 +20281,8 @@ function encodeDraftUrlId(syncThreadId, syncMessageId) {
20173
20281
  }
20174
20282
  // EXTERNAL MODULE: ./src/platform-implementation-js/driver-common/getOriginalMessagePage.ts
20175
20283
  var getOriginalMessagePage = __webpack_require__(8102);
20176
- // EXTERNAL MODULE: ./src/common/html-to-text.ts
20177
- var html_to_text = __webpack_require__(9865);
20284
+ // EXTERNAL MODULE: ./src/common/html-to-text.ts + 1 modules
20285
+ var html_to_text = __webpack_require__(7954);
20178
20286
  ;// CONCATENATED MODULE: ./src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.ts
20179
20287
 
20180
20288
 
@@ -23379,6 +23487,12 @@ function parseListPeopleByKnownIdResponse(data) {
23379
23487
  * @internal
23380
23488
  */
23381
23489
  class GmailDriver {
23490
+ #gmailTheme = {
23491
+ isDarkMode: {
23492
+ frame: false,
23493
+ body: false
23494
+ }
23495
+ };
23382
23496
  #appId;
23383
23497
  #logger;
23384
23498
  #opts;
@@ -23848,6 +23962,22 @@ class GmailDriver {
23848
23962
  this.getKeyboardShortcutHelpModifier().delete(keyboardShortcutHandle);
23849
23963
  });
23850
23964
  }
23965
+ get gmailTheme() {
23966
+ return this.#gmailTheme;
23967
+ }
23968
+
23969
+ /**
23970
+ * Listen for if Gmail changes its theme (dark, light, or frame dark / body light mode).
23971
+ */
23972
+ get gmailThemeStream() {
23973
+ return stylesStream.flatMap(event => {
23974
+ if (event.type !== 'theme') {
23975
+ return kefir_esm.never();
23976
+ }
23977
+ this.#gmailTheme.isDarkMode = event.isDarkMode;
23978
+ return kefir_esm.constant(event.isDarkMode);
23979
+ });
23980
+ }
23851
23981
  #setupEventStreams() {
23852
23982
  var result = makeXhrInterceptor();
23853
23983
  this.#xhrInterceptorStream = result.xhrInterceptStream.takeUntilBy(this.#stopper);
@@ -32717,9 +32847,16 @@ module.exports["default"] = exports.default;
32717
32847
 
32718
32848
  "use strict";
32719
32849
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
32850
+ /* harmony export */ "DB": () => (/* binding */ snippet),
32851
+ /* harmony export */ "Fz": () => (/* binding */ recipients),
32852
+ /* harmony export */ "GQ": () => (/* binding */ resultTitle),
32853
+ /* harmony export */ "HM": () => (/* binding */ attachmentIcon),
32854
+ /* harmony export */ "IF": () => (/* binding */ iconAtStart),
32855
+ /* harmony export */ "NM": () => (/* binding */ unread),
32720
32856
  /* harmony export */ "Oc": () => (/* binding */ subtitle),
32721
32857
  /* harmony export */ "TN": () => (/* binding */ title),
32722
- /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
32858
+ /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
32859
+ /* harmony export */ "n": () => (/* binding */ shortDetail)
32723
32860
  /* harmony export */ });
32724
32861
  /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);
32725
32862
  /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
@@ -32730,10 +32867,17 @@ module.exports["default"] = exports.default;
32730
32867
 
32731
32868
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
32732
32869
  // Module
32733
- ___CSS_LOADER_EXPORT___.push([module.id, ".Wn{--inboxsdk-title-color:rgb(0 0 0 / 87%);--inboxsdk-subtitle-color:rgb(0 0 0 / 54%)}.inboxsdk__gmail_dark_theme .Wn{--inboxsdk-title-color:rgb(255 255 255);--inboxsdk-subtitle-color:rgb(255 255 255 / 70%)}.Wn.inboxsdk__ZWrBCcqtIqrDEdUtPOrg{color:var(--inboxsdk-title-color)}.Wn .inboxsdk__WFNlIHJZA6zYVSDGWS2K{color:var(--inboxsdk-subtitle-color)}", ""]);
32870
+ ___CSS_LOADER_EXPORT___.push([module.id, ".Wn{--inboxsdk-title-color:rgb(0 0 0 / 87%);--inboxsdk-subtitle-color:rgb(0 0 0 / 54%)}.inboxsdk__gmail_dark_body_theme .Wn{--inboxsdk-title-color:rgb(255 255 255);--inboxsdk-subtitle-color:rgb(255 255 255 / 70%)}.Wn.inboxsdk__ZWrBCcqtIqrDEdUtPOrg{color:var(--inboxsdk-title-color)}.Wn .inboxsdk__WFNlIHJZA6zYVSDGWS2K{color:var(--inboxsdk-subtitle-color)}.xY.inboxsdk__HBTr58WKm0EhmpKhN5k1{max-width:calc(168px + (30px*2));flex-basis:calc(168px + (30px*2))}.inboxsdk__HBTr58WKm0EhmpKhN5k1 span{text-overflow:ellipsis;display:block;overflow:hidden}.inboxsdk__kN8mmVlzZVbzIS_awdJ_,.inboxsdk__Va73Osg6o8dIKLvkvywn,.inboxsdk__oxF6Ne2PQsND932WpK9J,.inboxsdk__N8BEpD1pdj535bJKkz7u,.inboxsdk__rusCS8I3RyomwIQUtkef{content:\"\"}.inboxsdk__POtXLY2WRLq21pk7OxRg b{font-weight:700}.inboxsdk__N8BEpD1pdj535bJKkz7u.inboxsdk__POtXLY2WRLq21pk7OxRg{color:rgb(95 99 104)}.inboxsdk__gmail_dark_body_theme .inboxsdk__N8BEpD1pdj535bJKkz7u.inboxsdk__POtXLY2WRLq21pk7OxRg{color:rgb(255 255 255/50%)}", ""]);
32734
32871
  // Exports
32735
32872
  var title = "inboxsdk__ZWrBCcqtIqrDEdUtPOrg";
32736
32873
  var subtitle = "inboxsdk__WFNlIHJZA6zYVSDGWS2K";
32874
+ var resultTitle = "inboxsdk__HBTr58WKm0EhmpKhN5k1";
32875
+ var attachmentIcon = "inboxsdk__kN8mmVlzZVbzIS_awdJ_";
32876
+ var iconAtStart = "inboxsdk__Va73Osg6o8dIKLvkvywn";
32877
+ var recipients = "inboxsdk__oxF6Ne2PQsND932WpK9J";
32878
+ var shortDetail = "inboxsdk__N8BEpD1pdj535bJKkz7u";
32879
+ var snippet = "inboxsdk__rusCS8I3RyomwIQUtkef";
32880
+ var unread = "inboxsdk__POtXLY2WRLq21pk7OxRg";
32737
32881
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
32738
32882
 
32739
32883
 
@@ -32818,7 +32962,7 @@ var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_g
32818
32962
  var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);
32819
32963
  var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___);
32820
32964
  // Module
32821
- ___CSS_LOADER_EXPORT___.push([module.id, ".inboxsdk__notransition{transition:none!important}.inboxsdk__close_button{height:24px;width:24px;opacity:.7;position:relative;background:0 0;border:0;padding:0;box-sizing:content-box;outline:0;cursor:pointer}.inboxsdk__close_button:focus,.inboxsdk__close_button:hover{opacity:1}.inboxsdk__close_button:focus::before{background-color:rgb(0 0 0/12%)}.inboxsdk__close_button::before{border-radius:50%;position:absolute;inset:-4px -4px -4px -4px;padding:4px;content:\" \"}.inboxsdk__close_button::after{content:\" \";background:url(https://www.gstatic.com/images/icons/material/system/1x/close_black_24dp.png);position:absolute;height:24px;width:24px;top:0;left:0}@media (min-resolution:192dpi){.inboxsdk__close_button::after{background:url(https://www.gstatic.com/images/icons/material/system/2x/close_black_24dp.png);background-size:contain}}.inboxsdk__nJrOYb9x4IUalKhkqH70{display:none}.inboxsdk__drawer_view_container{visibility:visible;direction:initial;position:fixed;height:100vh;width:100vw;bottom:0;left:0;z-index:51;pointer-events:none}.inboxsdk__drawer_view{position:absolute;pointer-events:auto;top:0;bottom:0;right:0;width:452px;font:13px\"Helvetica Neue\",Helvetica,Arial,sans-serif;display:flex;flex-direction:column;background-color:#fff;outline:0;box-shadow:0 0 8px rgb(0 0 0/18%),0 8px 16px rgb(0 0 0/36%);transform:translateX(100%);transition:transform 150ms cubic-bezier(.4,0,.2,1)}.inboxsdk__drawer_view.inboxsdk__match_sidebar_content_panel_width{width:300px}.inboxsdk__drawer_view.inboxsdk__active{transform:none}.inboxsdk__drawer_title_bar{background-color:#f5f5f5;border-bottom:1px solid #e0e0e0;padding:16px 20px;white-space:nowrap;display:flex;flex:0 0 auto}.inboxsdk__drawer_title_bar .inboxsdk__close_button{margin-right:20px;flex-shrink:0}.inboxsdk__drawer_title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:20px/24px\"Helvetica Neue\",Helvetica,Arial,sans-serif}.inboxsdk__inbox_backdrop{visibility:visible;position:fixed;height:100vh;width:100vw;bottom:0;left:0;z-index:50;background-color:transparent;transition:background-color 150ms cubic-bezier(.4,0,1,1)}.inboxsdk__inbox_backdrop.inboxsdk__active{background-color:rgb(10 10 10/60%);transition:background-color 70ms cubic-bezier(0,0,.2,1)}.inboxsdk__inbox_backdrop~.inboxsdk__inbox_backdrop{opacity:.6}.inboxsdk__YVRXKNcaUvgm8xbnhvbA{display:flex;flex-direction:column}.inboxsdk__L1YTilBb_3NY6uyjljIg>.inboxsdk__close_button{position:absolute;bottom:10px;right:20px}.inboxsdk__ZsVjiThsnbCmCG_X1Vvn{width:216px}.inboxsdk__RRnCd87hoA2uHeC1Z_FE{overflow:hidden;font:12px Arial,sans-serif;max-height:100%;box-sizing:border-box}.inboxsdk__iYzl6PjYB9v7KGQNbONH{white-space:nowrap;display:flex;user-select:none;cursor:default}.inboxsdk__RRnCd87hoA2uHeC1Z_FE:not(.inboxsdk__o9YcckDJql686JS0n2cc) .inboxsdk__iYzl6PjYB9v7KGQNbONH{border-bottom:1px solid #ddd}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__XdCPRDkO7zSIv6nU4USH .inboxsdk__iYzl6PjYB9v7KGQNbONH,.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__iYzl6PjYB9v7KGQNbONH:hover{background:rgb(0 0 0/3%)}.inboxsdk__lD1h9YUibxcHdtWGdiWq{min-width:0;overflow:hidden;text-overflow:ellipsis}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__lD1h9YUibxcHdtWGdiWq{cursor:move}.inboxsdk__p_cMIiZvN4vwQdGOpCts{padding-left:6px;vertical-align:middle;font:700 13px/40px\"Helvetica Neue\",Helvetica,Arial,sans-serif;color:rgb(0 0 0/87%)}.inboxsdk__L1YTilBb_3NY6uyjljIg.inboxsdk__fQK2Ffccj51PVtC_ibDc .inboxsdk__iYzl6PjYB9v7KGQNbONH{display:none}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__iYzl6PjYB9v7KGQNbONH:hover .inboxsdk__KudoZ1EBFoQsddbSavvj{position:absolute;top:0;left:0;width:10px;height:40px;background:url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ")50%center no-repeat}.inboxsdk__TFQRFr4aJVmDmx2llTVx{width:20px;height:20px;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;margin-top:-1px}.inboxsdk__Yzt2_upvw7fe6BjWdlhZ,.inboxsdk__Yzt2_upvw7fe6BjWdlhZ>img{width:13px;height:13px}.inboxsdk__M4Frio2Us0lwSTltblkg{flex:1;text-align:right;visibility:hidden}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__M4Frio2Us0lwSTltblkg{visibility:visible;cursor:pointer}.inboxsdk__Nr6Udyn2ocUynKpdfxh1{margin-top:12px;margin-right:4px;background:url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ")center/20px no-repeat;border:0;width:14px;height:14px;transform:rotate(-90deg);transition:-webkit-transform .15s,transform .15s;outline:0;opacity:.6;cursor:pointer}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__XdCPRDkO7zSIv6nU4USH .inboxsdk__iYzl6PjYB9v7KGQNbONH .inboxsdk__Nr6Udyn2ocUynKpdfxh1,.inboxsdk__iYzl6PjYB9v7KGQNbONH:hover .inboxsdk__Nr6Udyn2ocUynKpdfxh1{opacity:.9}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__o9YcckDJql686JS0n2cc .inboxsdk__Nr6Udyn2ocUynKpdfxh1{transform:rotate(0)}.inboxsdk__QsikHKWmzD0Ovsg3wrIw{margin-bottom:25px}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__ARG5bpD2vntIyElH978u{position:relative}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon:focus,.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon:hover{outline:0}.inboxsdk__appid_warning{margin:0;padding:9px;color:#4b4b4b;background:#ff6c6c;font-size:10pt}.inboxsdk__appid_warning_main,a.inboxsdk__appid_register{display:inline-block;vertical-align:middle}.inboxsdk__appid_warning .topline{font-weight:700;font-size:11pt}a.inboxsdk__appid_register{color:#fff;background:#1989ff;border-radius:3px;text-decoration:none;box-shadow:0 0 5px rgb(0 0 0/30%);padding:7px;font-size:10pt;margin-left:1em}.inboxsdk__thread_row_icon_wrapper{display:inline-block}.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_iconImg{margin-top:0}.inboxsdk__QbxpXL1mja3SlO_1nJOS{background:#f8ebc0;margin-bottom:10px;padding:12px 4px 6px 12px}.inboxsdk__suggestions_separator_before{padding-bottom:2px!important}.inboxsdk__suggestions_separator_after{border-top:1px solid #e5e5e5;padding-top:2px!important}div.T-I.inboxsdk__button{user-select:none;min-width:27px}.inboxsdk__no_bg{background:0 0}.inboxsdk__button.inboxsdk__button_disabled{opacity:.55}.inboxsdk__button_icon+.inboxsdk__button_text{margin-left:5px}.inboxsdk__button_icon{display:inline-block}.inboxsdk__button_iconImg{height:20px;width:20px;vertical-align:middle;margin-top:-2px;user-drag:none;user-select:none;-webkit-user-drag:none}.inboxsdk__button_green_hover,.inboxsdk__button_green_inactive{background-image:-webkit-linear-gradient(top,transparent,transparent);background-image:linear-gradient(top,transparent,transparent);border:1px solid transparent;text-shadow:none}.inboxsdk__button_green_inactive{box-shadow:0 1px 0 rgb(0 0 0/5%);background-color:#53a93f;color:#fff}.inboxsdk__button_green_hover{box-shadow:inset 0-1px 0#4c8534;background-color:#65b045;border-bottom:1px solid #4c8534}.inboxsdk__button_green_active{box-shadow:inset 0 1px 0#2f6124;background:#3e802f;border:1px solid transparent;border-top:1px solid #2f6124;color:#fff;text-shadow:none}.inboxsdk__menu{min-width:1em;min-height:1em;padding:0;overflow:visible;max-height:none;z-index:7;cursor:default;font-size:13px;margin:0;outline:0}.inboxsdk__menu>.inboxsdk__menuContent{padding:0;box-shadow:0 8px 10px 1px rgb(0 0 0/14%),0 3px 14px 2px rgb(0 0 0/12%),0 5px 5px -3px rgb(0 0 0/20%);transition:opacity .218s;border:1px solid rgb(0 0 0/20%);background:#fff;outline:0}.f4.J-N-JX.inboxsdk__message_more_icon{height:16px;margin-top:1px;width:16px}.dw .nH>.no .nH.nn:last-child[style*=\"width: 310px;\"],body:has(.companion_app_sidebar_visible) .dw .nH>.no .nH.nn:last-child{width:366px!important}.inboxsdk__composeButton{height:20px;width:20px;padding:4px}.inboxsdk__composeButton,.inboxsdk__compose_sendButton{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;outline:0;position:relative}.inboxsdk__composeButton+.inboxsdk__composeButton{margin-left:4px}.inboxsdk__composeButton .inboxsdk__button_icon{opacity:.55}.inboxsdk__composeButton.inboxsdk__composeButton_active .inboxsdk__button_icon,.inboxsdk__composeButton:focus .inboxsdk__button_icon,.inboxsdk__composeButton:hover .inboxsdk__button_icon{opacity:1}.inboxsdk__composeButton::before{content:\"\";display:block;opacity:0;position:absolute;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1);inset:0 0 0 0;background:0 0;box-sizing:border-box;transform:scale(0);transition-property:transform,opacity;border-radius:4px}.inboxsdk__composeButton:hover::before{background-color:rgb(32 33 36/5.9%);border:0;box-shadow:none;opacity:1;transform:scale(1)}.inboxsdk__composeButton.inboxsdk__composeButton_active::before,.inboxsdk__composeButton:focus::before{background-color:rgb(32 33 36/12.2%);border:0;box-shadow:none;opacity:1;transform:scale(1)}.inboxsdk__compose_actionToolbar .inboxsdk__compose_groupedActionToolbar div.inboxsdk__composeButton:last-child{margin-right:0}.inboxsdk__compose_sendButton{background-color:#1a73e8;color:#fff;height:24px;width:auto;border-radius:4px;padding:6px 4px;margin-left:2px}.inboxsdk__compose_inlineReply .inboxsdk__compose_sendButton{height:24px}.inboxsdk__compose_sendButton.inboxsdk__composeButton_active,.inboxsdk__compose_sendButton:focus{background-color:#5094ed;box-shadow:0 1px 1px 0 rgb(66 133 244/30%),0 1px 3px 1px rgb(66 133 244/15%);border:0}.T-I~.inboxsdk__compose_sendButton{margin-left:-6px}.inboxsdk__compose_actionToolbar{white-space:nowrap;padding-left:6px}.inboxsdk__compose_actionToolbar .inboxsdk__button_icon{height:20px;width:20px;display:inline-flex;user-select:none}.inboxsdk__compose_actionToolbar .inboxsdk__button_iconImg{height:17px;width:17px;display:inline-flex;margin:auto}.inboxsdk__compose_actionToolbar+.gU:not(.inboxsdk__compose_separator){padding-left:8px}.inboxsdk__compose_groupedActionToolbar_visible .aDg .aDh{overflow-y:visible}.inboxsdk__compose_groupedActionToolbar{position:absolute;bottom:44px;z-index:10;border-radius:2px;box-shadow:0 4px 5px 0 rgb(0 0 0/14%),0 1px 10px 0 rgb(0 0 0/12%),0 2px 4px -1px rgb(0 0 0/20%);margin:3px 3px 7px;padding:4px 5px;background:#fff;left:-3px}.inboxsdk__compose_inlineReply .inboxsdk__compose_groupedActionToolbar{left:14px}.inboxsdk__compose_groupedActionToolbar .inboxsdk__composeButton:first-child{margin-left:0;margin-right:0}.inboxsdk__composeButton.inboxsdk__compose_groupedActionButton{margin-right:0}.inboxsdk__compose_groupedActionToolbar .inboxsdk__composeButton{padding:4px}.inboxsdk__compose_groupedActionToolbar_visible .bA3{height:40px}.inboxsdk__compose_groupedActionToolbar div.inboxsdk__button{z-index:1;margin-right:0}.inboxsdk__compose_groupedActionToolbar_arrow,span.inboxsdk__thread_row_custom_draft_label+div.yW{display:none}.inboxsdk__compose_customSendContainer{display:inline-block;position:relative;outline:0;margin:6px 0;padding:0;vertical-align:middle;height:36px;line-height:36px}.inboxsdk__compose_customTitleBarColor>img.Ha,.inboxsdk__compose_customTitleBarColor>img.Hl,.inboxsdk__compose_customTitleBarColor>img.Hq{background-color:transparent!important}.inboxsdk__compose_hasCustomTitleBarText,.inboxsdk__compose_hasCustomTitleBarText>tbody>tr{display:flex}.inboxsdk__compose_hasCustomTitleBarText>tbody>tr{align-items:center}.inboxsdk__compose_hasCustomTitleBarText>tbody{width:100%}.inboxsdk__compose_nativeTitleBarText{display:none!important}.inboxsdk__compose_customTitleBarText{width:calc(100% - 80px)}.inboxsdk__compose_hasCustomTitleBarText td.Hm{margin-right:10px;margin-left:auto}.inboxsdk__compose_statusBarPrependContainer{border-top:1px solid #cfcfcf}.inboxsdk__compose_statusBarPrependContainer+table td.gU{border-top:none}input.inboxsdk__x_close_button{background-color:transparent;background-image:url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ");background-size:cover;background-repeat:no-repeat;background-position:center center;height:20px;width:20px;border:0;vertical-align:middle;cursor:pointer;float:right;margin:5px}.inboxsdk__gmail_label.inboxsdk__label_has_icon .au{display:inline-block;margin-left:14px}.inboxsdk__thread_row_label .inboxsdk__button_icon,.inboxsdk__thread_row_label .inboxsdk__button_iconImg{height:11px;width:11px}.inboxsdk__thread_row_label .inboxsdk__button_icon{display:inline-block;margin-top:3px;margin-left:4px;position:absolute}.inboxsdk__thread_row_button{outline:0;height:20px;width:20px;padding:0}.inboxsdk__thread_row_button .inboxsdk__button_icon{max-height:100%}.inboxsdk__thread_row_custom_date_container,.zA>.xY.inboxsdk__thread_row_attachment_icons_present{max-width:inherit}.inboxsdk__thread_row_button .inboxsdk__button_iconImg{height:20px;width:20px;margin-top:0}.inboxsdk__gmail_action{float:right;position:relative;background-color:gray;margin-left:1em;cursor:default;background-image:-webkit-linear-gradient(top,#e9e9e9,#e6e6e6);background-image:linear-gradient(top,#e9e9e9,#e6e6e6);border:1px solid rgb(0 0 0/10%);border-color:#ccc;color:#444;height:17px;line-height:17px;min-width:56px;border-radius:2px;font-size:11px;font-weight:700;text-align:center;white-space:nowrap;padding:0 18px 0 6px}.inboxsdk__gmail_action:focus{border:1px solid #4d90fe;outline:0}.inboxsdk__gmail_action:active{box-shadow:inset 0 1px 2px rgb(0 0 0/10%)}.inboxsdk__gmail_action:hover{box-shadow:0 1px 1px rgb(0 0 0/5%);background-color:#ededed;background-image:-webkit-linear-gradient(top,#ededed,#eaeaea);background-image:linear-gradient(top,#ededed,#eaeaea);border-color:#b8b8b8}.inboxsdk__gmail_action::after{content:\"\";position:absolute;right:5px;top:5px;margin-left:5px;background:no-repeat url(https://ssl.gstatic.com/mail/sprites/smartmail-561acb673be75c1d374881a95997fce4.png)-67px -100px;width:7px;height:7px;opacity:.55}.inboxsdk__thread_row_custom_date{margin-left:2px}span.inboxsdk__thread_row_custom_date+span:not(.inboxsdk__thread_row_custom_date){display:none}.inboxsdk__thread_row_attachment_iconWrapper{margin-left:3px;height:16px}.inboxsdk__thread_row_attachment_icon{margin-left:3px;width:16px;height:16px}.inboxsdk__thread_row_attachment_iconWrapper{display:flex;justify-content:center;align-items:center;width:max-content}.zA td.apU.xY{width:initial}.zA td.apU.xY span.inboxsdk__thread_row_button{margin:0 10px;opacity:.16}.zA.aqw td.apU.xY span.inboxsdk__thread_row_button{opacity:.54}.zA.aqw td.apU.xY span.inboxsdk__thread_row_button:hover{opacity:1}.zA td.apU.xY span.inboxsdk__thread_row_button::before{width:0;height:0}.inboxsdk__thread_row_attachment_icon{vertical-align:middle}.Zs .xY.inboxsdk__thread_row_attachment_icons_present{flex-grow:0}.Zs .xY.inboxsdk__thread_row_label{order:1}.Zs .xY.inboxsdk__thread_row_icon_wrapper{order:1;margin-left:3px;margin-right:0}.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_icon,.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_iconImg{height:18px;width:18px}.inboxsdk__thread_row_icon_wrapper{width:20px;margin-right:3px;align-self:center;height:20px;flex:0 0 auto}.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_iconImg{vertical-align:top}.inboxsdk__thread_row_image_added .y6 .inboxsdk__thread_row_icon_wrapper~span[id]{margin-left:3px}.inboxsdk__thread_row_image_added .a4W,.inboxsdk__thread_row_image_added .apA,.inboxsdk__thread_row_image_added .apx{position:relative}[inboxsdk__message_added_attachment_icon] td.gH div.gK>span:first-child>img,[inboxsdk__message_added_attachment_icon] td.gH>span:first-child>img{margin-right:3px;margin-left:3px;margin-top:0}[inboxsdk__message_added_attachment_icon] td.gH div.gK>span:first-child>:last-child,[inboxsdk__message_added_attachment_icon] td.gH>span:first-child>:last-child{margin-right:6px}.inboxsdk__message_attachment_icon,.inboxsdk__message_attachment_iconWrapper{width:21px;height:21px;position:relative}.inboxsdk__message_attachment_iconWrapper{margin:auto 3px;display:inline-flex;justify-content:center;align-items:center;vertical-align:top}.inboxsdk__message_attachment_tooltipWrapper{position:absolute;top:19px;z-index:10}.gU .aWQ{max-height:3px}.aQw .inboxsdk__button_icon{display:inline-flex;align-items:center;justify-content:center;height:28px}.aQw .inboxsdk__button_iconImg{height:18px;width:18px;margin-top:2px}.aZi .asa .inboxsdk__button_iconImg{display:inline-block;vertical-align:middle;margin-top:-3px}.aZi .aZj .asa .inboxsdk__button_iconImg{margin:0}body .dw{z-index:6!important}.inboxsdk__compose_outerSidebar_wrapper{position:absolute;left:-401px;top:0;background:#fff;width:400px;bottom:0;border-left:1px solid silver;box-shadow:-2px 0 1px #e6e6e6;display:block}.inboxsdk__outerSidebarActive .aSt .inboxsdk__compose_outerSidebar_wrapper{border-left:0;box-shadow:none;left:-400px}.inboxsdk__outerSidebarActive .aSs>div{width:50%!important;margin-left:30%}.inboxsdk__compose_outerSidebar_header{background:#404040;font-size:80%;padding:10px 10px 11px;color:#fff;border-bottom:1px solid #c4c4c4}.inboxsdk__compose_outerSidebar_body{position:absolute;width:100%;bottom:43px;top:36px;left:-1px;overflow:auto}.inboxsdk__compose_outerSidebar_footer{position:absolute;bottom:0;width:100%;border-top:1px solid rgb(206 206 206);display:block}.inboxsdk__compose_innerSidebarActive .GQ,.inboxsdk__compose_innerSidebarActive form{padding-right:200px}div.inboxsdk__compose_statusbar{border:0;height:40px;margin:0}.inboxsdk__compose_statusbar{background:0 0;position:relative}.HM .I5 .inboxsdk__compose_statusbar{padding:0 16px 16px}table+.inboxsdk__compose_statusbar{margin-top:-8px}body.inboxsdk__classic_gmail_recipients_area .inboxsdk__compose_statusbarActive .aoI{height:auto!important}.inboxsdk__compose_statusbarActive .aDl{z-index:unset}.inboxsdk__compose .qz{max-height:inherit!important}body:not(.inboxsdk_hack_disableComposeSizeFixer) .inboxsdk__size_fixer .aDj.aDi{position:static!important}.inboxsdk__compose_inlineReply.inboxsdk__compose_statusbarActive .HM .I5{padding-bottom:var(--inboxsdk-total-added-statusbar-height, 0px)}.inboxsdk__compose_inlineReply.inboxsdk__compose_statusbarActive .aDj::before{height:calc(100% + var(--inboxsdk-total-added-statusbar-height, 0px))}.inboxsdk__compose_inlineReply.inboxsdk__compose_statusbarActive .aDj.aDi>.aDh{background-color:#fff}.inboxsdk__recipient_row{display:flex}.inboxsdk__compose_notice{background-color:#f5f5f5;border-radius:4px;margin:10px;padding:10px 16px}.inboxsdk__recipient_row td.ok{height:20px;padding:0!important}.inboxsdk__recipient_row td.az3{padding:0 3px}.inboxsdk__compose_forceRecipientsOpen .fX.aXjCH{display:block!important}.inboxsdk__compose_forceRecipientRowHidden,.inboxsdk__compose_forceRecipientsOpen .aoD.hl,.inboxsdk__compose_hideRecipientArea .aoD.hl,.inboxsdk__compose_hideRecipientArea .fX.aXjCH,[data-thread-toolbar=true] [data-rowlist-toolbar=true],[data-toolbar-expanded=false] [data-toolbar-expanded=true],[data-toolbar-expanded=true] [data-toolbar-expanded=false],[data-toolbar-icononly=true] .inboxsdk__button_text{display:none!important}[data-toolbar-icononly=false] .inboxsdk__button_text{color:#5f6368}[data-toolbar-icononly=false] .asa::before{border-radius:4px;border:0!important}[data-toolbar-icononly=false] .inboxsdk__button{align-items:center;border:0;display:inline-flex;justify-content:center;position:relative;z-index:0;-webkit-font-smoothing:antialiased;font-family:\"Google Sans\",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.15px;background:0 0;box-sizing:border-box;color:#5f6368;cursor:pointer;font-weight:500;outline:0;padding:0 8px}.inboxsdk__menuItem .inboxsdk__icon,.inboxsdk__menuItem img{height:16px;width:16px;margin-top:-1px}.inboxsdk__modal_overlay{right:0;bottom:0}.inboxsdk__modal_fullscreen{position:fixed;inset:0 0 0 0;z-index:503;display:flex;justify-content:center;align-items:center;padding:110px 50px 50px}.inboxsdk__modal_content{margin-top:30px;margin-bottom:30px}.inboxsdk__modal_fullscreen.inboxsdk__modal_content_no_buttons .inboxsdk__modal_content{margin-bottom:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_content_no_buttons:not(.inboxsdk__modal_hideBottom) .inboxsdk__modal_content{margin-bottom:0;padding-bottom:24px}.inboxsdk__modal_close{outline:0;cursor:pointer}.inboxsdk__modal_fullscreen .inboxsdk__modal_container{position:relative;margin-top:-60px;width:auto;overflow:hidden}.inboxsdk__modal_fullscreen .inboxsdk__modal_container .inboxsdk__modal_toprow{margin-right:16px}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .inboxsdk__modal_close{display:none}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .inboxsdk__modal_container{padding-top:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .inboxsdk__modal_content{margin-top:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .Kj-JD-K7{margin:0;display:none}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideSides .inboxsdk__modal_container,.inboxsdk__modal_fullscreen.inboxsdk__modal_hideSides .inboxsdk__modal_content{padding-left:0;padding-right:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideBottom .inboxsdk__modal_content{margin-bottom:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideBottom .inboxsdk__modal_container{padding-bottom:0}.inboxsdk__modal_toprow.inboxsdk__modal_toprow--constrain-title-width{display:flex}.inboxsdk__modal_toprow--constrain-title-width>span[role=heading]{flex:1;width:0;word-wrap:break-word}.inboxsdk__drawers_in_use .aDi,.inboxsdk__moles_in_use .aDi{left:auto!important;position:static}.inboxsdk__moles_in_use .nH>.nH>.no{white-space:nowrap}.inboxsdk__moles_in_use .nH>.nH>.no>*{white-space:initial}.inboxsdk__moles_in_use .nH>.nH>.no>.nn{display:inline-block;float:none}.inboxsdk__mole_view{position:relative;max-width:564px;height:100vh;vertical-align:top;display:inline-flex;align-items:flex-end}.inboxsdk__mole_view_inner{visibility:visible;box-sizing:border-box;margin-right:5px;box-shadow:rgb(0 0 0/20%)0 2px 6px;min-width:260px;min-height:40px}.inboxsdk__mole_view_inner:not(.inboxsdk__original_view),.inboxsdk__mole_view_titlebar:not(.inboxsdk__original_view){border-radius:8px 8px 0 0}.inboxsdk__mole_view_titlebar{position:absolute;left:0;right:5px;font-size:14px;font-weight:500;box-sizing:border-box;height:40px;cursor:pointer;padding:10px 12px 10px 16px;color:#041e49;background:#f2f6fc}.inboxsdk__mole_view_titlebar.inboxsdk__original_view{color:#fff;font-size:12.8px;font-weight:400;background:#404040;padding:9px 0 0 11px;border-radius:4px 4px 0 0}.inboxsdk__mole_view_titlebar h2{font-size:inherit;font-weight:inherit;margin:4px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inboxsdk__mole_title_buttons{white-space:nowrap;float:right;padding-right:5px;margin-top:1px}.inboxsdk__mole_title_buttons.inboxsdk__original_view{margin-top:-3px}.inboxsdk__mole_title_buttons>img{height:24px;width:24px;position:relative;top:2px}.inboxsdk__mole_title_buttons:not(.inboxsdk__original_view)>img{height:16px;width:16px;margin-left:4px}.inboxsdk__mole_title_buttons:not(.inboxsdk__original_view)>img:hover{background-color:rgb(68 71 70/7.8%)}.inboxsdk__mole_title_buttons.inboxsdk__original_view>img:hover{background-color:#737373}.inboxsdk__mole_title_buttons>img:hover{opacity:1}.inboxsdk__mole_view.inboxsdk__minimized .Hl,.inboxsdk__mole_view.inboxsdk__minimized .inboxsdk__mole_view_content,.inboxsdk__mole_view.inboxsdk__minimized.inboxsdk__mole_use_minimize_title h2.inboxsdk__mole_default,.inboxsdk__mole_view:not(.inboxsdk__minimized) .Hk,.inboxsdk__mole_view:not(.inboxsdk__minimized) h2.inboxsdk__mole_minimized,.inboxsdk__mole_view:not(.inboxsdk__mole_use_minimize_title) h2.inboxsdk__mole_minimized{display:none}.inboxsdk__mole_view_content:not(.inboxsdk__original_view){margin-top:40px;border:0}.inboxsdk__mole_view_content{margin-top:36px;border:1px solid #cfcfcf;background:#fff;min-width:260px;min-height:20px;max-height:80vh}.inboxsdk__mole_view_chromeless .inboxsdk__mole_view_inner{min-width:0}.inboxsdk__mole_view_chromeless .inboxsdk__mole_view_content{margin-top:0;min-width:0}.inboxsdk__tab{width:30px}.inboxsdk__tab.inboxsdk__fQK2Ffccj51PVtC_ibDc:first-child:last-child{display:none}.inboxsdk__tab.inboxsdk__tab_selected{width:auto}table.aKk .inboxsdk__contentTabContainer .inboxsdk__tab .aAy[role=tab]{height:28px}.inboxsdk__tab_icon{width:30px;height:25px;background-position-x:5px;background-position-y:3px;background-size:16px;background-repeat:no-repeat}.inboxsdk__tab_icon img{height:16px;width:16px;margin-left:5px;margin-top:3px}.inboxsdk__tab .aKx{top:4px}.inboxsdk__sidebar div[role=complementary]{position:static!important}.inboxsdk__sidebar>div.y4,.inboxsdk__lmkPHCz841PzU2vywMZI>div.y4{display:none}table.aKk .inboxsdk__contentTabContainer .inboxsdk__tab:first-child .aAy[role=tab]{border-left-width:1px}.inboxsdk__sidebar .inboxsdk__contentPanelContainer{font:12px Arial,sans-serif;max-width:220px}.inboxsdk__contentPanelContainer_contentContainer{overflow:hidden;margin-bottom:10px;border-bottom:1px solid #d8d8d8}body.inboxsdk__hasTopMessageBar .bq9{top:var(--inboxsdk__topMessageBar-height)}.inboxsdk__lmkPHCz841PzU2vywMZI>div[role=complementary]{position:static!important;width:216px!important}.inboxsdk__lmkPHCz841PzU2vywMZI{will-change:position}.inboxsdk__RRnCd87hoA2uHeC1Z_FE{background:#fff}.inboxsdk__ZsVjiThsnbCmCG_X1Vvn{padding:4px 0 12px}.inboxsdk__L1YTilBb_3NY6uyjljIg.inboxsdk__fQK2Ffccj51PVtC_ibDc .inboxsdk__ZsVjiThsnbCmCG_X1Vvn{padding-top:0}.container_app_sidebar_in_use.no,.inboxsdk__IpDkQtEZuh257muFXot6.no{display:flex;flex-direction:row;width:100%}body[dir=rtl] .container_app_sidebar_in_use.no[dir=ltr],body[dir=rtl] .idm5_container_app_sidebar_no_icons.no[dir=ltr]{flex-direction:row-reverse}.container_app_sidebar_in_use.no .G-atb.inboxsdk__thread_toolbar_parent[gh=tm]{margin-right:-57px!important}.container_addon_sidebar_visible.container_app_sidebar_in_use.no .G-atb.inboxsdk__thread_toolbar_parent[gh=tm],.container_app_sidebar_visible.container_app_sidebar_in_use.no .G-atb.inboxsdk__thread_toolbar_parent[gh=tm]{margin-right:-321px!important}.inboxsdk__IpDkQtEZuh257muFXot6 .G-atb.inboxsdk__thread_toolbar_parent[gh=tm]{margin-right:0!important}.inboxsdk__button.ar7{pointer-events:all!important}.container_app_sidebar_in_use .bkK.nn,.inboxsdk__IpDkQtEZuh257muFXot6 .bkK.nn{width:auto!important;flex:1;min-width:0}.inboxsdk__IpDkQtEZuh257muFXot6 .bnl.nn{z-index:-1;position:absolute}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI{min-width:57px!important;flex-shrink:0}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI.app_sidebar_visible{min-width:321px!important}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI>.J-KU-Jg{display:block!important}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI .inboxsdk__jQiSbhX57v1JCl6fIbdb{display:none}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI.app_sidebar_visible .inboxsdk__jQiSbhX57v1JCl6fIbdb{display:block;float:left;height:100%;border-left:1px solid #e0e0e0;padding-left:16px;width:calc(100% - 74px);overflow:auto}.container_app_sidebar_in_use .inboxsdk__jQiSbhX57v1JCl6fIbdb .inboxsdk__ZsVjiThsnbCmCG_X1Vvn{width:calc(100% - 16px);padding-right:16px}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI.app_sidebar_visible .J-KU-Jz{width:auto;padding-right:50px}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon{margin:18px 18px 10px;border:0;background:0 0;height:20px;width:20px;overflow:hidden;padding:0;cursor:pointer;position:relative}.inboxsdk__z3cCBtGXYneog44Vf16J.sidebar_global_iconArea .inboxsdk__button_icon{margin-bottom:18px}body .inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon{overflow:visible}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon:hover::before,.inboxsdk__z3cCBtGXYneog44Vf16J .sidebar_button_container_active .inboxsdk__button_icon::before{content:\"\";background:#f1f3f4;position:absolute;inset:-10px -10px -10px -10px;border-radius:50%;z-index:0}.inboxsdk__z3cCBtGXYneog44Vf16J .sidebar_button_container_active .inboxsdk__button_icon::before{background:#e8eaed}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_iconImg{width:20px;height:20px;margin-top:0}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon .inboxsdk__button_iconImg{position:absolute;left:0;top:0;z-index:1}.inboxsdk__z3cCBtGXYneog44Vf16J .sidebar_button_container_active .inboxsdk__button_selectedIndicator{height:40px;width:4px;position:absolute;right:0;bottom:0;background-color:rgb(66 133 244);border-radius:3px 0 0 3px}.inboxsdk__z3cCBtGXYneog44Vf16J.sidebar_global_iconArea .sidebar_button_container_active .inboxsdk__button_selectedIndicator{bottom:8px}.brC-brG.companion_app_sidebar_visible{display:block!important}.bq9:not(.brC-brG).companion_app_sidebar_wrapper_visible{display:block!important}.companion_global_app_sidebar_visible .thread_app_sidebar{display:none}.companion_app_sidebar_visible:not(.companion_global_app_sidebar_visible) .global_app_sidebar,body.inboxsdk__custom_view_active .brC-aT5-aOt-ato-Kp-Jw [role=tablist]>div:not(:last-child){display:none}.nH.companion_container_app_sidebar_visible{width:calc(100% - 300px)!important}.companion_app_sidebar_visible .addon_sidebar~div:not(.addon_sidebar){display:none!important}.inboxsdk__lmkPHCz841PzU2vywMZI .inboxsdk__jQiSbhX57v1JCl6fIbdb.addon_sidebar{height:100%;overflow:auto}.inboxsdk__lmkPHCz841PzU2vywMZI .inboxsdk__jQiSbhX57v1JCl6fIbdb.addon_sidebar .inboxsdk__ZsVjiThsnbCmCG_X1Vvn{width:100%}.inboxsdk__lmkPHCz841PzU2vywMZI:not(.companion_app_sidebar_visible) .addon_sidebar{display:none}.inboxsdk__TFQRFr4aJVmDmx2llTVx{margin-left:0}.inboxsdk__RRnCd87hoA2uHeC1Z_FE .inboxsdk__iYzl6PjYB9v7KGQNbONH{padding:0 16px}.inboxsdk__lmkPHCz841PzU2vywMZI .bvq,.inboxsdk__lmkPHCz841PzU2vywMZI .bvq>div:last-child{display:block!important}.inboxsdk__cnd4jAy3zFUYdR_NdMxT .bvq>div:first-child{display:none!important}.inboxsdk__custom_view_element{overflow:auto}.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem){border-left-color:transparent}.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem) .bsU,.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem) .nU:not(.n1) .n0{font-weight:400}.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem) .TO{background:0 0}.inboxsdk__hide_addon_container{display:flex!important;flex-direction:row;width:100%!important}body[dir=rtl] .inboxsdk__hide_addon_container[dir=ltr]{flex-direction:row-reverse}.inboxsdk__hide_addon_container>.bkK.nn{width:auto!important;flex:1;min-width:0}.inboxsdk__hide_addon_container>.bnl.nn,.inboxsdk__navItem>.TO img.afM.afO~.aio>.bsU{display:none}.inboxsdk__navItem{font-size:14px}.inboxsdk__navItem:not(.Xr)>.V3[style]{flex-grow:0!important}.inboxsdk__navItem>.TO.n4{display:block;padding-left:0}.inboxsdk__collapsiblePanel .inboxsdk__navItem>.TO .TN.aik{padding-left:18px}.inboxsdk__collapsiblePanel .inboxsdk__navItem>.TO .qj{margin-right:14px}.inboxsdk__navItem>.TO.n4 .qj>.G-asx{margin-right:0}.inboxsdk__navItem>.TO .aio>.bsU:empty{display:none}.inboxsdk__navItem>.TO .qj:empty::after{background-color:rgb(118 118 118);border-radius:50%;content:\"\";height:18px;margin-left:1px;width:18px}.inboxsdk__navItem>.TO .qj[style*=border-color]:empty::after{border-color:inherit}.inboxsdk__navItem>.TO:hover .pM{display:flex;visibility:visible}.inboxsdk__navItem>.TO .afM{cursor:pointer}.inboxsdk__navItem>.TO img.afM.afO,.inboxsdk__navItem>.TO:hover .afM{display:block;visibility:visible}.inboxsdk__collapsiblePanel_loading_container,.inboxsdk__navItem>.TO:hover .bsU{display:none}.inboxsdk__navItem.inboxsdk__navItem_nonClickable>.TO:active{background-color:initial}.inboxsdk__navItem_hover .aj0,.inboxsdk__navItem_hover .p8{visibility:visible}.inboxsdk__appMenuItem .CL.V6::before,.inboxsdk__collapsiblePanel .T-I.T-I-KE.L3::before{background-image:var(--background-image)}.inboxsdk__collapsiblePanel.apV.aJu .T-I.T-I-KE.L3::before{background-image:var(--background-image--hover)}.inboxsdk__appMenuItem.apV .CL.V6::before{background-image:var(--background-image--active)}.inboxsdk__collapsiblePanel .T-I.T-I-KE.L3::before{background-size:24px}.inboxsdk__collapsiblePanel_loading_container.inboxsdk__collapsiblePanel_loading_container--active,.inboxsdk__shortcutHelp_table table.cf,.inboxsdk__shortcutHelp_table tbody tbody,table[role=presentation].inboxsdk__thread_view_with_custom_view>tr{display:block}.inboxsdk__navItem_link{cursor:pointer;margin-left:auto}.inboxsdk__navItem_link>a{margin-left:16px}.inboxsdk__navItem>.TO .inboxsdk__button{margin-right:0}[dir=rtl] .inboxsdk__navItem_link{left:-4px;right:initial}.inboxsdk__navItem_container .aio .inboxsdk__button{position:absolute;top:0;right:-30px}.inboxsdk__navItem_marker{position:absolute;left:0;padding-bottom:2px}.inboxsdk__expando{z-index:1}.aip .CK,.inboxsdk__navItem_link>a{color:#15c}.aip .CK:hover,.inboxsdk__navItem_link>a:hover{text-decoration:underline}.inboxsdk__navItem_container .aio.aip{white-space:nowrap}.WR[role=navigation] .inboxsdk__navItem .Yh:not(.inboxsdk__navItem_parent_accessory_button):empty{display:none}.WR[role=navigation] .inboxsdk__navItem .Yh:not(.inboxsdk__navItem_parent_accessory_button){background:0 0}.WR[role=navigation] .inboxsdk__navItem .Yh .inboxsdk__button_icon{display:none}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh{opacity:1}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh.inboxsdk__navItem_parent_accessory_button{background-image:none!important}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh:empty{background-color:rgb(32 33 36/71%);border-radius:50%;display:inherit;height:18px;margin-left:1px;width:18px}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh .inboxsdk__button_icon{display:inherit}.inboxsdk__custom_sections{margin-bottom:8px}.inboxsdk__custom_sections.Wc{padding:0;margin-bottom:0}.inboxsdk__resultsSection.inboxsdk__resultsSection_nonCollapsible .inboxsdk__resultsSection_title .Wp{visibility:hidden}.inboxsdk__custom_sections .Wg,.inboxsdk__custom_sections.Wc .inboxsdk__resultsSection{padding-top:0}.inboxsdk__custom_sections.Wc .Wg{border-bottom:0;padding:0}.inboxsdk__results_collapsedContainer.Wg{height:auto}.inboxsdk__results_collapsedContainer>div{display:flex;flex-wrap:wrap;flex:1 0 100%}.inboxsdk__results_collapsedContainer>div>.inboxsdk__resultsSection_collapsed:first-child:last-child{flex:1;margin-right:0}.inboxsdk__results_collapsedContainer>div>.inboxsdk__resultsSection_collapsed:first-child:last-child>.inboxsdk__resultsSection_header{display:flex;align-items:center;flex:1}.inboxsdk__resultsSection.inboxsdk__resultsSection_collapsed{display:inline-block;margin-right:20px;display:inline-flex}.Wc .inboxsdk__resultsSection.inboxsdk__resultsSection_collapsed{margin-right:0}.inboxsdk__resultsSection_collapsed .inboxsdk__resultsSection_header{padding-right:0}.inboxsdk__resultsSection_title{white-space:nowrap;cursor:pointer;display:inline-block;display:flex;align-items:center;height:48px}.Wc .inboxsdk__resultsSection_title{padding:3px 0 3px 8px}.inboxsdk__resultsSection_header{min-height:48px;line-height:48px}.inboxsdk__resultsSection_header_summaryText.Wm:last-child .amH{padding-right:0;margin-right:0}.inboxsdk__custom_sections.Wc .inboxsdk__resultsSection_header_summaryText:last-child{margin-right:11px}.inboxsdk__custom_sections.Wc .J-JN-M-I{margin-right:13px}.inboxsdk__resultsSection .TB.TC{text-align:center}.inboxsdk__resultsSection .inboxsdk__resultsSection_loading{font-style:italic}.inboxsdk__resultsSection .inboxsdk__resultsSection_result_icon{height:15px;width:15px}.inboxsdk__resultsSection_label_iconHtml,.inboxsdk__resultsSection_result_iconHtml{display:flex;justify-content:center;align-items:center}.inboxsdk__resultsSection .inboxsdk__resultsSection_tableRow.zA:hover>.xW{display:flex}.inboxsdk__resultsSection .inboxsdk__resultsSection_tableRow.zA>.xW{max-width:none;flex-basis:auto}.inboxsdk__resultsSection .inboxsdk__resultsSection_tableRow .xT{align-items:center}.inboxsdk__resultsSection .xX{width:20ex}.inboxsdk__resultsSection tr .xW>span,.inboxsdk__resultsSection_result_title span{overflow:hidden;display:block;text-overflow:ellipsis}.inboxsdk__resultsSection .V3{overflow:hidden;white-space:nowrap}.inboxsdk__resultsSection .at{position:relative}.inboxsdk__thread_row_label{flex-shrink:0;align-self:flex-end}.apv .inboxsdk__thread_row_label{align-self:flex-start}.inboxsdk__resultsSection_label_icon{height:11px;width:11px;position:absolute;top:2px;margin-left:4px;margin-top:1px}.inboxsdk__resultsSection .av,.inboxsdk__thread_row_label .av{overflow:hidden;text-overflow:ellipsis}.inboxsdk__resultsSection_label_icon+.av,.inboxsdk__thread_row_label .inboxsdk__button_icon+.av{margin-left:16px}.Wc .inboxsdk__resultsSection_footer{padding:3px 3px 3px 8px}.inboxsdk__tooltip .T-P{box-shadow:0 1px 3px rgb(0 0 0/20%);background-color:#fff;border:1px solid;border-color:#bbb #bbb #a8a8a8;padding:16px;z-index:1201!important}.inboxdk__tooltip_content.inboxsdk__tooltip .aRM,.inboxsdk__tooltip.inboxdk__tooltip_content .T-P,.inboxsdk__tooltip.inboxsdk__appButton_tooltip .T-P{padding:0}.inboxsdk__tooltip .aRM{outline:0;padding:13px 10px 16px;text-align:center;font:16px arial,sans-serif}.inboxsdk__tooltip .aRR{color:#333;font-size:18px;margin-top:13px}.inboxsdk__tooltip .aRQ{color:#777;font-size:13px;margin:3px 0 14px}.inboxsdk__tooltip{position:fixed;z-index:1300;transition:left 200ms ease,top 200ms ease}.inboxsdk__tooltip .T-P{position:relative;width:auto;max-width:500px}.inboxsdk__tooltip .inboxsdk__tooltip_arrow{position:fixed;z-index:1400;margin-top:-1px;transition:left 200ms ease,top 200ms ease}.inboxsdk__tooltip .inboxsdk__tooltip_close{user-select:none}.inboxsdk__tooltip .inboxsdk__button{margin-right:0}.inboxsdk__tooltip .inboxsdk__tooltip_image{max-height:300px;max-width:500px;overflow:hidden;height:auto}.inboxsdk__tooltip .inboxsdk__tooltip_image>img{max-height:300px;max-width:500px}.inboxsdk__attachmentCard img.aQG.aYB{max-width:178px;min-width:178px;min-height:118px}.inboxsdk__attachmentCard img.aZG.aYw{background:0 0}.aQw>.T-I.J-J5-Ji.L3{margin-top:5px}table.cf.wd.inboxsdk__shortcutHelp_table{margin-bottom:15px}.inboxsdk__shortcutHelp_table td.Dn{display:inline-block;width:50%}.inboxsdk__shortcutHelp_table tbody tbody tr{display:block;white-space:nowrap}.inboxsdk__shortcutHelp_table td.wg.Dn{display:inline-block;width:45%}.inboxsdk__shortcutHelp_table span.wb{margin-left:3px}.inboxsdk__shortcutHelp_table td.we.Dn{width:60%;white-space:normal}.inboxsdk__shortcutHelp_title img.inboxsdk__icon{height:21px;width:21px;vertical-align:middle;margin-right:10px;border-radius:4px}.asor.inboxsdk__custom_suggestion,.inboxsdk__custom_suggestion_iconHTML{display:flex;justify-content:center;align-items:center}.inboxsdk__custom_suggestion img{max-width:32px;max-height:32px}.inboxsdk__custom_suggestion_iconHTML{position:absolute;left:8px;height:32px;width:43px}.gstq_d .inboxsdk__custom_suggestion_iconHTML{margin-top:-8px}.inboxsdk__appButton{margin-right:8px}.inboxsdk__appButton+.inboxsdk__appButton{margin-left:16px}.inboxsdk__appButton.inboxsdk__appButton_noGPlus{margin-right:0}.inboxsdk__appButton .inboxsdk__button_icon{margin-right:5px;position:relative}.inboxsdk__appButton a{color:#404040;text-decoration:none;line-height:24px}.inboxsdk__appButton.inboxsdk__appButton_noGPlus a{line-height:30px}.inboxsdk__appButton a:hover{text-decoration:underline;color:#000}.inboxsdk__gmail_dark_theme .inboxsdk__appButton a{color:#eee}.inboxsdk__gmail_dark_theme .inboxsdk__appButton a:hover{color:#fff}.inboxsdk__appButton_tooltip{outline:0;transition:none;animation:gb__a .2s}.inboxsdk__appButton_tooltip .inboxsdk__tooltip_close,.inboxsdk__searchIsNarrow .streak__appToolbarButton_title{display:none}.inboxsdk__tooltip.inboxsdk__appButton_tooltip .aRM{padding:0;white-space:initial;text-align:center;font:16px arial,sans-serif}.inboxsdk__tooltip.inboxsdk__appButton_tooltip .inboxsdk__tooltip_arrow{transform-origin:top;transform:rotateZ(180deg);margin-top:9px}.inboxsdk__custom_message_view{display:flex;padding-top:20px;padding-bottom:20px;border-top:1px solid #efefef;border-collapse:collapse}.inboxsdk__custom_message_view_hidden{display:none}.h7.ie+.inboxsdk__custom_message_view{margin-top:5px}.kQ+.inboxsdk__custom_message_view,.kx+.inboxsdk__custom_message_view{margin-top:1px}.inboxsdk__custom_message_view.inboxsdk__custom_message_view_collapsed{cursor:pointer}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_icon{padding-left:16px;padding-right:16px;flex-shrink:0}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_icon img{height:32px;width:32px;border-radius:50%}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_content{width:100%;min-width:0}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_header{cursor:pointer}.inboxsdk__custom_message_view_app_notice_content{position:relative;z-index:1;align-items:center;display:flex;font-size:.75rem!important;justify-content:flex-start;margin-left:0;padding:0;top:0}.adx.inboxsdk__custom_message_view_app_notice_container.inboxsdk__custom_message_view_app_notice_container{position:relative;width:auto!important;min-width:32px}.adx.inboxsdk__custom_message_view_app_notice_container.inboxsdk__custom_message_view_app_notice_container:hover::before{content:none!important}.adx.inboxsdk__custom_message_view_app_notice_container.inboxsdk__custom_message_view_app_notice_container>span:first-child{display:none}.inboxsdk__custom_message_view_app_notice_container::before{position:absolute}.inboxsdk__custom_message_view_app_notice_content>*{color:#555}table[role=presentation].inboxsdk__thread_view_with_custom_view{table-layout:fixed}.inboxsdk__butterbar.inboxsdk__butterbar_error{background-color:#c53929!important}.inboxsdk__butterbar.inboxsdk__butterbar_error [role=button]{color:#fff}.inboxsdk__butterbar.inboxsdk__butterbar_error [role=button]::before{background:rgb(255 255 255/8%)}.inboxsdk__support_menuItem:hover{background-color:#eee;outline:1px dashed transparent}.inboxsdk__compose_addressList{display:flex!important}.inboxsdk__linkPopOver_section_container{position:absolute;width:100%;top:35px;left:0}.inboxsdk__linkPopOver_section{width:100%;background:#fff;border:1px solid;border-color:#bbb #bbb #a8a8a8;font:13px arial,sans-serif;padding:5px 8px;margin-bottom:5px;box-sizing:border-box;box-shadow:0 1px 3px rgb(0 0 0/20%)}.T-I.J-J5-Ji.T-I-ax7.inboxsdk__button .asa::after{width:auto}", ""]);
32965
+ ___CSS_LOADER_EXPORT___.push([module.id, ".inboxsdk__notransition{transition:none!important}.inboxsdk__close_button{height:24px;width:24px;opacity:.7;position:relative;background:0 0;border:0;padding:0;box-sizing:content-box;outline:0;cursor:pointer}.inboxsdk__close_button:focus,.inboxsdk__close_button:hover{opacity:1}.inboxsdk__close_button:focus::before{background-color:rgb(0 0 0/12%)}.inboxsdk__close_button::before{border-radius:50%;position:absolute;inset:-4px -4px -4px -4px;padding:4px;content:\" \"}.inboxsdk__close_button::after{content:\" \";background:url(https://www.gstatic.com/images/icons/material/system/1x/close_black_24dp.png);position:absolute;height:24px;width:24px;top:0;left:0}@media (min-resolution:192dpi){.inboxsdk__close_button::after{background:url(https://www.gstatic.com/images/icons/material/system/2x/close_black_24dp.png);background-size:contain}}.inboxsdk__nJrOYb9x4IUalKhkqH70{display:none}.inboxsdk__drawer_view_container{visibility:visible;direction:initial;position:fixed;height:100vh;width:100vw;bottom:0;left:0;z-index:51;pointer-events:none}.inboxsdk__drawer_view{position:absolute;pointer-events:auto;top:0;bottom:0;right:0;width:452px;font:13px\"Helvetica Neue\",Helvetica,Arial,sans-serif;display:flex;flex-direction:column;background-color:#fff;outline:0;box-shadow:0 0 8px rgb(0 0 0/18%),0 8px 16px rgb(0 0 0/36%);transform:translateX(100%);transition:transform 150ms cubic-bezier(.4,0,.2,1)}.inboxsdk__drawer_view.inboxsdk__match_sidebar_content_panel_width{width:300px}.inboxsdk__drawer_view.inboxsdk__active{transform:none}.inboxsdk__drawer_title_bar{background-color:#f5f5f5;border-bottom:1px solid #e0e0e0;padding:16px 20px;white-space:nowrap;display:flex;flex:0 0 auto}.inboxsdk__drawer_title_bar .inboxsdk__close_button{margin-right:20px;flex-shrink:0}.inboxsdk__drawer_title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:20px/24px\"Helvetica Neue\",Helvetica,Arial,sans-serif}.inboxsdk__inbox_backdrop{visibility:visible;position:fixed;height:100vh;width:100vw;bottom:0;left:0;z-index:50;background-color:transparent;transition:background-color 150ms cubic-bezier(.4,0,1,1)}.inboxsdk__inbox_backdrop.inboxsdk__active{background-color:rgb(10 10 10/60%);transition:background-color 70ms cubic-bezier(0,0,.2,1)}.inboxsdk__inbox_backdrop~.inboxsdk__inbox_backdrop{opacity:.6}.inboxsdk__YVRXKNcaUvgm8xbnhvbA{display:flex;flex-direction:column}.inboxsdk__L1YTilBb_3NY6uyjljIg>.inboxsdk__close_button{position:absolute;bottom:10px;right:20px}.inboxsdk__ZsVjiThsnbCmCG_X1Vvn{width:216px}.inboxsdk__RRnCd87hoA2uHeC1Z_FE{overflow:hidden;font:12px Arial,sans-serif;max-height:100%;box-sizing:border-box}.inboxsdk__iYzl6PjYB9v7KGQNbONH{white-space:nowrap;display:flex;user-select:none;cursor:default}.inboxsdk__RRnCd87hoA2uHeC1Z_FE:not(.inboxsdk__o9YcckDJql686JS0n2cc) .inboxsdk__iYzl6PjYB9v7KGQNbONH{border-bottom:1px solid #ddd}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__XdCPRDkO7zSIv6nU4USH .inboxsdk__iYzl6PjYB9v7KGQNbONH,.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__iYzl6PjYB9v7KGQNbONH:hover{background:rgb(0 0 0/3%)}.inboxsdk__lD1h9YUibxcHdtWGdiWq{min-width:0;overflow:hidden;text-overflow:ellipsis}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__lD1h9YUibxcHdtWGdiWq{cursor:move}.inboxsdk__p_cMIiZvN4vwQdGOpCts{padding-left:6px;vertical-align:middle;font:700 13px/40px\"Helvetica Neue\",Helvetica,Arial,sans-serif;color:rgb(0 0 0/87%)}.inboxsdk__L1YTilBb_3NY6uyjljIg.inboxsdk__fQK2Ffccj51PVtC_ibDc .inboxsdk__iYzl6PjYB9v7KGQNbONH{display:none}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__iYzl6PjYB9v7KGQNbONH:hover .inboxsdk__KudoZ1EBFoQsddbSavvj{position:absolute;top:0;left:0;width:10px;height:40px;background:url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ")50%center no-repeat}.inboxsdk__TFQRFr4aJVmDmx2llTVx{width:20px;height:20px;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;margin-top:-1px}.inboxsdk__Yzt2_upvw7fe6BjWdlhZ,.inboxsdk__Yzt2_upvw7fe6BjWdlhZ>img{width:13px;height:13px}.inboxsdk__M4Frio2Us0lwSTltblkg{flex:1;text-align:right;visibility:hidden}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__vTsoFgWgM9ldKGsRJYHd .inboxsdk__M4Frio2Us0lwSTltblkg{visibility:visible;cursor:pointer}.inboxsdk__Nr6Udyn2ocUynKpdfxh1{margin-top:12px;margin-right:4px;background:url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ")center/20px no-repeat;border:0;width:14px;height:14px;transform:rotate(-90deg);transition:-webkit-transform .15s,transform .15s;outline:0;opacity:.6;cursor:pointer}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__XdCPRDkO7zSIv6nU4USH .inboxsdk__iYzl6PjYB9v7KGQNbONH .inboxsdk__Nr6Udyn2ocUynKpdfxh1,.inboxsdk__iYzl6PjYB9v7KGQNbONH:hover .inboxsdk__Nr6Udyn2ocUynKpdfxh1{opacity:.9}.inboxsdk__RRnCd87hoA2uHeC1Z_FE.inboxsdk__o9YcckDJql686JS0n2cc .inboxsdk__Nr6Udyn2ocUynKpdfxh1{transform:rotate(0)}.inboxsdk__QsikHKWmzD0Ovsg3wrIw{margin-bottom:25px}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__ARG5bpD2vntIyElH978u{position:relative}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon:focus,.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon:hover{outline:0}.inboxsdk__appid_warning{margin:0;padding:9px;color:#4b4b4b;background:#ff6c6c;font-size:10pt}.inboxsdk__appid_warning_main,a.inboxsdk__appid_register{display:inline-block;vertical-align:middle}.inboxsdk__appid_warning .topline{font-weight:700;font-size:11pt}a.inboxsdk__appid_register{color:#fff;background:#1989ff;border-radius:3px;text-decoration:none;box-shadow:0 0 5px rgb(0 0 0/30%);padding:7px;font-size:10pt;margin-left:1em}.inboxsdk__thread_row_icon_wrapper{display:inline-block}.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_iconImg{margin-top:0}.inboxsdk__QbxpXL1mja3SlO_1nJOS{background:#f8ebc0;margin-bottom:10px;padding:12px 4px 6px 12px}.inboxsdk__suggestions_separator_before{padding-bottom:2px!important}.inboxsdk__suggestions_separator_after{border-top:1px solid #e5e5e5;padding-top:2px!important}div.T-I.inboxsdk__button{user-select:none;min-width:27px}.inboxsdk__no_bg{background:0 0}.inboxsdk__button.inboxsdk__button_disabled{opacity:.55}.inboxsdk__button_icon+.inboxsdk__button_text{margin-left:5px}.inboxsdk__button_icon{display:inline-block}.inboxsdk__button_iconImg{height:20px;width:20px;vertical-align:middle;margin-top:-2px;user-drag:none;user-select:none;-webkit-user-drag:none}.inboxsdk__button_green_hover,.inboxsdk__button_green_inactive{background-image:-webkit-linear-gradient(top,transparent,transparent);background-image:linear-gradient(top,transparent,transparent);border:1px solid transparent;text-shadow:none}.inboxsdk__button_green_inactive{box-shadow:0 1px 0 rgb(0 0 0/5%);background-color:#53a93f;color:#fff}.inboxsdk__button_green_hover{box-shadow:inset 0-1px 0#4c8534;background-color:#65b045;border-bottom:1px solid #4c8534}.inboxsdk__button_green_active{box-shadow:inset 0 1px 0#2f6124;background:#3e802f;border:1px solid transparent;border-top:1px solid #2f6124;color:#fff;text-shadow:none}.inboxsdk__menu{min-width:1em;min-height:1em;padding:0;overflow:visible;max-height:none;z-index:7;cursor:default;font-size:13px;margin:0;outline:0}.inboxsdk__menu>.inboxsdk__menuContent{padding:0;box-shadow:0 8px 10px 1px rgb(0 0 0/14%),0 3px 14px 2px rgb(0 0 0/12%),0 5px 5px -3px rgb(0 0 0/20%);transition:opacity .218s;border:1px solid rgb(0 0 0/20%);background:#fff;outline:0}.f4.J-N-JX.inboxsdk__message_more_icon{height:16px;margin-top:1px;width:16px}.dw .nH>.no .nH.nn:last-child[style*=\"width: 310px;\"],body:has(.companion_app_sidebar_visible) .dw .nH>.no .nH.nn:last-child{width:366px!important}.inboxsdk__composeButton{height:20px;width:20px;padding:4px}.inboxsdk__composeButton,.inboxsdk__compose_sendButton{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;outline:0;position:relative}.inboxsdk__composeButton+.inboxsdk__composeButton{margin-left:4px}.inboxsdk__composeButton .inboxsdk__button_icon{opacity:.55}.inboxsdk__composeButton.inboxsdk__composeButton_active .inboxsdk__button_icon,.inboxsdk__composeButton:focus .inboxsdk__button_icon,.inboxsdk__composeButton:hover .inboxsdk__button_icon{opacity:1}.inboxsdk__composeButton::before{content:\"\";display:block;opacity:0;position:absolute;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1);inset:0 0 0 0;background:0 0;box-sizing:border-box;transform:scale(0);transition-property:transform,opacity;border-radius:4px}.inboxsdk__composeButton:hover::before{background-color:rgb(32 33 36/5.9%);border:0;box-shadow:none;opacity:1;transform:scale(1)}.inboxsdk__composeButton.inboxsdk__composeButton_active::before,.inboxsdk__composeButton:focus::before{background-color:rgb(32 33 36/12.2%);border:0;box-shadow:none;opacity:1;transform:scale(1)}.inboxsdk__compose_actionToolbar .inboxsdk__compose_groupedActionToolbar div.inboxsdk__composeButton:last-child{margin-right:0}.inboxsdk__compose_sendButton{background-color:#1a73e8;color:#fff;height:24px;width:auto;border-radius:4px;padding:6px 4px;margin-left:2px}.inboxsdk__compose_inlineReply .inboxsdk__compose_sendButton{height:24px}.inboxsdk__compose_sendButton.inboxsdk__composeButton_active,.inboxsdk__compose_sendButton:focus{background-color:#5094ed;box-shadow:0 1px 1px 0 rgb(66 133 244/30%),0 1px 3px 1px rgb(66 133 244/15%);border:0}.T-I~.inboxsdk__compose_sendButton{margin-left:-6px}.inboxsdk__compose_actionToolbar{white-space:nowrap;padding-left:6px}.inboxsdk__compose_actionToolbar .inboxsdk__button_icon{height:20px;width:20px;display:inline-flex;user-select:none}.inboxsdk__compose_actionToolbar .inboxsdk__button_iconImg{height:17px;width:17px;display:inline-flex;margin:auto}.inboxsdk__compose_actionToolbar+.gU:not(.inboxsdk__compose_separator){padding-left:8px}.inboxsdk__compose_groupedActionToolbar_visible .aDg .aDh{overflow-y:visible}.inboxsdk__compose_groupedActionToolbar{position:absolute;bottom:44px;z-index:10;border-radius:2px;box-shadow:0 4px 5px 0 rgb(0 0 0/14%),0 1px 10px 0 rgb(0 0 0/12%),0 2px 4px -1px rgb(0 0 0/20%);margin:3px 3px 7px;padding:4px 5px;background:#fff;left:-3px}.inboxsdk__compose_inlineReply .inboxsdk__compose_groupedActionToolbar{left:14px}.inboxsdk__compose_groupedActionToolbar .inboxsdk__composeButton:first-child{margin-left:0;margin-right:0}.inboxsdk__composeButton.inboxsdk__compose_groupedActionButton{margin-right:0}.inboxsdk__compose_groupedActionToolbar .inboxsdk__composeButton{padding:4px}.inboxsdk__compose_groupedActionToolbar_visible .bA3{height:40px}.inboxsdk__compose_groupedActionToolbar div.inboxsdk__button{z-index:1;margin-right:0}.inboxsdk__compose_groupedActionToolbar_arrow,span.inboxsdk__thread_row_custom_draft_label+div.yW{display:none}.inboxsdk__compose_customSendContainer{display:inline-block;position:relative;outline:0;margin:6px 0;padding:0;vertical-align:middle;height:36px;line-height:36px}.inboxsdk__compose_customTitleBarColor>img.Ha,.inboxsdk__compose_customTitleBarColor>img.Hl,.inboxsdk__compose_customTitleBarColor>img.Hq{background-color:transparent!important}.inboxsdk__compose_hasCustomTitleBarText,.inboxsdk__compose_hasCustomTitleBarText>tbody>tr{display:flex}.inboxsdk__compose_hasCustomTitleBarText>tbody>tr{align-items:center}.inboxsdk__compose_hasCustomTitleBarText>tbody{width:100%}.inboxsdk__compose_nativeTitleBarText{display:none!important}.inboxsdk__compose_customTitleBarText{width:calc(100% - 80px)}.inboxsdk__compose_hasCustomTitleBarText td.Hm{margin-right:10px;margin-left:auto}.inboxsdk__compose_statusBarPrependContainer{border-top:1px solid #cfcfcf}.inboxsdk__compose_statusBarPrependContainer+table td.gU{border-top:none}input.inboxsdk__x_close_button{background-color:transparent;background-image:url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ");background-size:cover;background-repeat:no-repeat;background-position:center center;height:20px;width:20px;border:0;vertical-align:middle;cursor:pointer;float:right;margin:5px}.inboxsdk__gmail_label.inboxsdk__label_has_icon .au{display:inline-block;margin-left:14px}.inboxsdk__thread_row_label .inboxsdk__button_icon,.inboxsdk__thread_row_label .inboxsdk__button_iconImg{height:11px;width:11px}.inboxsdk__thread_row_label .inboxsdk__button_icon{display:inline-block;margin-top:3px;margin-left:4px;position:absolute}.inboxsdk__thread_row_button{outline:0;height:20px;width:20px;padding:0}.inboxsdk__thread_row_button .inboxsdk__button_icon{max-height:100%}.inboxsdk__thread_row_custom_date_container,.zA>.xY.inboxsdk__thread_row_attachment_icons_present{max-width:inherit}.inboxsdk__thread_row_button .inboxsdk__button_iconImg{height:20px;width:20px;margin-top:0}.inboxsdk__gmail_action{float:right;position:relative;background-color:gray;margin-left:1em;cursor:default;background-image:-webkit-linear-gradient(top,#e9e9e9,#e6e6e6);background-image:linear-gradient(top,#e9e9e9,#e6e6e6);border:1px solid rgb(0 0 0/10%);border-color:#ccc;color:#444;height:17px;line-height:17px;min-width:56px;border-radius:2px;font-size:11px;font-weight:700;text-align:center;white-space:nowrap;padding:0 18px 0 6px}.inboxsdk__gmail_action:focus{border:1px solid #4d90fe;outline:0}.inboxsdk__gmail_action:active{box-shadow:inset 0 1px 2px rgb(0 0 0/10%)}.inboxsdk__gmail_action:hover{box-shadow:0 1px 1px rgb(0 0 0/5%);background-color:#ededed;background-image:-webkit-linear-gradient(top,#ededed,#eaeaea);background-image:linear-gradient(top,#ededed,#eaeaea);border-color:#b8b8b8}.inboxsdk__gmail_action::after{content:\"\";position:absolute;right:5px;top:5px;margin-left:5px;background:no-repeat url(https://ssl.gstatic.com/mail/sprites/smartmail-561acb673be75c1d374881a95997fce4.png)-67px -100px;width:7px;height:7px;opacity:.55}.inboxsdk__thread_row_custom_date{margin-left:2px}span.inboxsdk__thread_row_custom_date+span:not(.inboxsdk__thread_row_custom_date){display:none}.inboxsdk__thread_row_attachment_iconWrapper{margin-left:3px;height:16px}.inboxsdk__thread_row_attachment_icon{margin-left:3px;width:16px;height:16px}.inboxsdk__thread_row_attachment_iconWrapper{display:flex;justify-content:center;align-items:center;width:max-content}.zA td.apU.xY{width:initial}.zA td.apU.xY span.inboxsdk__thread_row_button{margin:0 10px;opacity:.16}.zA.aqw td.apU.xY span.inboxsdk__thread_row_button{opacity:.54}.zA.aqw td.apU.xY span.inboxsdk__thread_row_button:hover{opacity:1}.zA td.apU.xY span.inboxsdk__thread_row_button::before{width:0;height:0}.inboxsdk__thread_row_attachment_icon{vertical-align:middle}.Zs .xY.inboxsdk__thread_row_attachment_icons_present{flex-grow:0}.Zs .xY.inboxsdk__thread_row_label{order:1}.Zs .xY.inboxsdk__thread_row_icon_wrapper{order:1;margin-left:3px;margin-right:0}.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_icon,.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_iconImg{height:18px;width:18px}.inboxsdk__thread_row_icon_wrapper{width:20px;margin-right:3px;align-self:center;height:20px;flex:0 0 auto}.inboxsdk__thread_row_icon_wrapper .inboxsdk__button_iconImg{vertical-align:top}.inboxsdk__thread_row_image_added .y6 .inboxsdk__thread_row_icon_wrapper~span[id]{margin-left:3px}.inboxsdk__thread_row_image_added .a4W,.inboxsdk__thread_row_image_added .apA,.inboxsdk__thread_row_image_added .apx{position:relative}[inboxsdk__message_added_attachment_icon] td.gH div.gK>span:first-child>img,[inboxsdk__message_added_attachment_icon] td.gH>span:first-child>img{margin-right:3px;margin-left:3px;margin-top:0}[inboxsdk__message_added_attachment_icon] td.gH div.gK>span:first-child>:last-child,[inboxsdk__message_added_attachment_icon] td.gH>span:first-child>:last-child{margin-right:6px}.inboxsdk__message_attachment_icon,.inboxsdk__message_attachment_iconWrapper{width:21px;height:21px;position:relative}.inboxsdk__message_attachment_iconWrapper{margin:auto 3px;display:inline-flex;justify-content:center;align-items:center;vertical-align:top}.inboxsdk__message_attachment_tooltipWrapper{position:absolute;top:19px;z-index:10}.gU .aWQ{max-height:3px}.aQw .inboxsdk__button_icon{display:inline-flex;align-items:center;justify-content:center;height:28px}.aQw .inboxsdk__button_iconImg{height:18px;width:18px;margin-top:2px}.aZi .asa .inboxsdk__button_iconImg{display:inline-block;vertical-align:middle;margin-top:-3px}.aZi .aZj .asa .inboxsdk__button_iconImg{margin:0}body .dw{z-index:6!important}.inboxsdk__compose_outerSidebar_wrapper{position:absolute;left:-401px;top:0;background:#fff;width:400px;bottom:0;border-left:1px solid silver;box-shadow:-2px 0 1px #e6e6e6;display:block}.inboxsdk__outerSidebarActive .aSt .inboxsdk__compose_outerSidebar_wrapper{border-left:0;box-shadow:none;left:-400px}.inboxsdk__outerSidebarActive .aSs>div{width:50%!important;margin-left:30%}.inboxsdk__compose_outerSidebar_header{background:#404040;font-size:80%;padding:10px 10px 11px;color:#fff;border-bottom:1px solid #c4c4c4}.inboxsdk__compose_outerSidebar_body{position:absolute;width:100%;bottom:43px;top:36px;left:-1px;overflow:auto}.inboxsdk__compose_outerSidebar_footer{position:absolute;bottom:0;width:100%;border-top:1px solid rgb(206 206 206);display:block}.inboxsdk__compose_innerSidebarActive .GQ,.inboxsdk__compose_innerSidebarActive form{padding-right:200px}div.inboxsdk__compose_statusbar{border:0;height:40px;margin:0}.inboxsdk__compose_statusbar{background:0 0;position:relative}.HM .I5 .inboxsdk__compose_statusbar{padding:0 16px 16px}table+.inboxsdk__compose_statusbar{margin-top:-8px}body.inboxsdk__classic_gmail_recipients_area .inboxsdk__compose_statusbarActive .aoI{height:auto!important}.inboxsdk__compose_statusbarActive .aDl{z-index:unset}.inboxsdk__compose .qz{max-height:inherit!important}body:not(.inboxsdk_hack_disableComposeSizeFixer) .inboxsdk__size_fixer .aDj.aDi{position:static!important}.inboxsdk__compose_inlineReply.inboxsdk__compose_statusbarActive .HM .I5{padding-bottom:var(--inboxsdk-total-added-statusbar-height, 0px)}.inboxsdk__compose_inlineReply.inboxsdk__compose_statusbarActive .aDj::before{height:calc(100% + var(--inboxsdk-total-added-statusbar-height, 0px))}.inboxsdk__compose_inlineReply.inboxsdk__compose_statusbarActive .aDj.aDi>.aDh{background-color:#fff}.inboxsdk__recipient_row{display:flex}.inboxsdk__compose_notice{background-color:#f5f5f5;border-radius:4px;margin:10px;padding:10px 16px}.inboxsdk__recipient_row td.ok{height:20px;padding:0!important}.inboxsdk__recipient_row td.az3{padding:0 3px}.inboxsdk__compose_forceRecipientsOpen .fX.aXjCH{display:block!important}.inboxsdk__compose_forceRecipientRowHidden,.inboxsdk__compose_forceRecipientsOpen .aoD.hl,.inboxsdk__compose_hideRecipientArea .aoD.hl,.inboxsdk__compose_hideRecipientArea .fX.aXjCH,[data-thread-toolbar=true] [data-rowlist-toolbar=true],[data-toolbar-expanded=false] [data-toolbar-expanded=true],[data-toolbar-expanded=true] [data-toolbar-expanded=false],[data-toolbar-icononly=true] .inboxsdk__button_text{display:none!important}[data-toolbar-icononly=false] .inboxsdk__button_text{color:#5f6368}[data-toolbar-icononly=false] .asa::before{border-radius:4px;border:0!important}[data-toolbar-icononly=false] .inboxsdk__button{align-items:center;border:0;display:inline-flex;justify-content:center;position:relative;z-index:0;-webkit-font-smoothing:antialiased;font-family:\"Google Sans\",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.15px;background:0 0;box-sizing:border-box;color:#5f6368;cursor:pointer;font-weight:500;outline:0;padding:0 8px}.inboxsdk__menuItem .inboxsdk__icon,.inboxsdk__menuItem img{height:16px;width:16px;margin-top:-1px}.inboxsdk__modal_overlay{right:0;bottom:0}.inboxsdk__modal_fullscreen{position:fixed;inset:0 0 0 0;z-index:503;display:flex;justify-content:center;align-items:center;padding:110px 50px 50px}.inboxsdk__modal_content{margin-top:30px;margin-bottom:30px}.inboxsdk__modal_fullscreen.inboxsdk__modal_content_no_buttons .inboxsdk__modal_content{margin-bottom:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_content_no_buttons:not(.inboxsdk__modal_hideBottom) .inboxsdk__modal_content{margin-bottom:0;padding-bottom:24px}.inboxsdk__modal_close{outline:0;cursor:pointer}.inboxsdk__modal_fullscreen .inboxsdk__modal_container{position:relative;margin-top:-60px;width:auto;overflow:hidden}.inboxsdk__modal_fullscreen .inboxsdk__modal_container .inboxsdk__modal_toprow{margin-right:16px}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .inboxsdk__modal_close{display:none}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .inboxsdk__modal_container{padding-top:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .inboxsdk__modal_content{margin-top:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideTop .Kj-JD-K7{margin:0;display:none}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideSides .inboxsdk__modal_container,.inboxsdk__modal_fullscreen.inboxsdk__modal_hideSides .inboxsdk__modal_content{padding-left:0;padding-right:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideBottom .inboxsdk__modal_content{margin-bottom:0}.inboxsdk__modal_fullscreen.inboxsdk__modal_hideBottom .inboxsdk__modal_container{padding-bottom:0}.inboxsdk__modal_toprow.inboxsdk__modal_toprow--constrain-title-width{display:flex}.inboxsdk__modal_toprow--constrain-title-width>span[role=heading]{flex:1;width:0;word-wrap:break-word}.inboxsdk__drawers_in_use .aDi,.inboxsdk__moles_in_use .aDi{left:auto!important;position:static}.inboxsdk__moles_in_use .nH>.nH>.no{white-space:nowrap}.inboxsdk__moles_in_use .nH>.nH>.no>*{white-space:initial}.inboxsdk__moles_in_use .nH>.nH>.no>.nn{display:inline-block;float:none}.inboxsdk__mole_view{position:relative;max-width:564px;height:100vh;vertical-align:top;display:inline-flex;align-items:flex-end}.inboxsdk__mole_view_inner{visibility:visible;box-sizing:border-box;margin-right:5px;box-shadow:rgb(0 0 0/20%)0 2px 6px;min-width:260px;min-height:40px}.inboxsdk__mole_view_inner:not(.inboxsdk__original_view),.inboxsdk__mole_view_titlebar:not(.inboxsdk__original_view){border-radius:8px 8px 0 0}.inboxsdk__mole_view_titlebar{position:absolute;left:0;right:5px;font-size:14px;font-weight:500;box-sizing:border-box;height:40px;cursor:pointer;padding:10px 12px 10px 16px;color:#041e49;background:#f2f6fc}.inboxsdk__mole_view_titlebar.inboxsdk__original_view{color:#fff;font-size:12.8px;font-weight:400;background:#404040;padding:9px 0 0 11px;border-radius:4px 4px 0 0}.inboxsdk__mole_view_titlebar h2{font-size:inherit;font-weight:inherit;margin:4px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inboxsdk__mole_title_buttons{white-space:nowrap;float:right;padding-right:5px;margin-top:1px}.inboxsdk__mole_title_buttons.inboxsdk__original_view{margin-top:-3px}.inboxsdk__mole_title_buttons>img{height:24px;width:24px;position:relative;top:2px}.inboxsdk__mole_title_buttons:not(.inboxsdk__original_view)>img{height:16px;width:16px;margin-left:4px}.inboxsdk__mole_title_buttons:not(.inboxsdk__original_view)>img:hover{background-color:rgb(68 71 70/7.8%)}.inboxsdk__mole_title_buttons.inboxsdk__original_view>img:hover{background-color:#737373}.inboxsdk__mole_title_buttons>img:hover{opacity:1}.inboxsdk__mole_view.inboxsdk__minimized .Hl,.inboxsdk__mole_view.inboxsdk__minimized .inboxsdk__mole_view_content,.inboxsdk__mole_view.inboxsdk__minimized.inboxsdk__mole_use_minimize_title h2.inboxsdk__mole_default,.inboxsdk__mole_view:not(.inboxsdk__minimized) .Hk,.inboxsdk__mole_view:not(.inboxsdk__minimized) h2.inboxsdk__mole_minimized,.inboxsdk__mole_view:not(.inboxsdk__mole_use_minimize_title) h2.inboxsdk__mole_minimized{display:none}.inboxsdk__mole_view_content:not(.inboxsdk__original_view){margin-top:40px;border:0}.inboxsdk__mole_view_content{margin-top:36px;border:1px solid #cfcfcf;background:#fff;min-width:260px;min-height:20px;max-height:80vh}.inboxsdk__mole_view_chromeless .inboxsdk__mole_view_inner{min-width:0}.inboxsdk__mole_view_chromeless .inboxsdk__mole_view_content{margin-top:0;min-width:0}.inboxsdk__tab{width:30px}.inboxsdk__tab.inboxsdk__fQK2Ffccj51PVtC_ibDc:first-child:last-child{display:none}.inboxsdk__tab.inboxsdk__tab_selected{width:auto}table.aKk .inboxsdk__contentTabContainer .inboxsdk__tab .aAy[role=tab]{height:28px}.inboxsdk__tab_icon{width:30px;height:25px;background-position-x:5px;background-position-y:3px;background-size:16px;background-repeat:no-repeat}.inboxsdk__tab_icon img{height:16px;width:16px;margin-left:5px;margin-top:3px}.inboxsdk__tab .aKx{top:4px}.inboxsdk__sidebar div[role=complementary]{position:static!important}.inboxsdk__sidebar>div.y4,.inboxsdk__lmkPHCz841PzU2vywMZI>div.y4{display:none}table.aKk .inboxsdk__contentTabContainer .inboxsdk__tab:first-child .aAy[role=tab]{border-left-width:1px}.inboxsdk__sidebar .inboxsdk__contentPanelContainer{font:12px Arial,sans-serif;max-width:220px}.inboxsdk__contentPanelContainer_contentContainer{overflow:hidden;margin-bottom:10px;border-bottom:1px solid #d8d8d8}body.inboxsdk__hasTopMessageBar .bq9{top:var(--inboxsdk__topMessageBar-height)}.inboxsdk__lmkPHCz841PzU2vywMZI>div[role=complementary]{position:static!important;width:216px!important}.inboxsdk__lmkPHCz841PzU2vywMZI{will-change:position}.inboxsdk__RRnCd87hoA2uHeC1Z_FE{background:#fff}.inboxsdk__ZsVjiThsnbCmCG_X1Vvn{padding:4px 0 12px}.inboxsdk__L1YTilBb_3NY6uyjljIg.inboxsdk__fQK2Ffccj51PVtC_ibDc .inboxsdk__ZsVjiThsnbCmCG_X1Vvn{padding-top:0}.container_app_sidebar_in_use.no,.inboxsdk__IpDkQtEZuh257muFXot6.no{display:flex;flex-direction:row;width:100%}body[dir=rtl] .container_app_sidebar_in_use.no[dir=ltr],body[dir=rtl] .idm5_container_app_sidebar_no_icons.no[dir=ltr]{flex-direction:row-reverse}.container_app_sidebar_in_use.no .G-atb.inboxsdk__thread_toolbar_parent[gh=tm]{margin-right:-57px!important}.container_addon_sidebar_visible.container_app_sidebar_in_use.no .G-atb.inboxsdk__thread_toolbar_parent[gh=tm],.container_app_sidebar_visible.container_app_sidebar_in_use.no .G-atb.inboxsdk__thread_toolbar_parent[gh=tm]{margin-right:-321px!important}.inboxsdk__IpDkQtEZuh257muFXot6 .G-atb.inboxsdk__thread_toolbar_parent[gh=tm]{margin-right:0!important}.inboxsdk__button.ar7{pointer-events:all!important}.container_app_sidebar_in_use .bkK.nn,.inboxsdk__IpDkQtEZuh257muFXot6 .bkK.nn{width:auto!important;flex:1;min-width:0}.inboxsdk__IpDkQtEZuh257muFXot6 .bnl.nn{z-index:-1;position:absolute}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI{min-width:57px!important;flex-shrink:0}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI.app_sidebar_visible{min-width:321px!important}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI>.J-KU-Jg{display:block!important}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI .inboxsdk__jQiSbhX57v1JCl6fIbdb{display:none}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI.app_sidebar_visible .inboxsdk__jQiSbhX57v1JCl6fIbdb{display:block;float:left;height:100%;border-left:1px solid #e0e0e0;padding-left:16px;width:calc(100% - 74px);overflow:auto}.container_app_sidebar_in_use .inboxsdk__jQiSbhX57v1JCl6fIbdb .inboxsdk__ZsVjiThsnbCmCG_X1Vvn{width:calc(100% - 16px);padding-right:16px}.container_app_sidebar_in_use .inboxsdk__lmkPHCz841PzU2vywMZI.app_sidebar_visible .J-KU-Jz{width:auto;padding-right:50px}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon{margin:18px 18px 10px;border:0;background:0 0;height:20px;width:20px;overflow:hidden;padding:0;cursor:pointer;position:relative}.inboxsdk__z3cCBtGXYneog44Vf16J.sidebar_global_iconArea .inboxsdk__button_icon{margin-bottom:18px}body .inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon{overflow:visible}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon:hover::before,.inboxsdk__z3cCBtGXYneog44Vf16J .sidebar_button_container_active .inboxsdk__button_icon::before{content:\"\";background:#f1f3f4;position:absolute;inset:-10px -10px -10px -10px;border-radius:50%;z-index:0}.inboxsdk__z3cCBtGXYneog44Vf16J .sidebar_button_container_active .inboxsdk__button_icon::before{background:#e8eaed}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_iconImg{width:20px;height:20px;margin-top:0}.inboxsdk__z3cCBtGXYneog44Vf16J .inboxsdk__button_icon .inboxsdk__button_iconImg{position:absolute;left:0;top:0;z-index:1}.inboxsdk__z3cCBtGXYneog44Vf16J .sidebar_button_container_active .inboxsdk__button_selectedIndicator{height:40px;width:4px;position:absolute;right:0;bottom:0;background-color:rgb(66 133 244);border-radius:3px 0 0 3px}.inboxsdk__z3cCBtGXYneog44Vf16J.sidebar_global_iconArea .sidebar_button_container_active .inboxsdk__button_selectedIndicator{bottom:8px}.brC-brG.companion_app_sidebar_visible{display:block!important}.bq9:not(.brC-brG).companion_app_sidebar_wrapper_visible{display:block!important}.companion_global_app_sidebar_visible .thread_app_sidebar{display:none}.companion_app_sidebar_visible:not(.companion_global_app_sidebar_visible) .global_app_sidebar,body.inboxsdk__custom_view_active .brC-aT5-aOt-ato-Kp-Jw [role=tablist]>div:not(:last-child){display:none}.nH.companion_container_app_sidebar_visible{width:calc(100% - 300px)!important}.companion_app_sidebar_visible .addon_sidebar~div:not(.addon_sidebar){display:none!important}.inboxsdk__lmkPHCz841PzU2vywMZI .inboxsdk__jQiSbhX57v1JCl6fIbdb.addon_sidebar{height:100%;overflow:auto}.inboxsdk__lmkPHCz841PzU2vywMZI .inboxsdk__jQiSbhX57v1JCl6fIbdb.addon_sidebar .inboxsdk__ZsVjiThsnbCmCG_X1Vvn{width:100%}.inboxsdk__lmkPHCz841PzU2vywMZI:not(.companion_app_sidebar_visible) .addon_sidebar{display:none}.inboxsdk__TFQRFr4aJVmDmx2llTVx{margin-left:0}.inboxsdk__RRnCd87hoA2uHeC1Z_FE .inboxsdk__iYzl6PjYB9v7KGQNbONH{padding:0 16px}.inboxsdk__lmkPHCz841PzU2vywMZI .bvq,.inboxsdk__lmkPHCz841PzU2vywMZI .bvq>div:last-child{display:block!important}.inboxsdk__cnd4jAy3zFUYdR_NdMxT .bvq>div:first-child{display:none!important}.inboxsdk__custom_view_element{overflow:auto}.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem){border-left-color:transparent}.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem) .bsU,.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem) .nU:not(.n1) .n0{font-weight:400}.inboxsdk__hide_native_marker .ain:not(.inboxsdk__navItem) .TO{background:0 0}.inboxsdk__hide_addon_container{display:flex!important;flex-direction:row;width:100%!important}body[dir=rtl] .inboxsdk__hide_addon_container[dir=ltr]{flex-direction:row-reverse}.inboxsdk__hide_addon_container>.bkK.nn{width:auto!important;flex:1;min-width:0}.inboxsdk__hide_addon_container>.bnl.nn,.inboxsdk__navItem>.TO img.afM.afO~.aio>.bsU{display:none}.inboxsdk__navItem{font-size:14px}.inboxsdk__navItem:not(.Xr)>.V3[style]{flex-grow:0!important}.inboxsdk__navItem>.TO.n4{display:block;padding-left:0}.inboxsdk__collapsiblePanel .inboxsdk__navItem>.TO .TN.aik{padding-left:18px}.inboxsdk__collapsiblePanel .inboxsdk__navItem>.TO .qj{margin-right:14px}.inboxsdk__navItem>.TO.n4 .qj>.G-asx{margin-right:0}.inboxsdk__navItem>.TO .aio>.bsU:empty{display:none}.inboxsdk__navItem>.TO .qj:empty::after{background-color:rgb(118 118 118);border-radius:50%;content:\"\";height:18px;margin-left:1px;width:18px}.inboxsdk__navItem>.TO .qj[style*=border-color]:empty::after{border-color:inherit}.inboxsdk__navItem>.TO:hover .pM{display:flex;visibility:visible}.inboxsdk__navItem>.TO .afM{cursor:pointer}.inboxsdk__navItem>.TO img.afM.afO,.inboxsdk__navItem>.TO:hover .afM{display:block;visibility:visible}.inboxsdk__collapsiblePanel_loading_container,.inboxsdk__navItem>.TO:hover .bsU{display:none}.inboxsdk__navItem.inboxsdk__navItem_nonClickable>.TO:active{background-color:initial}.inboxsdk__navItem_hover .aj0,.inboxsdk__navItem_hover .p8{visibility:visible}.inboxsdk__appMenuItem .CL.V6::before,.inboxsdk__collapsiblePanel .T-I.T-I-KE.L3::before{background-image:var(--background-image)}.inboxsdk__collapsiblePanel.apV.aJu .T-I.T-I-KE.L3::before{background-image:var(--background-image--hover)}.inboxsdk__appMenuItem.apV .CL.V6::before{background-image:var(--background-image--active)}.inboxsdk__collapsiblePanel .T-I.T-I-KE.L3::before{background-size:24px}.inboxsdk__collapsiblePanel_loading_container.inboxsdk__collapsiblePanel_loading_container--active,.inboxsdk__shortcutHelp_table table.cf,.inboxsdk__shortcutHelp_table tbody tbody,table[role=presentation].inboxsdk__thread_view_with_custom_view>tr{display:block}.inboxsdk__navItem_link{cursor:pointer;margin-left:auto}.inboxsdk__navItem_link>a{margin-left:16px}.inboxsdk__navItem>.TO .inboxsdk__button{margin-right:0}[dir=rtl] .inboxsdk__navItem_link{left:-4px;right:initial}.inboxsdk__navItem_container .aio .inboxsdk__button{position:absolute;top:0;right:-30px}.inboxsdk__navItem_marker{position:absolute;left:0;padding-bottom:2px}.inboxsdk__expando{z-index:1}.aip .CK,.inboxsdk__navItem_link>a{color:#15c}.aip .CK:hover,.inboxsdk__navItem_link>a:hover{text-decoration:underline}.inboxsdk__navItem_container .aio.aip{white-space:nowrap}.WR[role=navigation] .inboxsdk__navItem .Yh:not(.inboxsdk__navItem_parent_accessory_button):empty{display:none}.WR[role=navigation] .inboxsdk__navItem .Yh:not(.inboxsdk__navItem_parent_accessory_button){background:0 0}.WR[role=navigation] .inboxsdk__navItem .Yh .inboxsdk__button_icon{display:none}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh{opacity:1}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh.inboxsdk__navItem_parent_accessory_button{background-image:none!important}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh:empty{background-color:rgb(32 33 36/71%);border-radius:50%;display:inherit;height:18px;margin-left:1px;width:18px}.WR[role=navigation].bhZ:not(.bym) .inboxsdk__navItem .Yh .inboxsdk__button_icon{display:inherit}.inboxsdk__custom_sections{margin-bottom:8px}.inboxsdk__custom_sections.Wc{padding:0;margin-bottom:0}.inboxsdk__resultsSection.inboxsdk__resultsSection_nonCollapsible .inboxsdk__resultsSection_title .Wp{visibility:hidden}.inboxsdk__custom_sections .Wg,.inboxsdk__custom_sections.Wc .inboxsdk__resultsSection{padding-top:0}.inboxsdk__custom_sections.Wc .Wg{border-bottom:0;padding:0}.inboxsdk__results_collapsedContainer.Wg{height:auto}.inboxsdk__results_collapsedContainer>div{display:flex;flex-wrap:wrap;flex:1 0 100%}.inboxsdk__results_collapsedContainer>div>.inboxsdk__resultsSection_collapsed:first-child:last-child{flex:1;margin-right:0}.inboxsdk__results_collapsedContainer>div>.inboxsdk__resultsSection_collapsed:first-child:last-child>.inboxsdk__resultsSection_header{display:flex;align-items:center;flex:1}.inboxsdk__resultsSection.inboxsdk__resultsSection_collapsed{display:inline-block;margin-right:20px;display:inline-flex}.Wc .inboxsdk__resultsSection.inboxsdk__resultsSection_collapsed{margin-right:0}.inboxsdk__resultsSection_collapsed .inboxsdk__resultsSection_header{padding-right:0}.inboxsdk__resultsSection_title{white-space:nowrap;cursor:pointer;display:inline-block;display:flex;align-items:center;height:48px}.Wc .inboxsdk__resultsSection_title{padding:3px 0 3px 8px}.inboxsdk__resultsSection_header{min-height:48px;line-height:48px}.inboxsdk__resultsSection_header_summaryText.Wm:last-child .amH{padding-right:0;margin-right:0}.inboxsdk__custom_sections.Wc .inboxsdk__resultsSection_header_summaryText:last-child{margin-right:11px}.inboxsdk__custom_sections.Wc .J-JN-M-I{margin-right:13px}.inboxsdk__resultsSection .TB.TC{text-align:center}.inboxsdk__resultsSection .inboxsdk__resultsSection_loading{font-style:italic}.inboxsdk__resultsSection .inboxsdk__resultsSection_result_icon{height:15px;width:15px}.inboxsdk__resultsSection_label_iconHtml,.inboxsdk__resultsSection_result_iconHtml{display:flex;justify-content:center;align-items:center}.inboxsdk__resultsSection .inboxsdk__resultsSection_tableRow.zA:hover>.xW{display:flex}.inboxsdk__resultsSection .inboxsdk__resultsSection_tableRow.zA>.xW{max-width:none;flex-basis:auto}.inboxsdk__resultsSection .inboxsdk__resultsSection_tableRow .xT{align-items:center}.inboxsdk__resultsSection .xX{width:20ex}.inboxsdk__resultsSection tr .xW>span{overflow:hidden;display:block;text-overflow:ellipsis}.inboxsdk__resultsSection .V3{overflow:hidden;white-space:nowrap}.inboxsdk__resultsSection .at{position:relative}.inboxsdk__thread_row_label{flex-shrink:0;align-self:flex-end}.apv .inboxsdk__thread_row_label{align-self:flex-start}.inboxsdk__resultsSection_label_icon{height:11px;width:11px;position:absolute;top:2px;margin-left:4px;margin-top:1px}.inboxsdk__resultsSection .av,.inboxsdk__thread_row_label .av{overflow:hidden;text-overflow:ellipsis}.inboxsdk__resultsSection_label_icon+.av,.inboxsdk__thread_row_label .inboxsdk__button_icon+.av{margin-left:16px}.Wc .inboxsdk__resultsSection_footer{padding:3px 3px 3px 8px}.inboxsdk__tooltip .T-P{box-shadow:0 1px 3px rgb(0 0 0/20%);background-color:#fff;border:1px solid;border-color:#bbb #bbb #a8a8a8;padding:16px;z-index:1201!important}.inboxdk__tooltip_content.inboxsdk__tooltip .aRM,.inboxsdk__tooltip.inboxdk__tooltip_content .T-P,.inboxsdk__tooltip.inboxsdk__appButton_tooltip .T-P{padding:0}.inboxsdk__tooltip .aRM{outline:0;padding:13px 10px 16px;text-align:center;font:16px arial,sans-serif}.inboxsdk__tooltip .aRR{color:#333;font-size:18px;margin-top:13px}.inboxsdk__tooltip .aRQ{color:#777;font-size:13px;margin:3px 0 14px}.inboxsdk__tooltip{position:fixed;z-index:1300;transition:left 200ms ease,top 200ms ease}.inboxsdk__tooltip .T-P{position:relative;width:auto;max-width:500px}.inboxsdk__tooltip .inboxsdk__tooltip_arrow{position:fixed;z-index:1400;margin-top:-1px;transition:left 200ms ease,top 200ms ease}.inboxsdk__tooltip .inboxsdk__tooltip_close{user-select:none}.inboxsdk__tooltip .inboxsdk__button{margin-right:0}.inboxsdk__tooltip .inboxsdk__tooltip_image{max-height:300px;max-width:500px;overflow:hidden;height:auto}.inboxsdk__tooltip .inboxsdk__tooltip_image>img{max-height:300px;max-width:500px}.inboxsdk__attachmentCard img.aQG.aYB{max-width:178px;min-width:178px;min-height:118px}.inboxsdk__attachmentCard img.aZG.aYw{background:0 0}.aQw>.T-I.J-J5-Ji.L3{margin-top:5px}table.cf.wd.inboxsdk__shortcutHelp_table{margin-bottom:15px}.inboxsdk__shortcutHelp_table td.Dn{display:inline-block;width:50%}.inboxsdk__shortcutHelp_table tbody tbody tr{display:block;white-space:nowrap}.inboxsdk__shortcutHelp_table td.wg.Dn{display:inline-block;width:45%}.inboxsdk__shortcutHelp_table span.wb{margin-left:3px}.inboxsdk__shortcutHelp_table td.we.Dn{width:60%;white-space:normal}.inboxsdk__shortcutHelp_title img.inboxsdk__icon{height:21px;width:21px;vertical-align:middle;margin-right:10px;border-radius:4px}.asor.inboxsdk__custom_suggestion,.inboxsdk__custom_suggestion_iconHTML{display:flex;justify-content:center;align-items:center}.inboxsdk__custom_suggestion img{max-width:32px;max-height:32px}.inboxsdk__custom_suggestion_iconHTML{position:absolute;left:8px;height:32px;width:43px}.gstq_d .inboxsdk__custom_suggestion_iconHTML{margin-top:-8px}.inboxsdk__appButton{margin-right:8px}.inboxsdk__appButton+.inboxsdk__appButton{margin-left:16px}.inboxsdk__appButton.inboxsdk__appButton_noGPlus{margin-right:0}.inboxsdk__appButton .inboxsdk__button_icon{margin-right:5px;position:relative}.inboxsdk__appButton a{color:#404040;text-decoration:none;line-height:24px}.inboxsdk__appButton.inboxsdk__appButton_noGPlus a{line-height:30px}.inboxsdk__appButton a:hover{text-decoration:underline;color:#000}.inboxsdk__gmail_dark_theme .inboxsdk__appButton a{color:#eee}.inboxsdk__gmail_dark_theme .inboxsdk__appButton a:hover{color:#fff}.inboxsdk__appButton_tooltip{outline:0;transition:none;animation:gb__a .2s}.inboxsdk__appButton_tooltip .inboxsdk__tooltip_close,.inboxsdk__searchIsNarrow .streak__appToolbarButton_title{display:none}.inboxsdk__tooltip.inboxsdk__appButton_tooltip .aRM{padding:0;white-space:initial;text-align:center;font:16px arial,sans-serif}.inboxsdk__tooltip.inboxsdk__appButton_tooltip .inboxsdk__tooltip_arrow{transform-origin:top;transform:rotateZ(180deg);margin-top:9px}.inboxsdk__custom_message_view{display:flex;padding-top:20px;padding-bottom:20px;border-top:1px solid #efefef;border-collapse:collapse}.inboxsdk__custom_message_view_hidden{display:none}.h7.ie+.inboxsdk__custom_message_view{margin-top:5px}.kQ+.inboxsdk__custom_message_view,.kx+.inboxsdk__custom_message_view{margin-top:1px}.inboxsdk__custom_message_view.inboxsdk__custom_message_view_collapsed{cursor:pointer}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_icon{padding-left:16px;padding-right:16px;flex-shrink:0}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_icon img{height:32px;width:32px;border-radius:50%}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_content{width:100%;min-width:0}.inboxsdk__custom_message_view .inboxsdk__custom_message_view_header{cursor:pointer}.inboxsdk__custom_message_view_app_notice_content{position:relative;z-index:1;align-items:center;display:flex;font-size:.75rem!important;justify-content:flex-start;margin-left:0;padding:0;top:0}.adx.inboxsdk__custom_message_view_app_notice_container.inboxsdk__custom_message_view_app_notice_container{position:relative;width:auto!important;min-width:32px}.adx.inboxsdk__custom_message_view_app_notice_container.inboxsdk__custom_message_view_app_notice_container:hover::before{content:none!important}.adx.inboxsdk__custom_message_view_app_notice_container.inboxsdk__custom_message_view_app_notice_container>span:first-child{display:none}.inboxsdk__custom_message_view_app_notice_container::before{position:absolute}.inboxsdk__custom_message_view_app_notice_content>*{color:#555}table[role=presentation].inboxsdk__thread_view_with_custom_view{table-layout:fixed}.inboxsdk__butterbar.inboxsdk__butterbar_error{background-color:#c53929!important}.inboxsdk__butterbar.inboxsdk__butterbar_error [role=button]{color:#fff}.inboxsdk__butterbar.inboxsdk__butterbar_error [role=button]::before{background:rgb(255 255 255/8%)}.inboxsdk__support_menuItem:hover{background-color:#eee;outline:1px dashed transparent}.inboxsdk__compose_addressList{display:flex!important}.inboxsdk__linkPopOver_section_container{position:absolute;width:100%;top:35px;left:0}.inboxsdk__linkPopOver_section{width:100%;background:#fff;border:1px solid;border-color:#bbb #bbb #a8a8a8;font:13px arial,sans-serif;padding:5px 8px;margin-bottom:5px;box-sizing:border-box;box-shadow:0 1px 3px rgb(0 0 0/20%)}.T-I.J-J5-Ji.T-I-ax7.inboxsdk__button .asa::after{width:auto}", ""]);
32822
32966
  // Exports
32823
32967
  var app_sidebar_waiting_platform = "inboxsdk__nJrOYb9x4IUalKhkqH70";
32824
32968
  var app_sidebar_main = "inboxsdk__YVRXKNcaUvgm8xbnhvbA";
@@ -37849,1522 +37993,6 @@ var __WEBPACK_AMD_DEFINE_RESULT__;;(function (globalScope) {
37849
37993
  })(this);
37850
37994
 
37851
37995
 
37852
- /***/ }),
37853
-
37854
- /***/ 7856:
37855
- /***/ (function(module) {
37856
-
37857
- /*! @license DOMPurify 3.0.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.8/LICENSE */
37858
-
37859
- (function (global, factory) {
37860
- true ? module.exports = factory() :
37861
- 0;
37862
- })(this, (function () { 'use strict';
37863
-
37864
- const {
37865
- entries,
37866
- setPrototypeOf,
37867
- isFrozen,
37868
- getPrototypeOf,
37869
- getOwnPropertyDescriptor
37870
- } = Object;
37871
- let {
37872
- freeze,
37873
- seal,
37874
- create
37875
- } = Object; // eslint-disable-line import/no-mutable-exports
37876
- let {
37877
- apply,
37878
- construct
37879
- } = typeof Reflect !== 'undefined' && Reflect;
37880
- if (!freeze) {
37881
- freeze = function freeze(x) {
37882
- return x;
37883
- };
37884
- }
37885
- if (!seal) {
37886
- seal = function seal(x) {
37887
- return x;
37888
- };
37889
- }
37890
- if (!apply) {
37891
- apply = function apply(fun, thisValue, args) {
37892
- return fun.apply(thisValue, args);
37893
- };
37894
- }
37895
- if (!construct) {
37896
- construct = function construct(Func, args) {
37897
- return new Func(...args);
37898
- };
37899
- }
37900
- const arrayForEach = unapply(Array.prototype.forEach);
37901
- const arrayPop = unapply(Array.prototype.pop);
37902
- const arrayPush = unapply(Array.prototype.push);
37903
- const stringToLowerCase = unapply(String.prototype.toLowerCase);
37904
- const stringToString = unapply(String.prototype.toString);
37905
- const stringMatch = unapply(String.prototype.match);
37906
- const stringReplace = unapply(String.prototype.replace);
37907
- const stringIndexOf = unapply(String.prototype.indexOf);
37908
- const stringTrim = unapply(String.prototype.trim);
37909
- const regExpTest = unapply(RegExp.prototype.test);
37910
- const typeErrorCreate = unconstruct(TypeError);
37911
-
37912
- /**
37913
- * Creates a new function that calls the given function with a specified thisArg and arguments.
37914
- *
37915
- * @param {Function} func - The function to be wrapped and called.
37916
- * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.
37917
- */
37918
- function unapply(func) {
37919
- return function (thisArg) {
37920
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
37921
- args[_key - 1] = arguments[_key];
37922
- }
37923
- return apply(func, thisArg, args);
37924
- };
37925
- }
37926
-
37927
- /**
37928
- * Creates a new function that constructs an instance of the given constructor function with the provided arguments.
37929
- *
37930
- * @param {Function} func - The constructor function to be wrapped and called.
37931
- * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.
37932
- */
37933
- function unconstruct(func) {
37934
- return function () {
37935
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
37936
- args[_key2] = arguments[_key2];
37937
- }
37938
- return construct(func, args);
37939
- };
37940
- }
37941
-
37942
- /**
37943
- * Add properties to a lookup table
37944
- *
37945
- * @param {Object} set - The set to which elements will be added.
37946
- * @param {Array} array - The array containing elements to be added to the set.
37947
- * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.
37948
- * @returns {Object} The modified set with added elements.
37949
- */
37950
- function addToSet(set, array) {
37951
- let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;
37952
- if (setPrototypeOf) {
37953
- // Make 'in' and truthy checks like Boolean(set.constructor)
37954
- // independent of any properties defined on Object.prototype.
37955
- // Prevent prototype setters from intercepting set as a this value.
37956
- setPrototypeOf(set, null);
37957
- }
37958
- let l = array.length;
37959
- while (l--) {
37960
- let element = array[l];
37961
- if (typeof element === 'string') {
37962
- const lcElement = transformCaseFunc(element);
37963
- if (lcElement !== element) {
37964
- // Config presets (e.g. tags.js, attrs.js) are immutable.
37965
- if (!isFrozen(array)) {
37966
- array[l] = lcElement;
37967
- }
37968
- element = lcElement;
37969
- }
37970
- }
37971
- set[element] = true;
37972
- }
37973
- return set;
37974
- }
37975
-
37976
- /**
37977
- * Clean up an array to harden against CSPP
37978
- *
37979
- * @param {Array} array - The array to be cleaned.
37980
- * @returns {Array} The cleaned version of the array
37981
- */
37982
- function cleanArray(array) {
37983
- for (let index = 0; index < array.length; index++) {
37984
- if (getOwnPropertyDescriptor(array, index) === undefined) {
37985
- array[index] = null;
37986
- }
37987
- }
37988
- return array;
37989
- }
37990
-
37991
- /**
37992
- * Shallow clone an object
37993
- *
37994
- * @param {Object} object - The object to be cloned.
37995
- * @returns {Object} A new object that copies the original.
37996
- */
37997
- function clone(object) {
37998
- const newObject = create(null);
37999
- for (const [property, value] of entries(object)) {
38000
- if (getOwnPropertyDescriptor(object, property) !== undefined) {
38001
- if (Array.isArray(value)) {
38002
- newObject[property] = cleanArray(value);
38003
- } else if (value && typeof value === 'object' && value.constructor === Object) {
38004
- newObject[property] = clone(value);
38005
- } else {
38006
- newObject[property] = value;
38007
- }
38008
- }
38009
- }
38010
- return newObject;
38011
- }
38012
-
38013
- /**
38014
- * This method automatically checks if the prop is function or getter and behaves accordingly.
38015
- *
38016
- * @param {Object} object - The object to look up the getter function in its prototype chain.
38017
- * @param {String} prop - The property name for which to find the getter function.
38018
- * @returns {Function} The getter function found in the prototype chain or a fallback function.
38019
- */
38020
- function lookupGetter(object, prop) {
38021
- while (object !== null) {
38022
- const desc = getOwnPropertyDescriptor(object, prop);
38023
- if (desc) {
38024
- if (desc.get) {
38025
- return unapply(desc.get);
38026
- }
38027
- if (typeof desc.value === 'function') {
38028
- return unapply(desc.value);
38029
- }
38030
- }
38031
- object = getPrototypeOf(object);
38032
- }
38033
- function fallbackValue(element) {
38034
- console.warn('fallback value for', element);
38035
- return null;
38036
- }
38037
- return fallbackValue;
38038
- }
38039
-
38040
- const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);
38041
-
38042
- // SVG
38043
- const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);
38044
- const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);
38045
-
38046
- // List of SVG elements that are disallowed by default.
38047
- // We still need to know them so that we can do namespace
38048
- // checks properly in case one wants to add them to
38049
- // allow-list.
38050
- const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);
38051
- const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);
38052
-
38053
- // Similarly to SVG, we want to know all MathML elements,
38054
- // even those that we disallow by default.
38055
- const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);
38056
- const text = freeze(['#text']);
38057
-
38058
- const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);
38059
- const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
38060
- const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
38061
- const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);
38062
-
38063
- // eslint-disable-next-line unicorn/better-regex
38064
- const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode
38065
- const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
38066
- const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm);
38067
- const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape
38068
- const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape
38069
- const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape
38070
- );
38071
-
38072
- const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
38073
- const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex
38074
- );
38075
-
38076
- const DOCTYPE_NAME = seal(/^html$/i);
38077
-
38078
- var EXPRESSIONS = /*#__PURE__*/Object.freeze({
38079
- __proto__: null,
38080
- MUSTACHE_EXPR: MUSTACHE_EXPR,
38081
- ERB_EXPR: ERB_EXPR,
38082
- TMPLIT_EXPR: TMPLIT_EXPR,
38083
- DATA_ATTR: DATA_ATTR,
38084
- ARIA_ATTR: ARIA_ATTR,
38085
- IS_ALLOWED_URI: IS_ALLOWED_URI,
38086
- IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,
38087
- ATTR_WHITESPACE: ATTR_WHITESPACE,
38088
- DOCTYPE_NAME: DOCTYPE_NAME
38089
- });
38090
-
38091
- const getGlobal = function getGlobal() {
38092
- return typeof window === 'undefined' ? null : window;
38093
- };
38094
-
38095
- /**
38096
- * Creates a no-op policy for internal use only.
38097
- * Don't export this function outside this module!
38098
- * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.
38099
- * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).
38100
- * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types
38101
- * are not supported or creating the policy failed).
38102
- */
38103
- const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {
38104
- if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {
38105
- return null;
38106
- }
38107
-
38108
- // Allow the callers to control the unique policy name
38109
- // by adding a data-tt-policy-suffix to the script element with the DOMPurify.
38110
- // Policy creation with duplicate names throws in Trusted Types.
38111
- let suffix = null;
38112
- const ATTR_NAME = 'data-tt-policy-suffix';
38113
- if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {
38114
- suffix = purifyHostElement.getAttribute(ATTR_NAME);
38115
- }
38116
- const policyName = 'dompurify' + (suffix ? '#' + suffix : '');
38117
- try {
38118
- return trustedTypes.createPolicy(policyName, {
38119
- createHTML(html) {
38120
- return html;
38121
- },
38122
- createScriptURL(scriptUrl) {
38123
- return scriptUrl;
38124
- }
38125
- });
38126
- } catch (_) {
38127
- // Policy creation failed (most likely another DOMPurify script has
38128
- // already run). Skip creating the policy, as this will only cause errors
38129
- // if TT are enforced.
38130
- console.warn('TrustedTypes policy ' + policyName + ' could not be created.');
38131
- return null;
38132
- }
38133
- };
38134
- function createDOMPurify() {
38135
- let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
38136
- const DOMPurify = root => createDOMPurify(root);
38137
-
38138
- /**
38139
- * Version label, exposed for easier checks
38140
- * if DOMPurify is up to date or not
38141
- */
38142
- DOMPurify.version = '3.0.8';
38143
-
38144
- /**
38145
- * Array of elements that DOMPurify removed during sanitation.
38146
- * Empty if nothing was removed.
38147
- */
38148
- DOMPurify.removed = [];
38149
- if (!window || !window.document || window.document.nodeType !== 9) {
38150
- // Not running in a browser, provide a factory function
38151
- // so that you can pass your own Window
38152
- DOMPurify.isSupported = false;
38153
- return DOMPurify;
38154
- }
38155
- let {
38156
- document
38157
- } = window;
38158
- const originalDocument = document;
38159
- const currentScript = originalDocument.currentScript;
38160
- const {
38161
- DocumentFragment,
38162
- HTMLTemplateElement,
38163
- Node,
38164
- Element,
38165
- NodeFilter,
38166
- NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,
38167
- HTMLFormElement,
38168
- DOMParser,
38169
- trustedTypes
38170
- } = window;
38171
- const ElementPrototype = Element.prototype;
38172
- const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');
38173
- const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');
38174
- const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');
38175
- const getParentNode = lookupGetter(ElementPrototype, 'parentNode');
38176
-
38177
- // As per issue #47, the web-components registry is inherited by a
38178
- // new document created via createHTMLDocument. As per the spec
38179
- // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
38180
- // a new empty registry is used when creating a template contents owner
38181
- // document, so we use that as our parent document to ensure nothing
38182
- // is inherited.
38183
- if (typeof HTMLTemplateElement === 'function') {
38184
- const template = document.createElement('template');
38185
- if (template.content && template.content.ownerDocument) {
38186
- document = template.content.ownerDocument;
38187
- }
38188
- }
38189
- let trustedTypesPolicy;
38190
- let emptyHTML = '';
38191
- const {
38192
- implementation,
38193
- createNodeIterator,
38194
- createDocumentFragment,
38195
- getElementsByTagName
38196
- } = document;
38197
- const {
38198
- importNode
38199
- } = originalDocument;
38200
- let hooks = {};
38201
-
38202
- /**
38203
- * Expose whether this browser supports running the full DOMPurify.
38204
- */
38205
- DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;
38206
- const {
38207
- MUSTACHE_EXPR,
38208
- ERB_EXPR,
38209
- TMPLIT_EXPR,
38210
- DATA_ATTR,
38211
- ARIA_ATTR,
38212
- IS_SCRIPT_OR_DATA,
38213
- ATTR_WHITESPACE
38214
- } = EXPRESSIONS;
38215
- let {
38216
- IS_ALLOWED_URI: IS_ALLOWED_URI$1
38217
- } = EXPRESSIONS;
38218
-
38219
- /**
38220
- * We consider the elements and attributes below to be safe. Ideally
38221
- * don't add any new ones but feel free to remove unwanted ones.
38222
- */
38223
-
38224
- /* allowed element names */
38225
- let ALLOWED_TAGS = null;
38226
- const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);
38227
-
38228
- /* Allowed attribute names */
38229
- let ALLOWED_ATTR = null;
38230
- const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);
38231
-
38232
- /*
38233
- * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.
38234
- * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)
38235
- * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)
38236
- * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.
38237
- */
38238
- let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
38239
- tagNameCheck: {
38240
- writable: true,
38241
- configurable: false,
38242
- enumerable: true,
38243
- value: null
38244
- },
38245
- attributeNameCheck: {
38246
- writable: true,
38247
- configurable: false,
38248
- enumerable: true,
38249
- value: null
38250
- },
38251
- allowCustomizedBuiltInElements: {
38252
- writable: true,
38253
- configurable: false,
38254
- enumerable: true,
38255
- value: false
38256
- }
38257
- }));
38258
-
38259
- /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
38260
- let FORBID_TAGS = null;
38261
-
38262
- /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
38263
- let FORBID_ATTR = null;
38264
-
38265
- /* Decide if ARIA attributes are okay */
38266
- let ALLOW_ARIA_ATTR = true;
38267
-
38268
- /* Decide if custom data attributes are okay */
38269
- let ALLOW_DATA_ATTR = true;
38270
-
38271
- /* Decide if unknown protocols are okay */
38272
- let ALLOW_UNKNOWN_PROTOCOLS = false;
38273
-
38274
- /* Decide if self-closing tags in attributes are allowed.
38275
- * Usually removed due to a mXSS issue in jQuery 3.0 */
38276
- let ALLOW_SELF_CLOSE_IN_ATTR = true;
38277
-
38278
- /* Output should be safe for common template engines.
38279
- * This means, DOMPurify removes data attributes, mustaches and ERB
38280
- */
38281
- let SAFE_FOR_TEMPLATES = false;
38282
-
38283
- /* Decide if document with <html>... should be returned */
38284
- let WHOLE_DOCUMENT = false;
38285
-
38286
- /* Track whether config is already set on this instance of DOMPurify. */
38287
- let SET_CONFIG = false;
38288
-
38289
- /* Decide if all elements (e.g. style, script) must be children of
38290
- * document.body. By default, browsers might move them to document.head */
38291
- let FORCE_BODY = false;
38292
-
38293
- /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html
38294
- * string (or a TrustedHTML object if Trusted Types are supported).
38295
- * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
38296
- */
38297
- let RETURN_DOM = false;
38298
-
38299
- /* Decide if a DOM `DocumentFragment` should be returned, instead of a html
38300
- * string (or a TrustedHTML object if Trusted Types are supported) */
38301
- let RETURN_DOM_FRAGMENT = false;
38302
-
38303
- /* Try to return a Trusted Type object instead of a string, return a string in
38304
- * case Trusted Types are not supported */
38305
- let RETURN_TRUSTED_TYPE = false;
38306
-
38307
- /* Output should be free from DOM clobbering attacks?
38308
- * This sanitizes markups named with colliding, clobberable built-in DOM APIs.
38309
- */
38310
- let SANITIZE_DOM = true;
38311
-
38312
- /* Achieve full DOM Clobbering protection by isolating the namespace of named
38313
- * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.
38314
- *
38315
- * HTML/DOM spec rules that enable DOM Clobbering:
38316
- * - Named Access on Window (§7.3.3)
38317
- * - DOM Tree Accessors (§3.1.5)
38318
- * - Form Element Parent-Child Relations (§4.10.3)
38319
- * - Iframe srcdoc / Nested WindowProxies (§4.8.5)
38320
- * - HTMLCollection (§4.2.10.2)
38321
- *
38322
- * Namespace isolation is implemented by prefixing `id` and `name` attributes
38323
- * with a constant string, i.e., `user-content-`
38324
- */
38325
- let SANITIZE_NAMED_PROPS = false;
38326
- const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';
38327
-
38328
- /* Keep element content when removing element? */
38329
- let KEEP_CONTENT = true;
38330
-
38331
- /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead
38332
- * of importing it into a new Document and returning a sanitized copy */
38333
- let IN_PLACE = false;
38334
-
38335
- /* Allow usage of profiles like html, svg and mathMl */
38336
- let USE_PROFILES = {};
38337
-
38338
- /* Tags to ignore content of when KEEP_CONTENT is true */
38339
- let FORBID_CONTENTS = null;
38340
- const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);
38341
-
38342
- /* Tags that are safe for data: URIs */
38343
- let DATA_URI_TAGS = null;
38344
- const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);
38345
-
38346
- /* Attributes safe for values like "javascript:" */
38347
- let URI_SAFE_ATTRIBUTES = null;
38348
- const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);
38349
- const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
38350
- const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
38351
- const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
38352
- /* Document namespace */
38353
- let NAMESPACE = HTML_NAMESPACE;
38354
- let IS_EMPTY_INPUT = false;
38355
-
38356
- /* Allowed XHTML+XML namespaces */
38357
- let ALLOWED_NAMESPACES = null;
38358
- const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
38359
-
38360
- /* Parsing of strict XHTML documents */
38361
- let PARSER_MEDIA_TYPE = null;
38362
- const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];
38363
- const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';
38364
- let transformCaseFunc = null;
38365
-
38366
- /* Keep a reference to config to pass to hooks */
38367
- let CONFIG = null;
38368
-
38369
- /* Ideally, do not touch anything below this line */
38370
- /* ______________________________________________ */
38371
-
38372
- const formElement = document.createElement('form');
38373
- const isRegexOrFunction = function isRegexOrFunction(testValue) {
38374
- return testValue instanceof RegExp || testValue instanceof Function;
38375
- };
38376
-
38377
- /**
38378
- * _parseConfig
38379
- *
38380
- * @param {Object} cfg optional config literal
38381
- */
38382
- // eslint-disable-next-line complexity
38383
- const _parseConfig = function _parseConfig() {
38384
- let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
38385
- if (CONFIG && CONFIG === cfg) {
38386
- return;
38387
- }
38388
-
38389
- /* Shield configuration object from tampering */
38390
- if (!cfg || typeof cfg !== 'object') {
38391
- cfg = {};
38392
- }
38393
-
38394
- /* Shield configuration object from prototype pollution */
38395
- cfg = clone(cfg);
38396
- PARSER_MEDIA_TYPE =
38397
- // eslint-disable-next-line unicorn/prefer-includes
38398
- SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
38399
-
38400
- // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.
38401
- transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;
38402
-
38403
- /* Set configuration parameters */
38404
- ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
38405
- ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
38406
- ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
38407
- URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),
38408
- // eslint-disable-line indent
38409
- cfg.ADD_URI_SAFE_ATTR,
38410
- // eslint-disable-line indent
38411
- transformCaseFunc // eslint-disable-line indent
38412
- ) // eslint-disable-line indent
38413
- : DEFAULT_URI_SAFE_ATTRIBUTES;
38414
- DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS),
38415
- // eslint-disable-line indent
38416
- cfg.ADD_DATA_URI_TAGS,
38417
- // eslint-disable-line indent
38418
- transformCaseFunc // eslint-disable-line indent
38419
- ) // eslint-disable-line indent
38420
- : DEFAULT_DATA_URI_TAGS;
38421
- FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
38422
- FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};
38423
- FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};
38424
- USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;
38425
- ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true
38426
- ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true
38427
- ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false
38428
- ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true
38429
- SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false
38430
- WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false
38431
- RETURN_DOM = cfg.RETURN_DOM || false; // Default false
38432
- RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false
38433
- RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false
38434
- FORCE_BODY = cfg.FORCE_BODY || false; // Default false
38435
- SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true
38436
- SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false
38437
- KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true
38438
- IN_PLACE = cfg.IN_PLACE || false; // Default false
38439
- IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;
38440
- NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
38441
- CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
38442
- if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
38443
- CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
38444
- }
38445
- if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {
38446
- CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
38447
- }
38448
- if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {
38449
- CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
38450
- }
38451
- if (SAFE_FOR_TEMPLATES) {
38452
- ALLOW_DATA_ATTR = false;
38453
- }
38454
- if (RETURN_DOM_FRAGMENT) {
38455
- RETURN_DOM = true;
38456
- }
38457
-
38458
- /* Parse profile info */
38459
- if (USE_PROFILES) {
38460
- ALLOWED_TAGS = addToSet({}, text);
38461
- ALLOWED_ATTR = [];
38462
- if (USE_PROFILES.html === true) {
38463
- addToSet(ALLOWED_TAGS, html$1);
38464
- addToSet(ALLOWED_ATTR, html);
38465
- }
38466
- if (USE_PROFILES.svg === true) {
38467
- addToSet(ALLOWED_TAGS, svg$1);
38468
- addToSet(ALLOWED_ATTR, svg);
38469
- addToSet(ALLOWED_ATTR, xml);
38470
- }
38471
- if (USE_PROFILES.svgFilters === true) {
38472
- addToSet(ALLOWED_TAGS, svgFilters);
38473
- addToSet(ALLOWED_ATTR, svg);
38474
- addToSet(ALLOWED_ATTR, xml);
38475
- }
38476
- if (USE_PROFILES.mathMl === true) {
38477
- addToSet(ALLOWED_TAGS, mathMl$1);
38478
- addToSet(ALLOWED_ATTR, mathMl);
38479
- addToSet(ALLOWED_ATTR, xml);
38480
- }
38481
- }
38482
-
38483
- /* Merge configuration parameters */
38484
- if (cfg.ADD_TAGS) {
38485
- if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
38486
- ALLOWED_TAGS = clone(ALLOWED_TAGS);
38487
- }
38488
- addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
38489
- }
38490
- if (cfg.ADD_ATTR) {
38491
- if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
38492
- ALLOWED_ATTR = clone(ALLOWED_ATTR);
38493
- }
38494
- addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
38495
- }
38496
- if (cfg.ADD_URI_SAFE_ATTR) {
38497
- addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
38498
- }
38499
- if (cfg.FORBID_CONTENTS) {
38500
- if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
38501
- FORBID_CONTENTS = clone(FORBID_CONTENTS);
38502
- }
38503
- addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
38504
- }
38505
-
38506
- /* Add #text in case KEEP_CONTENT is set to true */
38507
- if (KEEP_CONTENT) {
38508
- ALLOWED_TAGS['#text'] = true;
38509
- }
38510
-
38511
- /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */
38512
- if (WHOLE_DOCUMENT) {
38513
- addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);
38514
- }
38515
-
38516
- /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */
38517
- if (ALLOWED_TAGS.table) {
38518
- addToSet(ALLOWED_TAGS, ['tbody']);
38519
- delete FORBID_TAGS.tbody;
38520
- }
38521
- if (cfg.TRUSTED_TYPES_POLICY) {
38522
- if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {
38523
- throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
38524
- }
38525
- if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {
38526
- throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
38527
- }
38528
-
38529
- // Overwrite existing TrustedTypes policy.
38530
- trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
38531
-
38532
- // Sign local variables required by `sanitize`.
38533
- emptyHTML = trustedTypesPolicy.createHTML('');
38534
- } else {
38535
- // Uninitialized policy, attempt to initialize the internal dompurify policy.
38536
- if (trustedTypesPolicy === undefined) {
38537
- trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
38538
- }
38539
-
38540
- // If creating the internal policy succeeded sign internal variables.
38541
- if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {
38542
- emptyHTML = trustedTypesPolicy.createHTML('');
38543
- }
38544
- }
38545
-
38546
- // Prevent further manipulation of configuration.
38547
- // Not available in IE8, Safari 5, etc.
38548
- if (freeze) {
38549
- freeze(cfg);
38550
- }
38551
- CONFIG = cfg;
38552
- };
38553
- const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);
38554
- const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']);
38555
-
38556
- // Certain elements are allowed in both SVG and HTML
38557
- // namespace. We need to specify them explicitly
38558
- // so that they don't get erroneously deleted from
38559
- // HTML namespace.
38560
- const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);
38561
-
38562
- /* Keep track of all possible SVG and MathML tags
38563
- * so that we can perform the namespace checks
38564
- * correctly. */
38565
- const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);
38566
- const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
38567
-
38568
- /**
38569
- * @param {Element} element a DOM element whose namespace is being checked
38570
- * @returns {boolean} Return false if the element has a
38571
- * namespace that a spec-compliant parser would never
38572
- * return. Return true otherwise.
38573
- */
38574
- const _checkValidNamespace = function _checkValidNamespace(element) {
38575
- let parent = getParentNode(element);
38576
-
38577
- // In JSDOM, if we're inside shadow DOM, then parentNode
38578
- // can be null. We just simulate parent in this case.
38579
- if (!parent || !parent.tagName) {
38580
- parent = {
38581
- namespaceURI: NAMESPACE,
38582
- tagName: 'template'
38583
- };
38584
- }
38585
- const tagName = stringToLowerCase(element.tagName);
38586
- const parentTagName = stringToLowerCase(parent.tagName);
38587
- if (!ALLOWED_NAMESPACES[element.namespaceURI]) {
38588
- return false;
38589
- }
38590
- if (element.namespaceURI === SVG_NAMESPACE) {
38591
- // The only way to switch from HTML namespace to SVG
38592
- // is via <svg>. If it happens via any other tag, then
38593
- // it should be killed.
38594
- if (parent.namespaceURI === HTML_NAMESPACE) {
38595
- return tagName === 'svg';
38596
- }
38597
-
38598
- // The only way to switch from MathML to SVG is via`
38599
- // svg if parent is either <annotation-xml> or MathML
38600
- // text integration points.
38601
- if (parent.namespaceURI === MATHML_NAMESPACE) {
38602
- return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
38603
- }
38604
-
38605
- // We only allow elements that are defined in SVG
38606
- // spec. All others are disallowed in SVG namespace.
38607
- return Boolean(ALL_SVG_TAGS[tagName]);
38608
- }
38609
- if (element.namespaceURI === MATHML_NAMESPACE) {
38610
- // The only way to switch from HTML namespace to MathML
38611
- // is via <math>. If it happens via any other tag, then
38612
- // it should be killed.
38613
- if (parent.namespaceURI === HTML_NAMESPACE) {
38614
- return tagName === 'math';
38615
- }
38616
-
38617
- // The only way to switch from SVG to MathML is via
38618
- // <math> and HTML integration points
38619
- if (parent.namespaceURI === SVG_NAMESPACE) {
38620
- return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];
38621
- }
38622
-
38623
- // We only allow elements that are defined in MathML
38624
- // spec. All others are disallowed in MathML namespace.
38625
- return Boolean(ALL_MATHML_TAGS[tagName]);
38626
- }
38627
- if (element.namespaceURI === HTML_NAMESPACE) {
38628
- // The only way to switch from SVG to HTML is via
38629
- // HTML integration points, and from MathML to HTML
38630
- // is via MathML text integration points
38631
- if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
38632
- return false;
38633
- }
38634
- if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
38635
- return false;
38636
- }
38637
-
38638
- // We disallow tags that are specific for MathML
38639
- // or SVG and should never appear in HTML namespace
38640
- return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
38641
- }
38642
-
38643
- // For XHTML and XML documents that support custom namespaces
38644
- if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {
38645
- return true;
38646
- }
38647
-
38648
- // The code should never reach this place (this means
38649
- // that the element somehow got namespace that is not
38650
- // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).
38651
- // Return false just in case.
38652
- return false;
38653
- };
38654
-
38655
- /**
38656
- * _forceRemove
38657
- *
38658
- * @param {Node} node a DOM node
38659
- */
38660
- const _forceRemove = function _forceRemove(node) {
38661
- arrayPush(DOMPurify.removed, {
38662
- element: node
38663
- });
38664
- try {
38665
- // eslint-disable-next-line unicorn/prefer-dom-node-remove
38666
- node.parentNode.removeChild(node);
38667
- } catch (_) {
38668
- node.remove();
38669
- }
38670
- };
38671
-
38672
- /**
38673
- * _removeAttribute
38674
- *
38675
- * @param {String} name an Attribute name
38676
- * @param {Node} node a DOM node
38677
- */
38678
- const _removeAttribute = function _removeAttribute(name, node) {
38679
- try {
38680
- arrayPush(DOMPurify.removed, {
38681
- attribute: node.getAttributeNode(name),
38682
- from: node
38683
- });
38684
- } catch (_) {
38685
- arrayPush(DOMPurify.removed, {
38686
- attribute: null,
38687
- from: node
38688
- });
38689
- }
38690
- node.removeAttribute(name);
38691
-
38692
- // We void attribute values for unremovable "is"" attributes
38693
- if (name === 'is' && !ALLOWED_ATTR[name]) {
38694
- if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
38695
- try {
38696
- _forceRemove(node);
38697
- } catch (_) {}
38698
- } else {
38699
- try {
38700
- node.setAttribute(name, '');
38701
- } catch (_) {}
38702
- }
38703
- }
38704
- };
38705
-
38706
- /**
38707
- * _initDocument
38708
- *
38709
- * @param {String} dirty a string of dirty markup
38710
- * @return {Document} a DOM, filled with the dirty markup
38711
- */
38712
- const _initDocument = function _initDocument(dirty) {
38713
- /* Create a HTML document */
38714
- let doc = null;
38715
- let leadingWhitespace = null;
38716
- if (FORCE_BODY) {
38717
- dirty = '<remove></remove>' + dirty;
38718
- } else {
38719
- /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */
38720
- const matches = stringMatch(dirty, /^[\r\n\t ]+/);
38721
- leadingWhitespace = matches && matches[0];
38722
- }
38723
- if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {
38724
- // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)
38725
- dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + '</body></html>';
38726
- }
38727
- const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
38728
- /*
38729
- * Use the DOMParser API by default, fallback later if needs be
38730
- * DOMParser not work for svg when has multiple root element.
38731
- */
38732
- if (NAMESPACE === HTML_NAMESPACE) {
38733
- try {
38734
- doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
38735
- } catch (_) {}
38736
- }
38737
-
38738
- /* Use createHTMLDocument in case DOMParser is not available */
38739
- if (!doc || !doc.documentElement) {
38740
- doc = implementation.createDocument(NAMESPACE, 'template', null);
38741
- try {
38742
- doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
38743
- } catch (_) {
38744
- // Syntax error if dirtyPayload is invalid xml
38745
- }
38746
- }
38747
- const body = doc.body || doc.documentElement;
38748
- if (dirty && leadingWhitespace) {
38749
- body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
38750
- }
38751
-
38752
- /* Work on whole document or just its body */
38753
- if (NAMESPACE === HTML_NAMESPACE) {
38754
- return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];
38755
- }
38756
- return WHOLE_DOCUMENT ? doc.documentElement : body;
38757
- };
38758
-
38759
- /**
38760
- * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
38761
- *
38762
- * @param {Node} root The root element or node to start traversing on.
38763
- * @return {NodeIterator} The created NodeIterator
38764
- */
38765
- const _createNodeIterator = function _createNodeIterator(root) {
38766
- return createNodeIterator.call(root.ownerDocument || root, root,
38767
- // eslint-disable-next-line no-bitwise
38768
- NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null);
38769
- };
38770
-
38771
- /**
38772
- * _isClobbered
38773
- *
38774
- * @param {Node} elm element to check for clobbering attacks
38775
- * @return {Boolean} true if clobbered, false if safe
38776
- */
38777
- const _isClobbered = function _isClobbered(elm) {
38778
- return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');
38779
- };
38780
-
38781
- /**
38782
- * Checks whether the given object is a DOM node.
38783
- *
38784
- * @param {Node} object object to check whether it's a DOM node
38785
- * @return {Boolean} true is object is a DOM node
38786
- */
38787
- const _isNode = function _isNode(object) {
38788
- return typeof Node === 'function' && object instanceof Node;
38789
- };
38790
-
38791
- /**
38792
- * _executeHook
38793
- * Execute user configurable hooks
38794
- *
38795
- * @param {String} entryPoint Name of the hook's entry point
38796
- * @param {Node} currentNode node to work on with the hook
38797
- * @param {Object} data additional hook parameters
38798
- */
38799
- const _executeHook = function _executeHook(entryPoint, currentNode, data) {
38800
- if (!hooks[entryPoint]) {
38801
- return;
38802
- }
38803
- arrayForEach(hooks[entryPoint], hook => {
38804
- hook.call(DOMPurify, currentNode, data, CONFIG);
38805
- });
38806
- };
38807
-
38808
- /**
38809
- * _sanitizeElements
38810
- *
38811
- * @protect nodeName
38812
- * @protect textContent
38813
- * @protect removeChild
38814
- *
38815
- * @param {Node} currentNode to check for permission to exist
38816
- * @return {Boolean} true if node was killed, false if left alive
38817
- */
38818
- const _sanitizeElements = function _sanitizeElements(currentNode) {
38819
- let content = null;
38820
-
38821
- /* Execute a hook if present */
38822
- _executeHook('beforeSanitizeElements', currentNode, null);
38823
-
38824
- /* Check if element is clobbered or can clobber */
38825
- if (_isClobbered(currentNode)) {
38826
- _forceRemove(currentNode);
38827
- return true;
38828
- }
38829
-
38830
- /* Now let's check the element's type and name */
38831
- const tagName = transformCaseFunc(currentNode.nodeName);
38832
-
38833
- /* Execute a hook if present */
38834
- _executeHook('uponSanitizeElement', currentNode, {
38835
- tagName,
38836
- allowedTags: ALLOWED_TAGS
38837
- });
38838
-
38839
- /* Detect mXSS attempts abusing namespace confusion */
38840
- if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
38841
- _forceRemove(currentNode);
38842
- return true;
38843
- }
38844
-
38845
- /* Remove element if anything forbids its presence */
38846
- if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
38847
- /* Check if we have a custom element to handle */
38848
- if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
38849
- if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
38850
- return false;
38851
- }
38852
- if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {
38853
- return false;
38854
- }
38855
- }
38856
-
38857
- /* Keep content except for bad-listed elements */
38858
- if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
38859
- const parentNode = getParentNode(currentNode) || currentNode.parentNode;
38860
- const childNodes = getChildNodes(currentNode) || currentNode.childNodes;
38861
- if (childNodes && parentNode) {
38862
- const childCount = childNodes.length;
38863
- for (let i = childCount - 1; i >= 0; --i) {
38864
- parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));
38865
- }
38866
- }
38867
- }
38868
- _forceRemove(currentNode);
38869
- return true;
38870
- }
38871
-
38872
- /* Check whether element has a valid namespace */
38873
- if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
38874
- _forceRemove(currentNode);
38875
- return true;
38876
- }
38877
-
38878
- /* Make sure that older browsers don't get fallback-tag mXSS */
38879
- if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
38880
- _forceRemove(currentNode);
38881
- return true;
38882
- }
38883
-
38884
- /* Sanitize element content to be template-safe */
38885
- if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
38886
- /* Get the element's text content */
38887
- content = currentNode.textContent;
38888
- arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
38889
- content = stringReplace(content, expr, ' ');
38890
- });
38891
- if (currentNode.textContent !== content) {
38892
- arrayPush(DOMPurify.removed, {
38893
- element: currentNode.cloneNode()
38894
- });
38895
- currentNode.textContent = content;
38896
- }
38897
- }
38898
-
38899
- /* Execute a hook if present */
38900
- _executeHook('afterSanitizeElements', currentNode, null);
38901
- return false;
38902
- };
38903
-
38904
- /**
38905
- * _isValidAttribute
38906
- *
38907
- * @param {string} lcTag Lowercase tag name of containing element.
38908
- * @param {string} lcName Lowercase attribute name.
38909
- * @param {string} value Attribute value.
38910
- * @return {Boolean} Returns true if `value` is valid, otherwise false.
38911
- */
38912
- // eslint-disable-next-line complexity
38913
- const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
38914
- /* Make sure attribute cannot clobber */
38915
- if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
38916
- return false;
38917
- }
38918
-
38919
- /* Allow valid data-* attributes: At least one character after "-"
38920
- (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
38921
- XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
38922
- We don't need to check the value; it's always URI safe. */
38923
- if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
38924
- if (
38925
- // First condition does a very basic check if a) it's basically a valid custom element tagname AND
38926
- // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
38927
- // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
38928
- _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||
38929
- // Alternative, second condition checks if it's an `is`-attribute, AND
38930
- // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
38931
- lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {
38932
- return false;
38933
- }
38934
- /* Check value is safe. First, is attr inert? If so, is safe */
38935
- } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {
38936
- return false;
38937
- } else ;
38938
- return true;
38939
- };
38940
-
38941
- /**
38942
- * _isBasicCustomElement
38943
- * checks if at least one dash is included in tagName, and it's not the first char
38944
- * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
38945
- *
38946
- * @param {string} tagName name of the tag of the node to sanitize
38947
- * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
38948
- */
38949
- const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
38950
- return tagName.indexOf('-') > 0;
38951
- };
38952
-
38953
- /**
38954
- * _sanitizeAttributes
38955
- *
38956
- * @protect attributes
38957
- * @protect nodeName
38958
- * @protect removeAttribute
38959
- * @protect setAttribute
38960
- *
38961
- * @param {Node} currentNode to sanitize
38962
- */
38963
- const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
38964
- /* Execute a hook if present */
38965
- _executeHook('beforeSanitizeAttributes', currentNode, null);
38966
- const {
38967
- attributes
38968
- } = currentNode;
38969
-
38970
- /* Check if we have attributes; if not we might have a text node */
38971
- if (!attributes) {
38972
- return;
38973
- }
38974
- const hookEvent = {
38975
- attrName: '',
38976
- attrValue: '',
38977
- keepAttr: true,
38978
- allowedAttributes: ALLOWED_ATTR
38979
- };
38980
- let l = attributes.length;
38981
-
38982
- /* Go backwards over all attributes; safely remove bad ones */
38983
- while (l--) {
38984
- const attr = attributes[l];
38985
- const {
38986
- name,
38987
- namespaceURI,
38988
- value: attrValue
38989
- } = attr;
38990
- const lcName = transformCaseFunc(name);
38991
- let value = name === 'value' ? attrValue : stringTrim(attrValue);
38992
-
38993
- /* Execute a hook if present */
38994
- hookEvent.attrName = lcName;
38995
- hookEvent.attrValue = value;
38996
- hookEvent.keepAttr = true;
38997
- hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set
38998
- _executeHook('uponSanitizeAttribute', currentNode, hookEvent);
38999
- value = hookEvent.attrValue;
39000
- /* Did the hooks approve of the attribute? */
39001
- if (hookEvent.forceKeepAttr) {
39002
- continue;
39003
- }
39004
-
39005
- /* Remove attribute */
39006
- _removeAttribute(name, currentNode);
39007
-
39008
- /* Did the hooks approve of the attribute? */
39009
- if (!hookEvent.keepAttr) {
39010
- continue;
39011
- }
39012
-
39013
- /* Work around a security issue in jQuery 3.0 */
39014
- if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) {
39015
- _removeAttribute(name, currentNode);
39016
- continue;
39017
- }
39018
-
39019
- /* Sanitize attribute content to be template-safe */
39020
- if (SAFE_FOR_TEMPLATES) {
39021
- arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
39022
- value = stringReplace(value, expr, ' ');
39023
- });
39024
- }
39025
-
39026
- /* Is `value` valid for this attribute? */
39027
- const lcTag = transformCaseFunc(currentNode.nodeName);
39028
- if (!_isValidAttribute(lcTag, lcName, value)) {
39029
- continue;
39030
- }
39031
-
39032
- /* Full DOM Clobbering protection via namespace isolation,
39033
- * Prefix id and name attributes with `user-content-`
39034
- */
39035
- if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {
39036
- // Remove the attribute with this value
39037
- _removeAttribute(name, currentNode);
39038
-
39039
- // Prefix the value and later re-create the attribute with the sanitized value
39040
- value = SANITIZE_NAMED_PROPS_PREFIX + value;
39041
- }
39042
-
39043
- /* Handle attributes that require Trusted Types */
39044
- if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {
39045
- if (namespaceURI) ; else {
39046
- switch (trustedTypes.getAttributeType(lcTag, lcName)) {
39047
- case 'TrustedHTML':
39048
- {
39049
- value = trustedTypesPolicy.createHTML(value);
39050
- break;
39051
- }
39052
- case 'TrustedScriptURL':
39053
- {
39054
- value = trustedTypesPolicy.createScriptURL(value);
39055
- break;
39056
- }
39057
- }
39058
- }
39059
- }
39060
-
39061
- /* Handle invalid data-* attribute set by try-catching it */
39062
- try {
39063
- if (namespaceURI) {
39064
- currentNode.setAttributeNS(namespaceURI, name, value);
39065
- } else {
39066
- /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */
39067
- currentNode.setAttribute(name, value);
39068
- }
39069
- arrayPop(DOMPurify.removed);
39070
- } catch (_) {}
39071
- }
39072
-
39073
- /* Execute a hook if present */
39074
- _executeHook('afterSanitizeAttributes', currentNode, null);
39075
- };
39076
-
39077
- /**
39078
- * _sanitizeShadowDOM
39079
- *
39080
- * @param {DocumentFragment} fragment to iterate over recursively
39081
- */
39082
- const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
39083
- let shadowNode = null;
39084
- const shadowIterator = _createNodeIterator(fragment);
39085
-
39086
- /* Execute a hook if present */
39087
- _executeHook('beforeSanitizeShadowDOM', fragment, null);
39088
- while (shadowNode = shadowIterator.nextNode()) {
39089
- /* Execute a hook if present */
39090
- _executeHook('uponSanitizeShadowNode', shadowNode, null);
39091
-
39092
- /* Sanitize tags and elements */
39093
- if (_sanitizeElements(shadowNode)) {
39094
- continue;
39095
- }
39096
-
39097
- /* Deep shadow DOM detected */
39098
- if (shadowNode.content instanceof DocumentFragment) {
39099
- _sanitizeShadowDOM(shadowNode.content);
39100
- }
39101
-
39102
- /* Check attributes, sanitize if necessary */
39103
- _sanitizeAttributes(shadowNode);
39104
- }
39105
-
39106
- /* Execute a hook if present */
39107
- _executeHook('afterSanitizeShadowDOM', fragment, null);
39108
- };
39109
-
39110
- /**
39111
- * Sanitize
39112
- * Public method providing core sanitation functionality
39113
- *
39114
- * @param {String|Node} dirty string or DOM node
39115
- * @param {Object} cfg object
39116
- */
39117
- // eslint-disable-next-line complexity
39118
- DOMPurify.sanitize = function (dirty) {
39119
- let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
39120
- let body = null;
39121
- let importedNode = null;
39122
- let currentNode = null;
39123
- let returnNode = null;
39124
- /* Make sure we have a string to sanitize.
39125
- DO NOT return early, as this will return the wrong type if
39126
- the user has requested a DOM object rather than a string */
39127
- IS_EMPTY_INPUT = !dirty;
39128
- if (IS_EMPTY_INPUT) {
39129
- dirty = '<!-->';
39130
- }
39131
-
39132
- /* Stringify, in case dirty is an object */
39133
- if (typeof dirty !== 'string' && !_isNode(dirty)) {
39134
- if (typeof dirty.toString === 'function') {
39135
- dirty = dirty.toString();
39136
- if (typeof dirty !== 'string') {
39137
- throw typeErrorCreate('dirty is not a string, aborting');
39138
- }
39139
- } else {
39140
- throw typeErrorCreate('toString is not a function');
39141
- }
39142
- }
39143
-
39144
- /* Return dirty HTML if DOMPurify cannot run */
39145
- if (!DOMPurify.isSupported) {
39146
- return dirty;
39147
- }
39148
-
39149
- /* Assign config vars */
39150
- if (!SET_CONFIG) {
39151
- _parseConfig(cfg);
39152
- }
39153
-
39154
- /* Clean up removed elements */
39155
- DOMPurify.removed = [];
39156
-
39157
- /* Check if dirty is correctly typed for IN_PLACE */
39158
- if (typeof dirty === 'string') {
39159
- IN_PLACE = false;
39160
- }
39161
- if (IN_PLACE) {
39162
- /* Do some early pre-sanitization to avoid unsafe root nodes */
39163
- if (dirty.nodeName) {
39164
- const tagName = transformCaseFunc(dirty.nodeName);
39165
- if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
39166
- throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');
39167
- }
39168
- }
39169
- } else if (dirty instanceof Node) {
39170
- /* If dirty is a DOM element, append to an empty document to avoid
39171
- elements being stripped by the parser */
39172
- body = _initDocument('<!---->');
39173
- importedNode = body.ownerDocument.importNode(dirty, true);
39174
- if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {
39175
- /* Node is already a body, use as is */
39176
- body = importedNode;
39177
- } else if (importedNode.nodeName === 'HTML') {
39178
- body = importedNode;
39179
- } else {
39180
- // eslint-disable-next-line unicorn/prefer-dom-node-append
39181
- body.appendChild(importedNode);
39182
- }
39183
- } else {
39184
- /* Exit directly if we have nothing to do */
39185
- if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&
39186
- // eslint-disable-next-line unicorn/prefer-includes
39187
- dirty.indexOf('<') === -1) {
39188
- return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
39189
- }
39190
-
39191
- /* Initialize the document to work on */
39192
- body = _initDocument(dirty);
39193
-
39194
- /* Check we have a DOM node from the data */
39195
- if (!body) {
39196
- return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';
39197
- }
39198
- }
39199
-
39200
- /* Remove first element node (ours) if FORCE_BODY is set */
39201
- if (body && FORCE_BODY) {
39202
- _forceRemove(body.firstChild);
39203
- }
39204
-
39205
- /* Get node iterator */
39206
- const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
39207
-
39208
- /* Now start iterating over the created document */
39209
- while (currentNode = nodeIterator.nextNode()) {
39210
- /* Sanitize tags and elements */
39211
- if (_sanitizeElements(currentNode)) {
39212
- continue;
39213
- }
39214
-
39215
- /* Shadow DOM detected, sanitize it */
39216
- if (currentNode.content instanceof DocumentFragment) {
39217
- _sanitizeShadowDOM(currentNode.content);
39218
- }
39219
-
39220
- /* Check attributes, sanitize if necessary */
39221
- _sanitizeAttributes(currentNode);
39222
- }
39223
-
39224
- /* If we sanitized `dirty` in-place, return it. */
39225
- if (IN_PLACE) {
39226
- return dirty;
39227
- }
39228
-
39229
- /* Return sanitized string or DOM */
39230
- if (RETURN_DOM) {
39231
- if (RETURN_DOM_FRAGMENT) {
39232
- returnNode = createDocumentFragment.call(body.ownerDocument);
39233
- while (body.firstChild) {
39234
- // eslint-disable-next-line unicorn/prefer-dom-node-append
39235
- returnNode.appendChild(body.firstChild);
39236
- }
39237
- } else {
39238
- returnNode = body;
39239
- }
39240
- if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {
39241
- /*
39242
- AdoptNode() is not used because internal state is not reset
39243
- (e.g. the past names map of a HTMLFormElement), this is safe
39244
- in theory but we would rather not risk another attack vector.
39245
- The state that is cloned by importNode() is explicitly defined
39246
- by the specs.
39247
- */
39248
- returnNode = importNode.call(originalDocument, returnNode, true);
39249
- }
39250
- return returnNode;
39251
- }
39252
- let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
39253
-
39254
- /* Serialize doctype if allowed */
39255
- if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
39256
- serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\n' + serializedHTML;
39257
- }
39258
-
39259
- /* Sanitize final string template-safe */
39260
- if (SAFE_FOR_TEMPLATES) {
39261
- arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
39262
- serializedHTML = stringReplace(serializedHTML, expr, ' ');
39263
- });
39264
- }
39265
- return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
39266
- };
39267
-
39268
- /**
39269
- * Public method to set the configuration once
39270
- * setConfig
39271
- *
39272
- * @param {Object} cfg configuration object
39273
- */
39274
- DOMPurify.setConfig = function () {
39275
- let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
39276
- _parseConfig(cfg);
39277
- SET_CONFIG = true;
39278
- };
39279
-
39280
- /**
39281
- * Public method to remove the configuration
39282
- * clearConfig
39283
- *
39284
- */
39285
- DOMPurify.clearConfig = function () {
39286
- CONFIG = null;
39287
- SET_CONFIG = false;
39288
- };
39289
-
39290
- /**
39291
- * Public method to check if an attribute value is valid.
39292
- * Uses last set config, if any. Otherwise, uses config defaults.
39293
- * isValidAttribute
39294
- *
39295
- * @param {String} tag Tag name of containing element.
39296
- * @param {String} attr Attribute name.
39297
- * @param {String} value Attribute value.
39298
- * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.
39299
- */
39300
- DOMPurify.isValidAttribute = function (tag, attr, value) {
39301
- /* Initialize shared config vars if necessary. */
39302
- if (!CONFIG) {
39303
- _parseConfig({});
39304
- }
39305
- const lcTag = transformCaseFunc(tag);
39306
- const lcName = transformCaseFunc(attr);
39307
- return _isValidAttribute(lcTag, lcName, value);
39308
- };
39309
-
39310
- /**
39311
- * AddHook
39312
- * Public method to add DOMPurify hooks
39313
- *
39314
- * @param {String} entryPoint entry point for the hook to add
39315
- * @param {Function} hookFunction function to execute
39316
- */
39317
- DOMPurify.addHook = function (entryPoint, hookFunction) {
39318
- if (typeof hookFunction !== 'function') {
39319
- return;
39320
- }
39321
- hooks[entryPoint] = hooks[entryPoint] || [];
39322
- arrayPush(hooks[entryPoint], hookFunction);
39323
- };
39324
-
39325
- /**
39326
- * RemoveHook
39327
- * Public method to remove a DOMPurify hook at a given entryPoint
39328
- * (pops it from the stack of hooks if more are present)
39329
- *
39330
- * @param {String} entryPoint entry point for the hook to remove
39331
- * @return {Function} removed(popped) hook
39332
- */
39333
- DOMPurify.removeHook = function (entryPoint) {
39334
- if (hooks[entryPoint]) {
39335
- return arrayPop(hooks[entryPoint]);
39336
- }
39337
- };
39338
-
39339
- /**
39340
- * RemoveHooks
39341
- * Public method to remove all DOMPurify hooks at a given entryPoint
39342
- *
39343
- * @param {String} entryPoint entry point for the hooks to remove
39344
- */
39345
- DOMPurify.removeHooks = function (entryPoint) {
39346
- if (hooks[entryPoint]) {
39347
- hooks[entryPoint] = [];
39348
- }
39349
- };
39350
-
39351
- /**
39352
- * RemoveAllHooks
39353
- * Public method to remove all DOMPurify hooks
39354
- */
39355
- DOMPurify.removeAllHooks = function () {
39356
- hooks = {};
39357
- };
39358
- return DOMPurify;
39359
- }
39360
- var purify = createDOMPurify();
39361
-
39362
- return purify;
39363
-
39364
- }));
39365
- //# sourceMappingURL=purify.js.map
39366
-
39367
-
39368
37996
  /***/ }),
39369
37997
 
39370
37998
  /***/ 3462: