diff --git a/CHANGELOG.md b/CHANGELOG.md
index d504ecaed..d69c0f23e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,31 @@ and this project adheres to
## [Unreleased]
+## [0.4.0] - 2026-03-05
+
+### Added
+
+- Store thread read state per thread access #575
+
+ _⚠️ This migration requires a search reindex to be run after the upgrade._
+
+- Store and display the user who sent a message #574
+- Display selected threads count in right panel #576
+- Add skip navigation link for keyboard users #573
+- Add DeployCenter backend for syncing maildomain admins #572
+- Add management command to print all users of the instance
+
+### Changed
+
+- Bump keycloak to 26.5.4 #571
+- Add migrations-check Makefile command
+
+### Fixed
+
+- Preserve scroll position across renders #578
+- Convert newlines to `
` in styled text #577
+- Scope labels and user_role to the requested mailbox
+
## [0.3.0] - 2026-02-24
### Added
@@ -110,7 +135,8 @@ and this project adheres to
- Exclude `is_trashed` and `is_spam` threads from search results by default
- `to` search modifier now looks for messages where recipient fields (to, cc, bcc) contain the given email address.
-[unreleased]: https://github.com/suitenumerique/messages/compare/v0.3.0...main
+[unreleased]: https://github.com/suitenumerique/messages/compare/v0.4.0...main
+[0.4.0]: https://github.com/suitenumerique/messages/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/suitenumerique/messages/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/suitenumerique/messages/releases/v0.2.0
[0.1.1]: https://github.com/suitenumerique/messages/releases/v0.1.1
diff --git a/bin/release.py b/bin/release.py
index 6162c8a75..1fb90d8d3 100755
--- a/bin/release.py
+++ b/bin/release.py
@@ -127,6 +127,17 @@ def update_files(version: str) -> None:
package_json.write_text(content)
sys.stdout.write(f" → {package_json}\n")
+ # Update uv.lock files to match
+ sys.stdout.write("Updating uv.lock files...\n")
+ for pyproject_toml in src_path.rglob("pyproject.toml"):
+ lock_file = pyproject_toml.parent / "uv.lock"
+ if lock_file.exists():
+ run_command(
+ f"cd {pyproject_toml.parent} && uv lock",
+ shell=True
+ )
+ sys.stdout.write(f" → {lock_file}\n")
+
# Update package-lock.json files to match
sys.stdout.write("Updating package-lock.json files...\n")
for package_json in src_path.rglob("package.json"):
diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml
index 73d094409..34594201f 100644
--- a/src/backend/pyproject.toml
+++ b/src/backend/pyproject.toml
@@ -4,7 +4,7 @@
[project]
name = "messages-backend"
-version = "0.3.0"
+version = "0.4.0"
authors = [{ "name" = "ANCT", "email" = "suiteterritoriale@anct.gouv.fr" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
diff --git a/src/backend/uv.lock b/src/backend/uv.lock
index 75a33a1b1..0668629a0 100644
--- a/src/backend/uv.lock
+++ b/src/backend/uv.lock
@@ -1213,7 +1213,7 @@ wheels = [
[[package]]
name = "messages-backend"
-version = "0.3.0"
+version = "0.4.0"
source = { editable = "." }
dependencies = [
{ name = "boto3" },
diff --git a/src/e2e/package-lock.json b/src/e2e/package-lock.json
index 077bb4162..a5cdcf84e 100644
--- a/src/e2e/package-lock.json
+++ b/src/e2e/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "st-messages-e2e",
- "version": "0.3.0",
+ "version": "0.4.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "st-messages-e2e",
- "version": "0.3.0",
+ "version": "0.4.0",
"hasInstallScript": true,
"license": "MIT",
"devDependencies": {
diff --git a/src/e2e/package.json b/src/e2e/package.json
index 533ea52bd..6b576e666 100644
--- a/src/e2e/package.json
+++ b/src/e2e/package.json
@@ -1,7 +1,7 @@
{
"name": "st-messages-e2e",
"private": true,
- "version": "0.3.0",
+ "version": "0.4.0",
"description": "End-to-end tests for Messages application",
"engines": {
"node": ">=22.0.0 <23.0.0",
diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json
index 77541293a..4f8141687 100644
--- a/src/frontend/package-lock.json
+++ b/src/frontend/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "st-messages",
- "version": "0.3.0",
+ "version": "0.4.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "st-messages",
- "version": "0.3.0",
+ "version": "0.4.0",
"dependencies": {
"@blocknote/core": "0.46.2",
"@blocknote/mantine": "0.46.2",
@@ -130,7 +130,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -258,7 +257,6 @@
"node_modules/@babel/core": {
"version": "7.28.5",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@@ -686,7 +684,6 @@
}
],
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18"
},
@@ -726,7 +723,6 @@
}
],
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -744,7 +740,6 @@
"node_modules/@dnd-kit/core": {
"version": "6.3.1",
"license": "MIT",
- "peer": true,
"dependencies": {
"@dnd-kit/accessibility": "^3.1.1",
"@dnd-kit/utilities": "^3.2.2",
@@ -1384,7 +1379,6 @@
"node_modules/@floating-ui/dom": {
"version": "1.7.4",
"license": "MIT",
- "peer": true,
"dependencies": {
"@floating-ui/core": "^1.7.3",
"@floating-ui/utils": "^0.2.10"
@@ -1573,7 +1567,6 @@
"node_modules/@gouvfr-lasuite/drive-sdk/node_modules/react": {
"version": "18.3.1",
"license": "MIT",
- "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -2773,6 +2766,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
"integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
@@ -3073,7 +3067,6 @@
"node_modules/@opentelemetry/api": {
"version": "1.9.0",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -3095,7 +3088,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.5.0.tgz",
"integrity": "sha512-uOXpVX0ZjO7heSVjhheW2XEPrhQAWr2BScDPoZ9UDycl5iuHG+Usyc3AIfG6kZeC1GyLpMInpQ6X5+9n69yOFw==",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
@@ -3108,7 +3100,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.5.0.tgz",
"integrity": "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
@@ -3124,7 +3115,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.211.0.tgz",
"integrity": "sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/api-logs": "0.211.0",
"import-in-the-middle": "^2.0.0",
@@ -3518,7 +3508,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.5.0.tgz",
"integrity": "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/core": "2.5.0",
"@opentelemetry/semantic-conventions": "^1.29.0"
@@ -3535,7 +3524,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.5.0.tgz",
"integrity": "sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/core": "2.5.0",
"@opentelemetry/resources": "2.5.0",
@@ -3553,7 +3541,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz",
"integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=14"
}
@@ -5919,7 +5906,6 @@
"node_modules/@react-email/body": {
"version": "0.2.1",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -5930,7 +5916,6 @@
"node_modules/@react-email/button": {
"version": "0.2.1",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -5941,7 +5926,6 @@
"node_modules/@react-email/code-block": {
"version": "0.2.1",
"license": "MIT",
- "peer": true,
"dependencies": {
"prismjs": "^1.30.0"
},
@@ -5955,7 +5939,6 @@
"node_modules/@react-email/code-inline": {
"version": "0.0.6",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6010,7 +5993,6 @@
"node_modules/@react-email/container": {
"version": "0.0.16",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6041,7 +6023,6 @@
"node_modules/@react-email/heading": {
"version": "0.0.16",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6052,7 +6033,6 @@
"node_modules/@react-email/hr": {
"version": "0.0.12",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6073,7 +6053,6 @@
"node_modules/@react-email/img": {
"version": "0.0.12",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6084,7 +6063,6 @@
"node_modules/@react-email/link": {
"version": "0.0.13",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6108,7 +6086,6 @@
"node_modules/@react-email/preview": {
"version": "0.0.14",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6212,7 +6189,6 @@
"node_modules/@react-email/text": {
"version": "0.1.6",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
},
@@ -6984,7 +6960,6 @@
"node_modules/@rollup/plugin-commonjs/node_modules/picomatch": {
"version": "4.0.3",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -7950,7 +7925,6 @@
"node_modules/@shikijs/types": {
"version": "3.2.1",
"license": "MIT",
- "peer": true,
"dependencies": {
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
@@ -8120,7 +8094,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -8211,7 +8184,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -8352,7 +8324,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -8446,7 +8417,6 @@
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@swc/counter": "^0.1.3",
"@swc/types": "^0.1.25"
@@ -8713,7 +8683,6 @@
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz",
"integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@tanstack/query-core": "5.90.20"
},
@@ -8800,7 +8769,6 @@
"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.18.0.tgz",
"integrity": "sha512-Gczd4GbK1DNgy/QUPElMVozoa0GW9mW8E31VIi7Q4a9PHHz8PcrxPmuWwtJ2q0PF8MWpOSLuBXoQTWaXZRPRnQ==",
"license": "MIT",
- "peer": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
@@ -8962,7 +8930,6 @@
"resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.18.0.tgz",
"integrity": "sha512-8RoI5gW0xBVCsuxahpK8vx7onAw6k2/uR3hbGBBnH+HocDMaAZKot3nTyY546ij8ospIC1mnQ7k4BhVUZesZDQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"prosemirror-changeset": "^2.3.0",
"prosemirror-collab": "^1.3.1",
@@ -9100,6 +9067,7 @@
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
@@ -9110,6 +9078,7 @@
"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
@@ -9183,7 +9152,6 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
"integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -9213,7 +9181,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.10.tgz",
"integrity": "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.2.2"
}
@@ -9221,7 +9188,6 @@
"node_modules/@types/react-dom": {
"version": "19.2.3",
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@types/react": "^19.2.0"
}
@@ -9301,7 +9267,6 @@
"version": "8.50.0",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.50.0",
"@typescript-eslint/types": "8.50.0",
@@ -9893,7 +9858,6 @@
"integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@vitest/utils": "4.0.18",
"fflate": "^0.8.2",
@@ -9929,6 +9893,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
"integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2"
@@ -9938,25 +9903,29 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
"integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
"integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
"integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
"integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.13.2",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -9967,13 +9936,15 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
"integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
"integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -9986,6 +9957,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
"integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
@@ -9995,6 +9967,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
"integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@xtuc/long": "4.2.2"
}
@@ -10003,13 +9976,15 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
"integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
"integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -10026,6 +10001,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
"integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
@@ -10039,6 +10015,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
"integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -10051,6 +10028,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
"integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -10065,6 +10043,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
"integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
@@ -10074,13 +10053,15 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "license": "BSD-3-Clause"
+ "license": "BSD-3-Clause",
+ "peer": true
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "peer": true
},
"node_modules/abort-controller": {
"version": "3.0.0",
@@ -10109,7 +10090,6 @@
"node_modules/acorn": {
"version": "8.15.0",
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -10131,6 +10111,7 @@
"resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
"integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10.13.0"
},
@@ -10618,7 +10599,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -10637,7 +10617,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/call-bind": {
"version": "1.0.8",
@@ -10824,6 +10805,7 @@
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
"integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6.0"
}
@@ -11629,6 +11611,7 @@
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
"integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -11927,7 +11910,6 @@
"version": "9.39.2",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -12099,7 +12081,6 @@
"version": "2.32.0",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.9",
@@ -12378,6 +12359,7 @@
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.8.x"
}
@@ -12859,7 +12841,8 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "license": "BSD-2-Clause"
+ "license": "BSD-2-Clause",
+ "peer": true
},
"node_modules/glob/node_modules/lru-cache": {
"version": "11.1.0",
@@ -13462,7 +13445,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.28.4"
},
@@ -14506,6 +14488,7 @@
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
@@ -14520,6 +14503,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -14534,7 +14518,6 @@
"version": "2.6.1",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"jiti": "lib/jiti-cli.mjs"
}
@@ -14671,7 +14654,6 @@
"integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 10.16.0"
}
@@ -14695,7 +14677,8 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
@@ -14892,6 +14875,7 @@
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
"integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6.11.5"
},
@@ -16056,14 +16040,14 @@
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/next": {
"version": "16.1.6",
"resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz",
"integrity": "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@next/env": "16.1.6",
"@swc/helpers": "0.5.15",
@@ -16626,7 +16610,6 @@
"version": "14.0.2",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20"
}
@@ -17174,7 +17157,6 @@
"node_modules/prosemirror-model": {
"version": "1.25.4",
"license": "MIT",
- "peer": true,
"dependencies": {
"orderedmap": "^2.0.0"
}
@@ -17198,7 +17180,6 @@
"node_modules/prosemirror-state": {
"version": "1.4.4",
"license": "MIT",
- "peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-transform": "^1.0.0",
@@ -17239,7 +17220,6 @@
"node_modules/prosemirror-view": {
"version": "1.41.4",
"license": "MIT",
- "peer": true,
"dependencies": {
"prosemirror-model": "^1.20.0",
"prosemirror-state": "^1.0.0",
@@ -17293,6 +17273,7 @@
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "^5.1.0"
}
@@ -17302,7 +17283,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
"integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -17467,7 +17447,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
"integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -17588,7 +17567,6 @@
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz",
"integrity": "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18.0.0"
},
@@ -17686,6 +17664,7 @@
"resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.4.tgz",
"integrity": "sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==",
"license": "MIT",
+ "peer": true,
"peerDependencies": {
"react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -17804,6 +17783,7 @@
"resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz",
"integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/runtime": "^7.20.13",
"use-composed-ref": "^1.3.0",
@@ -18146,7 +18126,6 @@
"node_modules/rollup": {
"version": "4.54.0",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -18289,7 +18268,8 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/safe-push-apply": {
"version": "1.0.0",
@@ -18339,7 +18319,6 @@
"resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz",
"integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.0.2",
@@ -18375,6 +18354,7 @@
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
"integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
"ajv": "^8.9.0",
@@ -18411,6 +18391,7 @@
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3"
},
@@ -18422,7 +18403,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/selderee": {
"version": "0.11.0",
@@ -18451,6 +18433,7 @@
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"license": "BSD-3-Clause",
+ "peer": true,
"dependencies": {
"randombytes": "^2.1.0"
}
@@ -18833,6 +18816,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"license": "BSD-3-Clause",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -18849,6 +18833,7 @@
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -19287,6 +19272,7 @@
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
"integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
},
@@ -19300,6 +19286,7 @@
"resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
"integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.15.0",
@@ -19318,6 +19305,7 @@
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
"integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
@@ -19351,7 +19339,8 @@
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/tinybench": {
"version": "2.9.0",
@@ -19402,7 +19391,6 @@
"version": "4.0.3",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -19606,6 +19594,7 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
"license": "(MIT OR CC0-1.0)",
+ "peer": true,
"engines": {
"node": ">=16"
},
@@ -19687,7 +19676,6 @@
"version": "0.28.15",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@gerrit0/mini-shiki": "^3.17.0",
"lunr": "^2.3.9",
@@ -19753,7 +19741,6 @@
"node_modules/typescript": {
"version": "5.9.3",
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -20085,6 +20072,7 @@
"resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz",
"integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==",
"license": "MIT",
+ "peer": true,
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
@@ -20099,6 +20087,7 @@
"resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz",
"integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==",
"license": "MIT",
+ "peer": true,
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
@@ -20113,6 +20102,7 @@
"resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz",
"integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"use-isomorphic-layout-effect": "^1.1.1"
},
@@ -20232,7 +20222,6 @@
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
@@ -20810,7 +20799,6 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -20853,7 +20841,6 @@
"integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@vitest/expect": "4.0.18",
"@vitest/mocker": "4.0.18",
@@ -20973,6 +20960,7 @@
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
"integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
@@ -20998,6 +20986,7 @@
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz",
"integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8",
@@ -21060,13 +21049,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
"integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/webpack/node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
@@ -21080,6 +21071,7 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">=4.0"
}
@@ -21369,7 +21361,6 @@
"node_modules/y-protocols": {
"version": "1.0.7",
"license": "MIT",
- "peer": true,
"dependencies": {
"lib0": "^0.2.85"
},
@@ -21467,7 +21458,6 @@
"node_modules/yjs": {
"version": "13.6.28",
"license": "MIT",
- "peer": true,
"dependencies": {
"lib0": "^0.2.99"
},
@@ -21512,7 +21502,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
"integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
diff --git a/src/frontend/package.json b/src/frontend/package.json
index 17d471847..7f274325e 100644
--- a/src/frontend/package.json
+++ b/src/frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "st-messages",
- "version": "0.3.0",
+ "version": "0.4.0",
"private": true,
"type": "module",
"engines": {
diff --git a/src/frontend/public/locales/common/nl-NL.json b/src/frontend/public/locales/common/nl-NL.json
index 22b79cb20..da2c8b06a 100644
--- a/src/frontend/public/locales/common/nl-NL.json
+++ b/src/frontend/public/locales/common/nl-NL.json
@@ -1,6 +1,8 @@
{
"{{count}} attachments_one": "{{count}} bijlage",
"{{count}} attachments_other": "{{count}} bijlagen",
+ "{{count}} attendees_one": "{{count}} deelnemer",
+ "{{count}} attendees_other": "{{count}} deelnemers",
"{{count}} days ago_one": "{{count}} dag geleden",
"{{count}} days ago_other": "{{count}} dagen geleden",
"{{count}} hours ago_one": "{{count}} uur geleden",
@@ -15,12 +17,16 @@
"{{count}} messages have been reported as spam._other": "{{count}} berichten zijn gerapporteerd als spam.",
"{{count}} messages have been updated._one": "Het bericht is bijgewerkt.",
"{{count}} messages have been updated._other": "{{count}} berichten zijn bijgewerkt.",
+ "{{count}} messages imported_one": "{{count}} bericht geïmporteerd",
+ "{{count}} messages imported_other": "{{count}} berichten geïmporteerd",
"{{count}} messages of this thread have been deleted._one": "{{count}} bericht van dit kanaal is verwijderd.",
"{{count}} messages of this thread have been deleted._other": "{{count}} berichten van dit kanaal is verwijderd.",
"{{count}} minutes ago_one": "{{count}} minuut geleden",
"{{count}} minutes ago_other": "{{count}} minuten geleden",
"{{count}} months ago_one": "{{count}} maand geleden",
"{{count}} months ago_other": "{{count}} maanden geleden",
+ "{{count}} occurrences_one": "{{count}} gebeurtenis",
+ "{{count}} occurrences_other": "{{count}} gebeurtenisen",
"{{count}} results_one": "{{count}} resultaat",
"{{count}} results_other": "{{count}} resultaten",
"{{count}} threads have been archived._one": "De thread is gearchiveerd.",
@@ -43,18 +49,24 @@
"{{count}} years ago_other": "{{count}} jaren geleden",
"{{date}} at {{time}}": "{{date}} om {{time}}",
"{{progress}}% imported": "{{progress}}% geïmporteerd",
+ "2 columns": "2 kolommen",
"Abort upload": "Upload Afbreken",
+ "Accepted": "Geaccepteerd",
"Accesses": "Toegang",
"Actions": "Acties",
"Active": "Actief",
+ "Add a contact form widget to your website to receive messages directly in your mailbox.": "Voeg een contactformulier widget toe aan je website om direct berichten in je mailbox te ontvangen.",
"Add a domain": "Domein toevoegen",
"Add a sub-label": "Een sublabel toevoegen",
"Add attachment from {{driveAppName}}": "Bijlage toevoegen van {{driveAppName}}",
"Add attachments": "Bijlage toevoegen",
"Add label": "Label toevoegen",
"Add labels": "Labels toevoegen",
+ "Add tags": "Labels toevoegen",
+ "Add this code snippet to your website to display the feedback widget.": "Voeg deze code snippet toe aan uw website om de feedbackwidget weer te geven.",
"Address": "Adres",
"Addresses": "Adressen",
+ "After creating the widget, you will receive the installation code to add to your website.": "Na het maken van de widget ontvangt u de installatiecode om uw website toe te voegen.",
"All messages": "Alle berichten",
"An address with this prefix already exists in this domain.": "Een adres met dit voorvoegsel bestaat al in dit domein.",
"An archive is uploading": "Een archief wordt geüpload",
@@ -63,17 +75,20 @@
"An error occurred while importing messages.": "Er is een fout opgetreden tijdens het importeren van berichten.",
"An error occurred while loading maildomains.": "Er is een fout opgetreden tijdens het laden van e-maildomeinen.",
"An error occurred while resetting the password.": "Er is een fout opgetreden tijdens het resetten van het wachtwoord.",
+ "An error occurred while saving the integration.": "Er is een fout opgetreden bij het opslaan van de integratie.",
"An error occurred while updating the address.": "Er is een fout opgetreden tijdens het bijwerken van het adres.",
"An error occurred while uploading the archive file.": "Er is een fout opgetreden tijdens het uploaden van het archiefbestand.",
"An unexpected error occurred.": "Er deed zich een onverwachte fout voor.",
"and {{count}} other users_one": "en 1 andere gebruiker",
"and {{count}} other users_other": "en {{count}} andere gebruikers",
+ "API Key": "API Key",
"Archive": "Archief",
"Archive {{count}} threads_one": "Archief {{count}} thread",
"Archive {{count}} threads_other": "Archief {{count}} threads",
"Archives": "Archieven",
"Are you sure you want to close this dialog? Your upload will be aborted!": "Weet u zeker dat u deze dialoog wilt sluiten? Uw upload wordt afgebroken!",
"Are you sure you want to delete this draft? This action cannot be undone.": "Weet u zeker dat u dit concept wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.",
+ "Are you sure you want to delete this integration? This action is irreversible!": "Weet je zeker dat je deze integratie wilt verwijderen? Deze actie is onomkeerbaar!",
"Are you sure you want to delete this label? This action is irreversible!": "Weet je zeker dat je dit label wilt verwijderen? Deze actie is onomkeerbaar!",
"Are you sure you want to delete this mailbox? This action is irreversible!": "Weet u zeker dat u deze mailbox wilt verwijderen? Deze actie is onomkeerbaar!",
"Are you sure you want to delete this signature? This action is irreversible!": "Weet je zeker dat je deze handtekening wilt verwijderen? Deze actie is onomkeerbaar!",
@@ -88,14 +103,21 @@
"Authentication failed. Please check your credentials and ensure you have enabled IMAP connections in your account.": "Verificatie is mislukt. Controleer uw inloggegevens en zorg ervoor dat IMAP-verbindingen in uw account zijn ingeschakeld.",
"Auto-labeling": "Auto-labeling",
"Automatically create mailboxes according to OIDC emails": "Automatisch mailboxen aanmaken volgens OIDC e-mails",
+ "Awaiting response": "In afwachting van antwoord",
"Back": "Terug",
"Back to your inbox": "Terug naar uw inbox",
"BCC: ": "BCC: ",
"Blind copy: ": "Blinde kopie: ",
+ "Calendar invite": "Kalender uitnodiging",
"Cancel": "Annuleren",
+ "Cancel those sendings": "Annuleer de verzendingen",
"Cannot add attachment(s). Total size would be more than {{maxSize}}.": "Kan bijlagen niet toevoegen. Totale grootte zou groter zijn dan {{maxSize}}.",
+ "Cannot add image. File size exceeds the {{maxSize}} limit.": "Kan afbeelding niet toevoegen. Bestandsgrootte overschrijdt de {{maxSize}} limiet.",
+ "CC: ": "CC: ",
"Check DNS again": "Controleer DNS opnieuw",
"Checking DNS records...": "DNS-records controleren...",
+ "Choose the type of integration you want to create": "Kies het type integratie dat u wilt maken",
+ "Clear selected items": "Geselecteerde items wissen",
"Click to add accesses": "Klik om toegang toe te voegen",
"Close": "Sluit",
"Close filters": "Sluit filter",
@@ -105,9 +127,13 @@
"Collapse": "Inklappen",
"Collapse all": "Alles inklappen",
"Color: ": "Kleur: ",
+ "Coming soon": "Binnenkort beschikbaar",
+ "Conflicting": "Conflict",
+ "Contact the Support team": "Neem contact op met onze klantenservice",
"Contains the words": "Bevat de woorden",
"Content is required": "Inhoud is verplicht",
"Copied": "Gekopieerd",
+ "Copied to clipboard": "Kopieer naar klembord",
"Copy": "Kopieer",
"Copy all DNS records": "Kopieer alle DNS records",
"Copy to clipboard": "Kopieer naar klembord",
@@ -116,6 +142,7 @@
"Create": "Creëren",
"Create a Label": "Label aanmaken",
"Create a new address @{{domain}}": "Maak een nieuw adres @{{domain}}",
+ "Create a new integration": "Een nieuwe integratie aanmaken",
"Create a new label": "Nieuw label aanmaken",
"Create a new personal mailbox": "Maak een nieuwe persoonlijke mailbox",
"Create a new shared mailbox": "Maak een nieuwe persoonlijke mailbox",
@@ -123,34 +150,47 @@
"Create a new signature for {{domain}}": "Maak een nieuwe handtekening voor {{domain}}",
"Create a new template": "Maak een nieuwe sjabloon",
"Create a simple redirect (Coming soon)": "Creëer een eenvoudige doorverwijzing (binnenkort beschikbaar)",
+ "Create a Widget": "Maak een widget",
+ "Create integration": "Integratie aanmaken",
"Create the label \"{{label}}\"": "Maak label \"{{label}}\"",
"create_mailbox_modal.success.credential_text": "Uw Messages credentials zijn:\n- E-mail: {{id}}\n- Wachtwoord: {{password}}\n\nHet zal worden gevraagd om uw wachtwoord te wijzigen bij uw eerste aanmelding.",
"Created at": "Gemaakt op",
"Creating...": "Maken...",
"Credentials copied!": "Gegevens gekopieerd!",
"Current status": "Huidige status",
+ "Daily": "Dagelijks",
"Date:": "Datum:",
+ "Date: ": "Datum: ",
+ "Declined": "Afgewezen",
"Default": "Standaard",
"Default signature": "Standaard handtekening",
+ "Delegated": "Overgedragen",
"Delete": "Verwijderen",
"Delete {{count}} threads_one": "Verwijder {{count}} Thread",
"Delete {{count}} threads_other": "Verwijder {{count}} threads",
"Delete draft": "Concept verwijderen",
+ "Delete integration \"{{name}}\"": "Integratie verwijderen \"{{name}}\"",
"Delete label \"{{label}}\"": "Verwijder label \"{{label}}\"",
"Delete mailbox {{mailbox}}": "Verwijder mailbox {{mailbox}}",
"Delete signature \"{{signature}}\"": "Verwijder handtekening \"{{signature}}\"",
"Delete template \"{{template}}\"": "Sjabloon \"{{template}} \" verwijderen",
+ "Delivering": "Leveren",
+ "Delivery cancelled": "Levering geannuleerd",
+ "Delivery failed": "Levering mislukt",
"Description": "Beschrijving",
"Description must be less than 255 characters.": "Beschrijving moet minder dan 255 tekens bevatten.",
"Deselect all threads": "Deselecteer alle threads",
"Deselect thread": "Deselecteer Thread",
"Did you forget an attachment?": "Ben je de bijlage vergeten?",
+ "Disable thread selection": "Thread-selectie uitschakelen",
+ "Display those images": "Deze afbeeldingen weergeven",
"DNS": "DNS",
"Do you have any feedback?": "Heeft u feedback?",
"Domain": "Domein",
"Domain admin": "Domein beheerder",
"Domain not found": "Domein niet gevonden",
"Download": "Download",
+ "Download invitation": "Uitnodiging downloaden",
"Download raw email": "Download raw email",
"Draft": "Concept",
"Draft deleted": "Concept verwijderd",
@@ -159,24 +199,46 @@
"Drafts": "Concepten",
"Drag and drop an archive here": "Sleep een archief hierheen",
"Drop your attachments here": "Plaats uw bijlagen hier",
+ "Duplicate": "Dupliceer",
"Edit": "Bewerken",
"Edit {{mailbox}} address": "Bewerk {{mailbox}} adres",
+ "Edit signature \"{{signature}}\"": "Wijzig handtekening \"{{signature}}\"",
"Edit template \"{{template}}\"": "Sjabloon \"{{template}} \" verwijderen",
+ "Edit Widget": "Widget bewerken",
"Email address": "E-mail adres",
+ "EML, MBOX or PST": "EML, MBOX of PST",
"Enter the email addresses of the recipients separated by commas": "Voer de e-mailadressen in van de geadresseerden gescheiden door komma's",
"Error while checking DNS records": "Fout bij het controleren van DNS records",
"Error while loading addresses": "Fout bij het laden van adressen",
+ "Error while loading integrations": "Fout tijdens het laden van integraties",
"Error while loading signatures": "Fout bij het laden van handtekeningen",
"Error while loading templates": "Fout bij het laden van sjablonen",
+ "Every {{count}} days_one": "Elke {{count}} dagen",
+ "Every {{count}} days_other": "Elke {{count}} dagen",
+ "Every {{count}} months_one": "Elke {{count}} maanden",
+ "Every {{count}} months_other": "Elke {{count}} maanden",
+ "Every {{count}} weeks_one": "Elke {{count}} weken",
+ "Every {{count}} weeks_other": "Elke {{count}} weken",
+ "Every {{count}} years_one": "Elke {{count}} jaar",
+ "Every {{count}} years_other": "Elke {{count}} jaren",
"Expand": "Uitklappen",
"Expand all": "Alles uitklappen",
+ "Failed to delete integration.": "Verwijderen van integratie mislukt.",
+ "Failed to delete signature.": "Verwijderen van handtekening is mislukt.",
"Failed to delete template.": "Verwijderen van sjabloon mislukt.",
+ "Failed to load calendar invite": "Laden agenda-uitnodiging mislukt",
+ "Failed to load signature. Please try again.": "Laden van handtekening mislukt. Probeer het opnieuw.",
+ "Failed to load template. Please try again.": "Laden sjabloon mislukt. Probeer het opnieuw.",
"Failed to refresh summary.": "Vernieuwen samenvatting mislukt.",
+ "Failed to save signature. Please try again.": "Handtekening opslaan mislukt. Probeer het opnieuw.",
"Failed to save template. Please try again.": "Opslaan sjabloon mislukt. Probeer het opnieuw.",
+ "Failed to update signature.": "Bijwerken handtekening mislukt.",
"First name": "Voornaam",
"First name is required.": "Voornaam is vereist.",
"First, we need some information about your old mailbox": "Eerst hebben we wat informatie nodig over je oude mailbox",
"Fold message": "Vouw bericht",
+ "folder.search": "Zoek",
+ "For your security and privacy, external images are not displayed.": "Voor uw veiligheid en privacy worden externe afbeeldingen niet weergegeven.",
"Forced": "Geforceerd",
"Forced signature": "Geforceerde handtekening",
"Forward": "Doorsturen",
@@ -186,10 +248,16 @@
"From: ": "Van: ",
"Full name": "Volledige naam",
"Full name is required.": "Volledige naam is vereist.",
+ "General": "Algemeen",
+ "Generate an API key to send messages programmatically from your applications.": "Genereer een API-sleutel om berichten programmatisch te verzenden vanuit uw applicaties.",
"Generating summary...": "Samenvatting genereren...",
+ "Help center & Support": "Helpcentrum & Ondersteuning",
"How to allow IMAP connections from your account {{name}}?": "Hoe sta ik IMAP verbindingen toe van uw account {{name}}?",
"I confirm that this address corresponds to the real identity of a colleague, and I commit to deactivating it when their position ends.": "Ik bevestig dat dit adres overeenkomt met de werkelijke identiteit van een collega, en ik beloof het te deactiveren zodra hun deelname is beëindigd.",
+ "I have an issue or a feature request": "Ik heb een probleem of een verzoek voor een functie",
"Identity": "Identiteit",
+ "Image + Text": "Afbeelding + tekst",
+ "Image size limit exceeded": "Limiet afbeeldingsgrootte overschreden",
"IMAP port": "IMAP-poort",
"IMAP server": "IMAP-server",
"IMAP server is required.": "IMAP-server is vereist.",
@@ -206,8 +274,18 @@
"Inbox": "Inbox",
"Incorrect": "Onjuist",
"Indicate your old email address and your password.": "Geef uw oude e-mailadres en wachtwoord op.",
+ "Insecure": "Onveilig",
+ "Insert 2 columns": "Insert 2 columns",
+ "Insert image": "Afbeelding toevoegen",
"Insert template": "Sjabloon invoegen",
+ "Installation": "Installatie",
+ "Integration created!": "Integratie gemaakt!",
+ "Integration deleted!": "Integratie verwijderd!",
+ "Integration updated!": "Integratie bijgewerkt!",
+ "Integrations": "Integraties",
"just now": "zojuist",
+ "Label \"{{label}}\" assigned to {{count}} threads._one": "Label \"{{label}}\" toegewezen aan dit gesprek.",
+ "Label \"{{label}}\" assigned to {{count}} threads._other": "Label \"{{label}}\" toegewezen aan {{count}} threads.",
"Label \"{{label}}\" removed from this conversation.": "Label \"{{label}}\" verwijderd uit dit gesprek.",
"Label name": "Label naam",
"Labels": "Labels",
@@ -215,43 +293,67 @@
"Last name is required.": "Achternaam is vereist.",
"Last saved {{relativeTime}}": "Laatst opgeslagen {{relativeTime}}",
"Last update: {{timestamp}}": "Laatst bijgewerkt: {{timestamp}}",
+ "Layout": "Layout",
"less than a minute ago": "minder dan 1 minuut geleden",
"Loading addresses...": "Adressen laden...",
+ "Loading calendar invite...": "Agenda-uitnodiging laden...",
+ "Loading integrations...": "Integraties laden...",
"Loading labels...": "Labels laden...",
"Loading next threads...": "Volgende kanaal laden...",
+ "Loading signature...": "Handtekening laden...",
"Loading signatures...": "Ondertekeningen laden...",
+ "Loading tags...": "Tags laden...",
+ "Loading template...": "Sjabloon laden...",
"Loading templates...": "Sjablonen laden...",
"Loading variables...": "Variabelen laden...",
+ "Loading…": "Laden…",
"Logout": "Uitloggen",
"Mailbox {{mailbox}} has been deleted successfully.": "Mailbox {{mailbox}} is succesvol verwijderd.",
"Mailbox is required.": "Mailbox is vereist.",
"Maildomains management": "Maildomeinen beheer",
"Manage {{entity}} accesses": "{{entity}} toegang beheren",
"Manage accesses": "Beheer toegang",
+ "Mark {{count}} threads as read_one": "Markeer {{count}} discussie als gelezen",
+ "Mark {{count}} threads as read_other": "Markeer {{count}} discussie als gelezen",
+ "Mark {{count}} threads as unread_one": "{{count}} discussie markeren als ongelezen",
+ "Mark {{count}} threads as unread_other": "{{count}} threads markeren als ongelezen",
"Mark all as read": "Alles markeren als gelezen",
"Mark all as unread": "Alles markeren als ongelezen",
"Mark as important": "Markeer als belangrijk",
+ "Mark as read": "Markeren als gelezen",
+ "Mark as read from here": "Markeer als gelezen vanaf hier",
"Mark as unread": "Markeer als gelezen",
"Mark as unread from here": "Markeer als ongelezen vanaf hier",
+ "Message content": "Bericht inhoud",
+ "Message from {referer_domain}": "Bericht van {referer_domain}",
"Message sent successfully": "Bericht succesvol verzonden",
+ "Message templates for {{mailbox}}": "Berichtsjablonen voor {{mailbox}}",
"Messaging": "Berichten",
"Missing": "Ontbreekt",
"Modify": "Wijzig",
+ "Monthly": "Maandelijks",
"More": "Meer",
"More options": "Meer opties",
+ "My message templates": "Bericht sjablonen",
+ "My signatures": "Mijn handtekeningen",
"Name": "Naam",
"Name is required": "Naam is verplicht",
"Name is required.": "Naam is verplicht.",
"Name must be a valid domain name.": "Naam moet een geldige domeinnaam zijn.",
"New address": "Nieuw adres",
"New domain": "Nieuw domein",
+ "New integration": "Nieuwe integratie",
"New message": "Nieuw bericht",
"New signature": "Nieuwe handtekening",
"New template": "Nieuw sjabloon",
"No accesses": "Geen toegangen",
+ "No addresses found": "Er zijn geen adressen gevonden",
"No attachments": "Geen bijlagen",
"No DNS records found": "Geen DNS-records gevonden",
+ "No event found in calendar invite": "Geen afspraak gevonden in agenda uitnodiging",
+ "No integration found": "Geen integratie gevonden",
"No mailbox.": "Geen mailbox.",
+ "No results.": "Geen resultaten.",
"No signature": "Geen handtekening",
"No signatures found": "Geen handtekeningen gevonden",
"No subject": "Geen onderwerp",
@@ -264,98 +366,161 @@
"Or": "Of",
"or drag and drop some files": "of sleep enkele bestanden",
"Other services...": "Andere diensten...",
+ "Outbox": "Postvak UIT",
"Password": "Wachtwoord",
"Password is required.": "Wachtwoord is vereist.",
"Password reset successfully!": "Wachtwoord succesvol gereset!",
"Personal mailbox": "Persoonlijke mailbox",
+ "Personal mailboxes cannot be created when identity synchronization is disabled.": "Persoonlijke mailboxen kunnen niet worden gemaakt wanneer identiteitssynchronisatie is uitgeschakeld.",
"Please enter a valid email address.": "Vul een correct email-adres in.",
"Prefix can only contain letters, numbers, dots, underscores and hyphens.": "Voorvoegsel kan alleen letters, cijfers, punten, onderstrepingstekens en koppeltekens bevatten.",
"Prefix is required.": "Voorvoegsel is vereist.",
+ "Print": "Afdrukken",
"Read": "Lees",
"Read state": "Lees status",
+ "Recurring": "Terugkerend",
"Redirection": "Omleiding",
"Refresh": "Vernieuw",
"Refresh summary": "Samenvatting vernieuwen",
+ "Remove": "Verwijderen",
+ "Remove report": "Rapport verwijderen",
+ "Remove spam report": "Spam rapport verwijderen",
+ "Remove spam report from {{count}} threads_one": "Verwijder spamrapport van {{count}} thread",
+ "Remove spam report from {{count}} threads_other": "Verwijder spamrapport van {{count}} thread",
+ "Remove tag": "Verwijder tag",
"Reply": "Antwoorden",
"Reply all": "Allen beantwoorden",
+ "Report {{count}} threads as spam_one": "Rapporteer {{count}} Thread als spam",
+ "Report {{count}} threads as spam_other": "Rapporteer {{count}} Thread als spam",
+ "Report as spam": "Als spam melden",
"Reset": "Reset",
"Reset password": "Reset wachtwoord",
"Reset password of {{mailbox}}": "Reset wachtwoord van {{mailbox}}",
"Retry": "Opnieuw proberen",
"Save": "Opslaan",
+ "Save changes": "Wijzigingen opslaan",
"Save into your {{driveAppName}}'s workspace": "Sla op in uw {{driveAppName}}'s workspace",
"Saving...": "Opslaan...",
"Search": "Zoek",
"Search a label": "Label zoeken",
+ "Search a tag": "Label zoeken",
"Search in messages...": "Zoeken in berichten...",
+ "See members of this thread ({{count}} members)_one": "Leden van deze thread bekijken ({{count}} leden)",
+ "See members of this thread ({{count}} members)_other": "Leden van deze thread bekijken ({{count}} leden)",
"Select a parent label": "Selecteer een parent label",
+ "Select a thread": "Selecteer een thread",
+ "Select all threads": "Selecteer alle threads",
+ "Select thread": "Selecteer thread",
+ "Select threads": "Selecteer thread",
"Send": "Verstuur",
"Send and archive": "Verstuur en archiveer",
"Send and receive your messages in an instant.": "Verstuur en ontvang uw berichten direct.",
"Send Feedback": "Feedback Versturen",
"Sending message...": "Bericht verzenden...",
"Sent": "Verzonden",
+ "Settings": "Instellingen",
"Share access": "Toegang delen",
"Share the credentials of this mailbox with its user. You must transfer them securely, preferably physically.": "Deel de inloggegevens van deze mailbox met zijn gebruiker. U moet deze veilig overdragen, bij voorkeur fysiek.",
"Share the new credentials to the user.": "Deel de nieuwe inloggegevens met de gebruiker.",
"Share your feedback here...": "Deel hier uw feedback...",
"Shared mailbox": "Gedeelde mailbox",
"Show": "Toon",
+ "Show {{count}} more_one": "Toon {{count}} meer",
+ "Show {{count}} more_other": "Toon {{count}} meer",
"Show embedded message": "Toon ingesloten bericht",
+ "Show less": "Toon minder",
"Show logs": "Toon logs",
+ "Show more": "Toon meer",
"Signature created!": "Handtekening gemaakt!",
"Signature deleted!": "Handtekening verwijderd!",
"Signature updated!": "Handtekening bijgewerkt!",
"Signatures": "Handtekeningen",
+ "Signatures for {{mailbox}}": "Handtekeningen voor {{mailbox}}",
"Simple and intuitive messaging": "Eenvoudige en intuïtieve berichten",
"Simple redirect (Coming soon)": "Eenvoudige doorverwijzing (binnenkort beschikbaar)",
+ "Some messages have not been delivered to all recipients.": "Sommige berichten zijn niet aan alle ontvangers afgeleverd.",
+ "Some recipients have not received this message!": "Sommige ontvangers hebben dit bericht niet ontvangen!",
"Spam": "Spam",
+ "Spam report removed from {{count}} threads._one": "Spam rapport verwijderd uit de thread.",
+ "Spam report removed from {{count}} threads._other": "Spam rapport verwijderd uit {{count}} threads.",
"Start typing...": "Begin met typen...",
"Subject": "Onderwerp",
+ "Subject template": "Onderwerp sjabloon",
+ "Subject template is required.": "Onderwerp sjabloon is vereist.",
"Subject:": "Onderwerp:",
"Subject: ": "Onderwerp: ",
"Summarize": "Vat samen",
"Summary": "Samenvatting",
"Summary refreshed!": "Samenvatting vernieuwd!",
"Synchronize mailboxes with an identity provider": "Synchroniseer mailboxen met een identiteitsprovider",
+ "Tags": "Tags",
"Target": "Target",
"Target email": "Target email",
"Template created!": "Sjabloon aangemaakt!",
"Template deleted!": "Sjabloon verwijderd!",
"Template updated!": "Template bijgewerkt!",
"Temporary password": "Tijdelijk wachtwoord",
+ "Tentative": "Voorlopig",
"Thank you for your feedback!": "Bedankt voor je feedback!",
"The address has been updated!": "Het adres is bijgewerkt!",
+ "The default signature will be automatically loaded when composing a new message.": "De standaard handtekening wordt automatisch geladen bij het opstellen van een nieuw bericht.",
"The domain {{domain}} has been created successfully.": "Het domein {{domain}} is succesvol aangemaakt.",
"The email {{email}} is invalid.": "De e-mail {{email}} is ongeldig.",
"The email address is invalid.": "Het e-mailadres is ongeldig.",
"The forced signature will be the only one usable for new messages.": "De gedwongen handtekening is de enige die bruikbaar is voor nieuwe berichten.",
"The message could not be sent.": "Het bericht kon niet worden verzonden.",
"The message could not be sent. Please try again later.": "Het bericht kon niet worden verzonden. Probeer het later opnieuw.",
+ "The personal mailbox {{mailboxAddress}} has been created successfully.": "De persoonlijke mailbox <1>{{mailboxAddress}}1> is succesvol gemaakt.",
+ "The redirect mailbox {{mailboxAddress}} has been created successfully.": "De redirect mailbox <1>{{mailboxAddress}}1> is succesvol gemaakt.",
+ "The shared mailbox {{mailboxAddress}} has been created successfully.": "De gedeelde mailbox <1>{{mailboxAddress}}1> is succesvol gemaakt.",
"The upload failed. Please try again.": "Upload mislukt, probeer het opnieuw.",
"These DNS records must be configured on the domain {{domain}} for the mail system to work properly. If you don't know how to update them, please contact your technical service provider or system administrator.": "Deze DNS-records moeten op het domein {{domain}} worden geconfigureerd om het mailsysteem naar behoren te laten werken. Als u niet weet hoe u deze kunt updaten, neem dan contact op met uw technische serviceprovider of systeembeheerder.",
+ "These tags will be automatically applied to every incoming message from the widget.": "Deze tags worden automatisch toegepast op elk inkomend bericht vanuit de widget.",
"This action cannot be undone and the user will need the new password to access its mailbox.": "Deze actie kan niet ongedaan worden gemaakt en de gebruiker heeft het nieuwe wachtwoord nodig om toegang te krijgen tot de mailbox.",
"This contact's identity could not be verified. Proceed with caution.": "De identiteit van deze contactpersoon kon niet worden geverifieerd. Wees voorzichtig.",
"This description will be used by the AI to automatically assign this label to your messages.": "Deze beschrijving wordt gebruikt door de AI om dit label automatisch aan je berichten toe te wijzen.",
+ "This email prefix is not allowed for personal mailboxes. Please choose a different prefix.": "Dit emailvoorvoegsel is niet toegestaan voor persoonlijke mailboxen. Kies een andere voorvoegsel.",
+ "This event has been cancelled": "Deze afspraak is geannuleerd",
+ "This is the only admin of this mailbox, you cannot therefore modify its access.": "Dit is de enige admin van deze mailbox, u kunt daarom de toegang niet wijzigen.",
+ "This message has {{count}} attachments_one": "Deze e-mail heeft een bijlage",
+ "This message has {{count}} attachments_other": "Dit bericht heeft {{count}} bijlagen",
+ "This message has a draft": "Dit bericht heeft een concept",
"This message has been deleted.": "Dit bericht is verwijderd.",
"This message has not been delivered.": "Dit bericht is niet afgeleverd.",
+ "This message has not been delivered. You cancelled the delivery.": "Dit bericht is niet verzonden. Je hebt de levering geannuleerd.",
+ "This message has not yet been delivered to all recipients.": "Dit bericht is nog niet aan alle ontvangers afgeleverd.",
"This message is being delivered.": "Dit bericht wordt verstuurd.",
+ "This name is for internal use only and will not be visible to users.": "Deze naam is alleen voor intern gebruik en is niet zichtbaar voor gebruikers.",
"This signature is forced": "Deze handtekening is geforceerd",
+ "This thread has been reported as spam.": "Deze discussie is gerapporteerd als spam.",
+ "This thread has been reported as spam. For your security, downloading attachments has been disabled.": "Deze discussie is gemeld als spam. Voor je veiligheid is het downloaden van bijlagen uitgeschakeld.",
+ "Those message templates are linked to the mailbox \"{{mailbox}}\". In case of a shared mailbox, all other mailbox users will be able to use them.": "Deze berichtsjablonen zijn gekoppeld aan de mailbox \"{{mailbox}}\". In het geval van een gedeeld postvak, kunnen alle andere mailbox gebruikers deze gebruiken.",
+ "Those signatures are linked to the mailbox \"{{mailbox}}\". In case of a shared mailbox, all other mailbox users will be able to use them.": "Die handtekeningen zijn gekoppeld aan de mailbox \"{{mailbox}}\". In het geval van een gedeeld postvak, kunnen alle andere mailbox gebruikers deze gebruiken.",
"Thread access removed": "Kanaal toegang verwijderd",
"To": "Aan",
"To be able to import emails from an IMAP server, you may need to allow IMAP access on your account.": "Om e-mails van een IMAP-server te kunnen importeren, moet je mogelijk IMAP-toegang op je account toestaan.",
"To:": "Aan:",
"To: ": "Aan: ",
+ "Today": "Vandaag",
"Trash": "Prullenbak",
+ "Try again": "Opnieuw proberen",
+ "Tutorials and training": "Tutorials en training",
"Type": "Type",
"Unable to copy credentials.": "Kan de inloggegevens niet kopiëren.",
+ "Unable to copy to clipboard.": "Kan niet kopiëren naar Klembord.",
"Unarchive": "Dearchiveren",
+ "Unarchive {{count}} threads_one": "Dearchiveer {{count}} Thread",
+ "Unarchive {{count}} threads_other": "Dearchiveer {{count}} threads",
"Undelete": "Terugzetten",
+ "Undelete {{count}} threads_one": "Herstel {{count}} discussie",
+ "Undelete {{count}} threads_other": "Herstel {{count}} threads",
"Undo": "Annuleren",
"Unfold message": "Bericht uitvouwen",
"Unknown": "Onbekend",
"Unknown user": "Onbekende gebruiker",
"Unread": "Ongelezen",
+ "Unsaved changes": "Niet-opgeslagen wijzigingen",
+ "until {{date}}": "tot {{date}}",
"Update": "Bijwerken",
"Update a Label": "Update een Label",
"Updated at": "Bijgewerkt op",
@@ -363,17 +528,28 @@
"Uploading your archive": "Je archief wordt geüpload",
"Uploading... {{progress}}%": "Uploaden... {{progress}}%",
"Use \"Send and archive\" by default": "Gebruik standaard \"Verstuur en archiveer\"",
+ "Use {referer_domain} to include the website domain in the subject.": "Gebruik {referer_domain} om het website-domein in het onderwerp op te nemen.",
"Use SSL": "Gebruik SSL",
"Value": "Waarde",
"Variables": "Variabelen",
+ "View full documentation": "Bekijk de volledige documentatie",
+ "Visit the Help center": "Bezoek het helpcentrum",
+ "Website Widget": "Websitewidget",
+ "Weekly": "Wekelijks",
"While the signature is disabled, it will not be available to the users.": "Terwijl handtekening is uitgeschakeld, is niet beschikbaar voor de gebruikers.",
+ "Widget": "Widget",
+ "Yearly": "Jaarlijks",
+ "Yesterday": "Gisteren",
"You": "Jij",
"You are the last editor of this thread, you cannot therefore modify your access.": "U bent de laatste redacteur van dit kanaal, daarom kunt u uw toegang niet aanpassen.",
"You can close this window and continue using the app.": "Je kunt dit venster sluiten en de app blijven gebruiken.",
"You can now inform the person that their mailbox is ready to be used and communicate the instructions for authentication.": "U kunt de persoon nu informeren dat hun mailbox klaar is om te worden gebruikt en de instructies voor authenticatie communiceren.",
"You cannot delete the last editor of this thread": "U kunt de laatste bewerker van dit kanaal niet verwijderen",
"You cannot modify it.": "Je kunt het niet wijzigen.",
+ "You have {{count}} recipients, which exceeds the maximum of {{max}} recipients per message. The message cannot be sent until you reduce the number of recipients._one": "U heeft {{count}} ontvanger, wat hoger is dan het maximum van {{max}} ontvangers per bericht. Het bericht kan niet worden verzonden totdat u het aantal ontvangers vermindert.",
+ "You have {{count}} recipients, which exceeds the maximum of {{max}} recipients per message. The message cannot be sent until you reduce the number of recipients._other": "U heeft {{count}} ontvangers, die het maximum van {{max}} ontvangers per bericht overschrijden. Het bericht kan niet worden verzonden totdat u het aantal ontvangers vermindert.",
"You have aborted the upload.": "Je hebt het uploaden afgebroken.",
+ "You have unsaved changes. Are you sure you want to close?": "Je hebt niet-opgeslagen wijzigingen. Weet je zeker dat je wil annuleren?",
"You must confirm this statement.": "U moet deze verklaring bevestigen.",
"Your email...": "Jouw email...",
"Your messages have been imported successfully!": "Je berichten zijn succesvol geïmporteerd!",
diff --git a/src/frontend/public/locales/common/ru-RU.json b/src/frontend/public/locales/common/ru-RU.json
index d2cabfbd1..087a7a113 100644
--- a/src/frontend/public/locales/common/ru-RU.json
+++ b/src/frontend/public/locales/common/ru-RU.json
@@ -29,6 +29,8 @@
"{{count}} occurrences_other": "{{count}} событий",
"{{count}} results_one": "{{count}} результат",
"{{count}} results_other": "Результатов: {{count}}",
+ "{{count}} selected threads_one": "Выбрано обсуждений: {{count}}",
+ "{{count}} selected threads_other": "Выбрано обсуждений: {{count}}",
"{{count}} threads have been archived._one": "Обсуждение архивировано.",
"{{count}} threads have been archived._other": "Обсуждения архивированы ({{count}}).",
"{{count}} threads have been deleted._one": "Обсуждение было удалено.",
@@ -418,6 +420,7 @@
"Send Feedback": "Отправить отзыв",
"Sending message...": "Отправка сообщения...",
"Sent": "Отправлено",
+ "Sent by {{name}}": "Отправитель: {{name}}",
"Settings": "Настройки",
"Share access": "Совместный доступ",
"Share the credentials of this mailbox with its user. You must transfer them securely, preferably physically.": "Поделитесь данными этого почтового ящика с его пользователем. Вы должны их безопасно передать, желательно это сделать физически.",
@@ -438,6 +441,7 @@
"Signatures for {{mailbox}}": "Подписи для {{mailbox}}",
"Simple and intuitive messaging": "Простой и интуитивный обмен сообщениями",
"Simple redirect (Coming soon)": "Простая переадресация (скоро)",
+ "Skip to main content": "Перейти к основному содержимому",
"Some messages have not been delivered to all recipients.": "Некоторые сообщения не были доставлены всем получателям.",
"Some recipients have not received this message!": "Некоторые получатели не получили это сообщение!",
"Spam": "Спам",
diff --git a/src/frontend/public/locales/common/uk-UA.json b/src/frontend/public/locales/common/uk-UA.json
index 0a10360a4..172cef378 100644
--- a/src/frontend/public/locales/common/uk-UA.json
+++ b/src/frontend/public/locales/common/uk-UA.json
@@ -29,6 +29,8 @@
"{{count}} occurrences_other": "{{count}} подій",
"{{count}} results_one": "{{count}} результат",
"{{count}} results_other": "{{count}} результатів",
+ "{{count}} selected threads_one": "Обрано обговорень: {{count}}",
+ "{{count}} selected threads_other": "Обрано обговорень: {{count}}",
"{{count}} threads have been archived._one": "Обговорення архівовано.",
"{{count}} threads have been archived._other": "Обговорення архівовано ({{count}}).",
"{{count}} threads have been deleted._one": "Обговорення видалено.",
@@ -418,6 +420,7 @@
"Send Feedback": "Надіслати відгук",
"Sending message...": "Відправлення повідомлення...",
"Sent": "Надіслані",
+ "Sent by {{name}}": "Відправник: {{name}}",
"Settings": "Налаштування",
"Share access": "Поділитись доступом",
"Share the credentials of this mailbox with its user. You must transfer them securely, preferably physically.": "Поділіться обліковими даними цієї поштової скриньки з її користувачем. Потрібно безпечно передати їх, бажано фізично.",
@@ -438,6 +441,7 @@
"Signatures for {{mailbox}}": "Підписи для {{mailbox}}",
"Simple and intuitive messaging": "Просте та інтуїтивне листування",
"Simple redirect (Coming soon)": "Просте перенаправлення (скоро)",
+ "Skip to main content": "Перейти до основного вмісту",
"Some messages have not been delivered to all recipients.": "Деякі повідомлення не були доставлені усім отримувачам.",
"Some recipients have not received this message!": "Деякі отримувачі не отримали цього повідомлення!",
"Spam": "Спам",
diff --git a/src/mta-in/pyproject.toml b/src/mta-in/pyproject.toml
index bf5dbbbcf..b222295b4 100644
--- a/src/mta-in/pyproject.toml
+++ b/src/mta-in/pyproject.toml
@@ -7,7 +7,7 @@ build-backend = "uv_build"
[project]
name = "st-messages-mta-in"
-version = "0.3.0"
+version = "0.4.0"
authors = [{ "name" = "ANCT", "email" = "suiteterritoriale@anct.gouv.fr" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
diff --git a/src/mta-in/uv.lock b/src/mta-in/uv.lock
index 396eb958f..b9ab15db7 100644
--- a/src/mta-in/uv.lock
+++ b/src/mta-in/uv.lock
@@ -438,7 +438,7 @@ wheels = [
[[package]]
name = "st-messages-mta-in"
-version = "0.3.0"
+version = "0.4.0"
source = { editable = "." }
dependencies = [
{ name = "pyjwt" },
diff --git a/src/mta-out/pyproject.toml b/src/mta-out/pyproject.toml
index aceee4e2a..da6293b97 100644
--- a/src/mta-out/pyproject.toml
+++ b/src/mta-out/pyproject.toml
@@ -7,7 +7,7 @@ build-backend = "uv_build"
[project]
name = "st-messages-mta-out"
-version = "0.3.0"
+version = "0.4.0"
authors = [{ "name" = "ANCT", "email" = "suiteterritoriale@anct.gouv.fr" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
diff --git a/src/mta-out/uv.lock b/src/mta-out/uv.lock
index 234bd5bfd..ed9a9681d 100644
--- a/src/mta-out/uv.lock
+++ b/src/mta-out/uv.lock
@@ -527,7 +527,7 @@ wheels = [
[[package]]
name = "st-messages-mta-out"
-version = "0.3.0"
+version = "0.4.0"
source = { editable = "." }
dependencies = [
{ name = "jinja2" },