100 Commits
Author SHA1 Message Date
HemachandarandGitHub e2c28f4b9f fix: Autofocus inside lazy-loaded modal and popover (#12146)
* fix: Autofocus inside lazy-loaded modal/popover

* use wrapperRef

* remove unused import
2026-05-01 08:15:14 -04:00
HemachandarandGitHub 22538e7392 fix: Scrollbar flash in new collection modal (#12144)
* fix: Scrollbar flash in new collection modal

* reset animating on close
2026-04-24 13:23:40 +05:30
5584089441 feat: Figma integration (#11044)
* OAuth

* store logo

* unfurl support

* refresh token

* support for list

* embed list

* mention menu for all embeds in a list

* multi-level list

* logo

* account level connection

* tsc

* Update Icon.tsx

* coderabbit feedback

* RFC 6749 suggestion

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2026-01-15 20:27:00 -05:00
50759d40e8 feat: Option to export nested documents (#9679)
* add migration file

* documents.export API

* download dialog

* file ops list item

* export task

* download modal styling

* cleanup

* lint

* Restore individual download actions

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2026-01-10 21:19:33 -05:00
HemachandarandGitHub 321d0ee124 Rename ActionV2 to Action (#10770)
* chore: Remove `Action` v1 dependency

* cleanup

* rename
2025-12-03 18:16:36 -05:00
142985c6d7 Move Document event writing to model layer (#9790)
* documents.restore, documents.unarchive

* documents.templatize

* documents.archive

* documents.unpublish

* documents.create, documents.update

* documents.title_change event

* documents.move

* documents.delete

* tsc, tests

* tsc

* Copilot feedback

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2025-11-23 20:40:45 +01:00
HemachandarandGitHub f3fe7283f8 fix: Allow pasting simple lists (#10150) 2025-09-10 16:48:29 -04:00
HemachandarandGitHub 7f818c7329 chore: Replace custom toPlainText serialization with leafText (#10039) 2025-08-30 20:26:07 +05:30
HemachandarandGitHub 27d116c8e2 Implement right-click context menu (#9883)
* base context menu

* extract document actions to `useDocumentMenuAction` hook

* context menu for DocumentListItem

* common menu component

* use Menu in dropdown and context

* menu context

* remove DropdownMenu and ContextMenu primitives

* update yarn.lock

* permissions recent bug fix
2025-08-30 20:25:03 +05:30
HemachandarandGitHub 05b9c69da8 fix: Show api-key creator name in settings page (#10041) 2025-08-29 19:03:47 +05:30
HemachandarandGitHub ac55ad55dd fix documents.import permission checks for shared parent (#9996) 2025-08-28 05:37:42 -04:00
HemachandarandGitHub 0de2a3dc98 Skip Notion linked database views (#10018) 2025-08-26 16:14:44 -04:00
HemachandarandGitHub 18dcef8ce4 Include collection attachments in json export (#10010) 2025-08-26 10:50:55 -04:00
HemachandarandGitHub 7458228df0 Use leafText when converting mention nodes to its text content (#10011) 2025-08-26 10:45:27 -04:00
HemachandarandGitHub 8383a0ee1e fix: Sync draft comment from local storage when navigating between documents (#9997) 2025-08-26 02:15:43 +05:30
HemachandarandGitHub 19a696942e fix: Use event keycode for determining ToC shortcut keys (#10002) 2025-08-26 02:15:28 +05:30
HemachandarandGitHub f1a5e95f77 chore: Dependabot group for radix-ui (#10001) 2025-08-26 01:41:15 +05:30
HemachandarandGitHub bd5de2e185 Display correct child document structure & auto open share section (#9854)
* Show correct child structure for shared documents

* useMemo dep

* auto open tree, show child docs in references

* document.children
2025-08-17 23:09:49 -04:00
HemachandarandGitHub c2f84466df chore: Move TableOfContentsMenu & BreadcrumbMenu to Radix (#9882)
* mobile toc menu

* indent heading levels, filter > H3

* breadcrumb menu

* tiny
2025-08-09 21:59:46 -04:00
HemachandarandGitHub 5c070d0428 chore: Move more dropdowns to Radix (part 2) (#9880)
* revision menu

* new child document menu; dropdown trigger now supports tooltip

* import menu

* oauth authentication

* oauth client

* tsc
2025-08-09 14:18:19 -04:00
HemachandarandGitHub 4822261187 chore: Move DocumentMenu to Radix (#9879)
* works without custom items in menu

* tooltip support for dropdown button

* fix: menu goes out of bounds

* custom node, lazy render menu for perf

* bug fixes

* fix: useTemplateActions re-computed templates on every render

* fix: hide subscribe/unsubscribe for inactive documents & collections

* cleanup `MenuContext` & `useTemplateMenuItems`

* rename prop, increase dropdown max-height

* jsdoc
2025-08-09 18:11:20 +05:30
HemachandarandGitHub 45cc5ee20f chore: Move CollectionMenu to Radix (#9874)
* chore: Move `CollectionMenu` to Radix

* action button supports v2

* rename button

* respect disabled pointer-events

* separator should go all the way

* Revert "separator should go all the way"

This reverts commit c76afa1252.
2025-08-09 13:47:13 +05:30
HemachandarandGitHub 5c0fc87504 chore: Move more dropdowns to Radix (#9871)
* collection group member menu

* comment menu

* group member menu

* group menu; added support for disabled items

* insights menu

* member menu

* notifications menu

* share menu

* alignment

* tsc, graphite feedback

* remove unused `CollectionGroupMenu` & `MemberMenu`
2025-08-08 08:54:11 +05:30
888add7920 Use shareLoader for loading public docs in documents.info endpoint (#9822)
* Use `shareLoader` for loading public docs in `documents.info` endpoint

* cleanup sharedCache in documents store

* remove shareId path param for authenticated routes

* require auth in document loader

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2025-08-07 22:41:04 -04:00
HemachandarandGitHub d5510f4454 fix: Allow users to revoke a collection share (#9870) 2025-08-08 00:07:04 +05:30
HemachandarandGitHub 5b19f7c711 fix: Prefetch non-archived notificatios only (#9869) 2025-08-07 22:22:53 +05:30
HemachandarandGitHub f28f41eb76 Add sub-menu support for dropdown (#9787)
* sub menu primitives

* user menu

* mobile sub menu

* fluid transition for mobile sub-menu

* account menu

* selected icon

* submenu icon

* tsc: migrate TeamMenu

* reactivity
2025-08-07 08:21:27 +05:30
80b9fb1daa fix: Full-width nodes misaligned when ToC is open in full-width document (#9860)
* fix: Full-width nodes misaligned when ToC is open in full-width document

* Remove extra div

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2025-08-06 20:46:23 -04:00
HemachandarandGitHub 04c3d81b1f chore: Setup missing oxlint configs (#9862)
* shared

* server

* app

* remove vestigial eslintrc files

* update comment directives
2025-08-06 19:54:22 -04:00
HemachandarandGitHub f41f93d6c9 Move ColorPicker to Radix popover (#9863) 2025-08-06 19:52:15 -04:00
HemachandarandGitHub 6a6e77b52a Cleanup reakit popover (#9853) 2025-08-06 07:33:25 -04:00
HemachandarandGitHub 9bb802c35c Migrate SearchPopover to Radix (#9844) 2025-08-05 17:42:06 -04:00
HemachandarandGitHub 8ad097aef2 fix: Flash of 404 page due to timing diff between React & MobX state (#9845) 2025-08-05 17:39:44 -04:00
HemachandarandGitHub 0cfd968f1e chore: Fix console errors (#9841) 2025-08-05 11:32:05 -04:00
HemachandarandGitHub ca2258ecc7 Ensure auth when loading non-public share info (#9840) 2025-08-05 09:01:56 -04:00
HemachandarandGitHub bf87f2dfee Autofocus search input when opening icon picker (#9839) 2025-08-05 08:47:16 -04:00
HemachandarandGitHub b4757dfc6c Allow disconnecting analytics integrations (#9823)
* Allow disconnecting analytic integrations

* review
2025-08-05 07:36:48 -04:00
HemachandarandGitHub 129f8f0520 fix: Generate sitemap for shares with custom slugs (#9820)
* fix: Generate sitemap for shares with custom slugs

* throw 400 when teamId is not present
2025-08-04 09:21:58 -04:00
d3eb3db7ba feat: Public sharing of collections (#9529)
* shares.info, collections.info, documents.info

* shares.list, shares.create, shares.update

* shares.sitemap

* parity with existing document shared screen

* collection share popover

* parent share and table

* collection scene

* collection link in sidebar

* sidebar and breadcrumb collection link click

* collection link click in editor

* meta

* more meta + 404 page

* map internal link, remove showLastUpdated option

* fix shares.list pagination

* show last updated

* shareLoader tests

* lint

* sidebar context for collection link

* badge in shares table

* fix existing tests

* tsc

* update failing test snapshot

* env

* signed url for collection attachments

* include collection content in SSR for screen readers

* search

* drafts can be shared

* review

* tsc, remove old shared-doc scene

* tweaks

* DRY

* refactor loader

* Remove share/collection urls

* fix: Collection overview should not be editable when viewing shared link and logged in

* Tweak public breadcrumb

* fix: Deleted documents should never be exposed through share

* empty sharedTree array where includeChildDocuments is false

* revert includeChildDocs guard for logical correctness + SSR bug fix

* fix: check document is part of share

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2025-08-03 13:07:39 -04:00
HemachandarandGitHub 5db3df35f5 chore: Move Collection event writing to model layer (#9663)
* collections.create, collections.update, collections.delete API

* collections.archive, collections.restore

* collections.move

* file imports

* remove collectionDestroyer

* remove data field

* remove data field for collections.move

* remove data field for import flow

* use hook for permission_changed event

* simplify event type

* tiny
2025-07-19 13:38:22 -04:00
HemachandarandGitHub 69a4dc0950 feat: Radix dropdown menu (#9578)
* base menu works

* action internal link & group

* action external link

* simplify NewTemplatesMenu

* animation

* tiny cleanup

* simplify group api

* icon spacer

* root action

* mobile menu

* decrease drawer animation speed

* format

* animation, const separator

* memo..

* TemplatesMenu + Scrollable dropdown

* delete file-ops

* cap height
2025-07-19 12:48:46 -04:00
HemachandarandGitHub 58d3fad84f Stricter guards for text nodes in Notion import (#9675) 2025-07-18 07:46:34 -04:00
HemachandarandGitHub d78b0440df fix: Skip overwriting non-transaction fields in firstCollectionForTeam query (#9662) 2025-07-17 08:22:09 -04:00
HemachandarandGitHub d3115e3557 Allow replacing embed links (#9479)
* Allow replacing embed links

* better error msg

* add missing GitLabSnippet props

* add embed link toolbar

* cleanup
2025-07-16 21:59:06 -04:00
HemachandarandGitHub 4c1caf6025 Show paste menu to convert a list of URLs to mentions (#9646) 2025-07-16 20:25:24 -04:00
HemachandarandGitHub c7231ffd8b chore: Move Revision event writing to model layer (#9650) 2025-07-16 17:28:29 -04:00
HemachandarandGitHub 7d315288dd Listen to GitHub webhooks to update issueSources cache (#9414)
* Listen to GitHub webhooks to update issue-sources cache

* Add `GitHubWebhookTask`

* review
2025-07-15 23:07:14 -04:00
HemachandarandGitHub 066b6dab43 Remove @renderlesskit/react package (#9615)
* remove ariaLabel

* remove @renderlesskit/react
2025-07-11 17:41:47 -04:00
HemachandarandGitHub e469e5771e Migrate remaining select menus to Radix (#9599)
* InputMemberPermissionSelect

* api key expiry

* invite permission

* templatize location
2025-07-10 22:56:04 -04:00
HemachandarandGitHub d4cdf4202f InputSelectPermission component (#9585) 2025-07-10 08:46:19 -04:00
HemachandarandGitHub a60634139e fix: Use compatible versions of Radix internals (#9576) 2025-07-08 18:01:07 -04:00
HemachandarandGitHub 29c07d6dee Migrate remaining popovers to Radix (#9555)
* reaction picker

* api key expiry date picker

* find and replace popover

* slack list item
2025-07-06 08:53:47 -04:00
HemachandarandGitHub b0a2a02166 Migrate share popovers to Radix (#9547)
* common popover primitive

* move collection/document share popovers

* cleanup dummy file

* snappy animation
2025-07-05 22:24:00 -04:00
HemachandarandGitHub b03880d121 fix: Navigate routes and links in kbar (#9552) 2025-07-05 17:07:00 -04:00
HemachandarandGitHub a3b3e9e0be Use Retry-After header for Notion rate-limit retries (#9467) 2025-06-18 16:39:58 -04:00
HemachandarandGitHub 2183c6d1d2 fix: Skip showing archived docs in shared section (#9451) 2025-06-14 10:46:25 -04:00
HemachandarandGitHub c9f25546e8 fix: Handle Notion linked database errors (#9429) 2025-06-11 09:10:00 -04:00
HemachandarandGitHub 554c7a8111 Handle OAuth error in Linear callback (#9419) 2025-06-10 08:46:52 -04:00
HemachandarandGitHub 6cf230963e Show integrations breadcrumb for Linear scene (#9418) 2025-06-10 08:10:54 -04:00
HemachandarandGitHub 39f9bfbbcd fix: Persist document icon & color in import flow (#9421) 2025-06-10 08:10:14 -04:00
HemachandarandGitHub 39c2aca883 chore: Cleanup deprecated task schedule method (#9415) 2025-06-09 19:33:46 -04:00
HemachandarandGitHub a85fec57cc chore: Cleanup unfurl temporary backward compatibility (#9406) 2025-06-08 09:24:32 -04:00
HemachandarandGitHub 6660cd6746 fix: invalidate stale policy only (#9397)
* fix: invalidate stale document policy only

* remove collection policy
2025-06-05 14:50:00 -04:00
HemachandarandGitHub 6a16dc07c1 fix: Set name and id in Switch events (#9384) 2025-06-03 05:51:29 -04:00
HemachandarandGitHub e7b7eb7818 feat: Allow specifying exact pixel width for images (#9288)
* Allow specifying exact pixel width for images

* resize height

* Math.round

* handle natural width, debounce error state
2025-05-31 11:36:36 -04:00
HemachandarandGitHub 82b5b87440 fix: Skip fetching children for unsupported Notion blocks (#9289)
* fix: Skip fetching children for unsupported Notion blocks

* better naming
2025-05-23 17:17:05 -04:00
HemachandarandGitHub 052924d816 Resolve index collision when restoring collection (#9229)
* Resolve index collision when restoring collection

* use beforeUpdate hook
2025-05-16 23:56:46 -04:00
HemachandarandGitHub dc5c3f5280 fix: Consider non-archived collections only for index computation (#9225) 2025-05-16 09:39:32 -04:00
HemachandarandGitHub 610721eed6 fix: Ensure collection withUser scope is not overriden (#9226) 2025-05-16 08:16:25 -04:00
HemachandarandGitHub d50f0986bb fix: Reset editing state when collection/document title is unmodified (#9221) 2025-05-15 14:12:26 +00:00
c5d534b2ad Add script to resolve existing collection index collisions (#8810)
* Add script to resolve existing collection index collisions

* Remove debug logging

---------

Co-authored-by: Tom Moor <tom.moor@gmail.com>
2025-05-04 16:12:09 -04:00
HemachandarandGitHub 722d10e7de Implement type-safe schedule method for tasks (#9079)
* Implement type-safe task scheduler

* introduce 'schedule' instance method

* typo
2025-04-28 17:27:24 -04:00
HemachandarandGitHub ce001547b5 fix: Check pasted text is url before creating an URL object (#9082) 2025-04-28 17:27:12 -04:00
HemachandarandGitHub 7f513a6950 fix: Store Linear workspace logo only when it's available (#9072) 2025-04-27 09:26:36 -04:00
e8e46a438c fix: Store Linear workspace logo in storage (#9061)
* fix: Store Linear workspace logo in Outline

* use async task

* Move task into plugin

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2025-04-25 23:18:21 -04:00
HemachandarandGitHub 9274f56ef6 Show correct icon & color for GitHub draft PR (#9063) 2025-04-25 17:37:54 -04:00
HemachandarandGitHub 4bb9ac40c7 fix: Linear status icon completion percentage edge case (#9062) 2025-04-25 13:17:28 -04:00
HemachandarandGitHub 21e756c357 Check collection (or) document when processing page/database in Notion import (#9047) 2025-04-24 21:22:39 -04:00
HemachandarandGitHub de6c1735d9 feat: Linear integration (#9037)
* linear settings and oauth

* unfurl

* unfurl impl fix for recent merge from main

* fetch labels

* state icon

* linear icon

* uninstall hook

* lint

* i18n

* cleanup

* use workspace key, reduce icon size

* determine completion percentage

* extract completionPercentage to separate method
2025-04-24 07:50:48 -04:00
HemachandarandGitHub 51cb5bffce Cache issueSources for embed integrations (#8952)
* Cache `issueSources` for embed integrations

* lock model before update
2025-04-22 09:59:39 -04:00
HemachandarandGitHub d37b7fa31e Transform issue and pull_request to unfurl shape in plugin (#9006)
* Transform issue and pull_request to unfurl shape in plugin

* better typings

* add todo
2025-04-22 07:00:44 -04:00
HemachandarandGitHub 65bb3b11f3 fix: Parse emoji and url only as workspace icon (#9009)
* fix: Parse emoji and url only as workspace icon

* scope emoji regex to transform function
2025-04-18 10:45:17 -04:00
HemachandarandGitHub 5789d65bf5 Ensure iframely fallback is not executed for connected unfurl integration (#8995)
* Ensure iframely fallback is not executed for connected unfurl integration

* tsc
2025-04-16 18:22:51 -04:00
HemachandarandGitHub f082da6456 fix: Reset avatar zoom, set missing text in upload button (#8949)
* fix: Reset avatar zoom, set missing text in upload button

* tiny
2025-04-13 19:15:15 -07:00
bf6a56849e Show GitHub issues and pull requests as mentions (#8870)
* mention issue works

* pr and loading works

* error node

* tweak mention display

* handle multiple creation error

* tidy

* store unfurl in mention attrs

* simplify mention code creation

* test fix

* base feedback

* update node when pos is available

* delete local UnfurlsStore

* use unfurl from store

* Optimize lodash isMatch import statement

* fix: Copy/paste of issue mentions
fix: Icon alignment
fix: Error and loading mentions are unselectable

* Switch order in paste menu

---------

Co-authored-by: Tom Moor <tom@getoutline.com>
2025-04-13 06:09:13 -07:00
HemachandarandGitHub 9c9657f4cc eslint: Increase severity to error for lodash imports (#8932) 2025-04-11 17:56:28 -07:00
HemachandarandGitHub f7b00e72f1 Implement UnfurlsStore (#8920)
* Implement UnfurlsStore

* simplify lookup

* refetch unfurl after X elapsed time

* compute fetchedAt in client
2025-04-10 18:24:32 -07:00
HemachandarandGitHub e499881110 fix: Update collection 'documentStructure' when archived document is deleted (#8922) 2025-04-10 18:11:30 -07:00
HemachandarandGitHub 2e018e74b8 Log fields that cause UniqueConstraintError in ImportsProcessor (#8887) 2025-04-06 11:10:59 -07:00
HemachandarandGitHub 4237377d47 fix: Skip sequelize hooks when creating user membership in collections.update (#8849) 2025-04-01 04:43:31 -07:00
HemachandarandGitHub dcb7b86df8 Store import error in DB (#8811) 2025-03-29 06:08:07 -07:00
HemachandarandGitHub 45c6e72c6d Manage collection subscriptions when user (or) group is removed from a collection (#8821)
* Manage collection subscriptions when user (or) group is removed from a collection

* rename collection task

* rename document task

* remove unnecessary actor filter
2025-03-29 06:07:57 -07:00
HemachandarandGitHub a7fe6c9af3 Include non-deleted imports for cleanup (#8822) 2025-03-28 05:46:36 -07:00
HemachandarandGitHub 877b7ad0df fix: Handle index collision when creating a collection (#8803)
* fix: Handle index collision when creating a collection

* move to sequelize hooks

* index maxLen parity between api and model

* remove beforeUpdate hook

* use common indexLen in model

* beforeUpdate hook..

* test
2025-03-27 02:50:40 -07:00
HemachandarandGitHub f6da244c33 fix: Handle empty text blocks from Notion response (#8785) 2025-03-25 04:31:06 -07:00
HemachandarandGitHub 5c4eb32c26 fix: Release redis lock only when it hasn't expired (#8765)
* fix: Suppress redlock release errors

* release only when lock hasn't expired
2025-03-24 14:37:36 -07:00
HemachandarandGitHub 6e98568e5b API importer for Notion (#8710) 2025-03-23 12:19:13 -07:00
HemachandarandGitHub 021a286d99 Migrate language, theme and user-role input-select to Radix (#8711)
* Migrate language, theme and user-role input-select to Radix

* use theme
2025-03-17 20:37:40 -07:00
c311ee915e Radix input select component (#8541)
* radix primitive and base input select component

* port toc position select menu

* fix render side

* restyle drawer title

* max-height for select content

* rename primitive

* review

---------

Co-authored-by: Tom Moor <tom.moor@gmail.com>
2025-03-15 18:14:46 -07:00
HemachandarandGitHub d5462a92c8 fix: Skip unsubscribing when user has access to document (#8631)
* fix: Skip unsubscribing when user has access to document

* better checks
2025-03-04 19:26:13 -08:00