Commit Graph
2254 Commits
Author SHA1 Message Date
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 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
Anthony LC 43a3620700 📱(frontend) reduce breakpoint mobile view
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.
2026-05-27 17:03:27 +02:00
Anthony LC 68b9342401 ♻️(frontend) move table of content to right panel
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.
2026-05-27 17:03:26 +02:00
Anthony LC 2c4317947b ✨(frontend) add comment side panel
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
2026-05-27 17:03:26 +02:00
Anthony LC 896444aa13 ✨(frontend) add right panel
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.
2026-05-27 16:49:21 +02:00
Cyril 980d57fe60 ♿️(frontend) add aria-hidden to decorative avatar SVGs in share modal
Hide decorative user avatar SVGs from assistive technologies in share modal.
2026-05-27 09:59:15 +02:00
Anthony LCandManuel Raynaud 7ad9550f54 ✨(backend) add unresolve action to ThreadViewSet
We have now the possibility to unresolve a thread
from the frontend.
We need to add the unresolve action to the
ThreadViewSet.
2026-05-26 12:21:47 +02:00
Anthony LCandManuel Raynaud 7956540b73 👔(backend) add resolved thread to queryset
We need to include resolved threads in the queryset
of the ThreadViewSet, otherwise they won't be
included in the list of threads and we will not be
able to list resolved threads in the side panel.
2026-05-26 10:28:09 +02:00
Amine BOUKERFAandGitHub 3264e29941 🔒(backend) prevent admins from rewriting other users comments
Admins/owners could overwrite another user's comment text and silently
take ownership of it.
Split write permissions: destroy stays broad (author + admin/owner) for
moderation.
    
Signed-off-by: Mohamed El Amine BOUKERFA <boukerfa.ma@gmail.com>
2026-05-26 10:26:31 +02:00
Amine BOUKERFAandGitHub 8d42f814b7 ✨(backend) validate user-provided document id is a valid UUID
Reject client-supplied IDs that are not valid UUIDs
when creating a document

Signed-off-by: Mohamed El Amine BOUKERFA <boukerfa.ma@gmail.com>
2026-05-26 07:57:36 +00:00
Manuel RaynaudandGitHub 24d58a1aa5 🔧(backend) allow configuring settings OIDC_OP_USER_ENDPOINT_FORMAT
The djang-lasuite package manages the settings
OIDC_OP_USER_ENDPOINT_FORMAT allowing to enforce the format use by the
user endpoint. By default it is set to `AUTO`.
2026-05-21 14:24:31 +00:00
Anthony LC 0bfc697476 🐛(frontend) remove comments from print
When we print a document, we want to hide
the comments and selection highlights. This is
done by adding some CSS rules to the print styles.
2026-05-19 22:04:44 +02:00
Anthony LC 48ba77b6d1 🔥(frontend) remove patch following upgrade of Cunningham
A patch about tabindex was added to the codebase
to fix an accessibility issue. However, after
upgrading Cunningham, the issue seems to have been
resolved and the patch is no longer necessary.
Therefore, we are removing the patch to keep
our code clean and maintainable.
2026-05-19 21:36:26 +02:00
Anthony LC 41f76ebde8 ⬆️(dependencies) upgrade Blocknote to 0.51.1
Upgrade Blocknote to 0.51.1 to get the latest
features and bug fixes.
2026-05-19 21:36:26 +02:00
Anthony LC 9cde092250 ⬇️(frontend) downgrade major release @hocuspocus
@hocuspocus made a major release, we need to do
a substantial refactor to be compatible with it.
This PR downgrades to the previous major release,
which is still compatible with our codebase,
until we have time to do the necessary refactor.
2026-05-19 17:01:44 +02:00
renovate[bot]andAnthony LC 18e9c3accb ⬆️(dependencies) update js dependencies 2026-05-19 17:01:44 +02:00
c9cf3b6550 ✨(buildpack) add PaaS deployment support, tested with Scalingo
Replaces #1020

- fixes
https://github.com/suitenumerique/docs/pull/1020#discussion_r2314089799
by creating a `deploy/` directory, making room for a deploy/docker
directory later
- fixes
https://github.com/suitenumerique/docs/pull/1020#issuecomment-3886237213
by adding documentation in docs/installation
- in general, follow the same changes as we did in
https://github.com/suitenumerique/meet/pull/957

Tested successfuly on Scalingo

Co-authored-by: Sylvain Zimmer <sylvain@sylvainzimmer.com>
2026-05-19 10:08:20 +00:00
Maximilian BoschandGitHub 0f14981d5b 🐛(backend) fix inclusion of modules with uv_build
Same fix as https://github.com/suitenumerique/meet/pull/1199 for meet.

Signed-off-by: Maximilian Bosch <maximilian@mbosch.me>
2026-05-18 07:56:58 +00:00
Manuel Raynaud abd03d1ac0 🐛(docs) run migration 0027 without superuser role
The migration 00227 must be run with a postgres superuser, most af
managed postgresql database can not be run using this kind of user.
Ti fix this, we use postgresql unnacent function instead of accessing C
function.
2026-05-13 08:18:01 +02:00
Mohamed El Amine BOUKERFAandManuel Raynaud 562ed0da3e ✨(backend) delete accesses and invitations on move when scope changes
When a document is moved outside its current permission scope (root
document, cross-tree move, or promotion to root), its direct accesses
and pending invitations are now deleted server-side within the same
atomic transaction as the move itself. This ensures consistency: if
the move fails, deletions are rolled back.

Signed-off-by: Mohamed El Amine BOUKERFA <boukerfa.ma@gmail.com>
2026-05-12 15:56:59 +02:00
Mohamed El Amine BOUKERFAandManuel Raynaud 0a7aa58182 🔥(frontend) remove manual access deletion logic from move doc hook
Access and invitation cleanup on document move is now handled
atomically by the backend. The frontend no longer needs to fetch
and delete accesses/invitations after a successful move.

Signed-off-by: Mohamed El Amine BOUKERFA <boukerfa.ma@gmail.com>
2026-05-12 15:56:58 +02:00
Anthony LC c52569448b ✅(e2e) fix some flakiness
Strong flakiness started to appear.
This commit aims to fix some of them by improving
the stability of the tests and removing some
redundant checks.
2026-05-12 10:43:27 +02:00
renovate[bot]andGitHub 0501551abb ⬆️(dependencies) update next to v16.2.6 [SECURITY] 2026-05-11 21:33:48 +00:00
Gustavo TrottandGitHub cd75a17f45 🐛(backend) support creating subdoc from file
The children/ endpoint was missing file upload support that the root
documents endpoint already had. Added file-to-YJS conversion handling to
subdocument creation.
2026-05-11 18:02:03 +02:00
Manuel Raynaud db467407cf 🔖(minor) release 5.1.0
Added

- ⚡️(frontend) add skeleton on content loading #2254
- ⚡️(frontend) close websocket connection when user change tab #2264

Changed

- 🏗️(core) migrate from pip to uv

Fixed

- 🩺(project) reload app if front and back unsync #2276
- 🐛(frontend) fix patch and comments #2273
- 🐛(frontend) interlinking are exported correctly in print mode #2269
- 💬(frontend) add missing link in onboarding description #2233
- 🐛(frontend) sanitize pasted and dropped content in document title #2210
- 🐛(frontend) Emoji menu doesn't display above comment box #2229
- 🐛(frontend) Block menu doesn't stay open on 1st line #2229
- 🐛(frontend) The "+" on the first line of a new doc doesn't work #2229
- 🐛(backend) manage race condition between GET and PATCH content #2271
- 🐛(backend) replace document creation table locks with retry strategy #2274

Security

- 🔒️(frontend) sanitize color during collaboration #2270
2026-05-11 15:57:02 +02:00
github-actions[bot]andManuel Raynaud 4d68f39623 🌐(i18n) update translated strings
update translated strings
2026-05-07 16:56:19 +02:00
Anthony LC d340c8f1f1 🧐(frontend) dispatch the app version to posthog
We add the app version in Posthog events to be
able to track which versions are being used and
identify potential issues related to specific
versions.
2026-05-07 14:20:05 +02:00
Anthony LC 67773ef2d9 🩺(project) reload app if front and back unsync
We observe some cases where the frontend and
backend versions can get out of sync, which can
cause issues.
To mitigate this, we want to implement a mechanism
that detects when the frontend and backend
versions are mismatched and triggers a
reload of the application to ensure they are in sync.
2026-05-07 14:20:05 +02:00
Manuel Raynaud 8fc13d75dc ♻️(backend) migrate from setuptool to uv_build as build backend
We already migrate from pip to uv to manage our dependencies. We can also
migrate the build backend from setuptool to uv_build.
In the pyproject file, the readme property has been removed, because
uv_build try to read it, but the readme is at the root of the project
and not copied into the Dockerfile instructions. This readme can be used
when the package is published on pypi but it is not the case for Docs.
2026-05-07 13:09:43 +02:00
Manuel Raynaud aea6fbef9b 🏗️(core) migrate from pip to uv
We want to remove the usage of pip in order to use uv as python package
manager.
2026-05-07 13:09:42 +02:00
Manuel Raynaud a47c35195d 🐛(backend) replace document creation table locks with retry strategy
We have situation where the number of locks in the database can increase
dangerously creating deadlock situation. To remove this situation we
decided to change the strategy to manage document creation concurrency.
We decided to use a retry strategy, trying to create the document
multiple times while a usable path is found. To avoid having an
inifinite loop, we use a max_attempts counter configurable using the
setting TREEBEARD_PATH_COMPUTE_RETRY_MAX_ATTEMPTS
2026-05-07 11:52:48 +02:00
Manuel Raynaud 8f67b37d70 ♻️(backend) split core/utils.py module
We need to split the core/utils.py in multiple submodule created in
core/utils/*.py. We need to do this to avoir circular import between
this module and the models module.
2026-05-07 11:45:57 +02:00
Manuel RaynaudandGitHub 0b20d9f435 🐛(backend) manage race condition between GET and PATCH content
When a PATCH and a GET on the content endpoint are made at the same time
for different users a race condition can happen and the metadata
returned
by the S3 head_object can be outdated when the object is fetched leading
to an error raised because the Content-Length header does not match the
size of the response body. To avoid this, we no longer used head_object
followed bu get_object, we have to manage
everything in one call with the get_object. The get_object also accepts
as parameters an etag or last-modified header and will return a 304 if
the content has not changed, so we can use this to not return the entire
body if this one has not changed.
2026-05-07 09:43:20 +00:00