Commit Graph
2155 Commits
Author SHA1 Message Date
Manuel Raynaud 9bdf36a323 🐛(backend) fix UnorderedObjectListWarning for DocumentAskForAccess
In the tests there is a UnorderedObjectListWarning, we also find this same
warning in the logs in production. This warning appears because the
queryset used by the DocumentAskForAccess paginator is not ordered and
can lead to inconsistent result. Ordering the queryset fix this warning.
2026-06-02 19:47:31 +02:00
Manuel Raynaud 5b70c5aecb 🔧(backend) new setting DOCUMENT_ALL_ENDPOINT_ENABLED
We want to allow or not the usage of the /documents/all/ endpoint. It has
been created to be used for an other purpose than the js client. For
those who don't use it this new settings allow to disable it. By default
it is set to True to keep the same behavior.
2026-06-02 17:28:04 +02:00
Manuel Raynaud b946080881 🔧(doc) add missing POSTHOG_HOST in env.md
We missed to add the setting POSTHOG_HOST in the env.md file
2026-06-02 17:28:04 +02:00
Nathan Panchout 73c3ca8105 (e2e) add presenter mode e2e test
Add a Playwright spec that opens the presenter overlay from the
doc options menu, walks through a multi-slide document built with
dividers, and verifies that Escape closes the overlay.
2026-06-02 16:25:56 +02:00
Nathan Panchout 39390eff0e (frontend) add unit tests for presenter hooks
Cover the three hooks that drive the presenter overlay:
useSlides for divider-based block segmentation,
useBrowserFullscreen for the Fullscreen API wrapper,
and usePresenterShortcuts for the keyboard navigation bindings.
2026-06-02 16:25:56 +02:00
Nathan Panchout 5f7e59a8dd (frontend) add presenter mode
Add a presenter overlay that turns the current document into a
slide deck. The editor's blocks are snapshot at open time and
split into slides on each divider; navigation is driven by
keyboard shortcuts and a floating bar with browser fullscreen
support. The overlay is wired to the doc header toolbox via a
new "Present" entry, lazy-loaded to keep the editor bundle lean.
2026-06-02 16:25:56 +02:00
Nathan Panchout 8e7a59aca7 ♻️(frontend) adapt modals to ModalDefaultVariantProps
cunningham-react 4.3.0 splits Modal props per variant. Switch
AlertModal and SideModal from the now-removed ModalProps alias to
the more precise ModalDefaultVariantProps type so the modal
wrappers keep type-checking against the new API.
2026-06-02 16:25:56 +02:00
Anthony LC 31588ac08d ⬆️(frontend) bump Blocknote to 0.51.4
We bumped the Blocknote editor to version 0.51.4,
which includes several bug fixes and improvements,
particularly 1 bug fix about emoji on the side bar.
2026-06-02 14:31:41 +02:00
Anthony LC 3b7ea3eba7 🏗️(frontend) move comments to its own folder feature
The feature "doc-editor" start to be quiete big,
and the comments related code is quite a lot.
We move all the comments related code to a new
folder "doc-comments" to make the code more
organized and easier to maintain.
2026-06-02 14:24:01 +02:00
Anthony LC 7b3ce3ca98 🐛(frontend) fix toolbar blocknote hidden
The header could hide the formatting bar of the
blocknote editor. This commit improve the z-index
of the header to ensure that the formatting bar
is always visible.
2026-06-02 12:00:58 +02:00
Anthony LC 472cb228cb 🐛(frontend) fix floatingBar skeleton layout
The floatingBar skeleton layout was not correctly
placed in the editor skeleton. It was not every time
above the floating buttons.
2026-06-02 11:32:52 +02:00
Anthony LC 9482783a62 🐛(frontend) don't load left panel in error boundary page
Error boundary page is used when an error occurs
in the application, this page can have states still
set, causing side effects depend the component that
throw the error. In this case, the left panel is
still loaded and try to load the tree, but the
provider is not set, causing a crash error inside
the error boundary page.
We don't need the left panel in the error boundary
page, so we can just not load it to avoid this issue.
2026-06-02 11:32:52 +02:00
Anthony LC 7fc115e4e4 🐛(frontend) fix emoji pdf not matching
The emoji algorithm to find the emoji was not totally
correct, it could choose a bad family of emojis.
The first part of the emoji "code" is
what should be used first to find the "family" of the
emoji, we can then try to find the exact match in
that specific family.
2026-06-02 10:10:45 +02:00
Manuel Raynaud 1ebc8d52a0 📈(backend) capture an event when a document is left
When a user leave a document, we want to capture an event.
2026-06-01 17:47:28 +02:00
Manuel Raynaud c91c443b08 📈(backend) capture an event when a document is moved
When a document is moved we want to capture an event. The position and
target_document_id is added to the sent properties.
2026-06-01 17:47:28 +02:00
Manuel Raynaud 0df2d753c4 📈(backend) capture an event when a comment is created
When a new comment is created, we capture an event related to this comment
creation.
2026-06-01 17:47:28 +02:00
Manuel Raynaud ba1a1d469e 📈(backend) capture an event when a thread is created
When a new thread is created, we capture an event related to this thread
creation.
2026-06-01 17:47:27 +02:00
Manuel Raynaud ab1708f6df 📈(backend) capture an event when an access document is deleted
When an access is deleted we want to capture an event.
2026-06-01 17:43:56 +02:00
Manuel Raynaud 0aac4b662b 📈(backend) capture an event when an access document is created
When an access is created we want to capture an event.
2026-06-01 17:41:57 +02:00
Manuel Raynaud 7f4226452f 📈(backend) capture an event when an AI action is used
When an AI action is called from ai_translate, ai_transform and
ai_proxy, an event doc_ai_action is captured with a method property
giving the information from where it is called.
2026-06-01 17:41:57 +02:00
Manuel Raynaud a55b1c61eb 📈(backend) capture an event when a document is mark as a favorite
We want to capture an event when a user flag a document as a favorite.
2026-06-01 17:41:57 +02:00
Manuel Raynaud a05de21d14 📈(backend) capture an event when a document is imported
We want to capture an event when a file is imported. We add in the
properties the type of file imported and if it is in the
create-for-owner api call.
2026-06-01 17:41:56 +02:00
Manuel Raynaud d1476024a7 📈(backend) capture an event when a document is duplicated
We want to capture an event when a document is duplicated. The document
from where come from the duplication is added in the properties.
2026-06-01 17:41:56 +02:00
Manuel Raynaud f4139e3ab0 📈(backend) capture an event when a user logs in
We want to capture an event every time a user logs in.
2026-06-01 17:41:55 +02:00
Manuel Raynaud d495b158c1 📈(backend) capture an event when a document is created and deleted
When a document is created and deleted, we capture an event and we send
it to posthog.
2026-06-01 17:41:55 +02:00
Manuel Raynaud 5eb9c4edd6 📈(backend) create a utils to capture event with posthog
We want to capture event with posthog. We created a utils for this
reposible to send the event or not if posthog is configured.
2026-06-01 17:41:55 +02:00
Manuel Raynaud e6a7657c89 ♻️(frontend) split posthog conf and how sdl is initialized
Reflect the changes made about posthog by the backend application. The
posthog config is split in POSTHOG_KEY and POSTHOG_HOST properties.
2026-06-01 17:12:11 +02:00
Manuel Raynaud 76544ab64a ♻️(backend) split posthog configuration
The posthog information were only available using the POSTHOG_KEY
settings. We split it in POSTHOG_KEY and POSTHOG_HOST to use them with
the pyhton posthog sdk
2026-06-01 17:02:43 +02:00
Manuel Raynaud 9f98af1387 (backend) allow to leave a document
We want to allow users to leave a document where they have an access or
they have visited creating a link_trace. All subdocuments should also be
leaved at the same time.
To know if the user can leave a doc we have to check when computing the
abilities if a record is existing in the LinkTrace table. This is a N+1
query situation. To avoid it, we added an annotation in the
DocumentQueryset like we already do to annotate the user role.
There is one edge case where the annotation is made to soon, it is when the
user is visiting a document for the first time, the `get_object` add the
annotation and in the permission, we compute the abilities. The `leave`
property is False because the entry in the LinkTrace table is not made,
when the serializer ask for the abilities again, it is still False. So
in the `retrieve` method in the viewset we force the
`user_has_link_trace` to the correct value.
2026-06-01 16:25:50 +02:00
Manuel Raynaud 7773a5b9bf 🔥(backend) remove masking document code
The mask feature has never been implemented by the frontend application
and it is not what we want to do. We want to implement a feature to
leave a document.
2026-06-01 16:25:50 +02:00
Anthony LC 2ad24384bd 🔒️(js) fix security warning
Moderate:
- ajv CVE-2025-69873
- qs CVE-2026-8723
- protobufjs CVE-2026-45740
- fast-uri CVE-2026-6322
2026-06-01 15:18:26 +02:00
renovate[bot]andGitHub ae9a6a14da ⬆️(dependencies) update js dependencies 2026-06-01 10:11:21 +00:00
Anthony LC 6361913587 💄(frontend) update icons in left panel header
The icon in the left panel header was updated to
match the new design.
2026-06-01 10:22:29 +02:00
Anthony LC 8104fe0be5 ️(frontend) improve focus behavior of the doc title input
Add wrapper to catch focus.
Benefit:
- The tooltip will show exactly in the middle of
  the title input text
- When the user is click on the right side of the
  doc title, the title get the focus and the cursor,
  which is the expected behavior when editing a title.
2026-06-01 10:22:29 +02:00
Anthony LC ce6dc77222 🚚(frontend) move doc toolbox to Floating Bar
We are modifying the doc header, we are moving elements
to a floating bar. In this case, we are moving the
doc toolbox to the floating bar.
We adapted the toolbox with the updated actions.
We update the doc header to use all empty space.
We moved the emoji part from the toolbox directly
to the header.
2026-06-01 10:22:29 +02:00
Anthony LC 882c2ac979 ♻️(frontend) replace visibility Alert
We remove the AlertPublic component and replace it
with a new visibility status in the DocHeaderInfo
component. This change simplifies the user interface
by providing a more direct indication of the
document's visibility status, whether it's public
or internal, without needing an additional alert
component.
2026-06-01 10:22:00 +02:00
Anthony LC e8cc19b74e 🚚(frontend) move Button Share to Floating Bar
We are modifying the doc header, we are moving elements
to a floating bar. In this case, we are moving the
Button Share to the floating bar.
2026-06-01 10:22:00 +02:00
Anthony LC f7f0c4d3e3 🛂(frontend) add guard before importing a doc
We could still have 400 error when importing
".markdown", because the backend only accepts ".md"
for markdown files. We added another guard on
the extensions to prevent this error and make sure
the user send acceptable formats.
2026-05-29 17:42:46 +02:00
Stephan MeijerandAnthony LC b6ab1f188c ♻️(frontend) centralize allowed conversion formats in ContentTypes
Replace ContentTypes enum with a structured object mapping MIME types
to their file extensions, removing the manual switch-case in useImport

Signed-off-by: Stephan Meijer <me@stephanmeijer.com>
2026-05-29 17:42:46 +02:00
Sylvain ZimmerandAnthony LC 5bd2d1b9f1 🐛(y-provider) return empty output when converting empty Yjs document
The convert handler returned 500 "No valid blocks were generated" whenever
the reader produced an empty blocks array, which is the normal state of a
freshly-created Yjs document. Treat empty input as a valid case and return
200 with an empty body for every supported output format.

Signed-off-by: Sylvain Zimmer <sylvain@sylvainzimmer.com>
2026-05-29 17:23:21 +02:00
Manuel Raynaud 4841d9584f 🔧(helm) enable collaboration edition in dev and feature env
We want to enable the collaboration edition check in dev and feature env
2026-05-28 16:04:12 +02:00
Manuel Raynaud 8655750dca 🔧(compose) create y-provider converter service
We wanto to have in the compose stack a dedicated service for the
converter like we did in the helm chart. The change is also made with
the e2e compose file
2026-05-28 09:13:25 +02:00
Manuel Raynaud efd5a3cee3 ️(helm) create a dedicated svc and deployment for yprovider converter
We want to isolate the converter service built in the yprovider server in
order to not mix conversion and collaboration together. We decided to
create a dedicated service and deployment, by default they use the
values defined in yProvider values but all can be overridden in
yProvider.converter.
Also, by default these new service and deployment are not enabled, they
must be explictly enabled and configured. If not it works like now with
only one service and deployment for the yProvider server.
2026-05-28 09:13:25 +02:00
Manuel RaynaudandGitHub a20ba1a78e 🐛(backend) use computed_link_reach in handle_onboarding_document
In the model method User::_handle_onboarding_documents_access we do not
allow using documents with restricted link_reach to be added as
onboarding documents. To check the real link_reach of the document, we
must use instead the computed_link_reach to be sure that a sub document
can also be used and compute its correct link_reach.
2026-05-28 06:50:40 +00:00
Manuel Raynaud fdc99adc78 (backend) add a breadcrumb in the search response
In the search response, we want to display a breadcrumb for every
document returned. For this we added a "parents" property containing a list
documents, all are the parents of the current document (ordered by their
depth). With this we can easily create a breadcrumb.
2026-05-27 17:41:39 +02:00
Manuel Raynaud 31b088c307 ♻️(backend) rename SearchDocumentSerializer in SearchQueryParam
The SearchDocumentSerializer name will be used for a dedicated
serializer for the search endpoint.
2026-05-27 17:41:39 +02:00
Manuel Raynaud d00b3222cf ♻️(backend) allow global search in sub documents
The global search endpoint filtering by title in the database was not
searching for accessible sub documents. We change the how global search
is made: it is now returning accessible sub documents matching the
title query.
2026-05-27 17:41:38 +02:00
Manuel Raynaud b77f7ab6f4 ♻️(backend) rename DocumentViewset::_title_search in _search_title
We rename the private method _title_search in _search_title in the
DocumentViewset for having the search methods prefixed with _search
2026-05-27 17:41:38 +02:00
Anthony LC e85e7d6c65 ️(frontend) fine grained accessibility for right panel
- 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
2026-05-27 17:03:28 +02:00
Anthony LC 981aef0f18 📱(frontend) coordinate left/right panel visibility on tablet
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.
2026-05-27 17:03:27 +02:00