Commit Graph
2094 Commits
Author SHA1 Message Date
Anthony LC 3646d7dc42 🚚(frontend) add doc move to doc options
In order to harmonize the doc options, we are adding
the "Move to my docs" and "Move into a doc" options
to the doc options menu.
This allows users to move documents directly from
the options menu, providing a more streamlined
experience.
2026-08-28 12:56:49 +02:00
Anthony LC 85177dc3ca (frontend) add find and replace feature to the editor
We have added a new feature to the editor that allows
users to find and replace text within their documents.
This feature enhances the editing experience by
providing a convenient way to search for specific
words or phrases and replace them with new content.
2026-08-28 12:20:06 +02:00
Anthony LC 1c52633f96 ️(frontend) responsive throttling instead of debouncing
We changed the responsive store to use throttling
instead of debouncing for the window resize event.
This change ensures that the store updates more
consistently during rapid window resizing,
providing a smoother user experience.
2026-08-28 11:09:13 +02:00
Anthony LC 672f84d8bc (frontend) add word count to doc header toolbox
We can now see the word count in the doc header toolbox.
2026-08-28 11:09:12 +02:00
Anthony LC e0fcd2a01e ⬆️(frontend) replace ui-kit by ui-components
A major release was made on the ui-kit side,
ui-kit is replaced by ui-components, which is a new
package that contains the same components as ui-kit
but with some improvements.
To build the tokens, a new dev dependency is necessary,
which is @gouvfr-lasuite/ui-tokens.
These replacements bring better separation of concerns
and a better architecture for the future.
We need to adapt our codebase to use the new package
and the new dev dependency.
2026-08-28 11:09:11 +02:00
Anthony LC 944ea131c4 📄(frontend) allowed partially export when MIT
When MIT, we were not able to export anything.
But actually, the export HTML and Print are allowed
for MIT, so we should allow them.
We now allow partially export when MIT, but the
AGPL export is still not allowed (pdf / odt / docx).
2026-08-26 13:17:27 +02:00
Anthony LC 2c5577d026 (frontend) Add "Copy link to block" feature
We added a new feature that allows users to copy
a link to a specific block within the document.
We can copy the link to the block by clicking on
the "Copy link to block" button in the block's menu
in the document editor.
When the link is pasted in the browser, it will
automatically scroll to the block.
2026-08-26 11:43:12 +02:00
Anthony LC e1eb6c99de ♻️(frontend) change BlockNoteSideMenu to DocsSideMenu
We want to have our own side menu, so we can add more
features to it and display the ui as we want.
The new side menu is called DocsSideMenu
and it will be used in the BlockNoteEditor.
2026-08-26 11:43:11 +02:00
Anthony LC d75431f2c8 📱(frontend) fine tuning shadow depend size
Depend the size of the screen and how the elements
are displayed, we want to have different
shadows and transparency for the floating bar
and the left panel.
2026-08-26 10:32:03 +02:00
Anthony LC 4e6d28e259 ♻️(frontend) update ui logo Docs
The logo Docs seems to have again changed in the
design system. We update the logo part accordingly
to the new design system logo.
2026-08-26 10:32:03 +02:00
Anthony LC e6bc586df7 ♻️(frontend) change favorite to star
Change the favorite to star, it will be part of
the grid list as the others, we can select them
directly from a filter in the url.
2026-08-26 10:32:02 +02:00
BOUKERFA Mohamed El AmineandAnthony LC 1af34c6e70 🐛(frontend) fix clipped formatting toolbar in new comment composer
The new comment composer cllipped its own formatting toolbar.
That made styling text impossible so we let the toolbar extend past the box.

Signed-off-by: BOUKERFA Mohamed El Amine <boukerfa.ma@gmail.com>
2026-08-25 16:56:17 +02:00
fch-aaandAnthony LC b7fb579af0 (frontend) reset side panel state between documents
Reset the comment filter to open whenever the side panel
closes, and close the active panel when navigating to
another document. This prevents panel state from
leaking across sessions and documents.

Signed-off-by: fch-aa <21101725+fch-aa@users.noreply.github.com>
2026-08-25 16:12:15 +02:00
Ovgodd 2c2bbe91d6 ️(frontend) make sub-doc interlinks keyboard accessible
A native anchor breaks Tiptap drag and drop, so we use role=link.
2026-08-25 15:43:14 +02:00
Cyril 5172794942 ️(frontend) announce search loading state for screen readers
Add live region announcement when document search is in progress.
2026-08-25 09:02:29 +02:00
Anthony LC 02195154a0 🔖(release) minor 5.5.0
Added:
- ️(frontend) restore skip to content link after header redesign
- 🌐(i18n) rename cn_CN to zh_CN, add eo_PL and zh_TW locales
- (backend) conditional email notification in server to server api
- (backend) profile api using django-silk

Changed:
- ️(frontend) use semantic `<dl>` structure in document info card
- ️(frontend) replace onboarding assets with webm and webp
- 💄(frontend) use the same highlight color for cells and moves
- ️(backend) optimize media_auth endpoint
- 🚸(frontend) print from document options menu

Fixed:
- 🐛(frontend) refresh pins after document deletion and restoration
- 🐛(frontend) redirect homepage to login when homepage feat
  is disabled
- 🐛(backend) ignore CSPs for API docs in development
- 🐛(frontend) export images embedded with a relative url
- 🐛(y-provider) fix sentry init
- 🐛(backend) handle object storage metadata keys case-insensitively
- 🐛(keycloak) fix database env variables in the self-hosting example
- 🐛(helm) show the database error while jobs wait for it to be ready
2026-08-24 21:40:18 +02:00
Anthony LC f18d23338e 🐛(frontend) display imported docs in list grid
The imported docs were not displayed anymore in the
list grid view directly after the import.
It was because the request was not matched with the
correct query key.
2026-08-24 21:40:18 +02:00
Anthony LC 00c0d3aee8 ✏️(frontend) fix uppercase in on-boarding assets
STEP was in uppercase in the assets names, on the
preprod the assets were not found because the
server is case sensitive.
We renamed the assets to lowercase to fix the issue,
as the previous assets.
2026-08-24 15:55:50 +02:00
AntoLCandAnthony LC c8ed9ec349 🌐(i18n) update translated strings
Update translated files with new translations
2026-08-24 14:51:36 +02:00
Anthony LC 1df56199c6 🌐(i18n) add Polish language to django system
A new language has been added to the Django system,
allowing for Polish translations and localization
support.
We need to initialize the Polish language files before
being able to download the translations from
Crowdin. This commit includes the initial setup for
the Polish language, including the necessary configuration
files and directory structure.
2026-08-24 14:37:36 +02:00
Anthony LC bfada16063 🐛(i18n) fix export translations
Last upgrade of js-yaml has a compatibility issue
with i18next-parser library, which causes the
export / import translations to fail.
2026-08-24 14:05:51 +02:00
Anthony LC 75d332f111 (frontend) add sorting on docs list column name
We can now sort the documents list by clicking on
the column name. The sorting is done in ascending
or descending order.
2026-08-24 12:28:45 +02:00
Anthony LC 420b2bdfc6 ️(frontend) set focus style globally
Lot of elements did not have a focus style, or the
focus style was not consistent. We now have a global focus
style that is applied to all elements that are
focusable. The style is still overridable for
specific elements, so buttons and other elements
still have their own focus style.
We will have probably to improve the focus style
in the future of some elements, but this is a
good start.
2026-08-24 12:26:29 +02:00
Anthony LC b25a7f3f9e ♻️(frontend) refacto of the grid documents
We have refactored the document grid feature to
fit the new design system and to improve the code
quality.
2026-08-24 12:26:28 +02:00
Anthony LC d28b0d8afc 🚸(frontend) print from document options menu
We move the print button from the export select to
the document toolbox, so that it is more accessible
and easier to find.
2026-08-24 10:52:11 +02:00
Anthony LC 675483dce2 💄(frontend) update ui doc toolbox
We updated the UI of the doc toolbox to fit
with the design system. The icons have been updated,
we moved it to the doc management folder in order
to use it to different places in the app.
2026-08-24 10:50:29 +02:00
Anthony LC 6f68c1ea3b 🔥(frontend) remove copy as markown from document options
We have removed the "Copy as Markdown" option from
the document options menu.
If user need to copy the document content as markdown,
they can just copy the content from the document
editor and paste it into a markdown editor.
2026-08-24 10:50:28 +02:00
Anthony LC ef898affe3 ️(frontend) replace onboarding assets with webm and webp
Webp and webm are more efficient formats
than gif and png, so we replace the
onboarding assets with these formats to improve
performance and decrease file size.
2026-08-24 09:38:37 +02:00
Manuel Raynaud 4111e4e5ed ️(backend) optimize media_auth cpu usage
Once the sql queries improved we have still a bottleneck on large
concurrent requests on this endpoint. We notive in the profiles generated
that lot of time was spent in creating a new s3 client instance on each
request. django_storage use a thread local cache for signed and unsigned
connection, but using uvicorn we have a new thread for each request, so
on each request a new s3 client is generated and it appears to be an
expensive operation. To fix this issue, we cache the client and share it
accross all the thread and requests.
2026-08-20 17:28:31 +02:00
Manuel Raynaud 7372c4610f ️(backend) optimize media_auth sql queries
On the media_auth endpoint the first bottleneck we have is with
postgresql. We are looking for too much data and no index is used on the
attachments colum. When the lookup filter on the attachement columns, a
full scan is made on all the document table looking for each element in
the array, this operation is really expensive. To fix this we created a
GIN index on the attachments column. Also the readable_per_se lookup was
selecting too much data combined with the filter_descendants function.
We remove the usage of the filter_descendants, we choose to first fetch
all the paths where the attachment is found, this operation is fast
thanks to the new index, split all the paths in candidate paths and then
filter readable_per_se queryset with these paths. All these
modifications make the endpoint faster.
2026-08-20 16:28:31 +02:00
Manuel Raynaud f714c7fae3 (backend) profile api using django-silk
We have performance issue with the media_auth endpoint. We need to
monitor and profile this endpoint to understand what is happening. We
decided to install and configure django-silk. By default django-silk is
not enabled and not accessible, once enabled migration must be run and
the /silk/ endpoint will be accessible only using a super user.
To have relecant profiles and monitor we must have a database comparable
to a production one because we are facing a scaling issue. Unless a
million documents probably nothing is happening, for this we added
several management commands to help us. A first one to anonymize a
database than can be reused without any risk to leak PII data, can be
called using python manage.py anonymize_database with some mandatory
options. An other command to generate a database profile, this command
should be run on a production database, this profile can then be used by
the generate_volumetry to populate a development database with same
volumetry than describe in the profile.
2026-08-20 16:21:36 +02:00
risk-altandAnthony LC fb984abab3 🐛(backend) handle object storage metadata keys case-insensitively
Object storage metadata keys are case insensitive per the S3
specification, but implementations don't agree on the case they give
back. When head_object returns a capitalized "Status", updating the
attachment status added a second, lowercase entry instead of replacing
it, and the copy request ended up carrying two x-amz-meta-status
headers. Ceph RadosGW loses one of them behind a proxy, which
invalidates the request signature.

The same assumption was made when reading the status back in media-auth
and media-check, where an attachment stored on such a backend stayed in
"processing" forever.

Metadata read from the storage is now normalized to lowercase keys
before being consumed or copied over.

Signed-off-by: risk-alt <aldu6974@gmail.com>
2026-08-14 11:30:52 +02:00
fch-aaandAnthony LC 2da4ae2298 🐛(frontend) refresh pins after document deletion and restoration
Favorite relationships persist across soft deletion, while the sidebar keeps
a stale cached list until reload. Invalidate the favorites query after deletion
and restoration so deleted documents disappear immediately and their pins
return when restored.

Signed-off-by: fch-aa <21101725+fch-aa@users.noreply.github.com>
2026-08-13 10:00:42 +02:00
risk-alt 87e59e78fa 🐛(helm) show the database error while jobs wait for it to be ready
The migrate and createsuperuser jobs polled `manage.py check` with its
output sent to /dev/null, then printed "Database not ready" whatever
the reason. Any failure the check reports, a missing setting or a bad
credential for instance, looked like a database that had not started
yet, and the job looped forever without a single clue in its logs.

The check output is now captured and printed on each failed attempt,
along with the attempt number, so the reason the job is still waiting
is readable with kubectl logs. The retry behaviour is unchanged.

Applied to both jobs in the chart values and in the dev and feature
helmfile environments. The chart README table is regenerated
accordingly.

Signed-off-by: risk-alt <aldu6974@gmail.com>
2026-08-11 22:49:37 +02:00
risk-altandAnthony LC 44c51ff7bf 💄(frontend) use the same highlight color for cells and moves
Blocknote highlights the selected table cells with #c8c8ff66 and draws
the drop cursor of a moved block with #ddeeff: two different colors,
both out of the palette.

Use --c--contextuals--background--semantic--brand--tertiary for both, and
for the drop indicator of a moved table row or column which was #adf.
The cell overlay is blended with multiply because it is drawn on top of
the cell content while the token is opaque.

Signed-off-by: risk-alt <aldu6974@gmail.com>
2026-08-11 17:19:00 +02:00
Anthony LC c389a3c83d 🐛(y-provider) fix sentry init
Sentry should actually be initialized
before the app is created. We now start sentry
before starting the app server.
2026-08-11 15:29:06 +02:00
risk-altandAnthony LC 28438fdd92 🐛(frontend) export images embedded with a relative url
Images embedded with a relative url such as /assets/logo.png were routed
through the CORS proxy: the same origin check used a substring match on
window.location.hostname, which a relative url never contains. The
backend rejects those urls with a 400 as it only validates absolute
http(s) urls.

Resolve the url against the current origin instead, so relative and
absolute same origin urls are fetched directly. This also stops matching
unrelated external urls that merely contain the hostname, and replaces
the "base64" substring check by an explicit data: scheme check.

exportResolveFileUrl now checks response.ok as well: fetch() only
rejects on network errors, so the 400 payload was returned as a blob and
embedded in the export instead of falling back to the url.

Signed-off-by: risk-alt <aldu6974@gmail.com>
2026-08-10 12:12:39 +02:00
renovate[bot]andGitHub c9e32e34e8 ⬆️(dependencies) update dompurify to v3.4.13 [SECURITY] 2026-08-09 13:56:58 +00:00
Anthony LC b4b5f9fc2c (e2e) fix flakiness with language tests
When tests were run in parallel, the language tests
could introduce flakiness due to a switch to the
default language not being completed before the
next test started.
2026-08-07 10:47:49 +02:00
Anthony LC 58f70e0d2c 🔒️(js) fix security warning
- brace-expansion
- svgo
- postcss
- undici
- sharp
2026-08-07 09:16:33 +02:00
Anthony LC f8c4d2b619 🚨(frontend) adapt code to ui-kit v0.28
ui-kit v0.28 breaks some UI components.
This commit updates the relevant files to ensure
compatibility with the new version of ui-kit.
We update the cunningham-tokens.css and
cunningham-tokens.ts files to reflect the changes
in the design tokens.
2026-08-06 17:44:34 +02:00
Anthony LC c37e9b162f ⬆️(dependencies) update js dependencies 2026-08-06 17:44:21 +02:00
Julien Maupetit b297d79c32 🐛(backend) ignore CSPs for API docs in development
With Content Security Policies activated, swagger (and redoc)
auto-generated API documentation is no longer accessible even locally.
To restore this feature, we've excluded CSP for related URLs only in
the `Development` configuration.
2026-08-05 10:39:48 +02:00
Nathan Panchout b956be12e5 (frontend) cover present from block
Exercise block-to-slide mapping and the editor side-menu action.

Keep coverage scoped to starting the presenter from a block.
2026-08-04 17:49:24 +02:00
Nathan Panchout 7aa5935872 (frontend) start the presentation from a block
Add a "Present" item to the block side menu that opens the presenter on
the slide containing that block. Map any block id (incl. nested or
divider ids) to its rendered content slide.

Closes #2470
2026-08-04 17:49:24 +02:00
renovate[bot]andGitHub d2dc74c0f9 ⬆️(dependencies) update postcss to v8.5.23 [SECURITY]
PostCSS: Path Traversal in Previous Source Map Auto-Loading (sourceMappingURL) 
leads to Arbitrary .map File Disclosure
GHSA-r28c-9q8g-f849

PostCSS: incomplete fix of GHSA-6g55-p6wh-862q — attacker-controlled 
sourceMappingURL reads arbitrary .map files when from is unset
CVE-2026-69153 / GHSA-fxqj-rqcc-2cmp
2026-08-04 15:03:17 +02:00
Manuel Raynaud 1e56b5e162 ⬆️(backend) upgrade pylint to version 4.0.6
pylint-django is now compatible with latest version of pylint, we can
upgrade it safely.
2026-08-04 10:16:51 +02:00
Manuel Raynaud f7d06e45e5 🚨(backend) lint code with new ruff 0.16
New ruff version need to lint the code again and adapt exceptions
2026-08-04 10:16:51 +02:00
Manuel Raynaud a57fb7cbde ♻️(backend) remove deprecation warning from pydantic-ai library
Since pydantic-ai has ben upgraded deprecation warning were present in
the logs. This commint change how the instrumentation is enabled to be
compatible with hoe pydantic-ai manage it. Also prompt system are
ignored when they come from the front, like we are doing and dropped. To
maintain the system prompt we use the instruction parameter instead.
2026-08-04 10:16:51 +02:00
Manuel Raynaud 050591e2ee ⬆️(backend) upgrade pydantic-ai-slim and remove mistralai
We upgraded pydantic-ai-slim to the latest version and add mistral has
extra dependency. Doing this, the direct dependance to mistral can be
removed and will be managed with pidantic-ai-slim package. The import of
mistralai has changed, we have to updagre them from mistralai to
mistralai.client
2026-08-04 10:16:50 +02:00