├── .babelrc
├── .env.default
├── .eslintignore
├── .eslintrc
├── .github
└── workflows
│ └── node.js.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── .storybook
├── main.js
└── preview.js
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE.md
├── android
├── .gitignore
├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── boostio
│ │ │ └── boostnote
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── boostio
│ │ │ │ └── boostnote
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ └── ic_launcher_background.xml
│ │ │ ├── layout
│ │ │ └── activity_main.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── values-night
│ │ │ └── themes.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ ├── styles.xml
│ │ │ └── themes.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── boostio
│ │ └── boostnote
│ │ └── ExampleUnitTest.kt
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── build-utils
└── afterSignHook.js
├── cloud-static
├── editor.css
├── favicon.ico
├── images
│ ├── apple-icon-180x180.png
│ ├── doc.png
│ ├── google-play-store-badge.svg
│ ├── img_centralize.png
│ ├── img_coauthoring.png
│ ├── img_coauthoring_2.png
│ ├── img_customblock.png
│ ├── img_devtool.png
│ ├── img_diagrams.png
│ ├── img_embed.png
│ ├── img_embedding.png
│ ├── img_features.png
│ ├── img_folders.png
│ ├── img_formula.png
│ ├── img_hero.png
│ ├── img_import.png
│ ├── img_integrations.png
│ ├── img_keyboard.png
│ ├── img_markdown.png
│ ├── img_public-private-sharing.jpg
│ ├── img_publicAPI.png
│ ├── img_share.png
│ ├── img_teams.png
│ ├── img_timeline.png
│ ├── img_unlimited-cloud-doc.jpg
│ ├── img_version-history.jpg
│ ├── img_workflow.png
│ ├── initial
│ │ ├── step1-1.png
│ │ ├── step1-2.png
│ │ ├── step1-3.png
│ │ ├── step1-4.png
│ │ ├── step1-5.png
│ │ ├── step1-6.png
│ │ ├── step1-7.gif
│ │ ├── step2-1.png
│ │ ├── step2-2.png
│ │ ├── step3-1.png
│ │ ├── step3-2.png
│ │ ├── step3-3.png
│ │ ├── step4-1.png
│ │ ├── step4-2.png
│ │ ├── step4-3.png
│ │ ├── step4-4.png
│ │ ├── step4-5.png
│ │ ├── step5-1.png
│ │ ├── step5-2.png
│ │ ├── step5-3.png
│ │ └── step6.gif
│ ├── ios-app-store-badge.svg
│ ├── logo.png
│ ├── logo_boostnote_forteams.svg
│ ├── logo_symbol.svg
│ ├── ogp.jpg
│ ├── private_folders.png
│ ├── realtime.png
│ ├── support_profile.jpg
│ ├── unlimited_dashboards.png
│ └── unlimited_documents.png
├── logos
│ ├── airtable.png
│ ├── asana.png
│ ├── aws.png
│ ├── aws_lambda.png
│ ├── clickup.png
│ ├── confluence.svg
│ ├── dropbox.png
│ ├── dropboxpaper.svg
│ ├── evernote.svg
│ ├── github.png
│ ├── gmail.png
│ ├── google_calendar.png
│ ├── google_drive.png
│ ├── google_spreadsheet.png
│ ├── intercom.png
│ ├── jira.png
│ ├── mailchimp.png
│ ├── miro.png
│ ├── notion.svg
│ ├── office_365.png
│ ├── quip.svg
│ ├── slack.png
│ ├── stripe.jpeg
│ ├── trello.png
│ └── zapier.png
├── mixpanel.js
└── videos
│ └── pro-intro.mp4
├── cloud.html
├── docs
└── development.md
├── index.html
├── ios
├── .gitignore
└── BoostNoteMobile
│ ├── BoostNoteMobile.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── BoostNoteMobile.xcscheme
│ ├── BoostNoteMobile
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ └── ItunesArtwork@2x.png
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
│ ├── BoostNoteMobileTests
│ ├── BoostNoteMobileTests.swift
│ └── Info.plist
│ └── BoostNoteMobileUITests
│ ├── BoostNoteMobileUITests.swift
│ └── Info.plist
├── jest.json
├── macOs
└── entitlements.mac.plist
├── mobile-static
├── favicon.ico
└── images
│ ├── initial
│ ├── bookmarks1.png
│ ├── bookmarks2.png
│ ├── bookmarks3.png
│ ├── coauthoring.gif
│ ├── coauthoring.jpg
│ ├── comments1.jpg
│ ├── comments2.png
│ ├── comments3.png
│ ├── comments4.png
│ ├── comments5.png
│ ├── comments6.png
│ ├── comments7.png
│ ├── comments8.png
│ ├── createTeam1.png
│ ├── createTeam2.png
│ ├── createTeam3.png
│ ├── customizeWorkspace1.png
│ ├── customizeWorkspace2.png
│ ├── customizeWorkspace3.png
│ ├── customizeWorkspace4.png
│ ├── customizeWorkspace5.png
│ ├── embedContents1.png
│ ├── embedContents2.gif
│ ├── embedContents3.gif
│ ├── embedContents4.gif
│ ├── embedContents5.gif
│ ├── embedContents6.gif
│ ├── embedDocuments1.png
│ ├── embedDocuments2.png
│ ├── embedDocuments3.png
│ ├── idesearch.png
│ ├── inviteGuest1.png
│ ├── inviteGuest2.png
│ ├── inviteGuest3.png
│ ├── inviteGuest4.png
│ ├── inviteGuest5.png
│ ├── inviteGuest6.png
│ ├── invitemembers.png
│ ├── keymap.jpg
│ ├── migration.png
│ ├── privateWorkspace1.png
│ ├── privateWorkspace2.png
│ ├── publicAPI.png
│ ├── publicLink1.png
│ ├── publicLink2.png
│ ├── publicLink3.png
│ ├── publicLink4.png
│ ├── shareoptions.png
│ ├── smartFolder1.png
│ ├── smartFolder2.png
│ ├── smartFolder3.png
│ ├── smartFolder4.png
│ ├── smartFolder5.png
│ ├── smartFolder6.png
│ ├── smartfolderexample.png
│ ├── step1-1.png
│ ├── step1-2.png
│ ├── step1-3.png
│ ├── step1-4.png
│ ├── step1-5.png
│ ├── step1-6.png
│ ├── step1-7.gif
│ ├── step2-1.png
│ ├── step2-2.png
│ ├── step3-1.png
│ ├── step3-2.png
│ ├── step3-3.png
│ ├── step4-1.png
│ ├── step4-2.png
│ ├── step4-3.png
│ ├── step4-4.png
│ ├── step4-5.png
│ ├── step5-1.png
│ ├── step5-2.png
│ ├── step5-3.png
│ ├── step6.gif
│ ├── versionHistory1.png
│ ├── versionHistory2.png
│ └── zapierIntro.gif
│ └── logo.png
├── mobile.html
├── package-lock.json
├── package.json
├── readme.md
├── resources
└── logo.eps
├── scripts
├── build-electron-main.ts
├── dev-electron.ts
└── meta.js
├── src
├── cloud
│ ├── api
│ │ ├── auth
│ │ │ ├── email.ts
│ │ │ ├── google.ts
│ │ │ └── index.ts
│ │ ├── automation
│ │ │ ├── automation.ts
│ │ │ └── workflow.ts
│ │ ├── beta
│ │ │ ├── registration.ts
│ │ │ └── request.ts
│ │ ├── comments
│ │ │ ├── comment.ts
│ │ │ └── thread.ts
│ │ ├── connections
│ │ │ └── index.ts
│ │ ├── desktop
│ │ │ └── login.ts
│ │ ├── docs
│ │ │ └── token.ts
│ │ ├── editRequests
│ │ │ └── index.ts
│ │ ├── feedback
│ │ │ └── index.ts
│ │ ├── files
│ │ │ └── index.ts
│ │ ├── global.ts
│ │ ├── integrations
│ │ │ └── index.ts
│ │ ├── mock
│ │ │ ├── db
│ │ │ │ ├── init.ts
│ │ │ │ ├── mockEntities
│ │ │ │ │ ├── docs.ts
│ │ │ │ │ ├── folders.ts
│ │ │ │ │ ├── permissions.ts
│ │ │ │ │ ├── tags.ts
│ │ │ │ │ ├── teams.ts
│ │ │ │ │ ├── users.ts
│ │ │ │ │ └── workspaces.ts
│ │ │ │ ├── populate.ts
│ │ │ │ └── utils.ts
│ │ │ └── mockHandler.ts
│ │ ├── notifications
│ │ │ └── index.ts
│ │ ├── pages
│ │ │ ├── oauth.ts
│ │ │ ├── settings
│ │ │ │ └── index.ts
│ │ │ ├── shared
│ │ │ │ └── index.ts
│ │ │ └── teams
│ │ │ │ ├── bookmarks.ts
│ │ │ │ ├── dashboards
│ │ │ │ └── show.ts
│ │ │ │ ├── delete.ts
│ │ │ │ ├── deleted.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── invite.ts
│ │ │ │ ├── requests.ts
│ │ │ │ ├── shared.ts
│ │ │ │ ├── tags.ts
│ │ │ │ ├── timeline.ts
│ │ │ │ └── workspaces.ts
│ │ ├── rest
│ │ │ └── doc.ts
│ │ ├── revisions
│ │ │ └── index.ts
│ │ ├── search
│ │ │ └── index.ts
│ │ ├── share
│ │ │ └── index.ts
│ │ ├── status
│ │ │ └── index.ts
│ │ ├── teams
│ │ │ ├── dashboards
│ │ │ │ └── index.ts
│ │ │ ├── docs
│ │ │ │ ├── bookmarks.ts
│ │ │ │ ├── exports.ts
│ │ │ │ ├── import.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── revisions.ts
│ │ │ │ ├── tags.ts
│ │ │ │ └── templates.ts
│ │ │ ├── externalEntities
│ │ │ │ └── index.ts
│ │ │ ├── files
│ │ │ │ └── index.ts
│ │ │ ├── folders
│ │ │ │ ├── bookmarks.ts
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ ├── invites
│ │ │ │ └── index.ts
│ │ │ ├── open-invites
│ │ │ │ └── index.ts
│ │ │ ├── permissions
│ │ │ │ ├── emails.ts
│ │ │ │ └── index.ts
│ │ │ ├── props
│ │ │ │ └── index.ts
│ │ │ ├── resources
│ │ │ │ └── index.ts
│ │ │ ├── smartViews
│ │ │ │ └── index.ts
│ │ │ ├── sources
│ │ │ │ └── index.ts
│ │ │ ├── subscription
│ │ │ │ ├── index.ts
│ │ │ │ ├── invoices.ts
│ │ │ │ ├── trial.ts
│ │ │ │ └── update.ts
│ │ │ ├── tags
│ │ │ │ └── index.ts
│ │ │ ├── views
│ │ │ │ └── index.ts
│ │ │ └── workspaces
│ │ │ │ └── index.ts
│ │ ├── tokens
│ │ │ └── index.ts
│ │ ├── track
│ │ │ └── index.ts
│ │ ├── uploads
│ │ │ └── index.ts
│ │ └── users
│ │ │ ├── appfeedback.ts
│ │ │ ├── index.ts
│ │ │ ├── onboarding.ts
│ │ │ └── settings.ts
│ ├── components
│ │ ├── AnnouncementAlert.tsx
│ │ ├── App.tsx
│ │ ├── AppFeedbackForm
│ │ │ └── index.tsx
│ │ ├── Application.tsx
│ │ ├── ApplicationContent.tsx
│ │ ├── ApplicationPage.tsx
│ │ ├── ApplicationPageLoader.tsx
│ │ ├── ApplicationTopbar.tsx
│ │ ├── ApplicationWithoutInfoLoader.tsx
│ │ ├── Automations
│ │ │ ├── AutomationBuilder.tsx
│ │ │ ├── AutomationLogList.tsx
│ │ │ ├── EventInfo.tsx
│ │ │ ├── FilterBuilder.tsx
│ │ │ ├── PipeBuilder.tsx
│ │ │ ├── WorkflowBuilder.tsx
│ │ │ └── actions
│ │ │ │ ├── ActionConfigurationInput.tsx
│ │ │ │ ├── CreateDocActionConfigurator.tsx
│ │ │ │ ├── FolderSelect.tsx
│ │ │ │ ├── PropertySelect.tsx
│ │ │ │ ├── UpdateDocActionConfigurator.tsx
│ │ │ │ └── index.ts
│ │ ├── BottomBarButton.tsx
│ │ ├── CloudGlobalSearch.tsx
│ │ ├── CloudModal.tsx
│ │ ├── CodeMirrorStyle.tsx
│ │ ├── CommentEmoji.tsx
│ │ ├── Comments
│ │ │ ├── CommentInput.tsx
│ │ │ ├── CommentList.tsx
│ │ │ ├── CommentManager.tsx
│ │ │ ├── CommentReactions.tsx
│ │ │ ├── EmojiPickHandler.tsx
│ │ │ ├── ThreadActionButton.tsx
│ │ │ ├── ThreadItem.tsx
│ │ │ └── ThreadList.tsx
│ │ ├── ContentManager
│ │ │ ├── Actions
│ │ │ │ ├── DocOnlyContentManagerBulkActions.tsx
│ │ │ │ ├── HeaderActionButton.tsx
│ │ │ │ └── RowActionButton.tsx
│ │ │ ├── ContentManagerCell.tsx
│ │ │ ├── ContentManagerStatusFilter.tsx
│ │ │ ├── ContentManagerToolbar.tsx
│ │ │ ├── ContentManagerToolbarStatusPopup.tsx
│ │ │ ├── Rows
│ │ │ │ ├── ContentManagerDocRow.tsx
│ │ │ │ ├── ContentManagerFolderRow.tsx
│ │ │ │ ├── ContentManagerRow.tsx
│ │ │ │ └── EmptyRow.tsx
│ │ │ ├── SortingOption.tsx
│ │ │ ├── index.tsx
│ │ │ └── styled.ts
│ │ ├── DashboardPage
│ │ │ ├── AddSmartViewModal.tsx
│ │ │ ├── DashboardContextMenu.tsx
│ │ │ ├── DashboardSubscriptionBanner.tsx
│ │ │ ├── DashboardView.tsx
│ │ │ ├── SmartViewGridItem.tsx
│ │ │ ├── UpdateSmartViewModal.tsx
│ │ │ └── index.tsx
│ │ ├── DocPage
│ │ │ ├── BackLinksList.tsx
│ │ │ ├── DocContextMenuActions.tsx
│ │ │ ├── DocPageHeader.tsx
│ │ │ ├── DocShare.tsx
│ │ │ ├── DocTagsList
│ │ │ │ ├── TagsAutoCompleteInput.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── EditorLayout.tsx
│ │ │ ├── NewDocContextMenu.tsx
│ │ │ ├── SharedDocPage.tsx
│ │ │ ├── index.tsx
│ │ │ └── styles.ts
│ │ ├── DocPreview
│ │ │ ├── DocPreviewRealtime.tsx
│ │ │ └── index.tsx
│ │ ├── DocProperties.tsx
│ │ ├── DocStatusIcon.tsx
│ │ ├── DocTagsListItem.tsx
│ │ ├── Editor
│ │ │ ├── EditorAdmonitionTool.tsx
│ │ │ ├── EditorAdmonitionToolDropdown.tsx
│ │ │ ├── EditorHeaderTool.tsx
│ │ │ ├── EditorHeaderToolDropdown.tsx
│ │ │ ├── EditorIndentationStatus.tsx
│ │ │ ├── EditorIntegrationToolButton.tsx
│ │ │ ├── EditorKeyMapSelect.tsx
│ │ │ ├── EditorSelectionStatus.tsx
│ │ │ ├── EditorTemplateButton.tsx
│ │ │ ├── EditorThemeSelect.tsx
│ │ │ ├── EditorToolButton.tsx
│ │ │ ├── EditorToolbar.tsx
│ │ │ ├── EditorToolbarUpload.tsx
│ │ │ ├── index.tsx
│ │ │ ├── styled.ts
│ │ │ └── types.ts
│ │ ├── EditorsIcons.tsx
│ │ ├── EmojiIcon.tsx
│ │ ├── ErrorBlock.tsx
│ │ ├── EventSource.tsx
│ │ ├── FeedbackForm
│ │ │ ├── ExpandingRow.tsx
│ │ │ ├── index.tsx
│ │ │ └── types.ts
│ │ ├── FileListItem.tsx
│ │ ├── FolderPage
│ │ │ ├── NewFolderContextMenu.tsx
│ │ │ └── index.tsx
│ │ ├── FreeTrialPopup
│ │ │ └── index.tsx
│ │ ├── HelpLink.tsx
│ │ ├── ImportFlow
│ │ │ ├── index.tsx
│ │ │ └── molecules
│ │ │ │ ├── ImportFlowDestination.tsx
│ │ │ │ └── ImportFlowSources.tsx
│ │ ├── IntroducePlansPopup
│ │ │ └── index.tsx
│ │ ├── Link
│ │ │ ├── AccountLink.tsx
│ │ │ ├── CloudLink.tsx
│ │ │ ├── DashboardLink.tsx
│ │ │ ├── DocLink.tsx
│ │ │ ├── FolderLink.tsx
│ │ │ ├── RevisionLink.tsx
│ │ │ ├── TagLink.tsx
│ │ │ ├── TeamLink.tsx
│ │ │ └── WorkspaceLink.tsx
│ │ ├── MarkdownView
│ │ │ ├── CustomizedMarkdownPreviewer.tsx
│ │ │ ├── LinkableHeader.tsx
│ │ │ ├── MarkdownCheckbox.tsx
│ │ │ ├── SelectionTooltip.tsx
│ │ │ ├── Shortcode
│ │ │ │ ├── github
│ │ │ │ │ ├── GithubIssue.tsx
│ │ │ │ │ ├── GithubPr.tsx
│ │ │ │ │ ├── styles.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ └── index.tsx
│ │ │ ├── TableOfContents
│ │ │ │ └── index.tsx
│ │ │ ├── index.tsx
│ │ │ └── styles.ts
│ │ ├── Modal
│ │ │ ├── InviteMembers
│ │ │ │ ├── InviteMemberModalSection.tsx
│ │ │ │ └── InviteMembersModal.tsx
│ │ │ └── contents
│ │ │ │ ├── DiscountModal.tsx
│ │ │ │ ├── Doc
│ │ │ │ └── RevisionsModal
│ │ │ │ │ ├── RevisionModalDetail.tsx
│ │ │ │ │ ├── RevisionModalNavigator.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── FeedbackModal.tsx
│ │ │ │ ├── Forms
│ │ │ │ └── MoveItemModal.tsx
│ │ │ │ ├── LabelsManagementModal
│ │ │ │ ├── LabelsManagementModalDetail.tsx
│ │ │ │ ├── LabelsManagementModalNavigator.tsx
│ │ │ │ └── index.tsx
│ │ │ │ ├── SmartView
│ │ │ │ ├── ConditionItem.tsx
│ │ │ │ ├── ConditionValueControl.tsx
│ │ │ │ ├── DateConditionValueTypeSelect.tsx
│ │ │ │ ├── DocAssigneeSelect.tsx
│ │ │ │ ├── DocDateSelect.tsx
│ │ │ │ ├── DocLabelSelect.tsx
│ │ │ │ ├── DocStatusSelect.tsx
│ │ │ │ ├── FolderSelect.tsx
│ │ │ │ ├── SmartViewConditionRows.tsx
│ │ │ │ ├── SmartViewForm.tsx
│ │ │ │ ├── StatusSelect.tsx
│ │ │ │ ├── TimePeriodForm.tsx
│ │ │ │ └── interfaces.ts
│ │ │ │ ├── Subscription
│ │ │ │ ├── UnlockDashboardModal.tsx
│ │ │ │ ├── UnlockDocCreationModal.tsx
│ │ │ │ └── UnlockPrivateWorkspaceModal.tsx
│ │ │ │ ├── TemplatesModal
│ │ │ │ └── index.tsx
│ │ │ │ └── Workspace
│ │ │ │ ├── WorkspaceAccess.tsx
│ │ │ │ └── WorkspaceModalForm.tsx
│ │ ├── Onboarding
│ │ │ ├── BulkInvitesForm.tsx
│ │ │ ├── CreateTeamForm.tsx
│ │ │ ├── FolderPageInviteSection.tsx
│ │ │ ├── OnboardingLayout.tsx
│ │ │ └── UsageFormRow.tsx
│ │ ├── OpenInviteSection.tsx
│ │ ├── Page.tsx
│ │ ├── PreferencesContextMenuWrapper.tsx
│ │ ├── Props
│ │ │ ├── DocPagePropsAddContext.tsx
│ │ │ ├── Pickers
│ │ │ │ ├── AssigneeSelect.tsx
│ │ │ │ ├── CheckboxSelect.tsx
│ │ │ │ ├── DatePropPicker.tsx
│ │ │ │ ├── DocDependencySelect.tsx
│ │ │ │ ├── DocLabelSelectionModal.tsx
│ │ │ │ ├── NumberSelect.tsx
│ │ │ │ ├── PropertyValueButton.tsx
│ │ │ │ ├── StatusSelect.tsx
│ │ │ │ ├── TextSelect.tsx
│ │ │ │ ├── TimePeriodPicker.tsx
│ │ │ │ └── UrlSelect.tsx
│ │ │ ├── PropConfig.tsx
│ │ │ ├── PropPicker.tsx
│ │ │ └── PropRegisterModal
│ │ │ │ ├── PropRegisterCreationForm.tsx
│ │ │ │ ├── PropRegisterForm.tsx
│ │ │ │ ├── PropRegisterSuggestionsList.tsx
│ │ │ │ └── index.tsx
│ │ ├── Router.tsx
│ │ ├── SearchableOptionListPopup.tsx
│ │ ├── ServiceConnect.tsx
│ │ ├── SettingsTeamForm.tsx
│ │ ├── SharePageTopBar
│ │ │ └── index.tsx
│ │ ├── SidebarToggleButton.tsx
│ │ ├── SignInForm
│ │ │ ├── EmailForm.tsx
│ │ │ └── index.tsx
│ │ ├── Subscription
│ │ │ ├── PlanTables.tsx
│ │ │ ├── SidebarSubscriptionCTA.tsx
│ │ │ ├── SubscriptionCostSummary.tsx
│ │ │ ├── SubscriptionManagement.tsx
│ │ │ ├── SubscriptionPlanHeader.tsx
│ │ │ └── SubscriptionPlanTables.tsx
│ │ ├── SubscriptionForm
│ │ │ ├── UpdateBillingEmailForm.tsx
│ │ │ ├── UpdateBillingMethodForm.tsx
│ │ │ ├── UpdateBillingPromo.tsx
│ │ │ └── index.tsx
│ │ ├── TeamIcon.tsx
│ │ ├── TeamInvitesSection.tsx
│ │ ├── ThreadStatusFilterControl.tsx
│ │ ├── TitleComponent.tsx
│ │ ├── TokenControl.tsx
│ │ ├── Topbar
│ │ │ ├── Controls
│ │ │ │ └── ControlsContextMenu
│ │ │ │ │ ├── ControlsContextMenuBackground.tsx
│ │ │ │ │ ├── ControlsContextMenuItem.tsx
│ │ │ │ │ ├── FolderContextMenu.tsx
│ │ │ │ │ └── styled.ts
│ │ │ ├── PresenceIcons.tsx
│ │ │ └── SyncStatus.tsx
│ │ ├── UpgradeButton.tsx
│ │ ├── UpgradeIntroButton.tsx
│ │ ├── UserIcon.tsx
│ │ ├── ViewerDisclaimer.tsx
│ │ ├── ViewerRestrictedWrapper.tsx
│ │ ├── Views
│ │ │ ├── Calendar
│ │ │ │ ├── CalendarEventItem.tsx
│ │ │ │ ├── CalendarEventItemContextMenu.tsx
│ │ │ │ ├── CalendarNoDateContext.tsx
│ │ │ │ ├── CalendarView.tsx
│ │ │ │ ├── CalendarViewPropertiesContext.tsx
│ │ │ │ └── CalendarWatchedPropContext.tsx
│ │ │ ├── EditableDocItemContainer.tsx
│ │ │ ├── FolderList.tsx
│ │ │ ├── Kanban
│ │ │ │ ├── Item.tsx
│ │ │ │ ├── KanbanViewPropertiesContext.tsx
│ │ │ │ ├── KanbanWatchedPropSetter.tsx
│ │ │ │ ├── ListSettings.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── List
│ │ │ │ ├── ListDocProperties.tsx
│ │ │ │ ├── ListViewHeader.tsx
│ │ │ │ ├── ListViewItem.tsx
│ │ │ │ ├── ListViewPropertiesContext.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Table
│ │ │ │ ├── ColSettingsContext.tsx
│ │ │ │ ├── TableAddPropertyContext.tsx
│ │ │ │ ├── TableView.tsx
│ │ │ │ ├── TableViewPropertiesContext.tsx
│ │ │ │ └── TitleColumnSettingsContext.tsx
│ │ │ ├── ViewFilters.tsx
│ │ │ ├── ViewsSelector
│ │ │ │ └── index.tsx
│ │ │ └── index.tsx
│ │ ├── WorkspaceExplorer
│ │ │ ├── ExplorerListItem.tsx
│ │ │ ├── FolderExplorer.tsx
│ │ │ ├── index.tsx
│ │ │ └── styled.ts
│ │ ├── WorkspacePage
│ │ │ ├── WorkspaceContextMenu.tsx
│ │ │ └── index.tsx
│ │ ├── buttons
│ │ │ ├── InviteCTAButton.tsx
│ │ │ ├── NewDocButton.tsx
│ │ │ └── login
│ │ │ │ ├── GithubLoginButton.tsx
│ │ │ │ └── GoogleLoginButton.tsx
│ │ ├── error
│ │ │ ├── ErrorPage.tsx
│ │ │ └── ErrorSection.tsx
│ │ ├── homepage
│ │ │ ├── IntegrationServiceImage.tsx
│ │ │ └── PageContainer.tsx
│ │ ├── layouts
│ │ │ └── CenteredContainer.tsx
│ │ ├── molecules
│ │ │ └── PageSearch
│ │ │ │ └── InPageSearchPortal.tsx
│ │ ├── settings
│ │ │ ├── ApiTab.tsx
│ │ │ ├── AttachmentsTab.tsx
│ │ │ ├── BetaAutomationAndIntegrationTab.tsx
│ │ │ ├── GithubIntegration.tsx
│ │ │ ├── ImportTab.tsx
│ │ │ ├── IntegrationManager.tsx
│ │ │ ├── IntegrationsTab.tsx
│ │ │ ├── MarkdownTabForm.tsx
│ │ │ ├── MembersTab.tsx
│ │ │ ├── PersonalInfoTab.tsx
│ │ │ ├── PreferencesTab.tsx
│ │ │ ├── SettingsComponent.tsx
│ │ │ ├── SlackIntegration.tsx
│ │ │ ├── SubscriptionTab.tsx
│ │ │ ├── TeamInfoTab.tsx
│ │ │ ├── TeamSubLimit.tsx
│ │ │ ├── UpgradeTab.tsx
│ │ │ ├── UserPreferencesForm.tsx
│ │ │ └── styled.ts
│ │ └── sources
│ │ │ └── GithubSourceCallbackPage.tsx
│ ├── index.tsx
│ ├── interfaces
│ │ ├── analytics
│ │ │ ├── intercom.ts
│ │ │ └── mixpanel.ts
│ │ ├── api.ts
│ │ ├── components
│ │ │ └── ContentManager
│ │ │ │ └── types.ts
│ │ ├── db
│ │ │ ├── accessToken.ts
│ │ │ ├── accessTokenRequests.ts
│ │ │ ├── apiTokens.ts
│ │ │ ├── appEvents.ts
│ │ │ ├── automations.ts
│ │ │ ├── beta.ts
│ │ │ ├── bookmarks.ts
│ │ │ ├── commentReaction.ts
│ │ │ ├── comments.ts
│ │ │ ├── connections.ts
│ │ │ ├── dashboard.ts
│ │ │ ├── doc.ts
│ │ │ ├── editRequest.ts
│ │ │ ├── errorReport.ts
│ │ │ ├── externalEntity.ts
│ │ │ ├── folder.ts
│ │ │ ├── folderPositions.ts
│ │ │ ├── icon.ts
│ │ │ ├── mention.ts
│ │ │ ├── notifications.ts
│ │ │ ├── openInvite.ts
│ │ │ ├── props.ts
│ │ │ ├── revision.ts
│ │ │ ├── shareLink.ts
│ │ │ ├── smartView.ts
│ │ │ ├── source.ts
│ │ │ ├── status.ts
│ │ │ ├── storage.ts
│ │ │ ├── subscription.ts
│ │ │ ├── tag.ts
│ │ │ ├── team.ts
│ │ │ ├── teamInvite.ts
│ │ │ ├── template.ts
│ │ │ ├── user.ts
│ │ │ ├── userAccessToken.ts
│ │ │ ├── userAppFeedback.ts
│ │ │ ├── userFeedback.ts
│ │ │ ├── userOnboarding.ts
│ │ │ ├── userSettings.ts
│ │ │ ├── userTeamPermissions.ts
│ │ │ ├── view.ts
│ │ │ ├── workspace.ts
│ │ │ └── workspacePositions.ts
│ │ ├── events.ts
│ │ ├── pageStore.ts
│ │ ├── pages.ts
│ │ ├── presence.ts
│ │ └── resources.ts
│ ├── lib
│ │ ├── HashQueue
│ │ │ ├── HashQueue.spec.ts
│ │ │ └── index.ts
│ │ ├── animations.ts
│ │ ├── automations
│ │ │ └── events
│ │ │ │ └── index.ts
│ │ ├── cache.ts
│ │ ├── charts
│ │ │ ├── charts.tsx
│ │ │ ├── flowchart.tsx
│ │ │ ├── index.ts
│ │ │ ├── plantuml.ts
│ │ │ └── remarkCharts.ts
│ │ ├── client.ts
│ │ ├── comments
│ │ │ └── index.ts
│ │ ├── consts.ts
│ │ ├── date.ts
│ │ ├── dnd.ts
│ │ ├── docEmbedPlugin.ts
│ │ ├── dom.ts
│ │ ├── editor
│ │ │ ├── CodeMirror.ts
│ │ │ ├── components
│ │ │ │ └── CodeMirrorEditor.tsx
│ │ │ ├── hooks
│ │ │ │ └── useRealtime.ts
│ │ │ ├── plugins
│ │ │ │ ├── fileHandler.ts
│ │ │ │ └── pasteFormatPlugin.ts
│ │ │ └── scrollSync.ts
│ │ ├── export.ts
│ │ ├── homepageUrls.ts
│ │ ├── hooks
│ │ │ ├── dashboards
│ │ │ │ └── useDashboard.ts
│ │ │ ├── editor
│ │ │ │ └── docEditor.ts
│ │ │ ├── index.ts
│ │ │ ├── props
│ │ │ │ └── index.ts
│ │ │ ├── sidebar
│ │ │ │ ├── useCloudDnd.ts
│ │ │ │ ├── useCloudSidebarSpaces.tsx
│ │ │ │ └── useCloudSidebarTree.tsx
│ │ │ ├── useCloudApi.tsx
│ │ │ ├── useCloudDocPreview.tsx
│ │ │ ├── useCloudResourceModals.tsx
│ │ │ ├── useCommentManagerState.ts
│ │ │ ├── useI18n.tsx
│ │ │ ├── useThreadMenuActions.tsx
│ │ │ ├── useWorkspaceDelete.ts
│ │ │ └── views
│ │ │ │ ├── calendarView.ts
│ │ │ │ ├── kanbanView.ts
│ │ │ │ ├── listView.ts
│ │ │ │ ├── tableView.ts
│ │ │ │ └── viewHandler.ts
│ │ ├── href.ts
│ │ ├── i18n
│ │ │ ├── enUS.ts
│ │ │ ├── fr.ts
│ │ │ ├── index.ts
│ │ │ ├── ja.ts
│ │ │ ├── types.ts
│ │ │ └── zhCN.ts
│ │ ├── intercom
│ │ │ └── index.ts
│ │ ├── keyboard.ts
│ │ ├── localStorageKeys.ts
│ │ ├── mappers
│ │ │ ├── contentManager.ts
│ │ │ ├── fuzzyNavigation.ts
│ │ │ ├── topbarBreadcrumbs.ts
│ │ │ └── topbarTree.ts
│ │ ├── mouse.ts
│ │ ├── ordering.ts
│ │ ├── props.ts
│ │ ├── realtime
│ │ │ ├── client
│ │ │ │ ├── VirtualConnection.ts
│ │ │ │ ├── constructor.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── multiplexConnection.ts
│ │ │ ├── lib
│ │ │ │ ├── functional.ts
│ │ │ │ └── result.ts
│ │ │ └── protocol
│ │ │ │ ├── client.ts
│ │ │ │ ├── server.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── version.ts
│ │ ├── rehypeCustomBlock.ts
│ │ ├── rehypeGutters.ts
│ │ ├── rehypeHighlight.ts
│ │ ├── rehypePosition.ts
│ │ ├── router.ts
│ │ ├── selection
│ │ │ ├── useSelection.ts
│ │ │ └── useSelectionLocation.ts
│ │ ├── shortcode
│ │ │ └── index.ts
│ │ ├── shortcuts.ts
│ │ ├── sidebar.ts
│ │ ├── smartViews.ts
│ │ ├── stores
│ │ │ ├── apiTokens
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.ts
│ │ │ │ └── withApiTokens.tsx
│ │ │ ├── beta
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.ts
│ │ │ │ └── withBetaRegistration.tsx
│ │ │ ├── comments
│ │ │ │ ├── helpers.ts
│ │ │ │ └── index.ts
│ │ │ ├── electron.ts
│ │ │ ├── externalEntities
│ │ │ │ └── index.ts
│ │ │ ├── globalData.ts
│ │ │ ├── loaders
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.ts
│ │ │ │ └── withLoaderProps.tsx
│ │ │ ├── localSnapshots.ts
│ │ │ ├── nav
│ │ │ │ ├── index.tsx
│ │ │ │ ├── store.tsx
│ │ │ │ └── types.ts
│ │ │ ├── onboarding
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.tsx
│ │ │ │ └── types.ts
│ │ │ ├── openInvites
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.ts
│ │ │ │ └── withOpenInvites.tsx
│ │ │ ├── pageStore
│ │ │ │ ├── index.tsx
│ │ │ │ ├── store.tsx
│ │ │ │ └── types.ts
│ │ │ ├── preferences
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.ts
│ │ │ │ └── types.ts
│ │ │ ├── realtimeConn.ts
│ │ │ ├── search
│ │ │ │ ├── index.tsx
│ │ │ │ ├── store.ts
│ │ │ │ └── types.ts
│ │ │ ├── serviceConnections
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.ts
│ │ │ │ └── withServiceConnections.tsx
│ │ │ ├── settings
│ │ │ │ ├── index.tsx
│ │ │ │ ├── store.ts
│ │ │ │ └── types.ts
│ │ │ ├── sidebarCollapse
│ │ │ │ ├── index.tsx
│ │ │ │ ├── store.tsx
│ │ │ │ └── types.ts
│ │ │ ├── status
│ │ │ │ └── index.ts
│ │ │ ├── teamPreferences
│ │ │ │ ├── index.tsx
│ │ │ │ ├── store.tsx
│ │ │ │ └── types.ts
│ │ │ └── teamStorage
│ │ │ │ ├── index.tsx
│ │ │ │ ├── store.tsx
│ │ │ │ └── types.ts
│ │ ├── stripe.ts
│ │ ├── subscription.ts
│ │ ├── upload.ts
│ │ ├── utils
│ │ │ ├── admin.ts
│ │ │ ├── array.ts
│ │ │ ├── bytes.ts
│ │ │ ├── context.tsx
│ │ │ ├── events.ts
│ │ │ ├── iterator.ts
│ │ │ ├── map.ts
│ │ │ ├── object.ts
│ │ │ ├── patterns.ts
│ │ │ ├── platform.ts
│ │ │ ├── secret.ts
│ │ │ ├── sleep.ts
│ │ │ ├── string.ts
│ │ │ └── url.ts
│ │ └── views
│ │ │ ├── calendar.ts
│ │ │ ├── index.ts
│ │ │ ├── kanban.ts
│ │ │ ├── list.ts
│ │ │ └── table.ts
│ └── pages
│ │ ├── [teamId]
│ │ ├── [resourceId]
│ │ │ └── index.tsx
│ │ ├── dashboard.tsx
│ │ ├── delete.tsx
│ │ ├── index.tsx
│ │ ├── invite.tsx
│ │ ├── labels
│ │ │ └── [labelId]
│ │ │ │ └── index.tsx
│ │ ├── requests
│ │ │ └── deny.tsx
│ │ ├── shared.tsx
│ │ └── workspaces
│ │ │ └── [workspaceId].tsx
│ │ ├── _error.tsx
│ │ ├── account
│ │ └── delete.tsx
│ │ ├── automations
│ │ ├── [automationId].tsx
│ │ ├── create.tsx
│ │ └── index.tsx
│ │ ├── cooperate.tsx
│ │ ├── home
│ │ ├── BoostNoteFeatureIntro.tsx
│ │ ├── HomeForm.tsx
│ │ ├── HomePageSignInForm.tsx
│ │ └── index.tsx
│ │ ├── oauth
│ │ └── [service]
│ │ │ └── callback.tsx
│ │ ├── oauth2
│ │ └── authorize.tsx
│ │ ├── settings
│ │ └── index.tsx
│ │ ├── shared
│ │ └── [link].tsx
│ │ └── workflows
│ │ ├── [workflowId].tsx
│ │ ├── create.tsx
│ │ └── index.tsx
├── components
│ ├── App.tsx
│ ├── BoostHubWebview.tsx
│ └── atoms
│ │ ├── Alert.tsx
│ │ ├── ProgressBar.tsx
│ │ └── form.tsx
├── design
│ ├── components
│ │ ├── atoms
│ │ │ ├── AspectRation.tsx
│ │ │ ├── Badge.tsx
│ │ │ ├── Banner.tsx
│ │ │ ├── BorderSeparator.tsx
│ │ │ ├── Button.tsx
│ │ │ ├── ButtonGroup.tsx
│ │ │ ├── Card.tsx
│ │ │ ├── ColoredBlock.tsx
│ │ │ ├── DoublePane.tsx
│ │ │ ├── EditableInput.tsx
│ │ │ ├── EllipsisText.tsx
│ │ │ ├── Flexbox.tsx
│ │ │ ├── FoldingWrapper.tsx
│ │ │ ├── GlobalStyle.tsx
│ │ │ ├── Icon.tsx
│ │ │ ├── Image.tsx
│ │ │ ├── Label.tsx
│ │ │ ├── LeftRightList.tsx
│ │ │ ├── Link.tsx
│ │ │ ├── PageHelmet.tsx
│ │ │ ├── Pastille.tsx
│ │ │ ├── Portal.tsx
│ │ │ ├── PromiseWrapper.tsx
│ │ │ ├── RoundedImage.tsx
│ │ │ ├── Scroller.tsx
│ │ │ ├── Spinner.tsx
│ │ │ ├── Switch.tsx
│ │ │ ├── UpDownList.tsx
│ │ │ ├── WidthEnlarger.tsx
│ │ │ ├── WithDelayedTooltip.tsx
│ │ │ ├── WithPastille.tsx
│ │ │ ├── WithTooltip.tsx
│ │ │ ├── loaders
│ │ │ │ ├── LoaderDocEditor.tsx
│ │ │ │ ├── LoaderFolderPage.tsx
│ │ │ │ ├── LoaderNavItem.tsx
│ │ │ │ ├── LoaderSmartView.tsx
│ │ │ │ ├── LoaderTeamPicker.tsx
│ │ │ │ ├── LoaderTopbar.tsx
│ │ │ │ └── LoaderTopbarBreadcrumb.tsx
│ │ │ └── markdown
│ │ │ │ └── CodeFence.tsx
│ │ ├── molecules
│ │ │ ├── ApplicationLayout.tsx
│ │ │ ├── BulkActionProgress.tsx
│ │ │ ├── CloseButtonWrapper.tsx
│ │ │ ├── ContextMenu.tsx
│ │ │ ├── EmojiPicker.tsx
│ │ │ ├── FlattenedBreadcrumbs.tsx
│ │ │ ├── Form
│ │ │ │ ├── atoms
│ │ │ │ │ ├── FormCheckbox.tsx
│ │ │ │ │ ├── FormColorSelect.tsx
│ │ │ │ │ ├── FormCopyInput.tsx
│ │ │ │ │ ├── FormDatePicker.tsx
│ │ │ │ │ ├── FormEmoji.tsx
│ │ │ │ │ ├── FormImage.tsx
│ │ │ │ │ ├── FormInput.tsx
│ │ │ │ │ ├── FormRadio.tsx
│ │ │ │ │ ├── FormSelect.tsx
│ │ │ │ │ ├── FormStripeInput.tsx
│ │ │ │ │ ├── FormTextArea.tsx
│ │ │ │ │ └── FormToggableInput.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── templates
│ │ │ │ │ ├── FormRow.tsx
│ │ │ │ │ └── FormRowItem.tsx
│ │ │ ├── Image
│ │ │ │ ├── ExpandableImage.tsx
│ │ │ │ └── ImagePreview.tsx
│ │ │ ├── LabelManager.tsx
│ │ │ ├── Navigation
│ │ │ │ └── NavigationItem.tsx
│ │ │ ├── NotificationList.tsx
│ │ │ ├── SearchableOptionList.tsx
│ │ │ └── UserIconList.tsx
│ │ ├── organisms
│ │ │ ├── Calendar
│ │ │ │ └── index.tsx
│ │ │ ├── ContentManager
│ │ │ │ ├── atoms
│ │ │ │ │ └── ContentManagerRow.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── molecules
│ │ │ │ │ └── ContentManagerSort.tsx
│ │ │ ├── Dialog
│ │ │ │ ├── Dialog.tsx
│ │ │ │ ├── atoms
│ │ │ │ │ └── DialogIcon.tsx
│ │ │ │ └── molecules
│ │ │ │ │ └── MessageBoxDialogBody.tsx
│ │ │ ├── EmojiInputForm.tsx
│ │ │ ├── FuzzyNavigation
│ │ │ │ ├── index.tsx
│ │ │ │ └── molecules
│ │ │ │ │ └── FuzzyNavigationItem.tsx
│ │ │ ├── GridLayout
│ │ │ │ └── index.tsx
│ │ │ ├── InfoBlock
│ │ │ │ └── index.tsx
│ │ │ ├── InputForm.tsx
│ │ │ ├── Kanban
│ │ │ │ ├── Container.tsx
│ │ │ │ ├── Sortable.tsx
│ │ │ │ ├── SortableContainer.tsx
│ │ │ │ ├── hook.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MetadataContainer
│ │ │ │ ├── atoms
│ │ │ │ │ └── MetadataContainerBreak.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── molecules
│ │ │ │ │ └── MetadataContainerRow.tsx
│ │ │ ├── Modal
│ │ │ │ ├── atoms
│ │ │ │ │ └── ModalLayout.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── SearchLayout
│ │ │ │ ├── atoms
│ │ │ │ │ └── SearchItem.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── molecules
│ │ │ │ │ └── SearchCategory.tsx
│ │ │ ├── Settings
│ │ │ │ ├── atoms
│ │ │ │ │ ├── SettingNavItem.tsx
│ │ │ │ │ └── SettingTabContent.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── molecules
│ │ │ │ │ ├── SettingSidenav.tsx
│ │ │ │ │ └── SettingSidenavHeader.tsx
│ │ │ ├── ShallowTimeline.tsx
│ │ │ ├── Sidebar
│ │ │ │ ├── atoms
│ │ │ │ │ ├── SidebarButton.tsx
│ │ │ │ │ ├── SidebarContextList.tsx
│ │ │ │ │ ├── SidebarHeader.tsx
│ │ │ │ │ ├── SidebarPopOver.tsx
│ │ │ │ │ ├── SidebarTreeForm.tsx
│ │ │ │ │ └── SidebarTreeItem.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── molecules
│ │ │ │ │ ├── SidebarButtonList.tsx
│ │ │ │ │ ├── SidebarLink.tsx
│ │ │ │ │ ├── SidebarSpaces.tsx
│ │ │ │ │ └── SidebarTree.tsx
│ │ │ ├── Table
│ │ │ │ ├── Table.tsx
│ │ │ │ ├── atoms
│ │ │ │ │ ├── TableBorderLine.tsx
│ │ │ │ │ ├── TableCell.tsx
│ │ │ │ │ ├── TableCol.tsx
│ │ │ │ │ └── TableSlider.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ ├── molecules
│ │ │ │ │ └── TableRow.tsx
│ │ │ │ └── tableInterfaces.ts
│ │ │ ├── Toast.tsx
│ │ │ ├── Toolbar
│ │ │ │ └── index.tsx
│ │ │ └── Topbar
│ │ │ │ ├── atoms
│ │ │ │ ├── TopbarActionItem.tsx
│ │ │ │ └── TopbarTreeItem.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── molecules
│ │ │ │ ├── TopbarBreadcrumb.tsx
│ │ │ │ └── TopbarNavigationContext.tsx
│ │ └── templates
│ │ │ ├── ContentLayout.tsx
│ │ │ └── ErrorLayout.tsx
│ └── lib
│ │ ├── codemirror
│ │ ├── rehypeCodeMirror.ts
│ │ └── util.ts
│ │ ├── date.ts
│ │ ├── dnd.ts
│ │ ├── dom.ts
│ │ ├── hooks
│ │ ├── useApi.ts
│ │ ├── useBulkApi.ts
│ │ ├── useCancellablePromises.ts
│ │ ├── useNotificationState.ts
│ │ └── useSuggestions.ts
│ │ ├── keyboard.ts
│ │ ├── mappers
│ │ ├── topbarControls.ts
│ │ ├── types.ts
│ │ └── users.ts
│ │ ├── platform.ts
│ │ ├── shortcuts.ts
│ │ ├── sidebar.ts
│ │ ├── stores
│ │ ├── contextMenu
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── dialog
│ │ │ ├── index.tsx
│ │ │ └── types.ts
│ │ ├── emoji
│ │ │ ├── index.tsx
│ │ │ └── types.ts
│ │ ├── integrations
│ │ │ └── index.ts
│ │ ├── modal
│ │ │ ├── index.tsx
│ │ │ ├── store.ts
│ │ │ └── types.ts
│ │ ├── notifications
│ │ │ └── index.ts
│ │ ├── toast
│ │ │ └── index.ts
│ │ └── window
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── string.ts
│ │ ├── styled
│ │ ├── common.ts
│ │ ├── dark.ts
│ │ ├── dracula.ts
│ │ ├── index.ts
│ │ ├── light.ts
│ │ ├── monokai.ts
│ │ ├── sepia.ts
│ │ ├── solarizedDark.ts
│ │ ├── styleFunctions.ts
│ │ └── types.ts
│ │ ├── types.ts
│ │ └── utils
│ │ ├── array.ts
│ │ ├── comments.ts
│ │ ├── context.tsx
│ │ └── tree.ts
├── electron
│ ├── consts.ts
│ ├── index.ts
│ ├── ipc.ts
│ ├── menu.ts
│ ├── updater.ts
│ └── windows.ts
├── index.tsx
├── lib
│ ├── boosthub.tsx
│ ├── context.tsx
│ ├── electronOnly.ts
│ ├── events.ts
│ ├── hooks.ts
│ ├── i18n.ts
│ ├── platform.ts
│ ├── predicates.spec.ts
│ ├── predicates.ts
│ ├── preview.ts
│ ├── routing
│ │ └── pagePropCache.ts
│ ├── string.ts
│ ├── time.ts
│ └── url.ts
├── locales
│ └── enUS.ts
├── mobile
│ ├── components
│ │ ├── App.tsx
│ │ ├── MobileGlobalStyle.tsx
│ │ ├── Router.tsx
│ │ ├── atoms
│ │ │ ├── MobileFormControl.tsx
│ │ │ ├── NavigationBarBackButton.tsx
│ │ │ ├── NavigationBarButton.tsx
│ │ │ ├── NavigationBarContainer.tsx
│ │ │ ├── NavigationBarIconButton.tsx
│ │ │ ├── TableHeaderItem.tsx
│ │ │ ├── TableItem.tsx
│ │ │ └── UpgradeIntroModalButton.tsx
│ │ ├── layouts
│ │ │ └── AppLayout.tsx
│ │ ├── molecules
│ │ │ ├── ContentManagerDocRow.tsx
│ │ │ ├── ContentManagerFolderRow.tsx
│ │ │ ├── ContentManagerRow.tsx
│ │ │ ├── ContentManagerRowLinkContent.tsx
│ │ │ ├── MobileContentManagerBulkActions.tsx
│ │ │ └── MobileContextMenu.tsx
│ │ ├── organisms
│ │ │ ├── ContentManager.tsx
│ │ │ ├── DocOnlyContentManager.tsx
│ │ │ ├── NativeMobileAuthForm.tsx
│ │ │ ├── Navigator
│ │ │ │ ├── Navigator.tsx
│ │ │ │ ├── NavigatorCategory.tsx
│ │ │ │ ├── NavigatorControlItem.tsx
│ │ │ │ ├── NavigatorItem.tsx
│ │ │ │ ├── NavigatorNestedTreeRow.tsx
│ │ │ │ ├── NavigatorSpaceSelector.tsx
│ │ │ │ ├── NavigatorTree.tsx
│ │ │ │ ├── SpaceMenuItemLabel.tsx
│ │ │ │ └── index.tsx
│ │ │ └── modals
│ │ │ │ ├── AccountSettingsTab.tsx
│ │ │ │ ├── DocCreateModal.tsx
│ │ │ │ ├── DocInfoModal.tsx
│ │ │ │ ├── MobileDocRevisionsModal.tsx
│ │ │ │ ├── MobileResourceModal.tsx
│ │ │ │ ├── MobileResourceMoveModal.tsx
│ │ │ │ ├── MobileSearchModal.tsx
│ │ │ │ ├── MobileWorkspaceModal.tsx
│ │ │ │ ├── Modal.tsx
│ │ │ │ ├── SettingsModal.tsx
│ │ │ │ ├── SpaceBillingsTab.tsx
│ │ │ │ ├── SpaceMembersTab.tsx
│ │ │ │ ├── SpaceSettingsTab.tsx
│ │ │ │ ├── SpaceUpgradeTab.tsx
│ │ │ │ ├── UpgradeIntroModal.tsx
│ │ │ │ ├── WorkspaceCreateModal.tsx
│ │ │ │ ├── atoms
│ │ │ │ ├── MobileSearchCategory.tsx
│ │ │ │ ├── MobileSearchHeader.tsx
│ │ │ │ ├── MobileSearchItem.tsx
│ │ │ │ ├── ModalContainer.tsx
│ │ │ │ └── ModalFormWrapper.tsx
│ │ │ │ ├── organisms
│ │ │ │ ├── DocContextMenu
│ │ │ │ │ ├── DocAssigneeSelect.tsx
│ │ │ │ │ ├── DocPropertyValueButton.tsx
│ │ │ │ │ └── DocStatusSelect.tsx
│ │ │ │ ├── DocInfoModalShareSection.tsx
│ │ │ │ ├── DocTagsList
│ │ │ │ │ ├── DocTagsListItem.tsx
│ │ │ │ │ ├── TagsAutoCompleteInput.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ └── styled.ts
│ │ │ │ ├── MobileSearchView.tsx
│ │ │ │ ├── SettingsTeamForm.tsx
│ │ │ │ └── SmartViewForm.tsx
│ │ │ │ └── types.ts
│ │ └── pages
│ │ │ ├── CooperatePage.tsx
│ │ │ ├── CreateTeamPage.tsx
│ │ │ ├── DeleteAccountPage.tsx
│ │ │ ├── DocEditPage.tsx
│ │ │ ├── DocPage.tsx
│ │ │ ├── DocStatusShowPage.tsx
│ │ │ ├── DocViewPage.tsx
│ │ │ ├── FolderPage.tsx
│ │ │ ├── OpenInvitePage.tsx
│ │ │ ├── ResourcesPage.tsx
│ │ │ ├── RootPage.tsx
│ │ │ ├── SettingsPage.tsx
│ │ │ ├── SharedDocsListPage.tsx
│ │ │ ├── SmartFolderPage.tsx
│ │ │ ├── TagsShowPage.tsx
│ │ │ ├── TeamDeletePage.tsx
│ │ │ ├── TeamIndex.tsx
│ │ │ └── WorkspacePage.tsx
│ ├── index.tsx
│ └── lib
│ │ ├── appStatus.ts
│ │ ├── href.ts
│ │ ├── nativeMobile.ts
│ │ ├── preferences.ts
│ │ ├── sidebar
│ │ ├── types.ts
│ │ └── useNavigatorTree.tsx
│ │ ├── signOut.ts
│ │ └── useMobileResourceModals.tsx
└── stories
│ ├── Button.stories.tsx
│ ├── Index.mdx
│ ├── Table.stories.tsx
│ └── utils
│ └── themes.tsx
├── static
├── Desktop.svg
├── Mobile.svg
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── boosthub-preload.js
├── boosthub.png
├── boostnote-mac-icon.png
├── boostnote-mac-icon.svg
├── browserconfig.xml
├── cloud-workspace.svg
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── icon.icns
├── icon.ico
├── img_ui.png
├── local-workspace.svg
├── logo.png
├── logo.svg
├── logo_index.svg
├── logo_symbol.svg
├── logo_with_text_teal.svg
├── main-preload.js
├── mstile-144x144.png
├── mstile-150x150.png
├── mstile-310x150.png
├── mstile-310x310.png
├── mstile-70x70.png
├── safari-pinned-tab.svg
└── site.webmanifest
├── test
└── setup.js
├── tsconfig-webpack.json
├── tsconfig.json
├── typings
├── calendly.d.ts
├── chartjs.d.ts
├── codemirror.d.ts
├── coffeescript.d.ts
├── event-source-polyfill.d.ts
├── flowchart.d.ts
├── markdowns.d.ts
├── mermaid.d.ts
├── styled-components.d.ts
├── unified.d.ts
└── yjs.d.ts
├── vercel.json
├── webpack.cloud.config.ts
├── webpack.config.ts
└── webpack.mobile.config.ts
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | { "targets": "last 2 Chrome versions", "loose": true }
6 | ],
7 | "@babel/preset-typescript",
8 | "@babel/preset-react"
9 | ],
10 | "plugins": [
11 | ["@babel/plugin-proposal-class-properties", { "loose": true }],
12 | ["@babel/plugin-proposal-private-methods", { "loose": true }],
13 | ["@babel/plugin-proposal-private-property-in-object", { "loose": true }]
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/.env.default:
--------------------------------------------------------------------------------
1 | NODE_ENV=development
2 |
3 | INTERCOM_APP_ID=
4 | GA_TRACKING_ID=
5 | BOOST_HUB_BASE_URL=
6 | SSE_URL=
7 | REALTIME_URL=
8 | GITHUB_OAUTH_ID=
9 | GOOGLE_CLIENT_ID=
10 | STRIPE_PUBLISHABLE_KEY=
11 | COUPONS_NEW_USER_PRO=
12 | COUPONS_NEW_USER_STANDARD=
13 | COUPONS_NEW_SPACE=
14 | MOBILE_BASE_URL=
15 | BOOST_PDF_EXPORT_BASE_URL=
16 |
17 | # Deployment
18 |
19 | GH_TOKEN=
20 | APPLE_ID=
21 | APPLE_ID_PASSWORD=
22 |
23 | CLOUD_S3_BUCKET=
24 | MOBILE_S3_BUCKET=
25 |
26 | # Optional
27 |
28 | # MOCK_BACKEND=true
29 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | /scripts
--------------------------------------------------------------------------------
/.github/workflows/node.js.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: Node.js CI
5 |
6 | on:
7 | push:
8 | branches: [ master ]
9 | pull_request:
10 | branches: [ master ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 |
17 | strategy:
18 | matrix:
19 | node-version: [12.x]
20 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
21 |
22 | steps:
23 | - uses: actions/checkout@v2
24 | - name: Use Node.js ${{ matrix.node-version }}
25 | uses: actions/setup-node@v1
26 | with:
27 | node-version: ${{ matrix.node-version }}
28 | - run: npm ci
29 | - run: npm test
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/*
2 | .DS_Store
3 | .env
4 | .env.*
5 | !.env.default
6 | Desktop.ini
7 | Thumbs.db
8 | *.log
9 | .idea/
10 | compiled/*
11 | dist/*
12 | .cache
13 | secrets
14 | compiled-mobile
15 | compiled-cloud
16 | electron/*
17 | !electron/.gitkeep
18 | report*.json
19 |
20 | .now
21 | .vercel
22 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BoostIO/BoostNote-App/bab4d8fed2a5d50f855fbac31873b8d3802fba09/.prettierignore
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "semi": false,
4 | "jsxSingleQuote": true
5 | }
6 |
--------------------------------------------------------------------------------
/.storybook/main.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | stories: [
3 | '../src/stories/**/*.stories.mdx',
4 | '../src/stories/**/*.stories.@(js|jsx|ts|tsx)',
5 | ],
6 | addons: [
7 | '@storybook/addon-links',
8 | '@storybook/addon-essentials',
9 | '@storybook/addon-postcss',
10 | ],
11 | typescript: {
12 | check: false,
13 | checkOptions: {},
14 | reactDocgen: 'react-docgen-typescript',
15 | reactDocgenTypescriptOptions: {
16 | shouldExtractLiteralValuesFromEnum: true,
17 | propFilter: (prop) =>
18 | prop.parent ? !/node_modules/.test(prop.parent.fileName) : true,
19 | },
20 | },
21 | }
22 |
--------------------------------------------------------------------------------
/.storybook/preview.js:
--------------------------------------------------------------------------------
1 | export const parameters = {
2 | actions: { argTypesRegex: "^on[A-Z].*" },
3 | controls: {
4 | matchers: {
5 | color: /(background|color)$/i,
6 | date: /Date$/,
7 | },
8 | },
9 | }
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Boost Note
2 | Copyright (C) 2016 - 2020 BoostIO
3 |
4 | This program is free software: you can redistribute it and/or modify
5 | it under the terms of the GNU General Public License as published by
6 | the Free Software Foundation, either version 3 of the License, or
7 | (at your option) any later version.
8 |
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | GNU General Public License for more details.
13 |
14 | You should have received a copy of the GNU General Public License
15 | along with this program. If not, see
{JSON.stringify(typeDef, null, 2).replaceAll('"', '')}13 |
Show Boost Note document preview in Slack
17 | 18 | } 19 | /> 20 | ) 21 | } 22 | 23 | export default SlackIntegration 24 | -------------------------------------------------------------------------------- /src/cloud/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | import App from './components/App' 4 | import './lib/i18n' 5 | import { RouterProvider } from './lib/router' 6 | import { ElectronProvider } from './lib/stores/electron' 7 | 8 | function render(Component: typeof App) { 9 | let rootDiv = document.getElementById('root') 10 | if (rootDiv == null) { 11 | rootDiv = document.createElement('div', {}) 12 | rootDiv.setAttribute('id', 'root') 13 | document.body.appendChild(rootDiv) 14 | } 15 | ReactDOM.render( 16 |= React.FC
2 |
3 | export type ControlButtonProps = {
4 | disabled?: boolean
5 | active?: boolean
6 | spinning?: boolean
7 | icon: string
8 | onClick: (event: React.MouseEvent) => void
9 | onContextMenu?: (event: React.MouseEvent) => void
10 | tooltip?: string
11 | }
12 |
13 | export type SubmissionWrappers = {
14 | beforeSubmitting?: () => void
15 | afterSubmitting?: () => void
16 | }
17 |
--------------------------------------------------------------------------------
/src/design/lib/utils/tree.ts:
--------------------------------------------------------------------------------
1 | type Node