diff --git a/types/inboxsdk/inboxsdk-tests.ts b/types/inboxsdk/inboxsdk-tests.ts new file mode 100644 index 0000000000..a763674c73 --- /dev/null +++ b/types/inboxsdk/inboxsdk-tests.ts @@ -0,0 +1,815 @@ +import ComposeView = InboxSDK.Compose.ComposeView; +import Contact = InboxSDK.Common.Contact; +import ThreadRowView = InboxSDK.Lists.ThreadRowView; +import ThreadView = InboxSDK.Conversations.ThreadView; +import SimpleElementView = InboxSDK.Common.SimpleElementView; +import ContentPanelView = InboxSDK.Conversations.ContentPanelView; +import MessageView = InboxSDK.Conversations.MessageView; +import AttachmentCardView = InboxSDK.Conversations.AttachmentCardView; +import AttachmentCardClickEvent = InboxSDK.Conversations.AttachmentCardClickEvent; +import MessageViewLinkDescriptor = InboxSDK.Conversations.MessageViewLinkDescriptor; +import SectionDescriptor = InboxSDK.Router.SectionDescriptor; +import NavItemDescriptor = InboxSDK.NavMenu.NavItemDescriptor; + +InboxSDK.load(1, '1234').then((_sdk: InboxSDK.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: InboxSDK.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: InboxSDK.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: InboxSDK.Common.Contact = composeView.getFromContact(); + const fromContacts: InboxSDK.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: InboxSDK.Common.Contact = event.contact; + }); + + composeView.on('toContactAdded', event => { + const c: InboxSDK.Common.Contact = event.contact; + }); + + composeView.on('toContactRemoved', event => { + const c: InboxSDK.Common.Contact = event.contact; + }); + + composeView.on('ccContactAdded', event => { + const c: InboxSDK.Common.Contact = event.contact; + }); + + composeView.on('ccContactRemoved', event => { + const c: InboxSDK.Common.Contact = event.contact; + }); + + composeView.on('bccContactAdded', event => { + const c: InboxSDK.Common.Contact = event.contact; + }); + + composeView.on('bccContactRemoved', event => { + const c: InboxSDK.Common.Contact = event.contact; + }); + + composeView.on('recipientsChanged', event => { + let c: InboxSDK.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: InboxSDK.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: InboxSDK.Common.Contact[] = threadRowView.getContacts(); + + threadRowView.on('destroyed', () => console.log()); + + const destroyed: boolean = threadRowView.destroyed; + }); + + unregister(); +}); + +InboxSDK.load(1, '1234').then((sdk: InboxSDK.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: InboxSDK.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(); + const isInQuotedArea: boolean = links[0].isInQuotedArea; + 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: InboxSDK.InboxSDKInstance) => { + const unregister = sdk.Conversations.registerMessageViewHandlerAll((messageView: MessageView) => { + const isLoaded: boolean = messageView.isLoaded(); + }); + + unregister(); +}); + +InboxSDK.load(1, '1234').then((sdk: InboxSDK.InboxSDKInstance) => { + const unregister = sdk.Conversations.registerFileAttachmentCardViewHandler((attachmentCardView: AttachmentCardView) => { + const messageView: MessageView | null = attachmentCardView.getMessageView(); + }); + + unregister(); +}); + +InboxSDK.load(1, '1234').then((sdk: InboxSDK.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: InboxSDK.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: InboxSDK.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: InboxSDK.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', () => { + }); + const destroyed: boolean = modalView.destroyed; + + 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(); + const destroyed1: boolean = drawerView.destroyed; + drawerView.on('destroyed', () => { + }); + drawerView.on('slideAnimationDone', () => { + }); + drawerView.on('closing', () => { + }); +}); + +InboxSDK.load(1, '1234').then((sdk: InboxSDK.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: InboxSDK.InboxSDKInstance) => { + sdk.User.getEmailAddress().toLowerCase(); + const isConversationViewDisabled: boolean = sdk.User.isConversationViewDisabled(); + const isUsingGmailMaterialUI: boolean = sdk.User.isUsingGmailMaterialUI(); + sdk.User.getLanguage().toLowerCase(); + sdk.User.getAccountSwitcherContactList()[0].name.toLowerCase(); +}); + +InboxSDK.load(1, '1234').then((sdk: InboxSDK.InboxSDKInstance) => { + const panel = sdk.Global.addSidebarContentPanel({ + el: new HTMLElement(), + title: 'title', + iconUrl: 'http://url.com' + }); + panel.remove(); +}); + +InboxSDK.load(1, '1234').then((sdk: InboxSDK.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 new file mode 100644 index 0000000000..66b696e05a --- /dev/null +++ b/types/inboxsdk/index.d.ts @@ -0,0 +1,1073 @@ +// Type definitions for InboxSDK 2.0 +// Project: https://www.inboxsdk.com/ +// Definitions by: Raphaƫl Doursenaud +// Amiram Korach +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 + +/* + * Copyright (c) 2016 GPC.solutions + * Copyright (c) 2018 https://propelmypr.com + */ + +// tslint:disable-next-line:export-just-namespace +export = InboxSDK; +export as namespace InboxSDK; + +declare namespace InboxSDK { + function load(version: number, appId?: string, opts?: LoadOptions): Promise; + + function loadScript(url: string, options?: LoadScriptOptions): Promise; + +// // Undocummented +// var IMPL_VERSION: string; +// var LOADER_VERSION: string; +// var destroyed: boolean; //: false +// var Logger: { +// error: () => any; +// event: () => any; +// }; + + interface LoadOptions { + appName?: string; + appIconUrl?: string; + suppressAddonTitle?: string; + } + + interface LoadScriptOptions { + nowrap?: boolean; + } + + interface InboxSDKInstance { + Compose: Compose.ComposeInstance; + Lists: Lists.ListsInstance; + Conversations: Conversations.ConversationsInstance; + Toolbars: Toolbars.ToolbarsInstance; + Router: Router.RouterInstance; + NavMenu: NavMenu.NavMenuInstance; + Widgets: Widgets.WidgetsInstance; + ButterBar: ButterBar.ButterBarInstance; + Search: Search.SearchInstance; + User: User.UserInstance; + Keyboard: Keyboard.KeyboardInstance; + Global: Global.GlobalInstance; + } + + namespace Common { + interface Contact { + name: string; + emailAddress: string; + } + + interface DropdownView { + setPlacementOptions(options: PositionOptions): void; + + close(): void; + + reposition(): void; + + el: HTMLElement; + destroyed: boolean; + + on(name: 'destroy', cb: () => void): void; + + on(name: 'preautoclose', cb: (event: PreAutoCloseEvent) => void): void; + } + + interface PreAutoCloseEvent { + type: 'outsideInteraction' | 'escape'; + cause: Event; + + cancel(): void; + } + + interface PositionOptions { + position?: string; + forcePosition?: boolean; + hAlign?: string; + forceHAlign?: boolean; + vAlign?: string; + forceVAlign?: boolean; + buffer?: number; + topBuffer?: number; + bottomBuffer?: number; + leftBuffer?: number; + rightBuffer?: number; + } + + interface SimpleElementView { + destroy(): void; + + el: HTMLElement; + destroyed: boolean; + + on(name: 'destroy', cb: () => void): void; + } + } + + export namespace Compose { + interface ComposeInstance { + registerComposeViewHandler(handler: (composeView: ComposeView) => void): () => void; + + openNewComposeView(): Promise; + } + + interface ComposeView { + addButton(buttonDescriptor: ComposeButtonDescriptor): void; + + addStatusBar(statusBarDescriptor: StatusBarDescriptor): StatusBarView; + + close(): void; + + send(options?: SendOptions): void; + + getBodyElement(): HTMLElement; + + getInitialMessageID(): string; + + getThreadID(): string; + + getDraftID(): Promise; + + getCurrentDraftID(): Promise; + + getHTMLContent(): string; + + getSelectedBodyHTML(): string; + + getSelectedBodyText(): string; + + getSubject(): string; + + getTextContent(): string; + + getToRecipients(): Common.Contact[]; + + getCcRecipients(): Common.Contact[]; + + getBccRecipients(): Common.Contact[]; + + insertTextIntoBodyAtCursor(text: string): void; + + insertHTMLIntoBodyAtCursor(html: string | HTMLElement): HTMLElement; + + insertLinkChipIntoBodyAtCursor(text: string, url: string, iconUrl: string): HTMLElement; + + insertLinkIntoBodyAtCursor(text: string, url: string): HTMLElement; + + isInlineReplyForm(): boolean; + + isFullscreen(): boolean; + + setFullscreen(minimized: boolean): void; + + isMinimized(): boolean; + + setMinimized(minimized: boolean): void; + + popOut(): Promise; + + setTitleBarColor(color: string): () => void; + + isReply(): boolean; + + setToRecipients(emails: string[]): void; + + setCcRecipients(emails: string[]): void; + + setBccRecipients(emails: string[]): void; + + getFromContact(): Common.Contact; + + getFromContactChoices(): Common.Contact[]; + + setFromEmail(email: string): void; + + setSubject(text: string): void; + + setBodyHTML(html: string): void; + + setBodyText(text: string): void; + + attachFiles(files: Blob[]): Promise; + + attachInlineFiles(Files: Blob[]): Promise; + + 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; + + 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; + iconClass?: string; + onClick: (event: ComposeButtonClickEvent) => void; + hasDropdown?: boolean; + type?: 'MODIFIER' | 'SEND_ACTION'; + orderHint?: number; + enabled?: boolean; + } + + interface ComposeButtonClickEvent { + composeView: ComposeView; + dropdown: Common.DropdownView; + } + + interface StatusBarDescriptor { + height?: number; + orderHint?: number; + } + + interface StatusBarView extends Common.SimpleElementView { + setHeight(height: number): void; + } + + interface SendOptions { + sendAndArchive?: boolean; + } + } + + export namespace Lists { + interface ListsInstance { + registerThreadRowViewHandler(handler: (threadRowView: ThreadRowView) => any): () => void; + } + + interface ThreadRowView { + addLabel(labelDescriptor: LabelDescriptor): void; + + // addLabel(labelDescriptor: Stream): void; + + addImage(imageDescriptor: ImageDescriptor): void; + + // addImage(imageDescriptor: Stream): void; + + addButton(buttonDescriptor: ThreadRowButtonDescriptor): void; + + // addButton(buttonDescriptor: Stream): void; + + addActionButton(buttonDescriptor: ThreadRowActionButtonDescriptor): void; + + // addActionButton(buttonDescriptor: Stream): void; + + addAttachmentIcon(threadRowAttachmentIconDescriptor: ThreadRowAttachmentIconDescriptor): void; + + // addAttachmentIcon(threadRowAttachmentIconDescriptor: stream): void + + replaceDate(threadRowDateDescriptor: ThreadRowDateDescriptor): void; + + // replaceDate(threadRowDateDescriptor: Stream): void; + + replaceDraftLabel(draftLabelDescriptor: ThreadRowDraftLabelDescriptor): void; + + // replaceDraftLabel(draftLabelDescriptor: Stream): void; + + getSubject(): string; + + getDateString(): string; + + getThreadIDAsync(): Promise; + + getThreadIDIfStableAsync(): Promise; + + getDraftID(): Promise; + + getVisibleDraftCount(): number; + + getVisibleMessageCount(): number; + + getContacts(): Common.Contact[]; + + on(name: 'destroyed', cb: () => void): void; + + destroyed: boolean; + } + + interface ThreadRowButtonDescriptor { + title: string; + iconUrl: string; + iconClass?: string; + onClick: (event: ThreadRowButtonClickEvent) => void; + hasDropdown?: boolean; + } + + interface ThreadRowButtonClickEvent { + threadRowView: ThreadRowView; + dropdown?: Common.DropdownView; + } + + interface ThreadRowActionButtonDescriptor { + type: 'LINK'; + title: string; + className?: string; + onClick?: (event: any) => void; + url: string; + } + + interface LabelDescriptor { + title: string; + foregroundColor?: string; + backgroundColor?: string; + iconUrl: string; + iconClass?: string; + iconBackgroundColor?: string; + } + + interface ImageDescriptor { + imageUrl: string; + imageClass?: string; + tooltip?: string; + orderHint?: number; + } + + interface ThreadRowDateDescriptor { + text: string; + textColor?: string; + tooltip?: string; + } + + interface ThreadRowAttachmentIconDescriptor { + iconUrl?: string; + iconClass?: string; + tooltip?: string; + } + + interface ThreadRowDraftLabelDescriptor { + text: string; + count?: string; + } + } + + export namespace Conversations { + interface ConversationsInstance { + registerThreadViewHandler(handler: (threadView: ThreadView) => void): () => void; + + registerMessageViewHandler(handler: (messageView: MessageView) => void): () => void; + + registerMessageViewHandlerAll(handler: (messageView: MessageView) => void): () => void; + + registerFileAttachmentCardViewHandler(handler: (attachmentCardView: AttachmentCardView) => void): () => void; + } + + interface ThreadView { + addNoticeBar(): Common.SimpleElementView; + + addSidebarContentPanel(contentPanelDescriptor: ContentPanelDescriptor): ContentPanelView; + + getMessageViews(): MessageView[]; + + getMessageViewsAll(): MessageView[]; + + getSubject(): string; + + getThreadIDAsync(): Promise; + + on(name: 'contactHover', cb: (event: ContactHoverEvent) => void): void; + + on(name: 'destroy', cb: () => void): void; + + destroyed: boolean; + } + + interface ContactHoverEvent { + contact: Common.Contact; + contactType: 'sender' | 'recipient'; + messageView: MessageView; + threadView: ThreadView; + } + + interface MessageView { + addAttachmentCardView(cardOptions: AttachmentCardOptions | AttachmentCardNoPreviewOptions): AttachmentCardView; + + addAttachmentsToolbarButton(buttonOptions: AttachmentsToolbarButtonDescriptor): void; + + addToolbarButton(options: MessageViewToolbarButtonDescriptor): void; + + getBodyElement(): HTMLElement; + + getMessageIDAsync(): Promise; + + getFileAttachmentCardViews(): AttachmentCardView[]; + + isElementInQuotedArea(): boolean; + + isLoaded(): boolean; + + getLinksInBody(): MessageViewLinkDescriptor[]; + + getSender(): Common.Contact; + + getRecipientEmailAddresses(): string[]; + + getRecipientsFull(): Promise; + + getThreadView(): ThreadView; + + getDateString(): string; + + addAttachmentIcon(iconDescriptor: MessageAttachmentIconDescriptor): void; + + // addAttachmentIcon(iconDescriptor: Stream): void; + + getViewState(): MessageViewViewStates; + + on(name: 'viewStateChange', cb: (event: { newViewState: MessageViewViewStates, oldViewState: MessageViewViewStates, messageView: MessageView }) => void): void; + + on(name: 'contactHover', cb: (event: ContactHoverEvent) => void): void; + + on(name: 'destroy' | 'load', cb: () => void): void; + + destroyed: boolean; + } + + type MessageViewViewStates = 'HIDDEN' | 'COLLAPSED' | 'EXPANDED'; + + interface ContentPanelView { + remove(): void; + + on(name: 'destroy' | 'activate' | 'deactivate', cb: () => void): void; + + destroyed: boolean; + } + + interface AttachmentCardView { + getAttachmentType(): string; + + addButton(buttonDescriptor: CustomButtonDescriptor): void; + + getTitle(): string; + + /** + * @deprecated. Use AttachmentCardClickEvent.getDownloadURL() instead + */ + getDownloadURL(): Promise; + + getMessageView(): MessageView | null; + + on(name: 'destroy', cb: () => void): void; + + destroyed: boolean; + } + + // ConversationsDescriptors + + interface AttachmentCardOptions { + title: string; + description: string; + previewUrl: string; + previewThumbnailUrl: string; + failoverPreviewIconUrl: string; + previewOnClick: (event: PreviewClickEvent) => void; + fileIconImageUrl: string; + buttons: Array; + foldColor?: string; + mimeType?: string; + } + + interface AttachmentCardNoPreviewOptions { + title: string; + description: string; + previewUrl: string; + iconThumbnailUrl: string; + previewOnClick: (event: PreviewClickEvent) => void; + fileIconImageUrl: string; + buttons: Array; + foldColor?: string; + } + + interface PreviewClickEvent { + attachmentCardView: AttachmentCardView; + + preventDefault(): void; + } + + interface ContentPanelDescriptor { + el: HTMLElement; + title: string; + iconUrl: string; + appName?: string; + appIconUrl?: string; + id?: string; + hideTitleBar?: boolean; + orderHint?: number; + } + + interface DownloadButtonDescriptor { + downloadUrl: string; + downloadFilename?: string; + onClick: (event: any) => void; + openInNewTab?: boolean; + } + + interface CustomButtonDescriptor { + iconUrl: string; + tooltip: string; + onClick: (event: AttachmentCardClickEvent) => void; + } + + interface AttachmentCardClickEvent { + getDownloadURL(): Promise; + } + + interface AttachmentsToolbarButtonDescriptor { + tooltip: string; + iconUrl: string; + onClick: (event: AttachmentsToolbarButtonEvent) => void; + } + + interface AttachmentsToolbarButtonEvent { + attachmentCardViews: AttachmentCardView[]; + } + + interface MessageViewLinkDescriptor { + text: string; + html: string; + element: HTMLElement; + href: string; + isInQuotedArea: boolean; + } + + interface MessageAttachmentIconDescriptor { + iconUrl: string; + iconClass?: string; + tooltip: string; + onClick?: () => void; + } + + interface MessageViewToolbarButtonDescriptor { + section: 'MORE'; + title: string; + iconUrl: string; + onClick: () => void; + iconClass?: string; + orderHint: number; + } + } + + export namespace Toolbars { + interface ToolbarsInstance { + registerThreadButton(toolbarButtonDescriptor: ToolbarButtonDescriptor): () => void; + + /** + * @deprecated. use registerThreadButton + * @param toolbarButtonDescriptor + */ + registerToolbarButtonForList(toolbarButtonDescriptor: ToolbarButtonDescriptor): () => void; + + /** + * @deprecated. use registerThreadButton + * @param toolbarButtonDescriptor + */ + registerToolbarButtonForThreadView(toolbarButtonDescriptor: ToolbarButtonDescriptor): () => void; + + addToolbarButtonForApp(appToolbarButtonDescriptor: AppToolbarButtonDescriptor): AppToolbarButtonView; + } + + interface ToolbarButtonDescriptor { + title: string; + onClick: (event: ToolbarButtonEvent) => void; + 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[]; + selectedThreadViews: Conversations.ThreadView[]; + dropdown?: Common.DropdownView; + } + + interface AppToolbarButtonDescriptor { + title: string; + titleClass?: string; + iconUrl: string; + iconClass?: string; + onClick: (event: AppToolbarButtonEvent) => void; + arrowColor?: string; + } + + interface AppToolbarButtonView { + open(): void; + + close(): void; + + remove(): void; + + on(name: 'destroy', cb: () => void): void; + + destroyed: boolean; + } + + interface AppToolbarButtonEvent { + dropdown: Common.DropdownView; + } + + type SectionNames = 'INBOX_STATE' | 'METADATA_STATE' | 'OTHER'; + } + + export namespace Router { + interface RouterInstance { + createLink(routeID: string | NativeRouteIDs, params: RouteParams): string; + + goto(routeID: string | NativeRouteIDs, params: RouteParams): void; + + handleCustomRoute(routeID: string, handler: (customRouteView: CustomRouteView) => void): () => void; + + handleAllRoutes(handler: (routeView: RouteView) => void): () => void; + + handleListRoute(routeID: NativeListRouteIDs, handler: (listRouteView: ListRouteView) => void): () => void; + + handleCustomListRoute(routeID: string, handler: (offset: number, max: number) => CustomListDescriptor | Promise): () => void; + + getCurrentRouteView(): RouteView; + } + + interface CustomListDescriptor { + threads: Array; + 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(): RouteTypes; + + getParams(): RouteParams; + + 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 { + addCollapsibleSection(options: SectionDescriptor): CollapsibleSectionView; + + // addCollapsibleSection(options: Stream): CollapsibleSectionView; + + addSection(options: SectionDescriptor): SectionView; + + // addSection(options: Stream): SectionView; + + refresh(): void; + } + + interface SectionView { + remove(): void; + + on(name: 'destroy', cb: () => void): void; + + destroyed: boolean; + } + + interface CollapsibleSectionView extends SectionView { + setCollapsed(value: boolean): void; + + remove(): void; + + on(name: 'destroy' | 'expanded' | 'collapsed', cb: () => void): void; + } + + interface SectionDescriptor { + title: string; + subtitle?: string; + titleLinkText?: string; + onTitleLinkClick?: () => void; + hasDropdown?: boolean; + onDropdownClick?: (event: SectionDropdownClickEvent) => void; + tableRows?: RowDescriptor[]; + contentElement?: HTMLElement; + footerLinkText?: string; + onFooterLinkClick?: (event: any) => void; + } + + interface SectionDropdownClickEvent { + dropdown: Common.DropdownView; + } + + interface RowDescriptor { + title: string; + body: string; + shortDetailText: string; + isRead: string; + labels: Lists.LabelDescriptor[]; + iconUrl?: string; + iconClass?: string; + routeID?: string; + routeParams?: string[]; + onClick?: () => void; + } + + type NativeRouteIDs = + 'INBOX' | + 'ALL_MAIL' | + 'SENT' | + 'STARRED' | + 'DRAFTS' | + 'SNOOZED' | + 'DONE' | + 'REMINDERS' | + 'LABEL' | + 'TRASH' | + 'SPAM' | + 'IMPORTANT' | + 'SEARCH' | + 'THREAD' | + 'CHATS' | + 'CHAT' | + 'CONTACTS' | + 'CONTACT' | + 'SETTINGS' | + 'ANY_LIST'; + + type NativeListRouteIDs = + 'INBOX' + | 'ALL_MAIL' + | 'SENT' + | 'STARRED' + | 'DRAFTS' + | 'SNOOZED' + | 'DONE' + | 'REMINDERS' + | 'LABEL' + | 'TRASH' + | 'SPAM' + | 'IMPORTANT' + | 'SEARCH' + | 'ANY_LIST'; + } + + export namespace NavMenu { + interface NavMenuInstance { + addNavItem(navItemDescriptor: NavItemDescriptor): NavItemView; + } + + interface NavItemView { + addNavItem(navItemDescriptor: NavItemDescriptor): NavItemView; + + remove(): void; + + isCollapsed(): boolean; + + setCollapsed(collapseValue: boolean): void; + + on(name: 'destroy', cb: () => void): void; + + destroyed: boolean; + } + + interface NavItemDescriptor { + name: string; + 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: 'CREATE'; + onClick: () => void; + } + + interface IconButtonAccessoryDescriptor { + type: 'ICON_BUTTON'; + onClick: () => void; + iconUrl: string; + iconClass?: string; + } + + interface DropdownButtonAccessoryDescriptor { + type: 'DROPDOWN_BUTTON'; + buttonBackgroundColor: string; + buttonForegroundColor: string; + onClick: (event: DropdownButtonClickEvent) => void; + } + + interface DropdownButtonClickEvent { + dropdown: Common.DropdownView; + } + + type NavItemTypes = 'MANAGE' | 'NAVIGATION'; + } + + export namespace Widgets { + interface WidgetsInstance { + showModalView(options: ModalOptions): ModalView; + + showMoleView(options: MoleOptions): MoleView; + + showDrawerView(options: DrawerOptions): DrawerView; + } + + interface ModalOptions { + el: HTMLElement; + chrome?: boolean; + constrainTitleWidth?: boolean; + showCloseButton?: boolean; + title?: string; + buttons?: ModalButtonDescriptor[]; + } + + interface ModalButtonDescriptor { + text: string; + title: string; + onClick: () => void; + type?: 'PRIMARY_ACTION' | 'SECONDARY_ACTION'; + color?: string; + orderHint?: number; + } + + interface MoleOptions { + el: HTMLElement; + title?: string; + titleEl?: HTMLElement; + minimizedTitleEl?: HTMLElement; + className?: string; + titleButtons?: MoleButtonDescriptor[]; + chrome?: boolean; + } + + interface MoleButtonDescriptor { + title: string; + iconUrl: string; + iconClass?: string; + onClick: () => void; + } + + interface DrawerOptions { + el: HTMLElement; + chrome?: boolean; + title?: string; + composeView?: Compose.ComposeView; + closeWithCompose?: boolean; + } + + interface ModalView { + close(): void; + + on(name: 'destroyed', cb: () => void): void; + + destroyed: boolean; + } + + interface MoleView { + close(): void; + + setTitle(text: string): void; + + setMinimized(minimized: boolean): void; + + getMinimized(): boolean; + + on(name: 'destroyed' | 'minimize' | 'restore', cb: () => void): void; + + destroyed: boolean; + } + + interface DrawerView { + close(): void; + + associateComposeView(composeView: Compose.ComposeView, closeWithCompose: boolean): void; + + disassociateComposeView(): void; + + on(name: 'destroyed' | 'slideAnimationDone' | 'closing', cb: () => void): void; + + destroyed: boolean; + } + } + + export namespace ButterBar { + interface ButterBarInstance { + showMessage(options: MessageDescriptor): object; + + showLoading(): object; + + showError(options: MessageDescriptor): object; + + showSaving(options: SavingMessageDescriptor): object; + + hideMessage(messageKey: object | string): void; + + hideGmailMessage(): void; + } + + interface MessageDescriptorBase { + className?: string; + priority?: number; + time?: number; + hideOnViewChanged?: boolean; + persistent?: boolean; + messageKey?: object | string; + } + + interface MessageDescriptorText extends MessageDescriptorBase { + text: string; + } + + interface MessageDescriptorHtml extends MessageDescriptorBase { + html: string; + } + + interface MessageDescriptorHtmlElement extends MessageDescriptorBase { + el: HTMLElement; + } + + type MessageDescriptor = MessageDescriptorText | MessageDescriptorHtml | MessageDescriptorHtmlElement; + + 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; + } + + export namespace Search { + interface SearchInstance { + registerSearchSuggestionsProvider(handler: (query: string) => AutocompleteSearchResult[] | Promise): void; + + registerSearchQueryRewriter(rewriter: SearchQueryRewriter): void; + } + + interface AutocompleteSearchResultBase { + iconUrl?: string; + routeName?: string; + routeParams?: string[]; + externalURL?: string; + onClick?: () => void; + } + + interface AutocompleteSearchResultText extends AutocompleteSearchResultBase { + name: string; + description: string; + } + + interface AutocompleteSearchResultHtml extends AutocompleteSearchResultBase { + nameHTML: string; + descriptionHTML: string; + } + + type AutocompleteSearchResult = AutocompleteSearchResultText | AutocompleteSearchResultHtml; + + interface SearchQueryRewriter { + term: string; + termReplacer: () => string | Promise; + } + } + + export namespace User { + interface UserInstance { + getEmailAddress(): string; + + isUsingGmailMaterialUI(): boolean; + + isConversationViewDisabled(): boolean; + + getLanguage(): string; + + getAccountSwitcherContactList(): Common.Contact[]; + } + } + + export namespace Keyboard { + interface KeyboardInstance { + createShortcutHandle(keyboardShortcutDescriptor: KeyboardShortcutDescriptor): KeyboardShortcutHandle; + } + + interface KeyboardShortcutHandle { + remove(): void; + } + + interface KeyboardShortcutDescriptor { + chord: string; + description: string; + } + } + + export namespace Global { + interface GlobalInstance { + addSidebarContentPanel(contentPanelDescriptor: Conversations.ContentPanelDescriptor): Conversations.ContentPanelView; + } + } +} diff --git a/types/inboxsdk/tsconfig.json b/types/inboxsdk/tsconfig.json new file mode 100644 index 0000000000..846443ce68 --- /dev/null +++ b/types/inboxsdk/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "inboxsdk-tests.ts" + ] +} diff --git a/types/inboxsdk/tslint.json b/types/inboxsdk/tslint.json new file mode 100644 index 0000000000..99ea174f67 --- /dev/null +++ b/types/inboxsdk/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "dtslint/dt.json", + "rules": { + "strict-export-declare-modifiers": false + } +}