@inboxsdk/core 0.2.29-aplha.3 → 1.0.0

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 (30) hide show
  1. package/inboxsdk.js +35 -35
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +2 -1
  4. package/src/inboxsdk.d.ts +3 -0
  5. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts.map +1 -1
  6. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.js +3 -4
  7. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts +1 -1
  8. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts.map +1 -1
  9. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.js +13 -2
  10. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.d.ts +3 -0
  11. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.d.ts.map +1 -0
  12. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +42 -43
  13. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts +5 -0
  14. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts.map +1 -1
  15. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.js +10 -0
  16. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts +6 -1
  17. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts.map +1 -1
  18. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.js +33 -21
  19. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +3 -0
  20. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts.map +1 -1
  21. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.js +8 -2
  22. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts +5 -12
  23. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts.map +1 -1
  24. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.js +29 -18
  25. package/src/platform-implementation-js/namespaces/app-menu.d.ts +14 -5
  26. package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +1 -1
  27. package/src/platform-implementation-js/views/app-menu-item-view.d.ts.map +1 -1
  28. package/src/platform-implementation-js/views/app-menu-item-view.js +53 -6
  29. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts.map +1 -1
  30. package/src/platform-implementation-js/views/collapsible-panel-view.js +70 -23
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inboxsdk/core",
3
- "version": "0.2.29-aplha.3",
3
+ "version": "1.0.0",
4
4
  "description": "Library for building browser extensions for Gmail",
5
5
  "main": "inboxsdk.js",
6
6
  "author": "Streak",
@@ -31,6 +31,7 @@
31
31
  "@types/kefir": "^3.8.6",
32
32
  "@types/node": "*",
33
33
  "asap": "^2.0.3",
34
+ "fast-deep-equal": "^3.1.3",
34
35
  "kefir-cast": "^3.3.0",
35
36
  "sha.js": "^2.4.0",
36
37
  "tag-tree": "^1.0.0",
package/src/inboxsdk.d.ts CHANGED
@@ -106,6 +106,9 @@ export interface ButterBar {
106
106
  // export interface DropdownButtonAccessoryDescriptor {}
107
107
 
108
108
  export { AppMenu };
109
+ export type { AppMenuItemView } from './platform-implementation-js/views/app-menu-item-view';
110
+ export type { AppMenuItemPanelDescriptor } from './platform-implementation-js/namespaces/app-menu';
111
+ export type { CollapsiblePanelView } from './platform-implementation-js/views/collapsible-panel-view';
109
112
 
110
113
  export interface NativeNavItemView extends EventEmitter {
111
114
  addNavItem(descriptor: NavItemDescriptor): NavItemView;
@@ -1 +1 @@
1
- {"version":3,"file":"add-app-menu-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAI1C,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,kBAAkB,EAAE,qBAAqB,6CAuB1C"}
1
+ {"version":3,"file":"add-app-menu-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAI1C,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,kBAAkB,EAAE,qBAAqB,6CAyB1C"}
@@ -3,12 +3,11 @@ import GmailElementGetter from '../gmail-element-getter';
3
3
  import Logger from '../../../lib/logger';
4
4
  export async function addAppMenuItem(driver, menuItemDescriptor) {
5
5
  const appMenuInjectionContainer = await GmailElementGetter.getAppMenuAsync();
6
- const gmailAppMenuItemView = new GmailAppMenuItemView(driver);
7
- gmailAppMenuItemView.setMenuItemDescriptor(menuItemDescriptor);
6
+ const gmailAppMenuItemView = new GmailAppMenuItemView(driver, menuItemDescriptor);
8
7
  try {
9
- if (!appMenuInjectionContainer || !gmailAppMenuItemView.element)
8
+ if (!appMenuInjectionContainer)
10
9
  return;
11
- const siblingElement = menuItemDescriptor.insertIndex
10
+ const siblingElement = Number.isInteger(menuItemDescriptor.insertIndex)
12
11
  ? appMenuInjectionContainer.childNodes[menuItemDescriptor.insertIndex] ??
13
12
  null
14
13
  : null;
@@ -1,5 +1,5 @@
1
1
  import { AppMenuItemPanelDescriptor } from '../../../namespaces/app-menu';
2
2
  import { CollapsiblePanelView } from '../../../views/collapsible-panel-view';
3
3
  import GmailDriver from '../gmail-driver';
4
- export declare function addCollapsiblePanel(driver: GmailDriver, panelDescriptor: AppMenuItemPanelDescriptor): Promise<CollapsiblePanelView | undefined>;
4
+ export declare function addCollapsiblePanel(driver: GmailDriver, panelDescriptor: AppMenuItemPanelDescriptor, insertIndex?: number): Promise<CollapsiblePanelView | undefined>;
5
5
  //# sourceMappingURL=add-collapsible-panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-collapsible-panel.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAI1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,0BAA0B,6CAkB5C"}
1
+ {"version":3,"file":"add-collapsible-panel.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAI1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,0BAA0B,EAC3C,WAAW,CAAC,EAAE,MAAM,6CAmCrB"}
@@ -3,7 +3,7 @@ import GmailElementGetter from '../gmail-element-getter';
3
3
  import waitFor from '../../../lib/wait-for';
4
4
  import Logger from '../../../lib/logger';
5
5
  import { CollapsiblePanelView } from '../../../views/collapsible-panel-view';
6
- export async function addCollapsiblePanel(driver, panelDescriptor) {
6
+ export async function addCollapsiblePanel(driver, panelDescriptor, insertIndex) {
7
7
  const injectionContainer = await waitForAppMenuParentReady();
8
8
  const collapsiblePanelView = new CollapsiblePanelView(driver, panelDescriptor);
9
9
  if (!injectionContainer || !collapsiblePanelView.element)
@@ -11,7 +11,18 @@ export async function addCollapsiblePanel(driver, panelDescriptor) {
11
11
  const appMenu = await GmailElementGetter.getAppMenuAsync();
12
12
  if (!appMenu)
13
13
  return;
14
- appMenu.insertAdjacentElement('afterend', collapsiblePanelView.element);
14
+ const panelNodes = injectionContainer.querySelectorAll(CollapsiblePanelView.elementSelectors.NATIVE) ?? [];
15
+ const siblingElement = Number.isInteger(insertIndex)
16
+ ? panelNodes[insertIndex] ?? null
17
+ : null;
18
+ if (siblingElement) {
19
+ siblingElement.insertAdjacentElement('beforebegin', collapsiblePanelView.element);
20
+ }
21
+ else {
22
+ [...panelNodes]
23
+ .at(-1)
24
+ ?.insertAdjacentElement('afterend', collapsiblePanelView.element);
25
+ }
15
26
  return collapsiblePanelView;
16
27
  }
17
28
  const waitForAppMenuParentReady = once(async () => {
@@ -0,0 +1,3 @@
1
+ import type GmailDriver from '../gmail-driver';
2
+ export default function gmailLoadEvent(driver: GmailDriver): Promise<void>;
3
+ //# sourceMappingURL=gmail-load-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail-load-event.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAO/C,wBAA8B,cAAc,CAAC,MAAM,EAAE,WAAW,iBA2C/D"}
@@ -1,43 +1,42 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = gmailLoadEvent;
8
- var _gmailElementGetter = _interopRequireDefault(require("../gmail-element-getter"));
9
- var _isIntegratedViewGmail = _interopRequireDefault(require("./isIntegratedViewGmail"));
10
- var _addNavItem = require("./add-nav-item");
11
- async function gmailLoadEvent(driver) {
12
- const pageCommunicator = driver.getPageCommunicator();
13
- const isConversationViewDisabled = await pageCommunicator.isConversationViewDisabled();
14
- await (0, _addNavItem.waitForMenuReady)();
15
- driver.getLogger().eventSite('gmailSettings', {
16
- isGmailIntegratedView: (0, _isIntegratedViewGmail.default)(),
17
- screenWidth: window.screen && window.screen.width,
18
- screenHeight: window.screen && window.screen.height,
19
- windowWidth: window.innerWidth,
20
- windowHeight: window.innerHeight,
21
- language: pageCommunicator.getUserLanguage(),
22
- isUsingSyncAPI: pageCommunicator.isUsingSyncAPI(),
23
- previewPane: pageCommunicator.getUserOriginalPreviewPaneMode(),
24
- isConversationViewDisabled,
25
- wasAccountSwitcherReadyAtStart: driver.getEnvData().wasAccountSwitcherReadyAtStart,
26
- timings: Object.assign({
27
- responseStart: global.performance && global.performance.timing.responseStart,
28
- responseEnd: global.performance && global.performance.timing.responseEnd,
29
- domLoading: global.performance && global.performance.timing.domLoading,
30
- domInteractive: global.performance && global.performance.timing.domInteractive,
31
- domComplete: global.performance && global.performance.timing.domComplete,
32
- domContentLoadedEventStart: global.performance && global.performance.timing.domContentLoadedEventStart,
33
- domContentLoadedEventEnd: global.performance && global.performance.timing.domContentLoadedEventEnd,
34
- domainLookupEnd: global.performance && global.performance.timing.domainLookupEnd,
35
- domainLookupStart: global.performance && global.performance.timing.domainLookupStart,
36
- fetchStart: global.performance && global.performance.timing.fetchStart,
37
- loadEventStart: global.performance && global.performance.timing.loadEventStart,
38
- loadEventEnd: global.performance && global.performance.timing.loadEventEnd,
39
- navigationStart: global.performance && global.performance.timing.navigationStart,
40
- requestStart: global.performance && global.performance.timing.requestStart
41
- }, driver.getTimings())
42
- });
43
- }
1
+ /* @flow */
2
+ import isIntegratedViewGmail, { isCollapsiblePanelHidden, } from './isIntegratedViewGmail';
3
+ import { waitForMenuReady } from './add-nav-item';
4
+ import { isDarkTheme } from './track-gmail-styles';
5
+ export default async function gmailLoadEvent(driver) {
6
+ const pageCommunicator = driver.getPageCommunicator();
7
+ const isConversationViewDisabled = await pageCommunicator.isConversationViewDisabled();
8
+ await waitForMenuReady();
9
+ driver.getLogger().eventSite('gmailSettings', {
10
+ isGmailIntegratedView: isIntegratedViewGmail(),
11
+ isCollapsiblePanelHidden: isCollapsiblePanelHidden(),
12
+ isDarkTheme: isDarkTheme(),
13
+ screenWidth: window.screen?.width,
14
+ screenHeight: window.screen?.height,
15
+ windowWidth: window.innerWidth,
16
+ windowHeight: window.innerHeight,
17
+ language: pageCommunicator.getUserLanguage(),
18
+ isUsingSyncAPI: pageCommunicator.isUsingSyncAPI(),
19
+ previewPane: pageCommunicator.getUserOriginalPreviewPaneMode(),
20
+ isConversationViewDisabled,
21
+ wasAccountSwitcherReadyAtStart: driver.getEnvData().wasAccountSwitcherReadyAtStart,
22
+ timings: {
23
+ ...{
24
+ responseStart: global.performance?.timing.responseStart,
25
+ responseEnd: global.performance?.timing.responseEnd,
26
+ domLoading: global.performance?.timing.domLoading,
27
+ domInteractive: global.performance?.timing.domInteractive,
28
+ domComplete: global.performance?.timing.domComplete,
29
+ domContentLoadedEventStart: global.performance?.timing.domContentLoadedEventStart,
30
+ domContentLoadedEventEnd: global.performance?.timing.domContentLoadedEventEnd,
31
+ domainLookupEnd: global.performance?.timing.domainLookupEnd,
32
+ domainLookupStart: global.performance?.timing.domainLookupStart,
33
+ fetchStart: global.performance?.timing.fetchStart,
34
+ loadEventStart: global.performance?.timing.loadEventStart,
35
+ loadEventEnd: global.performance?.timing.loadEventEnd,
36
+ navigationStart: global.performance?.timing.navigationStart,
37
+ requestStart: global.performance?.timing.requestStart,
38
+ },
39
+ ...driver.getTimings(),
40
+ },
41
+ });
42
+ }
@@ -1,2 +1,7 @@
1
+ /**
2
+ * https://support.google.com/mail/answer/11555490
3
+ */
1
4
  export default function isIntegratedViewGmail(): boolean;
5
+ /** @returns null if the app menu is configured off */
6
+ export declare function isCollapsiblePanelHidden(): boolean | null;
2
7
  //# sourceMappingURL=isIntegratedViewGmail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isIntegratedViewGmail.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,qBAAqB,IAAI,OAAO,CAGvD"}
1
+ {"version":3,"file":"isIntegratedViewGmail.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,IAAI,OAAO,CAGvD;AAED,sDAAsD;AACtD,wBAAgB,wBAAwB,IAAI,OAAO,GAAG,IAAI,CAMzD"}
@@ -1,4 +1,14 @@
1
+ /**
2
+ * https://support.google.com/mail/answer/11555490
3
+ */
1
4
  export default function isIntegratedViewGmail() {
2
5
  const nav = document.querySelector('div[role=navigation]');
3
6
  return Boolean(nav?.firstElementChild?.classList.contains('Xa'));
4
7
  }
8
+ /** @returns null if the app menu is configured off */
9
+ export function isCollapsiblePanelHidden() {
10
+ if (!isIntegratedViewGmail()) {
11
+ return null;
12
+ }
13
+ return document.querySelector('div[role=navigation].aBA') != null;
14
+ }
@@ -1,2 +1,7 @@
1
- export default function trackGmailStyles(): void;
1
+ export declare function isDarkTheme(): boolean;
2
+ export declare const stylesStream: import("kefir-bus").Bus<{
3
+ type: 'theme';
4
+ isDarkMode: boolean;
5
+ }, unknown>;
6
+ export default function trackGmailStyles(): Promise<void>;
2
7
  //# sourceMappingURL=track-gmail-styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"track-gmail-styles.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.ts"],"names":[],"mappings":"AAsDA,MAAM,CAAC,OAAO,UAAU,gBAAgB,SAwDvC"}
1
+ {"version":3,"file":"track-gmail-styles.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.ts"],"names":[],"mappings":"AA8BA,wBAAgB,WAAW,IAAI,OAAO,CAyBrC;AAED,eAAO,MAAM,YAAY;UACf,OAAO;gBAAc,OAAO;WAEnC,CAAC;AAEJ,wBAA8B,gBAAgB,kBAmE7C"}
@@ -1,3 +1,4 @@
1
+ import kefirBus from 'kefir-bus';
1
2
  import Logger from '../../../lib/logger';
2
3
  import waitFor from '../../../lib/wait-for';
3
4
  import GmailElementGetter from '../gmail-element-getter';
@@ -21,10 +22,11 @@ function getDensity() {
21
22
  return 'compact';
22
23
  }
23
24
  }
24
- function isDarkTheme() {
25
+ const navItemSelector = '.aio';
26
+ export function isDarkTheme() {
25
27
  // get the color of the left-nav-menu entries to determine whether Gmail is
26
28
  // in dark theme mode.
27
- const navItem = document.querySelector('.aio');
29
+ const navItem = document.querySelector(navItemSelector);
28
30
  if (!navItem) {
29
31
  Logger.error(new Error('Failed to find nav item'));
30
32
  return false;
@@ -45,7 +47,8 @@ function isDarkTheme() {
45
47
  }
46
48
  return r > 128;
47
49
  }
48
- export default function trackGmailStyles() {
50
+ export const stylesStream = kefirBus();
51
+ export default async function trackGmailStyles() {
49
52
  if (document.head.hasAttribute('data-inboxsdk-gmail-style-tracker') ||
50
53
  GmailElementGetter.isStandalone()) {
51
54
  return;
@@ -71,25 +74,34 @@ export default function trackGmailStyles() {
71
74
  else {
72
75
  document.body.classList.remove('inboxsdk__gmail_dark_theme');
73
76
  }
77
+ stylesStream.emit({
78
+ type: 'theme',
79
+ isDarkMode: newDarkTheme,
80
+ });
74
81
  }
75
82
  }
76
- waitFor(() => document.querySelector('.TO .TN') && document.querySelector('.aio'))
77
- .then(() => {
78
- // Gmail changes an inline <style> sheet when the display density changes.
79
- // Watch for changes to all <style> elements.
80
- const observer = new MutationObserver(checkStyles);
81
- const options = {
82
- characterData: true,
83
- childList: true,
84
- };
85
- Array.from(document.styleSheets).forEach((sheet) => {
86
- if (sheet.ownerNode.tagName == 'STYLE') {
87
- observer.observe(sheet.ownerNode, options);
88
- }
89
- });
90
- checkStyles();
91
- })
92
- .catch((err) => {
83
+ try {
84
+ await waitFor(() => document.querySelector('.TO .TN') &&
85
+ document.querySelector(navItemSelector));
86
+ }
87
+ catch (err) {
93
88
  Logger.error(err);
94
- });
89
+ return;
90
+ }
91
+ // Gmail changes an inline <style> sheet when the display density changes.
92
+ // Watch for changes to all <style> elements.
93
+ const observer = new MutationObserver(checkStyles);
94
+ const options = {
95
+ characterData: true,
96
+ childList: true,
97
+ };
98
+ for (const sheet of document.styleSheets) {
99
+ if (!(sheet.ownerNode instanceof Element)) {
100
+ continue;
101
+ }
102
+ if (sheet.ownerNode.tagName == 'STYLE') {
103
+ observer.observe(sheet.ownerNode, options);
104
+ }
105
+ }
106
+ checkStyles();
95
107
  }
@@ -18,6 +18,7 @@ import GmailSupportItemView, {
18
18
  import { AppMenuItemDescriptor } from '../../namespaces/app-menu';
19
19
  import { GmailAppMenuItemView } from './views/gmail-app-menu-item-view';
20
20
  import { RouteView } from '../../../inboxsdk';
21
+ import { EnvData } from '../../platform-implementation';
21
22
 
22
23
  type GmailThreadView = any;
23
24
  type GmailMessageView = any;
@@ -28,6 +29,8 @@ type GmailMoleViewDriver = any;
28
29
  type GmailBackdrop = any;
29
30
 
30
31
  export default class GmailDriver implements Driver {
32
+ getEnvData(): EnvData;
33
+ getTimings(): { [ix: string]: number | undefined | null };
31
34
  public onready: Promise<void>;
32
35
  public isUsingSyncAPI(): boolean;
33
36
  public getLogger(): Logger;
@@ -1 +1 @@
1
- {"version":3,"file":"gmail-element-getter.d.ts","sourceRoot":"","sources":["../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAA+B,EAC7B,mBAAmB,EACpB,MAAM,yCAAyC,CAAC;AAmBjD,QAAA,MAAM,kBAAkB;yBACD,WAAW,GAAG,IAAI;uCAcJ,WAAW,GAAG,IAAI;kDAKP,WAAW,GAAG,IAAI;+CAKrB,WAAW,GAAG,IAAI;wBAIzC,WAAW,GAAG,IAAI;iCAOT,WAAW,GAAG,IAAI;gCAInB,WAAW,GAAG,SAAS,GAAG,IAAI;2CA8BnB,WAAW,GAAG,IAAI;iDAIZ,MAAM,UAAU,CAC3D,mBAAmB,EACnB,KAAK,CACN;uBAgBkB,WAAW,GAAG,IAAI;kCAIP,WAAW,GAAG,IAAI;+BAOrB,WAAW,GAAG,IAAI;0CAIP,WAAW,GAAG,IAAI;+BAI7B,WAAW,GAAG,IAAI;+CAQrC,GAAG,KACR,MAAM,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;qBAItB,WAAW,GAAG,IAAI;+BAOR,OAAO;;;;;;uDAgFiB,WAAW,GAAG,IAAI;mDAItB,WAAW,GAAG,IAAI;0BAQ3C,WAAW,EAAE;0BAIb,WAAW,GAAG,IAAI;sBAItB,gBAAgB,GAAG,IAAI;qCAMR,WAAW,GAAG,IAAI;kCAIrB,WAAW,GAAG,IAAI;2BAIzB,WAAW,GAAG,IAAI;iCAWZ,WAAW,GAAG,IAAI;yBAI1B,WAAW;8BAIN,WAAW,GAAG,IAAI;sBAM1B,OAAO;mBAaV,OAAO;qBAIL,OAAO;oBAIR,OAAO;iCAIM,OAAO;gCAOR,OAAO;;qCASJ,WAAW,GAAG,IAAI;;gCAKrB,QAAQ,IAAI,CAAC;CAG1C,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"gmail-element-getter.d.ts","sourceRoot":"","sources":["../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAA+B,EAC7B,mBAAmB,EACpB,MAAM,yCAAyC,CAAC;AAmBjD,QAAA,MAAM,kBAAkB;yBACD,WAAW,GAAG,IAAI;uCAcJ,WAAW,GAAG,IAAI;kDAKP,WAAW,GAAG,IAAI;+CAKrB,WAAW,GAAG,IAAI;wBAIzC,WAAW,GAAG,IAAI;iCAOT,WAAW,GAAG,IAAI;gCAInB,WAAW,GAAG,SAAS,GAAG,IAAI;2CA8BnB,WAAW,GAAG,IAAI;iDAIZ,MAAM,UAAU,CAC3D,mBAAmB,EACnB,KAAK,CACN;uBAgBkB,WAAW,GAAG,IAAI;kCAIP,WAAW,GAAG,IAAI;+BAUrB,WAAW,GAAG,IAAI;0CAIP,WAAW,GAAG,IAAI;+BAI7B,WAAW,GAAG,IAAI;+CAQrC,GAAG,KACR,MAAM,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;qBAItB,WAAW,GAAG,IAAI;+BAOR,OAAO;;;;;;uDAqFiB,WAAW,GAAG,IAAI;mDAItB,WAAW,GAAG,IAAI;0BAQ3C,WAAW,EAAE;0BAIb,WAAW,GAAG,IAAI;sBAItB,gBAAgB,GAAG,IAAI;qCAMR,WAAW,GAAG,IAAI;kCAIrB,WAAW,GAAG,IAAI;2BAIzB,WAAW,GAAG,IAAI;iCAWZ,WAAW,GAAG,IAAI;yBAI1B,WAAW;8BAIN,WAAW,GAAG,IAAI;sBAM1B,OAAO;mBAaV,OAAO;qBAIL,OAAO;oBAIR,OAAO;iCAIM,OAAO;gCAOR,OAAO;;qCASJ,WAAW,GAAG,IAAI;;gCAKrB,QAAQ,IAAI,CAAC;CAG1C,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -89,6 +89,9 @@ const GmailElementGetter = {
89
89
  return document.querySelector('.aeN .aj5.J-KU-Jg');
90
90
  },
91
91
  getLeftNavContainerElement() {
92
+ if (this.getAppMenu()) {
93
+ return this.getAppMenuContainer()?.querySelector('.aqn.aIH') ?? null;
94
+ }
92
95
  if (isIntegratedViewGmail()) {
93
96
  return document.querySelector('div[role=navigation] + div.aqn');
94
97
  }
@@ -166,8 +169,11 @@ const GmailElementGetter = {
166
169
  }),
167
170
  isAppBurgerMenuOpen() {
168
171
  return (document
169
- .querySelector('.gb_Hc[aria-expanded]')
170
- ?.getAttribute('aria-expanded') === 'true' ?? false);
172
+ .querySelector('header[role="banner"] > div > div > div[aria-expanded]')
173
+ ?.getAttribute('aria-expanded') === 'true' ??
174
+ // Default to true if we can't find the element because
175
+ // the majority of users seem to favor that version.
176
+ false);
171
177
  },
172
178
  getAppMenuContainer() {
173
179
  return document.querySelector('.aqk.aql.bkL');
@@ -10,6 +10,7 @@ export type MessageEvents = {
10
10
  export declare const NATIVE_CLASS: "Xa";
11
11
  export declare const INBOXSDK_CLASS: "inboxsdk__appMenuItem";
12
12
  export declare const ELEMENT_CLASS: "Xa inboxsdk__appMenuItem";
13
+ export declare const ICON_ELEMENT_SELECTOR: ".V6.CL";
13
14
  declare const GmailAppMenuItemView_base: new () => TypedEventEmitter<MessageEvents>;
14
15
  export declare class GmailAppMenuItemView extends GmailAppMenuItemView_base {
15
16
  #private;
@@ -17,19 +18,11 @@ export declare class GmailAppMenuItemView extends GmailAppMenuItemView_base {
17
18
  readonly HOVER: "aIk";
18
19
  readonly ACTIVE: "apV";
19
20
  };
20
- get element(): HTMLElement | undefined;
21
- setMenuItemDescriptor(newMenuItemDescriptor: AppMenuItemDescriptor): void;
22
- get menuItemDescriptor(): AppMenuItemDescriptor | undefined;
23
- constructor(driver: GmailDriver);
21
+ get element(): HTMLElement;
22
+ set menuItemDescriptor(newMenuItemDescriptor: AppMenuItemDescriptor);
23
+ get menuItemDescriptor(): AppMenuItemDescriptor;
24
+ constructor(driver: GmailDriver, menuItemDescriptor: AppMenuItemDescriptor);
24
25
  remove(): void;
25
- /**
26
- * @internal
27
- */
28
- blur(): void;
29
- /**
30
- * @internal
31
- */
32
- hover(): void;
33
26
  }
34
27
  export {};
35
28
  //# sourceMappingURL=gmail-app-menu-item-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gmail-app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,OAAO,iBAAiB,MAAM,eAAe,CAAC;AAK9C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY,MAAgB,CAAC;AAC1C,eAAO,MAAM,cAAc,yBAAmC,CAAC;AAC/D,eAAO,MAAM,aAAa,4BAA+C,CAAC;mDAOL,kBAAkB,aAAa,CAAC;AAArG,qBAAa,oBAAqB,SAAQ,yBAA4D;;IACpG,MAAM,CAAC,UAAU;;;MAGN;IAOX,IAAI,OAAO,4BAEV;IAED,qBAAqB,CAAC,qBAAqB,EAAE,qBAAqB;IAKlE,IAAI,kBAAkB,sCAErB;gBAEW,MAAM,EAAE,WAAW;IAc/B,MAAM;IAON;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,KAAK;CA4FN"}
1
+ {"version":3,"file":"gmail-app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,OAAO,iBAAiB,MAAM,eAAe,CAAC;AAO9C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY,MAAgB,CAAC;AAC1C,eAAO,MAAM,cAAc,yBAAmC,CAAC;AAC/D,eAAO,MAAM,aAAa,4BAA+C,CAAC;AAI1E,eAAO,MAAM,qBAAqB,UAAoB,CAAC;mDAGc,kBAAkB,aAAa,CAAC;AAArG,qBAAa,oBAAqB,SAAQ,yBAA4D;;IACpG,MAAM,CAAC,UAAU;;;MAGN;IAOX,IAAI,OAAO,gBAEV;IAED,IAAI,kBAAkB,CAAC,qBAAqB,uBAAA,EAG3C;IAED,IAAI,kBAAkB,0BAErB;gBAEW,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB;IAwB1E,MAAM;CA6GP"}
@@ -2,12 +2,14 @@ import querySelector from '../../../lib/dom/querySelectorOrFail';
2
2
  import { EventEmitter } from 'events';
3
3
  import cx from 'classnames';
4
4
  import GmailElementGetter from '../gmail-element-getter';
5
+ import { stylesStream } from '../gmail-driver/track-gmail-styles';
6
+ import isEqual from 'fast-deep-equal';
5
7
  export const NATIVE_CLASS = 'Xa';
6
8
  export const INBOXSDK_CLASS = 'inboxsdk__appMenuItem';
7
9
  export const ELEMENT_CLASS = `${NATIVE_CLASS} ${INBOXSDK_CLASS}`;
8
10
  const ICON_ELEMENT_CLASS = 'V6 CL';
9
11
  const HEADING_ELEMENT_CLASS = 'apW';
10
- const ICON_ELEMENT_SELECTOR = '.V6.CL';
12
+ export const ICON_ELEMENT_SELECTOR = '.V6.CL';
11
13
  const HEADING_ELEMENT_SELECTOR = '.apW';
12
14
  export class GmailAppMenuItemView extends EventEmitter {
13
15
  static elementCss = {
@@ -21,17 +23,26 @@ export class GmailAppMenuItemView extends EventEmitter {
21
23
  get element() {
22
24
  return this.#element;
23
25
  }
24
- setMenuItemDescriptor(newMenuItemDescriptor) {
26
+ set menuItemDescriptor(newMenuItemDescriptor) {
25
27
  this.#menuItemDescriptor = newMenuItemDescriptor;
26
28
  this.#update();
27
29
  }
28
30
  get menuItemDescriptor() {
29
31
  return this.#menuItemDescriptor;
30
32
  }
31
- constructor(driver) {
33
+ constructor(driver, menuItemDescriptor) {
32
34
  super();
33
35
  this.#element = this.#setupElement();
34
36
  this.#driver = driver;
37
+ this.#menuItemDescriptor = menuItemDescriptor;
38
+ this.#update();
39
+ stylesStream
40
+ .skipDuplicates((a, b) => isEqual(a, b))
41
+ .onValue(({ type }) => {
42
+ if (type === 'theme') {
43
+ this.#update();
44
+ }
45
+ });
35
46
  driver.getStopper().onValue(() => this.remove());
36
47
  this.#element.addEventListener('click', (e) => this.#onClick(e));
37
48
  this.#element.addEventListener('mouseleave', this.#onBlur);
@@ -44,21 +55,6 @@ export class GmailAppMenuItemView extends EventEmitter {
44
55
  this.element?.remove();
45
56
  this.emit('destroy');
46
57
  }
47
- /**
48
- * @internal
49
- */
50
- blur() {
51
- this.element?.classList.remove(GmailAppMenuItemView.elementCss.HOVER);
52
- }
53
- /**
54
- * @internal
55
- */
56
- hover() {
57
- if (this.element?.classList.contains(GmailAppMenuItemView.elementCss.ACTIVE)) {
58
- return;
59
- }
60
- this.element?.classList.add(GmailAppMenuItemView.elementCss.HOVER);
61
- }
62
58
  #setupElement() {
63
59
  const element = document.createElement('div');
64
60
  element.className = ELEMENT_CLASS;
@@ -82,6 +78,7 @@ export class GmailAppMenuItemView extends EventEmitter {
82
78
  const headingElement = querySelector(element, HEADING_ELEMENT_SELECTOR);
83
79
  headingElement.textContent = this.#menuItemDescriptor?.name ?? '';
84
80
  }
81
+ static #preloadedIcons = new Set();
85
82
  #updateIcon(element) {
86
83
  const iconContainerEl = querySelector(element, ICON_ELEMENT_SELECTOR);
87
84
  const { iconUrl, iconClassName } = this.#menuItemDescriptor ?? {};
@@ -89,8 +86,22 @@ export class GmailAppMenuItemView extends EventEmitter {
89
86
  const rawTheme = GmailElementGetter.isDarkTheme()
90
87
  ? iconUrl.darkTheme
91
88
  : iconUrl.lightTheme;
89
+ if (!rawTheme)
90
+ return;
92
91
  const theme = typeof rawTheme === 'string' ? rawTheme : rawTheme.default;
93
92
  const activeImg = typeof rawTheme === 'string' ? rawTheme : rawTheme.active;
93
+ // alleviate FOUC when switching between active and default icons
94
+ // https://stackoverflow.com/a/68521953/1924257
95
+ for (const url of [theme, activeImg]) {
96
+ if (GmailAppMenuItemView.#preloadedIcons.has(url))
97
+ continue;
98
+ GmailAppMenuItemView.#preloadedIcons.add(url);
99
+ var link = document.createElement('link');
100
+ link.rel = 'preload';
101
+ link.as = 'image';
102
+ link.href = url;
103
+ document.head.appendChild(link);
104
+ }
94
105
  iconContainerEl.style.setProperty('--background-image', `url(${theme})`);
95
106
  iconContainerEl.style.setProperty('--background-image--active', `url(${activeImg})`);
96
107
  }
@@ -8,8 +8,8 @@ type ThemedIcon = string | {
8
8
  export type AppMenuItemDescriptor = {
9
9
  name: string;
10
10
  iconUrl?: {
11
- darkTheme: ThemedIcon;
12
- lightTheme: ThemedIcon;
11
+ darkTheme?: ThemedIcon;
12
+ lightTheme?: ThemedIcon;
13
13
  };
14
14
  className?: string;
15
15
  iconClassName?: string;
@@ -28,16 +28,25 @@ export type AppMenuItemDescriptor = {
28
28
  */
29
29
  isRouteActive: (routeView: RouteView) => boolean;
30
30
  };
31
+ /**
32
+ * In dark themes, Gmail has different colored primary buttons depending on hover or active state
33
+ */
34
+ type PanelPrimaryButtonThemedIcon = string | {
35
+ panelHovered: string;
36
+ panelDefault: string;
37
+ };
31
38
  export type AppMenuItemPanelDescriptor = {
32
39
  className?: string;
33
- /** In the form of HTML as a string. */
40
+ /** In the form of HTML as a string.
41
+ *
42
+ * If this option is provided, the panel defaults to loading=true. */
34
43
  loadingIcon?: string;
35
44
  primaryButton?: {
36
45
  name: string;
37
46
  onClick: (e: MouseEvent) => void;
38
47
  iconUrl?: {
39
- darkTheme: string;
40
- lightTheme: string;
48
+ darkTheme?: PanelPrimaryButtonThemedIcon;
49
+ lightTheme?: PanelPrimaryButtonThemedIcon;
41
50
  };
42
51
  className?: string;
43
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"app-menu.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/namespaces/app-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,KAAK,UAAU,GACX,MAAM,GACN;IACE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,UAAU,CAAC;QACtB,UAAU,EAAE,UAAU,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,EAAE,CAAC;IACjB;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;QACjC,OAAO,CAAC,EAAE;YACR,SAAS,EAAE,MAAM,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;;gBAGd,MAAM,EAAE,WAAW;IAI/B,WAAW,CAAC,kBAAkB,EAAE,qBAAqB,GAAG,eAAe;IAKjE,OAAO;CAId"}
1
+ {"version":3,"file":"app-menu.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/namespaces/app-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,KAAK,UAAU,GACX,MAAM,GACN;IACE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,UAAU,CAAC;QACvB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,EAAE,CAAC;IACjB;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,KAAK,4BAA4B,GAC7B,MAAM,GACN;IACE,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;0EAEsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;QACjC,OAAO,CAAC,EAAE;YACR,SAAS,CAAC,EAAE,4BAA4B,CAAC;YACzC,UAAU,CAAC,EAAE,4BAA4B,CAAC;SAC3C,CAAC;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;;gBAGd,MAAM,EAAE,WAAW;IAI/B,WAAW,CAAC,kBAAkB,EAAE,qBAAqB,GAAG,eAAe;IAKjE,OAAO;CAId"}
@@ -1 +1 @@
1
- {"version":3,"file":"app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/views/app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAWzC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAK3D,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;8CA0C8D,aAAa,aAAa,CAAC;AAH3F;;GAEG;AACH,qBAAa,eAAgB,SAAQ,oBAAuD;;IAqV1F,IAAI,kBAAkB,0BAErB;gBAQW,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB;IAsDpE,mBAAmB,CAAC,eAAe,EAAE,0BAA0B;IA2C/D,MAAM,CAAC,kBAAkB,EAAE,qBAAqB;IAMtD,MAAM;CAYP"}
1
+ {"version":3,"file":"app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/views/app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAYzC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAK3D,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;8CA0C8D,aAAa,aAAa,CAAC;AAH3F;;GAEG;AACH,qBAAa,eAAgB,SAAQ,oBAAuD;;IA4Y1F,IAAI,kBAAkB,0BAErB;gBAQW,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB;IAsDpE,mBAAmB,CAAC,eAAe,EAAE,0BAA0B;IA2C/D,MAAM,CAAC,kBAAkB,EAAE,qBAAqB;IAMtD,MAAM;CAaP"}