diff --git a/types/inboxsdk/inboxsdk-tests.ts b/types/inboxsdk/inboxsdk-tests.ts
index 64abf04f6e..001dd538e6 100644
--- a/types/inboxsdk/inboxsdk-tests.ts
+++ b/types/inboxsdk/inboxsdk-tests.ts
@@ -1,6 +1,820 @@
-import * as InboxSDK from "inboxsdk";
-import {Compose, InboxSDKInstance} from "inboxsdk";
+import * as InboxSDK from 'inboxsdk';
+import {Common, Compose, Conversations, InboxSDKInstance, Lists, NavMenu, Router} from 'inboxsdk';
+import ComposeView = Compose.ComposeView;
+import Contact = Common.Contact;
+import ThreadRowView = Lists.ThreadRowView;
+import ThreadView = Conversations.ThreadView;
+import SimpleElementView = Common.SimpleElementView;
+import ContentPanelView = Conversations.ContentPanelView;
+import MessageView = Conversations.MessageView;
+import AttachmentCardView = Conversations.AttachmentCardView;
+import AttachmentCardClickEvent = Conversations.AttachmentCardClickEvent;
+import MessageViewLinkDescriptor = Conversations.MessageViewLinkDescriptor;
+import SectionDescriptor = Router.SectionDescriptor;
+import NavItemDescriptor = NavMenu.NavItemDescriptor;
-InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => sdk.Compose.registerComposeViewHandler((v: Compose.ComposeView) => {
+InboxSDK.load(1, '1234').then((_sdk: InboxSDKInstance) => {
+ _sdk.ButterBar.hideGmailMessage();
+});
-}));
+InboxSDK.load(1, '1234', {}).then(() => console.log('done'));
+InboxSDK.load(1, '1234', {
+ appIconUrl: 'url',
+ appName: 'name',
+ suppressAddonTitle: 'su'
+}).then(() => console.log('done'));
+
+InboxSDK.loadScript('https://google.com').then(() => console.log('done'));
+InboxSDK.loadScript('https://google.com', {}).then(() => console.log('done'));
+InboxSDK.loadScript('https://google.com', {nowrap: true}).then(() => console.log('done'));
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ sdk.ButterBar.showMessage({
+ text: 'text',
+ });
+
+ sdk.ButterBar.showMessage({
+ text: 'text',
+ className: 'c',
+ hideOnViewChanged: true,
+ persistent: true,
+ priority: 1,
+ time: 1,
+ messageKey: '1'
+ });
+
+ const el: HTMLElement = new HTMLElement();
+
+ sdk.ButterBar.showMessage({
+ el,
+ });
+
+ sdk.ButterBar.showMessage({
+ el,
+ className: 'c',
+ hideOnViewChanged: true,
+ persistent: true,
+ priority: 1,
+ time: 1,
+ messageKey: '1'
+ });
+
+ sdk.ButterBar.showMessage({
+ html: '
',
+ });
+
+ sdk.ButterBar.showMessage({
+ html: '',
+ className: 'c',
+ hideOnViewChanged: true,
+ persistent: true,
+ priority: 1,
+ time: 1,
+ messageKey: '1'
+ });
+
+ sdk.ButterBar.showLoading();
+
+ sdk.ButterBar.showError({
+ text: 'error'
+ });
+
+ sdk.ButterBar.showSaving({
+ text: 'saving'
+ });
+
+ sdk.ButterBar.hideMessage('key');
+ sdk.ButterBar.hideGmailMessage();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const unregister = sdk.Compose.registerComposeViewHandler((composeView: ComposeView) => {
+
+ composeView.addButton({
+ title: 'button title',
+ onClick: e => {
+ const eq = e.composeView === composeView;
+ const dropdownDestroyed = e.dropdown.destroyed;
+
+ e.dropdown.close();
+
+ const el: HTMLElement = e.dropdown.el;
+
+ e.dropdown.setPlacementOptions({});
+ e.dropdown.setPlacementOptions({
+ bottomBuffer: 1,
+ buffer: 1,
+ forceHAlign: true,
+ forcePosition: true,
+ forceVAlign: true,
+ hAlign: 'center',
+ position: 'middle',
+ rightBuffer: 1,
+ topBuffer: 1,
+ vAlign: 'top',
+ leftBuffer: 1
+ });
+ }
+ });
+
+ const statusBarView = composeView.addStatusBar({});
+ statusBarView.setHeight(1);
+
+ composeView.addStatusBar({
+ height: 1,
+ orderHint: 1
+ });
+
+ composeView.close();
+
+ composeView.send();
+ composeView.send({sendAndArchive: true});
+
+ const element: HTMLElement = composeView.getBodyElement();
+ const msgId: String = composeView.getInitialMessageID();
+ const threadId: String = composeView.getThreadID();
+ composeView.getDraftID().then(draftId => {
+ const id: string = draftId.toLowerCase();
+ });
+ composeView.getCurrentDraftID().then(draftId => {
+ if (draftId) {
+ const id: string = draftId.toLowerCase();
+ }
+ });
+
+ const html: String = composeView.getHTMLContent();
+ const bodyHtml: String = composeView.getSelectedBodyHTML();
+ const bodyText: String = composeView.getSelectedBodyText();
+ const subject: String = composeView.getSubject();
+ const textContent: String = composeView.getTextContent();
+ const contacts: Contact[] = composeView.getToRecipients();
+ const contactsCC: Contact[] = composeView.getCcRecipients();
+ const contactsBCC: Contact[] = composeView.getBccRecipients();
+
+ composeView.insertTextIntoBodyAtCursor('text');
+ const el1: HTMLElement = composeView.insertHTMLIntoBodyAtCursor(new HTMLElement());
+ const el2: HTMLElement = composeView.insertHTMLIntoBodyAtCursor('html');
+
+ const el3: HTMLElement = composeView.insertLinkChipIntoBodyAtCursor('text', 'http://url.com', 'http://url.com/favicon.ico');
+ const el4: HTMLElement = composeView.insertLinkIntoBodyAtCursor('text', 'http://url.com');
+
+ const inline: boolean = composeView.isInlineReplyForm();
+ const fullScreen: boolean = composeView.isFullscreen();
+ const minimized: boolean = composeView.isMinimized();
+ composeView.setFullscreen(true);
+ composeView.setMinimized(true);
+ composeView.popOut().then(view => view === composeView);
+
+ const removeColor = composeView.setTitleBarColor('red');
+ removeColor();
+
+ const isReply: boolean = composeView.isReply();
+
+ composeView.setToRecipients(['a@a.com', 'b@b.com']);
+ composeView.setCcRecipients(['a@a.com', 'b@b.com']);
+ composeView.setBccRecipients(['a@a.com', 'b@b.com']);
+
+ const fromContact: Common.Contact = composeView.getFromContact();
+ const fromContacts: Common.Contact[] = composeView.getFromContactChoices();
+
+ composeView.setFromEmail('a@a.com');
+ composeView.setSubject('subject');
+ composeView.setBodyHTML('');
+ composeView.setBodyText('text');
+ composeView.attachFiles([new Blob()]).then(() => console.log());
+ composeView.attachInlineFiles([new Blob()]).then(() => console.log());
+
+ composeView.on('destroy', event => {
+ const msgId: string = event.messageID;
+ const byInbox: boolean = event.closedByInboxSDK;
+ });
+
+ composeView.on('fullscreenChanged', event => {
+ const fs: boolean = event.fullscreen;
+ });
+
+ composeView.on('fromContactChanged', event => {
+ const c: Common.Contact = event.contact;
+ });
+
+ composeView.on('toContactAdded', event => {
+ const c: Common.Contact = event.contact;
+ });
+
+ composeView.on('toContactRemoved', event => {
+ const c: Common.Contact = event.contact;
+ });
+
+ composeView.on('ccContactAdded', event => {
+ const c: Common.Contact = event.contact;
+ });
+
+ composeView.on('ccContactRemoved', event => {
+ const c: Common.Contact = event.contact;
+ });
+
+ composeView.on('bccContactAdded', event => {
+ const c: Common.Contact = event.contact;
+ });
+
+ composeView.on('bccContactRemoved', event => {
+ const c: Common.Contact = event.contact;
+ });
+
+ composeView.on('recipientsChanged', event => {
+ let c: Common.Contact;
+ c = event.to.added[0];
+ c = event.to.removed[0];
+ c = event.cc.added[0];
+ c = event.cc.removed[0];
+ c = event.bcc.added[0];
+ c = event.bcc.removed[0];
+ });
+
+ composeView.on('presending', event => {
+ event.cancel();
+ });
+
+ composeView.on('sent', event => {
+ event.getMessageID().then(msgId => msgId.toLowerCase());
+ event.getThreadID().then(threadId => threadId.toLowerCase());
+ });
+
+ composeView.on('discard', () => {
+ console.log();
+ });
+ composeView.on('sendCanceled', () => {
+ console.log();
+ });
+ composeView.on('sending', () => {
+ console.log();
+ });
+ composeView.on('bodyChanged', () => {
+ console.log();
+ });
+ composeView.on('minimized', () => {
+ console.log();
+ });
+ composeView.on('restored', () => {
+ console.log();
+ });
+
+ const destroyed: boolean = composeView.destroyed;
+ });
+
+ unregister();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const unregister = sdk.Lists.registerThreadRowViewHandler((threadRowView: ThreadRowView) => {
+ threadRowView.addLabel({
+ title: 'title',
+ iconUrl: 'http://url.com'
+ });
+
+ threadRowView.addLabel({
+ title: 'title',
+ iconUrl: 'http://url.com',
+ backgroundColor: 'red',
+ foregroundColor: 'blue',
+ iconBackgroundColor: 'yellow',
+ iconClass: 'big'
+ });
+
+ threadRowView.addImage({
+ imageUrl: 'http://url.com'
+ });
+
+ threadRowView.addImage({
+ imageUrl: 'http://url.com',
+ imageClass: 'big',
+ tooltip: 'tooltip',
+ orderHint: 1
+ });
+
+ threadRowView.addButton({
+ title: 'title',
+ iconUrl: 'http://url.com',
+ onClick: event => {
+ const eq = event.threadRowView === threadRowView;
+ if (event.dropdown) {
+ event.dropdown.close();
+ }
+ },
+ hasDropdown: true
+ });
+
+ threadRowView.addButton({
+ title: 'title',
+ iconUrl: 'http://url.com',
+ onClick: event => {
+ },
+ hasDropdown: false,
+ iconClass: 'big'
+ });
+
+ threadRowView.addActionButton({
+ type: 'LINK',
+ title: 'title',
+ className: 'big',
+ url: 'http://url.com',
+ onClick: () => {
+ }
+ });
+
+ threadRowView.addAttachmentIcon({});
+ threadRowView.addAttachmentIcon({
+ tooltip: 'tooltip',
+ iconClass: 'big',
+ iconUrl: 'http://url.com'
+ });
+
+ threadRowView.replaceDate({
+ text: '1/1/2000'
+ });
+ threadRowView.replaceDate({
+ text: '1/1/2000',
+ textColor: 'red',
+ tooltip: 'tooltip'
+ });
+
+ threadRowView.replaceDraftLabel({
+ text: 'my draft'
+ });
+ threadRowView.replaceDraftLabel({
+ text: 'my draft',
+ count: '2'
+ });
+
+ const subject: string = threadRowView.getSubject();
+ const date: string = threadRowView.getDateString();
+ threadRowView.getThreadIDAsync().then(threadId => threadId.toLowerCase());
+ threadRowView.getThreadIDIfStableAsync().then(threadId => {
+ if (threadId) {
+ threadId.toLowerCase();
+ }
+ });
+ threadRowView.getDraftID().then(draftId => draftId.toLowerCase());
+
+ const count1: number = threadRowView.getVisibleDraftCount();
+ const count2: number = threadRowView.getVisibleMessageCount();
+
+ const contacts: Common.Contact[] = threadRowView.getContacts();
+
+ threadRowView.on('destroyed', () => console.log());
+
+ const destroyed: boolean = threadRowView.destroyed;
+ });
+
+ unregister();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const unregister = sdk.Conversations.registerThreadViewHandler((threadView: ThreadView) => {
+ const noticeBar: SimpleElementView = threadView.addNoticeBar();
+ noticeBar.destroy();
+
+ const contentPanel: ContentPanelView = threadView.addSidebarContentPanel({
+ el: new HTMLElement(),
+ title: 'title',
+ iconUrl: 'http://url.com',
+ });
+
+ contentPanel.remove();
+ const destroyed: boolean = contentPanel.destroyed;
+ contentPanel.on('destroy', () => console.log());
+ contentPanel.on('deactivate', () => console.log());
+ contentPanel.on('activate', () => console.log());
+
+ threadView.addSidebarContentPanel({
+ el: new HTMLElement(),
+ title: 'title',
+ iconUrl: 'http://url.com',
+ appIconUrl: 'http://url.com',
+ appName: 'app name',
+ id: '1',
+ orderHint: 1,
+ hideTitleBar: true
+ });
+
+ const messageViews: MessageView[] = threadView.getMessageViews();
+ const allMessageViews: MessageView[] = threadView.getMessageViewsAll();
+ const subject: string = threadView.getSubject();
+ threadView.getThreadIDAsync().then(threadId => threadId.toLowerCase());
+
+ threadView.on('contactHover', event => {
+ const contact: Contact = event.contact;
+ const eq1 = event.messageView === messageViews[0];
+ const eq2 = event.threadView === threadView;
+ const isSender: boolean = event.contactType === 'sender';
+ });
+
+ threadView.on('destroy', () => console.log());
+ });
+
+ unregister();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const unregister = sdk.Conversations.registerMessageViewHandler((messageView: MessageView) => {
+ const attachmentCardView: AttachmentCardView = messageView.addAttachmentCardView({
+ title: 'title',
+ description: 'desc',
+ previewUrl: 'http://url.com',
+ previewThumbnailUrl: 'http://url.com',
+ failoverPreviewIconUrl: 'http://url.com',
+ previewOnClick: event => {
+ const eq = event.attachmentCardView === attachmentCardView;
+ event.preventDefault();
+ },
+ fileIconImageUrl: 'http://url.com',
+ buttons: [
+ {
+ downloadUrl: 'http://url.com',
+ downloadFilename: 'file.txt',
+ openInNewTab: true,
+ onClick: () => {
+ }
+ },
+ {
+ iconUrl: 'http://url.com',
+ tooltip: 'tooltip',
+ onClick: (event: AttachmentCardClickEvent) => event.getDownloadURL().then(url => url.toLowerCase())
+ }
+ ],
+ foldColor: 'red',
+ mimeType: 'text'
+ });
+
+ const attachmentType: string = attachmentCardView.getAttachmentType();
+ const title: string = attachmentCardView.getTitle();
+ const msgView: MessageView | null = attachmentCardView.getMessageView();
+ attachmentCardView.addButton({
+ iconUrl: 'http://url.com',
+ tooltip: 'tooltip',
+ onClick: (event: AttachmentCardClickEvent) => event.getDownloadURL().then(url => url.toLowerCase())
+ });
+
+ attachmentCardView.on('destroy', () => console.log());
+ const destroyed: boolean = attachmentCardView.destroyed;
+
+ messageView.addAttachmentsToolbarButton({
+ iconUrl: 'http://url.com',
+ tooltip: 'tooltip',
+ onClick: event => {
+ const attType: string = event.attachmentCardViews[0].getAttachmentType();
+ }
+ });
+
+ messageView.addToolbarButton({
+ section: 'MORE',
+ title: 'title',
+ iconUrl: 'http://url.com',
+ iconClass: 'big',
+ onClick: () => {
+ },
+ orderHint: 1
+ });
+
+ const el: HTMLElement = messageView.getBodyElement();
+ messageView.getMessageIDAsync().then(msgId => msgId.toLowerCase());
+ const attCardViews: AttachmentCardView[] = messageView.getFileAttachmentCardViews();
+ const isQuotedArea = messageView.isElementInQuotedArea();
+ const isLoaded = messageView.isLoaded();
+ const links: MessageViewLinkDescriptor[] = messageView.getLinksInBody();
+ links[0].text.toLowerCase();
+ links[0].element.click();
+ links[0].html.toLowerCase();
+ links[0].isInQuotedArea === true;
+ links[0].href.toLowerCase();
+
+ const contact: Contact = messageView.getSender();
+ const add: string[] = messageView.getRecipientEmailAddresses();
+ messageView.getRecipientsFull().then(contacts => {
+ const c: Contact = contacts[0];
+ });
+
+ const threadView: ThreadView = messageView.getThreadView();
+ const date: string = messageView.getDateString();
+ messageView.addAttachmentIcon({
+ iconUrl: 'http://url.com',
+ iconClass: 'big',
+ onClick: () => {
+ },
+ tooltip: 'tooltip'
+ });
+
+ const eq = messageView.getViewState() === 'HIDDEN';
+
+ messageView.on('viewStateChange', event => {
+ const eq1 = event.newViewState === 'COLLAPSED';
+ const eq2 = event.oldViewState === 'EXPANDED';
+ const eq3 = event.messageView === messageView;
+ });
+
+ messageView.on('contactHover', event => {
+ event.contact.name.toLowerCase();
+ });
+
+ messageView.on('load', () => console.log());
+ messageView.on('destroy', () => console.log());
+
+ const destroyed1: boolean = messageView.destroyed;
+ });
+
+ unregister();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const unregister = sdk.Conversations.registerMessageViewHandlerAll((messageView: MessageView) => {
+ const isLoaded: boolean = messageView.isLoaded();
+ });
+
+ unregister();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const unregister = sdk.Conversations.registerFileAttachmentCardViewHandler((attachmentCardView: AttachmentCardView) => {
+ const messageView: MessageView | null = attachmentCardView.getMessageView();
+ });
+
+ unregister();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const unregister = sdk.Toolbars.registerThreadButton({
+ hasDropdown: true,
+ hideFor: (routeView => routeView.getParams()),
+ iconClass: 'big',
+ iconUrl: 'http://url.com',
+ keyboardShortcutHandle: {
+ remove: () => {
+ }
+ },
+ listSection: 'INBOX_STATE',
+ onClick: event => event.position === 'LIST',
+ orderHint: 1,
+ positions: ['LIST', 'ROW'],
+ threadSection: 'METADATA_STATE',
+ title: 'title'
+ });
+
+ unregister();
+
+ sdk.Toolbars.addToolbarButtonForApp({
+ iconClass: 'big',
+ arrowColor: 'red',
+ iconUrl: 'http://url.com',
+ onClick: event => event.dropdown.close(),
+ title: 'title',
+ titleClass: 'big'
+ });
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ sdk.Router.createLink('1234', {p1: 1, 0: 1}).toLowerCase();
+ sdk.Router.goto('1234', {p1: 1, 0: 1});
+
+ const unregister1 = sdk.Router.handleCustomRoute('1234', customRouteView => {
+ customRouteView.getParams();
+ customRouteView.setFullWidth(true);
+ customRouteView.getElement().click();
+ });
+
+ unregister1();
+
+ const unregister2 = sdk.Router.handleAllRoutes(routeView => {
+ routeView.getParams();
+ routeView.getRouteID();
+ routeView.getRouteType();
+ routeView.on('destroy', () => {
+ });
+ const destroyed: boolean = routeView.destroyed;
+ });
+
+ unregister2();
+
+ const unregister3 = sdk.Router.handleListRoute('ALL_MAIL', listRouteView => {
+
+ const sectionDescriptor: SectionDescriptor = {
+ contentElement: new HTMLElement(),
+ footerLinkText: 'text',
+ hasDropdown: true,
+ onDropdownClick: event => event.dropdown.close(),
+ onFooterLinkClick: event => {
+ },
+ onTitleLinkClick: () => {
+ },
+ subtitle: 'title',
+ tableRows: [{
+ body: 'body',
+ iconClass: 'big',
+ iconUrl: 'http://url.com',
+ isRead: 'true',
+ labels: [{
+ iconClass: 'big',
+ iconBackgroundColor: 'red',
+ foregroundColor: 'green',
+ backgroundColor: 'blue',
+ iconUrl: 'http://url.com',
+ title: 'title'
+ }],
+ onClick: () => {
+ },
+ routeID: '1234',
+ routeParams: ['p1'],
+ shortDetailText: 'text',
+ title: 'title'
+ }],
+ title: 'title',
+ titleLinkText: 'text'
+ };
+
+ listRouteView.addCollapsibleSection(sectionDescriptor);
+ listRouteView.addSection(sectionDescriptor);
+
+ listRouteView.refresh();
+ });
+
+ unregister3();
+
+ const unregister4 = sdk.Router.handleCustomListRoute('1234', (offset, max) => {
+ return {
+ threads: [
+ {
+ rfcMessageId: 'id',
+ gmailThreadId: 'id'
+ },
+ 'id'
+ ],
+ total: 1,
+ hasMore: true,
+ };
+ });
+
+ unregister4();
+
+ sdk.Router.getCurrentRouteView().getRouteID().toLowerCase();
+
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const navItemDescriptor: NavItemDescriptor = {
+ accessory: {
+ type: 'CREATE',
+ onClick: () => {
+ }
+ },
+ backgroundColor: 'red',
+ expanderForegroundColor: 'green',
+ iconClass: 'big',
+ iconUrl: 'http://url.com',
+ name: 'name',
+ onClick: event => event.preventDefault(),
+ orderHint: 1,
+ routeID: '1234',
+ routeParams: {p: 1},
+ type: 'MANAGE'
+ };
+
+ const navItem = sdk.NavMenu.addNavItem(navItemDescriptor);
+ const navItem1 = navItem.addNavItem(navItemDescriptor);
+ navItem.remove();
+ navItem1.remove();
+
+ const isCollapsed: boolean = navItem.isCollapsed();
+ navItem.setCollapsed(true);
+
+ navItem.on('destroy', () => {
+ });
+ const destroyed: boolean = navItem.destroyed;
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const modalView = sdk.Widgets.showModalView({
+ buttons: [{
+ color: 'red',
+ onClick: () => {
+ },
+ orderHint: 1,
+ text: 'text',
+ title: 'title',
+ type: 'PRIMARY_ACTION'
+ }],
+ chrome: true,
+ constrainTitleWidth: true,
+ el: new HTMLElement(),
+ showCloseButton: true,
+ title: 'title'
+ });
+
+ modalView.close();
+ modalView.on('destroyed', () => {
+ });
+ modalView.destroyed === true;
+
+ const moleView = sdk.Widgets.showMoleView({
+ chrome: true,
+ className: 'big',
+ el: new HTMLElement(),
+ minimizedTitleEl: new HTMLElement(),
+ title: 'title',
+ titleEl: new HTMLElement(),
+ titleButtons: [{
+ iconClass: 'big',
+ iconUrl: 'http://url.com',
+ onClick: () => {
+ },
+ title: 'title'
+ }]
+ });
+
+ moleView.close();
+ const minimized: boolean = moleView.getMinimized();
+ moleView.setMinimized(true);
+ moleView.setTitle('title');
+ moleView.on('destroyed', () => {
+ });
+ moleView.on('minimize', () => {
+ });
+ moleView.on('restore', () => {
+ });
+
+ const drawerView = sdk.Widgets.showDrawerView({
+ chrome: true,
+ closeWithCompose: true,
+ el: new HTMLElement(),
+ title: 'title'
+ });
+
+ drawerView.close();
+ drawerView.disassociateComposeView();
+ drawerView.destroyed === true;
+ drawerView.on('destroyed', () => {
+ });
+ drawerView.on('slideAnimationDone', () => {
+ });
+ drawerView.on('closing', () => {
+ });
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const searchResults = [{
+ iconUrl: 'http://url.com',
+ onClick: () => {
+ },
+ description: 'desc',
+ externalURL: 'http://url.com',
+ name: 'name',
+ routeName: 'name',
+ routeParams: ['a', 'b']
+ }, {
+ iconUrl: 'http://url.com',
+ onClick: () => {
+ },
+ descriptionHTML: 'desc',
+ externalURL: 'http://url.com',
+ nameHTML: 'name',
+ routeName: 'name',
+ routeParams: ['a', 'b']
+ }];
+
+ sdk.Search.registerSearchSuggestionsProvider(query => searchResults);
+ sdk.Search.registerSearchSuggestionsProvider(query => Promise.resolve(searchResults));
+
+ sdk.Search.registerSearchQueryRewriter({
+ term: 'a',
+ termReplacer: () => 'b'
+ });
+
+ sdk.Search.registerSearchQueryRewriter({
+ term: 'a',
+ termReplacer: () => Promise.resolve('b')
+ });
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ sdk.User.getEmailAddress().toLowerCase();
+ sdk.User.isConversationViewDisabled() === true;
+ sdk.User.isUsingGmailMaterialUI() === true;
+ sdk.User.getLanguage().toLowerCase();
+ sdk.User.getAccountSwitcherContactList()[0].name.toLowerCase();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const panel = sdk.Global.addSidebarContentPanel({
+ el: new HTMLElement(),
+ title: 'title',
+ iconUrl: 'http://url.com'
+ });
+ panel.remove();
+});
+
+InboxSDK.load(1, '1234').then((sdk: InboxSDKInstance) => {
+ const handler = sdk.Keyboard.createShortcutHandle({
+ chord: 'a',
+ description: 'b'
+ });
+
+ handler.remove();
+});
diff --git a/types/inboxsdk/index.d.ts b/types/inboxsdk/index.d.ts
index 1dfb0de2f4..140df3f13d 100644
--- a/types/inboxsdk/index.d.ts
+++ b/types/inboxsdk/index.d.ts
@@ -1,6 +1,7 @@
// Type definitions for InboxSDK
// Project: https://www.inboxsdk.com/
// Definitions by: Raphaƫl Doursenaud
+// Amiram Korach
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/*
@@ -8,7 +9,7 @@
*/
export function load(version: number, appId?: string, opts?: LoadOptions): Promise;
-export function loadScript(url: string): Promise;
+export function loadScript(url: string, options?: LoadScriptOptions): Promise;
// // Undocummented
// var IMPL_VERSION: string;
@@ -22,20 +23,26 @@ export function loadScript(url: string): Promise;
interface LoadOptions {
appName?: string;
appIconUrl?: string;
+ suppressAddonTitle?: string;
+}
+
+interface LoadScriptOptions {
+ nowrap?: boolean;
}
export interface InboxSDKInstance {
- Compose: Compose.Compose;
+ Compose: Compose.ComposeInstance;
Lists: Lists.Lists;
Conversations: Conversations.Conversations;
Toolbars: Toolbars.Toolbars;
Router: Router.Router;
NavMenu: NavMenu.NavMenu;
- Widgets: Widgets.Widgets;
+ Widgets: Widgets.WidgetsInstance;
ButterBar: ButterBar.ButterBar;
Search: Search.Search;
User: User.User;
Keyboard: Keyboard.Keyboard;
+ Global: Global.Global;
}
declare namespace Common {
@@ -49,24 +56,35 @@ declare namespace Common {
close(): void;
+ reposition(): void;
+
el: HTMLElement;
destroyed: boolean;
- // TODO: Events
+ on(name: 'destroy', cb: () => void): void
+
+ on(name: 'preautoclose', cb: (event: PreAutoCloseEvent) => void): void
+ }
+
+ export interface PreAutoCloseEvent {
+ type: 'outsideInteraction' | 'escape',
+ cause: Event,
+
+ cancel(): void;
}
export interface PositionOptions {
- position?: string; //: null
- forcePosition?: boolean; //: false
- hAlign?: string; //: null
- forceHAlign?: boolean; //: false
- vAlign?: string; //: null
- forceVAlign?: boolean; //: false
- buffer?: number; //: 0
- topBuffer?: number; //:0
- bottomBuffer?: number; //: 0
- leftBuffer?: number; //:0
- rightBuffer?: number; //:0
+ position?: string;
+ forcePosition?: boolean;
+ hAlign?: string;
+ forceHAlign?: boolean;
+ vAlign?: string;
+ forceVAlign?: boolean;
+ buffer?: number;
+ topBuffer?: number;
+ bottomBuffer?: number;
+ leftBuffer?: number;
+ rightBuffer?: number;
}
export interface SimpleElementView {
@@ -74,12 +92,14 @@ declare namespace Common {
el: HTMLElement;
destroyed: boolean;
+
+ on(name: 'destroy', cb: () => void): void
}
}
declare namespace Compose {
- export interface Compose {
- registerComposeViewHandler(handler: (composeView: ComposeView) => void): Function;
+ export interface ComposeInstance {
+ registerComposeViewHandler(handler: (composeView: ComposeView) => void): () => void;
openNewComposeView(): Promise;
}
@@ -87,13 +107,11 @@ declare namespace Compose {
export interface ComposeView {
addButton(buttonDescriptor: ComposeButtonDescriptor): void;
- //addButton(buttonDescriptor: Stream): void;
-
addStatusBar(statusBarDescriptor: StatusBarDescriptor): StatusBarView;
close(): void;
- send(): void;
+ send(options?: SendOptions): void;
getBodyElement(): HTMLElement;
@@ -103,7 +121,7 @@ declare namespace Compose {
getDraftID(): Promise;
- getCurrentDraftID(): Promise;
+ getCurrentDraftID(): Promise;
getHTMLContent(): string;
@@ -123,12 +141,12 @@ declare namespace Compose {
insertTextIntoBodyAtCursor(text: string): void;
- insertHTMLIntoBodyAtCursor(html: string): HTMLElement;
-
- insertHTMLIntoBodyAtCursor(html: HTMLElement): HTMLElement;
+ insertHTMLIntoBodyAtCursor(html: string | HTMLElement): HTMLElement;
insertLinkChipIntoBodyAtCursor(text: string, url: string, iconUrl: string): HTMLElement;
+ insertLinkIntoBodyAtCursor(text: string, url: string): HTMLElement;
+
isInlineReplyForm(): boolean;
isFullscreen(): boolean;
@@ -141,6 +159,8 @@ declare namespace Compose {
popOut(): Promise;
+ setTitleBarColor(color: string): () => void;
+
isReply(): boolean;
setToRecipients(emails: string[]): void;
@@ -153,7 +173,7 @@ declare namespace Compose {
getFromContactChoices(): Common.Contact[];
- setFromEmail(email: string[]): void;
+ setFromEmail(email: string): void;
setSubject(text: string): void;
@@ -161,25 +181,52 @@ declare namespace Compose {
setBodyText(text: string): void;
- attachFiles(files: Blob[]): void;
+ attachFiles(files: Blob[]): Promise;
- attachInlineFiles(Files: Blob[]): void;
+ attachInlineFiles(Files: Blob[]): Promise;
- // TODO: Events
+ on(name: 'destroy', cb: (event: { messageID: string, closedByInboxSDK: boolean }) => void): void;
+
+ on(name: 'fullscreenChanged', cb: (event: { fullscreen: boolean }) => void): void;
+
+ on(name: 'fromContactChanged' | 'toContactAdded' | 'toContactRemoved' | 'ccContactAdded' | 'ccContactRemoved' | 'bccContactAdded' | 'bccContactRemoved',
+ cb: (event: { contact: Common.Contact }) => void): void;
+
+ on(name: 'recipientsChanged', cb: (event: RecipientsChangedEvent) => void): void;
+
+ on(name: 'presending', cb: (event: { cancel: () => void }) => void): void;
+
+ on(name: 'sent', cb: (event: { getThreadID: () => Promise, getMessageID: () => Promise }) => void): void;
+
+ on(name: 'discard' | 'sendCanceled' | 'sending' | 'bodyChanged' | 'minimized' | 'restored', cb: () => void): void;
- // Properties
destroyed: boolean;
}
+ interface RecipientsChangedEvent {
+ to: {
+ added: Common.Contact[],
+ removed: Common.Contact[]
+ },
+ cc: {
+ added: Common.Contact[],
+ removed: Common.Contact[]
+ },
+ bcc: {
+ added: Common.Contact[],
+ removed: Common.Contact[]
+ }
+ }
+
interface ComposeButtonDescriptor {
title: string;
- iconUrl?: string; //: null
- iconClass?: string; //: null
+ iconUrl?: string;
+ iconClass?: string;
onClick: (event: ComposeButtonClickEvent) => void;
- hasDropdown?: boolean; //: false
- type?: string; //: 'MODIFIER' // Permitted values SEND_ACTION, MODIFIER
- orderHint?: number; //: 0
- enabled?: boolean; //: true
+ hasDropdown?: boolean;
+ type?: 'MODIFIER' | 'SEND_ACTION';
+ orderHint?: number;
+ enabled?: boolean;
}
interface ComposeButtonClickEvent {
@@ -188,23 +235,22 @@ declare namespace Compose {
}
interface StatusBarDescriptor {
- height?: number; //:40
- orderHint?: number; //:0
+ height?: number;
+ orderHint?: number;
}
- interface StatusBarView {
- el: HTMLElement;
- destroyed: boolean;
+ interface StatusBarView extends Common.SimpleElementView {
+ setHeight(height: number): void;
+ }
- destroy(): void;
-
- // TODO: Events
+ interface SendOptions {
+ sendAndArchive?: boolean;
}
}
declare namespace Lists {
interface Lists {
- registerThreadRowViewHandler(handler: (threadRowView: ThreadRowView) => any): void;
+ registerThreadRowViewHandler(handler: (threadRowView: ThreadRowView) => any): () => void;
}
interface ThreadRowView {
@@ -240,9 +286,9 @@ declare namespace Lists {
getDateString(): string;
- getThreadID(): string;
+ getThreadIDAsync(): Promise;
- getThreadIDIfStable(): string;
+ getThreadIDIfStableAsync(): Promise;
getDraftID(): Promise;
@@ -252,27 +298,28 @@ declare namespace Lists {
getContacts(): Common.Contact[];
- // TODO: Events
+ on(name: 'destroyed', cb: () => void): void;
destroyed: boolean;
}
interface ThreadRowButtonDescriptor {
+ title: string;
iconUrl: string;
- iconClass?: string; //: ''
+ iconClass?: string;
onClick: (event: ThreadRowButtonClickEvent) => void;
- hasDropdown?: boolean; //: false
+ hasDropdown?: boolean;
}
interface ThreadRowButtonClickEvent {
threadRowView: ThreadRowView;
- dropdown: Common.DropdownView;
+ dropdown?: Common.DropdownView;
}
interface ThreadRowActionButtonDescriptor {
- type: ActionButtonTypes;
+ type: 'LINK';
title: string;
- className?: string; //: ''
+ className?: string;
onClick?: (event: ThreadRowActionButtonClickEvent) => void;
url: string;
}
@@ -283,50 +330,47 @@ declare namespace Lists {
interface LabelDescriptor {
title: string;
- foregroundColor?: string; //: ''
- backgroundColor?: string; //: ''
+ foregroundColor?: string;
+ backgroundColor?: string;
iconUrl: string;
- iconClass?: string; //: ''
+ iconClass?: string;
+ iconBackgroundColor?: string;
}
interface ImageDescriptor {
imageUrl: string;
- imageClass?: string; //: null
- tooltip?: string; //: null
- orderHint?: number; //: 0
+ imageClass?: string;
+ tooltip?: string;
+ orderHint?: number;
}
interface ThreadRowDateDescriptor {
text: string;
- textColor?: string; //: ''
- tooltip?: string; //: ''
+ textColor?: string;
+ tooltip?: string;
}
interface ThreadRowAttachmentIconDescriptor {
- iconUrl?: string; //: ''
- iconClass?: string; //: ''
- tooltip?: string; //: ''
+ iconUrl?: string;
+ iconClass?: string;
+ tooltip?: string;
}
interface ThreadRowDraftLabelDescriptor {
text: string;
- count?: string; //: 1
- }
-
- enum ActionButtonTypes {
- LINK
+ count?: string;
}
}
declare namespace Conversations {
interface Conversations {
- registerThreadViewHandler(handler: (threadView: ThreadView) => void): void;
+ registerThreadViewHandler(handler: (threadView: ThreadView) => void): () => void;
- registerMessageViewHandler(handler: (messageView: MessageView) => void): void;
+ registerMessageViewHandler(handler: (messageView: MessageView) => void): () => void;
- registerMessageViewHandlerAll(handler: (messageView: MessageView) => void): void;
+ registerMessageViewHandlerAll(handler: (messageView: MessageView) => void): () => void;
- registerFileAttachmentCardViewHandler(handler: (attachmentCardView: AttachmentCardView) => void): void;
+ registerFileAttachmentCardViewHandler(handler: (attachmentCardView: AttachmentCardView) => void): () => void;
}
interface ThreadView {
@@ -340,7 +384,7 @@ declare namespace Conversations {
getSubject(): string;
- getThreadID(): string;
+ getThreadIDAsync(): Promise;
on(name: 'contactHover', cb: (event: ContactHoverEvent) => void): void
@@ -357,17 +401,15 @@ declare namespace Conversations {
}
interface MessageView {
- addAttachmentCardView(cardOptions: AttachmentCardOptions): AttachmentCardView;
+ addAttachmentCardView(cardOptions: AttachmentCardOptions | AttachmentCardNoPreviewOptions): AttachmentCardView;
- addAttachmentCardView(cardOptions: AttachmentCardNoPreviewOptions): AttachmentCardView;
-
- addaAttachmentsToolbarButton(buttonOptions: AttachmentsToolbarButtonDescriptor): void;
+ addAttachmentsToolbarButton(buttonOptions: AttachmentsToolbarButtonDescriptor): void;
addToolbarButton(options: MessageViewToolbarButtonDescriptor): void;
getBodyElement(): HTMLElement;
- getMessageID(): string;
+ getMessageIDAsync(): Promise;
getFileAttachmentCardViews(): AttachmentCardView[];
@@ -375,11 +417,13 @@ declare namespace Conversations {
isLoaded(): boolean;
- getLinksInbody(): MessageViewLinkDescriptor[];
+ getLinksInBody(): MessageViewLinkDescriptor[];
getSender(): Common.Contact;
- getRecipients(): Common.Contact[];
+ getRecipientEmailAddresses(): string[];
+
+ getRecipientsFull(): Promise;
getThreadView(): ThreadView;
@@ -391,15 +435,27 @@ declare namespace Conversations {
getViewState(): MessageViewViewStates;
- // TODO: Events
+ on(name: 'viewStateChange', cb: (event: { newViewState: MessageViewViewStates, oldViewState: MessageViewViewStates, messageView: MessageView }) => void): void;
+
+ on(name: 'contactHover', cb: (event: ContactHoverEvent) => void): void;
+
+ on(name: 'load', cb: () => void): void;
+
+ on(name: 'destroy', cb: () => void): void;
destroyed: boolean;
}
+ type MessageViewViewStates = 'HIDDEN' | 'COLLAPSED' | 'EXPANDED';
+
interface ContentPanelView {
remove(): void;
- // TODO: Events
+ on(name: 'activate', cb: () => void): void;
+
+ on(name: 'deactivate', cb: () => void): void;
+
+ on(name: 'destroy', cb: () => void): void;
destroyed: boolean;
}
@@ -411,12 +467,14 @@ declare namespace Conversations {
getTitle(): string;
+ /**
+ * @deprecated. Use AttachmentCardClickEvent.getDownloadURL() instead
+ */
getDownloadURL(): Promise;
- getMessageView(): void; // TODO: null is not a type?
- getMessageView(): MessageView;
+ getMessageView(): MessageView | null;
- // TODO: Events
+ on(name: 'destroy', cb: () => void): void;
destroyed: boolean;
}
@@ -431,9 +489,9 @@ declare namespace Conversations {
failoverPreviewIconUrl: string;
previewOnClick: (event: PreviewClickEvent) => void;
fileIconImageUrl: string;
- buttons: DownloadButtonDescriptor[] | CustomButtonDescriptor[];
- foldColor?: string; //: #BEBEBE
- mimeType?: string; //: null
+ buttons: (DownloadButtonDescriptor | CustomButtonDescriptor)[];
+ foldColor?: string;
+ mimeType?: string;
}
interface AttachmentCardNoPreviewOptions {
@@ -443,8 +501,8 @@ declare namespace Conversations {
iconThumbnailUrl: string;
previewOnClick: (event: PreviewClickEvent) => void;
fileIconImageUrl: string;
- buttons: DownloadButtonDescriptor[] | CustomButtonDescriptor[];
- foldColor?: string; //: #BEBEBE
+ buttons: (DownloadButtonDescriptor | CustomButtonDescriptor)[];
+ foldColor?: string;
}
interface PreviewClickEvent {
@@ -457,13 +515,18 @@ declare namespace Conversations {
el: HTMLElement;
title: string;
iconUrl: string;
- orderHint?: number; //: 0
+ appName?: string;
+ appIconUrl?: string;
+ id?: string;
+ hideTitleBar?: boolean;
+ orderHint?: number;
}
interface DownloadButtonDescriptor {
downloadUrl: string;
+ downloadFilename?: string;
onClick: (event: DownloadButtonClickEvent) => void;
- openInNewTab?: boolean; //: false
+ openInNewTab?: boolean;
}
interface DownloadButtonClickEvent {
@@ -477,7 +540,7 @@ declare namespace Conversations {
}
interface AttachmentCardClickEvent {
- // FIXME: testme, AttachmentCardClickEvent not documented
+ getDownloadURL(): Promise;
}
interface AttachmentsToolbarButtonDescriptor {
@@ -500,34 +563,36 @@ declare namespace Conversations {
interface MessageAttachmentIconDescriptor {
iconUrl: string;
- iconClass?: string; //: 'MODIFIER'
+ iconClass?: string;
tooltip: string;
- onClick: () => any; // TODO: check any?
+ onClick?: () => void;
}
interface MessageViewToolbarButtonDescriptor {
section: 'MORE';
title: string;
iconUrl: string;
- onClick: () => any;
+ onClick: () => void;
iconClass?: string;
- orderHint?: number;
- }
-
- enum MessageViewViewStates {
- HIDDEN,
- COLLAPSED,
- EXPANDED
+ orderHint: number;
}
}
declare namespace Toolbars {
interface Toolbars {
- registerThreadButton(toolbarButtonDescriptor: ToolbarButtonDescriptor): void;
+ registerThreadButton(toolbarButtonDescriptor: ToolbarButtonDescriptor): () => void;
- registerToolbarButtonForList(toolbarButtonDescriptor: ToolbarButtonDescriptor): void;
+ /**
+ * @deprecated. use registerThreadButton
+ * @param toolbarButtonDescriptor
+ */
+ registerToolbarButtonForList(toolbarButtonDescriptor: ToolbarButtonDescriptor): () => void;
- registerToolbarButtonForThreadView(toolbarButtonDescriptor: ToolbarButtonDescriptor): void;
+ /**
+ * @deprecated. use registerThreadButton
+ * @param toolbarButtonDescriptor
+ */
+ registerToolbarButtonForThreadView(toolbarButtonDescriptor: ToolbarButtonDescriptor): () => void;
addToolbarButtonForApp(appToolbarButtonDescriptor: AppToolbarButtonDescriptor): AppToolbarButtonView;
}
@@ -535,28 +600,33 @@ declare namespace Toolbars {
interface ToolbarButtonDescriptor {
title: string;
onClick: (event: ToolbarButtonEvent) => void;
- iconUrl?: string; //: null
- iconClass?: string; //: null
- section?: SectionNames;
- hasDropdown?: boolean //: false
- hideFor?: (routeView: Router.RouteView) => void; //: null
- keyboardShortcutHandle?: Keyboard.KeyboardShortcutHandle; //: null
+ iconUrl?: string;
+ iconClass?: string;
+ positions: ToolbarButtonPosition[]
+ threadSection?: SectionNames;
+ listSection?: SectionNames;
+ hasDropdown?: boolean;
+ hideFor?: (routeView: Router.RouteView) => void;
+ orderHint?: number;
+ keyboardShortcutHandle?: Keyboard.KeyboardShortcutHandle;
}
+ type ToolbarButtonPosition = 'THREAD' | 'ROW' | 'LIST';
+
interface ToolbarButtonEvent {
+ position: ToolbarButtonPosition;
selectedThreadRowViews: Lists.ThreadRowView[];
- threadRowViews: Lists.ThreadRowView[];
- threadView: Conversations.ThreadView;
- dropdown: Common.DropdownView;
+ selectedThreadViews: Conversations.ThreadView[];
+ dropdown?: Common.DropdownView;
}
interface AppToolbarButtonDescriptor {
title: string;
- titleClass?: string; //: null
+ titleClass?: string;
iconUrl: string;
- iconClass?: string; //: null
+ iconClass?: string;
onClick: (event: AppToolbarButtonEvent) => void;
- arrowColor?: string; //: null
+ arrowColor?: string;
}
interface AppToolbarButtonView {
@@ -575,45 +645,61 @@ declare namespace Toolbars {
dropdown: Common.DropdownView;
}
- enum SectionNames {
- INBOX_STATE,
- METADATA_STATE,
- OTHER
- }
+ type SectionNames = 'INBOX_STATE' | 'METADATA_STATE' | 'OTHER';
}
declare namespace Router {
interface Router {
- createLink(routeID: string, params: Object): string;
+ createLink(routeID: string | NativeRouteIDs, params: RouteParams): string;
- goto(routeID: string, params: Object): void;
+ goto(routeID: string | NativeRouteIDs, params: RouteParams): void;
- handleCustomRoute(routeID: string, handler: (customRouteView: CustomRouteView) => void): Function;
+ handleCustomRoute(routeID: string, handler: (customRouteView: CustomRouteView) => void): () => void;
- handleAllRoutes(handler: (routeView: RouteView) => Function): Function;
+ handleAllRoutes(handler: (routeView: RouteView) => void): () => void;
- handleListRoute(routeID: NativeListRouteIDs, handler: (listRouteView: ListRouteView) => Function): Function;
+ handleListRoute(routeID: NativeListRouteIDs, handler: (listRouteView: ListRouteView) => void): () => void;
- handleCustomListRoute(routeID: string, handler: () => string[]): Function; // Array of ThreadIDs
- handleCustomListRoute(routeID: string, handler: () => Promise): Function; // Promise for an array of ThreadIDs
+ handleCustomListRoute(routeID: string, handler: (offset: number, max: number) => CustomListDescriptor | Promise): () => void;
getCurrentRouteView(): RouteView;
}
+ interface CustomListDescriptor {
+ threads: (ThreadDescriptor | string)[];
+ total?: number;
+ hasMore?: boolean;
+ }
+
+ interface ThreadDescriptor {
+ rfcMessageId?: string;
+ gmailThreadId?: string;
+ }
+
+ interface RouteParams {
+ [key: number]: string | number;
+
+ [key: string]: string | number;
+ }
+
interface RouteView {
getRouteID(): string;
- getRouteType(): string;
+ getRouteType(): RouteTypes;
- getParams(): string;
+ getParams(): RouteParams;
- // TODO: Events
+ on(name: 'destroy', cb: () => void): void;
destroyed: boolean;
}
+ type RouteTypes = 'LIST' | 'THREAD' | 'SETTINGS' | 'CHAT' | 'CUSTOM' | 'UNKNOWN';
+
interface CustomRouteView extends RouteView {
getElement(): HTMLElement;
+
+ setFullWidth(fullWidth: boolean): void;
}
interface ListRouteView extends RouteView {
@@ -646,15 +732,15 @@ declare namespace Router {
interface SectionDescriptor {
title: string;
- subtitle?: string; //: null
- titleLinkText?: string; //: null
- onTitleLinkClick?: () => any; //: null // TODO: check any?
- hasDropdown?: boolean; //: false
- onDropdownClick?: (event: SectionDropdownClickEvent) => any; //: null // TODO: check any?
- tableRows?: RowDescriptor[]; //: null
- contentElement?: HTMLElement; //:null
- footerLinkText?: string; //: null
- onFooterLinkClick?: (event: SectionFooterLinkClickEvent) => any //: null // TODO: check any?
+ subtitle?: string;
+ titleLinkText?: string;
+ onTitleLinkClick?: () => void;
+ hasDropdown?: boolean;
+ onDropdownClick?: (event: SectionDropdownClickEvent) => void;
+ tableRows?: RowDescriptor[];
+ contentElement?: HTMLElement;
+ footerLinkText?: string;
+ onFooterLinkClick?: (event: SectionFooterLinkClickEvent) => void;
}
interface SectionDropdownClickEvent {
@@ -671,61 +757,50 @@ declare namespace Router {
shortDetailText: string;
isRead: string;
labels: Lists.LabelDescriptor[];
- iconUrl?: string; //: null
- iconClass?: string; //: null
- routeID?: string; //: null
- routeParams?: string; //: null
- onClick?: () => any; //: null
+ iconUrl?: string;
+ iconClass?: string;
+ routeID?: string;
+ routeParams?: string[];
+ onClick?: () => void;
}
- enum NativeRouteIDs {
- INBOX,
- ALL_MAIL,
- SENT,
- STARRED,
- DRAFTS,
- SNOOZED,
- DONE,
- REMINDERS,
- LABEL,
- TRASH,
- SPAM,
- IMPORTANT,
- SEARCH,
- THREAD,
- CHATS,
- CHAT,
- CONTACTS,
- CONTACT,
- SETTINGS,
- ANY_LIST
- }
+ type NativeRouteIDs =
+ 'INBOX' |
+ 'ALL_MAIL' |
+ 'SENT' |
+ 'STARRED' |
+ 'DRAFTS' |
+ 'SNOOZED' |
+ 'DONE' |
+ 'REMINDERS' |
+ 'LABEL' |
+ 'TRASH' |
+ 'SPAM' |
+ 'IMPORTANT' |
+ 'SEARCH' |
+ 'THREAD' |
+ 'CHATS' |
+ 'CHAT' |
+ 'CONTACTS' |
+ 'CONTACT' |
+ 'SETTINGS' |
+ 'ANY_LIST';
- enum NativeListRouteIDs {
- INBOX,
- ALL_MAIL,
- SENT,
- STARRED,
- DRAFTS,
- SNOOZED,
- DONE,
- REMINDERS,
- LABEL,
- TRASH,
- SPAM,
- IMPORTANT,
- SEARCH,
- ANY_LIST
- }
-
- enum RouteTypes {
- LIST,
- THREAD,
- SETTINGS,
- CHAT,
- CUSTOM,
- UNKNOWN
- }
+ type NativeListRouteIDs =
+ 'INBOX'
+ | 'ALL_MAIL'
+ | 'SENT'
+ | 'STARRED'
+ | 'DRAFTS'
+ | 'SNOOZED'
+ | 'DONE'
+ | 'REMINDERS'
+ | 'LABEL'
+ | 'TRASH'
+ | 'SPAM'
+ | 'IMPORTANT'
+ | 'SEARCH'
+ | 'ANY_LIST';
}
declare namespace NavMenu {
@@ -742,38 +817,44 @@ declare namespace NavMenu {
setCollapsed(collapseValue: boolean): void;
- // TODO: Events
+ on(name: 'destroy', cb: () => void): void;
destroyed: boolean;
}
interface NavItemDescriptor {
name: string;
- routeId?: string; //: null
- routeParams?: Object; //: null
- orderHint?: number; //: Number.MAX_SAFE_INTEGER // FIXME: integer
- accessory?: CreateAccessoryDescriptor | IconButtonAccessoryDescriptor | DropdownButtonAccessoryDescriptor; //: null
- iconUrl?: string; //: null
- iconClass?: string; //: null
+ routeID?: string;
+ routeParams?: Object;
+
+ onClick?: (event: { preventDefault(): void }) => void;
+
+ orderHint?: number;
+ accessory?: CreateAccessoryDescriptor | IconButtonAccessoryDescriptor | DropdownButtonAccessoryDescriptor;
+ iconUrl?: string;
+ iconClass?: string;
+ backgroundColor?: string;
+ expanderForegroundColor?: string;
+ type?: NavItemTypes;
}
interface CreateAccessoryDescriptor {
- type: string; //: 'CREATE'
- onClick: () => any; // TODO: check any?
+ type: 'CREATE';
+ onClick: () => void;
}
interface IconButtonAccessoryDescriptor {
- type: string; //: 'ICON_BUTTON'
- onClick: () => any; // TODO: check any?
+ type: 'ICON_BUTTON';
+ onClick: () => void;
iconUrl: string;
- iconClass?: string; //: null
+ iconClass?: string;
}
interface DropdownButtonAccessoryDescriptor {
- type: string; //: 'DROPDOWN_BUTTON'
+ type: 'DROPDOWN_BUTTON';
buttonBackgroundColor: string;
buttonForegroundColor: string;
- onClick: (event: DropdownButtonClickEvent) => any; // TODO: check any?
+ onClick: (event: DropdownButtonClickEvent) => void;
}
interface DropdownButtonClickEvent {
@@ -781,10 +862,7 @@ declare namespace NavMenu {
}
// Undocumented
- enum NavItemTypes {
- MANAGE,
- NAVIGATION
- }
+ type NavItemTypes = 'MANAGE' | 'NAVIGATION';
// Undocumented
var SENT_MAIL: Object;
@@ -792,7 +870,7 @@ declare namespace NavMenu {
declare namespace Widgets {
- interface Widgets {
+ interface WidgetsInstance {
showModalView(options: ModalOptions): ModalView;
showMoleView(options: MoleOptions): MoleView;
@@ -802,49 +880,51 @@ declare namespace Widgets {
interface ModalOptions {
el: HTMLElement;
- chrome?: boolean; //: true
- showCloseButton?: boolean; //: false
- title?: string; //: ''
- buttons?: ModalButtonDescriptor[]; // []
+ chrome?: boolean;
+ constrainTitleWidth?: boolean;
+ showCloseButton?: boolean;
+ title?: string;
+ buttons?: ModalButtonDescriptor[];
}
interface ModalButtonDescriptor {
text: string;
title: string;
- onClick: () => any; // TODO: check any?
- type?: string; //: 'SECONDARY_ACTION'
- orderHint?: number; //: 0
+ onClick: () => void;
+ type?: 'PRIMARY_ACTION' | 'SECONDARY_ACTION';
+ color?: string;
+ orderHint?: number;
}
interface MoleOptions {
el: HTMLElement;
- title?: string; //: ''
- titleEl?: HTMLElement; //: null
- minimizedTitleEl?: HTMLElement; //: null
- className?: string; //: ''
- titleButtons?: MoleButtonDescriptor[]; //: []
- chrome?: boolean; //: false
+ title?: string;
+ titleEl?: HTMLElement;
+ minimizedTitleEl?: HTMLElement;
+ className?: string;
+ titleButtons?: MoleButtonDescriptor[];
+ chrome?: boolean;
}
interface MoleButtonDescriptor {
title: string;
iconUrl: string;
- iconClass?: string; //: ''
- onClick: () => any; // TODO: check any?
+ iconClass?: string;
+ onClick: () => void;
}
interface DrawerOptions {
el: HTMLElement;
- chrome?: boolean; //: true
- title?: string; //: ''
- composeView?: Compose.ComposeView; //: null
- closeWithCompose?: boolean; //: false
+ chrome?: boolean;
+ title?: string;
+ composeView?: Compose.ComposeView;
+ closeWithCompose?: boolean;
}
interface ModalView {
close(): void;
- // TODO: Events
+ on(name: 'destroyed', cb: () => void): void;
destroyed: boolean;
}
@@ -858,7 +938,7 @@ declare namespace Widgets {
getMinimized(): boolean;
- // TODO: Events
+ on(name: 'destroyed' | 'minimize' | 'restore', cb: () => void): void;
destroyed: boolean;
}
@@ -868,7 +948,9 @@ declare namespace Widgets {
associateComposeView(composeView: Compose.ComposeView, closeWithCompose: boolean): void;
- // TODO: Events
+ disassociateComposeView(): void;
+
+ on(name: 'destroyed' | 'slideAnimationDone' | 'closing', cb: () => void): void;
destroyed: boolean;
}
@@ -890,12 +972,12 @@ declare namespace ButterBar {
}
interface MessageDescriptorBase {
- className?: string; //: ''
- priority?: number; //: 0
- time?: number; //: 15000
- hideOnViewChanged?: boolean; //: true
- persistent?: boolean; //: false
- messageKey?: Object; //: null
+ className?: string;
+ priority?: number;
+ time?: number;
+ hideOnViewChanged?: boolean;
+ persistent?: boolean;
+ messageKey?: Object;
}
interface MessageDescriptorText extends MessageDescriptorBase {
@@ -912,17 +994,28 @@ declare namespace ButterBar {
type MessageDescriptor = MessageDescriptorText | MessageDescriptorHtml | MessageDescriptorHtmlElement;
- interface SavingMessageDescriptor {
- text?: string; //: 'Saving...'
- confirmationText?: string; //: 'Saved'
- priority?: number; //: 0
- time?: number; //: Infinity
- confirmationTime?: number; //: 1000
- showConfirmation?: boolean; //: true
- hideOnViewChanged?: boolean; //: true
- persistent?: boolean; //: true
- messageKey?: Object; //: null
+ interface SavingMessageDescriptorBase extends MessageDescriptorBase {
+ confirmationText?: string;
+ confirmationTime?: number;
+ showConfirmation?: boolean;
}
+
+ interface SavingMessageDescriptorText extends SavingMessageDescriptorBase {
+ text: string;
+ }
+
+ interface SavingMessageDescriptorHtml extends SavingMessageDescriptorBase {
+ html: string;
+ }
+
+ interface SavingMessageDescriptorHtmlElement extends SavingMessageDescriptorBase {
+ el: HTMLElement;
+ }
+
+ type SavingMessageDescriptor =
+ SavingMessageDescriptorText
+ | SavingMessageDescriptorHtml
+ | SavingMessageDescriptorHtmlElement;
}
declare namespace Search {
@@ -937,6 +1030,7 @@ declare namespace Search {
routeName?: string;
routeParams?: string[]
externalURL?: string;
+ onClick?: () => void;
}
interface AutocompleteSearchResultText extends AutocompleteSearchResultBase {
@@ -953,7 +1047,7 @@ declare namespace Search {
interface SearchQueryRewriter {
term: string;
- termReplacer: () => any; // TODO: check any? // FIXME: function can take a string or a Promise
+ termReplacer: () => string | Promise;
}
}
@@ -961,6 +1055,12 @@ declare namespace User {
interface User {
getEmailAddress(): string;
+ isUsingGmailMaterialUI(): boolean;
+
+ isConversationViewDisabled(): boolean;
+
+ getLanguage(): string;
+
getAccountSwitcherContactList(): Common.Contact[];
}
}
@@ -979,3 +1079,9 @@ declare namespace Keyboard {
description: string;
}
}
+
+declare namespace Global {
+ interface Global {
+ addSidebarContentPanel(contentPanelDescriptor: Conversations.ContentPanelDescriptor): Conversations.ContentPanelView;
+ }
+}
\ No newline at end of file