Compare commits

...

9 Commits

Author SHA1 Message Date
Henry
d3687cfb10 fix: API key authentication and REST handler errors 2026-03-18 22:46:30 +00:00
hjball
0b45ceff7f chore: update translations 2026-03-16 14:32:37 +00:00
Henry
76b2c58461 fix: security improvements to checklist input (#444)
* feat: sanitize input for checklists

* feat: add basic editor

* feat: use plain text editor for checklist items

* feat: remove key from user response
2026-03-16 14:31:13 +00:00
Henry
b8d1fe230d fix: prevent empty string from throwing error 2026-03-13 23:08:46 +00:00
hjball
bd652ba6c9 chore: update translations 2026-03-13 22:59:04 +00:00
Henry
1fb56aafd0 feat: add logger package to improve observability (#437)
* feat: add logger package to improve observability

* chore: add LOG_LEVEL to docker compose and readme
2026-03-13 22:57:47 +00:00
hjball
91deaca6ec chore: compile translations 2026-03-13 22:45:15 +00:00
hjball
ab81db0f56 chore: update translations 2026-03-13 22:45:11 +00:00
Andy Clemenko
29080fa851 Fontsize PR for Issue #429 (#430)
* adding font size

* removing trash

* moving font menu

* chore: revert port change in compose

---------

Co-authored-by: Henry <henry_ball@hotmail.co.uk>
2026-03-13 22:43:50 +00:00
63 changed files with 1427 additions and 492 deletions

View File

@@ -51,6 +51,9 @@ TRELLO_APP_SECRET=
# If not provided, rate limiting will use in-memory storage # If not provided, rate limiting will use in-memory storage
REDIS_URL= # e.g. redis://default:your_password@your_host:6379 REDIS_URL= # e.g. redis://default:your_password@your_host:6379
# Logging (optional - debug, info, warn, error; defaults to debug in dev, info in prod)
LOG_LEVEL=
# OAuth providers (optional) # OAuth providers (optional)
BETTER_AUTH_TRUSTED_ORIGINS= BETTER_AUTH_TRUSTED_ORIGINS=
# Optional: Restrict OIDC/Social sign-ins to specific email domains (comma-separated) # Optional: Restrict OIDC/Social sign-ins to specific email domains (comma-separated)

2
.gitignore vendored
View File

@@ -54,3 +54,5 @@ i18n.cache
# pgdata # pgdata
/apps/web/pgdata /apps/web/pgdata
.claude

View File

@@ -185,9 +185,17 @@ Use `assertUserInWorkspace` helper for workspace checks.
- Use TRPCError with appropriate codes (UNAUTHORIZED, NOT_FOUND, etc.) - Use TRPCError with appropriate codes (UNAUTHORIZED, NOT_FOUND, etc.)
- Provide user-friendly error messages - Provide user-friendly error messages
- Log errors appropriately - Log errors appropriately using the `@kan/logger` package
- Show popup notifications for user-facing errors - Show popup notifications for user-facing errors
### Logging
- Import from `@kan/logger`: `import { createLogger } from "@kan/logger"`
- Create a module-scoped logger: `const logger = createLogger("module-name")`
- Log level is controlled by `LOG_LEVEL` env var (debug, info, warn, error)
- Defaults to `debug` in development, `info` in production
- Never use `console.log` — always use the logger
## Common Patterns ## Common Patterns
### Creating a Card ### Creating a Card
@@ -219,6 +227,16 @@ Use `assertUserInWorkspace` helper for workspace checks.
5. **Frontend**: Add UI components in `apps/web/src/` 5. **Frontend**: Add UI components in `apps/web/src/`
6. **i18n**: Add translations for new strings 6. **i18n**: Add translations for new strings
## Adding a New Environment Variable
Update all of the following:
1. `.env.example` — add the variable with an empty value and a comment explaining it
2. `turbo.json` — add to `globalEnv` (or `globalPassThroughEnv` for CI/platform vars)
3. `docker-compose.yml` — add to the `web` service `environment` section
4. `cloud/docker-compose.yml` — add to the `web` service `environment` section
5. `README.md` — add a row to the Environment Variables table
## Database Changes ## Database Changes
- Always create migrations (never modify existing migrations) - Always create migrations (never modify existing migrations)

View File

@@ -213,6 +213,7 @@ pnpm dev
| `NEXT_PUBLIC_DISABLE_SIGN_UP` | Disable sign up | For authentication | `false` | | `NEXT_PUBLIC_DISABLE_SIGN_UP` | Disable sign up | For authentication | `false` |
| `NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY` | Hide “Powered by kan.bn” on public boards (self-host) | For white labelling | `true` | | `NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY` | Hide “Powered by kan.bn” on public boards (self-host) | For white labelling | `true` |
| `KAN_ADMIN_API_KEY` | Admin API key for stats and admin endpoints | For admin/monitoring | `your-secret-admin-key` | | `KAN_ADMIN_API_KEY` | Admin API key for stats and admin endpoints | For admin/monitoring | `your-secret-admin-key` |
| `LOG_LEVEL` | Log verbosity level (debug, info, warn, error) | No (defaults to debug in dev, info in prod) | `info` |
See `.env.example` for a complete list of supported environment variables. See `.env.example` for a complete list of supported environment variables.

View File

@@ -11,10 +11,10 @@ https://kan.bn/api/v1
## Authentication ## Authentication
Most endpoints require authentication using your API key. You can create one in the [settings page](https://kan.bn/settings) of your account. Include this key in the `x-api-key` header of each request. Most endpoints require authentication using your API key. You can create one in the [settings page](https://kan.bn/settings) of your account. Include this key as a Bearer token in the `Authorization` header of each request.
``` ```
'x-api-key': kan_123456789 'Authorization': 'Bearer kan_123456789'
``` ```
## Response codes ## Response codes

View File

@@ -550,6 +550,9 @@ checksums:
VhMDMg/origin/2/0: 0627e0040ca4939c9a57349e98c51797 VhMDMg/origin/2/0: 0627e0040ca4939c9a57349e98c51797
VhMDMg/origin/3/0: 0627e0040ca4939c9a57349e98c51797 VhMDMg/origin/3/0: 0627e0040ca4939c9a57349e98c51797
VhMDMg/translation: a552fc5c4189ebc3e2e6018edda7d18f VhMDMg/translation: a552fc5c4189ebc3e2e6018edda7d18f
fzGyWs/translation: 25dbbca7a83f6af119179e7a56c953d4
fzGyWs/message: 25dbbca7a83f6af119179e7a56c953d4
fzGyWs/origin/0/0: 627b72cd19a7154ae1c28cbd7ca0c730
yD3ZSw/message: 293d49fc3c75e9c425b64bd7126e6b46 yD3ZSw/message: 293d49fc3c75e9c425b64bd7126e6b46
yD3ZSw/origin/0/0: 627b72cd19a7154ae1c28cbd7ca0c730 yD3ZSw/origin/0/0: 627b72cd19a7154ae1c28cbd7ca0c730
yD3ZSw/translation: 293d49fc3c75e9c425b64bd7126e6b46 yD3ZSw/translation: 293d49fc3c75e9c425b64bd7126e6b46
@@ -1167,6 +1170,9 @@ checksums:
l31EoQ/message: b4c05c9174637f4da2a41ead0d65bc01 l31EoQ/message: b4c05c9174637f4da2a41ead0d65bc01
l31EoQ/origin/0/0: 4980d8e27a628e7cd9a70b839d844083 l31EoQ/origin/0/0: 4980d8e27a628e7cd9a70b839d844083
l31EoQ/translation: b4c05c9174637f4da2a41ead0d65bc01 l31EoQ/translation: b4c05c9174637f4da2a41ead0d65bc01
q3il6U/translation: 79a4fffd70bfbedb6174ea4c767f4ab9
q3il6U/message: 79a4fffd70bfbedb6174ea4c767f4ab9
q3il6U/origin/0/0: 627b72cd19a7154ae1c28cbd7ca0c730
"%2B3TYXa/message": 9fa1c942feb40d6350322b71561df789 "%2B3TYXa/message": 9fa1c942feb40d6350322b71561df789
"%2B3TYXa/origin/0/0": 4980d8e27a628e7cd9a70b839d844083 "%2B3TYXa/origin/0/0": 4980d8e27a628e7cd9a70b839d844083
"%2B3TYXa/translation": 9fa1c942feb40d6350322b71561df789 "%2B3TYXa/translation": 9fa1c942feb40d6350322b71561df789
@@ -1433,6 +1439,9 @@ checksums:
vXIe7J/message: 277fd1a41cc237a437cd1d5e4a80463b vXIe7J/message: 277fd1a41cc237a437cd1d5e4a80463b
vXIe7J/origin/0/0: 627b72cd19a7154ae1c28cbd7ca0c730 vXIe7J/origin/0/0: 627b72cd19a7154ae1c28cbd7ca0c730
vXIe7J/translation: 277fd1a41cc237a437cd1d5e4a80463b vXIe7J/translation: 277fd1a41cc237a437cd1d5e4a80463b
k7rCa%2F/translation: 890b7851af05f97ac53644e4154c13b4
k7rCa%2F/message: 890b7851af05f97ac53644e4154c13b4
k7rCa%2F/origin/0/0: 3de48fb04f7df9bdbe399911cdb3fe86
8Is1ih/message: 624592ba2ecf647a3fe60d493c1ee71a 8Is1ih/message: 624592ba2ecf647a3fe60d493c1ee71a
8Is1ih/origin/0/0: ff4a160eca5f8da4f075fd1dd6061fa6 8Is1ih/origin/0/0: ff4a160eca5f8da4f075fd1dd6061fa6
8Is1ih/origin/1/0: fadd5a5b6963ec5f261072f7e8d2140b 8Is1ih/origin/1/0: fadd5a5b6963ec5f261072f7e8d2140b
@@ -1514,6 +1523,9 @@ checksums:
jl3aEJ/placeholders/0/0: 06f23520ebabfffed4999b5bcf61c9cd jl3aEJ/placeholders/0/0: 06f23520ebabfffed4999b5bcf61c9cd
jl3aEJ/origin/0/0: 1d6b5f88cdad160a67842f6b65387448 jl3aEJ/origin/0/0: 1d6b5f88cdad160a67842f6b65387448
jl3aEJ/translation: 4c38799ff25321ea25017bf4cd8e2e4f jl3aEJ/translation: 4c38799ff25321ea25017bf4cd8e2e4f
agPptk/translation: 43983f2178fb28aacaef6c5f41282c4a
agPptk/message: 43983f2178fb28aacaef6c5f41282c4a
agPptk/origin/0/0: 3de48fb04f7df9bdbe399911cdb3fe86
W%2FElkg/message: 1f527cd6d1ed602930bcaa303f503b51 W%2FElkg/message: 1f527cd6d1ed602930bcaa303f503b51
W%2FElkg/origin/0/0: eb63312c63f6c8d2a5b6520c89012123 W%2FElkg/origin/0/0: eb63312c63f6c8d2a5b6520c89012123
W%2FElkg/translation: 1f527cd6d1ed602930bcaa303f503b51 W%2FElkg/translation: 1f527cd6d1ed602930bcaa303f503b51
@@ -1537,9 +1549,9 @@ checksums:
"%2FbZzdR/message": 40ea106c56d79634e058e087ad322025 "%2FbZzdR/message": 40ea106c56d79634e058e087ad322025
"%2FbZzdR/origin/0/0": c0b59968b2b234167c488a05cc38710b "%2FbZzdR/origin/0/0": c0b59968b2b234167c488a05cc38710b
"%2FbZzdR/translation": 40ea106c56d79634e058e087ad322025 "%2FbZzdR/translation": 40ea106c56d79634e058e087ad322025
hty0d5/translation: b4b1c8396e445e8b7956c747da2cf601
hty0d5/message: b4b1c8396e445e8b7956c747da2cf601 hty0d5/message: b4b1c8396e445e8b7956c747da2cf601
hty0d5/origin/0/0: 04c86ea96f180745739d59e822da4026 hty0d5/origin/0/0: 04c86ea96f180745739d59e822da4026
hty0d5/translation: b4b1c8396e445e8b7956c747da2cf601
"%2B8Nek%2F/message": 818f1192e32bb855597f930d3e78806e "%2B8Nek%2F/message": 818f1192e32bb855597f930d3e78806e
"%2B8Nek%2F/origin/0/0": 9737a9cef0646ff4bbd942b1924b9a2c "%2B8Nek%2F/origin/0/0": 9737a9cef0646ff4bbd942b1924b9a2c
"%2B8Nek%2F/origin/1/0": 82a5cf8d69f098641eb357bf102cd504 "%2B8Nek%2F/origin/1/0": 82a5cf8d69f098641eb357bf102cd504
@@ -2013,9 +2025,9 @@ checksums:
YEOVrT/message: 86b76024524fc585b2c3950126ef6f62 YEOVrT/message: 86b76024524fc585b2c3950126ef6f62
YEOVrT/origin/0/0: fadd5a5b6963ec5f261072f7e8d2140b YEOVrT/origin/0/0: fadd5a5b6963ec5f261072f7e8d2140b
YEOVrT/translation: 86b76024524fc585b2c3950126ef6f62 YEOVrT/translation: 86b76024524fc585b2c3950126ef6f62
"%2B5kO8P/translation": 77b65adf8ae2b69eaed51b6104ded65e
"%2B5kO8P/message": 77b65adf8ae2b69eaed51b6104ded65e "%2B5kO8P/message": 77b65adf8ae2b69eaed51b6104ded65e
"%2B5kO8P/origin/0/0": 04c86ea96f180745739d59e822da4026 "%2B5kO8P/origin/0/0": 04c86ea96f180745739d59e822da4026
"%2B5kO8P/translation": 77b65adf8ae2b69eaed51b6104ded65e
tfDRzk/message: f7a2929f33bc420195e59ac5a8bcd454 tfDRzk/message: f7a2929f33bc420195e59ac5a8bcd454
tfDRzk/origin/0/0: a50c4fbde8da6e0a77c4e0aef0b44dea tfDRzk/origin/0/0: a50c4fbde8da6e0a77c4e0aef0b44dea
tfDRzk/origin/1/0: b2059fa4b8b99cc10440da26475b234c tfDRzk/origin/1/0: b2059fa4b8b99cc10440da26475b234c
@@ -2139,6 +2151,9 @@ checksums:
zEcnBA/message: 513c3b4d9f0fda60fe079d42dcbd3882 zEcnBA/message: 513c3b4d9f0fda60fe079d42dcbd3882
zEcnBA/origin/0/0: c0b59968b2b234167c488a05cc38710b zEcnBA/origin/0/0: c0b59968b2b234167c488a05cc38710b
zEcnBA/translation: 513c3b4d9f0fda60fe079d42dcbd3882 zEcnBA/translation: 513c3b4d9f0fda60fe079d42dcbd3882
4Revpc/translation: 3adb3ae7891c5736776df840cff2360b
4Revpc/message: 3adb3ae7891c5736776df840cff2360b
4Revpc/origin/0/0: 3de48fb04f7df9bdbe399911cdb3fe86
"%2B%2BrVAm/message": 2227508afb0d38a027e323207e47d4a2 "%2B%2BrVAm/message": 2227508afb0d38a027e323207e47d4a2
"%2B%2BrVAm/origin/0/0": eb63312c63f6c8d2a5b6520c89012123 "%2B%2BrVAm/origin/0/0": eb63312c63f6c8d2a5b6520c89012123
"%2B%2BrVAm/translation": 2227508afb0d38a027e323207e47d4a2 "%2B%2BrVAm/translation": 2227508afb0d38a027e323207e47d4a2
@@ -2168,9 +2183,9 @@ checksums:
zzDlyQ/origin/0/0: d96af8a06c2e38a72238bcd16e426859 zzDlyQ/origin/0/0: d96af8a06c2e38a72238bcd16e426859
zzDlyQ/origin/1/0: d96af8a06c2e38a72238bcd16e426859 zzDlyQ/origin/1/0: d96af8a06c2e38a72238bcd16e426859
zzDlyQ/translation: c43827becada6750f7a25890905f38b9 zzDlyQ/translation: c43827becada6750f7a25890905f38b9
DBC3t5/translation: d21934fb36dd8a82e36352968207d44e
DBC3t5/message: d21934fb36dd8a82e36352968207d44e DBC3t5/message: d21934fb36dd8a82e36352968207d44e
DBC3t5/origin/0/0: 04c86ea96f180745739d59e822da4026 DBC3t5/origin/0/0: 04c86ea96f180745739d59e822da4026
DBC3t5/translation: d21934fb36dd8a82e36352968207d44e
uZg2%2Bw/message: 21af8119141afcce5f12da489f34db6a uZg2%2Bw/message: 21af8119141afcce5f12da489f34db6a
uZg2%2Bw/origin/0/0: dbad0c8d7863cb41f5495264f82e7081 uZg2%2Bw/origin/0/0: dbad0c8d7863cb41f5495264f82e7081
uZg2%2Bw/translation: 21af8119141afcce5f12da489f34db6a uZg2%2Bw/translation: 21af8119141afcce5f12da489f34db6a
@@ -2626,9 +2641,9 @@ checksums:
v1kQyJ/origin/0/0: 77c9f6139024b2069e4fdc5120f69cb5 v1kQyJ/origin/0/0: 77c9f6139024b2069e4fdc5120f69cb5
v1kQyJ/origin/1/0: 566b5982085ae649b2be0c614f666591 v1kQyJ/origin/1/0: 566b5982085ae649b2be0c614f666591
v1kQyJ/translation: 0329bc102d3ab3c73410d126e119de12 v1kQyJ/translation: 0329bc102d3ab3c73410d126e119de12
xLTZVf/translation: ce928c74255344905f5c3f02f44c991e
xLTZVf/message: ce928c74255344905f5c3f02f44c991e xLTZVf/message: ce928c74255344905f5c3f02f44c991e
xLTZVf/origin/0/0: 5f6c4a0c9be5098099167871ae1564af xLTZVf/origin/0/0: 5f6c4a0c9be5098099167871ae1564af
xLTZVf/translation: ce928c74255344905f5c3f02f44c991e
9eF5oV/message: 4928884739ba559e6e4b960e80fe1452 9eF5oV/message: 4928884739ba559e6e4b960e80fe1452
9eF5oV/origin/0/0: 4a1be3707d14c696a16f453d132fb248 9eF5oV/origin/0/0: 4a1be3707d14c696a16f453d132fb248
9eF5oV/translation: 4928884739ba559e6e4b960e80fe1452 9eF5oV/translation: 4928884739ba559e6e4b960e80fe1452

View File

@@ -27,6 +27,7 @@
"@kan/api": "workspace:*", "@kan/api": "workspace:*",
"@kan/auth": "workspace:*", "@kan/auth": "workspace:*",
"@kan/db": "workspace:^", "@kan/db": "workspace:^",
"@kan/logger": "workspace:^",
"@kan/shared": "workspace:^", "@kan/shared": "workspace:^",
"@lingui/babel-preset-react": "^2.9.2", "@lingui/babel-preset-react": "^2.9.2",
"@lingui/conf": "^5.3.2", "@lingui/conf": "^5.3.2",

View File

@@ -145,7 +145,6 @@ export default function CommandPallette({
value={result} value={result}
className="cursor-pointer select-none px-4 py-3 data-[focus]:bg-light-200 hover:bg-light-200 focus:outline-none dark:data-[focus]:bg-dark-200 dark:hover:bg-dark-200" className="cursor-pointer select-none px-4 py-3 data-[focus]:bg-light-200 hover:bg-light-200 focus:outline-none dark:data-[focus]:bg-dark-200 dark:hover:bg-dark-200"
onClick={() => { onClick={() => {
console.log("clicked", url);
void router.push(url); void router.push(url);
onClose(); onClose();
setQuery(""); setQuery("");

View File

@@ -0,0 +1,32 @@
import { t } from "@lingui/core/macro";
import { HiOutlineAdjustmentsHorizontal } from "react-icons/hi2";
import { useFontSize, type FontSize } from "~/providers/font-size";
const fontSizeOptions: { value: FontSize; label: () => string }[] = [
{ value: "small", label: () => t`Small` },
{ value: "medium", label: () => t`Medium` },
{ value: "large", label: () => t`Large` },
];
export function FontSizeSelector() {
const { fontSize, setFontSize } = useFontSize();
return (
<div className="relative">
<HiOutlineAdjustmentsHorizontal className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400" />
<select
id="font-size-select"
value={fontSize}
onChange={(e) => setFontSize(e.target.value as FontSize)}
className="block w-full max-w-[180px] rounded-lg border-0 bg-light-50 pl-10 text-sm shadow-sm ring-1 ring-inset ring-light-300 focus:ring-2 focus:ring-inset focus:ring-light-400 dark:bg-dark-50 dark:text-dark-1000 dark:ring-dark-300 dark:focus:ring-dark-500"
>
{fontSizeOptions.map((opt) => (
<option key={opt.value} value={opt.value}>
{opt.label()}
</option>
))}
</select>
</div>
);
}

View File

@@ -75,7 +75,7 @@ export function LabelForm({
reset(newFormState); reset(newFormState);
} }
} catch (e) { } catch (e) {
console.log(e); console.error(e);
} }
}, },
}); });
@@ -231,9 +231,7 @@ export function LabelForm({
<Button <Button
type="submit" type="submit"
isLoading={updateLabel.isPending || createLabel.isPending} isLoading={updateLabel.isPending || createLabel.isPending}
disabled={ disabled={!watch("name")}
!watch("name")
}
> >
{isEdit ? t`Update label` : t`Create label`} {isEdit ? t`Update label` : t`Create label`}
</Button> </Button>

View File

@@ -0,0 +1,130 @@
import Placeholder from "@tiptap/extension-placeholder";
import { EditorContent, useEditor } from "@tiptap/react";
import StarterKit from "@tiptap/starter-kit";
import { useEffect, useRef } from "react";
import { twMerge } from "tailwind-merge";
interface PlainTextEditorProps {
content: string;
onChange?: (value: string) => void;
onBlur?: (value: string) => void;
onEnter?: (value: string) => void;
onEscape?: () => void;
readOnly?: boolean;
placeholder?: string;
className?: string;
}
export default function PlainTextEditor({
content,
onChange,
onBlur,
onEnter,
onEscape,
readOnly = false,
placeholder,
className,
}: PlainTextEditorProps) {
const onEnterRef = useRef(onEnter);
const onEscapeRef = useRef(onEscape);
const onBlurRef = useRef(onBlur);
const onChangeRef = useRef(onChange);
const contentRef = useRef(content);
useEffect(() => {
onEnterRef.current = onEnter;
}, [onEnter]);
useEffect(() => {
onEscapeRef.current = onEscape;
}, [onEscape]);
useEffect(() => {
onBlurRef.current = onBlur;
}, [onBlur]);
useEffect(() => {
onChangeRef.current = onChange;
}, [onChange]);
useEffect(() => {
contentRef.current = content;
}, [content]);
const editor = useEditor(
{
extensions: [
StarterKit.configure({
bold: false,
italic: false,
strike: false,
code: false,
codeBlock: false,
blockquote: false,
heading: false,
bulletList: false,
orderedList: false,
listItem: false,
horizontalRule: false,
hardBreak: false,
}),
Placeholder.configure({ placeholder }),
],
content,
editable: !readOnly,
onUpdate: ({ editor }) => onChangeRef.current?.(editor.getText()),
onBlur: ({ editor }) => onBlurRef.current?.(editor.getText()),
editorProps: {
handleKeyDown: (view, event) => {
if (event.key === "Enter") {
event.preventDefault();
onEnterRef.current?.(view.state.doc.textContent.trim());
return true;
}
if (event.key === "Escape") {
event.preventDefault();
// Reset to original content before calling the callback
editor?.commands.setContent(contentRef.current, false);
editor?.commands.blur();
onEscapeRef.current?.();
return true;
}
return false;
},
attributes: {
class: "outline-none focus:outline-none focus-visible:ring-0",
},
},
},
[],
);
useEffect(() => {
if (!editor) return;
if (content !== editor.getText()) {
editor.commands.setContent(content, false);
}
}, [content, editor]);
useEffect(() => {
if (!editor) return;
editor.setEditable(!readOnly);
}, [readOnly, editor]);
return (
<>
<style jsx global>{`
.plain-text-editor p.is-empty::before {
content: attr(data-placeholder);
float: left;
height: 0;
pointer-events: none;
color: var(--placeholder-color, #9ca3af);
}
.plain-text-editor .tiptap p {
margin: 0 !important;
}
`}</style>
<EditorContent
editor={editor}
className={twMerge("plain-text-editor", className)}
/>
</>
);
}

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Details hinzufügen..." "translation": "Details hinzufügen..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Passwort ändern" "translation": "Passwort ändern"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Schriftgröße der Anwendung ändern."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Ändern Sie Ihre Spracheinstellungen." "translation": "Ändern Sie Ihre Spracheinstellungen."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Label erstellen" "translation": "Label erstellen"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Account löschen" "translation": "Account löschen"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Anzeigename" "translation": "Anzeigename"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "E-Mail" "translation": "E-Mail"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Finden Sie Antworten auf häufig gestellte Fragen zu Kan. Können Sie nicht finden, wonach Sie suchen? <0>Kontaktieren Sie uns</0> gerne." "translation": "Finden Sie Antworten auf häufig gestellte Fragen zu Kan. Können Sie nicht finden, wonach Sie suchen? <0>Kontaktieren Sie uns</0> gerne."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Schriftgröße"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "in" "translation": "in"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Sprache" "translation": "Sprache"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Groß"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "hat Checklistenelement <0>{0}</0> als unvollständig markiert" "translation": "hat Checklistenelement <0>{0}</0> als unvollständig markiert"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Mittel"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Erwähnungen" "translation": "Erwähnungen"
}, },
"hty0d5": { "hty0d5": {
"translation": "Montag",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Montag"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "Keine Ergebnisse für \"{debouncedQuery}\" gefunden." "translation": "Keine Ergebnisse für \"{debouncedQuery}\" gefunden."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden." "translation": "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Profilbild" "translation": "Profilbild"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Samstag",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Samstag"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Einstellungen | Konto" "translation": "Einstellungen | Konto"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Klein"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Erfolg" "translation": "Erfolg"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Sonntag",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Sonntag"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "Checklistenelement konnte nicht gelöscht werden" "translation": "Checklistenelement konnte nicht gelöscht werden"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "Checklisten-Element konnte nicht aktualisiert werden" "translation": "Checklisten-Element konnte nicht aktualisiert werden"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Label aktualisieren" "translation": "Label aktualisieren"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Webhooks" "translation": "Webhooks"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Wochenbeginn",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "Wochenbeginn"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Sie sind dabei, Ihr Passwort zu ändern." "translation": "Sie sind dabei, Ihr Passwort zu ändern."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -471,7 +471,7 @@
"origin": [ "origin": [
[ [
"src/views/card/components/ChecklistItemRow.tsx", "src/views/card/components/ChecklistItemRow.tsx",
200 169
] ]
], ],
"translation": "Add details..." "translation": "Add details..."
@@ -2169,11 +2169,11 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
77 88
], ],
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
87 98
], ],
[ [
"src/views/settings/components/ChangePasswordConfirmation.tsx", "src/views/settings/components/ChangePasswordConfirmation.tsx",
@@ -2186,6 +2186,18 @@
], ],
"translation": "Change Password" "translation": "Change Password"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/AccountSettings.tsx",
63
]
],
"translation": "Change the application font size."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
@@ -2193,7 +2205,7 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
52 53
] ]
], ],
"translation": "Change your language preferences." "translation": "Change your language preferences."
@@ -2873,7 +2885,7 @@
"origin": [ "origin": [
[ [
"src/components/LabelForm.tsx", "src/components/LabelForm.tsx",
238 236
] ]
], ],
"translation": "Create label" "translation": "Create label"
@@ -3297,11 +3309,11 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
59 70
], ],
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
69 80
], ],
[ [
"src/views/settings/components/DeleteAccountConfirmation.tsx", "src/views/settings/components/DeleteAccountConfirmation.tsx",
@@ -3513,7 +3525,7 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
35 36
] ]
], ],
"translation": "Display name" "translation": "Display name"
@@ -3901,7 +3913,7 @@
], ],
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
42 43
] ]
], ],
"translation": "Email" "translation": "Email"
@@ -4654,6 +4666,18 @@
], ],
"translation": "Find answers to common questions about Kan. Can't find what you're looking for? Feel free to <0>contact us</0>." "translation": "Find answers to common questions about Kan. Can't find what you're looking for? Feel free to <0>contact us</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/AccountSettings.tsx",
60
]
],
"translation": "Font size"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -5365,7 +5389,7 @@
"origin": [ "origin": [
[ [
"src/components/CommandPallette.tsx", "src/components/CommandPallette.tsx",
168 167
] ]
], ],
"translation": "in" "translation": "in"
@@ -5721,11 +5745,23 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
49 50
] ]
], ],
"translation": "Language" "translation": "Language"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [
[
"src/components/FontSizeSelector.tsx",
9
]
],
"translation": "Large"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -6050,6 +6086,18 @@
], ],
"translation": "marked checklist item <0>{0}</0> as incomplete" "translation": "marked checklist item <0>{0}</0> as incomplete"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [
[
"src/components/FontSizeSelector.tsx",
8
]
],
"translation": "Medium"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -6143,7 +6191,6 @@
"translation": "Mentions" "translation": "Mentions"
}, },
"hty0d5": { "hty0d5": {
"translation": "Monday",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
@@ -6152,7 +6199,8 @@
"src/views/settings/components/UpdateWeekStartDayForm.tsx", "src/views/settings/components/UpdateWeekStartDayForm.tsx",
53 53
] ]
] ],
"translation": "Monday"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -6628,7 +6676,7 @@
"origin": [ "origin": [
[ [
"src/components/CommandPallette.tsx", "src/components/CommandPallette.tsx",
184 183
] ]
], ],
"translation": "No results found for \"{debouncedQuery}\"." "translation": "No results found for \"{debouncedQuery}\"."
@@ -6712,7 +6760,7 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
62 73
] ]
], ],
"translation": "Once you delete your account, there is no going back. This action cannot be undone." "translation": "Once you delete your account, there is no going back. This action cannot be undone."
@@ -7284,11 +7332,11 @@
], ],
[ [
"src/views/card/components/ChecklistItemRow.tsx", "src/views/card/components/ChecklistItemRow.tsx",
69 67
], ],
[ [
"src/views/card/components/ChecklistItemRow.tsx", "src/views/card/components/ChecklistItemRow.tsx",
97 95
], ],
[ [
"src/views/card/components/ChecklistNameInput.tsx", "src/views/card/components/ChecklistNameInput.tsx",
@@ -7592,7 +7640,7 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
29 30
] ]
], ],
"translation": "Profile picture" "translation": "Profile picture"
@@ -8045,7 +8093,6 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Saturday",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
@@ -8054,7 +8101,8 @@
"src/views/settings/components/UpdateWeekStartDayForm.tsx", "src/views/settings/components/UpdateWeekStartDayForm.tsx",
54 54
] ]
] ],
"translation": "Saturday"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -8331,7 +8379,7 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
25 26
] ]
], ],
"translation": "Settings | Account" "translation": "Settings | Account"
@@ -8548,6 +8596,18 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [
[
"src/components/FontSizeSelector.tsx",
7
]
],
"translation": "Small"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -8665,7 +8725,6 @@
"translation": "Success" "translation": "Success"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Sunday",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
@@ -8674,7 +8733,8 @@
"src/views/settings/components/UpdateWeekStartDayForm.tsx", "src/views/settings/components/UpdateWeekStartDayForm.tsx",
52 52
] ]
] ],
"translation": "Sunday"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -9511,7 +9571,7 @@
"origin": [ "origin": [
[ [
"src/views/card/components/ChecklistItemRow.tsx", "src/views/card/components/ChecklistItemRow.tsx",
96 94
] ]
], ],
"translation": "Unable to delete checklist item" "translation": "Unable to delete checklist item"
@@ -9647,7 +9707,7 @@
"origin": [ "origin": [
[ [
"src/views/card/components/ChecklistItemRow.tsx", "src/views/card/components/ChecklistItemRow.tsx",
68 66
] ]
], ],
"translation": "Unable to update checklist item" "translation": "Unable to update checklist item"
@@ -10007,7 +10067,7 @@
"origin": [ "origin": [
[ [
"src/components/LabelForm.tsx", "src/components/LabelForm.tsx",
238 236
] ]
], ],
"translation": "Update label" "translation": "Update label"
@@ -10497,7 +10557,6 @@
"translation": "Webhooks" "translation": "Webhooks"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Week start day",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
@@ -10506,7 +10565,8 @@
"src/views/settings/WorkspaceSettings.tsx", "src/views/settings/WorkspaceSettings.tsx",
91 91
] ]
] ],
"translation": "Week start day"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -10867,7 +10927,7 @@
"origin": [ "origin": [
[ [
"src/views/settings/AccountSettings.tsx", "src/views/settings/AccountSettings.tsx",
80 91
] ]
], ],
"translation": "You are about to change your password." "translation": "You are about to change your password."

File diff suppressed because one or more lines are too long

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Añadir detalles..." "translation": "Añadir detalles..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Cambiar contraseña" "translation": "Cambiar contraseña"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Cambia el tamaño de fuente de la aplicación."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Cambia tus preferencias de idioma." "translation": "Cambia tus preferencias de idioma."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Crear etiqueta" "translation": "Crear etiqueta"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Eliminar cuenta" "translation": "Eliminar cuenta"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Nombre para mostrar" "translation": "Nombre para mostrar"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "Email" "translation": "Email"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Encuentra respuestas a preguntas frecuentes sobre Kan. ¿No encuentras lo que buscas? No dudes en <0>contactarnos</0>." "translation": "Encuentra respuestas a preguntas frecuentes sobre Kan. ¿No encuentras lo que buscas? No dudes en <0>contactarnos</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Tamaño de fuente"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "en" "translation": "en"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Idioma" "translation": "Idioma"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Grande"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "marcó el elemento de la lista de verificación <0>{0}</0> como incompleto" "translation": "marcó el elemento de la lista de verificación <0>{0}</0> como incompleto"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Mediano"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Menciones" "translation": "Menciones"
}, },
"hty0d5": { "hty0d5": {
"translation": "Lunes",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Lunes"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "No se encontraron resultados para \"{debouncedQuery}\"." "translation": "No se encontraron resultados para \"{debouncedQuery}\"."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer." "translation": "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Foto de perfil" "translation": "Foto de perfil"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Sábado",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Sábado"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Configuración | Cuenta" "translation": "Configuración | Cuenta"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Pequeño"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Éxito" "translation": "Éxito"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Domingo",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Domingo"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "No se pudo eliminar el elemento de la lista de verificación" "translation": "No se pudo eliminar el elemento de la lista de verificación"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "No se pudo actualizar el elemento de la lista de verificación" "translation": "No se pudo actualizar el elemento de la lista de verificación"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Actualizar etiqueta" "translation": "Actualizar etiqueta"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Webhooks" "translation": "Webhooks"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Día de inicio de semana",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "Día de inicio de semana"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Estás a punto de cambiar tu contraseña." "translation": "Estás a punto de cambiar tu contraseña."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Ajouter des détails..." "translation": "Ajouter des détails..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Changer le mot de passe" "translation": "Changer le mot de passe"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Modifier la taille de police de l'application."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Modifiez vos préférences de langue." "translation": "Modifiez vos préférences de langue."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Créer une étiquette" "translation": "Créer une étiquette"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Supprimer le compte" "translation": "Supprimer le compte"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Nom d'affichage" "translation": "Nom d'affichage"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "E-mail" "translation": "E-mail"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Trouvez des réponses aux questions courantes sur Kan. Vous ne trouvez pas ce que vous cherchez ? N'hésitez pas à <0>nous contacter</0>." "translation": "Trouvez des réponses aux questions courantes sur Kan. Vous ne trouvez pas ce que vous cherchez ? N'hésitez pas à <0>nous contacter</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Taille de police"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "dans" "translation": "dans"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Langue" "translation": "Langue"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Grande"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "a marqué l'élément de checklist <0>{0}</0> comme incomplet" "translation": "a marqué l'élément de checklist <0>{0}</0> comme incomplet"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Moyenne"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Mentions" "translation": "Mentions"
}, },
"hty0d5": { "hty0d5": {
"translation": "Lundi",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Lundi"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "Aucun résultat trouvé pour « {debouncedQuery} »." "translation": "Aucun résultat trouvé pour « {debouncedQuery} »."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "Une fois votre compte supprimé, il n'y a pas de retour en arrière possible. Cette action ne peut pas être annulée." "translation": "Une fois votre compte supprimé, il n'y a pas de retour en arrière possible. Cette action ne peut pas être annulée."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Photo de profil" "translation": "Photo de profil"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Samedi",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Samedi"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Paramètres | Compte" "translation": "Paramètres | Compte"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Petite"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Succès" "translation": "Succès"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Dimanche",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Dimanche"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "Impossible de supprimer l'élément de liste de contrôle" "translation": "Impossible de supprimer l'élément de liste de contrôle"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "Impossible de mettre à jour l'élément de la checklist" "translation": "Impossible de mettre à jour l'élément de la checklist"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Mettre à jour l'étiquette" "translation": "Mettre à jour l'étiquette"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Webhooks" "translation": "Webhooks"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Jour de début de semaine",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "Jour de début de semaine"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Vous êtes sur le point de modifier votre mot de passe." "translation": "Vous êtes sur le point de modifier votre mot de passe."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Aggiungi dettagli..." "translation": "Aggiungi dettagli..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Cambia password" "translation": "Cambia password"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Modifica la dimensione del carattere dell'applicazione."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Modifica le tue preferenze di lingua." "translation": "Modifica le tue preferenze di lingua."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Crea etichetta" "translation": "Crea etichetta"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Elimina account" "translation": "Elimina account"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Nome visualizzato" "translation": "Nome visualizzato"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "Email" "translation": "Email"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Trova risposte alle domande più comuni su Kan. Non trovi quello che cerchi? Sentiti libero di <0>contattarci</0>." "translation": "Trova risposte alle domande più comuni su Kan. Non trovi quello che cerchi? Sentiti libero di <0>contattarci</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Dimensione del carattere"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "in" "translation": "in"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Lingua" "translation": "Lingua"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Grande"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "ha contrassegnato l'elemento della checklist <0>{0}</0> come incompleto" "translation": "ha contrassegnato l'elemento della checklist <0>{0}</0> come incompleto"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Medio"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Menzioni" "translation": "Menzioni"
}, },
"hty0d5": { "hty0d5": {
"translation": "Lunedì",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Lunedì"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "Nessun risultato trovato per \"{debouncedQuery}\"." "translation": "Nessun risultato trovato per \"{debouncedQuery}\"."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata." "translation": "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Immagine del profilo" "translation": "Immagine del profilo"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Sabato",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Sabato"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Impostazioni | Account" "translation": "Impostazioni | Account"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Piccolo"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Successo" "translation": "Successo"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Domenica",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Domenica"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "Impossibile eliminare l'elemento della checklist" "translation": "Impossibile eliminare l'elemento della checklist"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "Impossibile aggiornare l'elemento della checklist" "translation": "Impossibile aggiornare l'elemento della checklist"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Aggiorna etichetta" "translation": "Aggiorna etichetta"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Webhook" "translation": "Webhook"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Giorno di inizio settimana",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "Giorno di inizio settimana"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Stai per modificare la tua password." "translation": "Stai per modificare la tua password."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Voeg details toe..." "translation": "Voeg details toe..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Wachtwoord wijzigen" "translation": "Wachtwoord wijzigen"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Pas de lettergrootte van de applicatie aan."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Wijzig je taalvoorkeuren." "translation": "Wijzig je taalvoorkeuren."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Maak label" "translation": "Maak label"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Account verwijderen" "translation": "Account verwijderen"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Weergavenaam" "translation": "Weergavenaam"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "E-mail" "translation": "E-mail"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Vind antwoorden op veelgestelde vragen over Kan. Kun je niet vinden wat je zoekt? Neem gerust <0>contact met ons op</0>." "translation": "Vind antwoorden op veelgestelde vragen over Kan. Kun je niet vinden wat je zoekt? Neem gerust <0>contact met ons op</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Lettergrootte"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "in" "translation": "in"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Taal" "translation": "Taal"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Groot"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "heeft checklistitem <0>{0}</0> als onvolledig gemarkeerd" "translation": "heeft checklistitem <0>{0}</0> als onvolledig gemarkeerd"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Gemiddeld"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Vermeldingen" "translation": "Vermeldingen"
}, },
"hty0d5": { "hty0d5": {
"translation": "Maandag",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Maandag"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "Geen resultaten gevonden voor \"{debouncedQuery}\"." "translation": "Geen resultaten gevonden voor \"{debouncedQuery}\"."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt." "translation": "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Profielfoto" "translation": "Profielfoto"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Zaterdag",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Zaterdag"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Instellingen | Account" "translation": "Instellingen | Account"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Klein"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Succes" "translation": "Succes"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Zondag",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Zondag"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "Kan checklistitem niet verwijderen" "translation": "Kan checklistitem niet verwijderen"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "Kan checklistitem niet bijwerken" "translation": "Kan checklistitem niet bijwerken"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Label bijwerken" "translation": "Label bijwerken"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Webhooks" "translation": "Webhooks"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Eerste dag van de week",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "Eerste dag van de week"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Je staat op het punt je wachtwoord te wijzigen." "translation": "Je staat op het punt je wachtwoord te wijzigen."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Dodaj szczegóły..." "translation": "Dodaj szczegóły..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Zmień hasło" "translation": "Zmień hasło"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Zmień rozmiar czcionki aplikacji."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Zmień preferencje językowe." "translation": "Zmień preferencje językowe."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Utwórz etykietę" "translation": "Utwórz etykietę"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Usuń konto" "translation": "Usuń konto"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Nazwa wyświetlana" "translation": "Nazwa wyświetlana"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "E-mail" "translation": "E-mail"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Znajdź odpowiedzi na najczęstsze pytania dotyczące Kan. Nie możesz znaleźć tego, czego szukasz? Śmiało <0>skontaktuj się z nami</0>." "translation": "Znajdź odpowiedzi na najczęstsze pytania dotyczące Kan. Nie możesz znaleźć tego, czego szukasz? Śmiało <0>skontaktuj się z nami</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Rozmiar czcionki"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "w" "translation": "w"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Język" "translation": "Język"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Duży"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "oznaczył(a) element listy kontrolnej <0>{0}</0> jako nieukończony" "translation": "oznaczył(a) element listy kontrolnej <0>{0}</0> jako nieukończony"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Średni"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Wzmianki" "translation": "Wzmianki"
}, },
"hty0d5": { "hty0d5": {
"translation": "Poniedziałek",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Poniedziałek"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "Nie znaleziono wyników dla „{debouncedQuery}”." "translation": "Nie znaleziono wyników dla „{debouncedQuery}”."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "Po usunięciu konta nie będzie można tego cofnąć. Tej operacji nie da się odwrócić." "translation": "Po usunięciu konta nie będzie można tego cofnąć. Tej operacji nie da się odwrócić."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Zdjęcie profilowe" "translation": "Zdjęcie profilowe"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Sobota",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Sobota"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Ustawienia | Konto" "translation": "Ustawienia | Konto"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Mały"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Sukces" "translation": "Sukces"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Niedziela",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Niedziela"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "Nie można usunąć elementu listy kontrolnej" "translation": "Nie można usunąć elementu listy kontrolnej"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "Nie można zaktualizować elementu listy kontrolnej" "translation": "Nie można zaktualizować elementu listy kontrolnej"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Aktualizuj etykietę" "translation": "Aktualizuj etykietę"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Webhooki" "translation": "Webhooki"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Pierwszy dzień tygodnia",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "Pierwszy dzień tygodnia"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Zaraz zmienisz swoje hasło." "translation": "Zaraz zmienisz swoje hasło."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Adicionar detalhes..." "translation": "Adicionar detalhes..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Alterar senha" "translation": "Alterar senha"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Altere o tamanho da fonte do aplicativo."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Altere suas preferências de idioma." "translation": "Altere suas preferências de idioma."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Criar etiqueta" "translation": "Criar etiqueta"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Excluir conta" "translation": "Excluir conta"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Nome de exibição" "translation": "Nome de exibição"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "Email" "translation": "Email"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Encontre respostas para perguntas comuns sobre o Kan. Não encontrou o que procura? Sinta-se à vontade para <0>entrar em contato</0>." "translation": "Encontre respostas para perguntas comuns sobre o Kan. Não encontrou o que procura? Sinta-se à vontade para <0>entrar em contato</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Tamanho da fonte"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "em" "translation": "em"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Idioma" "translation": "Idioma"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Grande"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "marcou o item da checklist <0>{0}</0> como incompleto" "translation": "marcou o item da checklist <0>{0}</0> como incompleto"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Médio"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Menções" "translation": "Menções"
}, },
"hty0d5": { "hty0d5": {
"translation": "Segunda-feira",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Segunda-feira"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "Nenhum resultado encontrado para \"{debouncedQuery}\"." "translation": "Nenhum resultado encontrado para \"{debouncedQuery}\"."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "Depois de excluir sua conta, não há como voltar atrás. Esta ação não pode ser desfeita." "translation": "Depois de excluir sua conta, não há como voltar atrás. Esta ação não pode ser desfeita."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Foto de perfil" "translation": "Foto de perfil"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Sábado",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Sábado"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Configurações | Conta" "translation": "Configurações | Conta"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Pequeno"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Sucesso" "translation": "Sucesso"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Domingo",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Domingo"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "Não foi possível excluir item da checklist" "translation": "Não foi possível excluir item da checklist"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "Não foi possível atualizar o item da checklist" "translation": "Não foi possível atualizar o item da checklist"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Atualizar etiqueta" "translation": "Atualizar etiqueta"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Webhooks" "translation": "Webhooks"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "Dia de início da semana",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "Dia de início da semana"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Você está prestes a alterar sua senha." "translation": "Você está prestes a alterar sua senha."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -280,7 +280,7 @@
"message": "Add details...", "message": "Add details...",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 200]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 169]],
"translation": "Добавить детали..." "translation": "Добавить детали..."
}, },
"lyqwgn": { "lyqwgn": {
@@ -1293,18 +1293,25 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 77], ["src/views/settings/AccountSettings.tsx", 88],
["src/views/settings/AccountSettings.tsx", 87], ["src/views/settings/AccountSettings.tsx", 98],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 109], ["src/views/settings/components/ChangePasswordConfirmation.tsx", 109],
["src/views/settings/components/ChangePasswordConfirmation.tsx", 178] ["src/views/settings/components/ChangePasswordConfirmation.tsx", 178]
], ],
"translation": "Сменить пароль" "translation": "Сменить пароль"
}, },
"fzGyWs": {
"message": "Change the application font size.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 63]],
"translation": "Изменить размер шрифта приложения."
},
"yD3ZSw": { "yD3ZSw": {
"message": "Change your language preferences.", "message": "Change your language preferences.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 52]], "origin": [["src/views/settings/AccountSettings.tsx", 53]],
"translation": "Измените языковые настройки." "translation": "Измените языковые настройки."
}, },
"gZxH/p": { "gZxH/p": {
@@ -1715,7 +1722,7 @@
"message": "Create label", "message": "Create label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Создать метку" "translation": "Создать метку"
}, },
"XTKtey": { "XTKtey": {
@@ -1961,8 +1968,8 @@
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/settings/AccountSettings.tsx", 59], ["src/views/settings/AccountSettings.tsx", 70],
["src/views/settings/AccountSettings.tsx", 69], ["src/views/settings/AccountSettings.tsx", 80],
["src/views/settings/components/DeleteAccountConfirmation.tsx", 96] ["src/views/settings/components/DeleteAccountConfirmation.tsx", 96]
], ],
"translation": "Удалить аккаунт" "translation": "Удалить аккаунт"
@@ -2086,7 +2093,7 @@
"message": "Display name", "message": "Display name",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 35]], "origin": [["src/views/settings/AccountSettings.tsx", 36]],
"translation": "Отображаемое имя" "translation": "Отображаемое имя"
}, },
"MlyjJu": { "MlyjJu": {
@@ -2304,7 +2311,7 @@
"comments": [], "comments": [],
"origin": [ "origin": [
["src/views/members/components/InviteMemberForm.tsx", 272], ["src/views/members/components/InviteMemberForm.tsx", 272],
["src/views/settings/AccountSettings.tsx", 42] ["src/views/settings/AccountSettings.tsx", 43]
], ],
"translation": "Email" "translation": "Email"
}, },
@@ -2768,6 +2775,13 @@
"origin": [["src/views/home/components/Faqs.tsx", 150]], "origin": [["src/views/home/components/Faqs.tsx", 150]],
"translation": "Найдите ответы на часто задаваемые вопросы о Kan. Не нашли то, что искали? Не стесняйтесь <0>связаться с нами</0>." "translation": "Найдите ответы на часто задаваемые вопросы о Kan. Не нашли то, что искали? Не стесняйтесь <0>связаться с нами</0>."
}, },
"q3il6U": {
"message": "Font size",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 60]],
"translation": "Размер шрифта"
},
"+3TYXa": { "+3TYXa": {
"message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.", "message": "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge.",
"placeholders": {}, "placeholders": {},
@@ -3187,7 +3201,7 @@
"message": "in", "message": "in",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 168]], "origin": [["src/components/CommandPallette.tsx", 167]],
"translation": "в" "translation": "в"
}, },
"WbTDwg": { "WbTDwg": {
@@ -3398,9 +3412,16 @@
"message": "Language", "message": "Language",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 49]], "origin": [["src/views/settings/AccountSettings.tsx", 50]],
"translation": "Язык" "translation": "Язык"
}, },
"k7rCa/": {
"message": "Large",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 9]],
"translation": "Крупный"
},
"8Is1ih": { "8Is1ih": {
"message": "Launch offer", "message": "Launch offer",
"placeholders": {}, "placeholders": {},
@@ -3591,6 +3612,13 @@
"origin": [["src/views/card/components/ActivityList.tsx", 258]], "origin": [["src/views/card/components/ActivityList.tsx", 258]],
"translation": "отметил элемент контрольного списка <0>{0}</0> как невыполненный" "translation": "отметил элемент контрольного списка <0>{0}</0> как невыполненный"
}, },
"agPptk": {
"message": "Medium",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 8]],
"translation": "Средний"
},
"W/Elkg": { "W/Elkg": {
"message": "Medium Priority", "message": "Medium Priority",
"placeholders": {}, "placeholders": {},
@@ -3642,11 +3670,13 @@
"translation": "Упоминания" "translation": "Упоминания"
}, },
"hty0d5": { "hty0d5": {
"translation": "Понедельник",
"message": "Monday", "message": "Monday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 53]
],
"translation": "Понедельник"
}, },
"+8Nek/": { "+8Nek/": {
"message": "Monthly", "message": "Monthly",
@@ -3925,7 +3955,7 @@
"debouncedQuery": ["debouncedQuery"] "debouncedQuery": ["debouncedQuery"]
}, },
"comments": [], "comments": [],
"origin": [["src/components/CommandPallette.tsx", 184]], "origin": [["src/components/CommandPallette.tsx", 183]],
"translation": "По запросу «{debouncedQuery}» ничего не найдено." "translation": "По запросу «{debouncedQuery}» ничего не найдено."
}, },
"Q9pQaX": { "Q9pQaX": {
@@ -3976,7 +4006,7 @@
"message": "Once you delete your account, there is no going back. This action cannot be undone.", "message": "Once you delete your account, there is no going back. This action cannot be undone.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 62]], "origin": [["src/views/settings/AccountSettings.tsx", 73]],
"translation": "После удаления аккаунта возврата не будет. Это действие необратимо." "translation": "После удаления аккаунта возврата не будет. Это действие необратимо."
}, },
"dmKdk0": { "dmKdk0": {
@@ -4306,8 +4336,8 @@
["src/views/boards/components/ImportBoardsForm.tsx", 243], ["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395], ["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/card/components/AttachmentThumbnails.tsx", 74], ["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69], ["src/views/card/components/ChecklistItemRow.tsx", 67],
["src/views/card/components/ChecklistItemRow.tsx", 97], ["src/views/card/components/ChecklistItemRow.tsx", 95],
["src/views/card/components/ChecklistNameInput.tsx", 47], ["src/views/card/components/ChecklistNameInput.tsx", 47],
["src/views/card/components/Checklists.tsx", 81], ["src/views/card/components/Checklists.tsx", 81],
["src/views/card/components/Comment.tsx", 93], ["src/views/card/components/Comment.tsx", 93],
@@ -4438,7 +4468,7 @@
"message": "Profile picture", "message": "Profile picture",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 29]], "origin": [["src/views/settings/AccountSettings.tsx", 30]],
"translation": "Фото профиля" "translation": "Фото профиля"
}, },
"7d1a0d": { "7d1a0d": {
@@ -4707,11 +4737,13 @@
"translation": "SAML SSO" "translation": "SAML SSO"
}, },
"+5kO8P": { "+5kO8P": {
"translation": "Суббота",
"message": "Saturday", "message": "Saturday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 54]
],
"translation": "Суббота"
}, },
"tfDRzk": { "tfDRzk": {
"message": "Save", "message": "Save",
@@ -4876,7 +4908,7 @@
"message": "Settings | Account", "message": "Settings | Account",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 25]], "origin": [["src/views/settings/AccountSettings.tsx", 26]],
"translation": "Настройки | Аккаунт" "translation": "Настройки | Аккаунт"
}, },
"iy1wb+": { "iy1wb+": {
@@ -5006,6 +5038,13 @@
], ],
"translation": "SLA" "translation": "SLA"
}, },
"4Revpc": {
"message": "Small",
"placeholders": {},
"comments": [],
"origin": [["src/components/FontSizeSelector.tsx", 7]],
"translation": "Мелкий"
},
"++rVAm": { "++rVAm": {
"message": "Social Media", "message": "Social Media",
"placeholders": {}, "placeholders": {},
@@ -5078,11 +5117,13 @@
"translation": "Успех" "translation": "Успех"
}, },
"DBC3t5": { "DBC3t5": {
"translation": "Воскресенье",
"message": "Sunday", "message": "Sunday",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]] "origin": [
["src/views/settings/components/UpdateWeekStartDayForm.tsx", 52]
],
"translation": "Воскресенье"
}, },
"uZg2+w": { "uZg2+w": {
"message": "Supercharge your workspace for just $29/month. Here's what you'll get:", "message": "Supercharge your workspace for just $29/month. Here's what you'll get:",
@@ -5593,7 +5634,7 @@
"message": "Unable to delete checklist item", "message": "Unable to delete checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 96]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 94]],
"translation": "Не удалось удалить элемент контрольного списка" "translation": "Не удалось удалить элемент контрольного списка"
}, },
"2QGEbi": { "2QGEbi": {
@@ -5677,7 +5718,7 @@
"message": "Unable to update checklist item", "message": "Unable to update checklist item",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/card/components/ChecklistItemRow.tsx", 68]], "origin": [["src/views/card/components/ChecklistItemRow.tsx", 66]],
"translation": "Не удалось обновить элемент контрольного списка" "translation": "Не удалось обновить элемент контрольного списка"
}, },
"fYVH36": { "fYVH36": {
@@ -5876,7 +5917,7 @@
"message": "Update label", "message": "Update label",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/components/LabelForm.tsx", 238]], "origin": [["src/components/LabelForm.tsx", 236]],
"translation": "Обновить метку" "translation": "Обновить метку"
}, },
"L5ZPjz": { "L5ZPjz": {
@@ -6168,11 +6209,11 @@
"translation": "Вебхуки" "translation": "Вебхуки"
}, },
"xLTZVf": { "xLTZVf": {
"translation": "День начала недели",
"message": "Week start day", "message": "Week start day",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/WorkspaceSettings.tsx", 91]] "origin": [["src/views/settings/WorkspaceSettings.tsx", 91]],
"translation": "День начала недели"
}, },
"9eF5oV": { "9eF5oV": {
"message": "Welcome back", "message": "Welcome back",
@@ -6394,7 +6435,7 @@
"message": "You are about to change your password.", "message": "You are about to change your password.",
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],
"origin": [["src/views/settings/AccountSettings.tsx", 80]], "origin": [["src/views/settings/AccountSettings.tsx", 91]],
"translation": "Вы собираетесь изменить свой пароль." "translation": "Вы собираетесь изменить свой пароль."
}, },
"aelko+": { "aelko+": {

File diff suppressed because one or more lines are too long

View File

@@ -12,6 +12,7 @@ import posthog from "posthog-js";
import { PostHogProvider } from "posthog-js/react"; import { PostHogProvider } from "posthog-js/react";
import { useEffect } from "react"; import { useEffect } from "react";
import { FontSizeProvider } from "~/providers/font-size";
import { KeyboardShortcutProvider } from "~/providers/keyboard-shortcuts"; import { KeyboardShortcutProvider } from "~/providers/keyboard-shortcuts";
import { LinguiProviderWrapper } from "~/providers/lingui"; import { LinguiProviderWrapper } from "~/providers/lingui";
import { ModalProvider } from "~/providers/modal"; import { ModalProvider } from "~/providers/modal";
@@ -83,19 +84,21 @@ const MyApp: AppType = ({ Component, pageProps }: AppPropsWithLayout) => {
<main className="font-sans"> <main className="font-sans">
<KeyboardShortcutProvider> <KeyboardShortcutProvider>
<LinguiProviderWrapper> <LinguiProviderWrapper>
<ThemeProvider attribute="class" defaultTheme="system" enableSystem> <FontSizeProvider>
<ModalProvider> <ThemeProvider attribute="class" defaultTheme="system" enableSystem>
<PopupProvider> <ModalProvider>
{posthogKey ? ( <PopupProvider>
<PostHogProvider client={posthog}> {posthogKey ? (
{getLayout(<Component {...pageProps} />)} <PostHogProvider client={posthog}>
</PostHogProvider> {getLayout(<Component {...pageProps} />)}
) : ( </PostHogProvider>
getLayout(<Component {...pageProps} />) ) : (
)} getLayout(<Component {...pageProps} />)
</PopupProvider> )}
</ModalProvider> </PopupProvider>
</ThemeProvider> </ModalProvider>
</ThemeProvider>
</FontSizeProvider>
</LinguiProviderWrapper> </LinguiProviderWrapper>
</KeyboardShortcutProvider> </KeyboardShortcutProvider>
</main> </main>

View File

@@ -3,8 +3,11 @@ import type { Readable } from "node:stream";
import { createNextApiContext } from "@kan/api/trpc"; import { createNextApiContext } from "@kan/api/trpc";
import * as workspaceRepo from "@kan/db/repository/workspace.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { createLogger } from "@kan/logger";
import { createStripeClient } from "@kan/stripe"; import { createStripeClient } from "@kan/stripe";
const log = createLogger("stripe-webhook");
async function buffer(readable: Readable) { async function buffer(readable: Readable) {
const chunks = []; const chunks = [];
for await (const chunk of readable) { for await (const chunk of readable) {
@@ -41,6 +44,8 @@ export default async function handler(
const { db } = await createNextApiContext(req); const { db } = await createNextApiContext(req);
log.info({ eventType: event.type, eventId: event.id }, "Stripe webhook received");
switch (event.type) { switch (event.type) {
case "checkout.session.completed": { case "checkout.session.completed": {
const checkoutSession = event.data.object; const checkoutSession = event.data.object;
@@ -56,12 +61,12 @@ export default async function handler(
break; break;
} }
default: default:
console.log(`Unhandled event type: ${event.type}`); log.warn({ eventType: event.type }, "Unhandled Stripe event type");
} }
return res.status(200).json({ received: true }); return res.status(200).json({ received: true });
} catch (err) { } catch (err) {
console.error("Webhook error:", err); log.error({ err }, "Stripe webhook handler failed");
return res.status(400).json({ message: "Webhook handler failed" }); return res.status(400).json({ message: "Webhook handler failed" });
} }
} }

View File

@@ -1,24 +1,25 @@
import { useEffect } from "react"; import { useEffect } from "react";
export default function TrelloAuthorize() { export default function TrelloAuthorize() {
useEffect(() => { useEffect(() => {
const hash = window.location.hash; const hash = window.location.hash;
const token = hash.split("=")[1]; const token = hash.split("=")[1];
if (token) { if (token) {
console.log("Posting token to /api/trello/authenticate", token); fetch("/api/trello/authenticate", {
fetch("/api/trello/authenticate", { method: "POST",
method: "POST", headers: {
headers: { "Content-Type": "application/json",
"Content-Type": "application/json", },
}, body: JSON.stringify({ token }),
body: JSON.stringify({ token }), }).then(() => {
}).then(() => { window.close();
window.close(); });
}); }
} }, []);
}, []);
return <div className="flex h-[200px] items-center justify-center"> return (
<p className="text-center">Connecting to Trello...</p> <div className="flex h-[200px] items-center justify-center">
</div>; <p className="text-center">Connecting to Trello...</p>
} </div>
);
}

View File

@@ -0,0 +1,57 @@
import React, {
createContext,
useContext,
useEffect,
useState,
type ReactNode,
} from "react";
export type FontSize = "small" | "medium" | "large";
const fontSizeMap: Record<FontSize, string> = {
small: "14px",
medium: "16px",
large: "18px",
};
interface FontSizeContextProps {
fontSize: FontSize;
setFontSize: (size: FontSize) => void;
}
const FontSizeContext = createContext<FontSizeContextProps | undefined>(
undefined,
);
export const FontSizeProvider: React.FC<{ children: ReactNode }> = ({
children,
}) => {
const [fontSize, setFontSizeState] = useState<FontSize>("medium");
const setFontSize = (size: FontSize) => {
document.documentElement.style.fontSize = fontSizeMap[size];
localStorage.setItem("fontSize", size);
setFontSizeState(size);
};
useEffect(() => {
const stored = localStorage.getItem("fontSize") as FontSize | null;
const size = stored && fontSizeMap[stored] ? stored : "medium";
document.documentElement.style.fontSize = fontSizeMap[size];
setFontSizeState(size);
}, []);
return (
<FontSizeContext.Provider value={{ fontSize, setFontSize }}>
{children}
</FontSizeContext.Provider>
);
};
export const useFontSize = (): FontSizeContextProps => {
const context = useContext(FontSizeContext);
if (!context) {
throw new Error("useFontSize must be used within a FontSizeProvider");
}
return context;
};

View File

@@ -2,6 +2,10 @@
@tailwind components; @tailwind components;
@tailwind utilities; @tailwind utilities;
html {
font-size: 14px;
}
[contenteditable="true"]:empty:before { [contenteditable="true"]:empty:before {
content: attr(placeholder); content: attr(placeholder);
display: block; display: block;

View File

@@ -234,7 +234,7 @@ const ImportGithub: React.FC = () => {
await refetchBoards(); await refetchBoards();
closeModal(); closeModal();
} catch (e) { } catch (e) {
console.log(e); console.error(e);
} }
}, },
onError: () => { onError: () => {
@@ -386,7 +386,7 @@ const ImportTrello: React.FC = () => {
await refetchBoards(); await refetchBoards();
closeModal(); closeModal();
} catch (e) { } catch (e) {
console.log(e); console.error(e);
} }
}, },
onError: () => { onError: () => {

View File

@@ -1,11 +1,11 @@
import type { DraggableProvided } from "react-beautiful-dnd"; import type { DraggableProvided } from "react-beautiful-dnd";
import { t } from "@lingui/core/macro"; import { t } from "@lingui/core/macro";
import { useEffect, useState } from "react"; import { useState } from "react";
import ContentEditable from "react-contenteditable";
import { HiXMark } from "react-icons/hi2"; import { HiXMark } from "react-icons/hi2";
import { RiDraggable } from "react-icons/ri"; import { RiDraggable } from "react-icons/ri";
import { twMerge } from "tailwind-merge"; import { twMerge } from "tailwind-merge";
import PlainTextEditor from "~/components/PlainTextEditor";
import { usePopup } from "~/providers/popup"; import { usePopup } from "~/providers/popup";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
import { invalidateCard } from "~/utils/cardInvalidation"; import { invalidateCard } from "~/utils/cardInvalidation";
@@ -33,9 +33,7 @@ export default function ChecklistItemRow({
}: ChecklistItemRowProps) { }: ChecklistItemRowProps) {
const utils = api.useUtils(); const utils = api.useUtils();
const { showPopup } = usePopup(); const { showPopup } = usePopup();
const [completed, setCompleted] = useState(item.completed);
const [title, setTitle] = useState("");
const [completed, setCompleted] = useState(false);
const updateItem = api.checklist.updateItem.useMutation({ const updateItem = api.checklist.updateItem.useMutation({
onMutate: async (vars) => { onMutate: async (vars) => {
@@ -103,21 +101,6 @@ export default function ChecklistItemRow({
}, },
}); });
// Only resync from props when switching items to avoid clobbering edits
useEffect(() => {
setTitle(item.title);
setCompleted(item.completed);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [item.publicId]);
const sanitizeHtmlToPlainText = (html: string): string =>
html
.replace(/<br\s*\/?>(\n)?/gi, "\n")
.replace(/<div><br\s*\/?><\/div>/gi, "")
.replace(/<[^>]*>/g, "")
.replace(/&nbsp;/g, " ")
.trim();
const handleToggleCompleted = () => { const handleToggleCompleted = () => {
if (viewOnly) return; if (viewOnly) return;
setCompleted((prev) => !prev); setCompleted((prev) => !prev);
@@ -127,14 +110,8 @@ export default function ChecklistItemRow({
}); });
}; };
const commitTitle = (rawHtml: string) => { const commitTitle = (plain: string) => {
if (viewOnly) return; if (!plain || plain === item.title) return;
const plain = sanitizeHtmlToPlainText(rawHtml);
if (!plain || plain === item.title) {
setTitle(item.title);
return;
}
setTitle(plain);
updateItem.mutate({ updateItem.mutate({
checklistItemPublicId: item.publicId, checklistItemPublicId: item.publicId,
title: plain, title: plain,
@@ -183,36 +160,26 @@ export default function ChecklistItemRow({
)} )}
/> />
</label> </label>
<div className="flex-1 pr-7"> <div className="flex-1 pr-7">
<ContentEditable <PlainTextEditor
html={title} key={item.publicId}
disabled={viewOnly} content={item.title}
onChange={(e) => setTitle(e.target.value)} readOnly={viewOnly}
// @ts-expect-error - valid event placeholder={t`Add details...`}
onBlur={(e: Event) => { onBlur={commitTitle}
const innerHTML = (e.target as HTMLElement).innerHTML; onEnter={(plain) => {
commitTitle(innerHTML); commitTitle(plain);
onCreateNewItem?.();
}} }}
onEscape={() => undefined}
className={twMerge( className={twMerge(
"m-0 min-h-[20px] w-full p-0 text-sm leading-[20px] text-light-950 outline-none focus-visible:outline-none dark:text-dark-950", "m-0 min-h-[20px] w-full p-0 text-sm leading-[20px] text-light-950 dark:text-dark-950",
viewOnly && "cursor-default", viewOnly && "cursor-default",
)} )}
placeholder={t`Add details...`}
onKeyDown={(e) => {
if (viewOnly) return;
if (e.key === "Enter") {
e.preventDefault();
const innerHTML = (e.currentTarget as HTMLElement).innerHTML;
commitTitle(innerHTML);
onCreateNewItem?.();
}
if (e.key === "Escape") {
e.preventDefault();
setTitle(item.title);
}
}}
/> />
</div> </div>
{!viewOnly && ( {!viewOnly && (
<button <button
type="button" type="button"

View File

@@ -3,6 +3,7 @@ import { env } from "next-runtime-env";
import Button from "~/components/Button"; import Button from "~/components/Button";
import FeedbackModal from "~/components/FeedbackModal"; import FeedbackModal from "~/components/FeedbackModal";
import { FontSizeSelector } from "~/components/FontSizeSelector";
import { LanguageSelector } from "~/components/LanguageSelector"; import { LanguageSelector } from "~/components/LanguageSelector";
import Modal from "~/components/modal"; import Modal from "~/components/modal";
import { NewWorkspaceForm } from "~/components/NewWorkspaceForm"; import { NewWorkspaceForm } from "~/components/NewWorkspaceForm";
@@ -54,6 +55,16 @@ export default function AccountSettings() {
<LanguageSelector /> <LanguageSelector />
</div> </div>
<div className="mb-8 border-t border-light-300 dark:border-dark-300">
<h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000">
{t`Font size`}
</h2>
<p className="mb-8 text-sm text-neutral-500 dark:text-dark-900">
{t`Change the application font size.`}
</p>
<FontSizeSelector />
</div>
<div className="mb-8 border-t border-light-300 dark:border-dark-300"> <div className="mb-8 border-t border-light-300 dark:border-dark-300">
<h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000"> <h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000">
{t`Delete account`} {t`Delete account`}

View File

@@ -37,6 +37,9 @@ services:
- NEXT_PUBLIC_USE_STANDALONE_OUTPUT=${NEXT_PUBLIC_USE_STANDALONE_OUTPUT} - NEXT_PUBLIC_USE_STANDALONE_OUTPUT=${NEXT_PUBLIC_USE_STANDALONE_OUTPUT}
- REDIS_URL=${REDIS_URL} - REDIS_URL=${REDIS_URL}
# Logging (optional - debug, info, warn, error; defaults to debug in dev, info in prod)
- LOG_LEVEL=${LOG_LEVEL}
# Stripe # Stripe
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY} - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET} - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}

View File

@@ -37,6 +37,9 @@ services:
# Redis (optional - for rate limiting) # Redis (optional - for rate limiting)
- REDIS_URL=${REDIS_URL} - REDIS_URL=${REDIS_URL}
# Logging (optional - debug, info, warn, error; defaults to debug in dev, info in prod)
- LOG_LEVEL=${LOG_LEVEL}
# Admin API key (optional) # Admin API key (optional)
- KAN_ADMIN_API_KEY=${KAN_ADMIN_API_KEY} - KAN_ADMIN_API_KEY=${KAN_ADMIN_API_KEY}

View File

@@ -48,6 +48,7 @@
"@kan/auth": "workspace:*", "@kan/auth": "workspace:*",
"@kan/db": "workspace:*", "@kan/db": "workspace:*",
"@kan/email": "workspace:^", "@kan/email": "workspace:^",
"@kan/logger": "workspace:^",
"@kan/shared": "workspace:^", "@kan/shared": "workspace:^",
"@kan/stripe": "workspace:^", "@kan/stripe": "workspace:^",
"@trpc/server": "catalog:", "@trpc/server": "catalog:",

View File

@@ -4,6 +4,7 @@ import { z } from "zod";
import * as cardRepo from "@kan/db/repository/card.repo"; import * as cardRepo from "@kan/db/repository/card.repo";
import * as cardActivityRepo from "@kan/db/repository/cardActivity.repo"; import * as cardActivityRepo from "@kan/db/repository/cardActivity.repo";
import * as checklistRepo from "@kan/db/repository/checklist.repo"; import * as checklistRepo from "@kan/db/repository/checklist.repo";
import { stripHtml } from "@kan/shared/utils";
import { createTRPCRouter, protectedProcedure } from "../trpc"; import { createTRPCRouter, protectedProcedure } from "../trpc";
import { assertPermission } from "../utils/permissions"; import { assertPermission } from "../utils/permissions";
@@ -223,7 +224,7 @@ export const checklistRouter = createTRPCRouter({
.input( .input(
z.object({ z.object({
checklistPublicId: z.string().length(12), checklistPublicId: z.string().length(12),
title: z.string().min(1).max(500), title: z.string().min(1).max(500).transform(stripHtml),
}), }),
) )
.output(checklistItemSchema) .output(checklistItemSchema)
@@ -288,7 +289,7 @@ export const checklistRouter = createTRPCRouter({
.input( .input(
z.object({ z.object({
checklistItemPublicId: z.string().length(12), checklistItemPublicId: z.string().length(12),
title: z.string().min(1).max(500).optional(), title: z.string().min(1).max(500).transform(stripHtml).optional(),
completed: z.boolean().optional(), completed: z.boolean().optional(),
index: z.number().int().min(0).optional(), index: z.number().int().min(0).optional(),
}), }),
@@ -322,30 +323,29 @@ export const checklistRouter = createTRPCRouter({
const previousTitle = item.title; const previousTitle = item.title;
let updatedItem; let updatedItem;
if (input.title !== undefined || input.completed !== undefined) { if (input.title !== undefined || input.completed !== undefined) {
updatedItem = await checklistRepo.updateItemById(ctx.db, { updatedItem = await checklistRepo.updateItemById(ctx.db, {
id: item.id, id: item.id,
title: input.title, title: input.title,
completed: input.completed, completed: input.completed,
}); });
} }
if (input.index !== undefined) { if (input.index !== undefined) {
updatedItem = await checklistRepo.reorderItem(ctx.db, { updatedItem = await checklistRepo.reorderItem(ctx.db, {
itemId: item.id, itemId: item.id,
newIndex: input.index, newIndex: input.index,
}); });
} }
if (!updatedItem) {
throw new TRPCError({
message: `Failed to update checklist item`,
code: "INTERNAL_SERVER_ERROR",
});
}
if (!updatedItem) {
throw new TRPCError({
message: `Failed to update checklist item`,
code: "INTERNAL_SERVER_ERROR",
});
}
// Log completion toggle // Log completion toggle
if (input.completed !== undefined) { if (input.completed !== undefined) {
@@ -371,7 +371,6 @@ export const checklistRouter = createTRPCRouter({
} }
return updatedItem; return updatedItem;
}), }),
deleteItem: protectedProcedure deleteItem: protectedProcedure
.meta({ .meta({

View File

@@ -19,6 +19,7 @@ import { encryptToken } from "../utils/encryption";
export const integrationRouter = createTRPCRouter({ export const integrationRouter = createTRPCRouter({
saveGitHubToken: protectedProcedure saveGitHubToken: protectedProcedure
.input(z.object({ token: z.string() })) .input(z.object({ token: z.string() }))
.output(z.object({ success: z.boolean() }))
.mutation(async ({ ctx, input }) => { .mutation(async ({ ctx, input }) => {
const user = ctx.user; const user = ctx.user;
@@ -43,7 +44,9 @@ export const integrationRouter = createTRPCRouter({
return { success: true }; return { success: true };
}), }),
disconnectGitHub: protectedProcedure.mutation(async ({ ctx }) => { disconnectGitHub: protectedProcedure
.output(z.object({ success: z.boolean() }))
.mutation(async ({ ctx }) => {
const user = ctx.user; const user = ctx.user;
if (!user) if (!user)
@@ -56,7 +59,9 @@ export const integrationRouter = createTRPCRouter({
return { success: true }; return { success: true };
}), }),
getGitHubStatus: protectedProcedure.query(async ({ ctx }) => { getGitHubStatus: protectedProcedure
.output(z.object({ connected: z.boolean() }))
.query(async ({ ctx }) => {
const user = ctx.user; const user = ctx.user;
if (!user) if (!user)

View File

@@ -31,7 +31,6 @@ export const userRouter = createTRPCRouter({
.object({ .object({
id: z.number(), id: z.number(),
prefix: z.string().nullable(), prefix: z.string().nullable(),
key: z.string(),
}) })
.nullable(), .nullable(),
}), }),
@@ -62,7 +61,7 @@ export const userRouter = createTRPCRouter({
return { return {
...result, ...result,
image: imageUrl, image: imageUrl,
apiKey: apiKey ?? null, apiKey: apiKey ? { id: apiKey.id, prefix: apiKey.prefix } : null,
}; };
}), }),
update: protectedProcedure update: protectedProcedure

View File

@@ -9,6 +9,9 @@ import { ZodError } from "zod";
import type { dbClient } from "@kan/db/client"; import type { dbClient } from "@kan/db/client";
import { initAuth } from "@kan/auth/server"; import { initAuth } from "@kan/auth/server";
import { createDrizzleClient } from "@kan/db/client"; import { createDrizzleClient } from "@kan/db/client";
import { createLogger } from "@kan/logger";
const log = createLogger("trpc");
export interface User { export interface User {
id: string; id: string;
@@ -90,7 +93,7 @@ export const createRESTContext = async ({ req }: CreateNextContextOptions) => {
try { try {
session = await auth.api.getSession(); session = await auth.api.getSession();
} catch (error) { } catch (error) {
console.error("Error getting session, ", error); log.error({ err: error }, "Error getting session");
throw error; throw error;
} }
@@ -118,10 +121,24 @@ export const createTRPCRouter = t.router;
export const createCallerFactory = t.createCallerFactory; export const createCallerFactory = t.createCallerFactory;
export const publicProcedure = t.procedure.meta({ const loggingMiddleware = t.middleware(async ({ path, type, next, ctx }) => {
openapi: { method: "GET", path: "/public" }, const start = Date.now();
const result = await next();
const duration = Date.now() - start;
const meta = { procedure: path, type, duration, userId: (ctx as { user?: { id: string } }).user?.id };
if (result.ok) {
log.info(meta, "tRPC OK");
} else {
log.error({ ...meta, err: result.error }, "tRPC error");
}
return result;
}); });
export const publicProcedure = t.procedure.use(loggingMiddleware);
const enforceUserIsAuthed = t.middleware(async ({ ctx, next }) => { const enforceUserIsAuthed = t.middleware(async ({ ctx, next }) => {
if (!ctx.user) { if (!ctx.user) {
throw new TRPCError({ code: "UNAUTHORIZED" }); throw new TRPCError({ code: "UNAUTHORIZED" });
@@ -142,14 +159,12 @@ const enforceUserIsAdmin = t.middleware(async ({ ctx, next }) => {
}); });
}); });
export const protectedProcedure = t.procedure.use(enforceUserIsAuthed).meta({ export const protectedProcedure = t.procedure
openapi: { .use(loggingMiddleware)
method: "GET", .use(enforceUserIsAuthed);
path: "/protected",
},
});
export const adminProtectedProcedure = t.procedure export const adminProtectedProcedure = t.procedure
.use(loggingMiddleware)
.use(enforceUserIsAdmin) .use(enforceUserIsAdmin)
.meta({ .meta({
openapi: { openapi: {

View File

@@ -1,6 +1,9 @@
import { env } from "next-runtime-env"; import { env } from "next-runtime-env";
import type { dbClient } from "@kan/db/client"; import type { dbClient } from "@kan/db/client";
import { createLogger } from "@kan/logger";
const log = createLogger("notifications");
import * as cardRepo from "@kan/db/repository/card.repo"; import * as cardRepo from "@kan/db/repository/card.repo";
import * as memberRepo from "@kan/db/repository/member.repo"; import * as memberRepo from "@kan/db/repository/member.repo";
import * as notificationRepo from "@kan/db/repository/notification.repo"; import * as notificationRepo from "@kan/db/repository/notification.repo";
@@ -72,6 +75,7 @@ export async function sendMentionEmails({
const baseUrl = env("NEXT_PUBLIC_BASE_URL"); const baseUrl = env("NEXT_PUBLIC_BASE_URL");
const cardUrl = `${baseUrl}/cards/${cardPublicId}`; const cardUrl = `${baseUrl}/cards/${cardPublicId}`;
log.info({ cardPublicId, mentionCount: membersToNotify.length, commenterUserId }, "Sending mention emails");
// Send emails to all mentioned members (only if notification doesn't exist) // Send emails to all mentioned members (only if notification doesn't exist)
await Promise.all( await Promise.all(
membersToNotify.map(async (member) => { membersToNotify.map(async (member) => {
@@ -91,6 +95,7 @@ export async function sendMentionEmails({
// If notification already exists, skip sending email // If notification already exists, skip sending email
if (notificationExists) { if (notificationExists) {
log.debug({ email, cardPublicId }, "Skipping duplicate mention email");
return; return;
} }
@@ -114,20 +119,14 @@ export async function sendMentionEmails({
cardUrl, cardUrl,
}, },
); );
log.info({ email, cardPublicId }, "Mention email sent");
} catch (error) { } catch (error) {
console.error("Failed to send mention email:", { log.error({ err: error, email, cardPublicId }, "Failed to send mention email");
email,
cardPublicId,
error: error instanceof Error ? error.message : String(error),
});
} }
}), }),
); );
} catch (error) { } catch (error) {
console.error("Error sending mention emails:", { log.error({ err: error, cardPublicId }, "Error sending mention emails");
cardPublicId,
error: error instanceof Error ? error.message : String(error),
});
} }
} }

View File

@@ -5,6 +5,9 @@ import {
} from "rate-limiter-flexible"; } from "rate-limiter-flexible";
import { getRedisClient } from "@kan/db/redis"; import { getRedisClient } from "@kan/db/redis";
import { createLogger } from "@kan/logger";
const log = createLogger("rateLimit");
export interface RateLimitOptions { export interface RateLimitOptions {
points?: number; points?: number;
@@ -45,7 +48,7 @@ function createRateLimiter(options: RateLimitOptions = {}) {
// Use Redis if available, otherwise fall back to in-memory storage // Use Redis if available, otherwise fall back to in-memory storage
if (redis) { if (redis) {
console.log("Using Redis for rate limiting"); log.debug("Using Redis for rate limiting");
return new RateLimiterRedis({ return new RateLimiterRedis({
storeClient: redis, storeClient: redis,
points, points,
@@ -53,7 +56,7 @@ function createRateLimiter(options: RateLimitOptions = {}) {
}); });
} }
console.log("Using in-memory for rate limiting"); log.debug("Redis unavailable, falling back to in-memory rate limiting");
return new RateLimiterMemory({ return new RateLimiterMemory({
points, points,
duration, duration,

View File

@@ -4,6 +4,9 @@ import { z } from "zod";
import type { dbClient } from "@kan/db/client"; import type { dbClient } from "@kan/db/client";
import type { WebhookEvent } from "@kan/db/schema"; import type { WebhookEvent } from "@kan/db/schema";
import * as webhookRepo from "@kan/db/repository/webhook.repo"; import * as webhookRepo from "@kan/db/repository/webhook.repo";
import { createLogger } from "@kan/logger";
const log = createLogger("webhook");
export type WebhookEventType = WebhookEvent; export type WebhookEventType = WebhookEvent;
@@ -199,9 +202,9 @@ export async function sendWebhooksForWorkspace(
sendWebhookToUrl(webhook.url, webhook.secret ?? undefined, payload).then( sendWebhookToUrl(webhook.url, webhook.secret ?? undefined, payload).then(
(result) => { (result) => {
if (!result.success) { if (!result.success) {
console.error( log.error({ url: webhook.url, event: payload.event, error: result.error, statusCode: result.statusCode }, "Webhook delivery failed");
`Webhook delivery failed to ${webhook.url}: ${result.error}`, } else {
); log.info({ url: webhook.url, event: payload.event, statusCode: result.statusCode }, "Webhook delivered");
} }
}, },
), ),
@@ -210,7 +213,7 @@ export async function sendWebhooksForWorkspace(
// Wait for all to complete but don't block on failures // Wait for all to complete but don't block on failures
await Promise.allSettled(promises); await Promise.allSettled(promises);
} catch (error) { } catch (error) {
console.error("Failed to send webhooks for workspace:", error); log.error({ err: error, workspaceId }, "Failed to send webhooks for workspace");
} }
} }

View File

@@ -39,6 +39,7 @@
"prettier": "@kan/prettier-config", "prettier": "@kan/prettier-config",
"dependencies": { "dependencies": {
"@better-auth/stripe": "^1.4.6", "@better-auth/stripe": "^1.4.6",
"@kan/logger": "workspace:^",
"better-auth": "^1.4.6" "better-auth": "^1.4.6"
} }
} }

View File

@@ -7,8 +7,11 @@ import type { dbClient } from "@kan/db/client";
import * as memberRepo from "@kan/db/repository/member.repo"; import * as memberRepo from "@kan/db/repository/member.repo";
import * as userRepo from "@kan/db/repository/user.repo"; import * as userRepo from "@kan/db/repository/user.repo";
import { notificationClient } from "@kan/email"; import { notificationClient } from "@kan/email";
import { createLogger } from "@kan/logger";
import { createEmailUnsubscribeLink, createS3Client } from "@kan/shared"; import { createEmailUnsubscribeLink, createS3Client } from "@kan/shared";
const log = createLogger("auth");
import { downloadImage } from "./utils"; import { downloadImage } from "./utils";
type BetterAuthUser = { type BetterAuthUser = {
@@ -103,6 +106,7 @@ export function createDatabaseHooks(db: dbClient) {
const unsubscribeUrl = await createEmailUnsubscribeLink(user.id); const unsubscribeUrl = await createEmailUnsubscribeLink(user.id);
log.info({ workflowId: "user-signup", userId: user.id, email: user.email }, "Triggering Novu workflow");
await notificationClient.trigger({ await notificationClient.trigger({
to: { to: {
subscriberId: user.id, subscriberId: user.id,
@@ -122,6 +126,7 @@ export function createDatabaseHooks(db: dbClient) {
}, },
workflowId: "user-signup", workflowId: "user-signup",
}); });
log.info({ workflowId: "user-signup", userId: user.id }, "Novu workflow triggered");
await notificationClient.subscribers.credentials.update( await notificationClient.subscribers.credentials.update(
{ {
@@ -134,7 +139,7 @@ export function createDatabaseHooks(db: dbClient) {
user.id, user.id,
); );
} catch (error) { } catch (error) {
console.error("Error adding user to notification client", error); log.error({ err: error }, "Error adding user to notification client");
} }
} }
}, },

View File

@@ -8,7 +8,10 @@ import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as userRepo from "@kan/db/repository/user.repo"; import * as userRepo from "@kan/db/repository/user.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { sendEmail } from "@kan/email"; import { sendEmail } from "@kan/email";
import { createLogger } from "@kan/logger";
import { generateUID } from "@kan/shared/utils"; import { generateUID } from "@kan/shared/utils";
const log = createLogger("auth");
import { createStripeClient } from "@kan/stripe"; import { createStripeClient } from "@kan/stripe";
import { socialProvidersPlugin } from "./providers"; import { socialProvidersPlugin } from "./providers";
@@ -101,9 +104,7 @@ export function createPlugins(db: dbClient) {
unlimitedSeats: true, unlimitedSeats: true,
}, },
); );
console.log( log.info({ subscriptionId: stripeSubscription.id }, "Pro subscription activated with unlimited seats");
`Pro subscription ${stripeSubscription.id} activated with unlimited seats`,
);
const workspace = await workspaceRepo.getByPublicId( const workspace = await workspaceRepo.getByPublicId(
db, db,
@@ -164,6 +165,13 @@ export function createPlugins(db: dbClient) {
: []), : []),
apiKey({ apiKey({
enableSessionForAPIKeys: true, enableSessionForAPIKeys: true,
customAPIKeyGetter: (ctx) => {
const authorization = ctx.headers?.get("authorization");
if (authorization?.startsWith("Bearer ")) {
return authorization.slice(7);
}
return ctx.headers?.get("x-api-key") ?? undefined;
},
rateLimit: { rateLimit: {
enabled: true, enabled: true,
timeWindow: 1000 * 60, // 1 minute timeWindow: 1000 * 60, // 1 minute
@@ -175,11 +183,7 @@ export function createPlugins(db: dbClient) {
sendMagicLink: async ({ email, url }) => { sendMagicLink: async ({ email, url }) => {
try { try {
const decodedUrl = decodeURIComponent(url); const decodedUrl = decodeURIComponent(url);
console.log("Sending magic link to:", email, "URL:", url); log.info({ email, isInvite: decodedUrl.includes("type=invite") }, "Sending magic link");
console.log(
"Magic link contains invite:",
decodedUrl.includes("type=invite"),
);
if (decodedUrl.includes("type=invite")) { if (decodedUrl.includes("type=invite")) {
let inviterName = ""; let inviterName = "";
let workspaceName = ""; let workspaceName = "";
@@ -211,7 +215,7 @@ export function createPlugins(db: dbClient) {
} }
} }
} catch (error) { } catch (error) {
console.error("Failed to fetch invite details:", error); log.error({ err: error }, "Failed to fetch invite details");
} }
await sendEmail( await sendEmail(
@@ -239,11 +243,7 @@ export function createPlugins(db: dbClient) {
); );
} }
} catch (error) { } catch (error) {
console.error("Error sending magic link:", { log.error({ err: error, email }, "Error sending magic link");
email,
url,
error,
});
} }
}, },
}), }),
@@ -273,7 +273,7 @@ export function createPlugins(db: dbClient) {
picture?: string; picture?: string;
avatar?: string; avatar?: string;
}) => { }) => {
console.log("OIDC profile:", profile); log.debug({ profile }, "OIDC profile received");
const name = const name =
profile.name ?? profile.name ??

View File

@@ -4,8 +4,11 @@ import type Stripe from "stripe";
import type { dbClient } from "@kan/db/client"; import type { dbClient } from "@kan/db/client";
import * as userRepo from "@kan/db/repository/user.repo"; import * as userRepo from "@kan/db/repository/user.repo";
import { notificationClient } from "@kan/email"; import { notificationClient } from "@kan/email";
import { createLogger } from "@kan/logger";
import { createEmailUnsubscribeLink } from "@kan/shared"; import { createEmailUnsubscribeLink } from "@kan/shared";
const log = createLogger("auth");
export async function downloadImage(url: string): Promise<Buffer> { export async function downloadImage(url: string): Promise<Buffer> {
const response = await fetch(url); const response = await fetch(url);
if (!response.ok) { if (!response.ok) {
@@ -32,6 +35,7 @@ export async function triggerWorkflow(
const unsubscribeUrl = await createEmailUnsubscribeLink(user.id); const unsubscribeUrl = await createEmailUnsubscribeLink(user.id);
log.info({ workflowId, userId: user.id }, "Triggering Novu workflow");
await notificationClient.trigger({ await notificationClient.trigger({
to: { to: {
subscriberId: user.id, subscriberId: user.id,
@@ -43,7 +47,8 @@ export async function triggerWorkflow(
}, },
workflowId, workflowId,
}); });
log.info({ workflowId, userId: user.id }, "Novu workflow triggered");
} catch (error) { } catch (error) {
console.error("Error triggering workflow", error); log.error({ err: error, workflowId }, "Error triggering workflow");
} }
} }

View File

@@ -44,6 +44,7 @@
}, },
"dependencies": { "dependencies": {
"@electric-sql/pglite": "^0.3.7", "@electric-sql/pglite": "^0.3.7",
"@kan/logger": "workspace:^",
"@kan/shared": "workspace:^", "@kan/shared": "workspace:^",
"drizzle-orm": "^0.42.0", "drizzle-orm": "^0.42.0",
"drizzle-zod": "^0.5.1", "drizzle-zod": "^0.5.1",

View File

@@ -6,8 +6,12 @@ import { drizzle as drizzlePgLite } from "drizzle-orm/pglite";
import { migrate } from "drizzle-orm/pglite/migrator"; import { migrate } from "drizzle-orm/pglite/migrator";
import { Pool } from "pg"; import { Pool } from "pg";
import { createLogger } from "@kan/logger";
import * as schema from "./schema"; import * as schema from "./schema";
const log = createLogger("db");
export type dbClient = NodePgDatabase<typeof schema> & { export type dbClient = NodePgDatabase<typeof schema> & {
$client: Pool; $client: Pool;
}; };
@@ -16,7 +20,7 @@ export const createDrizzleClient = (): dbClient => {
const connectionString = process.env.POSTGRES_URL; const connectionString = process.env.POSTGRES_URL;
if (!connectionString) { if (!connectionString) {
console.log("POSTGRES_URL environment variable is not set, using PGLite"); log.warn("POSTGRES_URL not set, falling back to PGLite");
const client = new PGlite({ const client = new PGlite({
dataDir: "./pgdata", dataDir: "./pgdata",

View File

@@ -402,8 +402,6 @@ export const softDeleteById = async (
.groupBy(lists.index) .groupBy(lists.index)
.having(gt(countExpr, 1)); .having(gt(countExpr, 1));
console.log(duplicateIndices);
if (duplicateIndices.length > 0) { if (duplicateIndices.length > 0) {
throw new Error( throw new Error(
`Duplicate indices found after reordering in board ${result.boardId}`, `Duplicate indices found after reordering in board ${result.boardId}`,

View File

@@ -23,6 +23,7 @@
"typecheck": "tsc --noEmit --emitDeclarationOnly false" "typecheck": "tsc --noEmit --emitDeclarationOnly false"
}, },
"dependencies": { "dependencies": {
"@kan/logger": "workspace:^",
"@novu/api": "^3.11.0", "@novu/api": "^3.11.0",
"@react-email/components": "^1.0.1", "@react-email/components": "^1.0.1",
"nodemailer": "^7.0.3", "nodemailer": "^7.0.3",

View File

@@ -1,5 +1,8 @@
import { render } from "@react-email/render"; import { render } from "@react-email/render";
import nodemailer from "nodemailer"; import nodemailer from "nodemailer";
import { createLogger } from "@kan/logger";
const log = createLogger("email");
import JoinWorkspaceTemplate from "./templates/join-workspace"; import JoinWorkspaceTemplate from "./templates/join-workspace";
import MagicLinkTemplate from "./templates/magic-link"; import MagicLinkTemplate from "./templates/magic-link";
@@ -44,6 +47,7 @@ export const sendEmail = async (
template: Templates, template: Templates,
data: Record<string, string>, data: Record<string, string>,
) => { ) => {
log.info({ to, subject, template }, "Sending email");
try { try {
const EmailTemplate = emailTemplates[template]; const EmailTemplate = emailTemplates[template];
@@ -62,16 +66,10 @@ export const sendEmail = async (
throw new Error(`Failed to send email: ${response.response}`); throw new Error(`Failed to send email: ${response.response}`);
} }
log.info({ to, subject, template, messageId: response.messageId }, "Email sent");
return response; return response;
} catch (error) { } catch (error) {
console.error("Email sending failed:", { log.error({ err: error, to, from: process.env.EMAIL_FROM, subject, template }, "Email sending failed");
to,
from: process.env.EMAIL_FROM,
subject,
template,
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
});
throw error; throw error;
} }
}; };

View File

@@ -0,0 +1,34 @@
{
"name": "@kan/logger",
"private": true,
"version": "0.1.0",
"type": "module",
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./src/index.ts"
}
},
"license": "GPL-3.0",
"scripts": {
"build": "tsc",
"clean": "git clean -xdf .cache .turbo dist node_modules",
"dev": "tsc",
"format": "prettier --check . --ignore-path ../../.gitignore",
"lint": "eslint",
"typecheck": "tsc --noEmit --emitDeclarationOnly false"
},
"dependencies": {
"pino": "^9.14.0",
"pino-pretty": "^13.1.3"
},
"devDependencies": {
"@kan/eslint-config": "workspace:*",
"@kan/prettier-config": "workspace:*",
"@kan/tsconfig": "workspace:*",
"eslint": "catalog:",
"prettier": "catalog:",
"typescript": "catalog:"
},
"prettier": "@kan/prettier-config"
}

View File

@@ -0,0 +1,20 @@
import pino from "pino";
const isDev = process.env.NODE_ENV !== "production";
const level = process.env.LOG_LEVEL || (isDev ? "debug" : "info");
export const logger = pino({
level,
...(isDev && {
transport: {
target: "pino-pretty",
options: {
colorize: true,
ignore: "pid,hostname",
translateTime: "HH:MM:ss",
},
},
}),
});
export const createLogger = (module: string) => logger.child({ module });

View File

@@ -0,0 +1,6 @@
{
"extends": "@kan/tsconfig/internal-package.json",
"compilerOptions": {},
"include": ["*.ts", "src"],
"exclude": ["node_modules"]
}

View File

@@ -5,3 +5,4 @@ export * from "./email";
export * from "./dueDateFilters"; export * from "./dueDateFilters";
export * from "./s3"; export * from "./s3";
export * from "./mentions"; export * from "./mentions";
export * from "./sanitize";

View File

@@ -0,0 +1,6 @@
/**
* Strips all HTML tags from a string, returning plain text.
* Use this on any user-supplied text field before storing or displaying.
*/
export const stripHtml = (value: string): string =>
value.replace(/<[^>]*>/g, "").trim();

271
pnpm-lock.yaml generated
View File

@@ -103,6 +103,9 @@ importers:
'@kan/db': '@kan/db':
specifier: workspace:^ specifier: workspace:^
version: link:../../packages/db version: link:../../packages/db
'@kan/logger':
specifier: workspace:^
version: link:../../packages/logger
'@kan/shared': '@kan/shared':
specifier: workspace:^ specifier: workspace:^
version: link:../../packages/shared version: link:../../packages/shared
@@ -311,6 +314,9 @@ importers:
'@kan/email': '@kan/email':
specifier: workspace:^ specifier: workspace:^
version: link:../email version: link:../email
'@kan/logger':
specifier: workspace:^
version: link:../logger
'@kan/shared': '@kan/shared':
specifier: workspace:^ specifier: workspace:^
version: link:../shared version: link:../shared
@@ -353,13 +359,16 @@ importers:
version: 5.9.2 version: 5.9.2
vitest: vitest:
specifier: ^3.0.0 specifier: ^3.0.0
version: 3.2.4(@types/debug@4.1.12)(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1) version: 3.2.4(@types/debug@4.1.12)(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)
packages/auth: packages/auth:
dependencies: dependencies:
'@better-auth/stripe': '@better-auth/stripe':
specifier: ^1.4.6 specifier: ^1.4.6
version: 1.4.6(@better-auth/core@1.4.6(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.1.5(zod@4.1.13))(jose@6.1.3)(kysely@0.28.8)(nanostores@1.1.0))(better-auth@1.4.6(next@16.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(stripe@18.5.0(@types/node@25.0.0)) version: 1.4.6(@better-auth/core@1.4.6(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.1.5(zod@4.1.13))(jose@6.1.3)(kysely@0.28.8)(nanostores@1.1.0))(better-auth@1.4.6(next@16.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(stripe@18.5.0(@types/node@25.0.0))
'@kan/logger':
specifier: workspace:^
version: link:../logger
better-auth: better-auth:
specifier: ^1.4.6 specifier: ^1.4.6
version: 1.4.6(next@16.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 1.4.6(next@16.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -400,6 +409,9 @@ importers:
'@electric-sql/pglite': '@electric-sql/pglite':
specifier: ^0.3.7 specifier: ^0.3.7
version: 0.3.7 version: 0.3.7
'@kan/logger':
specifier: workspace:^
version: link:../logger
'@kan/shared': '@kan/shared':
specifier: workspace:^ specifier: workspace:^
version: link:../shared version: link:../shared
@@ -452,6 +464,9 @@ importers:
packages/email: packages/email:
dependencies: dependencies:
'@kan/logger':
specifier: workspace:^
version: link:../logger
'@novu/api': '@novu/api':
specifier: ^3.11.0 specifier: ^3.11.0
version: 3.11.0 version: 3.11.0
@@ -487,6 +502,34 @@ importers:
specifier: 'catalog:' specifier: 'catalog:'
version: 5.9.2 version: 5.9.2
packages/logger:
dependencies:
pino:
specifier: ^9.14.0
version: 9.14.0
pino-pretty:
specifier: ^13.1.3
version: 13.1.3
devDependencies:
'@kan/eslint-config':
specifier: workspace:*
version: link:../../tooling/eslint
'@kan/prettier-config':
specifier: workspace:*
version: link:../../tooling/prettier
'@kan/tsconfig':
specifier: workspace:*
version: link:../../tooling/typescript
eslint:
specifier: 'catalog:'
version: 9.34.0(jiti@2.6.1)
prettier:
specifier: 'catalog:'
version: 3.6.2
typescript:
specifier: 'catalog:'
version: 5.9.2
packages/shared: packages/shared:
dependencies: dependencies:
'@aws-sdk/client-s3': '@aws-sdk/client-s3':
@@ -2976,6 +3019,9 @@ packages:
'@octokit/types@9.3.2': '@octokit/types@9.3.2':
resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==}
'@pinojs/redact@0.4.0':
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
'@pkgjs/parseargs@0.11.0': '@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'} engines: {node: '>=14'}
@@ -4468,6 +4514,10 @@ packages:
asynckit@0.4.0: asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
atomic-sleep@1.0.0:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
atomically@2.1.0: atomically@2.1.0:
resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==}
@@ -4809,6 +4859,9 @@ packages:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'} engines: {node: '>=12.5.0'}
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
colors@1.0.3: colors@1.0.3:
resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
engines: {node: '>=0.1.90'} engines: {node: '>=0.1.90'}
@@ -4964,6 +5017,9 @@ packages:
date-fns@4.1.0: date-fns@4.1.0:
resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
dateformat@4.6.3:
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
debounce-fn@6.0.0: debounce-fn@6.0.0:
resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -4989,15 +5045,6 @@ packages:
supports-color: supports-color:
optional: true optional: true
debug@4.4.1:
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
debug@4.4.3: debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'} engines: {node: '>=6.0'}
@@ -5270,6 +5317,9 @@ packages:
emoji-regex@9.2.2: emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
engine.io-parser@5.2.3: engine.io-parser@5.2.3:
resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
@@ -5533,6 +5583,9 @@ packages:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'} engines: {node: '>=4'}
fast-copy@4.0.2:
resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==}
fast-deep-equal@3.1.3: fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -5546,6 +5599,9 @@ packages:
fast-levenshtein@2.0.6: fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fast-safe-stringify@2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
fast-uri@3.1.0: fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
@@ -5818,6 +5874,9 @@ packages:
header-case@1.0.1: header-case@1.0.1:
resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==}
help-me@5.0.0:
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
hoist-non-react-statics@3.3.2: hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
@@ -6181,6 +6240,10 @@ packages:
jose@6.1.3: jose@6.1.3:
resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==}
joycon@3.1.1:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
js-sha256@0.10.1: js-sha256@0.10.1:
resolution: {integrity: sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==} resolution: {integrity: sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==}
@@ -6719,10 +6782,6 @@ packages:
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
hasBin: true hasBin: true
minimatch@10.0.3:
resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
engines: {node: 20 || >=22}
minimatch@10.1.1: minimatch@10.1.1:
resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
engines: {node: 20 || >=22} engines: {node: 20 || >=22}
@@ -6952,6 +7011,10 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
once@1.4.0: once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -7143,6 +7206,23 @@ packages:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
pino-abstract-transport@2.0.0:
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
pino-abstract-transport@3.0.0:
resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
pino-pretty@13.1.3:
resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==}
hasBin: true
pino-std-serializers@7.1.0:
resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
pino@9.14.0:
resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==}
hasBin: true
pirates@4.0.7: pirates@4.0.7:
resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@@ -7314,6 +7394,9 @@ packages:
resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'} engines: {node: '>=6'}
process-warning@5.0.0:
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
prompts@2.4.2: prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@@ -7394,6 +7477,9 @@ packages:
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
hasBin: true hasBin: true
pump@3.0.4:
resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==}
punycode.js@2.3.1: punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -7409,6 +7495,9 @@ packages:
queue-microtask@1.2.3: queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
quick-format-unescaped@4.0.4:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
radix3@1.1.2: radix3@1.1.2:
resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
@@ -7523,6 +7612,10 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'} engines: {node: '>= 14.18.0'}
real-require@0.2.0:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
rechoir@0.6.2: rechoir@0.6.2:
resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
@@ -7694,6 +7787,10 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
safe-stable-stringify@2.5.0:
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
safer-buffer@2.1.2: safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -7711,6 +7808,9 @@ packages:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'} engines: {node: '>=4'}
secure-json-parse@4.1.0:
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
selderee@0.11.0: selderee@0.11.0:
resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
@@ -7843,6 +7943,9 @@ packages:
resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
sonic-boom@4.2.1:
resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
source-map-js@1.2.1: source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -7966,6 +8069,10 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'} engines: {node: '>=8'}
strip-json-comments@5.0.3:
resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==}
engines: {node: '>=14.16'}
strip-literal@3.1.0: strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
@@ -8098,6 +8205,9 @@ packages:
thenify@3.3.1: thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
thread-stream@3.1.0:
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
through@2.3.8: through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
@@ -10483,7 +10593,7 @@ snapshots:
'@eslint/config-array@0.21.0': '@eslint/config-array@0.21.0':
dependencies: dependencies:
'@eslint/object-schema': 2.1.6 '@eslint/object-schema': 2.1.6
debug: 4.4.1 debug: 4.4.3
minimatch: 3.1.2 minimatch: 3.1.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -10497,7 +10607,7 @@ snapshots:
'@eslint/eslintrc@3.3.1': '@eslint/eslintrc@3.3.1':
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
debug: 4.4.1 debug: 4.4.3
espree: 10.4.0 espree: 10.4.0
globals: 14.0.0 globals: 14.0.0
ignore: 5.3.2 ignore: 5.3.2
@@ -11000,7 +11110,7 @@ snapshots:
dependencies: dependencies:
'@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3) '@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3)
'@mintlify/prebuild': 1.0.33(@apidevtools/swagger-parser@10.1.1(openapi-types@12.1.3))(@mintlify/models@0.0.29(openapi-types@12.1.3))(@mintlify/validation@0.1.63(@mintlify/models@0.0.29(openapi-types@12.1.3))(openapi-types@12.1.3))(fs-extra@11.3.1)(gray-matter@4.0.3)(openapi-types@12.1.3)(unist-util-visit@4.1.2) '@mintlify/prebuild': 1.0.33(@apidevtools/swagger-parser@10.1.1(openapi-types@12.1.3))(@mintlify/models@0.0.29(openapi-types@12.1.3))(@mintlify/validation@0.1.63(@mintlify/models@0.0.29(openapi-types@12.1.3))(openapi-types@12.1.3))(fs-extra@11.3.1)(gray-matter@4.0.3)(openapi-types@12.1.3)(unist-util-visit@4.1.2)
chalk: 5.6.0 chalk: 5.6.2
fs-extra: 11.3.1 fs-extra: 11.3.1
is-absolute-url: 4.0.1 is-absolute-url: 4.0.1
openapi-types: 12.1.3 openapi-types: 12.1.3
@@ -11037,7 +11147,7 @@ snapshots:
'@mintlify/validation': 0.1.63(@mintlify/models@0.0.29(openapi-types@12.1.3))(openapi-types@12.1.3) '@mintlify/validation': 0.1.63(@mintlify/models@0.0.29(openapi-types@12.1.3))(openapi-types@12.1.3)
'@octokit/rest': 19.0.13 '@octokit/rest': 19.0.13
axios: 1.11.0 axios: 1.11.0
chalk: 5.6.0 chalk: 5.6.2
chokidar: 3.6.0 chokidar: 3.6.0
fs-extra: 11.3.1 fs-extra: 11.3.1
gray-matter: 4.0.3 gray-matter: 4.0.3
@@ -11226,6 +11336,8 @@ snapshots:
dependencies: dependencies:
'@octokit/openapi-types': 18.1.1 '@octokit/openapi-types': 18.1.1
'@pinojs/redact@0.4.0': {}
'@pkgjs/parseargs@0.11.0': '@pkgjs/parseargs@0.11.0':
optional: true optional: true
@@ -12684,13 +12796,13 @@ snapshots:
optionalDependencies: optionalDependencies:
vite: 7.3.1(@types/node@20.19.11)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.1) vite: 7.3.1(@types/node@20.19.11)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.1)
'@vitest/mocker@3.2.4(vite@7.3.1(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1))': '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))':
dependencies: dependencies:
'@vitest/spy': 3.2.4 '@vitest/spy': 3.2.4
estree-walker: 3.0.3 estree-walker: 3.0.3
magic-string: 0.30.21 magic-string: 0.30.21
optionalDependencies: optionalDependencies:
vite: 7.3.1(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1) vite: 7.3.1(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)
'@vitest/pretty-format@3.2.4': '@vitest/pretty-format@3.2.4':
dependencies: dependencies:
@@ -12977,6 +13089,8 @@ snapshots:
asynckit@0.4.0: {} asynckit@0.4.0: {}
atomic-sleep@1.0.0: {}
atomically@2.1.0: atomically@2.1.0:
dependencies: dependencies:
stubborn-fs: 2.0.0 stubborn-fs: 2.0.0
@@ -13341,6 +13455,8 @@ snapshots:
color-convert: 2.0.1 color-convert: 2.0.1
color-string: 1.9.1 color-string: 1.9.1
colorette@2.0.20: {}
colors@1.0.3: {} colors@1.0.3: {}
combined-stream@1.0.8: combined-stream@1.0.8:
@@ -13488,6 +13604,8 @@ snapshots:
date-fns@4.1.0: {} date-fns@4.1.0: {}
dateformat@4.6.3: {}
debounce-fn@6.0.0: debounce-fn@6.0.0:
dependencies: dependencies:
mimic-function: 5.0.1 mimic-function: 5.0.1
@@ -13502,10 +13620,6 @@ snapshots:
dependencies: dependencies:
ms: 2.1.3 ms: 2.1.3
debug@4.4.1:
dependencies:
ms: 2.1.3
debug@4.4.3: debug@4.4.3:
dependencies: dependencies:
ms: 2.1.3 ms: 2.1.3
@@ -13685,6 +13799,10 @@ snapshots:
emoji-regex@9.2.2: {} emoji-regex@9.2.2: {}
end-of-stream@1.4.5:
dependencies:
once: 1.4.0
engine.io-parser@5.2.3: {} engine.io-parser@5.2.3: {}
engine.io@6.6.4: engine.io@6.6.4:
@@ -14112,7 +14230,7 @@ snapshots:
ajv: 6.12.6 ajv: 6.12.6
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 4.4.1 debug: 4.4.3
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint-scope: 8.4.0 eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
@@ -14154,7 +14272,7 @@ snapshots:
ajv: 6.12.6 ajv: 6.12.6
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 4.4.1 debug: 4.4.3
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint-scope: 8.4.0 eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
@@ -14243,6 +14361,8 @@ snapshots:
iconv-lite: 0.4.24 iconv-lite: 0.4.24
tmp: 0.0.33 tmp: 0.0.33
fast-copy@4.0.2: {}
fast-deep-equal@3.1.3: {} fast-deep-equal@3.1.3: {}
fast-glob@3.3.3: fast-glob@3.3.3:
@@ -14257,6 +14377,8 @@ snapshots:
fast-levenshtein@2.0.6: {} fast-levenshtein@2.0.6: {}
fast-safe-stringify@2.1.1: {}
fast-uri@3.1.0: {} fast-uri@3.1.0: {}
fast-xml-parser@5.2.5: fast-xml-parser@5.2.5:
@@ -14448,7 +14570,7 @@ snapshots:
dependencies: dependencies:
foreground-child: 3.3.1 foreground-child: 3.3.1
jackspeak: 4.1.1 jackspeak: 4.1.1
minimatch: 10.0.3 minimatch: 10.1.1
minipass: 7.1.2 minipass: 7.1.2
package-json-from-dist: 1.0.1 package-json-from-dist: 1.0.1
path-scurry: 2.0.0 path-scurry: 2.0.0
@@ -14581,6 +14703,8 @@ snapshots:
no-case: 2.3.2 no-case: 2.3.2
upper-case: 1.1.3 upper-case: 1.1.3
help-me@5.0.0: {}
hoist-non-react-statics@3.3.2: hoist-non-react-statics@3.3.2:
dependencies: dependencies:
react-is: 16.13.1 react-is: 16.13.1
@@ -14971,6 +15095,8 @@ snapshots:
jose@6.1.3: {} jose@6.1.3: {}
joycon@3.1.1: {}
js-sha256@0.10.1: {} js-sha256@0.10.1: {}
js-tokens@4.0.0: {} js-tokens@4.0.0: {}
@@ -15099,7 +15225,7 @@ snapshots:
log-symbols@5.1.0: log-symbols@5.1.0:
dependencies: dependencies:
chalk: 5.6.0 chalk: 5.6.2
is-unicode-supported: 1.3.0 is-unicode-supported: 1.3.0
log-symbols@6.0.0: log-symbols@6.0.0:
@@ -15854,10 +15980,6 @@ snapshots:
mini-svg-data-uri@1.4.4: {} mini-svg-data-uri@1.4.4: {}
minimatch@10.0.3:
dependencies:
'@isaacs/brace-expansion': 5.0.0
minimatch@10.1.1: minimatch@10.1.1:
dependencies: dependencies:
'@isaacs/brace-expansion': 5.0.0 '@isaacs/brace-expansion': 5.0.0
@@ -16084,6 +16206,8 @@ snapshots:
define-properties: 1.2.1 define-properties: 1.2.1
es-object-atoms: 1.1.1 es-object-atoms: 1.1.1
on-exit-leak-free@2.1.2: {}
once@1.4.0: once@1.4.0:
dependencies: dependencies:
wrappy: 1.0.2 wrappy: 1.0.2
@@ -16142,7 +16266,7 @@ snapshots:
ora@6.3.1: ora@6.3.1:
dependencies: dependencies:
chalk: 5.6.0 chalk: 5.6.2
cli-cursor: 4.0.0 cli-cursor: 4.0.0
cli-spinners: 2.9.2 cli-spinners: 2.9.2
is-interactive: 2.0.0 is-interactive: 2.0.0
@@ -16321,6 +16445,46 @@ snapshots:
pify@2.3.0: {} pify@2.3.0: {}
pino-abstract-transport@2.0.0:
dependencies:
split2: 4.2.0
pino-abstract-transport@3.0.0:
dependencies:
split2: 4.2.0
pino-pretty@13.1.3:
dependencies:
colorette: 2.0.20
dateformat: 4.6.3
fast-copy: 4.0.2
fast-safe-stringify: 2.1.1
help-me: 5.0.0
joycon: 3.1.1
minimist: 1.2.8
on-exit-leak-free: 2.1.2
pino-abstract-transport: 3.0.0
pump: 3.0.4
secure-json-parse: 4.1.0
sonic-boom: 4.2.1
strip-json-comments: 5.0.3
pino-std-serializers@7.1.0: {}
pino@9.14.0:
dependencies:
'@pinojs/redact': 0.4.0
atomic-sleep: 1.0.0
on-exit-leak-free: 2.1.2
pino-abstract-transport: 2.0.0
pino-std-serializers: 7.1.0
process-warning: 5.0.0
quick-format-unescaped: 4.0.4
real-require: 0.2.0
safe-stable-stringify: 2.5.0
sonic-boom: 4.2.1
thread-stream: 3.1.0
pirates@4.0.7: {} pirates@4.0.7: {}
pkg-types@2.3.0: pkg-types@2.3.0:
@@ -16428,6 +16592,8 @@ snapshots:
prismjs@1.30.0: {} prismjs@1.30.0: {}
process-warning@5.0.0: {}
prompts@2.4.2: prompts@2.4.2:
dependencies: dependencies:
kleur: 3.0.3 kleur: 3.0.3
@@ -16563,6 +16729,11 @@ snapshots:
dependencies: dependencies:
commander: 10.0.1 commander: 10.0.1
pump@3.0.4:
dependencies:
end-of-stream: 1.4.5
once: 1.4.0
punycode.js@2.3.1: {} punycode.js@2.3.1: {}
punycode@2.3.1: {} punycode@2.3.1: {}
@@ -16573,6 +16744,8 @@ snapshots:
queue-microtask@1.2.3: {} queue-microtask@1.2.3: {}
quick-format-unescaped@4.0.4: {}
radix3@1.1.2: {} radix3@1.1.2: {}
raf-schd@4.0.3: {} raf-schd@4.0.3: {}
@@ -16726,6 +16899,8 @@ snapshots:
readdirp@4.1.2: {} readdirp@4.1.2: {}
real-require@0.2.0: {}
rechoir@0.6.2: rechoir@0.6.2:
dependencies: dependencies:
resolve: 1.22.10 resolve: 1.22.10
@@ -16979,6 +17154,8 @@ snapshots:
es-errors: 1.3.0 es-errors: 1.3.0
is-regex: 1.2.1 is-regex: 1.2.1
safe-stable-stringify@2.5.0: {}
safer-buffer@2.1.2: {} safer-buffer@2.1.2: {}
sax@1.2.1: {} sax@1.2.1: {}
@@ -16999,6 +17176,8 @@ snapshots:
extend-shallow: 2.0.1 extend-shallow: 2.0.1
kind-of: 6.0.3 kind-of: 6.0.3
secure-json-parse@4.1.0: {}
selderee@0.11.0: selderee@0.11.0:
dependencies: dependencies:
parseley: 0.12.1 parseley: 0.12.1
@@ -17212,6 +17391,10 @@ snapshots:
ip-address: 10.0.1 ip-address: 10.0.1
smart-buffer: 4.2.0 smart-buffer: 4.2.0
sonic-boom@4.2.1:
dependencies:
atomic-sleep: 1.0.0
source-map-js@1.2.1: {} source-map-js@1.2.1: {}
source-map-support@0.5.21: source-map-support@0.5.21:
@@ -17350,6 +17533,8 @@ snapshots:
strip-json-comments@3.1.1: {} strip-json-comments@3.1.1: {}
strip-json-comments@5.0.3: {}
strip-literal@3.1.0: strip-literal@3.1.0:
dependencies: dependencies:
js-tokens: 9.0.1 js-tokens: 9.0.1
@@ -17520,6 +17705,10 @@ snapshots:
dependencies: dependencies:
any-promise: 1.3.0 any-promise: 1.3.0
thread-stream@3.1.0:
dependencies:
real-require: 0.2.0
through@2.3.8: {} through@2.3.8: {}
tiny-invariant@1.3.3: {} tiny-invariant@1.3.3: {}
@@ -17955,13 +18144,13 @@ snapshots:
- tsx - tsx
- yaml - yaml
vite-node@3.2.4(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1): vite-node@3.2.4(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.4.3 debug: 4.4.3
es-module-lexer: 1.7.0 es-module-lexer: 1.7.0
pathe: 2.0.3 pathe: 2.0.3
vite: 7.3.1(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1) vite: 7.3.1(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- jiti - jiti
@@ -17991,7 +18180,7 @@ snapshots:
terser: 5.44.1 terser: 5.44.1
yaml: 2.8.1 yaml: 2.8.1
vite@7.3.1(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1): vite@7.3.1(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1):
dependencies: dependencies:
esbuild: 0.27.2 esbuild: 0.27.2
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
@@ -18002,7 +18191,7 @@ snapshots:
optionalDependencies: optionalDependencies:
'@types/node': 25.0.0 '@types/node': 25.0.0
fsevents: 2.3.3 fsevents: 2.3.3
jiti: 2.4.2 jiti: 2.6.1
terser: 5.44.1 terser: 5.44.1
yaml: 2.8.1 yaml: 2.8.1
@@ -18048,11 +18237,11 @@ snapshots:
- tsx - tsx
- yaml - yaml
vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1): vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1):
dependencies: dependencies:
'@types/chai': 5.2.3 '@types/chai': 5.2.3
'@vitest/expect': 3.2.4 '@vitest/expect': 3.2.4
'@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1)) '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))
'@vitest/pretty-format': 3.2.4 '@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4 '@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4 '@vitest/snapshot': 3.2.4
@@ -18070,8 +18259,8 @@ snapshots:
tinyglobby: 0.2.15 tinyglobby: 0.2.15
tinypool: 1.1.1 tinypool: 1.1.1
tinyrainbow: 2.0.0 tinyrainbow: 2.0.0
vite: 7.3.1(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1) vite: 7.3.1(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)
vite-node: 3.2.4(@types/node@25.0.0)(jiti@2.4.2)(terser@5.44.1)(yaml@2.8.1) vite-node: 3.2.4(@types/node@25.0.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/debug': 4.1.12 '@types/debug': 4.1.12

View File

@@ -129,7 +129,8 @@
"BETTER_AUTH_TRUSTED_ORIGINS", "BETTER_AUTH_TRUSTED_ORIGINS",
"NOVU_API_KEY", "NOVU_API_KEY",
"EMAIL_UNSUBSCRIBE_SECRET", "EMAIL_UNSUBSCRIBE_SECRET",
"REDIS_URL" "REDIS_URL",
"LOG_LEVEL"
], ],
"globalPassThroughEnv": [ "globalPassThroughEnv": [
"NODE_ENV", "NODE_ENV",