gitextract_fft17z4s/ ├── .babelrc ├── .coffeelint.json ├── .dockerignore ├── .ebextensions/ │ └── enable_docker_cli_on_ssh.config ├── .ebignore ├── .eslintrc ├── .gitignore ├── .travis.yml ├── Dockerfile ├── ISSUE_TEMPLATE.md ├── LICENSE.md ├── README.md ├── appveyor.yml ├── lerna.json ├── package.json ├── packages/ │ ├── README.md │ ├── client-app/ │ │ ├── .babelrc │ │ ├── .travis.yml │ │ ├── .watchmanconfig │ │ ├── CHANGELOG.md │ │ ├── CONFIGURATION.md │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── apm/ │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── build/ │ │ │ ├── Gruntfile.js │ │ │ ├── README.md │ │ │ ├── config/ │ │ │ │ └── coffeelint.json │ │ │ ├── docs_templates/ │ │ │ │ ├── _function.html │ │ │ │ ├── _property.html │ │ │ │ ├── class.md │ │ │ │ └── sidebar.md │ │ │ ├── resources/ │ │ │ │ ├── asar-ordering-hint.txt │ │ │ │ ├── linux/ │ │ │ │ │ ├── debian/ │ │ │ │ │ │ ├── control.in │ │ │ │ │ │ ├── lintian-overrides │ │ │ │ │ │ ├── postinst │ │ │ │ │ │ └── postrm │ │ │ │ │ ├── nylas-mail.desktop.in │ │ │ │ │ └── redhat/ │ │ │ │ │ └── nylas.spec.in │ │ │ │ ├── mac/ │ │ │ │ │ ├── Nylas Calendar.app/ │ │ │ │ │ │ └── Contents/ │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ ├── MacOS/ │ │ │ │ │ │ │ └── Nylas Calendar │ │ │ │ │ │ ├── PkgInfo │ │ │ │ │ │ ├── Resources/ │ │ │ │ │ │ │ ├── AppIcon.icns │ │ │ │ │ │ │ └── Base.lproj/ │ │ │ │ │ │ │ └── MainMenu.nib │ │ │ │ │ │ └── _CodeSignature/ │ │ │ │ │ │ └── CodeResources │ │ │ │ │ ├── file.icns │ │ │ │ │ ├── nylas-Info.plist │ │ │ │ │ └── nylas.icns │ │ │ │ ├── ssh/ │ │ │ │ │ ├── nylas-n1-ci-ssh-secure-file.enc │ │ │ │ │ └── nylas-n1-ci-ssh.openssl.enc │ │ │ │ └── win/ │ │ │ │ ├── elevate.cmd │ │ │ │ ├── elevate.vbs │ │ │ │ ├── nylas-mailto-default.reg │ │ │ │ └── nylas-mailto-registration.reg │ │ │ └── tasks/ │ │ │ ├── coffeelint-task.js │ │ │ ├── create-mac-dmg.js │ │ │ ├── create-mac-zip.js │ │ │ ├── csslint-task.js │ │ │ ├── docs-build-task.js │ │ │ ├── docs-render-task.js │ │ │ ├── docs-task.js │ │ │ ├── eslint-task.js │ │ │ ├── installer-linux-task.js │ │ │ ├── lesslint-task.js │ │ │ ├── nylaslint-task.js │ │ │ ├── package-task.js │ │ │ └── task-helpers.js │ │ ├── docs/ │ │ │ ├── ContinuousIntegration.md │ │ │ └── README.md │ │ ├── dot-nylas/ │ │ │ ├── README.md │ │ │ ├── config.json │ │ │ ├── keymap.json │ │ │ └── packages/ │ │ │ └── README.md │ │ ├── internal_packages/ │ │ │ ├── account-sidebar/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── account-commands.coffee │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── account-sidebar.cjsx │ │ │ │ │ │ └── account-switcher.cjsx │ │ │ │ │ ├── main.coffee │ │ │ │ │ ├── sidebar-actions.coffee │ │ │ │ │ ├── sidebar-item.coffee │ │ │ │ │ ├── sidebar-section.coffee │ │ │ │ │ └── sidebar-store.coffee │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── sidebar-item-spec.es6 │ │ │ │ └── stylesheets/ │ │ │ │ └── account-sidebar.less │ │ │ ├── activity-list/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── activity-data-source.es6 │ │ │ │ │ ├── activity-list-actions.es6 │ │ │ │ │ ├── activity-list-button.jsx │ │ │ │ │ ├── activity-list-empty-state.jsx │ │ │ │ │ ├── activity-list-item-container.jsx │ │ │ │ │ ├── activity-list-store.jsx │ │ │ │ │ ├── activity-list.jsx │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── plugin-helpers.es6 │ │ │ │ │ └── test-data-source.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── activity-list-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ └── activity-list.less │ │ │ ├── attachments/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── message-attachments.jsx │ │ │ │ └── package.json │ │ │ ├── category-mapper/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── category-selection.jsx │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── preferences-category-mapper.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── category-mapper.less │ │ │ ├── category-picker/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── category-picker-popover.jsx │ │ │ │ │ ├── category-picker.cjsx │ │ │ │ │ └── main.cjsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── category-picker-spec.cjsx │ │ │ │ └── stylesheets/ │ │ │ │ └── category-picker.less │ │ │ ├── composer/ │ │ │ │ ├── README.md │ │ │ │ ├── keymaps/ │ │ │ │ │ └── composer.json │ │ │ │ ├── lib/ │ │ │ │ │ ├── account-contact-field.jsx │ │ │ │ │ ├── action-bar-plugins.jsx │ │ │ │ │ ├── collapsed-participants.jsx │ │ │ │ │ ├── compose-button.jsx │ │ │ │ │ ├── composer-editor.jsx │ │ │ │ │ ├── composer-header-actions.jsx │ │ │ │ │ ├── composer-header.jsx │ │ │ │ │ ├── composer-view.jsx │ │ │ │ │ ├── fields.es6 │ │ │ │ │ ├── image-upload-composer-extension.es6 │ │ │ │ │ ├── inline-image-upload-container.jsx │ │ │ │ │ ├── main.jsx │ │ │ │ │ ├── send-action-button.jsx │ │ │ │ │ └── subject-text-field.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── collapsed-participants-spec.cjsx │ │ │ │ │ ├── composer-header-actions-spec.cjsx │ │ │ │ │ ├── composer-header-spec.jsx │ │ │ │ │ ├── composer-view-spec.cjsx │ │ │ │ │ ├── quoted-text-spec.cjsx │ │ │ │ │ └── send-action-button-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ └── composer.less │ │ │ ├── composer-emoji/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── categorized-emoji.es6 │ │ │ │ │ ├── emoji-actions.es6 │ │ │ │ │ ├── emoji-button-popover.jsx │ │ │ │ │ ├── emoji-button.jsx │ │ │ │ │ ├── emoji-composer-extension.jsx │ │ │ │ │ ├── emoji-data.json │ │ │ │ │ ├── emoji-message-extension.jsx │ │ │ │ │ ├── emoji-picker.jsx │ │ │ │ │ ├── emoji-store.jsx │ │ │ │ │ └── main.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── emoji-button-popover-spec.jsx │ │ │ │ │ └── emoji-composer-extension-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ └── composer-emoji.less │ │ │ ├── composer-mail-merge/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── listens-to-mail-merge-session.jsx │ │ │ │ │ ├── mail-merge-body-token.jsx │ │ │ │ │ ├── mail-merge-button.jsx │ │ │ │ │ ├── mail-merge-composer-extension.es6 │ │ │ │ │ ├── mail-merge-constants.es6 │ │ │ │ │ ├── mail-merge-container.jsx │ │ │ │ │ ├── mail-merge-draft-editing-session.es6 │ │ │ │ │ ├── mail-merge-header-input.jsx │ │ │ │ │ ├── mail-merge-participants-text-field.jsx │ │ │ │ │ ├── mail-merge-send-button.jsx │ │ │ │ │ ├── mail-merge-subject-text-field.jsx │ │ │ │ │ ├── mail-merge-table.jsx │ │ │ │ │ ├── mail-merge-token-dnd-handlers.es6 │ │ │ │ │ ├── mail-merge-token.jsx │ │ │ │ │ ├── mail-merge-utils.es6 │ │ │ │ │ ├── mail-merge-workspace.jsx │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── selection-state-reducers.es6 │ │ │ │ │ ├── send-many-drafts-task.es6 │ │ │ │ │ ├── table-state-reducers.es6 │ │ │ │ │ ├── token-data-source.es6 │ │ │ │ │ ├── token-state-reducers.es6 │ │ │ │ │ └── workspace-state-reducers.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── fixtures.es6 │ │ │ │ │ ├── mail-merge-draft-editing-session-spec.es6 │ │ │ │ │ ├── mail-merge-utils-spec.es6 │ │ │ │ │ ├── selection-state-reducers-spec.es6 │ │ │ │ │ ├── send-many-drafts-task-spec.es6 │ │ │ │ │ ├── table-state-reducers-spec.es6 │ │ │ │ │ ├── token-state-reducers-spec.es6 │ │ │ │ │ └── workspace-state-reducers-spec.es6 │ │ │ │ └── stylesheets/ │ │ │ │ └── mail-merge.less │ │ │ ├── composer-markdown/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.cjsx │ │ │ │ │ ├── markdown-composer-extension.coffee │ │ │ │ │ ├── markdown-editor.cjsx │ │ │ │ │ └── utils.coffee │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── index.less │ │ │ ├── composer-scheduler/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── calendar/ │ │ │ │ │ │ ├── proposed-time-calendar-data-source.es6 │ │ │ │ │ │ ├── proposed-time-event.jsx │ │ │ │ │ │ └── proposed-time-picker.jsx │ │ │ │ │ ├── composer/ │ │ │ │ │ │ ├── email-b64-images.es6 │ │ │ │ │ │ ├── email-images.json │ │ │ │ │ │ ├── event-datetime-input.jsx │ │ │ │ │ │ ├── event-prep-helper.es6 │ │ │ │ │ │ ├── new-event-card-container.jsx │ │ │ │ │ │ ├── new-event-card.jsx │ │ │ │ │ │ ├── new-event-helper.es6 │ │ │ │ │ │ ├── new-event-preview.jsx │ │ │ │ │ │ ├── proposed-time-list.jsx │ │ │ │ │ │ ├── remove-event-helper.es6 │ │ │ │ │ │ ├── scheduler-composer-button.jsx │ │ │ │ │ │ └── scheduler-composer-extension.es6 │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── proposal.es6 │ │ │ │ │ ├── proposed-time-calendar-store.es6 │ │ │ │ │ ├── scheduler-actions.es6 │ │ │ │ │ └── scheduler-constants.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── composer-scheduler-spec-helper.es6 │ │ │ │ │ ├── new-event-card-spec.jsx │ │ │ │ │ ├── proposed-time-picker-spec.jsx │ │ │ │ │ ├── scheduler-composer-button-spec.jsx │ │ │ │ │ ├── scheduler-composer-extension-spec.es6 │ │ │ │ │ └── test-proposal-data-source.es6 │ │ │ │ └── stylesheets/ │ │ │ │ └── scheduler.less │ │ │ ├── composer-signature/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── preferences-signatures.jsx │ │ │ │ │ ├── signature-composer-dropdown.jsx │ │ │ │ │ ├── signature-composer-extension.es6 │ │ │ │ │ └── signature-utils.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── preferences-signatures-spec.jsx │ │ │ │ │ ├── signature-composer-dropdown-spec.jsx │ │ │ │ │ ├── signature-composer-extension-spec.es6 │ │ │ │ │ └── signature-store-spec.jsx │ │ │ │ └── styles/ │ │ │ │ └── composer-signature.less │ │ │ ├── composer-spellcheck/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── spellcheck-composer-extension.es6 │ │ │ │ ├── package.json │ │ │ │ └── spec/ │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── california-spelling-lookup.json │ │ │ │ │ ├── california-with-misspellings-after.html │ │ │ │ │ └── california-with-misspellings-before.html │ │ │ │ └── spellcheck-composer-extension-spec.es6 │ │ │ ├── composer-templates/ │ │ │ │ ├── README.md │ │ │ │ ├── assets/ │ │ │ │ │ └── Welcome to Quick Replies.html │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── preferences-templates.jsx │ │ │ │ │ ├── template-composer-extension.es6 │ │ │ │ │ ├── template-editor.es6 │ │ │ │ │ ├── template-picker.jsx │ │ │ │ │ ├── template-status-bar.jsx │ │ │ │ │ └── template-store.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── template-store-spec.es6 │ │ │ │ └── stylesheets/ │ │ │ │ └── message-templates.less │ │ │ ├── composer-translate/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ └── main.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── translate.less │ │ │ ├── contact-rankings/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── contact-rankings-cache.es6 │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── refreshing-json-cache.coffee │ │ │ │ └── package.json │ │ │ ├── draft-list/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── draft-list-columns.cjsx │ │ │ │ │ ├── draft-list-send-status.jsx │ │ │ │ │ ├── draft-list-store.coffee │ │ │ │ │ ├── draft-list-toolbar.jsx │ │ │ │ │ ├── draft-list.cjsx │ │ │ │ │ ├── draft-toolbar-buttons.cjsx │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── sending-cancel-button.cjsx │ │ │ │ │ └── sending-progress-bar.cjsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── draft-list.less │ │ │ ├── events/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── event-header.cjsx │ │ │ │ │ └── main.cjsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── events.less │ │ │ ├── github-contact-card/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── github-contact-card-section.jsx │ │ │ │ │ ├── github-user-store.es6 │ │ │ │ │ └── main.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── sidebar-github-profile.less │ │ │ ├── keybase/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── decrypt-button.cjsx │ │ │ │ │ ├── decryption-preprocess.coffee │ │ │ │ │ ├── email-popover.cjsx │ │ │ │ │ ├── encrypt-button.cjsx │ │ │ │ │ ├── identity.coffee │ │ │ │ │ ├── key-adder.cjsx │ │ │ │ │ ├── key-manager.cjsx │ │ │ │ │ ├── keybase-search.cjsx │ │ │ │ │ ├── keybase-user.cjsx │ │ │ │ │ ├── keybase.coffee │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── modal-key-recommender.cjsx │ │ │ │ │ ├── passphrase-popover.cjsx │ │ │ │ │ ├── pgp-key-store.cjsx │ │ │ │ │ ├── preferences-keybase.cjsx │ │ │ │ │ ├── private-key-popover.cjsx │ │ │ │ │ └── recipient-key-chip.cjsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── decrypt-buttons-spec.cjsx │ │ │ │ │ ├── encrypt-button-spec.cjsx │ │ │ │ │ ├── keybase-profile-spec.cjsx │ │ │ │ │ ├── keybase-search-spec.cjsx │ │ │ │ │ ├── keybase-spec.coffee │ │ │ │ │ ├── main-spec.coffee │ │ │ │ │ ├── pgp-key-store-spec.cjsx │ │ │ │ │ └── recipient-key-chip-spec.cjsx │ │ │ │ └── stylesheets/ │ │ │ │ └── main.less │ │ │ ├── link-tracking/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── link-tracking-button.jsx │ │ │ │ │ ├── link-tracking-composer-extension.es6 │ │ │ │ │ ├── link-tracking-constants.es6 │ │ │ │ │ ├── link-tracking-message-extension.jsx │ │ │ │ │ ├── link-tracking-message-popover.jsx │ │ │ │ │ └── main.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── link-tracking-composer-extension-spec.es6 │ │ │ │ └── stylesheets/ │ │ │ │ └── main.less │ │ │ ├── main-calendar/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── calendar-wrapper.jsx │ │ │ │ │ ├── event-description-frame.jsx │ │ │ │ │ ├── main.jsx │ │ │ │ │ ├── quick-event-button.jsx │ │ │ │ │ └── quick-event-popover.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── main-calendar.less │ │ │ ├── message-autoload-images/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── autoload-images-actions.es6 │ │ │ │ │ ├── autoload-images-extension.es6 │ │ │ │ │ ├── autoload-images-header.jsx │ │ │ │ │ ├── autoload-images-store.es6 │ │ │ │ │ └── main.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── autoload-images-extension-spec.es6 │ │ │ │ │ └── fixtures/ │ │ │ │ │ ├── linkedin-in.html │ │ │ │ │ ├── linkedin-out.html │ │ │ │ │ ├── marketing-email-in.html │ │ │ │ │ ├── marketing-email-out.html │ │ │ │ │ ├── no-image-extensions-in.html │ │ │ │ │ ├── no-image-extensions-out.html │ │ │ │ │ ├── table-body-in.html │ │ │ │ │ └── table-body-out.html │ │ │ │ └── stylesheets/ │ │ │ │ └── message-autoload-images.less │ │ │ ├── message-list/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── autolinker.es6 │ │ │ │ │ ├── autoscale-images.es6 │ │ │ │ │ ├── email-frame-styles-store.coffee │ │ │ │ │ ├── email-frame.jsx │ │ │ │ │ ├── find-in-thread.jsx │ │ │ │ │ ├── inline-image-listeners.es6 │ │ │ │ │ ├── main.cjsx │ │ │ │ │ ├── message-controls.cjsx │ │ │ │ │ ├── message-item-body.cjsx │ │ │ │ │ ├── message-item-container.cjsx │ │ │ │ │ ├── message-item.cjsx │ │ │ │ │ ├── message-list-hidden-messages-toggle.jsx │ │ │ │ │ ├── message-list.cjsx │ │ │ │ │ ├── message-participants.cjsx │ │ │ │ │ ├── message-timestamp.jsx │ │ │ │ │ ├── sidebar-participant-picker.jsx │ │ │ │ │ ├── sidebar-plugin-container.cjsx │ │ │ │ │ ├── thread-archive-button.cjsx │ │ │ │ │ ├── thread-star-button.cjsx │ │ │ │ │ ├── thread-toggle-unread-button.cjsx │ │ │ │ │ └── thread-trash-button.cjsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── autolinker-fixtures/ │ │ │ │ │ │ ├── both-email-and-url-in.html │ │ │ │ │ │ ├── both-email-and-url-out.html │ │ │ │ │ │ ├── gmail-in.html │ │ │ │ │ │ ├── gmail-out.html │ │ │ │ │ │ ├── linkedin-in.html │ │ │ │ │ │ ├── linkedin-out.html │ │ │ │ │ │ ├── medium-post-in.html │ │ │ │ │ │ ├── medium-post-out.html │ │ │ │ │ │ ├── nylas-url-in.html │ │ │ │ │ │ ├── nylas-url-out.html │ │ │ │ │ │ ├── plaintext-in.html │ │ │ │ │ │ ├── plaintext-out.html │ │ │ │ │ │ ├── readme-in.html │ │ │ │ │ │ ├── readme-out.html │ │ │ │ │ │ ├── strangeemails-in.html │ │ │ │ │ │ ├── strangeemails-out.html │ │ │ │ │ │ ├── strangephones-in.html │ │ │ │ │ │ ├── strangephones-out.html │ │ │ │ │ │ ├── twitter-in.html │ │ │ │ │ │ ├── twitter-out.html │ │ │ │ │ │ ├── url-with-port-in.html │ │ │ │ │ │ └── url-with-port-out.html │ │ │ │ │ ├── autolinker-spec.es6 │ │ │ │ │ ├── message-item-body-spec.cjsx │ │ │ │ │ ├── message-item-container-spec.cjsx │ │ │ │ │ ├── message-item-spec.cjsx │ │ │ │ │ ├── message-list-spec.cjsx │ │ │ │ │ ├── message-participants-spec.cjsx │ │ │ │ │ └── message-timestamp-spec.cjsx │ │ │ │ └── stylesheets/ │ │ │ │ ├── find-in-thread.less │ │ │ │ └── message-list.less │ │ │ ├── message-view-on-github/ │ │ │ │ ├── README.md │ │ │ │ ├── keymaps/ │ │ │ │ │ └── github.json │ │ │ │ ├── lib/ │ │ │ │ │ ├── github-store.es6 │ │ │ │ │ ├── main.jsx │ │ │ │ │ └── view-on-github-button.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── github.less │ │ │ ├── mode-switch/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── mode-toggle.cjsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── mode-switch.less │ │ │ ├── notifications/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── items/ │ │ │ │ │ │ ├── account-error-notif.jsx │ │ │ │ │ │ ├── default-client-notif.jsx │ │ │ │ │ │ ├── dev-mode-notif.jsx │ │ │ │ │ │ ├── disabled-mail-rules-notif.jsx │ │ │ │ │ │ └── offline-notification.jsx │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── notif-wrapper.jsx │ │ │ │ │ └── sidebar/ │ │ │ │ │ ├── activity-sidebar.cjsx │ │ │ │ │ ├── initial-sync-activity.jsx │ │ │ │ │ ├── sync-activity.jsx │ │ │ │ │ └── syncback-activity.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── account-error-notif-spec.jsx │ │ │ │ │ ├── default-client-notif-spec.jsx │ │ │ │ │ ├── dev-mode-notif-spec.jsx │ │ │ │ │ ├── disabled-mail-rules-notif-spec.jsx │ │ │ │ │ └── priority-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ ├── notifications.less │ │ │ │ └── styles.less │ │ │ ├── nylas-private-fonts/ │ │ │ │ ├── fonts/ │ │ │ │ │ ├── Nylas-Pro-Blond.otf │ │ │ │ │ ├── Nylas-Pro-Hair.otf │ │ │ │ │ ├── Nylas-Pro-Light.otf │ │ │ │ │ ├── Nylas-Pro-Medium.otf │ │ │ │ │ ├── Nylas-Pro-Normal.otf │ │ │ │ │ ├── Nylas-Pro-SemiBold.otf │ │ │ │ │ └── Nylas-Pro-Thin.otf │ │ │ │ ├── lib/ │ │ │ │ │ └── main.es6 │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── nylas-fonts.less │ │ │ ├── nylas-private-salesforce/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── keymaps/ │ │ │ │ │ └── salesforce.json │ │ │ │ ├── lib/ │ │ │ │ │ ├── composer/ │ │ │ │ │ │ ├── contact-search-results.jsx │ │ │ │ │ │ ├── participant-decorator.jsx │ │ │ │ │ │ └── salesforce-composer-picker.jsx │ │ │ │ │ ├── contact/ │ │ │ │ │ │ └── salesforce-contact-info.jsx │ │ │ │ │ ├── form/ │ │ │ │ │ │ ├── fetch-empty-schema-for-type.es6 │ │ │ │ │ │ ├── form-data-helpers.es6 │ │ │ │ │ │ ├── generated-form-to-salesforce-adapter.es6 │ │ │ │ │ │ ├── pending-salesforce-object.es6 │ │ │ │ │ │ ├── remove-controls.jsx │ │ │ │ │ │ ├── salesforce-object-form.jsx │ │ │ │ │ │ ├── salesforce-object-picker.jsx │ │ │ │ │ │ ├── salesforce-schema-adapter.es6 │ │ │ │ │ │ ├── salesforce-window-launcher.es6 │ │ │ │ │ │ └── smart-fields.es6 │ │ │ │ │ ├── main.jsx │ │ │ │ │ ├── metadata-helpers.es6 │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── salesforce-object.es6 │ │ │ │ │ │ └── salesforce-schema.es6 │ │ │ │ │ ├── related-object-helpers.es6 │ │ │ │ │ ├── salesforce-actions.es6 │ │ │ │ │ ├── salesforce-api-error.es6 │ │ │ │ │ ├── salesforce-api.jsx │ │ │ │ │ ├── salesforce-constants.es6 │ │ │ │ │ ├── salesforce-contact-crawler.es6 │ │ │ │ │ ├── salesforce-data-reset.es6 │ │ │ │ │ ├── salesforce-env.es6 │ │ │ │ │ ├── salesforce-error-reporter.es6 │ │ │ │ │ ├── salesforce-intro-notification.jsx │ │ │ │ │ ├── salesforce-metadata-cleanup-listener.es6 │ │ │ │ │ ├── salesforce-new-mail-listener.es6 │ │ │ │ │ ├── salesforce-oauth.jsx │ │ │ │ │ ├── salesforce-object-helpers.es6 │ │ │ │ │ ├── salesforce-related-object-cache.es6 │ │ │ │ │ ├── salesforce-sync-worker.es6 │ │ │ │ │ ├── search/ │ │ │ │ │ │ ├── salesforce-search-bar-results.jsx │ │ │ │ │ │ └── salesforce-search-indexer.es6 │ │ │ │ │ ├── shared-components/ │ │ │ │ │ │ ├── open-in-salesforce-btn.jsx │ │ │ │ │ │ ├── salesforce-icon.jsx │ │ │ │ │ │ └── salesforce-login-prompt.jsx │ │ │ │ │ ├── tasks/ │ │ │ │ │ │ ├── destroy-message-on-salesforce-task.es6 │ │ │ │ │ │ ├── destroy-salesforce-object-task.es6 │ │ │ │ │ │ ├── ensure-message-on-salesforce-task.es6 │ │ │ │ │ │ ├── manually-relate-salesforce-object-task.es6 │ │ │ │ │ │ ├── remove-manual-relation-to-salesforce-object-task.es6 │ │ │ │ │ │ ├── sync-salesforce-objects-task.es6 │ │ │ │ │ │ ├── sync-thread-activity-to-salesforce-task.es6 │ │ │ │ │ │ ├── syncback-salesforce-object-task.es6 │ │ │ │ │ │ └── upsert-opportunity-contact-role-task.es6 │ │ │ │ │ └── thread/ │ │ │ │ │ ├── related-objects-for-thread.jsx │ │ │ │ │ ├── salesforce-manually-relate-thread-button.jsx │ │ │ │ │ ├── salesforce-manually-relate-thread-popover.jsx │ │ │ │ │ ├── salesforce-sync-label.jsx │ │ │ │ │ ├── salesforce-sync-message-status.jsx │ │ │ │ │ └── sync-thread-toggle.jsx │ │ │ │ ├── menus/ │ │ │ │ │ └── salesforce.json │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ ├── opportunity-layouts-alt.json │ │ │ │ │ │ └── opportunity-layouts.json │ │ │ │ │ ├── form-builder-spec.jsx │ │ │ │ │ ├── generate-test-data.es6 │ │ │ │ │ ├── salesforce-schema-adapter-spec.es6 │ │ │ │ │ └── syncback-salesforce-object-task-spec.es6 │ │ │ │ └── stylesheets/ │ │ │ │ ├── open-in-salesforce-btn.less │ │ │ │ ├── salesforce-association.less │ │ │ │ ├── salesforce-composer.less │ │ │ │ ├── salesforce-contact.less │ │ │ │ ├── salesforce-icon.less │ │ │ │ ├── salesforce-object-form.less │ │ │ │ ├── salesforce-object-picker.less │ │ │ │ ├── salesforce-picker.less │ │ │ │ ├── salesforce-related-object.less │ │ │ │ ├── salesforce-sync-label.less │ │ │ │ ├── salesforce-sync-message-status.less │ │ │ │ ├── salesforce-welcome-view.less │ │ │ │ ├── search-results.less │ │ │ │ └── sync-thread-toggle.less │ │ │ ├── nylas-private-sounds/ │ │ │ │ ├── NYLAS_UI_Confirm_v1.ogg │ │ │ │ ├── NYLAS_UI_HitSend_v1.ogg │ │ │ │ ├── NYLAS_UI_NewMail_v1.ogg │ │ │ │ ├── NYLAS_UI_Send_v1.ogg │ │ │ │ ├── lib/ │ │ │ │ │ └── main.es6 │ │ │ │ └── package.json │ │ │ ├── onboarding/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── account-types.es6 │ │ │ │ │ ├── decorators/ │ │ │ │ │ │ └── create-page-for-form.jsx │ │ │ │ │ ├── form-error-message.jsx │ │ │ │ │ ├── form-field.jsx │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── onboarding-actions.es6 │ │ │ │ │ ├── onboarding-helpers.es6 │ │ │ │ │ ├── onboarding-root.jsx │ │ │ │ │ ├── onboarding-store.es6 │ │ │ │ │ ├── page-account-choose.jsx │ │ │ │ │ ├── page-account-onboarding-success.jsx │ │ │ │ │ ├── page-account-settings-exchange.jsx │ │ │ │ │ ├── page-account-settings-gmail.jsx │ │ │ │ │ ├── page-account-settings-imap.jsx │ │ │ │ │ ├── page-account-settings.jsx │ │ │ │ │ ├── page-initial-preferences.cjsx │ │ │ │ │ ├── page-top-bar.jsx │ │ │ │ │ └── page-welcome.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ ├── onboarding-reset.less │ │ │ │ └── onboarding.less │ │ │ ├── open-tracking/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── open-tracking-button.jsx │ │ │ │ │ ├── open-tracking-composer-extension.es6 │ │ │ │ │ ├── open-tracking-constants.es6 │ │ │ │ │ ├── open-tracking-icon.jsx │ │ │ │ │ ├── open-tracking-message-popover.jsx │ │ │ │ │ └── open-tracking-message-status.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── open-tracking-composer-extension-spec.es6 │ │ │ │ │ ├── open-tracking-icon-spec.jsx │ │ │ │ │ └── open-tracking-message-status-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ └── main.less │ │ │ ├── participant-profile/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── clearbit-data-source.coffee │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── participant-profile-store.es6 │ │ │ │ │ ├── sidebar-participant-profile.jsx │ │ │ │ │ └── sidebar-related-threads.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── participant-profile.less │ │ │ ├── personal-level-indicators/ │ │ │ │ ├── README.md │ │ │ │ ├── docs/ │ │ │ │ │ ├── docco.css │ │ │ │ │ ├── personal-level-icon.html │ │ │ │ │ └── public/ │ │ │ │ │ └── stylesheets/ │ │ │ │ │ └── normalize.css │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── personal-level-icon.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── main.less │ │ │ ├── phishing-detection/ │ │ │ │ ├── README.md │ │ │ │ ├── docs/ │ │ │ │ │ ├── docco.css │ │ │ │ │ ├── main.coffee │ │ │ │ │ ├── main.html │ │ │ │ │ └── public/ │ │ │ │ │ └── stylesheets/ │ │ │ │ │ └── normalize.css │ │ │ │ ├── lib/ │ │ │ │ │ └── main.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── main-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ ├── index.less │ │ │ │ └── phishing.less │ │ │ ├── plugins/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.jsx │ │ │ │ │ ├── package-set.jsx │ │ │ │ │ ├── package.jsx │ │ │ │ │ ├── packages-store.jsx │ │ │ │ │ ├── plugins-actions.jsx │ │ │ │ │ ├── plugins-tabs-view.jsx │ │ │ │ │ ├── preferences-plugins.jsx │ │ │ │ │ ├── tab-explore.jsx │ │ │ │ │ ├── tab-installed.jsx │ │ │ │ │ ├── tabs-store.jsx │ │ │ │ │ └── tabs.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── plugins.less │ │ │ ├── preferences/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.jsx │ │ │ │ │ ├── preferences-root.jsx │ │ │ │ │ ├── preferences-tabs-bar.jsx │ │ │ │ │ └── tabs/ │ │ │ │ │ ├── config-schema-item.jsx │ │ │ │ │ ├── keymaps/ │ │ │ │ │ │ ├── command-item.jsx │ │ │ │ │ │ ├── displayed-keybindings.js │ │ │ │ │ │ └── mousetrap-keybinding-helpers.js │ │ │ │ │ ├── preferences-account-details.jsx │ │ │ │ │ ├── preferences-account-list.jsx │ │ │ │ │ ├── preferences-accounts.jsx │ │ │ │ │ ├── preferences-appearance.jsx │ │ │ │ │ ├── preferences-general.jsx │ │ │ │ │ ├── preferences-keymaps.jsx │ │ │ │ │ ├── preferences-mail-rules.jsx │ │ │ │ │ ├── sending-section.jsx │ │ │ │ │ └── workspace-section.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── preferences-account-details-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ ├── preferences-accounts.less │ │ │ │ ├── preferences-identity.less │ │ │ │ ├── preferences-mail-rules.less │ │ │ │ └── preferences.less │ │ │ ├── print/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── print-window.es6 │ │ │ │ │ └── printer.es6 │ │ │ │ ├── package.json │ │ │ │ └── static/ │ │ │ │ ├── print-styles.css │ │ │ │ └── print.js │ │ │ ├── remove-tracking-pixels/ │ │ │ │ ├── lib/ │ │ │ │ │ └── main.es6 │ │ │ │ ├── package.json │ │ │ │ └── spec/ │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── a-after.txt │ │ │ │ │ ├── a-before.txt │ │ │ │ │ ├── b-after.txt │ │ │ │ │ └── b-before.txt │ │ │ │ └── tracking-pixels-extension-spec.es6 │ │ │ ├── screenshot-mode/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── BLOKKNeue-Regular.otf │ │ │ │ │ └── font-override.css │ │ │ │ ├── lib/ │ │ │ │ │ └── main.coffee │ │ │ │ └── package.json │ │ │ ├── search-index/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── contact-search-indexer.es6 │ │ │ │ │ ├── event-search-indexer.es6 │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── thread-search-index-store.es6 │ │ │ │ └── package.json │ │ │ ├── send-and-archive/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── send-and-archive-extension.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── send-and-archive-spec.coffee │ │ │ │ └── styles/ │ │ │ │ └── send-and-archive.less │ │ │ ├── send-later/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── send-later-button.jsx │ │ │ │ │ ├── send-later-constants.es6 │ │ │ │ │ ├── send-later-popover.jsx │ │ │ │ │ └── send-later-status.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── send-later-button-spec.jsx │ │ │ │ │ └── send-later-popover-spec.jsx │ │ │ │ └── stylesheets/ │ │ │ │ ├── send-later-used-modal.less │ │ │ │ └── send-later.less │ │ │ ├── send-reminders/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── send-reminders-account-sidebar-extension.es6 │ │ │ │ │ ├── send-reminders-composer-button.jsx │ │ │ │ │ ├── send-reminders-constants.es6 │ │ │ │ │ ├── send-reminders-headers.jsx │ │ │ │ │ ├── send-reminders-mailbox-perspective.es6 │ │ │ │ │ ├── send-reminders-popover-button.jsx │ │ │ │ │ ├── send-reminders-popover.jsx │ │ │ │ │ ├── send-reminders-query-subscription.es6 │ │ │ │ │ ├── send-reminders-store.es6 │ │ │ │ │ ├── send-reminders-thread-list-extension.es6 │ │ │ │ │ ├── send-reminders-thread-timestamp.jsx │ │ │ │ │ ├── send-reminders-toolbar-button.jsx │ │ │ │ │ └── send-reminders-utils.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ ├── reminders-used-modal.less │ │ │ │ └── send-reminders.less │ │ │ ├── sync-health-checker/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── sync-health-checker.es6 │ │ │ │ ├── package.json │ │ │ │ └── spec/ │ │ │ │ └── sync-health-checker-spec.es6 │ │ │ ├── system-tray/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ └── system-tray-icon-store.es6 │ │ │ │ ├── package.json │ │ │ │ └── spec/ │ │ │ │ └── system-tray-icon-store-spec.es6 │ │ │ ├── theme-picker/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.jsx │ │ │ │ │ ├── theme-option.jsx │ │ │ │ │ └── theme-picker.jsx │ │ │ │ ├── package.json │ │ │ │ ├── preview-styles/ │ │ │ │ │ └── theme-option.less │ │ │ │ ├── spec/ │ │ │ │ │ └── theme-picker-spec.jsx │ │ │ │ └── styles/ │ │ │ │ └── theme-picker.less │ │ │ ├── thread-list/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── category-removal-target-rulesets.es6 │ │ │ │ │ ├── injects-toolbar-buttons.jsx │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── message-list-toolbar.jsx │ │ │ │ │ ├── selected-items-stack.jsx │ │ │ │ │ ├── thread-list-columns.cjsx │ │ │ │ │ ├── thread-list-context-menu.es6 │ │ │ │ │ ├── thread-list-data-source.es6 │ │ │ │ │ ├── thread-list-icon.cjsx │ │ │ │ │ ├── thread-list-participants.cjsx │ │ │ │ │ ├── thread-list-quick-actions.cjsx │ │ │ │ │ ├── thread-list-scroll-tooltip.cjsx │ │ │ │ │ ├── thread-list-store.coffee │ │ │ │ │ ├── thread-list-toolbar.jsx │ │ │ │ │ ├── thread-list.cjsx │ │ │ │ │ └── thread-toolbar-buttons.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── category-removal-target-rulesets-spec.es6 │ │ │ │ │ ├── thread-list-column-spec.coffee │ │ │ │ │ ├── thread-list-participants-spec.cjsx │ │ │ │ │ ├── thread-list-spec.cjsx │ │ │ │ │ └── thread-toolbar-buttons-spec.cjsx │ │ │ │ └── stylesheets/ │ │ │ │ ├── selected-items-stack.less │ │ │ │ └── thread-list.less │ │ │ ├── thread-search/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── search-actions.es6 │ │ │ │ │ ├── search-mailbox-perspective.es6 │ │ │ │ │ ├── search-query-subscription.es6 │ │ │ │ │ ├── search-store.es6 │ │ │ │ │ └── thread-search-bar.jsx │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ └── search-bar-spec.cjsx │ │ │ │ └── stylesheets/ │ │ │ │ └── thread-search-bar.less │ │ │ ├── thread-sharing/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── copy-button.jsx │ │ │ │ │ ├── external-threads.es6 │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── thread-sharing-button.jsx │ │ │ │ │ ├── thread-sharing-constants.es6 │ │ │ │ │ └── thread-sharing-popover.jsx │ │ │ │ ├── package.json │ │ │ │ └── stylesheets/ │ │ │ │ └── main.less │ │ │ ├── thread-snooze/ │ │ │ │ ├── README.md │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── snooze-actions.es6 │ │ │ │ │ ├── snooze-buttons.jsx │ │ │ │ │ ├── snooze-constants.es6 │ │ │ │ │ ├── snooze-mail-label.jsx │ │ │ │ │ ├── snooze-popover.jsx │ │ │ │ │ ├── snooze-store.jsx │ │ │ │ │ └── snooze-utils.es6 │ │ │ │ ├── package.json │ │ │ │ ├── spec/ │ │ │ │ │ ├── snooze-store-spec.es6 │ │ │ │ │ └── snooze-utils-spec.es6 │ │ │ │ └── stylesheets/ │ │ │ │ ├── snooze-feature-used-modal.less │ │ │ │ ├── snooze-mail-label.less │ │ │ │ └── snooze-popover.less │ │ │ ├── ui-dark/ │ │ │ │ ├── LICENSE.md │ │ │ │ ├── README.md │ │ │ │ ├── package.json │ │ │ │ └── styles/ │ │ │ │ ├── email-frame.less │ │ │ │ └── ui-variables.less │ │ │ ├── ui-darkside/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── index.less │ │ │ │ ├── package.json │ │ │ │ └── styles/ │ │ │ │ ├── darkside-composer.less │ │ │ │ ├── darkside-drafts.less │ │ │ │ ├── darkside-inputs.less │ │ │ │ ├── darkside-labels.less │ │ │ │ ├── darkside-message-list.less │ │ │ │ ├── darkside-notifications.less │ │ │ │ ├── darkside-preferences.less │ │ │ │ ├── darkside-sidebar.less │ │ │ │ ├── darkside-swiping.less │ │ │ │ ├── darkside-thread-icons.less │ │ │ │ ├── darkside-threadlist.less │ │ │ │ ├── darkside-toolbars.less │ │ │ │ ├── darkside-variables.less │ │ │ │ ├── darkside-window-controls.less │ │ │ │ └── theme-colors.less │ │ │ ├── ui-less-is-more/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── index.less │ │ │ │ ├── package.json │ │ │ │ └── styles/ │ │ │ │ ├── less-is-more.less │ │ │ │ └── theme-colors.less │ │ │ ├── ui-light/ │ │ │ │ ├── package.json │ │ │ │ └── styles/ │ │ │ │ └── ui-variables.less │ │ │ ├── ui-taiga/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── package.json │ │ │ │ └── styles/ │ │ │ │ ├── controls.less │ │ │ │ ├── email-frame.less │ │ │ │ ├── notifications.less │ │ │ │ ├── sidebar.less │ │ │ │ ├── theme-colors.less │ │ │ │ ├── threads.less │ │ │ │ ├── ui-variables.less │ │ │ │ └── variables.less │ │ │ ├── ui-ubuntu/ │ │ │ │ ├── README.md │ │ │ │ ├── index.less │ │ │ │ ├── package.json │ │ │ │ └── styles/ │ │ │ │ ├── theme-colors.less │ │ │ │ └── ui-variables.less │ │ │ ├── undo-redo/ │ │ │ │ ├── lib/ │ │ │ │ │ ├── main.es6 │ │ │ │ │ ├── undo-redo-thread-list-toast.jsx │ │ │ │ │ ├── undo-send-store.es6 │ │ │ │ │ └── undo-send-toast.jsx │ │ │ │ └── package.json │ │ │ ├── unread-notifications/ │ │ │ │ ├── lib/ │ │ │ │ │ └── main.es6 │ │ │ │ ├── package.json │ │ │ │ └── spec/ │ │ │ │ └── main-spec.es6 │ │ │ ├── verify-install-location/ │ │ │ │ ├── lib/ │ │ │ │ │ └── main.es6 │ │ │ │ └── package.json │ │ │ └── worker-ui/ │ │ │ ├── lib/ │ │ │ │ ├── developer-bar-curl-item.cjsx │ │ │ │ ├── developer-bar-long-poll-item.cjsx │ │ │ │ ├── developer-bar-store.coffee │ │ │ │ ├── developer-bar-task.cjsx │ │ │ │ ├── developer-bar.cjsx │ │ │ │ └── main.cjsx │ │ │ ├── package.json │ │ │ └── stylesheets/ │ │ │ └── worker-ui.less │ │ ├── keymaps/ │ │ │ ├── README.m │ │ │ ├── base-darwin.json │ │ │ ├── base-linux.json │ │ │ ├── base-win32.json │ │ │ ├── base.json │ │ │ └── templates/ │ │ │ ├── Apple Mail.json │ │ │ ├── Gmail.json │ │ │ ├── Inbox by Gmail.json │ │ │ └── Outlook.json │ │ ├── menus/ │ │ │ ├── darwin.json │ │ │ ├── linux.json │ │ │ └── win32.json │ │ ├── package.json │ │ ├── script/ │ │ │ ├── grunt │ │ │ ├── grunt.cmd │ │ │ ├── mkdeb │ │ │ ├── mkrpm │ │ │ ├── publish-docs │ │ │ └── utils/ │ │ │ └── child-process-wrapper.js │ │ ├── spec/ │ │ │ ├── action-bridge-spec.coffee │ │ │ ├── async-test-spec.es6 │ │ │ ├── buffered-process-spec.coffee │ │ │ ├── components/ │ │ │ │ ├── blockquote-manager-spec.es6 │ │ │ │ ├── clipboard-service-spec.coffee │ │ │ │ ├── contenteditable-component-spec.cjsx │ │ │ │ ├── date-input-spec.jsx │ │ │ │ ├── date-picker-popover-spec.jsx │ │ │ │ ├── editable-list-spec.jsx │ │ │ │ ├── editable-table-spec.jsx │ │ │ │ ├── evented-iframe-spec.cjsx │ │ │ │ ├── fixed-popover-spec.jsx │ │ │ │ ├── injected-component-set-spec.jsx │ │ │ │ ├── multiselect-dropdown-spec.jsx │ │ │ │ ├── multiselect-list-interaction-handler-spec.coffee │ │ │ │ ├── multiselect-split-interaction-handler-spec.coffee │ │ │ │ ├── nylas-calendar/ │ │ │ │ │ ├── calendar-toggles-spec.jsx │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ └── events.es6 │ │ │ │ │ ├── test-data-source.es6 │ │ │ │ │ ├── test-utils.es6 │ │ │ │ │ ├── week-view-extended-spec.jsx │ │ │ │ │ └── week-view-spec.jsx │ │ │ │ ├── participants-text-field-spec.jsx │ │ │ │ ├── selectable-table-spec.jsx │ │ │ │ ├── table/ │ │ │ │ │ ├── table-data-source-spec.jsx │ │ │ │ │ └── table-spec.jsx │ │ │ │ └── tokenizing-text-field-spec.cjsx │ │ │ ├── database-object-registry-spec.es6 │ │ │ ├── default-client-helper-spec.coffee │ │ │ ├── fixtures/ │ │ │ │ ├── css.css │ │ │ │ ├── db-test-model.coffee │ │ │ │ ├── emails/ │ │ │ │ │ ├── correct_sig.txt │ │ │ │ │ ├── email_1.html │ │ │ │ │ ├── email_10.html │ │ │ │ │ ├── email_10_stripped.html │ │ │ │ │ ├── email_11.html │ │ │ │ │ ├── email_11_stripped.html │ │ │ │ │ ├── email_12.html │ │ │ │ │ ├── email_12_stripped.html │ │ │ │ │ ├── email_13.html │ │ │ │ │ ├── email_13_stripped.html │ │ │ │ │ ├── email_14.html │ │ │ │ │ ├── email_14_stripped.html │ │ │ │ │ ├── email_15.html │ │ │ │ │ ├── email_15_stripped.html │ │ │ │ │ ├── email_16.html │ │ │ │ │ ├── email_16_stripped.html │ │ │ │ │ ├── email_17.html │ │ │ │ │ ├── email_17_stripped.html │ │ │ │ │ ├── email_18.html │ │ │ │ │ ├── email_18_stripped.html │ │ │ │ │ ├── email_19.html │ │ │ │ │ ├── email_19_stripped.html │ │ │ │ │ ├── email_1_1.txt │ │ │ │ │ ├── email_1_2.txt │ │ │ │ │ ├── email_1_3.txt │ │ │ │ │ ├── email_1_4.txt │ │ │ │ │ ├── email_1_5.txt │ │ │ │ │ ├── email_1_6.txt │ │ │ │ │ ├── email_1_7.txt │ │ │ │ │ ├── email_1_8.txt │ │ │ │ │ ├── email_1_stripped.html │ │ │ │ │ ├── email_2.html │ │ │ │ │ ├── email_20.html │ │ │ │ │ ├── email_20_stripped.html │ │ │ │ │ ├── email_21.html │ │ │ │ │ ├── email_21_stripped.html │ │ │ │ │ ├── email_22.html │ │ │ │ │ ├── email_22_stripped.html │ │ │ │ │ ├── email_23.html │ │ │ │ │ ├── email_23_stripped.html │ │ │ │ │ ├── email_2_1.txt │ │ │ │ │ ├── email_2_stripped.html │ │ │ │ │ ├── email_3.html │ │ │ │ │ ├── email_3_stripped.html │ │ │ │ │ ├── email_4.html │ │ │ │ │ ├── email_4_stripped.html │ │ │ │ │ ├── email_5.html │ │ │ │ │ ├── email_5_stripped.html │ │ │ │ │ ├── email_6.html │ │ │ │ │ ├── email_6_stripped.html │ │ │ │ │ ├── email_7.html │ │ │ │ │ ├── email_7_stripped.html │ │ │ │ │ ├── email_8.html │ │ │ │ │ ├── email_8_stripped.html │ │ │ │ │ ├── email_9.html │ │ │ │ │ ├── email_9_stripped.html │ │ │ │ │ ├── email_BlackBerry.txt │ │ │ │ │ ├── email_bullets.txt │ │ │ │ │ ├── email_iPhone.txt │ │ │ │ │ ├── email_multi_word_sent_from_my_mobile_device.txt │ │ │ │ │ └── email_sent_from_my_not_signature.txt │ │ │ │ ├── module-cache/ │ │ │ │ │ └── file.json │ │ │ │ ├── packages/ │ │ │ │ │ ├── package-that-throws-an-exception/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-that-throws-on-activate/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-that-throws-on-deactivate/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-with-broken-keymap/ │ │ │ │ │ │ └── keymaps/ │ │ │ │ │ │ └── broken.json │ │ │ │ │ ├── package-with-broken-package-json/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-config-defaults/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-with-config-schema/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-with-deactivate/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-with-deprecated-pane-item-method/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-with-empty-activation-commands/ │ │ │ │ │ │ ├── index.coffee │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-empty-keymap/ │ │ │ │ │ │ ├── keymaps/ │ │ │ │ │ │ │ └── keymap.cson │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-empty-menu/ │ │ │ │ │ │ ├── menus/ │ │ │ │ │ │ │ └── menu.cson │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-incompatible-native-module/ │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ │ └── native-module/ │ │ │ │ │ │ │ ├── build/ │ │ │ │ │ │ │ │ └── Release/ │ │ │ │ │ │ │ │ └── native.node │ │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-index/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-with-invalid-styles/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── styles/ │ │ │ │ │ │ └── index.less │ │ │ │ │ ├── package-with-keymaps/ │ │ │ │ │ │ └── keymaps/ │ │ │ │ │ │ ├── keymap-1.json │ │ │ │ │ │ └── keymap-2.json │ │ │ │ │ ├── package-with-keymaps-manifest/ │ │ │ │ │ │ ├── keymaps/ │ │ │ │ │ │ │ ├── keymap-1.json │ │ │ │ │ │ │ └── keymap-2.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-main/ │ │ │ │ │ │ ├── main-module.coffee │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-menus/ │ │ │ │ │ │ └── menus/ │ │ │ │ │ │ ├── menu-1.json │ │ │ │ │ │ └── menu-2.json │ │ │ │ │ ├── package-with-menus-manifest/ │ │ │ │ │ │ ├── menus/ │ │ │ │ │ │ │ ├── menu-1.json │ │ │ │ │ │ │ └── menu-2.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-models/ │ │ │ │ │ │ ├── main-module.coffee │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-serialization/ │ │ │ │ │ │ └── index.coffee │ │ │ │ │ ├── package-with-serialize-error/ │ │ │ │ │ │ ├── index.coffee │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-with-style-sheets-manifest/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── styles/ │ │ │ │ │ │ ├── 1.css │ │ │ │ │ │ ├── 2.less │ │ │ │ │ │ └── 3.css │ │ │ │ │ ├── package-with-styles/ │ │ │ │ │ │ └── styles/ │ │ │ │ │ │ ├── 1.css │ │ │ │ │ │ ├── 2.less │ │ │ │ │ │ ├── 3.test-context.css │ │ │ │ │ │ └── 4.css │ │ │ │ │ ├── package-with-stylesheets-manifest/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package-without-module/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── theme-with-incomplete-ui-variables/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── styles/ │ │ │ │ │ │ ├── editor.less │ │ │ │ │ │ └── ui-variables.less │ │ │ │ │ ├── theme-with-index-css/ │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── theme-with-index-less/ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── theme-with-invalid-styles/ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── theme-with-package-file/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── styles/ │ │ │ │ │ │ ├── first.css │ │ │ │ │ │ ├── last.css │ │ │ │ │ │ └── second.less │ │ │ │ │ ├── theme-with-ui-variables/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── styles/ │ │ │ │ │ │ ├── editor.less │ │ │ │ │ │ └── ui-variables.less │ │ │ │ │ └── theme-without-package-file/ │ │ │ │ │ └── styles/ │ │ │ │ │ ├── a.css │ │ │ │ │ ├── b.css │ │ │ │ │ ├── c.less │ │ │ │ │ └── d.csv │ │ │ │ ├── paste/ │ │ │ │ │ ├── excel-paste-in.html │ │ │ │ │ ├── excel-paste-out.html │ │ │ │ │ ├── word-paste-in.html │ │ │ │ │ └── word-paste-out.html │ │ │ │ ├── sample-deltas-clustered.json │ │ │ │ ├── sample-deltas.json │ │ │ │ ├── sample.less │ │ │ │ ├── table-data.es6 │ │ │ │ └── task-spec-handler.coffee │ │ │ ├── list-selection-spec.coffee │ │ │ ├── mail-rules-processor-spec.coffee │ │ │ ├── mailbox-perspective-spec.es6 │ │ │ ├── menu-manager-spec.coffee │ │ │ ├── models/ │ │ │ │ ├── category-spec.coffee │ │ │ │ ├── contact-spec.coffee │ │ │ │ ├── event-spec.coffee │ │ │ │ ├── file-spec.coffee │ │ │ │ ├── message-spec.coffee │ │ │ │ ├── model-spec.es6 │ │ │ │ ├── model-with-metadata-spec.es6 │ │ │ │ ├── mutable-query-result-set-spec.es6 │ │ │ │ ├── query-range-spec.es6 │ │ │ │ ├── query-spec.es6 │ │ │ │ ├── query-subscription-pool-spec.es6 │ │ │ │ ├── query-subscription-spec.es6 │ │ │ │ └── thread-spec.coffee │ │ │ ├── module-cache-spec.coffee │ │ │ ├── n1-spec-runner/ │ │ │ │ ├── console-reporter.es6 │ │ │ │ ├── jasmine-extensions.es6 │ │ │ │ ├── jasmine.js │ │ │ │ ├── master-after-each.es6 │ │ │ │ ├── master-before-each.es6 │ │ │ │ ├── n1-gui-reporter.cjsx │ │ │ │ ├── n1-spec-loader.es6 │ │ │ │ ├── n1-spec-runner.es6 │ │ │ │ ├── nylas-test-constants.es6 │ │ │ │ ├── react-test-utils-extensions.es6 │ │ │ │ ├── spec-bootstrap.es6 │ │ │ │ ├── terminal-reporter.es6 │ │ │ │ ├── time-override.coffee │ │ │ │ └── time-reporter.coffee │ │ │ ├── nylas-api-spec.coffee │ │ │ ├── nylas-env-spec.es6 │ │ │ ├── nylas-protocol-handler-spec.es6 │ │ │ ├── nylas-test-utils.coffee │ │ │ ├── package-manager-spec.coffee │ │ │ ├── package-spec.coffee │ │ │ ├── registries/ │ │ │ │ ├── component-registry-spec.coffee │ │ │ │ └── extension-registry-spec.coffee │ │ │ ├── services/ │ │ │ │ ├── delta-processor-spec.coffee │ │ │ │ ├── delta-streaming-connection-spec.coffee │ │ │ │ ├── inline-style-transformer-spec.coffee │ │ │ │ ├── quoted-html-transformer-spec.coffee │ │ │ │ ├── quoted-plain-text-transformer-spec.coffee │ │ │ │ └── search/ │ │ │ │ ├── search-query-backend-imap-spec.es6 │ │ │ │ └── search-query-parser-spec.es6 │ │ │ ├── spellchecker-spec.es6 │ │ │ ├── stores/ │ │ │ │ ├── account-store-spec.coffee │ │ │ │ ├── badge-store-spec.coffee │ │ │ │ ├── contact-store-spec.coffee │ │ │ │ ├── database-setup-query-builder-spec.es6 │ │ │ │ ├── database-store-spec.es6 │ │ │ │ ├── database-transaction-spec.es6 │ │ │ │ ├── draft-editing-session-spec.coffee │ │ │ │ ├── draft-factory-spec.es6 │ │ │ │ ├── draft-helpers-spec.es6 │ │ │ │ ├── draft-store-spec.es6 │ │ │ │ ├── feature-usage-store-spec.es6 │ │ │ │ ├── file-download-store-spec.coffee │ │ │ │ ├── file-upload-store-spec.coffee │ │ │ │ ├── focused-contacts-store-spec.coffee │ │ │ │ ├── focused-content-store-spec.coffee │ │ │ │ ├── focused-perspective-store-spec.coffee │ │ │ │ ├── folder-sync-progress-store-spec.es6 │ │ │ │ ├── identity-store-spec.es6 │ │ │ │ ├── message-store-spec.coffee │ │ │ │ ├── send-actions-store-spec.es6 │ │ │ │ ├── task-queue-spec.coffee │ │ │ │ ├── task-subclass.es6 │ │ │ │ └── undo-redo-store-spec.es6 │ │ │ ├── tasks/ │ │ │ │ ├── base-draft-task-spec.es6 │ │ │ │ ├── change-folder-task-spec.coffee │ │ │ │ ├── change-labels-task-spec.coffee │ │ │ │ ├── change-mail-task-spec.coffee │ │ │ │ ├── change-starred-task-spec.coffee │ │ │ │ ├── change-unread-task-spec.coffee │ │ │ │ ├── destroy-category-task-spec.coffee │ │ │ │ ├── destroy-model-task-spec.es6 │ │ │ │ ├── event-rsvp-task-spec.coffee │ │ │ │ ├── send-draft-task-spec.es6 │ │ │ │ ├── syncback-category-task-spec.coffee │ │ │ │ ├── syncback-metadata-task-spec.es6 │ │ │ │ ├── syncback-model-task-spec.es6 │ │ │ │ ├── task-factory-spec.es6 │ │ │ │ └── task-spec.coffee │ │ │ ├── themes/ │ │ │ │ ├── style-manager-spec.coffee │ │ │ │ ├── styles-element-spec.coffee │ │ │ │ └── theme-manager-spec.coffee │ │ │ ├── undo-stack-spec.es6 │ │ │ └── utils/ │ │ │ ├── date-utils-spec.es6 │ │ │ ├── dom-utils-spec.coffee │ │ │ └── utils-spec.coffee │ │ ├── src/ │ │ │ ├── apm-wrapper.coffee │ │ │ ├── browser/ │ │ │ │ ├── application-menu.coffee │ │ │ │ ├── application.es6 │ │ │ │ ├── config-migrator.es6 │ │ │ │ ├── config-persistence-manager.es6 │ │ │ │ ├── database-reader.es6 │ │ │ │ ├── file-list-cache.es6 │ │ │ │ ├── global-timer.es6 │ │ │ │ ├── linux-updater-adapter.es6 │ │ │ │ ├── main.js │ │ │ │ ├── nylas-protocol-handler.es6 │ │ │ │ ├── nylas-window.coffee │ │ │ │ ├── package-migration-manager.es6 │ │ │ │ ├── prevent-legacy-n1-migration.es6 │ │ │ │ ├── system-tray-manager.es6 │ │ │ │ ├── window-launcher.es6 │ │ │ │ ├── window-manager.es6 │ │ │ │ ├── windows-updater-squirrel-adapter.coffee │ │ │ │ └── windows-updater.js │ │ │ ├── buffered-process.coffee │ │ │ ├── canvas-utils.coffee │ │ │ ├── chaos-monkey.coffee │ │ │ ├── chrome-user-agent-stylesheet-string.coffee │ │ │ ├── color.coffee │ │ │ ├── compile-cache.js │ │ │ ├── compile-support/ │ │ │ │ ├── babel.js │ │ │ │ ├── cjsx.js │ │ │ │ ├── coffee-script.js │ │ │ │ └── typescript.js │ │ │ ├── components/ │ │ │ │ ├── attachment-items.jsx │ │ │ │ ├── billing-modal.jsx │ │ │ │ ├── bolded-search-result.jsx │ │ │ │ ├── button-dropdown.cjsx │ │ │ │ ├── code-snippet.jsx │ │ │ │ ├── config-prop-container.jsx │ │ │ │ ├── contenteditable/ │ │ │ │ │ ├── blockquote-manager.es6 │ │ │ │ │ ├── clipboard-service.es6 │ │ │ │ │ ├── contenteditable-service.es6 │ │ │ │ │ ├── contenteditable.cjsx │ │ │ │ │ ├── dom-normalizer.coffee │ │ │ │ │ ├── editor-api.coffee │ │ │ │ │ ├── emphasis-formatting-extension.es6 │ │ │ │ │ ├── exported-selection.es6 │ │ │ │ │ ├── extended-selection.coffee │ │ │ │ │ ├── floating-toolbar.cjsx │ │ │ │ │ ├── link-editor.cjsx │ │ │ │ │ ├── link-manager.es6 │ │ │ │ │ ├── list-manager.es6 │ │ │ │ │ ├── mouse-service.es6 │ │ │ │ │ ├── paragraph-formatting-extension.es6 │ │ │ │ │ ├── tab-manager.es6 │ │ │ │ │ ├── toolbar-button-manager.es6 │ │ │ │ │ └── toolbar-buttons.jsx │ │ │ │ ├── date-input.jsx │ │ │ │ ├── date-picker-popover.jsx │ │ │ │ ├── date-picker.jsx │ │ │ │ ├── decorators/ │ │ │ │ │ ├── auto-focuses.jsx │ │ │ │ │ ├── compose.es6 │ │ │ │ │ ├── has-tutorial-tip.jsx │ │ │ │ │ ├── listens-to-flux-store.jsx │ │ │ │ │ ├── listens-to-movement-keys.jsx │ │ │ │ │ └── listens-to-observable.jsx │ │ │ │ ├── disclosure-triangle.cjsx │ │ │ │ ├── drop-zone.jsx │ │ │ │ ├── dropdown-menu.jsx │ │ │ │ ├── editable-list.jsx │ │ │ │ ├── editable-table.jsx │ │ │ │ ├── empty-list-state.cjsx │ │ │ │ ├── evented-iframe.cjsx │ │ │ │ ├── feature-used-up-modal.jsx │ │ │ │ ├── fixed-popover.jsx │ │ │ │ ├── flexbox.jsx │ │ │ │ ├── flux-container.jsx │ │ │ │ ├── focus-container.jsx │ │ │ │ ├── generated-form.cjsx │ │ │ │ ├── injected-component-label.jsx │ │ │ │ ├── injected-component-set.cjsx │ │ │ │ ├── injected-component.cjsx │ │ │ │ ├── key-commands-region.jsx │ │ │ │ ├── lazy-rendered-list.jsx │ │ │ │ ├── list-data-source.es6 │ │ │ │ ├── list-selection.es6 │ │ │ │ ├── list-tabular-item.cjsx │ │ │ │ ├── list-tabular.jsx │ │ │ │ ├── mail-important-icon.cjsx │ │ │ │ ├── mail-label-set.jsx │ │ │ │ ├── mail-label.jsx │ │ │ │ ├── menu.cjsx │ │ │ │ ├── metadata-composer-toggle-button.jsx │ │ │ │ ├── modal.jsx │ │ │ │ ├── multiselect-action-bar.cjsx │ │ │ │ ├── multiselect-dropdown.jsx │ │ │ │ ├── multiselect-list-interaction-handler.coffee │ │ │ │ ├── multiselect-list.cjsx │ │ │ │ ├── multiselect-split-interaction-handler.coffee │ │ │ │ ├── multiselect-toolbar.jsx │ │ │ │ ├── notification.jsx │ │ │ │ ├── nylas-calendar/ │ │ │ │ │ ├── calendar-constants.es6 │ │ │ │ │ ├── calendar-data-source.es6 │ │ │ │ │ ├── calendar-event-container.jsx │ │ │ │ │ ├── calendar-event-popover.jsx │ │ │ │ │ ├── calendar-event.jsx │ │ │ │ │ ├── calendar-helpers.jsx │ │ │ │ │ ├── calendar-toggles.jsx │ │ │ │ │ ├── current-time-indicator.jsx │ │ │ │ │ ├── event-grid-background.jsx │ │ │ │ │ ├── event-participants-input.jsx │ │ │ │ │ ├── event-search-bar.jsx │ │ │ │ │ ├── footer-controls.jsx │ │ │ │ │ ├── header-controls.jsx │ │ │ │ │ ├── mini-month-view.jsx │ │ │ │ │ ├── month-view.jsx │ │ │ │ │ ├── nylas-calendar.jsx │ │ │ │ │ ├── top-banner.jsx │ │ │ │ │ ├── week-view-all-day-events.jsx │ │ │ │ │ ├── week-view-event-column.jsx │ │ │ │ │ └── week-view.jsx │ │ │ │ ├── oauth-signin-page.jsx │ │ │ │ ├── open-identity-page-button.jsx │ │ │ │ ├── outline-view-item.jsx │ │ │ │ ├── outline-view.jsx │ │ │ │ ├── overlaid-components/ │ │ │ │ │ ├── anchor-constants.es6 │ │ │ │ │ ├── custom-contenteditable-components.es6 │ │ │ │ │ ├── overlaid-components.jsx │ │ │ │ │ └── overlaid-composer-extension.es6 │ │ │ │ ├── participants-text-field.jsx │ │ │ │ ├── resizable-region.cjsx │ │ │ │ ├── retina-img.jsx │ │ │ │ ├── scenario-editor-models.es6 │ │ │ │ ├── scenario-editor-row.cjsx │ │ │ │ ├── scenario-editor.cjsx │ │ │ │ ├── scroll-region.cjsx │ │ │ │ ├── scrollbar-ticks.jsx │ │ │ │ ├── search-bar.jsx │ │ │ │ ├── selectable-table.jsx │ │ │ │ ├── spinner.cjsx │ │ │ │ ├── swipe-container.jsx │ │ │ │ ├── switch.jsx │ │ │ │ ├── syncing-list-state.jsx │ │ │ │ ├── tab-group-region.cjsx │ │ │ │ ├── table/ │ │ │ │ │ ├── table-data-source.es6 │ │ │ │ │ └── table.jsx │ │ │ │ ├── time-picker.jsx │ │ │ │ ├── toast.jsx │ │ │ │ ├── tokenizing-text-field.jsx │ │ │ │ ├── undo-toast.jsx │ │ │ │ ├── unsafe-component.cjsx │ │ │ │ └── webview.jsx │ │ │ ├── config-schema.es6 │ │ │ ├── config-utils.js │ │ │ ├── config.coffee │ │ │ ├── database-helpers.es6 │ │ │ ├── date-utils.es6 │ │ │ ├── decorators/ │ │ │ │ └── inflates-draft-client-id.jsx │ │ │ ├── default-client-helper.coffee │ │ │ ├── deprecate-utils.coffee │ │ │ ├── dom-utils.coffee │ │ │ ├── dom-walkers.es6 │ │ │ ├── error-logger-extensions/ │ │ │ │ └── nylas-private-error-reporter.js │ │ │ ├── error-logger.js │ │ │ ├── extensions/ │ │ │ │ ├── account-sidebar-extension.es6 │ │ │ │ ├── composer-extension.coffee │ │ │ │ ├── contenteditable-extension.coffee │ │ │ │ ├── extension-utils.es6 │ │ │ │ ├── message-view-extension.coffee │ │ │ │ └── thread-list-extension.es6 │ │ │ ├── flux/ │ │ │ │ ├── action-bridge.es6 │ │ │ │ ├── actions.es6 │ │ │ │ ├── attributes/ │ │ │ │ │ ├── attribute-boolean.es6 │ │ │ │ │ ├── attribute-collection.es6 │ │ │ │ │ ├── attribute-datetime.es6 │ │ │ │ │ ├── attribute-joined-data.es6 │ │ │ │ │ ├── attribute-number.es6 │ │ │ │ │ ├── attribute-object.es6 │ │ │ │ │ ├── attribute-serverid.es6 │ │ │ │ │ ├── attribute-string.es6 │ │ │ │ │ ├── attribute.es6 │ │ │ │ │ ├── matcher.es6 │ │ │ │ │ └── sort-order.es6 │ │ │ │ ├── attributes.es6 │ │ │ │ ├── coffee-helpers.coffee │ │ │ │ ├── errors.es6 │ │ │ │ ├── models/ │ │ │ │ │ ├── account.es6 │ │ │ │ │ ├── calendar.es6 │ │ │ │ │ ├── category.es6 │ │ │ │ │ ├── contact.es6 │ │ │ │ │ ├── event.es6 │ │ │ │ │ ├── file.es6 │ │ │ │ │ ├── folder.es6 │ │ │ │ │ ├── json-blob.es6 │ │ │ │ │ ├── label.es6 │ │ │ │ │ ├── message-utils.es6 │ │ │ │ │ ├── message.es6 │ │ │ │ │ ├── model-with-metadata.es6 │ │ │ │ │ ├── model.coffee │ │ │ │ │ ├── mutable-query-result-set.es6 │ │ │ │ │ ├── mutable-query-subscription.es6 │ │ │ │ │ ├── provider-syncback-request.es6 │ │ │ │ │ ├── query-range.es6 │ │ │ │ │ ├── query-result-set.es6 │ │ │ │ │ ├── query-subscription-pool.es6 │ │ │ │ │ ├── query-subscription.es6 │ │ │ │ │ ├── query.es6 │ │ │ │ │ ├── thread.es6 │ │ │ │ │ ├── unread-query-subscription.es6 │ │ │ │ │ └── utils.coffee │ │ │ │ ├── modules/ │ │ │ │ │ └── reflux-coffee.coffee │ │ │ │ ├── nylas-api-helpers.es6 │ │ │ │ ├── nylas-api-request.es6 │ │ │ │ ├── nylas-api.es6 │ │ │ │ ├── nylas-long-connection.es6 │ │ │ │ ├── stores/ │ │ │ │ │ ├── account-store.es6 │ │ │ │ │ ├── badge-store.es6 │ │ │ │ │ ├── category-store.coffee │ │ │ │ │ ├── contact-ranking-store.coffee │ │ │ │ │ ├── contact-store.coffee │ │ │ │ │ ├── database-agent.js │ │ │ │ │ ├── database-change-record.es6 │ │ │ │ │ ├── database-setup-query-builder.es6 │ │ │ │ │ ├── database-store.es6 │ │ │ │ │ ├── database-writer.es6 │ │ │ │ │ ├── delta-connection-store.es6 │ │ │ │ │ ├── draft-editing-session.coffee │ │ │ │ │ ├── draft-factory.coffee │ │ │ │ │ ├── draft-helpers.es6 │ │ │ │ │ ├── draft-store-extension.coffee │ │ │ │ │ ├── draft-store.es6 │ │ │ │ │ ├── feature-usage-store.jsx │ │ │ │ │ ├── file-download-store.es6 │ │ │ │ │ ├── file-upload-store.es6 │ │ │ │ │ ├── focused-contacts-store.es6 │ │ │ │ │ ├── focused-content-store.coffee │ │ │ │ │ ├── focused-perspective-store.es6 │ │ │ │ │ ├── folder-sync-progress-store.es6 │ │ │ │ │ ├── identity-store.es6 │ │ │ │ │ ├── mail-rules-store.coffee │ │ │ │ │ ├── message-body-processor.es6 │ │ │ │ │ ├── message-store-extension.coffee │ │ │ │ │ ├── message-store.coffee │ │ │ │ │ ├── metadata-store.es6 │ │ │ │ │ ├── modal-store.jsx │ │ │ │ │ ├── observable-list-data-source.es6 │ │ │ │ │ ├── online-status-store.es6 │ │ │ │ │ ├── outbox-store.es6 │ │ │ │ │ ├── popover-store.jsx │ │ │ │ │ ├── preferences-ui-store.es6 │ │ │ │ │ ├── recently-read-store.es6 │ │ │ │ │ ├── searchable-component-store.es6 │ │ │ │ │ ├── send-actions-store.es6 │ │ │ │ │ ├── signature-store.es6 │ │ │ │ │ ├── task-queue-status-store.coffee │ │ │ │ │ ├── task-queue.coffee │ │ │ │ │ ├── thread-counts-store.coffee │ │ │ │ │ ├── thread-list-actions-store.es6 │ │ │ │ │ ├── undo-redo-store.es6 │ │ │ │ │ └── workspace-store.coffee │ │ │ │ ├── syncback-task-api-request.es6 │ │ │ │ └── tasks/ │ │ │ │ ├── base-draft-task.es6 │ │ │ │ ├── change-folder-task.es6 │ │ │ │ ├── change-labels-task.es6 │ │ │ │ ├── change-mail-task.es6 │ │ │ │ ├── change-starred-task.es6 │ │ │ │ ├── change-unread-task.es6 │ │ │ │ ├── destroy-category-task.es6 │ │ │ │ ├── destroy-draft-task.es6 │ │ │ │ ├── destroy-model-task.es6 │ │ │ │ ├── ensure-message-in-sent-folder-task.es6 │ │ │ │ ├── event-rsvp-task.es6 │ │ │ │ ├── perform-send-action-task.es6 │ │ │ │ ├── reprocess-mail-rules-task.es6 │ │ │ │ ├── send-draft-task.es6 │ │ │ │ ├── send-feature-usage-event-task.es6 │ │ │ │ ├── syncback-category-task.es6 │ │ │ │ ├── syncback-event-task.es6 │ │ │ │ ├── syncback-metadata-task.es6 │ │ │ │ ├── syncback-model-task.es6 │ │ │ │ ├── task-factory.es6 │ │ │ │ └── task.es6 │ │ │ ├── fs-utils.es6 │ │ │ ├── global/ │ │ │ │ ├── nylas-component-kit.coffee │ │ │ │ ├── nylas-exports.es6 │ │ │ │ ├── nylas-observables.coffee │ │ │ │ └── nylas-store.coffee │ │ │ ├── key-manager.es6 │ │ │ ├── keymap-manager.es6 │ │ │ ├── less-compile-cache.es6 │ │ │ ├── mail-rules-processor.coffee │ │ │ ├── mail-rules-templates.coffee │ │ │ ├── mailbox-perspective.coffee │ │ │ ├── menu-helpers.coffee │ │ │ ├── menu-manager.es6 │ │ │ ├── module-cache.coffee │ │ │ ├── multi-request-progress-monitor.es6 │ │ │ ├── n1-cloud-api.es6 │ │ │ ├── native-notifications.es6 │ │ │ ├── nylas-env.es6 │ │ │ ├── package-manager.coffee │ │ │ ├── package.coffee │ │ │ ├── priority-ui-coordinator.es6 │ │ │ ├── regexp-utils.coffee │ │ │ ├── registries/ │ │ │ │ ├── command-registry.es6 │ │ │ │ ├── component-registry.coffee │ │ │ │ ├── database-object-registry.es6 │ │ │ │ ├── extension-registry.es6 │ │ │ │ ├── serializable-registry.es6 │ │ │ │ ├── service-registry.es6 │ │ │ │ ├── sound-registry.coffee │ │ │ │ ├── store-registry.es6 │ │ │ │ └── task-registry.es6 │ │ │ ├── searchable-components/ │ │ │ │ ├── iframe-searcher.es6 │ │ │ │ ├── real-dom-parser.es6 │ │ │ │ ├── search-constants.es6 │ │ │ │ ├── search-match.jsx │ │ │ │ ├── searchable-component-maker.jsx │ │ │ │ ├── unified-dom-parser.es6 │ │ │ │ └── virtual-dom-parser.es6 │ │ │ ├── secondary-window-bootstrap.es6 │ │ │ ├── services/ │ │ │ │ ├── battery-status-manager.es6 │ │ │ │ ├── delta-processor.es6 │ │ │ │ ├── delta-streaming-connection.es6 │ │ │ │ ├── inline-style-transformer.es6 │ │ │ │ ├── model-search-indexer.es6 │ │ │ │ ├── quote-string-detector.es6 │ │ │ │ ├── quoted-html-transformer.es6 │ │ │ │ ├── quoted-plain-text-transformer.coffee │ │ │ │ ├── sanitize-transformer.es6 │ │ │ │ ├── search/ │ │ │ │ │ ├── search-query-ast.es6 │ │ │ │ │ ├── search-query-backend-imap.es6 │ │ │ │ │ ├── search-query-backend-local.es6 │ │ │ │ │ └── search-query-parser.es6 │ │ │ │ ├── search-index-scheduler.es6 │ │ │ │ └── unwrapped-signature-detector.es6 │ │ │ ├── sheet-container.cjsx │ │ │ ├── sheet-toolbar.cjsx │ │ │ ├── sheet.cjsx │ │ │ ├── spellchecker.es6 │ │ │ ├── style-manager.coffee │ │ │ ├── styles-element.coffee │ │ │ ├── system-start-service.es6 │ │ │ ├── task-bootstrap.coffee │ │ │ ├── task.coffee │ │ │ ├── theme-manager.coffee │ │ │ ├── theme-package.coffee │ │ │ ├── undo-stack.es6 │ │ │ ├── virtual-dom-utils.es6 │ │ │ ├── window-bootstrap.es6 │ │ │ ├── window-bridge.coffee │ │ │ ├── window-event-handler.coffee │ │ │ └── window.coffee │ │ └── static/ │ │ ├── animations/ │ │ │ └── inbox-zero/ │ │ │ ├── airstrip/ │ │ │ │ ├── airstrip.html │ │ │ │ └── airstrip.hyperesources/ │ │ │ │ ├── 96CD36-restorable.plist │ │ │ │ ├── PIE.htc │ │ │ │ └── airstrip_hype_generated_script.js │ │ │ ├── galaxy/ │ │ │ │ ├── galaxy.html │ │ │ │ └── galaxy.hyperesources/ │ │ │ │ ├── BC8A15-restorable.plist │ │ │ │ ├── PIE.htc │ │ │ │ └── galaxy_hype_generated_script.js │ │ │ ├── gem/ │ │ │ │ ├── gem.html │ │ │ │ └── gem.hyperesources/ │ │ │ │ └── gemslower_hype_generated_script.js │ │ │ ├── oasis/ │ │ │ │ ├── oasis.html │ │ │ │ └── oasis.hyperesources/ │ │ │ │ ├── DC9C02-restorable.plist │ │ │ │ ├── PIE.htc │ │ │ │ └── oasis_hype_generated_script.js │ │ │ └── tron/ │ │ │ ├── tron.html │ │ │ └── tron.hyperesources/ │ │ │ ├── 4982A5-restorable.plist │ │ │ ├── PIE.htc │ │ │ └── tron_hype_generated_script.js │ │ ├── buttons.less │ │ ├── components/ │ │ │ ├── attachment-items.less │ │ │ ├── billing-modal.less │ │ │ ├── button-dropdown.less │ │ │ ├── code-snippet.less │ │ │ ├── contenteditable.less │ │ │ ├── date-input.less │ │ │ ├── date-picker-popover.less │ │ │ ├── date-picker.less │ │ │ ├── disclosure-triangle.less │ │ │ ├── editable-list.less │ │ │ ├── editable-table.less │ │ │ ├── empty-list-state.less │ │ │ ├── extra.less │ │ │ ├── feature-used-up-modal.less │ │ │ ├── fixed-popover.less │ │ │ ├── generated-form.less │ │ │ ├── key-commands-region.less │ │ │ ├── list-tabular.less │ │ │ ├── menu.less │ │ │ ├── modal.less │ │ │ ├── multiselect-dropdown.less │ │ │ ├── nylas-calendar.less │ │ │ ├── outline-view.less │ │ │ ├── scroll-region.less │ │ │ ├── search-bar.less │ │ │ ├── spinner.less │ │ │ ├── switch.less │ │ │ ├── syncing-list-state.less │ │ │ ├── table.less │ │ │ ├── time-picker.less │ │ │ ├── toast.less │ │ │ ├── tokenizing-text-field.less │ │ │ ├── tutorial-overlay.less │ │ │ ├── undo-toast.less │ │ │ ├── unsafe.less │ │ │ └── webview.less │ │ ├── dropdowns.less │ │ ├── email-frame.less │ │ ├── index.html │ │ ├── index.js │ │ ├── index.less │ │ ├── inputs.less │ │ ├── jasmine.less │ │ ├── linux.less │ │ ├── mixins/ │ │ │ ├── background-variant.less │ │ │ ├── common-ui-elements.less │ │ │ ├── text-emphasis.less │ │ │ └── windows.less │ │ ├── normalize.less │ │ ├── package-template/ │ │ │ ├── README.md │ │ │ ├── lib/ │ │ │ │ ├── main.es6 │ │ │ │ ├── my-composer-button.jsx │ │ │ │ └── my-message-sidebar.jsx │ │ │ ├── spec/ │ │ │ │ ├── main-spec.es6 │ │ │ │ └── my-composer-button-spec.jsx │ │ │ └── stylesheets/ │ │ │ └── main.less │ │ ├── resizable.less │ │ ├── selection.less │ │ ├── sounds/ │ │ │ ├── mail_sent.ogg │ │ │ └── new_mail.ogg │ │ ├── type.less │ │ ├── utilities.less │ │ ├── variables/ │ │ │ ├── ui-mixins.less │ │ │ └── ui-variables.less │ │ └── workspace.less │ ├── client-sync/ │ │ ├── README.md │ │ ├── main.es6 │ │ ├── package.json │ │ ├── spec/ │ │ │ ├── fixtures/ │ │ │ │ ├── FetchFolderList/ │ │ │ │ │ ├── gmail-bengotow.json │ │ │ │ │ └── imap-inboxapptest1.json │ │ │ │ ├── MessageUtils/ │ │ │ │ │ ├── parseFromImap/ │ │ │ │ │ │ ├── crypto-gram-ascii-plaintext.json │ │ │ │ │ │ ├── eff-plaintext-no-mime.json │ │ │ │ │ │ ├── hacker-newsletter-multipart-alternative.json │ │ │ │ │ │ ├── mileageplus-mime-html-only.json │ │ │ │ │ │ ├── node-streamtest-windows-1252.json │ │ │ │ │ │ ├── spam-mime-html-base64-encoded.json │ │ │ │ │ │ └── theskimm-multipart-alternative-quoted-printable.json │ │ │ │ │ └── parseSnippet/ │ │ │ │ │ ├── finimize.html │ │ │ │ │ ├── finimize.txt │ │ │ │ │ ├── fittymi.html │ │ │ │ │ ├── fittymi.txt │ │ │ │ │ ├── mit_events.html │ │ │ │ │ ├── mit_events.txt │ │ │ │ │ ├── personal_capital.html │ │ │ │ │ └── personal_capital.txt │ │ │ │ └── Threading/ │ │ │ │ ├── remote-thread-id-no.js │ │ │ │ ├── remote-thread-id-yes.js │ │ │ │ ├── subject-matching-no.js │ │ │ │ └── subject-matching-yes.js │ │ │ ├── helpers.js │ │ │ ├── local-sync-worker/ │ │ │ │ ├── imap-helpers-spec.es6 │ │ │ │ ├── sync-process-manager-spec.es6 │ │ │ │ ├── sync-tasks/ │ │ │ │ │ └── fetch-folder-list-spec.js │ │ │ │ └── syncback-tasks/ │ │ │ │ └── syncback-task-spec.es6 │ │ │ ├── message-processor/ │ │ │ │ └── detect-thread-spec.js │ │ │ └── shared/ │ │ │ └── interruptible-spec.es6 │ │ ├── src/ │ │ │ ├── local-api/ │ │ │ │ ├── decorators/ │ │ │ │ │ └── connections.js │ │ │ │ ├── default-sync-policy.js │ │ │ │ ├── index.js │ │ │ │ ├── newrelic.js │ │ │ │ ├── route-helpers.es6 │ │ │ │ ├── routes/ │ │ │ │ │ ├── auth.js │ │ │ │ │ ├── calendars.js │ │ │ │ │ ├── categories.js │ │ │ │ │ ├── contacts.js │ │ │ │ │ ├── drafts.js │ │ │ │ │ ├── events.js │ │ │ │ │ ├── files.js │ │ │ │ │ ├── health.es6 │ │ │ │ │ ├── messages.js │ │ │ │ │ ├── ping.js │ │ │ │ │ ├── send.js │ │ │ │ │ └── threads.js │ │ │ │ ├── search.js │ │ │ │ └── serialization.js │ │ │ ├── local-sync-dashboard/ │ │ │ │ ├── dropdown.jsx │ │ │ │ ├── elapsed-time.jsx │ │ │ │ ├── modal.jsx │ │ │ │ ├── root.jsx │ │ │ │ ├── set-all-sync-policies.jsx │ │ │ │ ├── sync-graph.jsx │ │ │ │ └── syncback-request-details.jsx │ │ │ ├── local-sync-worker/ │ │ │ │ ├── imap-helpers.js │ │ │ │ ├── index.js │ │ │ │ ├── local-sync-delta-emitter.es6 │ │ │ │ ├── newrelic.js │ │ │ │ ├── send-task-manager.es6 │ │ │ │ ├── send-task-runner.es6 │ │ │ │ ├── sync-process-manager.es6 │ │ │ │ ├── sync-task-factory.js │ │ │ │ ├── sync-tasks/ │ │ │ │ │ ├── fetch-folder-list.imap.es6 │ │ │ │ │ ├── fetch-messages-in-folder.imap.es6 │ │ │ │ │ ├── fetch-new-messages-in-folder.imap.es6 │ │ │ │ │ ├── fetch-specific-messages-in-folder.imap.es6 │ │ │ │ │ └── sync-task.js │ │ │ │ ├── sync-utils.es6 │ │ │ │ ├── sync-worker.es6 │ │ │ │ ├── syncback-task-factory.js │ │ │ │ ├── syncback-task-runner.es6 │ │ │ │ └── syncback-tasks/ │ │ │ │ ├── create-category.imap.es6 │ │ │ │ ├── delete-folder.imap.es6 │ │ │ │ ├── delete-label.imap.es6 │ │ │ │ ├── ensure-message-in-sent-folder.imap.es6 │ │ │ │ ├── mark-thread-as-read.imap.es6 │ │ │ │ ├── mark-thread-as-unread.imap.es6 │ │ │ │ ├── move-thread-to-folder.imap.es6 │ │ │ │ ├── rename-folder.imap.es6 │ │ │ │ ├── rename-label.imap.es6 │ │ │ │ ├── send-message-per-recipient.smtp.es6 │ │ │ │ ├── send-message.smtp.es6 │ │ │ │ ├── set-thread-folder-and-labels.imap.es6 │ │ │ │ ├── set-thread-labels.imap.es6 │ │ │ │ ├── star-thread.imap.es6 │ │ │ │ ├── sync-unknown-uids.imap.es6 │ │ │ │ ├── syncback-task.es6 │ │ │ │ └── unstar-thread.imap.es6 │ │ │ ├── message-processor/ │ │ │ │ ├── detect-thread.js │ │ │ │ ├── extract-contacts.js │ │ │ │ ├── extract-files.js │ │ │ │ └── index.js │ │ │ ├── models/ │ │ │ │ ├── contact.js │ │ │ │ ├── file.js │ │ │ │ ├── folder.es6 │ │ │ │ ├── label.js │ │ │ │ ├── message.js │ │ │ │ ├── messageLabel.js │ │ │ │ ├── messageReference.js │ │ │ │ ├── reference.js │ │ │ │ ├── syncbackRequest.js │ │ │ │ ├── thread.js │ │ │ │ ├── threadFolder.js │ │ │ │ └── threadLabel.js │ │ │ └── shared/ │ │ │ ├── database-extensions.js │ │ │ ├── dedupe-accounts.es6 │ │ │ ├── imap-paths-utils.js │ │ │ ├── interruptible.js │ │ │ ├── local-database-connector.js │ │ │ ├── logger.es6 │ │ │ ├── shim-sequelize.es6 │ │ │ ├── stream-decoders.es6 │ │ │ ├── sync-activity.es6 │ │ │ └── transaction-connector.js │ │ └── stylesheets/ │ │ └── index.less │ ├── cloud-api/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app.es6 │ │ ├── package.json │ │ ├── spec/ │ │ │ ├── helpers.es6 │ │ │ ├── jasmine/ │ │ │ │ ├── execute.es6 │ │ │ │ ├── extensions.es6 │ │ │ │ └── polyfills.es6 │ │ │ ├── metatdata-spec.es6 │ │ │ └── run.es6 │ │ ├── src/ │ │ │ ├── authentication.es6 │ │ │ ├── decorators/ │ │ │ │ ├── error-format.es6 │ │ │ │ └── logger.es6 │ │ │ ├── routes/ │ │ │ │ ├── admin.es6 │ │ │ │ ├── auth.es6 │ │ │ │ ├── blobs.es6 │ │ │ │ ├── delta.es6 │ │ │ │ ├── honeycomb.es6 │ │ │ │ ├── link-tracking.es6 │ │ │ │ ├── metadata.es6 │ │ │ │ ├── open-tracking.es6 │ │ │ │ ├── ping.es6 │ │ │ │ └── static.es6 │ │ │ ├── sentry.es6 │ │ │ ├── serialization.js │ │ │ ├── tracking-utils.es6 │ │ │ └── views/ │ │ │ ├── admin.html │ │ │ ├── gmail-auth-failure.html │ │ │ ├── gmail-auth-success.html │ │ │ └── layout/ │ │ │ └── default.html │ │ └── static/ │ │ ├── css/ │ │ │ └── index.css │ │ └── fonts/ │ │ └── Avenir.css │ ├── cloud-core/ │ │ ├── README.md │ │ ├── _n1cloud_docker_launcher.sh │ │ ├── build/ │ │ │ └── build-n1-cloud.js │ │ ├── database-connector.es6 │ │ ├── database-extensions.js │ │ ├── gmail-oauth-helpers.es6 │ │ ├── index.js │ │ ├── log-streams.js │ │ ├── logger.js │ │ ├── migrations/ │ │ │ └── 01-expirationDate-metadata.es6 │ │ ├── models/ │ │ │ ├── cloud-job.es6 │ │ │ ├── metadata.js │ │ │ └── pending-auth-response.js │ │ ├── package.json │ │ ├── pm2-debug-cloud-api.yml │ │ ├── pm2-dev.yml │ │ ├── pm2-prod-api.yml │ │ ├── pm2-prod-workers.yml │ │ ├── pubsub-connector.js │ │ ├── scripts/ │ │ │ ├── migrate-db.es6 │ │ │ └── run-redis.sh │ │ └── spec/ │ │ ├── jasmine/ │ │ │ ├── execute.es6 │ │ │ ├── extensions.es6 │ │ │ └── polyfills.es6 │ │ ├── logger-spec.js │ │ └── run.es6 │ ├── cloud-workers/ │ │ ├── README.md │ │ ├── app.es6 │ │ ├── package.json │ │ ├── spec/ │ │ │ ├── jasmine/ │ │ │ │ ├── execute.es6 │ │ │ │ ├── extensions.es6 │ │ │ │ └── polyfills.es6 │ │ │ └── run.es6 │ │ └── src/ │ │ ├── cloud-worker.es6 │ │ ├── foreman.es6 │ │ ├── monitoring.es6 │ │ ├── sentry.es6 │ │ └── workers/ │ │ ├── send-later.es6 │ │ ├── send-reminders.es6 │ │ └── snooze.es6 │ └── isomorphic-core/ │ ├── README.md │ ├── index.js │ ├── package.json │ ├── spec/ │ │ ├── backoff-scheduler-spec.es6 │ │ ├── imap-connection-pool-spec.es6 │ │ ├── jasmine/ │ │ │ ├── config.json │ │ │ ├── execute.es6 │ │ │ ├── extensions.es6 │ │ │ └── polyfills.es6 │ │ ├── message-utils-spec.js │ │ └── run.es6 │ └── src/ │ ├── auth-helpers.es6 │ ├── backoff-schedulers.es6 │ ├── database-types.js │ ├── db-utils.es6 │ ├── delta-stream-builder.js │ ├── env-helpers.es6 │ ├── errors.es6 │ ├── hook-increment-version-on-save.js │ ├── hook-transaction-log.js │ ├── imap-box.es6 │ ├── imap-connection-pool.es6 │ ├── imap-connection.es6 │ ├── imap-errors.es6 │ ├── load-models.js │ ├── message-body-utils.es6 │ ├── message-utils.es6 │ ├── metrics-reporter.es6 │ ├── migrations/ │ │ └── 20160617002207-create-user.js │ ├── model-utils.es6 │ ├── models/ │ │ ├── account-token.js │ │ ├── account.js │ │ └── transaction.js │ ├── promise-utils.js │ ├── sendmail-client.es6 │ ├── shell-utils.es6 │ ├── smtp-errors.es6 │ ├── string-utils.es6 │ ├── tls-utils.es6 │ └── tracking-utils.es6 └── scripts/ ├── benchmark-initial-sync.sh ├── benchmark-new-commits.sh ├── daily.js ├── drop-data-except-accounts.sh ├── postinstall.es6 ├── requirements.txt ├── run-once-per-day.sh └── upload-benchmark-data.py