Skip to content

✨Comment side panel#2279

Merged
AntoLC merged 6 commits into
mainfrom
feat/comment-side-panel
May 27, 2026
Merged

✨Comment side panel#2279
AntoLC merged 6 commits into
mainfrom
feat/comment-side-panel

Conversation

@AntoLC

@AntoLC AntoLC commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Purpose

✨ We are implementing the "comments" inside a right panel.

Listing the comment inside the side panel will give us the ability to:

  • see the comments that have been removed because of deleted text
  • see the resolved comments
  • unresolved comments

We moved as well the "table of contents" in the panel, it was conflicting with the "comments" feature.

Demo

Enregistrement.2026-05-22.160322.mp4

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

Size Change: +11.3 kB (+0.26%)

Total Size: 4.32 MB

📦 View Changed
Filename Size Change
apps/impress/out/_next/static/57fcdf21/_buildManifest.js 656 B +656 B (new file) 🆕
apps/impress/out/_next/static/chunks/250.js 641 kB +641 kB (new file) 🆕
apps/impress/out/_next/static/chunks/3284.js 0 B -921 B (removed) 🏆
apps/impress/out/_next/static/chunks/3367.js 62.7 kB +62.7 kB (new file) 🆕
apps/impress/out/_next/static/chunks/3503.js 0 B -60.5 kB (removed) 🏆
apps/impress/out/_next/static/chunks/3863.js 0 B -26.5 kB (removed) 🏆
apps/impress/out/_next/static/chunks/5384.js 0 B -642 kB (removed) 🏆
apps/impress/out/_next/static/chunks/6990.js 53.2 kB +2.69 kB (+5.33%) 🔍
apps/impress/out/_next/static/chunks/7559.js 24.6 kB +24.6 kB (new file) 🆕
apps/impress/out/_next/static/chunks/pages/_app.js 578 kB +911 B (+0.16%)
apps/impress/out/_next/static/chunks/pages/_error.js 3.65 kB +835 B (+29.68%) 🚨
apps/impress/out/_next/static/chunks/pages/401.js 2.64 kB +849 B (+47.48%) 🚨
apps/impress/out/_next/static/chunks/pages/404.js 2.72 kB +873 B (+47.16%) 🚨
apps/impress/out/_next/static/chunks/pages/500.js 2.17 kB +868 B (+66.92%) 🆘
apps/impress/out/_next/static/chunks/pages/docs.js 2.15 kB +868 B (+67.55%) 🆘
apps/impress/out/_next/static/chunks/pages/docs/[id].js 3.07 kB +829 B (+37.01%) 🚨
apps/impress/out/_next/static/chunks/pages/docs/new.js 2.48 kB +854 B (+52.42%) 🆘
apps/impress/out/_next/static/chunks/pages/index.js 2.17 kB +872 B (+67.18%) 🆘
apps/impress/out/_next/static/chunks/pages/offline.js 7.28 kB +927 B (+14.59%) ⚠️
apps/impress/out/_next/static/chunks/pages/user-reconciliations/active/[id].js 2.18 kB +870 B (+66.21%) 🆘
apps/impress/out/_next/static/chunks/pages/user-reconciliations/inactive/[id].js 2.19 kB +871 B (+66.29%) 🆘
apps/impress/out/_next/static/ef7d6908/_buildManifest.js 0 B -653 B (removed) 🏆

compressed-size-action

@AntoLC AntoLC force-pushed the feat/comment-side-panel branch 2 times, most recently from 7bd93dd to 137a9bc Compare May 12, 2026 15:31
@AntoLC AntoLC added the preview label May 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview will be available at https://2279-docs.ppr-docs.beta.numerique.gouv.fr/

You can use the existing account with these credentials:

  • username: docs
  • password: docs

You can also create a new account if you want to.

Once this Pull Request is merged, the preview will be destroyed.

@AntoLC AntoLC changed the title Feat/comment side panel ✨Comment side panel May 13, 2026
@AntoLC AntoLC force-pushed the feat/comment-side-panel branch 2 times, most recently from d576c8b to 59b8d3a Compare May 13, 2026 15:29
@robin-lecomte

This comment was marked as resolved.

@robin-lecomte robin-lecomte added the ⚠️ Needs corrections The implementation does not matches the design: corrections are needed label May 18, 2026
@AntoLC

AntoLC commented May 20, 2026

Copy link
Copy Markdown
Collaborator Author

Super cool, well done!

I have a few remarks:

Your review is a PR comment, so we cannot resolve it or answer part of it, better to move your review here, it will give more flexibility: https://docs.numerique.gouv.fr/docs/24227219-8da8-441f-8edb-58f8c444873c/

@AntoLC AntoLC force-pushed the feat/comment-side-panel branch 6 times, most recently from ae9b169 to befff14 Compare May 21, 2026 20:21
@AntoLC AntoLC linked an issue May 21, 2026 that may be closed by this pull request
@AntoLC AntoLC force-pushed the feat/comment-side-panel branch from befff14 to f6dc394 Compare May 22, 2026 11:26
@AntoLC

AntoLC commented May 22, 2026

Copy link
Copy Markdown
Collaborator Author

@CodeRabbit review

@coderabbitai

coderabbitai Bot commented May 22, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented May 22, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

This PR implements a comment side panel UI for the Impress document editor, complemented by backend support for unresolving threads and comprehensive frontend refactoring. The backend adds an unresolve POST endpoint to ThreadViewSet that clears resolved thread state, expands thread listings to include resolved threads, and adds corresponding permission checks. On the frontend, the PR introduces a right-panel coordinate system that renders either a comments sidebar or table-of-contents sidebar, with state managed via new Zustand stores (useRightPanelStore, useCommentSidebarStore). The BlockNoteEditor is decoupled from inline comment rendering to conditionally show floating comments only when the comments sidebar is closed. The old inline TableContent component is removed and replaced with a new TableContentSideBar that tracks scroll position to highlight active headings. A new usePanelCoordination hook manages left/right panel visibility on tablet breakpoints, auto-closing panels when needed. Throughout the frontend, the PR systematically replaces isDesktop with isLargeScreen for consistent responsive behavior across many components. E2E tests are updated with new helpers (tryFocusEditorContent) and comprehensive coverage of sidebar interactions, filtering, and panel coordination.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested reviewers

  • sampaccoud
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title "✨Comment side panel" directly and specifically summarizes the main change: implementing a comments side panel UI.
Docstring Coverage ✅ Passed Docstring coverage is 88.89% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The pull request description clearly explains the purpose: implementing comments in a right panel to show removed, resolved, and unresolved comments, plus moving table of contents to avoid conflicts.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/comment-side-panel

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/frontend/apps/e2e/__tests__/app-impress/utils-editor.ts (1)

55-63: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Reuse tryFocusEditorContent in writeInEditor to avoid drift.

writeInEditor duplicates the same focus fallback logic already implemented in tryFocusEditorContent. Reusing the helper keeps focus behavior consistent across tests.

Proposed refactor
 export const writeInEditor = async ({
   page,
   text,
 }: {
   page: Page;
   text: string;
 }) => {
-  const editor = await getEditor({ page });
-  if (
-    (await editor.locator('.bn-trailing-block.ProseMirror-widget').count()) > 0
-  ) {
-    await editor.locator('.bn-trailing-block.ProseMirror-widget').click();
-  } else {
-    await editor.click();
-  }
+  const editor = await tryFocusEditorContent({ page });
   await editor
     .locator('.bn-block-outer:last-child')
     .last()
     .locator('.bn-inline-content:last-child')
     .last()
     .fill(text);
   return editor;
 };
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/frontend/apps/e2e/__tests__/app-impress/utils-editor.ts` around lines 55
- 63, The writeInEditor helper duplicates focus/fallback logic; replace the
manual focus block in writeInEditor (the getEditor +
locator('.bn-trailing-block.ProseMirror-widget') check and click fallback) by
calling the existing tryFocusEditorContent helper to set focus consistently,
then proceed with the typing actions; locate writeInEditor and
tryFocusEditorContent (and getEditor) in the same test utils file and remove the
duplicated locator/click code so focus behavior is delegated to
tryFocusEditorContent.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/backend/core/tests/documents/test_api_documents_threads.py`:
- Around line 1264-1265: The test creates a resolved thread and a comment with
null actors so it doesn't guarantee resolved_at/resolved_by are populated before
exercising the "unresolve" behavior; update the setup for ThreadFactory and
CommentFactory so resolved_at and resolved_by are explicitly non-null (e.g.,
create the thread with a non-null creator and/or set resolved_at and resolved_by
on the ThreadFactory instance or create a resolving CommentFactory with a
non-null user) before calling the unresolve path so the assertions that
resolved_at and resolved_by are cleared actually validate clearing; refer to
ThreadFactory, CommentFactory, resolved_at and resolved_by to locate and adjust
the setup.

In `@src/frontend/apps/e2e/__tests__/app-impress/doc-table-content.spec.ts`:
- Around line 42-53: Replace brittle exact-pixel CSS assertions for indentation
(the expect(...).toHaveCSS checks on level1, level2, level3) with
relative/monotonic assertions: read the numeric padding/padding-left values for
elements level1, level2, level3 (e.g., via page.evaluate/getComputedStyle in the
test) and assert level1 < level2 and level2 < level3; keep the visibility and
aria-selected checks (editorLevel1/editorLevel2 visibility assertions and
aria-selected expectations) intact so only the fixed-value regex checks are
removed and replaced by numeric comparisons between level1/level2/level3.

In
`@src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx`:
- Around line 304-306: The inline composer is always mounted because
FloatingComposerController is only gated by showComments; update the condition
in BlockNoteEditor to also check that the comments sidebar is not open (use the
existing isCommentSideBarOpen flag) so FloatingComposerController is rendered
only when showComments && !isCommentSideBarOpen, mirroring the
FloatingThreadController rendering logic.

In
`@src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/DocsThreadStoreAuth.tsx`:
- Around line 61-63: canUnresolveThread currently returns true unconditionally,
so users without permission see the unresolve action; change
canUnresolveThread(thread: ClientThreadData) to return a real permission check
(e.g., return Boolean(thread.canUnresolve) or call the app's ability checker
like this.ability.can('unresolve', thread) or
this.store.currentUser?.canUnresolveThread(thread)), ensuring you reference the
ClientThreadData argument and the canUnresolveThread function so the UI is gated
by the actual permission.

In
`@src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContentSideBar.tsx`:
- Around line 62-83: The cleanup currently removes the scroll listener but
doesn't clear the pending debounce timer stored in the local timeout variable,
allowing the delayed callback (which calls handleScroll / setHeadingIdHighlight)
to run after unmount; update the effect cleanup to also check and clear timeout
(e.g., if (timeout) clearTimeout(timeout)) so the scheduled
setHeadingIdHighlight/handleScroll will not fire after the component is torn
down — locate the timeout variable and scrollFn in TableContentSideBar and add
the cancel logic to the returned cleanup along with removing the listener for
MAIN_LAYOUT_ID.

In
`@src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx`:
- Line 100: Replace the use of isDesktop in the responsive max-height
calculation inside the DocsGrid component with the new breakpoint flag
isLargeScreen: update the template expression `$maxHeight={`calc(100vh - 52px -
${isDesktop ? '2rem' : '0rem'})`}` to reference isLargeScreen instead so the
max-height/scroll behavior follows the migrated breakpoint logic used by
DocsGrid and related responsive code paths.

In
`@src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx`:
- Line 17: The actions are hidden based solely on
useResponsiveStore().isLargeScreen which also hides them on tablets where hover
isn't reliable; update the visibility condition in LeftPanelFavoriteItem so
actions remain visible on tablet/touch layouts by factoring in touch/hover
capability (e.g., detect hover support via window.matchMedia('(hover: none)') or
a new flag from useResponsiveStore like supportsHover/isTouch) and change the
check from just isLargeScreen to something like (isLargeScreen ||
!supportsHover) so touch devices always show the pinned actions.

In
`@src/frontend/apps/impress/src/features/right-panel/components/RightPanelCollapseButton.tsx`:
- Around line 16-24: RightPanelCollapseButton's useEffect should seed hasThreads
from the store snapshot before relying on the subscription; synchronously read
the current threads snapshot from threadStore (using its sync getter API such as
threadStore.get()/threadStore.getSnapshot()/threadStore.value — whichever is the
store's accessor) and call setHasThreads(snapshot.size > 0) immediately, then
call threadStore.subscribe(...) and return the unsubscribe; keep the existing
setHasThreads call inside the subscriber so future updates still update state.

In `@src/frontend/apps/impress/src/layouts/MainLayout.tsx`:
- Around line 56-57: MainContent still uses isDesktop for padding/background
while MainLayout now exposes isLargeScreen; update MainContent (and any spots at
the other occurrence) to use isLargeScreen instead of isDesktop so tablet uses
large-screen styling when isLargeScreen is true. Locate references to isDesktop
inside the MainContent component and any prop names passed from MainLayout,
replace them with isLargeScreen (and rename props if needed) and ensure
padding/background branching logic uses isLargeScreen throughout to avoid the
tablet layout drift.

---

Outside diff comments:
In `@src/frontend/apps/e2e/__tests__/app-impress/utils-editor.ts`:
- Around line 55-63: The writeInEditor helper duplicates focus/fallback logic;
replace the manual focus block in writeInEditor (the getEditor +
locator('.bn-trailing-block.ProseMirror-widget') check and click fallback) by
calling the existing tryFocusEditorContent helper to set focus consistently,
then proceed with the typing actions; locate writeInEditor and
tryFocusEditorContent (and getEditor) in the same test utils file and remove the
duplicated locator/click code so focus behavior is delegated to
tryFocusEditorContent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e1db1afc-ca4c-4d0a-8ee2-5137a73c66a1

📥 Commits

Reviewing files that changed from the base of the PR and between 24d58a1 and f6dc394.

⛔ Files ignored due to path filters (4)
  • src/frontend/apps/impress/src/assets/icons/ui-kit/bulleted-list.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/ui-kit/filter-notification.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/ui-kit/filter_list.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/ui-kit/x-mark.svg is excluded by !**/*.svg
📒 Files selected for processing (42)
  • CHANGELOG.md
  • src/backend/core/api/viewsets.py
  • src/backend/core/models.py
  • src/backend/core/tests/documents/test_api_documents_threads.py
  • src/frontend/apps/e2e/__tests__/app-impress/doc-comments.spec.ts
  • src/frontend/apps/e2e/__tests__/app-impress/doc-table-content.spec.ts
  • src/frontend/apps/e2e/__tests__/app-impress/left-panel.spec.ts
  • src/frontend/apps/e2e/__tests__/app-impress/utils-editor.ts
  • src/frontend/apps/impress/src/components/modal/ButtonCloseModal.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/CommentSideBar.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/CommentToolbarButton.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/DocsThreadStore.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/DocsThreadStoreAuth.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/index.ts
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/styles.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/useCommentSidebarStore.ts
  • src/frontend/apps/impress/src/features/docs/doc-editor/hook/useHeadings.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/stores/index.ts
  • src/frontend/apps/impress/src/features/docs/doc-editor/stores/usePanelEditorStore.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/styles.tsx
  • src/frontend/apps/impress/src/features/docs/doc-header/components/DocTitle.tsx
  • src/frontend/apps/impress/src/features/docs/doc-header/components/FloatingBar.tsx
  • src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchModal.tsx
  • src/frontend/apps/impress/src/features/docs/doc-table-content/components/Heading.tsx
  • src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContent.tsx
  • src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContentSideBar.tsx
  • src/frontend/apps/impress/src/features/docs/doc-table-content/components/index.ts
  • src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx
  • src/frontend/apps/impress/src/features/header/components/Header.tsx
  • src/frontend/apps/impress/src/features/left-panel/components/LeftPanel.tsx
  • src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx
  • src/frontend/apps/impress/src/features/left-panel/components/ResizableLeftPanel.tsx
  • src/frontend/apps/impress/src/features/left-panel/stores/useLeftPanelStore.tsx
  • src/frontend/apps/impress/src/features/right-panel/components/RightPanel.tsx
  • src/frontend/apps/impress/src/features/right-panel/components/RightPanelCollapseButton.tsx
  • src/frontend/apps/impress/src/features/right-panel/stores/useRightPanelStore.tsx
  • src/frontend/apps/impress/src/layouts/MainLayout.tsx
  • src/frontend/apps/impress/src/layouts/PageLayout.tsx
  • src/frontend/apps/impress/src/layouts/usePanelCoordination.tsx
  • src/frontend/apps/impress/src/stores/useResponsiveStore.tsx
💤 Files with no reviewable changes (6)
  • src/frontend/apps/impress/src/features/docs/doc-editor/stores/index.ts
  • src/frontend/apps/impress/src/features/docs/doc-editor/stores/usePanelEditorStore.tsx
  • src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContent.tsx
  • src/frontend/apps/impress/src/features/docs/doc-table-content/components/index.ts
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/DocsThreadStore.tsx
  • src/frontend/apps/impress/src/features/docs/doc-editor/components/comments/CommentToolbarButton.tsx

Comment thread src/backend/core/tests/documents/test_api_documents_threads.py
Comment thread src/frontend/apps/impress/src/layouts/MainLayout.tsx
@AntoLC AntoLC force-pushed the feat/comment-side-panel branch from f6dc394 to ca214b0 Compare May 22, 2026 13:29
@AntoLC AntoLC force-pushed the feat/comment-side-panel branch 2 times, most recently from 11866af to 2a5e23a Compare May 22, 2026 14:00
@AntoLC AntoLC marked this pull request as ready for review May 22, 2026 14:06
@AntoLC AntoLC added 💬 Design review A mockup is ready and awaits Product Owner validation and removed ⚠️ Needs corrections The implementation does not matches the design: corrections are needed labels May 22, 2026
@AntoLC AntoLC requested a review from Ovgodd May 22, 2026 14:21

@Ovgodd Ovgodd left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice feature! I only left a few small suggestions.

From an accessibility perspective, it looks good to me. I’ll ask Sophie to test it once it’s released.

);
};

export const CommentSideBarButton = () => {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we move CommentSideBarButton to a dedicated file?

This would keep CommentSideBar focused on the sidebar content and avoid mixing the panel rendering with the trigger button logic.

@AntoLC AntoLC May 27, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is by purpose, to understand quickly that this component activate this other component.

shouldCloseOnInteractOutside={() => true}
onOpenChange={setOpen}
>
<Tooltip content={t('Filter comments')} placement="top">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Little issue with the tooltip that appears under the navbar
Image

);
};

export const TableContentSideBarButton = () => {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we extract TableContentSideBarButton into a dedicated file?

@AntoLC AntoLC May 27, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is by purpose, to understand quickly that this component activate this other component.

@AntoLC AntoLC force-pushed the feat/comment-side-panel branch from 2a5e23a to 4502d7e Compare May 27, 2026 07:24
@AntoLC

AntoLC commented May 27, 2026

Copy link
Copy Markdown
Collaborator Author

Nice feature! I only left a few small suggestions.

From an accessibility perspective, it looks good to me. I’ll ask Sophie to test it once it’s released.

I think there is big accessibility issues, but it should be fixed on Blocknote side I think to be clean.
Some actions buttons are activated only on hover.

image

@AntoLC AntoLC requested a review from Ovgodd May 27, 2026 07:32
@AntoLC AntoLC force-pushed the feat/comment-side-panel branch from 4502d7e to 26574dc Compare May 27, 2026 07:38
@Ovgodd

Ovgodd commented May 27, 2026

Copy link
Copy Markdown
Collaborator

Nice feature! I only left a few small suggestions.
From an accessibility perspective, it looks good to me. I’ll ask Sophie to test it once it’s released.

I think there is big accessibility issues, but it should be fixed on Blocknote side I think to be clean. Some actions buttons are activated only on hover.

image

Oh nice catch, I didn't see them

@Ovgodd Ovgodd left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💯

@Ovgodd

Ovgodd commented May 27, 2026

Copy link
Copy Markdown
Collaborator

Here is the discussion open on blocknote regarding the accessibility problem : TypeCellOS/BlockNote#2791

@AntoLC AntoLC force-pushed the feat/comment-side-panel branch from 26574dc to 7d4748a Compare May 27, 2026 09:07
AntoLC added 6 commits May 27, 2026 16:49
Add a right panel, it will in a first time be used
to display the comment side panel, but it will be
used in the future for other features as well.
Add comment side panel to the right panel.
We will be able to manage the threads of the
document and see the content of the comments in
a side panel.
The advantage of this approach is that we will
be able to:
- see the comments that have been removed because
  of deleted text
- see the resolved comments
- see the unresolved comments
We move the floating table of content to the
right panel. This allows us to have a more consistent
UI and to make room for the right sidebar.
Most of the application was switching to mobile
view at the medium breakpoint.
Medium breakpoint let enough place to display
most of the application features and it is more
user friendly to switch to mobile view at the
small breakpoint.
We are switching to mobile view at the small breakpoint
to give more place to the application features
and to be more user friendly.
On tablet, the place is too tight to have both
panels open at the same time. We have a fine-grained
control of the panel visibility to display panel
depend users interactions and responsive breakpoints.
- improve semantics and aria attributes
- gives the focus to the panel when open or switching panels
- gives back the focus to the trigger element when closing the panel
@AntoLC AntoLC force-pushed the feat/comment-side-panel branch from 7d4748a to e85e7d6 Compare May 27, 2026 15:03
@AntoLC AntoLC merged commit e85e7d6 into main May 27, 2026
43 of 44 checks passed
@AntoLC AntoLC deleted the feat/comment-side-panel branch May 27, 2026 15:25
@AntoLC AntoLC mentioned this pull request Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💬 Design review A mockup is ready and awaits Product Owner validation feature add a new feature frontend preview

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Comments right panel Collapsable Right-side panel to nest comments and summary

3 participants