Compare commits
7 Commits
feat/self-
...
feat/local
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ac89ba8c0 | ||
|
|
a2f7582999 | ||
|
|
8a93951464 | ||
|
|
bf2db74528 | ||
|
|
f564b52159 | ||
|
|
2ef2493bb5 | ||
|
|
f105e951e6 |
@@ -21,7 +21,6 @@ S3_REGION=
|
||||
S3_ENDPOINT=
|
||||
S3_ACCESS_KEY_ID=
|
||||
S3_SECRET_ACCESS_KEY=
|
||||
S3_FORCE_PATH_STYLE=
|
||||
NEXT_PUBLIC_STORAGE_URL=
|
||||
NEXT_PUBLIC_AVATAR_BUCKET_NAME=
|
||||
NEXT_PUBLIC_STORAGE_DOMAIN=
|
||||
|
||||
105
CHANGELOG.md
105
CHANGELOG.md
@@ -1,105 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased](https://github.com/kanbn/kan/compare/v0.2.3...HEAD)
|
||||
|
||||
## [0.2.3](https://github.com/kanbn/kan/compare/v0.2.2...v0.2.3) - 2025-07-07
|
||||
|
||||
### Added
|
||||
|
||||
- Mobile support with responsive navigation and layout
|
||||
- Template selection when creating new boards with predefined lists and labels
|
||||
- S3_FORCE_PATH_STYLE configuration for MinIO compatibility
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved mobile UI styling and layout containers
|
||||
- Enhanced iOS mobile support with viewport fixes and zoom prevention
|
||||
- Improved card view layout for mobile devices
|
||||
|
||||
### Fixed
|
||||
|
||||
- Mobile dashboard min-width issues
|
||||
- Dynamic viewport height on mobile devices
|
||||
- Scroll functionality on card pages
|
||||
|
||||
## [0.2.2](https://github.com/kanbn/kan/compare/v0.2.1...v0.2.2) - 2025-06-28
|
||||
|
||||
### Added
|
||||
|
||||
- Localization and multi-language support
|
||||
- URLs are now rendered as clickable links in card descriptions
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved email configuration with optional SMTP authentication
|
||||
|
||||
## [0.2.1](https://github.com/kanbn/kan/compare/v0.2.0...v0.2.1) - 2025-06-19
|
||||
|
||||
### Added
|
||||
|
||||
- PostHog analytics integration
|
||||
- Debug logging for email functionality
|
||||
- Standalone mode support for Next.js
|
||||
- Environment variable for configuring web port
|
||||
- Docker Compose setup with PostgreSQL
|
||||
|
||||
### Changed
|
||||
|
||||
- SMTP authentication is now optional
|
||||
- Added `SMTP_SECURE` configuration option
|
||||
- Improved Docker build process with better context handling
|
||||
|
||||
### Fixed
|
||||
|
||||
- Default output mode for Next.js builds
|
||||
- Container environment variable configuration
|
||||
- Docker Compose volume naming
|
||||
- Build context and static file copying in Docker
|
||||
- Comment rendering inside contenteditable elements
|
||||
|
||||
## [0.2.0](https://github.com/kanbn/kan/compare/v0.1.0...v0.2.0) - 2025-06-10
|
||||
|
||||
### Added
|
||||
|
||||
- Trello integration with OAuth authentication and user field mapping
|
||||
- Board visibility controls with dropdown menu and success notifications
|
||||
- Markdown editor for card descriptions
|
||||
- Email/password authentication for self-hosters
|
||||
- Account deletion functionality with cascade delete for workspaces
|
||||
- Enhanced scrollbar styles for dark mode
|
||||
|
||||
### Changed
|
||||
|
||||
- Simplified auth configuration to use `NEXT_PUBLIC_BASE_URL` instead of `BETTER_AUTH_URL`
|
||||
- Updated self-hosting documentation
|
||||
- Improved database schema with relation names
|
||||
|
||||
### Fixed
|
||||
|
||||
- List buttons stacking issue
|
||||
- Editor onChange prop is now optional
|
||||
- Renamed markdown prop to content in Editor component
|
||||
- Router navigation for disabled signup redirects
|
||||
|
||||
## [0.1.0](https://github.com/kanbn/kan/releases/tag/v0.1.0) - 2025-06-02
|
||||
|
||||
### Added
|
||||
|
||||
- Initial release of Kan
|
||||
- Core project management features
|
||||
- Board, list, and card management
|
||||
- User authentication system
|
||||
- Workspace collaboration
|
||||
- Comment system
|
||||
- Activity logging
|
||||
- Docker deployment support
|
||||
- Self-hosting capabilities
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated license link in footer
|
||||
@@ -162,7 +162,6 @@ pnpm dev
|
||||
| `S3_ENDPOINT` | S3 endpoint URL | For file uploads | `https://xxx.r2.cloudflarestorage.com` |
|
||||
| `S3_ACCESS_KEY_ID` | S3 access key | For file uploads | `xxx` |
|
||||
| `S3_SECRET_ACCESS_KEY` | S3 secret key | For file uploads | `xxx` |
|
||||
| `S3_FORCE_PATH_STYLE` | Use path-style URLs for S3 | For file uploads | `true` |
|
||||
| `NEXT_PUBLIC_STORAGE_URL` | Storage service URL | For file uploads | `https://storage.kanbn.com` |
|
||||
| `NEXT_PUBLIC_STORAGE_DOMAIN` | Storage domain name | For file uploads | `kanbn.com` |
|
||||
| `NEXT_PUBLIC_AVATAR_BUCKET_NAME` | S3 bucket name for avatars | For file uploads | `avatars` |
|
||||
|
||||
@@ -27,23 +27,15 @@ checksums:
|
||||
An%20error%20occurred%20while%20disconnecting%20your%20Trello%20account./singular: 0aa3973b860c1faf8d9123aebf567e40
|
||||
API%20keys/singular: 07f3620a30e08136f0b072c9af8d1eef
|
||||
API%20Reference/singular: 7dcc877064bfdf889ec55dbc9e06a242
|
||||
Applicants/singular: 4babd8331a1441e91087f855f43e57f8
|
||||
Approval/singular: 2f5426445800ecd5a3102aac940d459c
|
||||
Are%20you%20sure%20want%20to%20remove%20%7BentityLabel%7D%3F/singular: f9b67026c5ef86ac4d5944380d571961
|
||||
Are%20you%20sure%20you%20want%20to%20delete%20the%20workspace%20%7B0%7D%3F/singular: 27ba2854202dd77c51e78c64e5c93946
|
||||
Are%20you%20sure%20you%20want%20to%20delete%20this%20card%3F/singular: 131a5a7cccca7be8b32c987d9fa0b0c0
|
||||
Are%20you%20sure%20you%20want%20to%20delete%20this%20comment%3F/singular: 55fe6f1b52b71b91b2a079cfda3cc7fe
|
||||
Are%20you%20sure%20you%20want%20to%20delete%20your%20account%3F/singular: 428b74d781063224c3e63980e1094ec3
|
||||
assigned%20%3C0%3E%7BmemberName%7D%3C%2F0%3E%20to%20the%20card/singular: 4fb1c419a78a0f010a3e5790801551fc
|
||||
Awaiting%20Customer/singular: 122c108794f321c10e05a08f09b11457
|
||||
Backlog/singular: 35919fd5b10ad212839a75e72829fe4e
|
||||
Basic%20Kanban/singular: e46ebc406749486f3907436970d4d6c7
|
||||
Billing/singular: b01dbdd049ebbd4a349fa64d6ce65a3b
|
||||
Billing%20portal/singular: dc3afa14ffe19f5920992a0c9d49d525
|
||||
Blog%20Post/singular: 38e027f212be445dc530e427fc642a20
|
||||
Board/singular: 101ff39aab674c033c15ab978d0d8bac
|
||||
Board%20name%20cannot%20exceed%20100%20characters/singular: 985c0177744ec56d8dac84f66ec284ca
|
||||
Board%20name%20is%20required/singular: dbd0c6cc945ab19e702fc27f970a023b
|
||||
Board%20not%20found/singular: 5af9844595fa8aed5985066620435515
|
||||
Board%20URL%20can%20only%20contain%20letters%2C%20numbers%2C%20and%20hyphens/singular: ba018946ffdf85e55d701a9c27595b4d
|
||||
Board%20URL%20cannot%20exceed%2060%20characters/singular: 8fd3417559a56aa42d297b14d480c382
|
||||
@@ -53,9 +45,6 @@ checksums:
|
||||
Board%20visibility%20updated/singular: 8e2f5d622fa9c94481e7c1629a154ecf
|
||||
Boards/singular: 8fff51c5872e051beb9b718336665e80
|
||||
Boards%20%7C%20%7B0%7D/singular: 70c349df806f4b2d8bd28136a45496f0
|
||||
Brainstorming/singular: 736332f2e4488609e42d2be8547d296e
|
||||
Bug/singular: 4509fffdb5931f8905063c80cf802d71
|
||||
Bug%20Report/singular: e558d1f100e21230c2f495a8913ac5ec
|
||||
Cancel/singular: 2e2a849c2223911717de8caa2c71bade
|
||||
Card%20not%20found/singular: 91509e2f92b0b3b11330b6983139fdbf
|
||||
Card%20title/singular: 7c34f59f4005e6cb3a6ff546ea0b96e3
|
||||
@@ -63,12 +52,10 @@ checksums:
|
||||
Check%20your%20inbox/singular: e9a430fcd298def74212238df0f680d6
|
||||
Clear%20filters/singular: 8f40ab5af527e4b190da94e7b6221379
|
||||
Click%20on%20the%20link%20we've%20sent%20to%20%7BmagicLinkRecipient%7D%20to%20sign%20in./singular: 210b6ff8727f976182ec3f29ea3c7667
|
||||
Code%20Review/singular: a2da6c2339301e7c3ddf068c4ff9f7e8
|
||||
Collaborate%20seamlessly%20with%20your%20team./singular: c5f10e431aaf8b51519bc009a4a4080c
|
||||
Coming%20soon/singular: ee2b0671e00972773210c5be5a9ccb89
|
||||
Comments/singular: 502237cd1044491c48494aa60967a985
|
||||
Company/singular: 9e36d11fa82d1bd4563eef2abc4fcfba
|
||||
Complete/singular: d3e36d723de0cfdea51c5b4171d30b4d
|
||||
Complete%20control%20and%20ownership%3A/singular: 0d8b682ba873272217425ccfc96aa9cd
|
||||
Confirm%20URL%20change/singular: e14b4ce081d1ef6194b37e1814e97b39
|
||||
Connect%20Trello/singular: 4440a0b9e387ef7136e3958e7a089213
|
||||
@@ -76,7 +63,6 @@ checksums:
|
||||
Connect%20your%20Trello%20account%20to%20import%20boards./singular: 84a510a7485f43e43f2191bd161171d7
|
||||
Contact/singular: 9afa39bc47019ee6dec6c74b6273967c
|
||||
Contact%20us/singular: 694a45bc5c96f6f3a27873c1cf5a7707
|
||||
Content%20Creation/singular: 4e6be22ade0188f408471325fe363575
|
||||
Continue%20with%20/singular: 8ed03cf7c5e60a6edf3470a4558ff058
|
||||
Continue%20with%20%7B0%7D/singular: 2eaf6e1da91e208f7c5fb6bf862fe8a6
|
||||
Control%20who%20can%20view%20and%20edit%20your%20boards./singular: 2a7e0bec29bac26280de707e2fe8bce5
|
||||
@@ -91,10 +77,8 @@ checksums:
|
||||
Create%20new%20list/singular: ce61ca8be7b3f6c26c32b684a42a2c26
|
||||
Create%20workspace/singular: 2e6718e79964ea5ce22d76c2189c77ca
|
||||
created%20the%20card/singular: 605475f5aaeb4dbccbf7c4eb9107b43d
|
||||
Critical/singular: eb327cd411b50aee954f8d1d215d003a
|
||||
Custom%20domain/singular: b09e7a9c187b7163b4a6cfc78042fe42
|
||||
Custom%20URLs%20are%20a%20premium%20feature.%20You'll%20be%20directed%20to%20upgrade%20your%20account./singular: b52e4f6122cf739c9551d29beb89b25e
|
||||
Customer%20Support/singular: 50e3c77e22e41061ca85ea2f02625a2e
|
||||
Dark/singular: 73e6e208ba628b26e90fcf6dce15e1b2
|
||||
Delete/singular: 8bcf303dd10a645b5baacb02b47d72c9
|
||||
Delete%20account/singular: a9d11113f1a1d7e20582bdcc9633bcef
|
||||
@@ -103,7 +87,6 @@ checksums:
|
||||
Delete%20comment/singular: a3dae0c9ddbc73677aad9812e3dffd69
|
||||
Delete%20list/singular: b694f58e4c973d8797a78e746b550b1f
|
||||
Delete%20workspace/singular: 9017c821209528d9b20d40a488854cdf
|
||||
Design/singular: 991b75727b6784c1a063a7462b76186d
|
||||
Disconnect%20Trello/singular: a2dd737d133887d34504728c7e7f05e3
|
||||
Discuss%20and%20collaborate%20on%20cards./singular: f2e87816709f602130831ead50bba457
|
||||
Display%20name/singular: 725f331065e9d594d720d07b1ae51a90
|
||||
@@ -115,14 +98,11 @@ checksums:
|
||||
Docs/singular: 55fea190a0c0fb32acd3dc986cd3cc91
|
||||
Documentation/singular: 1563fcb5ddb5037b0709ccd3dd384a92
|
||||
Don't%20have%20an%20account%3F%20%3C0%3E%3C1%3ESign%20up%3C%2F1%3E%3C%2F0%3E/singular: 6ae8282ab8b4a01b4ce87b119e13714b
|
||||
Done/singular: ffd408fa29d5bc9039ef8ea1b9b699bb
|
||||
Edit%20board%20URL/singular: d8276dfc0189f371ec7d80a2047c07aa
|
||||
Edit%20comment/singular: 7e4b46525fcb6b47b71798e31c46e374
|
||||
Edit%20label/singular: 0309e0be1512b1e0b0ceb87c69a53d03
|
||||
Editing/singular: 3449a7988cd69207b7c6929af1f4abf1
|
||||
email/singular: f31eb214738e037d58e26149797739df
|
||||
Email/singular: e7f34943a0c2fb849db1839ff6ef5cb5
|
||||
Enhancement/singular: 785fe23c0eef0a5b60b5b2a88151de31
|
||||
Enter%20your%20email%20address/singular: 9bc008365ebe3e404e241c8ca876f56e
|
||||
Enter%20your%20name/singular: cd95fbdd0533f2c2e8edf9d9bd9aa8df
|
||||
Enter%20your%20password/singular: ea4fdd034522dead21bae0c0abb52eae
|
||||
@@ -137,11 +117,8 @@ checksums:
|
||||
Error%20uploading%20profile%20image/singular: 0ba02753a797a74c6ea7b622c9f69c71
|
||||
Everything%20in%20the%20free%20plan%2C%20plus%3A/singular: 62b44c4973b92b806c69a4b15e0256dc
|
||||
Everything%20you%20need%2C%20free%20forever.%20Unlimited%20boards%2C%20unlimited%20lists%2C%20unlimited%20cards.%20Upgrade%20any%20time./singular: fa21632ab1468edf10acda2fe7b71323
|
||||
Execution/singular: cbac4a3c721123cbc6a883560bf29800
|
||||
Failed%20to%20login%20with%20%7B0%7D.%20Please%20try%20again./singular: 669a4b4247a73f53fb9b8b16e42d166f
|
||||
FAQs/singular: dc36d7992372ccd419b39ef51cf5b16c
|
||||
Feature/singular: 58f5f3f37862b6312a2f20ec1a1fd0e8
|
||||
Feature%20Request/singular: c9de91b9a7020213381977f7d147064f
|
||||
Features/singular: 341ff316a339b106a178f0b8d362951b
|
||||
Feedback/singular: 6fac88806e0c269a30777b283988c61c
|
||||
Feedback%20sent/singular: 38a490c7ad5f1aa6013dfa879d2c7818
|
||||
@@ -150,8 +127,6 @@ checksums:
|
||||
For%20long-term%20sustainability%2C%20we%20recognise%20all%20good%20open%20source%20projects%20need%20a%20source%20of%20revenue.%20Ours%20comes%20from%20the%20paid%20cloud%20offering%20for%20workspaces%20with%20multiple%20users%20(free%20during%20the%20beta)%20and%20for%20custom%20workspace%20slugs.%20There's%20no%20obligation%20to%20use%20it%2C%20and%20you%20can%20self-host%20the%20software%20on%20your%20own%20infrastructure%20free%20of%20charge./singular: 4eedacd4311ff69bf0fd87083c90a268
|
||||
Free/singular: 0326365539c004f6088656f692602078
|
||||
Free%2C%20forever/singular: ae4f2f81e88a50b5f250ef8e8e77e74b
|
||||
Full-time/singular: fe6e201f6676ae354111435cf6c76910
|
||||
Fun/singular: 395bdc48e943762b6cde649f4a96771d
|
||||
Get%20started/singular: 5c783951b0100a168bdd2161ff294833
|
||||
Get%20Started/singular: 1d5f030c4ec9c869e647ae060518b948
|
||||
Get%20started%20by%20creating%20a%20new%20board/singular: 8fe63ba47e12bbf950f3eb33d1008993
|
||||
@@ -162,8 +137,6 @@ checksums:
|
||||
Getting%20started/singular: 8e5e7bd026b5bec46bbfdce02ab9e0b8
|
||||
GitHub/singular: 6e1cf3c00fa6fbe24afcc78ea3b5f3e4
|
||||
Go%20to%20app/singular: 896d0441384dcd2bfb3b23d61ff1944d
|
||||
High%20Priority/singular: 5d231ff8254aabc875f194c4b4f49c97
|
||||
Hired/singular: e5a9b1bd409b007141fe3d7890022f9a
|
||||
Host%20Kan%20on%20your%20own%20infrastructure.%20Ideal%20for%20organisations%20that%20need%20complete%20control%20over%20their%20data./singular: 8e7ae0783d60ef4624d3caf9bfc3747f
|
||||
How%20do%20I%20get%20a%20custom%20URL%3F/singular: 5b28fb95969c0dd19e1b9c9ab8a5fb29
|
||||
How%20do%20I%20import%20my%20Trello%20boards%3F/singular: 44b30a727150cb93364af0a10346012a
|
||||
@@ -172,29 +145,23 @@ checksums:
|
||||
How%20is%20the%20project%20funded%3F/singular: ba7e936f7b1b5faa47df59a0ef990092
|
||||
I%20acknowledge%20that%20all%20of%20my%20account%20data%20will%20be%20permanently%20deleted%20and%20want%20to%20proceed./singular: 2ffc824d0b1f9e883c2e87ed4b8b40b6
|
||||
I%20acknowledge%20that%20all%20of%20the%20workspace%20data%20will%20be%20permanently%20deleted%20and%20want%20to%20proceed./singular: fe1183a7439299210d8ab7379b8f4d01
|
||||
Ideas/singular: 27c24b56895defecd10b0171b39bc93f
|
||||
Ideas%20to%20improve%20this%20page.../singular: 285decc2cc28403fae043d9b4de97a00
|
||||
Import/singular: 348b8ab981de5b7f1fca6d7302263bbd
|
||||
Import%20complete/singular: 7e749df6f068b9cdf1055ea38c9a80af
|
||||
Import%20failed/singular: bcec1f271c82ddffc91ebc22021b03cb
|
||||
Import%20your%20Trello%20boards%20and%20hit%20the%20ground%20running./singular: d66d13649f81342f8b3a4f3b54370c20
|
||||
Important/singular: 4cf0e8fc8e4e7c5c9b9458059a172a2b
|
||||
Importing%20from%20Trello/singular: 1e3a46fb9bd8ce8c7d632f9555b5bd7c
|
||||
Importing%20your%20Trello%20boards%20into%20Kan%20is%20easy.%20You%20can%20follow%20our%20step-by-step%20guide%20%3C0%3Ehere%3C%2F0%3E./singular: ca88dc22801fef08fee1ecfb1bf6914e
|
||||
In%20Progress/singular: 3de9afebcb9d4ce8ac42e14995f79ffd
|
||||
Individuals/singular: 83bfc81f20e60556c44ec80c7d0603ec
|
||||
Integrations/singular: 0ccce343287704cd90150c32e2fcad36
|
||||
Interviewing/singular: 4ccdcdc784547e925077c3297bddee95
|
||||
Invite/singular: 181884cea804cbde665f160811ee7ad0
|
||||
Invite%20member/singular: ade922db1be6b26bc979565ce5de2bc7
|
||||
Junior/singular: ed1bd2c59a824fdcdd56fc8a0660fe9f
|
||||
Kanban%20is%20better%20with%20a%20team.%20Perfect%20for%20small%20and%20growing%20teams%20looking%20to%20collaborate./singular: a77bee43046b260797c8936ad23e9223
|
||||
Kanban%20reimagined/singular: 613ccfdd9f54c66cbf68cfa313498766
|
||||
Keep%20in%20mind%20that%20this%20action%20is%20irreversible./singular: 79702b2ad3be71cb8b87f1122a60c199
|
||||
Labels/singular: 6f15627a90002323eac018274b6922d6
|
||||
Labels%20%26%20Filters/singular: 8f0bdd6084516f8241cb613178114390
|
||||
Language/singular: 277fd1a41cc237a437cd1d5e4a80463b
|
||||
Learning/singular: 90e91da3f870f065f2da9aa9adf53514
|
||||
Legal/singular: 00d3f08da61a21887009819cf93fb414
|
||||
License/singular: ac2bcac75151e2fcd9eb768cea275a77
|
||||
Light/singular: bb78ea2c6edd8662676c81a8a13ecb93
|
||||
@@ -203,10 +170,7 @@ checksums:
|
||||
List%20name/singular: e925e2e6ccaf0eb4064a888aaea8d3c2
|
||||
Login%20%7C%20kan.bn/singular: 42a6c8dcd73e0d46e652646dc86871eb
|
||||
Logout/singular: 07948fdf20705e04a7bf68ab197512bf
|
||||
Long-term/singular: 51cb6f0b112250c5a091ca5f0866904b
|
||||
Low%20Priority/singular: 509b5cb7c1e8a185e0aa6d38c64c90e8
|
||||
magic%20link/singular: db9d17a5bd98bba8aa0d8068c68579f3
|
||||
Medium%20Priority/singular: 1f527cd6d1ed602930bcaa303f503b51
|
||||
Members/singular: 0932e80cba1e3e0a7f52bb67ff31da32
|
||||
Members%20%7C%20%7B0%7D/singular: a29e3e9f1076acd178c417d047584e88
|
||||
Monthly/singular: 818f1192e32bb855597f930d3e78806e
|
||||
@@ -220,27 +184,19 @@ checksums:
|
||||
New%20import/singular: e8fddfe15dd170277df919e5d37efd47
|
||||
New%20label/singular: 890040da52a88c16c249a4ac78980f81
|
||||
New%20list/singular: 146c2e642b11056a0b07ed65733e4178
|
||||
New%20Ticket/singular: 665ff16ec736cba20e8a1b3beb3baa09
|
||||
New%20workspace/singular: 8eecf05b4ce29aa880adfed2e11476af
|
||||
Newsletter/singular: dcfb9666301924431ac8ae88e5b6f9d7
|
||||
Next%20Steps/singular: 12392fe73ae60b6e5a9d851256b8477e
|
||||
No%20boards/singular: e4397619e69b105e4317dda4560ff4a6
|
||||
No%20boards%20found/singular: e044088d2c51b6bdf660fafa86ee1e17
|
||||
No%20credit%20card%20required/singular: 2090aa4171dc0b60735069f89b592883
|
||||
No%20lists/singular: cedf633d99c77ff4356e089f2d98c0a6
|
||||
Offer/singular: 82b4e0c9a3f5b4bd93590847de7c32a1
|
||||
Onboarding/singular: 52b23f9c62ff199d4c09920e7641829e
|
||||
Once%20you%20delete%20your%20account%2C%20there%20is%20no%20going%20back.%20This%20action%20cannot%20be%20undone./singular: 9cf7aa6ef30890e5124e266c081bae1c
|
||||
Once%20you%20delete%20your%20workspace%2C%20there%20is%20no%20going%20back.%20This%20action%20cannot%20be%20undone./singular: c9ce6a516ed1f361653e8f8db3dd5ffd
|
||||
or/singular: 7b133c38bec0d5ee23cc6bcf9a8de50b
|
||||
Organize%20and%20find%20cards%20quickly%20with%20powerful%20filtering%20tools./singular: 1b9898c4b21e9dff413b4f76dc59db56
|
||||
Own%20your%20data/singular: cc2178dac4bdf6b07f030cfc2a7510e6
|
||||
Part-time/singular: 213d63da450f35dabb3ab0e35e29feed
|
||||
Payment%20frequency/singular: 63ded0e4ffb462ca8bd33d38e4691d86
|
||||
Pending/singular: 030a6f3395d5d4efddd3cc67d6009039
|
||||
per%20user%2Fmonth/singular: 72af182c1ba6df6732640f4d8a78d360
|
||||
Personal%20Project/singular: d7820b1bf4efecc61ed89234567aaa9c
|
||||
Planning/singular: 353f58c75248275fe091740607501610
|
||||
Please%20enter%20a%20valid%20email%20address/singular: 8de4bc8832b11b380bc4cbcedc16e48b
|
||||
Please%20enter%20a%20valid%20name/singular: f2d741f1b5cae722e35cb5206786f932
|
||||
Please%20enter%20a%20valid%20password/singular: 4b32c17e19b79bcbf0bb092c06ba310f
|
||||
@@ -253,35 +209,25 @@ checksums:
|
||||
Profile%20image%20updated/singular: 1ba6609b50bc217a36ab659563e78dae
|
||||
Profile%20picture/singular: d9b5e595877ffe2557486a987dd28274
|
||||
Public/singular: c834f11dab0881632aded3f01d4f8fa9
|
||||
Publishing/singular: d9c8862c0180d9b7bd1272d5dc0d3ac3
|
||||
Question/singular: 0576462ce60d4263d7c482463fcc9547
|
||||
Questions%3F/singular: c7c3a47f8b230ce7a43f3c090f21d683
|
||||
Quick%20Win/singular: a03ff4c0896f14b87455510bab203511
|
||||
Recruitment/singular: 78084ee4954aa22efe9ad7463d2a0c72
|
||||
Remote/singular: dc3e4280dfe5c455b38ba6c8884999cf
|
||||
Remove/singular: dba2fe5fe9f83f8078c687f28cba4b52
|
||||
Remove%20member/singular: 1d77c2ca3768e486fd1fb5df30cb60d9
|
||||
removed%20a%20label%20from%20the%20card/singular: f83ec18850a2a8a3f8242a740a04df06
|
||||
removed%20a%20member%20from%20the%20card/singular: 0bd7561bb79358fde3d595c3e60a315a
|
||||
removed%20label%20%3C0%3E%7Blabel%7D%3C%2F0%3E/singular: 1e7ebc1866136352bdc3cd90afc083f0
|
||||
Research/singular: 3368e9638d1619babd6df9fad592274f
|
||||
Resolution/singular: 6d8bd9e1bd7dae5ae38c93061d32990e
|
||||
Resources/singular: ec7fb05ed963bb6781a35782b3475502
|
||||
Review/singular: 299f75db25382980b2895622d7712927
|
||||
Revoke/singular: be57685a85b6dfeaeb6eab4e9560b520
|
||||
Roadmap/singular: c60f4a1acf30e566861bf130f13b9ae7
|
||||
Role/singular: 53743bbb6ca938f5b893552e839d067f
|
||||
Run%20on%20your%20own%20infrastructure/singular: eba804911562b8dbf9d69c3e27f1d708
|
||||
Save/singular: f7a2929f33bc420195e59ac5a8bcd454
|
||||
Save%20time%20with%20reusable%20board%20templates./singular: d0f2d7d0fd682ceaf4ca12c6353fd75a
|
||||
Screening/singular: 0327bfb25db87bdacf00d4dc297f8b26
|
||||
Select%20all/singular: eedc7cdb02de467c15dc418a066a77f2
|
||||
Select%20source/singular: c7b0ec447415ff62856803a4d7838bd6
|
||||
Self%20Host/singular: 43fbce2027548b712002e489a20a621a
|
||||
Self%20host%20with%20Github/singular: 972155419bcc9f8f9bad9f5ad3538774
|
||||
self-assigned%20the%20card/singular: 24a8d97bcd747643772ebe883be69698
|
||||
Send/singular: 76a8497d7b546628b03bb81d5c1ce995
|
||||
Senior/singular: 3fff865dc00435f82896fc302ea45630
|
||||
Settings/singular: 8df6777277469c1fd88cc18dde2f1cc3
|
||||
Settings%20%7C%20%7B0%7D/singular: b8fc73080bc9c8f4f1403b2a69bd1ac5
|
||||
Sign%20in/singular: cb8757c7450e17de1e226e82fb0fa4a2
|
||||
@@ -291,8 +237,6 @@ checksums:
|
||||
Sign%20up%20with%20/singular: 103e5d75506e6835b471695d799ff580
|
||||
Simple%20pricing/singular: 5aa2bece93a71947b268498a58062937
|
||||
Simple%2C%20visual%20task%20management%20that%20just%20works.%20Drag%20and%20drop%20cards%2C%20collaborate%20with%20your%20team%2C%20and%20get%20more%20done./singular: f4f138f83017d43dab2882cc08e07bdb
|
||||
Social%20Media/singular: 2227508afb0d38a027e323207e47d4a2
|
||||
Software%20Development/singular: 67659097ef6bcb194839858b2c4f3a3c
|
||||
Star%20on%20Github/singular: e5cb0428f1ac6485688f120d78742875
|
||||
Success/singular: c43827becada6750f7a25890905f38b9
|
||||
Support%20the%20development%20of%20the%20project/singular: c63bab228ab2b1be4370c668a99cd278
|
||||
@@ -311,12 +255,10 @@ checksums:
|
||||
This%20will%20result%20in%20the%20permanent%20deletion%20of%20all%20data%20associated%20with%20this%20workspace./singular: a31141558af793635c1ddd2fa0a33499
|
||||
This%20will%20result%20in%20the%20permanent%20deletion%20of%20all%20data%20associated%20with%20your%20account./singular: b49224632bd6c3b7f5e462912aeb1081
|
||||
This%20workspace%20username%20has%20already%20been%20taken/singular: b7eadb89c615874f416d9658d0428c4c
|
||||
To%20Do/singular: d60813ea824f373462471e092d136eed
|
||||
Toggle%20menu/singular: 29dea3e0b6238874f8c7a27619df8e36
|
||||
Track%20all%20card%20changes%20with%20detailed%20activity%20history./singular: 0d3bac559c71ec4b8734f9f212320de5
|
||||
Trello%20disconnected/singular: 54b24a3e6c9a7eedd8c8d1060ab1175d
|
||||
Trello%20imports/singular: 6827eca403faa8f89891d17827e72af9
|
||||
Triaging/singular: 1d40799fcae53a8a27688fdae2a48dee
|
||||
Unable%20to%20add%20comment/singular: 49bb435880817434698f31a6069564d6
|
||||
Unable%20to%20create%20card/singular: 90112ea12ec6fa42097a6e022ae048a4
|
||||
Unable%20to%20create%20list/singular: 7fbbf8314f8d08a4123c7daef09fed05
|
||||
@@ -346,13 +288,10 @@ checksums:
|
||||
updated%20the%20title/singular: 98cf8f12923ec1a58e767e3a40863b21
|
||||
updated%20the%20title%20to%20%3C0%3E%7BtoTitle%7D%3C%2F0%3E/singular: 70cdf681ec2b6ef8e14397bc1f93f945
|
||||
Upgrade/singular: 63c3b52882e0d779859307d672c178c2
|
||||
Urgent/singular: e79afcd4398e52e10e7e8243a7eecabe
|
||||
URL%20can%20only%20contain%20letters%2C%20numbers%2C%20and%20hyphens/singular: 875d37d2d920f98ef60a314eda8a5d9a
|
||||
URL%20cannot%20exceed%2024%20characters/singular: 395c25732b84ac1f5b63ee310da08e93
|
||||
URL%20must%20be%20at%20least%203%20characters%20long/singular: 1b74ac9ec61fd34b16530ed599009ed1
|
||||
Use%20template/singular: 33f0ca0aa8f4b0de99aad267a61a094d
|
||||
User/singular: 61073457a5c3901084b557d065f876be
|
||||
Video/singular: 8050c90e4289b105a0780f0fdda6ff66
|
||||
View%20and%20manage%20your%20API%20keys./singular: 88e23ee79056846dd9ce63ceee690549
|
||||
View%20and%20manage%20your%20billing%20and%20subscription./singular: 7469502543aac6f02149813546d1cb38
|
||||
View%20docs/singular: 43ce54f27bb1e3f1880b56e03ab38871
|
||||
@@ -378,7 +317,6 @@ checksums:
|
||||
Workspace%20name%20updated/singular: 3206ea410ee1ea4182b27ac0d89f92a1
|
||||
Workspace%20slug%20updated/singular: 527b92711d38cb35b40741df43aef047
|
||||
Workspace%20URL/singular: f4397a838da0f3a44cbd3ebe408ed6c3
|
||||
Writing/singular: 4f5f3ee3320c252921f80c42653c5d49
|
||||
Yearly/singular: 87f43e016c19cb25860f456549a2f431
|
||||
Yes%2C%20we%20offer%20an%20forever%20free%20plan%20for%20individual%20use.%20No%20restrictions%2C%20no%20paywalls%2C%20no%20limits./singular: 963cee303d0ff13c1719f4575e774fe3
|
||||
You%20can%20get%20a%20custom%20workspace%20URL%2C%20like%20%3C0%3Ekan.bn%2Fkan%3C%2F0%3E%2C%20by%20going%20into%20your%20%3C1%3Eworkspace%20settings%3C%2F1%3E%20and%20purchasing%20a%20pro%20workspace%20subscription.%20All%20subscriptions%20help%20fund%20the%20development%20of%20the%20project!/singular: 41dd145ef56f539e12dc064a9807c660
|
||||
|
||||
@@ -31,12 +31,9 @@ const config = {
|
||||
|
||||
images: {
|
||||
remotePatterns: [
|
||||
|
||||
{
|
||||
protocol: "https",
|
||||
hostname: process.env.S3_FORCE_PATH_STYLE === "true"
|
||||
? `${env("NEXT_PUBLIC_STORAGE_DOMAIN")}`
|
||||
: `*.${env("NEXT_PUBLIC_STORAGE_DOMAIN")}`,
|
||||
hostname: `*.${env("NEXT_PUBLIC_STORAGE_DOMAIN")}`,
|
||||
},
|
||||
{
|
||||
protocol: "http",
|
||||
|
||||
@@ -1,74 +1,11 @@
|
||||
import Link from "next/link";
|
||||
import { useRef, useState } from "react";
|
||||
import {
|
||||
TbLayoutSidebarLeftCollapse,
|
||||
TbLayoutSidebarLeftExpand,
|
||||
TbLayoutSidebarRightCollapse,
|
||||
TbLayoutSidebarRightExpand,
|
||||
} from "react-icons/tb";
|
||||
|
||||
import { authClient } from "@kan/auth/client";
|
||||
|
||||
import { useClickOutside } from "~/hooks/useClickOutside";
|
||||
import { useTheme } from "~/providers/theme";
|
||||
import { api } from "~/utils/api";
|
||||
import FeedbackButton from "./FeedbackButton";
|
||||
import SideNavigation from "./SideNavigation";
|
||||
|
||||
interface DashboardProps {
|
||||
children: React.ReactNode;
|
||||
rightPanel?: React.ReactNode;
|
||||
hasRightPanel?: boolean;
|
||||
}
|
||||
|
||||
export default function Dashboard({
|
||||
children,
|
||||
rightPanel,
|
||||
hasRightPanel = false,
|
||||
}: DashboardProps) {
|
||||
const theme = useTheme();
|
||||
|
||||
const { data: session, isPending: sessionLoading } = authClient.useSession();
|
||||
const [isSideNavOpen, setIsSideNavOpen] = useState(false);
|
||||
const [isRightPanelOpen, setIsRightPanelOpen] = useState(false);
|
||||
|
||||
const sideNavRef = useRef<HTMLDivElement>(null);
|
||||
const rightPanelRef = useRef<HTMLDivElement>(null);
|
||||
const sideNavButtonRef = useRef<HTMLButtonElement>(null);
|
||||
const rightPanelButtonRef = useRef<HTMLButtonElement>(null);
|
||||
|
||||
const toggleSideNav = () => {
|
||||
setIsSideNavOpen(!isSideNavOpen);
|
||||
if (!isSideNavOpen) {
|
||||
setIsRightPanelOpen(false);
|
||||
}
|
||||
};
|
||||
|
||||
const toggleRightPanel = () => {
|
||||
setIsRightPanelOpen(!isRightPanelOpen);
|
||||
if (!isRightPanelOpen) {
|
||||
setIsSideNavOpen(false);
|
||||
}
|
||||
};
|
||||
|
||||
useClickOutside(sideNavRef, (event) => {
|
||||
if (sideNavButtonRef.current?.contains(event.target as Node)) {
|
||||
return;
|
||||
}
|
||||
if (isSideNavOpen) {
|
||||
setIsSideNavOpen(false);
|
||||
}
|
||||
});
|
||||
|
||||
useClickOutside(rightPanelRef, (event) => {
|
||||
if (rightPanelButtonRef.current?.contains(event.target as Node)) {
|
||||
return;
|
||||
}
|
||||
if (isRightPanelOpen) {
|
||||
setIsRightPanelOpen(false);
|
||||
}
|
||||
});
|
||||
|
||||
const isDarkMode = theme.activeTheme === "dark";
|
||||
export default function Dashboard(props: { children: React.ReactNode }) {
|
||||
const { data, isLoading } = api.user.getUser.useQuery();
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -76,95 +13,26 @@ export default function Dashboard({
|
||||
html {
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
min-width: 320px;
|
||||
background-color: ${!isDarkMode ? "hsl(0deg 0% 97.3%)" : "#161616"};
|
||||
}
|
||||
`}</style>
|
||||
<div className="flex h-screen flex-col items-center bg-light-100 dark:bg-dark-50 md:min-w-[800px]">
|
||||
<div className="flex h-12 min-h-12 w-full justify-between border-b border-light-600 px-5 py-2 align-middle dark:border-dark-400 md:h-16 md:min-h-16">
|
||||
<div className="flex h-screen min-w-[800px] flex-col items-center bg-light-100 dark:bg-dark-50">
|
||||
<div className="m-auto flex h-16 min-h-16 w-full justify-between border-b border-light-600 px-5 py-2 align-middle dark:border-dark-400">
|
||||
<div className="my-auto flex w-full items-center justify-between">
|
||||
<button
|
||||
ref={sideNavButtonRef}
|
||||
onClick={toggleSideNav}
|
||||
className="text-neutral-900 dark:text-dark-1000 md:hidden"
|
||||
>
|
||||
{isSideNavOpen ? (
|
||||
<TbLayoutSidebarLeftCollapse
|
||||
size={20}
|
||||
className="text-light-900 dark:text-dark-900"
|
||||
/>
|
||||
) : (
|
||||
<TbLayoutSidebarLeftExpand
|
||||
size={20}
|
||||
className="text-light-900 dark:text-dark-900"
|
||||
/>
|
||||
)}
|
||||
</button>
|
||||
|
||||
<Link href="/" className="hidden md:block">
|
||||
<Link href="/">
|
||||
<h1 className="text-lg font-bold tracking-tight text-neutral-900 dark:text-dark-1000">
|
||||
kan.bn
|
||||
</h1>
|
||||
</Link>
|
||||
|
||||
<div className="flex items-center gap-2">
|
||||
{hasRightPanel && (
|
||||
<button
|
||||
ref={rightPanelButtonRef}
|
||||
onClick={toggleRightPanel}
|
||||
className="text-neutral-900 dark:text-dark-1000 md:hidden"
|
||||
>
|
||||
{isRightPanelOpen ? (
|
||||
<TbLayoutSidebarRightCollapse
|
||||
size={20}
|
||||
className="text-light-900 dark:text-dark-900"
|
||||
/>
|
||||
) : (
|
||||
<TbLayoutSidebarRightExpand
|
||||
size={20}
|
||||
className="text-light-900 dark:text-dark-900"
|
||||
/>
|
||||
)}
|
||||
</button>
|
||||
)}
|
||||
<div className="hidden md:block">
|
||||
<FeedbackButton />
|
||||
</div>
|
||||
</div>
|
||||
<FeedbackButton />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex h-full min-h-0 w-full">
|
||||
<div
|
||||
ref={sideNavRef}
|
||||
className={`fixed left-0 top-12 z-50 h-[calc(100dvh-3rem)] transform transition-transform duration-300 ease-in-out md:relative md:top-0 md:h-full md:translate-x-0 ${isSideNavOpen ? "translate-x-0" : "-translate-x-full md:translate-x-0"} `}
|
||||
>
|
||||
<SideNavigation
|
||||
user={{ email: session?.user.email, image: session?.user.image }}
|
||||
isLoading={sessionLoading}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="relative flex min-h-0 w-full overflow-hidden">
|
||||
<div className="h-full w-full overflow-y-auto">{children}</div>
|
||||
|
||||
{/* Mobile Right Panel */}
|
||||
{hasRightPanel && rightPanel && (
|
||||
<div
|
||||
ref={rightPanelRef}
|
||||
className={`fixed right-0 top-12 z-50 h-[calc(100dvh-3rem)] w-80 transform bg-light-200 transition-transform duration-300 ease-in-out dark:bg-dark-100 md:hidden ${
|
||||
isRightPanelOpen ? "translate-x-0" : "translate-x-full"
|
||||
}`}
|
||||
>
|
||||
<div className="h-full overflow-y-auto">{rightPanel}</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Desktop Right Panel */}
|
||||
{hasRightPanel && rightPanel && (
|
||||
<div className="hidden md:block">{rightPanel}</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex h-full w-full">
|
||||
<SideNavigation
|
||||
user={{ email: data?.email, image: data?.image }}
|
||||
isLoading={isLoading}
|
||||
/>
|
||||
<div className="w-full overflow-hidden">{props.children}</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
|
||||
@@ -55,7 +55,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
|
||||
<div className="flex w-full flex-col gap-1">
|
||||
<div className="relative flex">
|
||||
{prefix && (
|
||||
<div className="flex shrink-0 items-center rounded-l-md border border-r-0 border-light-600 px-3 text-sm dark:border-dark-700 dark:text-dark-1000 sm:text-sm/6">
|
||||
<div className="flex shrink-0 items-center rounded-l-md border border-r-0 border-light-600 px-3 text-base dark:border-dark-700 dark:text-dark-1000 sm:text-sm/6">
|
||||
{prefix}
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -19,12 +19,10 @@ export function NewWorkspaceForm() {
|
||||
const { showPopup } = usePopup();
|
||||
const { switchWorkspace } = useWorkspace();
|
||||
const { register, handleSubmit } = useForm<FormValues>();
|
||||
const utils = api.useUtils();
|
||||
|
||||
const createWorkspace = api.workspace.create.useMutation({
|
||||
onSuccess: (values) => {
|
||||
if (values.publicId && values.name) {
|
||||
utils.workspace.all.invalidate();
|
||||
switchWorkspace({
|
||||
publicId: values.publicId,
|
||||
name: values.name,
|
||||
|
||||
@@ -4,10 +4,6 @@ export const PageHead = ({ title }: { title: string }) => {
|
||||
return (
|
||||
<Head>
|
||||
<title>{title}</title>
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1"
|
||||
/>
|
||||
</Head>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -54,7 +54,7 @@ export default function SideNavigation({
|
||||
|
||||
return (
|
||||
<>
|
||||
<nav className="flex h-full w-64 flex-col justify-between border-r border-light-600 bg-light-50 px-3 pb-3 pt-5 dark:border-dark-400 dark:bg-dark-50">
|
||||
<nav className="flex w-72 flex-col justify-between border-r border-light-600 px-3 pb-3 pt-5 dark:border-dark-400">
|
||||
<div>
|
||||
<WorkspaceMenu />
|
||||
<ul role="list" className="space-y-1">
|
||||
|
||||
@@ -69,7 +69,6 @@ export const env = createEnv({
|
||||
S3_SECRET_ACCESS_KEY: z.string().optional(),
|
||||
S3_REGION: z.string().optional(),
|
||||
S3_ENDPOINT: z.string().optional(),
|
||||
S3_FORCE_PATH_STYLE: z.string().optional(),
|
||||
EMAIL_FROM: z.string().optional(),
|
||||
},
|
||||
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
import type { RefObject } from "react";
|
||||
|
||||
import { useEventListener } from "./useEventListener";
|
||||
|
||||
/** Supported event types. */
|
||||
type EventType =
|
||||
| "mousedown"
|
||||
| "mouseup"
|
||||
| "touchstart"
|
||||
| "touchend"
|
||||
| "focusin"
|
||||
| "focusout";
|
||||
|
||||
/**
|
||||
* Custom hook that handles clicks outside a specified element.
|
||||
* @template T - The type of the element's reference.
|
||||
* @param {RefObject<T> | RefObject<T>[]} ref - The React ref object(s) representing the element(s) to watch for outside clicks.
|
||||
* @param {(event: MouseEvent | TouchEvent | FocusEvent) => void} handler - The callback function to be executed when a click outside the element occurs.
|
||||
* @param {EventType} [eventType] - The mouse event type to listen for (optional, default is 'mousedown').
|
||||
* @param {?AddEventListenerOptions} [eventListenerOptions] - The options object to be passed to the `addEventListener` method (optional).
|
||||
* @returns {void}
|
||||
* @example
|
||||
* ```tsx
|
||||
* const containerRef = useRef(null);
|
||||
* useClickOutside([containerRef], () => {
|
||||
* // Handle clicks outside the container.
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
export function useClickOutside<T extends HTMLElement = HTMLElement>(
|
||||
ref: RefObject<T> | RefObject<T>[],
|
||||
handler: (event: MouseEvent | TouchEvent | FocusEvent) => void,
|
||||
eventType: EventType = "mousedown",
|
||||
eventListenerOptions: AddEventListenerOptions = {},
|
||||
): void {
|
||||
useEventListener(
|
||||
eventType,
|
||||
(event) => {
|
||||
const target = event.target as Node;
|
||||
|
||||
// Do nothing if the target is not connected element with document
|
||||
if (!target.isConnected) {
|
||||
return;
|
||||
}
|
||||
|
||||
const isOutside = Array.isArray(ref)
|
||||
? ref
|
||||
.filter((r) => Boolean(r.current))
|
||||
.every((r) => r.current && !r.current.contains(target))
|
||||
: ref.current && !ref.current.contains(target);
|
||||
|
||||
if (isOutside) {
|
||||
handler(event);
|
||||
}
|
||||
},
|
||||
undefined,
|
||||
eventListenerOptions,
|
||||
);
|
||||
}
|
||||
@@ -1,120 +0,0 @@
|
||||
import type { RefObject } from "react";
|
||||
import { useEffect, useRef } from "react";
|
||||
|
||||
import { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect";
|
||||
|
||||
// MediaQueryList Event based useEventListener interface
|
||||
function useEventListener<K extends keyof MediaQueryListEventMap>(
|
||||
eventName: K,
|
||||
handler: (event: MediaQueryListEventMap[K]) => void,
|
||||
element: RefObject<MediaQueryList>,
|
||||
options?: boolean | AddEventListenerOptions,
|
||||
): void;
|
||||
|
||||
// Window Event based useEventListener interface
|
||||
function useEventListener<K extends keyof WindowEventMap>(
|
||||
eventName: K,
|
||||
handler: (event: WindowEventMap[K]) => void,
|
||||
element?: undefined,
|
||||
options?: boolean | AddEventListenerOptions,
|
||||
): void;
|
||||
|
||||
// Element Event based useEventListener interface
|
||||
function useEventListener<
|
||||
K extends keyof HTMLElementEventMap & keyof SVGElementEventMap,
|
||||
T extends Element = K extends keyof HTMLElementEventMap
|
||||
? HTMLDivElement
|
||||
: SVGElement,
|
||||
>(
|
||||
eventName: K,
|
||||
handler:
|
||||
| ((event: HTMLElementEventMap[K]) => void)
|
||||
| ((event: SVGElementEventMap[K]) => void),
|
||||
element: RefObject<T>,
|
||||
options?: boolean | AddEventListenerOptions,
|
||||
): void;
|
||||
|
||||
// Document Event based useEventListener interface
|
||||
function useEventListener<K extends keyof DocumentEventMap>(
|
||||
eventName: K,
|
||||
handler: (event: DocumentEventMap[K]) => void,
|
||||
element: RefObject<Document>,
|
||||
options?: boolean | AddEventListenerOptions,
|
||||
): void;
|
||||
|
||||
/**
|
||||
* Custom hook that attaches event listeners to DOM elements, the window, or media query lists.
|
||||
* @template KW - The type of event for window events.
|
||||
* @template KH - The type of event for HTML or SVG element events.
|
||||
* @template KM - The type of event for media query list events.
|
||||
* @template T - The type of the DOM element (default is `HTMLElement`).
|
||||
* @param {KW | KH | KM} eventName - The name of the event to listen for.
|
||||
* @param {(event: WindowEventMap[KW] | HTMLElementEventMap[KH] | SVGElementEventMap[KH] | MediaQueryListEventMap[KM] | Event) => void} handler - The event handler function.
|
||||
* @param {RefObject<T>} [element] - The DOM element or media query list to attach the event listener to (optional).
|
||||
* @param {boolean | AddEventListenerOptions} [options] - An options object that specifies characteristics about the event listener (optional).
|
||||
* @public
|
||||
* @see [Documentation](https://usehooks-ts.com/react-hook/use-event-listener)
|
||||
* @example
|
||||
* ```tsx
|
||||
* // Example 1: Attach a window event listener
|
||||
* useEventListener('resize', handleResize);
|
||||
* ```
|
||||
* @example
|
||||
* ```tsx
|
||||
* // Example 2: Attach a document event listener with options
|
||||
* const elementRef = useRef(document);
|
||||
* useEventListener('click', handleClick, elementRef, { capture: true });
|
||||
* ```
|
||||
* @example
|
||||
* ```tsx
|
||||
* // Example 3: Attach an element event listener
|
||||
* const buttonRef = useRef<HTMLButtonElement>(null);
|
||||
* useEventListener('click', handleButtonClick, buttonRef);
|
||||
* ```
|
||||
*/
|
||||
function useEventListener<
|
||||
KW extends keyof WindowEventMap,
|
||||
KH extends keyof HTMLElementEventMap & keyof SVGElementEventMap,
|
||||
KM extends keyof MediaQueryListEventMap,
|
||||
T extends HTMLElement | SVGAElement | MediaQueryList = HTMLElement,
|
||||
>(
|
||||
eventName: KW | KH | KM,
|
||||
handler: (
|
||||
event:
|
||||
| WindowEventMap[KW]
|
||||
| HTMLElementEventMap[KH]
|
||||
| SVGElementEventMap[KH]
|
||||
| MediaQueryListEventMap[KM]
|
||||
| Event,
|
||||
) => void,
|
||||
element?: RefObject<T>,
|
||||
options?: boolean | AddEventListenerOptions,
|
||||
) {
|
||||
// Create a ref that stores handler
|
||||
const savedHandler = useRef(handler);
|
||||
|
||||
useIsomorphicLayoutEffect(() => {
|
||||
savedHandler.current = handler;
|
||||
}, [handler]);
|
||||
|
||||
useEffect(() => {
|
||||
// Define the listening target
|
||||
const targetElement: T | Window = element?.current ?? window;
|
||||
|
||||
if (!(targetElement && targetElement.addEventListener)) return;
|
||||
|
||||
// Create event listener that calls handler function stored in ref
|
||||
const listener: typeof handler = (event) => {
|
||||
savedHandler.current(event);
|
||||
};
|
||||
|
||||
targetElement.addEventListener(eventName, listener, options);
|
||||
|
||||
// Remove event listener on cleanup
|
||||
return () => {
|
||||
targetElement.removeEventListener(eventName, listener, options);
|
||||
};
|
||||
}, [eventName, element, options]);
|
||||
}
|
||||
|
||||
export { useEventListener };
|
||||
@@ -1,15 +0,0 @@
|
||||
import { useEffect, useLayoutEffect } from "react";
|
||||
|
||||
/**
|
||||
* Custom hook that uses either `useLayoutEffect` or `useEffect` based on the environment (client-side or server-side).
|
||||
* @param {Function} effect - The effect function to be executed.
|
||||
* @param {Array<any>} [dependencies] - An array of dependencies for the effect (optional).
|
||||
* @example
|
||||
* ```tsx
|
||||
* useIsomorphicLayoutEffect(() => {
|
||||
* // Code to be executed during the layout phase on the client side
|
||||
* }, [dependency1, dependency2]);
|
||||
* ```
|
||||
*/
|
||||
export const useIsomorphicLayoutEffect =
|
||||
typeof window !== "undefined" ? useLayoutEffect : useEffect;
|
||||
@@ -124,14 +124,6 @@ msgstr "API-Schlüssel"
|
||||
msgid "API Reference"
|
||||
msgstr "API-Referenz"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:62
|
||||
msgid "Applicants"
|
||||
msgstr "Bewerber"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:33
|
||||
msgid "Approval"
|
||||
msgstr "Genehmigung"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:47
|
||||
msgid "Are you sure want to remove {entityLabel}?"
|
||||
msgstr "Bist du sicher, dass du {entityLabel} entfernen möchtest?"
|
||||
@@ -157,20 +149,7 @@ msgstr "Bist du sicher, dass du dein Konto löschen möchtest?"
|
||||
msgid "assigned <0>{memberName}</0> to the card"
|
||||
msgstr "hat <0>{memberName}</0> der Karte zugewiesen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:46
|
||||
msgid "Awaiting Customer"
|
||||
msgstr "Warten auf Kunden"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Backlog"
|
||||
msgstr "Backlog"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:15
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Einfaches Kanban"
|
||||
|
||||
#: src/views/settings/index.tsx:168
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
msgid "Billing"
|
||||
msgstr "Abrechnung"
|
||||
|
||||
@@ -178,22 +157,10 @@ msgstr "Abrechnung"
|
||||
msgid "Billing portal"
|
||||
msgstr "Abrechnungsportal"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Blog Post"
|
||||
msgstr "Blogbeitrag"
|
||||
|
||||
#: src/views/board/index.tsx:239
|
||||
msgid "Board"
|
||||
msgstr "Board"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
msgstr "Der Name des Boards darf 100 Zeichen nicht überschreiten"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:20
|
||||
msgid "Board name is required"
|
||||
msgstr "Boardname ist erforderlich"
|
||||
|
||||
#: src/views/board/index.tsx:265
|
||||
msgid "Board not found"
|
||||
msgstr "Board nicht gefunden"
|
||||
@@ -232,18 +199,6 @@ msgstr "Boards"
|
||||
msgid "Boards | {0}"
|
||||
msgstr "Boards | {0}"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:29
|
||||
msgid "Brainstorming"
|
||||
msgstr "Brainstorming"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Bug"
|
||||
msgstr "Bug"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:51
|
||||
msgid "Bug Report"
|
||||
msgstr "Fehlerbericht"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:50
|
||||
@@ -280,10 +235,6 @@ msgstr "Filter löschen"
|
||||
msgid "Click on the link we've sent to {magicLinkRecipient} to sign in."
|
||||
msgstr "Klicke auf den Link, den wir an {magicLinkRecipient} gesendet haben, um dich anzumelden."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Code Review"
|
||||
msgstr "Code-Review"
|
||||
|
||||
#: src/views/home/components/Features.tsx:84
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Arbeite nahtlos mit deinem Team zusammen."
|
||||
@@ -300,10 +251,6 @@ msgstr "Kommentare"
|
||||
msgid "Company"
|
||||
msgstr "Unternehmen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:81
|
||||
msgid "Complete"
|
||||
msgstr "Abgeschlossen"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:70
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Vollständige Kontrolle und Eigentum:"
|
||||
@@ -333,10 +280,6 @@ msgstr "Kontakt"
|
||||
msgid "Contact us"
|
||||
msgstr "Kontaktiere uns"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:27
|
||||
msgid "Content Creation"
|
||||
msgstr "Content-Erstellung"
|
||||
|
||||
#: src/components/AuthForm.tsx:334
|
||||
msgid "Continue with "
|
||||
msgstr "Fortfahren mit "
|
||||
@@ -356,7 +299,7 @@ msgstr "Kontrolliere, wer deine Boards ansehen und bearbeiten kann."
|
||||
msgid "Create another"
|
||||
msgstr "Weitere erstellen"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:128
|
||||
#: src/views/boards/components/NewBoardForm.tsx:77
|
||||
msgid "Create board"
|
||||
msgstr "Board erstellen"
|
||||
|
||||
@@ -398,10 +341,6 @@ msgstr "Arbeitsbereich erstellen"
|
||||
msgid "created the card"
|
||||
msgstr "hat die Karte erstellt"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Critical"
|
||||
msgstr "Kritisch"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:74
|
||||
msgid "Custom domain"
|
||||
msgstr "Benutzerdefinierte Domain"
|
||||
@@ -410,10 +349,6 @@ msgstr "Benutzerdefinierte Domain"
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Benutzerdefinierte URLs sind eine Premium-Funktion. Du wirst zur Aktualisierung deines Kontos weitergeleitet."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
msgstr "Kundensupport"
|
||||
|
||||
#: src/components/UserMenu.tsx:112
|
||||
msgid "Dark"
|
||||
msgstr "Dunkel"
|
||||
@@ -452,10 +387,6 @@ msgstr "Liste löschen"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Workspace löschen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:32
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:220
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Trello trennen"
|
||||
@@ -493,7 +424,6 @@ msgid "Docs"
|
||||
msgstr "Dokumente"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:77
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Documentation"
|
||||
msgstr "Dokumentation"
|
||||
|
||||
@@ -501,13 +431,6 @@ msgstr "Dokumentation"
|
||||
msgid "Don't have an account? <0><1>Sign up</1></0>"
|
||||
msgstr "Du hast noch kein Konto? <0><1>Registrieren</1></0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:35
|
||||
#: src/views/boards/components/TemplateBoards.tsx:48
|
||||
msgid "Done"
|
||||
msgstr "Erledigt"
|
||||
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:115
|
||||
#: src/views/board/components/BoardDropdown.tsx:15
|
||||
msgid "Edit board URL"
|
||||
@@ -521,10 +444,6 @@ msgstr "Kommentar bearbeiten"
|
||||
msgid "Edit label"
|
||||
msgstr "Label bearbeiten"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:31
|
||||
msgid "Editing"
|
||||
msgstr "Bearbeitung"
|
||||
|
||||
#: src/components/AuthForm.tsx:336
|
||||
msgid "email"
|
||||
msgstr "E-Mail"
|
||||
@@ -533,10 +452,6 @@ msgstr "E-Mail"
|
||||
msgid "Email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Enhancement"
|
||||
msgstr "Verbesserung"
|
||||
|
||||
#: src/components/AuthForm.tsx:301
|
||||
msgid "Enter your email address"
|
||||
msgstr "Gib deine E-Mail-Adresse ein"
|
||||
@@ -594,10 +509,6 @@ msgstr "Alles im kostenlosen Plan, plus:"
|
||||
msgid "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
msgstr "Alles was du brauchst, für immer kostenlos. Unbegrenzte Boards, unbegrenzte Listen, unbegrenzte Karten. Jederzeit upgraden."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:78
|
||||
msgid "Execution"
|
||||
msgstr "Ausführung"
|
||||
|
||||
#. placeholder {0}: provider.at(0)?.toUpperCase() + provider.slice(1)
|
||||
#: src/components/AuthForm.tsx:241
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
@@ -608,14 +519,6 @@ msgstr "Anmeldung mit {0} fehlgeschlagen. Bitte versuche es erneut."
|
||||
msgid "FAQs"
|
||||
msgstr "Häufig gestellte Fragen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Feature"
|
||||
msgstr "Feature"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:52
|
||||
msgid "Feature Request"
|
||||
msgstr "Feature-Anfrage"
|
||||
|
||||
#: src/views/home/components/Header.tsx:14
|
||||
#: src/views/home/components/Footer.tsx:49
|
||||
#: src/views/home/components/Features.tsx:125
|
||||
@@ -642,6 +545,7 @@ msgstr "Finden Sie Antworten auf häufige Fragen zum Projekt. Nicht gefunden, wo
|
||||
msgid "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 (free during the beta) 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."
|
||||
msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-Source-Projekte eine Einnahmequelle benötigen. Unsere stammt aus dem kostenpflichtigen Cloud-Angebot für Workspaces mit mehreren Benutzern (kostenlos während der Beta-Phase) und für benutzerdefinierte Workspace-Slugs. Es besteht keine Verpflichtung, dieses Angebot zu nutzen, und Sie können die Software kostenlos auf Ihrer eigenen Infrastruktur selbst hosten."
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
msgid "Free"
|
||||
msgstr "Kostenlos"
|
||||
@@ -650,14 +554,6 @@ msgstr "Kostenlos"
|
||||
msgid "Free, forever"
|
||||
msgstr "Kostenlos, für immer"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Full-time"
|
||||
msgstr "Vollzeit"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Fun"
|
||||
msgstr "Spaß"
|
||||
|
||||
#: src/views/home/components/Header.tsx:102
|
||||
#: src/views/home/components/Header.tsx:141
|
||||
#: src/views/home/components/Cta.tsx:61
|
||||
@@ -703,14 +599,6 @@ msgstr "GitHub"
|
||||
msgid "Go to app"
|
||||
msgstr "Zur App"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "High Priority"
|
||||
msgstr "Hohe Priorität"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:67
|
||||
msgid "Hired"
|
||||
msgstr "Eingestellt"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:69
|
||||
msgid "Host Kan on your own infrastructure. Ideal for organisations that need complete control over their data."
|
||||
msgstr "Hosten Sie Kan auf Ihrer eigenen Infrastruktur. Ideal für Organisationen, die vollständige Kontrolle über ihre Daten benötigen."
|
||||
@@ -743,10 +631,6 @@ msgstr "Ich bestätige, dass alle meine Kontodaten dauerhaft gelöscht werden, u
|
||||
msgid "I acknowledge that all of the workspace data will be permanently deleted and want to proceed."
|
||||
msgstr "Ich bestätige, dass alle Daten des Arbeitsbereichs dauerhaft gelöscht werden, und möchte fortfahren."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:75
|
||||
msgid "Ideas"
|
||||
msgstr "Ideen"
|
||||
|
||||
#: src/components/FeedbackButton.tsx:98
|
||||
msgid "Ideas to improve this page..."
|
||||
msgstr "Ideen zur Verbesserung dieser Seite..."
|
||||
@@ -767,10 +651,6 @@ msgstr "Import fehlgeschlagen"
|
||||
msgid "Import your Trello boards and hit the ground running."
|
||||
msgstr "Importieren Sie Ihre Trello-Boards und starten Sie sofort durch."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Important"
|
||||
msgstr "Wichtig"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:27
|
||||
msgid "Importing from Trello"
|
||||
msgstr "Import von Trello"
|
||||
@@ -779,12 +659,6 @@ msgstr "Import von Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Der Import Ihrer Trello-Boards in Kan ist einfach. Sie können unserer Schritt-für-Schritt-Anleitung <0>hier</0> folgen."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
msgid "In Progress"
|
||||
msgstr "In Bearbeitung"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:28
|
||||
msgid "Individuals"
|
||||
msgstr "Einzelpersonen"
|
||||
@@ -793,10 +667,6 @@ msgstr "Einzelpersonen"
|
||||
msgid "Integrations"
|
||||
msgstr "Integrationen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:64
|
||||
msgid "Interviewing"
|
||||
msgstr "Vorstellungsgespräch"
|
||||
|
||||
#: src/views/members/index.tsx:156
|
||||
msgid "Invite"
|
||||
msgstr "Einladen"
|
||||
@@ -806,10 +676,6 @@ msgstr "Einladen"
|
||||
msgid "Invite member"
|
||||
msgstr "Mitglied einladen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Junior"
|
||||
msgstr "Junior"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:51
|
||||
msgid "Kanban is better with a team. Perfect for small and growing teams looking to collaborate."
|
||||
msgstr "Kanban funktioniert besser im Team. Perfekt für kleine und wachsende Teams, die zusammenarbeiten möchten."
|
||||
@@ -837,10 +703,6 @@ msgstr "Labels & Filter"
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Lernen"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:130
|
||||
msgid "Legal"
|
||||
msgstr "Rechtliches"
|
||||
@@ -873,22 +735,10 @@ msgstr "Login | kan.bn"
|
||||
msgid "Logout"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Long-term"
|
||||
msgstr "Langfristig"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Low Priority"
|
||||
msgstr "Niedrige Priorität"
|
||||
|
||||
#: src/components/AuthForm.tsx:337
|
||||
msgid "magic link"
|
||||
msgstr "Magic Link"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Medium Priority"
|
||||
msgstr "Mittlere Priorität"
|
||||
|
||||
#: src/views/members/index.tsx:148
|
||||
#: src/views/card/index.tsx:251
|
||||
#: src/views/board/components/NewCardForm.tsx:290
|
||||
@@ -914,7 +764,7 @@ msgstr "hat die Karte von <0>{fromList}</0> nach <1>{toList}</1> verschoben"
|
||||
msgid "moved the card to another list"
|
||||
msgstr "hat die Karte in eine andere Liste verschoben"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:99
|
||||
#: src/views/boards/components/NewBoardForm.tsx:63
|
||||
#: src/components/LabelForm.tsx:134
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
@@ -927,7 +777,7 @@ msgstr "Brauchst du Hilfe?"
|
||||
msgid "New"
|
||||
msgstr "Neu"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:85
|
||||
#: src/views/boards/components/NewBoardForm.tsx:49
|
||||
msgid "New board"
|
||||
msgstr "Neues Board"
|
||||
|
||||
@@ -948,22 +798,10 @@ msgstr "Neues Label"
|
||||
msgid "New list"
|
||||
msgstr "Neue Liste"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:43
|
||||
msgid "New Ticket"
|
||||
msgstr "Neues Ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:62
|
||||
msgid "New workspace"
|
||||
msgstr "Neuer Workspace"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Newsletter"
|
||||
msgstr "Newsletter"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:80
|
||||
msgid "Next Steps"
|
||||
msgstr "Nächste Schritte"
|
||||
|
||||
#: src/views/boards/components/BoardsList.tsx:35
|
||||
msgid "No boards"
|
||||
msgstr "Keine Boards"
|
||||
@@ -980,14 +818,6 @@ msgstr "Keine Kreditkarte erforderlich"
|
||||
msgid "No lists"
|
||||
msgstr "Keine Listen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Angebot"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:66
|
||||
msgid "Onboarding"
|
||||
msgstr "Einarbeitung"
|
||||
|
||||
#: src/views/settings/index.tsx:263
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
@@ -1008,10 +838,6 @@ msgstr "Organisiere und finde Karten schnell mit leistungsstarken Filterwerkzeug
|
||||
msgid "Own your data"
|
||||
msgstr "Besitze deine Daten"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Part-time"
|
||||
msgstr "Teilzeit"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Zahlungshäufigkeit"
|
||||
@@ -1025,14 +851,6 @@ msgstr "Ausstehend"
|
||||
msgid "per user/month"
|
||||
msgstr "pro Benutzer/Monat"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:73
|
||||
msgid "Personal Project"
|
||||
msgstr "Persönliches Projekt"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:77
|
||||
msgid "Planning"
|
||||
msgstr "Planung"
|
||||
|
||||
#: src/components/AuthForm.tsx:305
|
||||
msgid "Please enter a valid email address"
|
||||
msgstr "Bitte gib eine gültige E-Mail-Adresse ein"
|
||||
@@ -1108,30 +926,10 @@ msgstr "Profilbild"
|
||||
msgid "Public"
|
||||
msgstr "Öffentlich"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:34
|
||||
msgid "Publishing"
|
||||
msgstr "Veröffentlichung"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:53
|
||||
msgid "Question"
|
||||
msgstr "Frage"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:147
|
||||
msgid "Questions?"
|
||||
msgstr "Fragen?"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Quick Win"
|
||||
msgstr "Schneller Erfolg"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:60
|
||||
msgid "Recruitment"
|
||||
msgstr "Personalbeschaffung"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Remote"
|
||||
msgstr "Remote"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:58
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
@@ -1152,22 +950,10 @@ msgstr "hat ein Mitglied von der Karte entfernt"
|
||||
msgid "removed label <0>{label}</0>"
|
||||
msgstr "hat Label <0>{label}</0> entfernt"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:76
|
||||
msgid "Research"
|
||||
msgstr "Recherche"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:47
|
||||
msgid "Resolution"
|
||||
msgstr "Lösung"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:113
|
||||
msgid "Resources"
|
||||
msgstr "Ressourcen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:79
|
||||
msgid "Review"
|
||||
msgstr "Überprüfung"
|
||||
|
||||
#: src/views/settings/components/CreateAPIKeyForm.tsx:49
|
||||
msgid "Revoke"
|
||||
msgstr "Widerrufen"
|
||||
@@ -1193,10 +979,6 @@ msgstr "Speichern"
|
||||
msgid "Save time with reusable board templates."
|
||||
msgstr "Spare Zeit mit wiederverwendbaren Board-Vorlagen."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:63
|
||||
msgid "Screening"
|
||||
msgstr "Vorauswahl"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Alle auswählen"
|
||||
@@ -1221,10 +1003,6 @@ msgstr "hat sich selbst die Karte zugewiesen"
|
||||
msgid "Send"
|
||||
msgstr "Senden"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/components/SideNavigation.tsx:49
|
||||
msgid "Settings"
|
||||
@@ -1265,14 +1043,6 @@ msgstr "Einfache Preisgestaltung"
|
||||
msgid "Simple, visual task management that just works. Drag and drop cards, collaborate with your team, and get more done."
|
||||
msgstr "Einfaches, visuelles Aufgabenmanagement, das einfach funktioniert. Ziehe Karten per Drag-and-drop, arbeite mit deinem Team zusammen und erledige mehr."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Social Media"
|
||||
msgstr "Social Media"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:21
|
||||
msgid "Software Development"
|
||||
msgstr "Softwareentwicklung"
|
||||
|
||||
#: src/views/home/index.tsx:37
|
||||
msgid "Star on Github"
|
||||
msgstr "Stern auf Github"
|
||||
@@ -1348,11 +1118,6 @@ msgstr "Dies führt zur permanenten Löschung aller mit deinem Konto verbundenen
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Dieser Workspace-Benutzername ist bereits vergeben"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "To Do"
|
||||
msgstr "Zu erledigen"
|
||||
|
||||
#: src/views/home/components/Header.tsx:73
|
||||
msgid "Toggle menu"
|
||||
msgstr "Menü umschalten"
|
||||
@@ -1369,10 +1134,6 @@ msgstr "Trello getrennt"
|
||||
msgid "Trello imports"
|
||||
msgstr "Trello-importe"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:44
|
||||
msgid "Triaging"
|
||||
msgstr "Priorisierung"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Kommentar konnte nicht hinzugefügt werden"
|
||||
@@ -1495,11 +1256,6 @@ msgstr "hat den Titel zu <0>{toTitle}</0> aktualisiert"
|
||||
msgid "Upgrade"
|
||||
msgstr "Upgrade"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
#: src/views/boards/components/TemplateBoards.tsx:54
|
||||
msgid "Urgent"
|
||||
msgstr "Dringend"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "URL darf nur Buchstaben, Zahlen und Bindestriche enthalten"
|
||||
@@ -1512,18 +1268,10 @@ msgstr "URL darf nicht länger als 24 Zeichen sein"
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "URL muss mindestens 3 Zeichen lang sein"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:117
|
||||
msgid "Use template"
|
||||
msgstr "Vorlage verwenden"
|
||||
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "User"
|
||||
msgstr "Benutzer"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "API-Schlüssel anzeigen und verwalten."
|
||||
@@ -1626,10 +1374,6 @@ msgstr "Workspace-Slug aktualisiert"
|
||||
msgid "Workspace URL"
|
||||
msgstr "Workspace-URL"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Schreiben"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:19
|
||||
msgid "Yearly"
|
||||
msgstr "Jährlich"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -132,18 +132,6 @@ msgstr "API keys"
|
||||
msgid "API Reference"
|
||||
msgstr "API Reference"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:62
|
||||
msgid "Applicants"
|
||||
msgstr "Applicants"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:48
|
||||
#~ msgid "Applicants, Screening, Interviewing, Offer, Onboarding, Hired"
|
||||
#~ msgstr "Applicants, Screening, Interviewing, Offer, Onboarding, Hired"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:33
|
||||
msgid "Approval"
|
||||
msgstr "Approval"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:47
|
||||
msgid "Are you sure want to remove {entityLabel}?"
|
||||
msgstr "Are you sure want to remove {entityLabel}?"
|
||||
@@ -169,24 +157,7 @@ msgstr "Are you sure you want to delete your account?"
|
||||
msgid "assigned <0>{memberName}</0> to the card"
|
||||
msgstr "assigned <0>{memberName}</0> to the card"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:46
|
||||
msgid "Awaiting Customer"
|
||||
msgstr "Awaiting Customer"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Backlog"
|
||||
msgstr "Backlog"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:33
|
||||
#~ msgid "Backlog, To Do, In Progress, Code Review, Done"
|
||||
#~ msgstr "Backlog, To Do, In Progress, Code Review, Done"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:15
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Basic Kanban"
|
||||
|
||||
#: src/views/settings/index.tsx:168
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
msgid "Billing"
|
||||
msgstr "Billing"
|
||||
|
||||
@@ -194,26 +165,10 @@ msgstr "Billing"
|
||||
msgid "Billing portal"
|
||||
msgstr "Billing portal"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Blog Post"
|
||||
msgstr "Blog Post"
|
||||
|
||||
#: src/views/board/index.tsx:239
|
||||
msgid "Board"
|
||||
msgstr "Board"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
msgstr "Board name cannot exceed 100 characters"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
#~ msgid "Board name cannot exceed 50 characters"
|
||||
#~ msgstr "Board name cannot exceed 50 characters"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:20
|
||||
msgid "Board name is required"
|
||||
msgstr "Board name is required"
|
||||
|
||||
#: src/views/board/index.tsx:265
|
||||
msgid "Board not found"
|
||||
msgstr "Board not found"
|
||||
@@ -252,22 +207,6 @@ msgstr "Boards"
|
||||
msgid "Boards | {0}"
|
||||
msgstr "Boards | {0}"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:29
|
||||
msgid "Brainstorming"
|
||||
msgstr "Brainstorming"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:38
|
||||
#~ msgid "Brainstorming, Writing, Editing, Design, Approval, Publishing, Done"
|
||||
#~ msgstr "Brainstorming, Writing, Editing, Design, Approval, Publishing, Done"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Bug"
|
||||
msgstr "Bug"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:51
|
||||
msgid "Bug Report"
|
||||
msgstr "Bug Report"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:50
|
||||
@@ -304,10 +243,6 @@ msgstr "Clear filters"
|
||||
msgid "Click on the link we've sent to {magicLinkRecipient} to sign in."
|
||||
msgstr "Click on the link we've sent to {magicLinkRecipient} to sign in."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Code Review"
|
||||
msgstr "Code Review"
|
||||
|
||||
#: src/views/home/components/Features.tsx:84
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Collaborate seamlessly with your team."
|
||||
@@ -324,10 +259,6 @@ msgstr "Comments"
|
||||
msgid "Company"
|
||||
msgstr "Company"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:81
|
||||
msgid "Complete"
|
||||
msgstr "Complete"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:70
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Complete control and ownership:"
|
||||
@@ -357,10 +288,6 @@ msgstr "Contact"
|
||||
msgid "Contact us"
|
||||
msgstr "Contact us"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:27
|
||||
msgid "Content Creation"
|
||||
msgstr "Content Creation"
|
||||
|
||||
#: src/components/AuthForm.tsx:334
|
||||
msgid "Continue with "
|
||||
msgstr "Continue with "
|
||||
@@ -388,7 +315,7 @@ msgstr "Create another"
|
||||
#~ msgid "Create API keys to access the Kan API."
|
||||
#~ msgstr "Create API keys to access the Kan API."
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:128
|
||||
#: src/views/boards/components/NewBoardForm.tsx:77
|
||||
msgid "Create board"
|
||||
msgstr "Create board"
|
||||
|
||||
@@ -430,10 +357,6 @@ msgstr "Create workspace"
|
||||
msgid "created the card"
|
||||
msgstr "created the card"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Critical"
|
||||
msgstr "Critical"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:74
|
||||
msgid "Custom domain"
|
||||
msgstr "Custom domain"
|
||||
@@ -442,10 +365,6 @@ msgstr "Custom domain"
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
msgstr "Customer Support"
|
||||
|
||||
#: src/components/UserMenu.tsx:112
|
||||
msgid "Dark"
|
||||
msgstr "Dark"
|
||||
@@ -484,10 +403,6 @@ msgstr "Delete list"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Delete workspace"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:32
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:220
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Disconnect Trello"
|
||||
@@ -525,7 +440,6 @@ msgid "Docs"
|
||||
msgstr "Docs"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:77
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
@@ -533,13 +447,6 @@ msgstr "Documentation"
|
||||
msgid "Don't have an account? <0><1>Sign up</1></0>"
|
||||
msgstr "Don't have an account? <0><1>Sign up</1></0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:35
|
||||
#: src/views/boards/components/TemplateBoards.tsx:48
|
||||
msgid "Done"
|
||||
msgstr "Done"
|
||||
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:115
|
||||
#: src/views/board/components/BoardDropdown.tsx:15
|
||||
msgid "Edit board URL"
|
||||
@@ -553,10 +460,6 @@ msgstr "Edit comment"
|
||||
msgid "Edit label"
|
||||
msgstr "Edit label"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:31
|
||||
msgid "Editing"
|
||||
msgstr "Editing"
|
||||
|
||||
#: src/components/AuthForm.tsx:336
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
@@ -565,10 +468,6 @@ msgstr "email"
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Enhancement"
|
||||
msgstr "Enhancement"
|
||||
|
||||
#: src/components/AuthForm.tsx:301
|
||||
msgid "Enter your email address"
|
||||
msgstr "Enter your email address"
|
||||
@@ -626,10 +525,6 @@ msgstr "Everything in the free plan, plus:"
|
||||
msgid "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
msgstr "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:78
|
||||
msgid "Execution"
|
||||
msgstr "Execution"
|
||||
|
||||
#. placeholder {0}: provider.at(0)?.toUpperCase() + provider.slice(1)
|
||||
#: src/components/AuthForm.tsx:241
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
@@ -640,14 +535,6 @@ msgstr "Failed to login with {0}. Please try again."
|
||||
msgid "FAQs"
|
||||
msgstr "FAQs"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Feature"
|
||||
msgstr "Feature"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:52
|
||||
msgid "Feature Request"
|
||||
msgstr "Feature Request"
|
||||
|
||||
#: src/views/home/components/Header.tsx:14
|
||||
#: src/views/home/components/Footer.tsx:49
|
||||
#: src/views/home/components/Features.tsx:125
|
||||
@@ -683,14 +570,6 @@ msgstr "Free"
|
||||
msgid "Free, forever"
|
||||
msgstr "Free, forever"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Full-time"
|
||||
msgstr "Full-time"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Fun"
|
||||
msgstr "Fun"
|
||||
|
||||
#: src/views/home/components/Header.tsx:102
|
||||
#: src/views/home/components/Header.tsx:141
|
||||
#: src/views/home/components/Cta.tsx:61
|
||||
@@ -736,14 +615,6 @@ msgstr "GitHub"
|
||||
msgid "Go to app"
|
||||
msgstr "Go to app"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "High Priority"
|
||||
msgstr "High Priority"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:67
|
||||
msgid "Hired"
|
||||
msgstr "Hired"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:69
|
||||
msgid "Host Kan on your own infrastructure. Ideal for organisations that need complete control over their data."
|
||||
msgstr "Host Kan on your own infrastructure. Ideal for organisations that need complete control over their data."
|
||||
@@ -776,18 +647,10 @@ msgstr "I acknowledge that all of my account data will be permanently deleted an
|
||||
msgid "I acknowledge that all of the workspace data will be permanently deleted and want to proceed."
|
||||
msgstr "I acknowledge that all of the workspace data will be permanently deleted and want to proceed."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:75
|
||||
msgid "Ideas"
|
||||
msgstr "Ideas"
|
||||
|
||||
#: src/components/FeedbackButton.tsx:98
|
||||
msgid "Ideas to improve this page..."
|
||||
msgstr "Ideas to improve this page..."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:53
|
||||
#~ msgid "Ideas, Research, Planning, Execution, Review, Next Steps, Complete"
|
||||
#~ msgstr "Ideas, Research, Planning, Execution, Review, Next Steps, Complete"
|
||||
|
||||
#: src/views/boards/index.tsx:39
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
@@ -804,10 +667,6 @@ msgstr "Import failed"
|
||||
msgid "Import your Trello boards and hit the ground running."
|
||||
msgstr "Import your Trello boards and hit the ground running."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Important"
|
||||
msgstr "Important"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:27
|
||||
msgid "Importing from Trello"
|
||||
msgstr "Importing from Trello"
|
||||
@@ -816,12 +675,6 @@ msgstr "Importing from Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
msgid "In Progress"
|
||||
msgstr "In Progress"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:28
|
||||
msgid "Individuals"
|
||||
msgstr "Individuals"
|
||||
@@ -830,10 +683,6 @@ msgstr "Individuals"
|
||||
msgid "Integrations"
|
||||
msgstr "Integrations"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:64
|
||||
msgid "Interviewing"
|
||||
msgstr "Interviewing"
|
||||
|
||||
#: src/views/members/index.tsx:156
|
||||
msgid "Invite"
|
||||
msgstr "Invite"
|
||||
@@ -843,10 +692,6 @@ msgstr "Invite"
|
||||
msgid "Invite member"
|
||||
msgstr "Invite member"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Junior"
|
||||
msgstr "Junior"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:51
|
||||
msgid "Kanban is better with a team. Perfect for small and growing teams looking to collaborate."
|
||||
msgstr "Kanban is better with a team. Perfect for small and growing teams looking to collaborate."
|
||||
@@ -874,10 +719,6 @@ msgstr "Labels & Filters"
|
||||
msgid "Language"
|
||||
msgstr "Language"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Learning"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:130
|
||||
msgid "Legal"
|
||||
msgstr "Legal"
|
||||
@@ -910,22 +751,10 @@ msgstr "Login | kan.bn"
|
||||
msgid "Logout"
|
||||
msgstr "Logout"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Long-term"
|
||||
msgstr "Long-term"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Low Priority"
|
||||
msgstr "Low Priority"
|
||||
|
||||
#: src/components/AuthForm.tsx:337
|
||||
msgid "magic link"
|
||||
msgstr "magic link"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Medium Priority"
|
||||
msgstr "Medium Priority"
|
||||
|
||||
#: src/views/members/index.tsx:148
|
||||
#: src/views/card/index.tsx:251
|
||||
#: src/views/board/components/NewCardForm.tsx:290
|
||||
@@ -951,7 +780,7 @@ msgstr "moved the card from <0>{fromList}</0> to<1>{toList}</1>"
|
||||
msgid "moved the card to another list"
|
||||
msgstr "moved the card to another list"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:99
|
||||
#: src/views/boards/components/NewBoardForm.tsx:63
|
||||
#: src/components/LabelForm.tsx:134
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
@@ -964,7 +793,7 @@ msgstr "Need help?"
|
||||
msgid "New"
|
||||
msgstr "New"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:85
|
||||
#: src/views/boards/components/NewBoardForm.tsx:49
|
||||
msgid "New board"
|
||||
msgstr "New board"
|
||||
|
||||
@@ -985,26 +814,10 @@ msgstr "New label"
|
||||
msgid "New list"
|
||||
msgstr "New list"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:43
|
||||
msgid "New Ticket"
|
||||
msgstr "New Ticket"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:43
|
||||
#~ msgid "New Ticket, Triaging, In Progress, Awaiting Customer, Resolution, Done"
|
||||
#~ msgstr "New Ticket, Triaging, In Progress, Awaiting Customer, Resolution, Done"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:62
|
||||
msgid "New workspace"
|
||||
msgstr "New workspace"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Newsletter"
|
||||
msgstr "Newsletter"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:80
|
||||
msgid "Next Steps"
|
||||
msgstr "Next Steps"
|
||||
|
||||
#: src/views/boards/components/BoardsList.tsx:35
|
||||
msgid "No boards"
|
||||
msgstr "No boards"
|
||||
@@ -1021,14 +834,6 @@ msgstr "No credit card required"
|
||||
msgid "No lists"
|
||||
msgstr "No lists"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Offer"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:66
|
||||
msgid "Onboarding"
|
||||
msgstr "Onboarding"
|
||||
|
||||
#: src/views/settings/index.tsx:263
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
@@ -1049,10 +854,6 @@ msgstr "Organize and find cards quickly with powerful filtering tools."
|
||||
msgid "Own your data"
|
||||
msgstr "Own your data"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Part-time"
|
||||
msgstr "Part-time"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Payment frequency"
|
||||
@@ -1066,14 +867,6 @@ msgstr "Pending"
|
||||
msgid "per user/month"
|
||||
msgstr "per user/month"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:73
|
||||
msgid "Personal Project"
|
||||
msgstr "Personal Project"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:77
|
||||
msgid "Planning"
|
||||
msgstr "Planning"
|
||||
|
||||
#: src/components/AuthForm.tsx:305
|
||||
msgid "Please enter a valid email address"
|
||||
msgstr "Please enter a valid email address"
|
||||
@@ -1149,30 +942,10 @@ msgstr "Profile picture"
|
||||
msgid "Public"
|
||||
msgstr "Public"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:34
|
||||
msgid "Publishing"
|
||||
msgstr "Publishing"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:53
|
||||
msgid "Question"
|
||||
msgstr "Question"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:147
|
||||
msgid "Questions?"
|
||||
msgstr "Questions?"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Quick Win"
|
||||
msgstr "Quick Win"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:60
|
||||
msgid "Recruitment"
|
||||
msgstr "Recruitment"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Remote"
|
||||
msgstr "Remote"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:58
|
||||
msgid "Remove"
|
||||
msgstr "Remove"
|
||||
@@ -1193,22 +966,10 @@ msgstr "removed a member from the card"
|
||||
msgid "removed label <0>{label}</0>"
|
||||
msgstr "removed label <0>{label}</0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:76
|
||||
msgid "Research"
|
||||
msgstr "Research"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:47
|
||||
msgid "Resolution"
|
||||
msgstr "Resolution"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:113
|
||||
msgid "Resources"
|
||||
msgstr "Resources"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:79
|
||||
msgid "Review"
|
||||
msgstr "Review"
|
||||
|
||||
#: src/views/settings/components/CreateAPIKeyForm.tsx:49
|
||||
msgid "Revoke"
|
||||
msgstr "Revoke"
|
||||
@@ -1234,10 +995,6 @@ msgstr "Save"
|
||||
msgid "Save time with reusable board templates."
|
||||
msgstr "Save time with reusable board templates."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:63
|
||||
msgid "Screening"
|
||||
msgstr "Screening"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Select all"
|
||||
@@ -1262,10 +1019,6 @@ msgstr "self-assigned the card"
|
||||
msgid "Send"
|
||||
msgstr "Send"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/components/SideNavigation.tsx:49
|
||||
msgid "Settings"
|
||||
@@ -1306,14 +1059,6 @@ msgstr "Simple pricing"
|
||||
msgid "Simple, visual task management that just works. Drag and drop cards, collaborate with your team, and get more done."
|
||||
msgstr "Simple, visual task management that just works. Drag and drop cards, collaborate with your team, and get more done."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Social Media"
|
||||
msgstr "Social Media"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:21
|
||||
msgid "Software Development"
|
||||
msgstr "Software Development"
|
||||
|
||||
#: src/views/home/index.tsx:37
|
||||
msgid "Star on Github"
|
||||
msgstr "Star on Github"
|
||||
@@ -1389,15 +1134,6 @@ msgstr "This will result in the permanent deletion of all data associated with y
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "This workspace username has already been taken"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "To Do"
|
||||
msgstr "To Do"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:28
|
||||
#~ msgid "To Do, In Progress, Done"
|
||||
#~ msgstr "To Do, In Progress, Done"
|
||||
|
||||
#: src/views/home/components/Header.tsx:73
|
||||
msgid "Toggle menu"
|
||||
msgstr "Toggle menu"
|
||||
@@ -1414,10 +1150,6 @@ msgstr "Trello disconnected"
|
||||
msgid "Trello imports"
|
||||
msgstr "Trello imports"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:44
|
||||
msgid "Triaging"
|
||||
msgstr "Triaging"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Unable to add comment"
|
||||
@@ -1540,11 +1272,6 @@ msgstr "updated the title to <0>{toTitle}</0>"
|
||||
msgid "Upgrade"
|
||||
msgstr "Upgrade"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
#: src/views/boards/components/TemplateBoards.tsx:54
|
||||
msgid "Urgent"
|
||||
msgstr "Urgent"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "URL can only contain letters, numbers, and hyphens"
|
||||
@@ -1557,18 +1284,10 @@ msgstr "URL cannot exceed 24 characters"
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "URL must be at least 3 characters long"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:117
|
||||
msgid "Use template"
|
||||
msgstr "Use template"
|
||||
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "User"
|
||||
msgstr "User"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "View and manage your API keys."
|
||||
@@ -1675,10 +1394,6 @@ msgstr "Workspace slug updated"
|
||||
msgid "Workspace URL"
|
||||
msgstr "Workspace URL"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Writing"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:19
|
||||
msgid "Yearly"
|
||||
msgstr "Yearly"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -124,14 +124,6 @@ msgstr "Claves API"
|
||||
msgid "API Reference"
|
||||
msgstr "Referencia de API"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:62
|
||||
msgid "Applicants"
|
||||
msgstr "Solicitantes"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:33
|
||||
msgid "Approval"
|
||||
msgstr "Aprobación"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:47
|
||||
msgid "Are you sure want to remove {entityLabel}?"
|
||||
msgstr "¿Estás seguro de que quieres eliminar {entityLabel}?"
|
||||
@@ -157,20 +149,7 @@ msgstr "¿Estás seguro de que quieres eliminar tu cuenta?"
|
||||
msgid "assigned <0>{memberName}</0> to the card"
|
||||
msgstr "asignó a <0>{memberName}</0> a la tarjeta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:46
|
||||
msgid "Awaiting Customer"
|
||||
msgstr "Esperando al cliente"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Backlog"
|
||||
msgstr "Pendientes"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:15
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban básico"
|
||||
|
||||
#: src/views/settings/index.tsx:168
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
msgid "Billing"
|
||||
msgstr "Facturación"
|
||||
|
||||
@@ -178,22 +157,10 @@ msgstr "Facturación"
|
||||
msgid "Billing portal"
|
||||
msgstr "Portal de facturación"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Blog Post"
|
||||
msgstr "Entrada de blog"
|
||||
|
||||
#: src/views/board/index.tsx:239
|
||||
msgid "Board"
|
||||
msgstr "Tablero"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
msgstr "El nombre del tablero no puede exceder los 100 caracteres"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:20
|
||||
msgid "Board name is required"
|
||||
msgstr "El nombre del tablero es obligatorio"
|
||||
|
||||
#: src/views/board/index.tsx:265
|
||||
msgid "Board not found"
|
||||
msgstr "Tablero no encontrado"
|
||||
@@ -232,18 +199,6 @@ msgstr "Tableros"
|
||||
msgid "Boards | {0}"
|
||||
msgstr "Tableros | {0}"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:29
|
||||
msgid "Brainstorming"
|
||||
msgstr "Lluvia de ideas"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Bug"
|
||||
msgstr "Error"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:51
|
||||
msgid "Bug Report"
|
||||
msgstr "Informe de error"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:50
|
||||
@@ -280,10 +235,6 @@ msgstr "Borrar filtros"
|
||||
msgid "Click on the link we've sent to {magicLinkRecipient} to sign in."
|
||||
msgstr "Haz clic en el enlace que hemos enviado a {magicLinkRecipient} para iniciar sesión."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Code Review"
|
||||
msgstr "Revisión de código"
|
||||
|
||||
#: src/views/home/components/Features.tsx:84
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Colabora sin problemas con tu equipo."
|
||||
@@ -300,10 +251,6 @@ msgstr "Comentarios"
|
||||
msgid "Company"
|
||||
msgstr "Empresa"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:81
|
||||
msgid "Complete"
|
||||
msgstr "Completado"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:70
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Control y propiedad completos:"
|
||||
@@ -333,10 +280,6 @@ msgstr "Contacto"
|
||||
msgid "Contact us"
|
||||
msgstr "Contáctanos"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:27
|
||||
msgid "Content Creation"
|
||||
msgstr "Creación de contenido"
|
||||
|
||||
#: src/components/AuthForm.tsx:334
|
||||
msgid "Continue with "
|
||||
msgstr "Continuar con "
|
||||
@@ -356,7 +299,7 @@ msgstr "Controla quién puede ver y editar tus tableros."
|
||||
msgid "Create another"
|
||||
msgstr "Crear otro"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:128
|
||||
#: src/views/boards/components/NewBoardForm.tsx:77
|
||||
msgid "Create board"
|
||||
msgstr "Crear tablero"
|
||||
|
||||
@@ -398,10 +341,6 @@ msgstr "Crear espacio de trabajo"
|
||||
msgid "created the card"
|
||||
msgstr "creó la tarjeta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Critical"
|
||||
msgstr "Crítico"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:74
|
||||
msgid "Custom domain"
|
||||
msgstr "Dominio personalizado"
|
||||
@@ -410,10 +349,6 @@ msgstr "Dominio personalizado"
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Las URL personalizadas son una función premium. Serás dirigido a actualizar tu cuenta."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
msgstr "Atención al cliente"
|
||||
|
||||
#: src/components/UserMenu.tsx:112
|
||||
msgid "Dark"
|
||||
msgstr "Oscuro"
|
||||
@@ -452,10 +387,6 @@ msgstr "Eliminar lista"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Eliminar espacio de trabajo"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:32
|
||||
msgid "Design"
|
||||
msgstr "Diseño"
|
||||
|
||||
#: src/views/settings/index.tsx:220
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Desconectar Trello"
|
||||
@@ -493,7 +424,6 @@ msgid "Docs"
|
||||
msgstr "Documentos"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:77
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Documentation"
|
||||
msgstr "Documentación"
|
||||
|
||||
@@ -501,13 +431,6 @@ msgstr "Documentación"
|
||||
msgid "Don't have an account? <0><1>Sign up</1></0>"
|
||||
msgstr "¿No tienes una cuenta? <0><1>Regístrate</1></0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:35
|
||||
#: src/views/boards/components/TemplateBoards.tsx:48
|
||||
msgid "Done"
|
||||
msgstr "Terminado"
|
||||
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:115
|
||||
#: src/views/board/components/BoardDropdown.tsx:15
|
||||
msgid "Edit board URL"
|
||||
@@ -521,10 +444,6 @@ msgstr "Editar comentario"
|
||||
msgid "Edit label"
|
||||
msgstr "Editar etiqueta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:31
|
||||
msgid "Editing"
|
||||
msgstr "Editando"
|
||||
|
||||
#: src/components/AuthForm.tsx:336
|
||||
msgid "email"
|
||||
msgstr "correo electrónico"
|
||||
@@ -533,10 +452,6 @@ msgstr "correo electrónico"
|
||||
msgid "Email"
|
||||
msgstr "Correo electrónico"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Enhancement"
|
||||
msgstr "Mejora"
|
||||
|
||||
#: src/components/AuthForm.tsx:301
|
||||
msgid "Enter your email address"
|
||||
msgstr "Introduce tu dirección de correo electrónico"
|
||||
@@ -594,10 +509,6 @@ msgstr "Todo lo que hay en el plan gratuito, más:"
|
||||
msgid "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
msgstr "Todo lo que necesitas, gratis para siempre. Tableros ilimitados, listas ilimitadas, tarjetas ilimitadas. Actualiza en cualquier momento."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:78
|
||||
msgid "Execution"
|
||||
msgstr "Ejecución"
|
||||
|
||||
#. placeholder {0}: provider.at(0)?.toUpperCase() + provider.slice(1)
|
||||
#: src/components/AuthForm.tsx:241
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
@@ -608,14 +519,6 @@ msgstr "Error al iniciar sesión con {0}. Por favor, inténtalo de nuevo."
|
||||
msgid "FAQs"
|
||||
msgstr "Preguntas frecuentes"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Feature"
|
||||
msgstr "Función"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:52
|
||||
msgid "Feature Request"
|
||||
msgstr "Solicitud de función"
|
||||
|
||||
#: src/views/home/components/Header.tsx:14
|
||||
#: src/views/home/components/Footer.tsx:49
|
||||
#: src/views/home/components/Features.tsx:125
|
||||
@@ -642,6 +545,7 @@ msgstr "Encuentra respuestas a preguntas frecuentes sobre el proyecto. ¿No encu
|
||||
msgid "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 (free during the beta) 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."
|
||||
msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos proyectos de código abierto necesitan una fuente de ingresos. La nuestra proviene de la oferta de pago en la nube para espacios de trabajo con múltiples usuarios (gratuita durante la beta) y para slugs personalizados de espacios de trabajo. No hay obligación de usarla, y puedes autoalojar el software en tu propia infraestructura sin costo alguno."
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
@@ -650,14 +554,6 @@ msgstr "Gratis"
|
||||
msgid "Free, forever"
|
||||
msgstr "Gratis, para siempre"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Full-time"
|
||||
msgstr "Tiempo completo"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Fun"
|
||||
msgstr "Diversión"
|
||||
|
||||
#: src/views/home/components/Header.tsx:102
|
||||
#: src/views/home/components/Header.tsx:141
|
||||
#: src/views/home/components/Cta.tsx:61
|
||||
@@ -703,14 +599,6 @@ msgstr "GitHub"
|
||||
msgid "Go to app"
|
||||
msgstr "Ir a la aplicación"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "High Priority"
|
||||
msgstr "Alta prioridad"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:67
|
||||
msgid "Hired"
|
||||
msgstr "Contratado"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:69
|
||||
msgid "Host Kan on your own infrastructure. Ideal for organisations that need complete control over their data."
|
||||
msgstr "Aloja Kan en tu propia infraestructura. Ideal para organizaciones que necesitan control completo sobre sus datos."
|
||||
@@ -743,10 +631,6 @@ msgstr "Reconozco que todos los datos de mi cuenta serán eliminados permanentem
|
||||
msgid "I acknowledge that all of the workspace data will be permanently deleted and want to proceed."
|
||||
msgstr "Reconozco que todos los datos del espacio de trabajo serán eliminados permanentemente y quiero continuar."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:75
|
||||
msgid "Ideas"
|
||||
msgstr "Ideas"
|
||||
|
||||
#: src/components/FeedbackButton.tsx:98
|
||||
msgid "Ideas to improve this page..."
|
||||
msgstr "Ideas para mejorar esta página..."
|
||||
@@ -767,10 +651,6 @@ msgstr "Importación fallida"
|
||||
msgid "Import your Trello boards and hit the ground running."
|
||||
msgstr "Importa tus tableros de Trello y comienza a trabajar de inmediato."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Important"
|
||||
msgstr "Importante"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:27
|
||||
msgid "Importing from Trello"
|
||||
msgstr "Importando desde Trello"
|
||||
@@ -779,12 +659,6 @@ msgstr "Importando desde Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Importar tus tableros de Trello a Kan es fácil. Puedes seguir nuestra guía paso a paso <0>aquí</0>."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
msgid "In Progress"
|
||||
msgstr "En progreso"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:28
|
||||
msgid "Individuals"
|
||||
msgstr "Individuos"
|
||||
@@ -793,10 +667,6 @@ msgstr "Individuos"
|
||||
msgid "Integrations"
|
||||
msgstr "Integraciones"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:64
|
||||
msgid "Interviewing"
|
||||
msgstr "Entrevistando"
|
||||
|
||||
#: src/views/members/index.tsx:156
|
||||
msgid "Invite"
|
||||
msgstr "Invitar"
|
||||
@@ -806,10 +676,6 @@ msgstr "Invitar"
|
||||
msgid "Invite member"
|
||||
msgstr "Invitar miembro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Junior"
|
||||
msgstr "Junior"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:51
|
||||
msgid "Kanban is better with a team. Perfect for small and growing teams looking to collaborate."
|
||||
msgstr "Kanban es mejor con un equipo. Perfecto para equipos pequeños y en crecimiento que buscan colaborar."
|
||||
@@ -837,10 +703,6 @@ msgstr "Etiquetas y filtros"
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Aprendizaje"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:130
|
||||
msgid "Legal"
|
||||
msgstr "Legal"
|
||||
@@ -873,22 +735,10 @@ msgstr "Iniciar sesión | kan.bn"
|
||||
msgid "Logout"
|
||||
msgstr "Cerrar sesión"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Long-term"
|
||||
msgstr "Largo plazo"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Low Priority"
|
||||
msgstr "Prioridad baja"
|
||||
|
||||
#: src/components/AuthForm.tsx:337
|
||||
msgid "magic link"
|
||||
msgstr "enlace mágico"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Medium Priority"
|
||||
msgstr "Prioridad media"
|
||||
|
||||
#: src/views/members/index.tsx:148
|
||||
#: src/views/card/index.tsx:251
|
||||
#: src/views/board/components/NewCardForm.tsx:290
|
||||
@@ -914,7 +764,7 @@ msgstr "movió la tarjeta de <0>{fromList}</0> a<1>{toList}</1>"
|
||||
msgid "moved the card to another list"
|
||||
msgstr "movió la tarjeta a otra lista"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:99
|
||||
#: src/views/boards/components/NewBoardForm.tsx:63
|
||||
#: src/components/LabelForm.tsx:134
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
@@ -927,7 +777,7 @@ msgstr "¿Necesitas ayuda?"
|
||||
msgid "New"
|
||||
msgstr "Nuevo"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:85
|
||||
#: src/views/boards/components/NewBoardForm.tsx:49
|
||||
msgid "New board"
|
||||
msgstr "Nuevo tablero"
|
||||
|
||||
@@ -948,22 +798,10 @@ msgstr "Nueva etiqueta"
|
||||
msgid "New list"
|
||||
msgstr "Nueva lista"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:43
|
||||
msgid "New Ticket"
|
||||
msgstr "Nuevo ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:62
|
||||
msgid "New workspace"
|
||||
msgstr "Nuevo espacio de trabajo"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Newsletter"
|
||||
msgstr "Boletín"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:80
|
||||
msgid "Next Steps"
|
||||
msgstr "Próximos pasos"
|
||||
|
||||
#: src/views/boards/components/BoardsList.tsx:35
|
||||
msgid "No boards"
|
||||
msgstr "Sin tableros"
|
||||
@@ -980,14 +818,6 @@ msgstr "No se requiere tarjeta de crédito"
|
||||
msgid "No lists"
|
||||
msgstr "Sin listas"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Oferta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:66
|
||||
msgid "Onboarding"
|
||||
msgstr "Incorporación"
|
||||
|
||||
#: src/views/settings/index.tsx:263
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer."
|
||||
@@ -1008,10 +838,6 @@ msgstr "Organiza y encuentra tarjetas rápidamente con potentes herramientas de
|
||||
msgid "Own your data"
|
||||
msgstr "Sé dueño de tus datos"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Part-time"
|
||||
msgstr "Tiempo parcial"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Frecuencia de pago"
|
||||
@@ -1025,14 +851,6 @@ msgstr "Pendiente"
|
||||
msgid "per user/month"
|
||||
msgstr "por usuario/mes"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:73
|
||||
msgid "Personal Project"
|
||||
msgstr "Proyecto personal"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:77
|
||||
msgid "Planning"
|
||||
msgstr "Planificación"
|
||||
|
||||
#: src/components/AuthForm.tsx:305
|
||||
msgid "Please enter a valid email address"
|
||||
msgstr "Por favor, introduce una dirección de correo electrónico válida"
|
||||
@@ -1108,30 +926,10 @@ msgstr "Foto de perfil"
|
||||
msgid "Public"
|
||||
msgstr "Público"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:34
|
||||
msgid "Publishing"
|
||||
msgstr "Publicación"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:53
|
||||
msgid "Question"
|
||||
msgstr "Pregunta"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:147
|
||||
msgid "Questions?"
|
||||
msgstr "¿Preguntas?"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Quick Win"
|
||||
msgstr "Victoria rápida"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:60
|
||||
msgid "Recruitment"
|
||||
msgstr "Reclutamiento"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Remote"
|
||||
msgstr "Remoto"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:58
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
@@ -1152,22 +950,10 @@ msgstr "eliminó un miembro de la tarjeta"
|
||||
msgid "removed label <0>{label}</0>"
|
||||
msgstr "eliminó la etiqueta <0>{label}</0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:76
|
||||
msgid "Research"
|
||||
msgstr "Investigación"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:47
|
||||
msgid "Resolution"
|
||||
msgstr "Resolución"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:113
|
||||
msgid "Resources"
|
||||
msgstr "Recursos"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:79
|
||||
msgid "Review"
|
||||
msgstr "Revisión"
|
||||
|
||||
#: src/views/settings/components/CreateAPIKeyForm.tsx:49
|
||||
msgid "Revoke"
|
||||
msgstr "Revocar"
|
||||
@@ -1193,10 +979,6 @@ msgstr "Guardar"
|
||||
msgid "Save time with reusable board templates."
|
||||
msgstr "Ahorra tiempo con plantillas de tableros reutilizables."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:63
|
||||
msgid "Screening"
|
||||
msgstr "Preselección"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Seleccionar todo"
|
||||
@@ -1221,10 +1003,6 @@ msgstr "se autoasignó la tarjeta"
|
||||
msgid "Send"
|
||||
msgstr "Enviar"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/components/SideNavigation.tsx:49
|
||||
msgid "Settings"
|
||||
@@ -1265,14 +1043,6 @@ msgstr "Precios simples"
|
||||
msgid "Simple, visual task management that just works. Drag and drop cards, collaborate with your team, and get more done."
|
||||
msgstr "Gestión de tareas visual y sencilla que simplemente funciona. Arrastra y suelta tarjetas, colabora con tu equipo y logra más."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Social Media"
|
||||
msgstr "Redes sociales"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:21
|
||||
msgid "Software Development"
|
||||
msgstr "Desarrollo de software"
|
||||
|
||||
#: src/views/home/index.tsx:37
|
||||
msgid "Star on Github"
|
||||
msgstr "Estrella en Github"
|
||||
@@ -1348,11 +1118,6 @@ msgstr "Esto resultará en la eliminación permanente de todos los datos asociad
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Este nombre de usuario del espacio de trabajo ya ha sido tomado"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "To Do"
|
||||
msgstr "Por hacer"
|
||||
|
||||
#: src/views/home/components/Header.tsx:73
|
||||
msgid "Toggle menu"
|
||||
msgstr "Alternar menú"
|
||||
@@ -1369,10 +1134,6 @@ msgstr "Trello desconectado"
|
||||
msgid "Trello imports"
|
||||
msgstr "Importaciones de Trello"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:44
|
||||
msgid "Triaging"
|
||||
msgstr "Clasificación"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "No se puede añadir el comentario"
|
||||
@@ -1495,11 +1256,6 @@ msgstr "actualizó el título a <0>{toTitle}</0>"
|
||||
msgid "Upgrade"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
#: src/views/boards/components/TemplateBoards.tsx:54
|
||||
msgid "Urgent"
|
||||
msgstr "Urgente"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "La URL solo puede contener letras, números y guiones"
|
||||
@@ -1512,18 +1268,10 @@ msgstr "La URL no puede exceder los 24 caracteres"
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "La URL debe tener al menos 3 caracteres"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:117
|
||||
msgid "Use template"
|
||||
msgstr "Usar plantilla"
|
||||
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "User"
|
||||
msgstr "Usuario"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Ver y gestionar tus claves API."
|
||||
@@ -1626,10 +1374,6 @@ msgstr "Slug del espacio de trabajo actualizado"
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL del espacio de trabajo"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Escritura"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:19
|
||||
msgid "Yearly"
|
||||
msgstr "Anual"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -124,14 +124,6 @@ msgstr "Clés API"
|
||||
msgid "API Reference"
|
||||
msgstr "Référence API"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:62
|
||||
msgid "Applicants"
|
||||
msgstr "Candidats"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:33
|
||||
msgid "Approval"
|
||||
msgstr "Approbation"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:47
|
||||
msgid "Are you sure want to remove {entityLabel}?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer {entityLabel} ?"
|
||||
@@ -157,20 +149,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer votre compte ?"
|
||||
msgid "assigned <0>{memberName}</0> to the card"
|
||||
msgstr "a assigné <0>{memberName}</0> à la carte"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:46
|
||||
msgid "Awaiting Customer"
|
||||
msgstr "En attente du client"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Backlog"
|
||||
msgstr "Backlog"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:15
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban basique"
|
||||
|
||||
#: src/views/settings/index.tsx:168
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
msgid "Billing"
|
||||
msgstr "Facturation"
|
||||
|
||||
@@ -178,22 +157,10 @@ msgstr "Facturation"
|
||||
msgid "Billing portal"
|
||||
msgstr "Portail de facturation"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Blog Post"
|
||||
msgstr "Article de blog"
|
||||
|
||||
#: src/views/board/index.tsx:239
|
||||
msgid "Board"
|
||||
msgstr "Tableau"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
msgstr "Le nom du tableau ne peut pas dépasser 100 caractères"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:20
|
||||
msgid "Board name is required"
|
||||
msgstr "Le nom du tableau est requis"
|
||||
|
||||
#: src/views/board/index.tsx:265
|
||||
msgid "Board not found"
|
||||
msgstr "Tableau introuvable"
|
||||
@@ -232,18 +199,6 @@ msgstr "Tableaux"
|
||||
msgid "Boards | {0}"
|
||||
msgstr "Tableaux | {0}"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:29
|
||||
msgid "Brainstorming"
|
||||
msgstr "Brainstorming"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Bug"
|
||||
msgstr "Bug"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:51
|
||||
msgid "Bug Report"
|
||||
msgstr "Rapport de bug"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:50
|
||||
@@ -280,10 +235,6 @@ msgstr "Effacer les filtres"
|
||||
msgid "Click on the link we've sent to {magicLinkRecipient} to sign in."
|
||||
msgstr "Cliquez sur le lien que nous avons envoyé à {magicLinkRecipient} pour vous connecter."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Code Review"
|
||||
msgstr "Revue de code"
|
||||
|
||||
#: src/views/home/components/Features.tsx:84
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Collaborez en toute fluidité avec votre équipe."
|
||||
@@ -300,10 +251,6 @@ msgstr "Commentaires"
|
||||
msgid "Company"
|
||||
msgstr "Entreprise"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:81
|
||||
msgid "Complete"
|
||||
msgstr "Terminé"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:70
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Contrôle et propriété complets :"
|
||||
@@ -333,10 +280,6 @@ msgstr "Contact"
|
||||
msgid "Contact us"
|
||||
msgstr "Contactez-nous"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:27
|
||||
msgid "Content Creation"
|
||||
msgstr "Création de contenu"
|
||||
|
||||
#: src/components/AuthForm.tsx:334
|
||||
msgid "Continue with "
|
||||
msgstr "Continuer avec "
|
||||
@@ -356,7 +299,7 @@ msgstr "Contrôlez qui peut voir et modifier vos tableaux."
|
||||
msgid "Create another"
|
||||
msgstr "Créer un autre"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:128
|
||||
#: src/views/boards/components/NewBoardForm.tsx:77
|
||||
msgid "Create board"
|
||||
msgstr "Créer un tableau"
|
||||
|
||||
@@ -398,10 +341,6 @@ msgstr "Créer un espace de travail"
|
||||
msgid "created the card"
|
||||
msgstr "a créé la carte"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Critical"
|
||||
msgstr "Critique"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:74
|
||||
msgid "Custom domain"
|
||||
msgstr "Domaine personnalisé"
|
||||
@@ -410,10 +349,6 @@ msgstr "Domaine personnalisé"
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Les URL personnalisées sont une fonctionnalité premium. Vous serez dirigé vers la mise à niveau de votre compte."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
msgstr "Support client"
|
||||
|
||||
#: src/components/UserMenu.tsx:112
|
||||
msgid "Dark"
|
||||
msgstr "Sombre"
|
||||
@@ -452,10 +387,6 @@ msgstr "Supprimer la liste"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Supprimer l'espace de travail"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:32
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:220
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Déconnecter Trello"
|
||||
@@ -493,7 +424,6 @@ msgid "Docs"
|
||||
msgstr "Documentation"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:77
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
@@ -501,13 +431,6 @@ msgstr "Documentation"
|
||||
msgid "Don't have an account? <0><1>Sign up</1></0>"
|
||||
msgstr "Vous n'avez pas de compte ? <0><1>Inscrivez-vous</1></0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:35
|
||||
#: src/views/boards/components/TemplateBoards.tsx:48
|
||||
msgid "Done"
|
||||
msgstr "Fait"
|
||||
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:115
|
||||
#: src/views/board/components/BoardDropdown.tsx:15
|
||||
msgid "Edit board URL"
|
||||
@@ -521,10 +444,6 @@ msgstr "Modifier le commentaire"
|
||||
msgid "Edit label"
|
||||
msgstr "Modifier l'étiquette"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:31
|
||||
msgid "Editing"
|
||||
msgstr "Édition"
|
||||
|
||||
#: src/components/AuthForm.tsx:336
|
||||
msgid "email"
|
||||
msgstr "e-mail"
|
||||
@@ -533,10 +452,6 @@ msgstr "e-mail"
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Enhancement"
|
||||
msgstr "Amélioration"
|
||||
|
||||
#: src/components/AuthForm.tsx:301
|
||||
msgid "Enter your email address"
|
||||
msgstr "Saisissez votre adresse e-mail"
|
||||
@@ -594,10 +509,6 @@ msgstr "Tout ce qui est inclus dans le plan gratuit, plus :"
|
||||
msgid "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
msgstr "Tout ce dont vous avez besoin, gratuit pour toujours. Tableaux illimités, listes illimitées, cartes illimitées. Possibilité de mise à niveau à tout moment."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:78
|
||||
msgid "Execution"
|
||||
msgstr "Exécution"
|
||||
|
||||
#. placeholder {0}: provider.at(0)?.toUpperCase() + provider.slice(1)
|
||||
#: src/components/AuthForm.tsx:241
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
@@ -608,14 +519,6 @@ msgstr "Échec de connexion avec {0}. Veuillez réessayer."
|
||||
msgid "FAQs"
|
||||
msgstr "FAQ"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Feature"
|
||||
msgstr "Fonctionnalité"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:52
|
||||
msgid "Feature Request"
|
||||
msgstr "Demande de fonctionnalité"
|
||||
|
||||
#: src/views/home/components/Header.tsx:14
|
||||
#: src/views/home/components/Footer.tsx:49
|
||||
#: src/views/home/components/Features.tsx:125
|
||||
@@ -642,6 +545,7 @@ msgstr "Trouvez des réponses aux questions fréquentes sur le projet. Vous ne t
|
||||
msgid "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 (free during the beta) 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."
|
||||
msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons projets open source ont besoin d'une source de revenus. La nôtre provient de l'offre cloud payante pour les espaces de travail avec plusieurs utilisateurs (gratuite pendant la bêta) et pour les slugs d'espace de travail personnalisés. Il n'y a aucune obligation de l'utiliser, et vous pouvez auto-héberger le logiciel sur votre propre infrastructure gratuitement."
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
msgid "Free"
|
||||
msgstr "Gratuit"
|
||||
@@ -650,14 +554,6 @@ msgstr "Gratuit"
|
||||
msgid "Free, forever"
|
||||
msgstr "Gratuit, pour toujours"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Full-time"
|
||||
msgstr "Temps plein"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Fun"
|
||||
msgstr "Amusant"
|
||||
|
||||
#: src/views/home/components/Header.tsx:102
|
||||
#: src/views/home/components/Header.tsx:141
|
||||
#: src/views/home/components/Cta.tsx:61
|
||||
@@ -703,14 +599,6 @@ msgstr "GitHub"
|
||||
msgid "Go to app"
|
||||
msgstr "Accéder à l'application"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "High Priority"
|
||||
msgstr "Haute priorité"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:67
|
||||
msgid "Hired"
|
||||
msgstr "Embauché"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:69
|
||||
msgid "Host Kan on your own infrastructure. Ideal for organisations that need complete control over their data."
|
||||
msgstr "Hébergez Kan sur votre propre infrastructure. Idéal pour les organisations qui ont besoin d'un contrôle total sur leurs données."
|
||||
@@ -743,10 +631,6 @@ msgstr "Je reconnais que toutes les données de mon compte seront définitivemen
|
||||
msgid "I acknowledge that all of the workspace data will be permanently deleted and want to proceed."
|
||||
msgstr "Je reconnais que toutes les données de l'espace de travail seront définitivement supprimées et je souhaite continuer."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:75
|
||||
msgid "Ideas"
|
||||
msgstr "Idées"
|
||||
|
||||
#: src/components/FeedbackButton.tsx:98
|
||||
msgid "Ideas to improve this page..."
|
||||
msgstr "Idées pour améliorer cette page..."
|
||||
@@ -767,10 +651,6 @@ msgstr "Échec de l'importation"
|
||||
msgid "Import your Trello boards and hit the ground running."
|
||||
msgstr "Importez vos tableaux Trello et commencez immédiatement."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Important"
|
||||
msgstr "Important"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:27
|
||||
msgid "Importing from Trello"
|
||||
msgstr "Importation depuis Trello"
|
||||
@@ -779,12 +659,6 @@ msgstr "Importation depuis Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "L'importation de vos tableaux Trello dans Kan est simple. Vous pouvez suivre notre guide étape par étape <0>ici</0>."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
msgid "In Progress"
|
||||
msgstr "En cours"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:28
|
||||
msgid "Individuals"
|
||||
msgstr "Particuliers"
|
||||
@@ -793,10 +667,6 @@ msgstr "Particuliers"
|
||||
msgid "Integrations"
|
||||
msgstr "Intégrations"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:64
|
||||
msgid "Interviewing"
|
||||
msgstr "Entretien"
|
||||
|
||||
#: src/views/members/index.tsx:156
|
||||
msgid "Invite"
|
||||
msgstr "Inviter"
|
||||
@@ -806,10 +676,6 @@ msgstr "Inviter"
|
||||
msgid "Invite member"
|
||||
msgstr "Inviter un membre"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Junior"
|
||||
msgstr "Junior"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:51
|
||||
msgid "Kanban is better with a team. Perfect for small and growing teams looking to collaborate."
|
||||
msgstr "Kanban est meilleur en équipe. Parfait pour les petites équipes et celles en croissance qui cherchent à collaborer."
|
||||
@@ -837,10 +703,6 @@ msgstr "Étiquettes & filtres"
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Apprentissage"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:130
|
||||
msgid "Legal"
|
||||
msgstr "Mentions légales"
|
||||
@@ -873,22 +735,10 @@ msgstr "Connexion | kan.bn"
|
||||
msgid "Logout"
|
||||
msgstr "Déconnexion"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Long-term"
|
||||
msgstr "Long terme"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Low Priority"
|
||||
msgstr "Priorité basse"
|
||||
|
||||
#: src/components/AuthForm.tsx:337
|
||||
msgid "magic link"
|
||||
msgstr "lien magique"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Medium Priority"
|
||||
msgstr "Priorité moyenne"
|
||||
|
||||
#: src/views/members/index.tsx:148
|
||||
#: src/views/card/index.tsx:251
|
||||
#: src/views/board/components/NewCardForm.tsx:290
|
||||
@@ -914,7 +764,7 @@ msgstr "a déplacé la carte de <0>{fromList}</0> vers<1>{toList}</1>"
|
||||
msgid "moved the card to another list"
|
||||
msgstr "a déplacé la carte vers une autre liste"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:99
|
||||
#: src/views/boards/components/NewBoardForm.tsx:63
|
||||
#: src/components/LabelForm.tsx:134
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
@@ -927,7 +777,7 @@ msgstr "Besoin d'aide ?"
|
||||
msgid "New"
|
||||
msgstr "Nouveau"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:85
|
||||
#: src/views/boards/components/NewBoardForm.tsx:49
|
||||
msgid "New board"
|
||||
msgstr "Nouveau tableau"
|
||||
|
||||
@@ -948,22 +798,10 @@ msgstr "Nouvelle étiquette"
|
||||
msgid "New list"
|
||||
msgstr "Nouvelle liste"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:43
|
||||
msgid "New Ticket"
|
||||
msgstr "Nouveau ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:62
|
||||
msgid "New workspace"
|
||||
msgstr "Nouvel espace de travail"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Newsletter"
|
||||
msgstr "Newsletter"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:80
|
||||
msgid "Next Steps"
|
||||
msgstr "Prochaines étapes"
|
||||
|
||||
#: src/views/boards/components/BoardsList.tsx:35
|
||||
msgid "No boards"
|
||||
msgstr "Aucun tableau"
|
||||
@@ -980,14 +818,6 @@ msgstr "Aucune carte de crédit requise"
|
||||
msgid "No lists"
|
||||
msgstr "Aucune liste"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Offre"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:66
|
||||
msgid "Onboarding"
|
||||
msgstr "Intégration"
|
||||
|
||||
#: src/views/settings/index.tsx:263
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Une fois que vous supprimez votre compte, il n'y a pas de retour possible. Cette action ne peut pas être annulée."
|
||||
@@ -1008,10 +838,6 @@ msgstr "Organisez et trouvez rapidement des cartes avec des outils de filtrage p
|
||||
msgid "Own your data"
|
||||
msgstr "Maîtrisez vos données"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Part-time"
|
||||
msgstr "Temps partiel"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Fréquence de paiement"
|
||||
@@ -1025,14 +851,6 @@ msgstr "En attente"
|
||||
msgid "per user/month"
|
||||
msgstr "par utilisateur/mois"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:73
|
||||
msgid "Personal Project"
|
||||
msgstr "Projet personnel"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:77
|
||||
msgid "Planning"
|
||||
msgstr "Planification"
|
||||
|
||||
#: src/components/AuthForm.tsx:305
|
||||
msgid "Please enter a valid email address"
|
||||
msgstr "Veuillez saisir une adresse e-mail valide"
|
||||
@@ -1108,30 +926,10 @@ msgstr "Photo de profil"
|
||||
msgid "Public"
|
||||
msgstr "Public"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:34
|
||||
msgid "Publishing"
|
||||
msgstr "Publication"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:53
|
||||
msgid "Question"
|
||||
msgstr "Question"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:147
|
||||
msgid "Questions?"
|
||||
msgstr "Des questions ?"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Quick Win"
|
||||
msgstr "Victoire rapide"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:60
|
||||
msgid "Recruitment"
|
||||
msgstr "Recrutement"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Remote"
|
||||
msgstr "À distance"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:58
|
||||
msgid "Remove"
|
||||
msgstr "Supprimer"
|
||||
@@ -1152,22 +950,10 @@ msgstr "a retiré un membre de la carte"
|
||||
msgid "removed label <0>{label}</0>"
|
||||
msgstr "a supprimé l'étiquette <0>{label}</0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:76
|
||||
msgid "Research"
|
||||
msgstr "Recherche"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:47
|
||||
msgid "Resolution"
|
||||
msgstr "Résolution"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:113
|
||||
msgid "Resources"
|
||||
msgstr "Ressources"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:79
|
||||
msgid "Review"
|
||||
msgstr "Révision"
|
||||
|
||||
#: src/views/settings/components/CreateAPIKeyForm.tsx:49
|
||||
msgid "Revoke"
|
||||
msgstr "Révoquer"
|
||||
@@ -1193,10 +979,6 @@ msgstr "Enregistrer"
|
||||
msgid "Save time with reusable board templates."
|
||||
msgstr "Gagnez du temps avec des modèles de tableaux réutilisables."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:63
|
||||
msgid "Screening"
|
||||
msgstr "Présélection"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Sélectionner tout"
|
||||
@@ -1221,10 +1003,6 @@ msgstr "s'est auto-assigné la carte"
|
||||
msgid "Send"
|
||||
msgstr "Envoyer"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/components/SideNavigation.tsx:49
|
||||
msgid "Settings"
|
||||
@@ -1265,14 +1043,6 @@ msgstr "Tarification simple"
|
||||
msgid "Simple, visual task management that just works. Drag and drop cards, collaborate with your team, and get more done."
|
||||
msgstr "Gestion de tâches visuelle et simple qui fonctionne parfaitement. Glissez-déposez des cartes, collaborez avec votre équipe et accomplissez davantage."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Social Media"
|
||||
msgstr "Réseaux sociaux"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:21
|
||||
msgid "Software Development"
|
||||
msgstr "Développement logiciel"
|
||||
|
||||
#: src/views/home/index.tsx:37
|
||||
msgid "Star on Github"
|
||||
msgstr "Étoile sur Github"
|
||||
@@ -1348,11 +1118,6 @@ msgstr "Cela entraînera la suppression définitive de toutes les données assoc
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Ce nom d'utilisateur d'espace de travail est déjà pris"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "To Do"
|
||||
msgstr "À faire"
|
||||
|
||||
#: src/views/home/components/Header.tsx:73
|
||||
msgid "Toggle menu"
|
||||
msgstr "Basculer le menu"
|
||||
@@ -1369,10 +1134,6 @@ msgstr "Trello déconnecté"
|
||||
msgid "Trello imports"
|
||||
msgstr "Importations Trello"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:44
|
||||
msgid "Triaging"
|
||||
msgstr "Triage"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Impossible d'ajouter un commentaire"
|
||||
@@ -1495,11 +1256,6 @@ msgstr "a mis à jour le titre en <0>{toTitle}</0>"
|
||||
msgid "Upgrade"
|
||||
msgstr "Mettre à niveau"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
#: src/views/boards/components/TemplateBoards.tsx:54
|
||||
msgid "Urgent"
|
||||
msgstr "Urgent"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "L'URL ne peut contenir que des lettres, des chiffres et des traits d'union"
|
||||
@@ -1512,18 +1268,10 @@ msgstr "L'URL ne peut pas dépasser 24 caractères"
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "L'URL doit comporter au moins 3 caractères"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:117
|
||||
msgid "Use template"
|
||||
msgstr "Utiliser le modèle"
|
||||
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "User"
|
||||
msgstr "Utilisateur"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Video"
|
||||
msgstr "Vidéo"
|
||||
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Consultez et gérez vos clés API."
|
||||
@@ -1626,10 +1374,6 @@ msgstr "Slug de l'espace de travail mis à jour"
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL de l'espace de travail"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Écriture"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:19
|
||||
msgid "Yearly"
|
||||
msgstr "Annuel"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -124,14 +124,6 @@ msgstr "Chiavi API"
|
||||
msgid "API Reference"
|
||||
msgstr "Riferimento API"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:62
|
||||
msgid "Applicants"
|
||||
msgstr "Candidati"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:33
|
||||
msgid "Approval"
|
||||
msgstr "Approvazione"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:47
|
||||
msgid "Are you sure want to remove {entityLabel}?"
|
||||
msgstr "Sei sicuro di voler rimuovere {entityLabel}?"
|
||||
@@ -157,20 +149,7 @@ msgstr "Sei sicuro di voler eliminare il tuo account?"
|
||||
msgid "assigned <0>{memberName}</0> to the card"
|
||||
msgstr "ha assegnato <0>{memberName}</0> alla carta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:46
|
||||
msgid "Awaiting Customer"
|
||||
msgstr "In attesa del cliente"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Backlog"
|
||||
msgstr "Backlog"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:15
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban base"
|
||||
|
||||
#: src/views/settings/index.tsx:168
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
msgid "Billing"
|
||||
msgstr "Fatturazione"
|
||||
|
||||
@@ -178,22 +157,10 @@ msgstr "Fatturazione"
|
||||
msgid "Billing portal"
|
||||
msgstr "Portale di fatturazione"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Blog Post"
|
||||
msgstr "Post del blog"
|
||||
|
||||
#: src/views/board/index.tsx:239
|
||||
msgid "Board"
|
||||
msgstr "Bacheca"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
msgstr "Il nome della bacheca non può superare i 100 caratteri"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:20
|
||||
msgid "Board name is required"
|
||||
msgstr "Il nome della bacheca è obbligatorio"
|
||||
|
||||
#: src/views/board/index.tsx:265
|
||||
msgid "Board not found"
|
||||
msgstr "Bacheca non trovata"
|
||||
@@ -232,18 +199,6 @@ msgstr "Bacheche"
|
||||
msgid "Boards | {0}"
|
||||
msgstr "Bacheche | {0}"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:29
|
||||
msgid "Brainstorming"
|
||||
msgstr "Brainstorming"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Bug"
|
||||
msgstr "Bug"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:51
|
||||
msgid "Bug Report"
|
||||
msgstr "Segnalazione bug"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:50
|
||||
@@ -280,10 +235,6 @@ msgstr "Cancella filtri"
|
||||
msgid "Click on the link we've sent to {magicLinkRecipient} to sign in."
|
||||
msgstr "Clicca sul link che abbiamo inviato a {magicLinkRecipient} per accedere."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Code Review"
|
||||
msgstr "Revisione del codice"
|
||||
|
||||
#: src/views/home/components/Features.tsx:84
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Collabora senza problemi con il tuo team."
|
||||
@@ -300,10 +251,6 @@ msgstr "Commenti"
|
||||
msgid "Company"
|
||||
msgstr "Azienda"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:81
|
||||
msgid "Complete"
|
||||
msgstr "Completato"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:70
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Controllo e proprietà completi:"
|
||||
@@ -333,10 +280,6 @@ msgstr "Contatti"
|
||||
msgid "Contact us"
|
||||
msgstr "Contattaci"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:27
|
||||
msgid "Content Creation"
|
||||
msgstr "Creazione contenuti"
|
||||
|
||||
#: src/components/AuthForm.tsx:334
|
||||
msgid "Continue with "
|
||||
msgstr "Continua con "
|
||||
@@ -356,7 +299,7 @@ msgstr "Controlla chi può visualizzare e modificare le tue bacheche."
|
||||
msgid "Create another"
|
||||
msgstr "Crea un altro"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:128
|
||||
#: src/views/boards/components/NewBoardForm.tsx:77
|
||||
msgid "Create board"
|
||||
msgstr "Crea bacheca"
|
||||
|
||||
@@ -398,10 +341,6 @@ msgstr "Crea spazio di lavoro"
|
||||
msgid "created the card"
|
||||
msgstr "ha creato la carta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Critical"
|
||||
msgstr "Critico"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:74
|
||||
msgid "Custom domain"
|
||||
msgstr "Dominio personalizzato"
|
||||
@@ -410,10 +349,6 @@ msgstr "Dominio personalizzato"
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Gli URL personalizzati sono una funzionalità premium. Sarai indirizzato all'aggiornamento del tuo account."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
msgstr "Assistenza clienti"
|
||||
|
||||
#: src/components/UserMenu.tsx:112
|
||||
msgid "Dark"
|
||||
msgstr "Scuro"
|
||||
@@ -452,10 +387,6 @@ msgstr "Elimina lista"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Elimina spazio di lavoro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:32
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:220
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Disconnetti Trello"
|
||||
@@ -493,7 +424,6 @@ msgid "Docs"
|
||||
msgstr "Documenti"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:77
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Documentation"
|
||||
msgstr "Documentazione"
|
||||
|
||||
@@ -501,13 +431,6 @@ msgstr "Documentazione"
|
||||
msgid "Don't have an account? <0><1>Sign up</1></0>"
|
||||
msgstr "Non hai un account? <0><1>Registrati</1></0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:35
|
||||
#: src/views/boards/components/TemplateBoards.tsx:48
|
||||
msgid "Done"
|
||||
msgstr "Fatto"
|
||||
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:115
|
||||
#: src/views/board/components/BoardDropdown.tsx:15
|
||||
msgid "Edit board URL"
|
||||
@@ -521,10 +444,6 @@ msgstr "Modifica commento"
|
||||
msgid "Edit label"
|
||||
msgstr "Modifica etichetta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:31
|
||||
msgid "Editing"
|
||||
msgstr "Modifica"
|
||||
|
||||
#: src/components/AuthForm.tsx:336
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
@@ -533,10 +452,6 @@ msgstr "email"
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Enhancement"
|
||||
msgstr "Miglioramento"
|
||||
|
||||
#: src/components/AuthForm.tsx:301
|
||||
msgid "Enter your email address"
|
||||
msgstr "Inserisci il tuo indirizzo email"
|
||||
@@ -594,10 +509,6 @@ msgstr "Tutto ciò che è incluso nel piano gratuito, più:"
|
||||
msgid "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
msgstr "Tutto ciò di cui hai bisogno, gratis per sempre. Bacheche illimitate, liste illimitate, schede illimitate. Aggiorna in qualsiasi momento."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:78
|
||||
msgid "Execution"
|
||||
msgstr "Esecuzione"
|
||||
|
||||
#. placeholder {0}: provider.at(0)?.toUpperCase() + provider.slice(1)
|
||||
#: src/components/AuthForm.tsx:241
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
@@ -608,14 +519,6 @@ msgstr "Accesso con {0} fallito. Riprova."
|
||||
msgid "FAQs"
|
||||
msgstr "FAQ"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Feature"
|
||||
msgstr "Funzionalità"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:52
|
||||
msgid "Feature Request"
|
||||
msgstr "Richiesta funzionalità"
|
||||
|
||||
#: src/views/home/components/Header.tsx:14
|
||||
#: src/views/home/components/Footer.tsx:49
|
||||
#: src/views/home/components/Features.tsx:125
|
||||
@@ -642,6 +545,7 @@ msgstr "Trova risposte alle domande comuni sul progetto. Non trovi quello che st
|
||||
msgid "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 (free during the beta) 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."
|
||||
msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni progetti open source necessitano di una fonte di entrate. La nostra proviene dall'offerta cloud a pagamento per workspace con più utenti (gratuita durante la beta) e per slug di workspace personalizzati. Non c'è alcun obbligo di utilizzarla, e puoi ospitare autonomamente il software sulla tua infrastruttura gratuitamente."
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
msgid "Free"
|
||||
msgstr "Gratuito"
|
||||
@@ -650,14 +554,6 @@ msgstr "Gratuito"
|
||||
msgid "Free, forever"
|
||||
msgstr "Gratuito, per sempre"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Full-time"
|
||||
msgstr "Tempo pieno"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Fun"
|
||||
msgstr "Divertimento"
|
||||
|
||||
#: src/views/home/components/Header.tsx:102
|
||||
#: src/views/home/components/Header.tsx:141
|
||||
#: src/views/home/components/Cta.tsx:61
|
||||
@@ -703,14 +599,6 @@ msgstr "GitHub"
|
||||
msgid "Go to app"
|
||||
msgstr "Vai all'app"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "High Priority"
|
||||
msgstr "Alta priorità"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:67
|
||||
msgid "Hired"
|
||||
msgstr "Assunto"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:69
|
||||
msgid "Host Kan on your own infrastructure. Ideal for organisations that need complete control over their data."
|
||||
msgstr "Ospita Kan sulla tua infrastruttura. Ideale per organizzazioni che necessitano di controllo completo sui propri dati."
|
||||
@@ -743,10 +631,6 @@ msgstr "Riconosco che tutti i dati del mio account saranno eliminati permanentem
|
||||
msgid "I acknowledge that all of the workspace data will be permanently deleted and want to proceed."
|
||||
msgstr "Riconosco che tutti i dati dell'area di lavoro saranno eliminati permanentemente e voglio procedere."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:75
|
||||
msgid "Ideas"
|
||||
msgstr "Idee"
|
||||
|
||||
#: src/components/FeedbackButton.tsx:98
|
||||
msgid "Ideas to improve this page..."
|
||||
msgstr "Idee per migliorare questa pagina..."
|
||||
@@ -767,10 +651,6 @@ msgstr "Importazione fallita"
|
||||
msgid "Import your Trello boards and hit the ground running."
|
||||
msgstr "Importa le tue bacheche Trello e parti subito."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Important"
|
||||
msgstr "Importante"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:27
|
||||
msgid "Importing from Trello"
|
||||
msgstr "Importazione da Trello"
|
||||
@@ -779,12 +659,6 @@ msgstr "Importazione da Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Importare le tue bacheche Trello in Kan è facile. Puoi seguire la nostra guida passo-passo <0>qui</0>."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
msgid "In Progress"
|
||||
msgstr "In corso"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:28
|
||||
msgid "Individuals"
|
||||
msgstr "Privati"
|
||||
@@ -793,10 +667,6 @@ msgstr "Privati"
|
||||
msgid "Integrations"
|
||||
msgstr "Integrazioni"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:64
|
||||
msgid "Interviewing"
|
||||
msgstr "Colloquio"
|
||||
|
||||
#: src/views/members/index.tsx:156
|
||||
msgid "Invite"
|
||||
msgstr "Invita"
|
||||
@@ -806,10 +676,6 @@ msgstr "Invita"
|
||||
msgid "Invite member"
|
||||
msgstr "Invita membro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Junior"
|
||||
msgstr "Junior"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:51
|
||||
msgid "Kanban is better with a team. Perfect for small and growing teams looking to collaborate."
|
||||
msgstr "Kanban è migliore con un team. Perfetto per piccoli team in crescita che cercano di collaborare."
|
||||
@@ -837,10 +703,6 @@ msgstr "Etichette & Filtri"
|
||||
msgid "Language"
|
||||
msgstr "Lingua"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Apprendimento"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:130
|
||||
msgid "Legal"
|
||||
msgstr "Legale"
|
||||
@@ -873,22 +735,10 @@ msgstr "Login | kan.bn"
|
||||
msgid "Logout"
|
||||
msgstr "Esci"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Long-term"
|
||||
msgstr "A lungo termine"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Low Priority"
|
||||
msgstr "Bassa priorità"
|
||||
|
||||
#: src/components/AuthForm.tsx:337
|
||||
msgid "magic link"
|
||||
msgstr "link magico"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Medium Priority"
|
||||
msgstr "Media priorità"
|
||||
|
||||
#: src/views/members/index.tsx:148
|
||||
#: src/views/card/index.tsx:251
|
||||
#: src/views/board/components/NewCardForm.tsx:290
|
||||
@@ -914,7 +764,7 @@ msgstr "ha spostato la scheda da <0>{fromList}</0> a<1>{toList}</1>"
|
||||
msgid "moved the card to another list"
|
||||
msgstr "ha spostato la scheda in un'altra lista"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:99
|
||||
#: src/views/boards/components/NewBoardForm.tsx:63
|
||||
#: src/components/LabelForm.tsx:134
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
@@ -927,7 +777,7 @@ msgstr "Hai bisogno di aiuto?"
|
||||
msgid "New"
|
||||
msgstr "Nuovo"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:85
|
||||
#: src/views/boards/components/NewBoardForm.tsx:49
|
||||
msgid "New board"
|
||||
msgstr "Nuova bacheca"
|
||||
|
||||
@@ -948,22 +798,10 @@ msgstr "Nuova etichetta"
|
||||
msgid "New list"
|
||||
msgstr "Nuova lista"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:43
|
||||
msgid "New Ticket"
|
||||
msgstr "Nuovo ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:62
|
||||
msgid "New workspace"
|
||||
msgstr "Nuovo spazio di lavoro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Newsletter"
|
||||
msgstr "Newsletter"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:80
|
||||
msgid "Next Steps"
|
||||
msgstr "Prossimi passi"
|
||||
|
||||
#: src/views/boards/components/BoardsList.tsx:35
|
||||
msgid "No boards"
|
||||
msgstr "Nessuna bacheca"
|
||||
@@ -980,14 +818,6 @@ msgstr "Nessuna carta di credito richiesta"
|
||||
msgid "No lists"
|
||||
msgstr "Nessuna lista"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Offerta"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:66
|
||||
msgid "Onboarding"
|
||||
msgstr "Inserimento"
|
||||
|
||||
#: src/views/settings/index.tsx:263
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata."
|
||||
@@ -1008,10 +838,6 @@ msgstr "Organizza e trova le schede rapidamente con potenti strumenti di filtrag
|
||||
msgid "Own your data"
|
||||
msgstr "Possiedi i tuoi dati"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Part-time"
|
||||
msgstr "Part-time"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Frequenza di pagamento"
|
||||
@@ -1025,14 +851,6 @@ msgstr "In attesa"
|
||||
msgid "per user/month"
|
||||
msgstr "per utente/mese"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:73
|
||||
msgid "Personal Project"
|
||||
msgstr "Progetto personale"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:77
|
||||
msgid "Planning"
|
||||
msgstr "Pianificazione"
|
||||
|
||||
#: src/components/AuthForm.tsx:305
|
||||
msgid "Please enter a valid email address"
|
||||
msgstr "Inserisci un indirizzo email valido"
|
||||
@@ -1108,30 +926,10 @@ msgstr "Immagine del profilo"
|
||||
msgid "Public"
|
||||
msgstr "Pubblico"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:34
|
||||
msgid "Publishing"
|
||||
msgstr "Pubblicazione"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:53
|
||||
msgid "Question"
|
||||
msgstr "Domanda"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:147
|
||||
msgid "Questions?"
|
||||
msgstr "Domande?"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Quick Win"
|
||||
msgstr "Vittoria rapida"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:60
|
||||
msgid "Recruitment"
|
||||
msgstr "Reclutamento"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Remote"
|
||||
msgstr "Remoto"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:58
|
||||
msgid "Remove"
|
||||
msgstr "Rimuovi"
|
||||
@@ -1152,22 +950,10 @@ msgstr "ha rimosso un membro dalla scheda"
|
||||
msgid "removed label <0>{label}</0>"
|
||||
msgstr "ha rimosso l'etichetta <0>{label}</0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:76
|
||||
msgid "Research"
|
||||
msgstr "Ricerca"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:47
|
||||
msgid "Resolution"
|
||||
msgstr "Risoluzione"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:113
|
||||
msgid "Resources"
|
||||
msgstr "Risorse"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:79
|
||||
msgid "Review"
|
||||
msgstr "Revisione"
|
||||
|
||||
#: src/views/settings/components/CreateAPIKeyForm.tsx:49
|
||||
msgid "Revoke"
|
||||
msgstr "Revoca"
|
||||
@@ -1193,10 +979,6 @@ msgstr "Salva"
|
||||
msgid "Save time with reusable board templates."
|
||||
msgstr "Risparmia tempo con modelli di bacheca riutilizzabili."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:63
|
||||
msgid "Screening"
|
||||
msgstr "Selezione"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Seleziona tutto"
|
||||
@@ -1221,10 +1003,6 @@ msgstr "si è auto-assegnato la scheda"
|
||||
msgid "Send"
|
||||
msgstr "Invia"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/components/SideNavigation.tsx:49
|
||||
msgid "Settings"
|
||||
@@ -1265,14 +1043,6 @@ msgstr "Prezzi semplici"
|
||||
msgid "Simple, visual task management that just works. Drag and drop cards, collaborate with your team, and get more done."
|
||||
msgstr "Gestione delle attività semplice e visuale che funziona. Trascina e rilascia le schede, collabora con il tuo team e ottieni di più."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Social Media"
|
||||
msgstr "Social media"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:21
|
||||
msgid "Software Development"
|
||||
msgstr "Sviluppo software"
|
||||
|
||||
#: src/views/home/index.tsx:37
|
||||
msgid "Star on Github"
|
||||
msgstr "Metti una stella su Github"
|
||||
@@ -1348,11 +1118,6 @@ msgstr "Questo comporterà l'eliminazione permanente di tutti i dati associati a
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Questo nome utente dell'area di lavoro è già stato utilizzato"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "To Do"
|
||||
msgstr "Da fare"
|
||||
|
||||
#: src/views/home/components/Header.tsx:73
|
||||
msgid "Toggle menu"
|
||||
msgstr "Attiva/disattiva menu"
|
||||
@@ -1369,10 +1134,6 @@ msgstr "Trello disconnesso"
|
||||
msgid "Trello imports"
|
||||
msgstr "Importazioni da Trello"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:44
|
||||
msgid "Triaging"
|
||||
msgstr "Smistamento"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Impossibile aggiungere il commento"
|
||||
@@ -1495,11 +1256,6 @@ msgstr "ha aggiornato il titolo in <0>{toTitle}</0>"
|
||||
msgid "Upgrade"
|
||||
msgstr "Aggiorna"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
#: src/views/boards/components/TemplateBoards.tsx:54
|
||||
msgid "Urgent"
|
||||
msgstr "Urgente"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "L'URL può contenere solo lettere, numeri e trattini"
|
||||
@@ -1512,18 +1268,10 @@ msgstr "L'URL non può superare i 24 caratteri"
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "L'URL deve contenere almeno 3 caratteri"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:117
|
||||
msgid "Use template"
|
||||
msgstr "Usa template"
|
||||
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "User"
|
||||
msgstr "Utente"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Visualizza e gestisci le tue chiavi API."
|
||||
@@ -1626,10 +1374,6 @@ msgstr "Slug dell'area di lavoro aggiornato"
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL dello spazio di lavoro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Scrittura"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:19
|
||||
msgid "Yearly"
|
||||
msgstr "Annuale"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -124,14 +124,6 @@ msgstr "API-sleutels"
|
||||
msgid "API Reference"
|
||||
msgstr "API-referentie"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:62
|
||||
msgid "Applicants"
|
||||
msgstr "Sollicitanten"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:33
|
||||
msgid "Approval"
|
||||
msgstr "Goedkeuring"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:47
|
||||
msgid "Are you sure want to remove {entityLabel}?"
|
||||
msgstr "Weet je zeker dat je {entityLabel} wilt verwijderen?"
|
||||
@@ -157,20 +149,7 @@ msgstr "Weet je zeker dat je je account wilt verwijderen?"
|
||||
msgid "assigned <0>{memberName}</0> to the card"
|
||||
msgstr "heeft <0>{memberName}</0> aan de kaart toegewezen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:46
|
||||
msgid "Awaiting Customer"
|
||||
msgstr "Wachten op klant"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Backlog"
|
||||
msgstr "Backlog"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:15
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Basis kanban"
|
||||
|
||||
#: src/views/settings/index.tsx:168
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
msgid "Billing"
|
||||
msgstr "Facturering"
|
||||
|
||||
@@ -178,22 +157,10 @@ msgstr "Facturering"
|
||||
msgid "Billing portal"
|
||||
msgstr "Factureringsportaal"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Blog Post"
|
||||
msgstr "Blogbericht"
|
||||
|
||||
#: src/views/board/index.tsx:239
|
||||
msgid "Board"
|
||||
msgstr "Bord"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
msgstr "Bordnaam mag niet langer zijn dan 100 tekens"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:20
|
||||
msgid "Board name is required"
|
||||
msgstr "Bordnaam is verplicht"
|
||||
|
||||
#: src/views/board/index.tsx:265
|
||||
msgid "Board not found"
|
||||
msgstr "Bord niet gevonden"
|
||||
@@ -232,18 +199,6 @@ msgstr "Borden"
|
||||
msgid "Boards | {0}"
|
||||
msgstr "Borden | {0}"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:29
|
||||
msgid "Brainstorming"
|
||||
msgstr "Brainstormen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Bug"
|
||||
msgstr "Bug"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:51
|
||||
msgid "Bug Report"
|
||||
msgstr "Bugrapport"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:50
|
||||
@@ -280,10 +235,6 @@ msgstr "Filters wissen"
|
||||
msgid "Click on the link we've sent to {magicLinkRecipient} to sign in."
|
||||
msgstr "Klik op de link die we naar {magicLinkRecipient} hebben gestuurd om in te loggen."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "Code Review"
|
||||
msgstr "Code review"
|
||||
|
||||
#: src/views/home/components/Features.tsx:84
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Werk naadloos samen met je team."
|
||||
@@ -300,10 +251,6 @@ msgstr "Opmerkingen"
|
||||
msgid "Company"
|
||||
msgstr "Bedrijf"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:81
|
||||
msgid "Complete"
|
||||
msgstr "Voltooid"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:70
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Volledige controle en eigendom:"
|
||||
@@ -333,10 +280,6 @@ msgstr "Contact"
|
||||
msgid "Contact us"
|
||||
msgstr "Neem contact op"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:27
|
||||
msgid "Content Creation"
|
||||
msgstr "Content creatie"
|
||||
|
||||
#: src/components/AuthForm.tsx:334
|
||||
msgid "Continue with "
|
||||
msgstr "Doorgaan met "
|
||||
@@ -356,7 +299,7 @@ msgstr "Bepaal wie je borden kan bekijken en bewerken."
|
||||
msgid "Create another"
|
||||
msgstr "Maak nog een"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:128
|
||||
#: src/views/boards/components/NewBoardForm.tsx:77
|
||||
msgid "Create board"
|
||||
msgstr "Maak bord"
|
||||
|
||||
@@ -398,10 +341,6 @@ msgstr "Werkruimte maken"
|
||||
msgid "created the card"
|
||||
msgstr "heeft de kaart aangemaakt"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Critical"
|
||||
msgstr "Kritiek"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:74
|
||||
msgid "Custom domain"
|
||||
msgstr "Aangepast domein"
|
||||
@@ -410,10 +349,6 @@ msgstr "Aangepast domein"
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Aangepaste URL's zijn een premium functie. Je wordt doorgestuurd om je account te upgraden."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
msgstr "Klantenservice"
|
||||
|
||||
#: src/components/UserMenu.tsx:112
|
||||
msgid "Dark"
|
||||
msgstr "Donker"
|
||||
@@ -452,10 +387,6 @@ msgstr "Lijst verwijderen"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Werkruimte verwijderen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:32
|
||||
msgid "Design"
|
||||
msgstr "Ontwerp"
|
||||
|
||||
#: src/views/settings/index.tsx:220
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Trello ontkoppelen"
|
||||
@@ -493,7 +424,6 @@ msgid "Docs"
|
||||
msgstr "Docs"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:77
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Documentation"
|
||||
msgstr "Documentatie"
|
||||
|
||||
@@ -501,13 +431,6 @@ msgstr "Documentatie"
|
||||
msgid "Don't have an account? <0><1>Sign up</1></0>"
|
||||
msgstr "Heb je geen account? <0><1>Registreer je</1></0>"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:35
|
||||
#: src/views/boards/components/TemplateBoards.tsx:48
|
||||
msgid "Done"
|
||||
msgstr "Klaar"
|
||||
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:115
|
||||
#: src/views/board/components/BoardDropdown.tsx:15
|
||||
msgid "Edit board URL"
|
||||
@@ -521,10 +444,6 @@ msgstr "Reactie bewerken"
|
||||
msgid "Edit label"
|
||||
msgstr "Label bewerken"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:31
|
||||
msgid "Editing"
|
||||
msgstr "Bewerken"
|
||||
|
||||
#: src/components/AuthForm.tsx:336
|
||||
msgid "email"
|
||||
msgstr "e-mail"
|
||||
@@ -533,10 +452,6 @@ msgstr "e-mail"
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Enhancement"
|
||||
msgstr "Verbetering"
|
||||
|
||||
#: src/components/AuthForm.tsx:301
|
||||
msgid "Enter your email address"
|
||||
msgstr "Voer je e-mailadres in"
|
||||
@@ -594,10 +509,6 @@ msgstr "Alles in het gratis abonnement, plus:"
|
||||
msgid "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
msgstr "Alles wat je nodig hebt, voor altijd gratis. Onbeperkte borden, onbeperkte lijsten, onbeperkte kaarten. Upgrade wanneer je maar wilt."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:78
|
||||
msgid "Execution"
|
||||
msgstr "Uitvoering"
|
||||
|
||||
#. placeholder {0}: provider.at(0)?.toUpperCase() + provider.slice(1)
|
||||
#: src/components/AuthForm.tsx:241
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
@@ -608,14 +519,6 @@ msgstr "Inloggen met {0} is mislukt. Probeer het opnieuw."
|
||||
msgid "FAQs"
|
||||
msgstr "Veelgestelde vragen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:23
|
||||
msgid "Feature"
|
||||
msgstr "Functie"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:52
|
||||
msgid "Feature Request"
|
||||
msgstr "Functieverzoek"
|
||||
|
||||
#: src/views/home/components/Header.tsx:14
|
||||
#: src/views/home/components/Footer.tsx:49
|
||||
#: src/views/home/components/Features.tsx:125
|
||||
@@ -642,6 +545,7 @@ msgstr "Vind antwoorden op veelgestelde vragen over het project. Kun je niet vin
|
||||
msgid "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 (free during the beta) 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."
|
||||
msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open source projecten een inkomstenbron nodig hebben. De onze komt van de betaalde cloudoplossing voor werkruimtes met meerdere gebruikers (gratis tijdens de bèta) en voor aangepaste werkruimte-slugs. Je bent niet verplicht om hiervan gebruik te maken en je kunt de software gratis op je eigen infrastructuur hosten."
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
#: src/views/home/components/Pricing.tsx:32
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
@@ -650,14 +554,6 @@ msgstr "Gratis"
|
||||
msgid "Free, forever"
|
||||
msgstr "Altijd gratis"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Full-time"
|
||||
msgstr "Fulltime"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Fun"
|
||||
msgstr "Leuk"
|
||||
|
||||
#: src/views/home/components/Header.tsx:102
|
||||
#: src/views/home/components/Header.tsx:141
|
||||
#: src/views/home/components/Cta.tsx:61
|
||||
@@ -703,14 +599,6 @@ msgstr "GitHub"
|
||||
msgid "Go to app"
|
||||
msgstr "Naar de app"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "High Priority"
|
||||
msgstr "Hoge prioriteit"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:67
|
||||
msgid "Hired"
|
||||
msgstr "Aangenomen"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:69
|
||||
msgid "Host Kan on your own infrastructure. Ideal for organisations that need complete control over their data."
|
||||
msgstr "Host Kan op je eigen infrastructuur. Ideaal voor organisaties die volledige controle over hun gegevens nodig hebben."
|
||||
@@ -743,10 +631,6 @@ msgstr "Ik bevestig dat alle gegevens van mijn account permanent worden verwijde
|
||||
msgid "I acknowledge that all of the workspace data will be permanently deleted and want to proceed."
|
||||
msgstr "Ik bevestig dat alle gegevens van de werkruimte permanent worden verwijderd en wil doorgaan."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:75
|
||||
msgid "Ideas"
|
||||
msgstr "Ideeën"
|
||||
|
||||
#: src/components/FeedbackButton.tsx:98
|
||||
msgid "Ideas to improve this page..."
|
||||
msgstr "Ideeën om deze pagina te verbeteren..."
|
||||
@@ -767,10 +651,6 @@ msgstr "Import mislukt"
|
||||
msgid "Import your Trello boards and hit the ground running."
|
||||
msgstr "Importeer je Trello-borden en ga direct aan de slag."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Important"
|
||||
msgstr "Belangrijk"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:27
|
||||
msgid "Importing from Trello"
|
||||
msgstr "Importeren vanuit Trello"
|
||||
@@ -779,12 +659,6 @@ msgstr "Importeren vanuit Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Het importeren van je Trello-borden naar Kan is eenvoudig. Je kunt onze stap-voor-stap handleiding <0>hier</0> volgen."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
msgid "In Progress"
|
||||
msgstr "In behandeling"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:28
|
||||
msgid "Individuals"
|
||||
msgstr "Individuen"
|
||||
@@ -793,10 +667,6 @@ msgstr "Individuen"
|
||||
msgid "Integrations"
|
||||
msgstr "Integraties"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:64
|
||||
msgid "Interviewing"
|
||||
msgstr "Interviewen"
|
||||
|
||||
#: src/views/members/index.tsx:156
|
||||
msgid "Invite"
|
||||
msgstr "Uitnodigen"
|
||||
@@ -806,10 +676,6 @@ msgstr "Uitnodigen"
|
||||
msgid "Invite member"
|
||||
msgstr "Lid uitnodigen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Junior"
|
||||
msgstr "Junior"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:51
|
||||
msgid "Kanban is better with a team. Perfect for small and growing teams looking to collaborate."
|
||||
msgstr "Kanban werkt beter met een team. Perfect voor kleine en groeiende teams die willen samenwerken."
|
||||
@@ -837,10 +703,6 @@ msgstr "Labels & filters"
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Leren"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:130
|
||||
msgid "Legal"
|
||||
msgstr "Juridisch"
|
||||
@@ -873,22 +735,10 @@ msgstr "Login | kan.bn"
|
||||
msgid "Logout"
|
||||
msgstr "Uitloggen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Long-term"
|
||||
msgstr "Lange termijn"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Low Priority"
|
||||
msgstr "Lage prioriteit"
|
||||
|
||||
#: src/components/AuthForm.tsx:337
|
||||
msgid "magic link"
|
||||
msgstr "magische link"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:17
|
||||
msgid "Medium Priority"
|
||||
msgstr "Gemiddelde prioriteit"
|
||||
|
||||
#: src/views/members/index.tsx:148
|
||||
#: src/views/card/index.tsx:251
|
||||
#: src/views/board/components/NewCardForm.tsx:290
|
||||
@@ -914,7 +764,7 @@ msgstr "heeft de kaart verplaatst van <0>{fromList}</0> naar<1>{toList}</1>"
|
||||
msgid "moved the card to another list"
|
||||
msgstr "heeft de kaart naar een andere lijst verplaatst"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:99
|
||||
#: src/views/boards/components/NewBoardForm.tsx:63
|
||||
#: src/components/LabelForm.tsx:134
|
||||
msgid "Name"
|
||||
msgstr "Naam"
|
||||
@@ -927,7 +777,7 @@ msgstr "Hulp nodig?"
|
||||
msgid "New"
|
||||
msgstr "Nieuw"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:85
|
||||
#: src/views/boards/components/NewBoardForm.tsx:49
|
||||
msgid "New board"
|
||||
msgstr "Nieuw bord"
|
||||
|
||||
@@ -948,22 +798,10 @@ msgstr "Nieuw label"
|
||||
msgid "New list"
|
||||
msgstr "Nieuwe lijst"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:43
|
||||
msgid "New Ticket"
|
||||
msgstr "Nieuw ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:62
|
||||
msgid "New workspace"
|
||||
msgstr "Nieuwe werkruimte"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Newsletter"
|
||||
msgstr "Nieuwsbrief"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:80
|
||||
msgid "Next Steps"
|
||||
msgstr "Volgende stappen"
|
||||
|
||||
#: src/views/boards/components/BoardsList.tsx:35
|
||||
msgid "No boards"
|
||||
msgstr "Geen borden"
|
||||
@@ -980,14 +818,6 @@ msgstr "Geen creditcard vereist"
|
||||
msgid "No lists"
|
||||
msgstr "Geen lijsten"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Aanbod"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:66
|
||||
msgid "Onboarding"
|
||||
msgstr "Inwerktraject"
|
||||
|
||||
#: src/views/settings/index.tsx:263
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
|
||||
@@ -1008,10 +838,6 @@ msgstr "Organiseer en vind kaarten snel met krachtige filtertools."
|
||||
msgid "Own your data"
|
||||
msgstr "Bezit je eigen data"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Part-time"
|
||||
msgstr "Deeltijd"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Betalingsfrequentie"
|
||||
@@ -1025,14 +851,6 @@ msgstr "In behandeling"
|
||||
msgid "per user/month"
|
||||
msgstr "per gebruiker/maand"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:73
|
||||
msgid "Personal Project"
|
||||
msgstr "Persoonlijk project"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:77
|
||||
msgid "Planning"
|
||||
msgstr "Planning"
|
||||
|
||||
#: src/components/AuthForm.tsx:305
|
||||
msgid "Please enter a valid email address"
|
||||
msgstr "Voer een geldig e-mailadres in"
|
||||
@@ -1108,30 +926,10 @@ msgstr "Profielfoto"
|
||||
msgid "Public"
|
||||
msgstr "Openbaar"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:34
|
||||
msgid "Publishing"
|
||||
msgstr "Publiceren"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:53
|
||||
msgid "Question"
|
||||
msgstr "Vraag"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:147
|
||||
msgid "Questions?"
|
||||
msgstr "Vragen?"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Quick Win"
|
||||
msgstr "Snelle winst"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:60
|
||||
msgid "Recruitment"
|
||||
msgstr "Werving"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Remote"
|
||||
msgstr "Op afstand"
|
||||
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:58
|
||||
msgid "Remove"
|
||||
msgstr "Verwijderen"
|
||||
@@ -1152,22 +950,10 @@ msgstr "heeft een lid van de kaart verwijderd"
|
||||
msgid "removed label <0>{label}</0>"
|
||||
msgstr "heeft label <0>{label}</0> verwijderd"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:76
|
||||
msgid "Research"
|
||||
msgstr "Onderzoek"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:47
|
||||
msgid "Resolution"
|
||||
msgstr "Oplossing"
|
||||
|
||||
#: src/views/home/components/Footer.tsx:113
|
||||
msgid "Resources"
|
||||
msgstr "Bronnen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:79
|
||||
msgid "Review"
|
||||
msgstr "Beoordeling"
|
||||
|
||||
#: src/views/settings/components/CreateAPIKeyForm.tsx:49
|
||||
msgid "Revoke"
|
||||
msgstr "Intrekken"
|
||||
@@ -1193,10 +979,6 @@ msgstr "Opslaan"
|
||||
msgid "Save time with reusable board templates."
|
||||
msgstr "Bespaar tijd met herbruikbare bordsjablonen."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:63
|
||||
msgid "Screening"
|
||||
msgstr "Screening"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Alles selecteren"
|
||||
@@ -1221,10 +1003,6 @@ msgstr "heeft de kaart aan zichzelf toegewezen"
|
||||
msgid "Send"
|
||||
msgstr "Versturen"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:69
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/components/SideNavigation.tsx:49
|
||||
msgid "Settings"
|
||||
@@ -1265,14 +1043,6 @@ msgstr "Eenvoudige prijzen"
|
||||
msgid "Simple, visual task management that just works. Drag and drop cards, collaborate with your team, and get more done."
|
||||
msgstr "Eenvoudig, visueel taakbeheer dat gewoon werkt. Sleep kaarten, werk samen met je team en krijg meer gedaan."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Social Media"
|
||||
msgstr "Social media"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:21
|
||||
msgid "Software Development"
|
||||
msgstr "Softwareontwikkeling"
|
||||
|
||||
#: src/views/home/index.tsx:37
|
||||
msgid "Star on Github"
|
||||
msgstr "Star op Github"
|
||||
@@ -1348,11 +1118,6 @@ msgstr "Dit zal resulteren in het permanent verwijderen van alle gegevens die aa
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Deze werkruimtegebruikersnaam is al in gebruik"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
msgid "To Do"
|
||||
msgstr "Te doen"
|
||||
|
||||
#: src/views/home/components/Header.tsx:73
|
||||
msgid "Toggle menu"
|
||||
msgstr "Menu in-/uitschakelen"
|
||||
@@ -1369,10 +1134,6 @@ msgstr "Trello ontkoppeld"
|
||||
msgid "Trello imports"
|
||||
msgstr "Trello-imports"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:44
|
||||
msgid "Triaging"
|
||||
msgstr "Triage"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Kan geen reactie toevoegen"
|
||||
@@ -1495,11 +1256,6 @@ msgstr "titel bijgewerkt naar <0>{toTitle}</0>"
|
||||
msgid "Upgrade"
|
||||
msgstr "Upgraden"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
#: src/views/boards/components/TemplateBoards.tsx:54
|
||||
msgid "Urgent"
|
||||
msgstr "Urgent"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "URL kan alleen letters, cijfers en koppeltekens bevatten"
|
||||
@@ -1512,18 +1268,10 @@ msgstr "URL mag niet langer zijn dan 24 tekens"
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "URL moet minimaal 3 tekens lang zijn"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:117
|
||||
msgid "Use template"
|
||||
msgstr "Sjabloon gebruiken"
|
||||
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "User"
|
||||
msgstr "Gebruiker"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Bekijk en beheer je API-sleutels."
|
||||
@@ -1626,10 +1374,6 @@ msgstr "Werkruimte-slug bijgewerkt"
|
||||
msgid "Workspace URL"
|
||||
msgstr "Werkruimte URL"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Schrijven"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:19
|
||||
msgid "Yearly"
|
||||
msgstr "Jaarlijks"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,18 +0,0 @@
|
||||
import type { NextRequest } from "next/server";
|
||||
import { NextResponse } from "next/server";
|
||||
import { env } from "next-runtime-env";
|
||||
|
||||
export function middleware(request: NextRequest) {
|
||||
if (request.nextUrl.pathname === "/") {
|
||||
if (env("NEXT_PUBLIC_KAN_ENV") !== "cloud") {
|
||||
const loginUrl = new URL("/login", request.url);
|
||||
return NextResponse.redirect(loginUrl);
|
||||
}
|
||||
}
|
||||
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
export const config = {
|
||||
matcher: ["/"],
|
||||
};
|
||||
@@ -1,7 +1,6 @@
|
||||
import "~/styles/globals.css";
|
||||
import "~/utils/i18n";
|
||||
|
||||
import type { Viewport } from "next";
|
||||
import type { AppType } from "next/app";
|
||||
import { Plus_Jakarta_Sans } from "next/font/google";
|
||||
import Script from "next/script";
|
||||
@@ -27,13 +26,6 @@ export const metadata = {
|
||||
icons: [{ rel: "icon", url: "/favicon.ico" }],
|
||||
};
|
||||
|
||||
export const viewport: Viewport = {
|
||||
width: "device-width",
|
||||
initialScale: 1,
|
||||
maximumScale: 1,
|
||||
userScalable: false,
|
||||
};
|
||||
|
||||
const MyApp: AppType = ({ Component, pageProps }) => {
|
||||
const posthogKey = env("NEXT_PUBLIC_POSTHOG_KEY");
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ export default async function handler(
|
||||
const client = new S3Client({
|
||||
region: env.S3_REGION ?? "",
|
||||
endpoint: env.S3_ENDPOINT ?? "",
|
||||
forcePathStyle: env.S3_FORCE_PATH_STYLE === "true",
|
||||
credentials: {
|
||||
accessKeyId: env.S3_ACCESS_KEY_ID ?? "",
|
||||
secretAccessKey: env.S3_SECRET_ACCESS_KEY ?? "",
|
||||
@@ -59,7 +58,6 @@ export default async function handler(
|
||||
new PutObjectCommand({
|
||||
Bucket: nextRuntimeEnv("NEXT_PUBLIC_AVATAR_BUCKET_NAME") ?? "",
|
||||
Key: filename,
|
||||
ACL: "public-read",
|
||||
}),
|
||||
);
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { NextApiRequest, NextApiResponse } from "next";
|
||||
import { type NextApiRequest, type NextApiResponse } from "next";
|
||||
|
||||
import { openApiDocument } from "@kan/api/openapi";
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { WorkspaceProvider } from "~/providers/workspace";
|
||||
import Dashboard from "~/components/Dashboard";
|
||||
import Popup from "~/components/Popup";
|
||||
import { WorkspaceProvider } from "~/providers/workspace";
|
||||
import CardView, { CardRightPanel } from "~/views/card";
|
||||
import CardView from "~/views/card";
|
||||
|
||||
export default function CardPage() {
|
||||
return (
|
||||
<WorkspaceProvider>
|
||||
<Dashboard hasRightPanel rightPanel={<CardRightPanel />}>
|
||||
<Dashboard>
|
||||
<CardView />
|
||||
</Dashboard>
|
||||
<Popup />
|
||||
|
||||
@@ -2,11 +2,10 @@
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
[contenteditable="true"]:empty:before {
|
||||
[contenteditable=true]:empty:before {
|
||||
content: attr(placeholder);
|
||||
display: block;
|
||||
color: #707070;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.gradient-border::before {
|
||||
@@ -19,7 +18,7 @@
|
||||
transparent 110deg,
|
||||
transparent 360deg
|
||||
);
|
||||
content: "";
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: -50%;
|
||||
width: 200%;
|
||||
|
||||
@@ -240,7 +240,7 @@ export default function BoardPage() {
|
||||
/>
|
||||
<div className="relative flex h-full flex-col">
|
||||
<PatternedBackground />
|
||||
<div className="z-10 flex w-full flex-col justify-between p-6 md:flex-row md:p-8">
|
||||
<div className="z-10 flex w-full justify-between p-8">
|
||||
{isLoading && !boardData && (
|
||||
<div className="flex space-x-2">
|
||||
<div className="h-[2.3rem] w-[150px] animate-pulse rounded-[5px] bg-light-200 dark:bg-dark-100" />
|
||||
@@ -249,7 +249,7 @@ export default function BoardPage() {
|
||||
{boardData && (
|
||||
<form
|
||||
onSubmit={handleSubmit(onSubmit)}
|
||||
className="order-2 focus-visible:outline-none md:order-1"
|
||||
className="focus-visible:outline-none"
|
||||
>
|
||||
<input
|
||||
id="name"
|
||||
@@ -261,12 +261,12 @@ export default function BoardPage() {
|
||||
</form>
|
||||
)}
|
||||
{!boardData && !isLoading && (
|
||||
<p className="order-2 block p-0 py-0 font-bold leading-[2.3rem] tracking-tight text-neutral-900 dark:text-dark-1000 sm:text-[1.2rem] md:order-1">
|
||||
<p className="block p-0 py-0 font-bold leading-[2.3rem] tracking-tight text-neutral-900 dark:text-dark-1000 sm:text-[1.2rem]">
|
||||
{t`Board not found`}
|
||||
</p>
|
||||
)}
|
||||
|
||||
<div className="order-1 mb-4 flex items-center justify-end space-x-2 md:order-2 md:mb-0">
|
||||
<div className="flex items-center space-x-2">
|
||||
<VisibilityButton
|
||||
visibility={boardData?.visibility ?? "private"}
|
||||
boardPublicId={boardId ?? ""}
|
||||
|
||||
@@ -81,7 +81,7 @@ const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
|
||||
<Listbox.Button className="focus-ring-light-700 block w-full rounded-md border-0 bg-dark-300 bg-white/5 px-4 py-1.5 text-neutral-900 shadow-sm ring-1 ring-inset ring-light-600 focus:ring-2 focus:ring-inset dark:text-dark-1000 dark:ring-dark-700 dark:focus:ring-dark-700 sm:text-sm sm:leading-6">
|
||||
<span className="flex items-center">
|
||||
{integrationProviders[field.value]?.icon}
|
||||
<span className="ml-2 block truncate text-sm">
|
||||
<span className="ml-2 block truncate">
|
||||
{integrationProviders[field.value]?.name}
|
||||
</span>
|
||||
</span>
|
||||
@@ -113,7 +113,7 @@ const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
|
||||
integrationProviders[integration.provider]
|
||||
?.icon
|
||||
}
|
||||
<span className="ml-2 block truncate text-sm font-normal">
|
||||
<span className="ml-2 block truncate font-normal">
|
||||
{
|
||||
integrationProviders[integration.provider]
|
||||
?.name
|
||||
@@ -125,12 +125,12 @@ const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
|
||||
) : (
|
||||
<Listbox.Option
|
||||
key="trello_placeholder"
|
||||
className="font-sm relative cursor-default select-none px-1"
|
||||
className="relative cursor-default select-none px-1"
|
||||
value="trello"
|
||||
>
|
||||
<div className="flex items-center rounded-[5px] p-1 text-sm hover:bg-light-200 dark:hover:bg-dark-400">
|
||||
<div className="flex items-center rounded-[5px] p-1 hover:bg-light-200 dark:hover:bg-dark-400">
|
||||
{integrationProviders.trello?.icon}
|
||||
<span className="ml-2 block truncate text-sm">
|
||||
<span className="ml-2 block truncate font-normal">
|
||||
{integrationProviders.trello?.name}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -1,59 +1,28 @@
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useEffect } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import { HiXMark } from "react-icons/hi2";
|
||||
import { z } from "zod";
|
||||
|
||||
import type { Template } from "./TemplateBoards";
|
||||
import type { NewBoardInput } from "@kan/api/types";
|
||||
|
||||
import Button from "~/components/Button";
|
||||
import Input from "~/components/Input";
|
||||
import Toggle from "~/components/Toggle";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { useWorkspace } from "~/providers/workspace";
|
||||
import { api } from "~/utils/api";
|
||||
import TemplateBoards, { getTemplates } from "./TemplateBoards";
|
||||
|
||||
const schema = z.object({
|
||||
name: z
|
||||
.string()
|
||||
.min(1, { message: t`Board name is required` })
|
||||
.max(100, { message: t`Board name cannot exceed 100 characters` }),
|
||||
workspacePublicId: z.string(),
|
||||
template: z.custom<Template | null>(),
|
||||
});
|
||||
|
||||
interface NewBoardInputWithTemplate {
|
||||
name: string;
|
||||
workspacePublicId: string;
|
||||
template: Template | null;
|
||||
}
|
||||
|
||||
export function NewBoardForm() {
|
||||
const utils = api.useUtils();
|
||||
const { closeModal } = useModal();
|
||||
const { workspace } = useWorkspace();
|
||||
const [showTemplates, setShowTemplates] = useState(false);
|
||||
|
||||
const templates = getTemplates();
|
||||
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
watch,
|
||||
setValue,
|
||||
formState: { errors },
|
||||
} = useForm<NewBoardInputWithTemplate>({
|
||||
resolver: zodResolver(schema),
|
||||
const { register, handleSubmit } = useForm<NewBoardInput>({
|
||||
defaultValues: {
|
||||
name: "",
|
||||
workspacePublicId: workspace.publicId || "",
|
||||
template: null,
|
||||
},
|
||||
});
|
||||
|
||||
const currentTemplate = watch("template");
|
||||
|
||||
const refetchBoards = () => utils.board.all.refetch();
|
||||
|
||||
const createBoard = api.board.create.useMutation({
|
||||
@@ -63,13 +32,8 @@ export function NewBoardForm() {
|
||||
},
|
||||
});
|
||||
|
||||
const onSubmit = (data: NewBoardInputWithTemplate) => {
|
||||
createBoard.mutate({
|
||||
name: data.name,
|
||||
workspacePublicId: data.workspacePublicId,
|
||||
lists: data.template?.lists ?? [],
|
||||
labels: data.template?.labels ?? [],
|
||||
});
|
||||
const onSubmit = (data: NewBoardInput) => {
|
||||
createBoard.mutate(data);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
@@ -98,7 +62,6 @@ export function NewBoardForm() {
|
||||
id="name"
|
||||
placeholder={t`Name`}
|
||||
{...register("name", { required: true })}
|
||||
errorMessage={errors.name?.message}
|
||||
onKeyDown={async (e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
@@ -107,22 +70,8 @@ export function NewBoardForm() {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<TemplateBoards
|
||||
currentBoard={currentTemplate}
|
||||
setCurrentBoard={(t) => setValue("template", t)}
|
||||
showTemplates={showTemplates}
|
||||
/>
|
||||
|
||||
<div className="mt-12 flex items-center justify-end border-t border-light-600 px-5 pb-5 pt-5 dark:border-dark-600">
|
||||
<Toggle
|
||||
label={t`Use template`}
|
||||
isChecked={showTemplates}
|
||||
onChange={() => {
|
||||
setShowTemplates(!showTemplates);
|
||||
if (!showTemplates && !currentTemplate) {
|
||||
setValue("template", templates[0] ?? null);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<div>
|
||||
<Button type="submit" isLoading={createBoard.isPending}>
|
||||
{t`Create board`}
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { HiCheckCircle } from "react-icons/hi2";
|
||||
|
||||
export interface Template {
|
||||
id: string;
|
||||
name: string;
|
||||
lists: string[];
|
||||
labels: string[];
|
||||
}
|
||||
|
||||
export const getTemplates = (): Template[] => [
|
||||
{
|
||||
id: "basic",
|
||||
name: t`Basic Kanban`,
|
||||
lists: [t`To Do`, t`In Progress`, t`Done`],
|
||||
labels: [t`High Priority`, t`Medium Priority`, t`Low Priority`],
|
||||
},
|
||||
{
|
||||
id: "software-dev",
|
||||
name: t`Software Development`,
|
||||
lists: [t`Backlog`, t`To Do`, t`In Progress`, t`Code Review`, t`Done`],
|
||||
labels: [t`Bug`, t`Feature`, t`Enhancement`, t`Critical`, t`Documentation`],
|
||||
},
|
||||
{
|
||||
id: "content-creation",
|
||||
name: t`Content Creation`,
|
||||
lists: [
|
||||
t`Brainstorming`,
|
||||
t`Writing`,
|
||||
t`Editing`,
|
||||
t`Design`,
|
||||
t`Approval`,
|
||||
t`Publishing`,
|
||||
t`Done`,
|
||||
],
|
||||
labels: [t`Blog Post`, t`Social Media`, t`Video`, t`Newsletter`, t`Urgent`],
|
||||
},
|
||||
{
|
||||
id: "customer-support",
|
||||
name: t`Customer Support`,
|
||||
lists: [
|
||||
t`New Ticket`,
|
||||
t`Triaging`,
|
||||
t`In Progress`,
|
||||
t`Awaiting Customer`,
|
||||
t`Resolution`,
|
||||
t`Done`,
|
||||
],
|
||||
labels: [
|
||||
t`Bug Report`,
|
||||
t`Feature Request`,
|
||||
t`Question`,
|
||||
t`Urgent`,
|
||||
t`Billing`,
|
||||
],
|
||||
},
|
||||
{
|
||||
id: "recruitment",
|
||||
name: t`Recruitment`,
|
||||
lists: [
|
||||
t`Applicants`,
|
||||
t`Screening`,
|
||||
t`Interviewing`,
|
||||
t`Offer`,
|
||||
t`Onboarding`,
|
||||
t`Hired`,
|
||||
],
|
||||
labels: [t`Remote`, t`Full-time`, t`Part-time`, t`Senior`, t`Junior`],
|
||||
},
|
||||
{
|
||||
id: "personal-project",
|
||||
name: t`Personal Project`,
|
||||
lists: [
|
||||
t`Ideas`,
|
||||
t`Research`,
|
||||
t`Planning`,
|
||||
t`Execution`,
|
||||
t`Review`,
|
||||
t`Next Steps`,
|
||||
t`Complete`,
|
||||
],
|
||||
labels: [t`Important`, t`Quick Win`, t`Long-term`, t`Learning`, t`Fun`],
|
||||
},
|
||||
];
|
||||
|
||||
export default function TemplateBoards({
|
||||
currentBoard,
|
||||
setCurrentBoard,
|
||||
showTemplates,
|
||||
}: {
|
||||
currentBoard: Template | null;
|
||||
setCurrentBoard: (board: Template | null) => void;
|
||||
showTemplates: boolean;
|
||||
}) {
|
||||
const [showFade, setShowFade] = useState(false);
|
||||
const [showTopFade, setShowTopFade] = useState(false);
|
||||
const scrollRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
const templates = getTemplates();
|
||||
|
||||
const handleScroll = () => {
|
||||
if (!scrollRef.current) return;
|
||||
|
||||
const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;
|
||||
const isAtBottom = scrollTop + clientHeight >= scrollHeight - 5;
|
||||
const isAtTop = scrollTop <= 5;
|
||||
|
||||
setShowFade(!isAtBottom);
|
||||
setShowTopFade(!isAtTop);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const scrollElement = scrollRef.current;
|
||||
if (!scrollElement) return;
|
||||
|
||||
handleScroll();
|
||||
|
||||
scrollElement.addEventListener("scroll", handleScroll);
|
||||
return () => scrollElement.removeEventListener("scroll", handleScroll);
|
||||
}, [showTemplates]);
|
||||
|
||||
useEffect(() => {
|
||||
if (showTemplates && currentBoard && scrollRef.current) {
|
||||
const selectedElement = scrollRef.current.querySelector(
|
||||
`[data-template-id="${currentBoard.id}"]`,
|
||||
);
|
||||
if (selectedElement) {
|
||||
selectedElement.scrollIntoView({ behavior: "smooth", block: "center" });
|
||||
}
|
||||
}
|
||||
}, [showTemplates, currentBoard]);
|
||||
|
||||
const handleBoardSelect = (boardId: string) => {
|
||||
if (currentBoard?.id === boardId) {
|
||||
setCurrentBoard(null);
|
||||
} else {
|
||||
setCurrentBoard(
|
||||
templates.find((template) => template.id === boardId) ?? null,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
if (!showTemplates) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="px-5 pt-4">
|
||||
<div className="relative">
|
||||
<div
|
||||
ref={scrollRef}
|
||||
className="scroll-container -mr-2 flex max-h-[200px] flex-col gap-3 overflow-y-auto pr-2 pt-0.5"
|
||||
>
|
||||
{templates.map((template) => (
|
||||
<label
|
||||
key={template.id}
|
||||
data-template-id={template.id}
|
||||
onClick={() => handleBoardSelect(template.id)}
|
||||
className={`scroll-container relative flex cursor-pointer rounded-lg border p-3 transition-all hover:bg-light-100 dark:hover:bg-dark-200 ${
|
||||
currentBoard?.id === template.id
|
||||
? "border-light-700 bg-light-100 ring-1 ring-inset ring-light-700 dark:border-dark-700 dark:bg-dark-200 dark:ring-dark-700"
|
||||
: "border-light-600 dark:border-dark-600"
|
||||
}`}
|
||||
>
|
||||
<div className="flex-1">
|
||||
<h4 className="text-sm font-medium text-gray-900 dark:text-gray-100">
|
||||
{template.name}
|
||||
</h4>
|
||||
<p className="text-xs text-light-950 dark:text-dark-900">
|
||||
{template.lists.join(", ")}
|
||||
</p>
|
||||
</div>
|
||||
{currentBoard?.id === template.id && (
|
||||
<div className="absolute right-3 top-3 text-light-1000 dark:text-dark-1000">
|
||||
<HiCheckCircle className="h-5 w-5" />
|
||||
</div>
|
||||
)}
|
||||
</label>
|
||||
))}
|
||||
</div>
|
||||
{showTopFade && (
|
||||
<div className="pointer-events-none absolute left-0 right-0 top-0 h-6 bg-gradient-to-b from-white/80 to-transparent dark:from-dark-100/80" />
|
||||
)}
|
||||
{showFade && (
|
||||
<div className="pointer-events-none absolute bottom-0 left-0 right-0 h-6 bg-gradient-to-t from-white/80 to-transparent dark:from-dark-100/80" />
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { HiArrowDownTray, HiOutlinePlusSmall } from "react-icons/hi2";
|
||||
|
||||
import Button from "~/components/Button";
|
||||
import Modal from "~/components/modal";
|
||||
import { NewWorkspaceForm } from "~/components/NewWorkspaceForm";
|
||||
import { PageHead } from "~/components/PageHead";
|
||||
@@ -20,32 +19,38 @@ export default function BoardsPage() {
|
||||
return (
|
||||
<>
|
||||
<PageHead title={t`Boards | ${workspace.name ?? "Workspace"}`} />
|
||||
<div className="m-auto h-full max-w-[1600px] px-5 py-6 md:px-8 md:py-8">
|
||||
<div className="mb-8 flex w-full items-center justify-between">
|
||||
<div className="h-full p-8">
|
||||
<div className="mb-8 flex w-full justify-between">
|
||||
<h1 className="font-bold tracking-tight text-neutral-900 dark:text-dark-1000 sm:text-[1.2rem]">
|
||||
{t`Boards`}
|
||||
</h1>
|
||||
<div className="flex gap-2">
|
||||
<Button
|
||||
<div className="flex">
|
||||
<button
|
||||
type="button"
|
||||
variant="secondary"
|
||||
className="bg-dark-3000 mr-2 flex items-center gap-x-1.5 rounded-md border-[1px] border-light-600 px-3 py-2 text-sm text-neutral-900 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 dark:border-dark-600 dark:text-dark-1000"
|
||||
onClick={() => openModal("IMPORT_BOARDS")}
|
||||
iconLeft={
|
||||
<HiArrowDownTray aria-hidden="true" className="h-4 w-4" />
|
||||
}
|
||||
>
|
||||
<div className="flex h-5 w-5 items-center">
|
||||
<HiArrowDownTray
|
||||
className="-mr-0.5 h-4 w-4"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</div>
|
||||
{t`Import`}
|
||||
</Button>
|
||||
<Button
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
variant="primary"
|
||||
className="flex items-center gap-x-1.5 rounded-md bg-light-1000 px-3 py-2 text-sm font-semibold text-light-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 dark:bg-dark-1000 dark:text-dark-50"
|
||||
onClick={() => openModal("NEW_BOARD")}
|
||||
iconLeft={
|
||||
<HiOutlinePlusSmall aria-hidden="true" className="h-4 w-4" />
|
||||
}
|
||||
>
|
||||
<div className="h-5 w-5 items-center">
|
||||
<HiOutlinePlusSmall
|
||||
className="-mr-0.5 h-5 w-5"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</div>
|
||||
{t`New`}
|
||||
</Button>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ const Comment = ({
|
||||
html={watch("comment")}
|
||||
disabled={false}
|
||||
onChange={(e) => setValue("comment", e.target.value)}
|
||||
className="block w-full max-w-[800px] border-0 bg-transparent py-1.5 text-sm text-light-900 focus-visible:outline-none dark:text-dark-1000 sm:text-sm sm:leading-6"
|
||||
className="block w-full max-w-[800px] border-0 bg-transparent py-1.5 text-light-900 focus-visible:outline-none dark:text-dark-1000 sm:text-sm sm:leading-6"
|
||||
/>
|
||||
<div className="flex justify-end space-x-2">
|
||||
<Button
|
||||
|
||||
@@ -32,18 +32,29 @@ interface FormValues {
|
||||
description: string;
|
||||
}
|
||||
|
||||
export function CardRightPanel() {
|
||||
export default function CardPage() {
|
||||
const router = useRouter();
|
||||
const utils = api.useUtils();
|
||||
const { modalContentType, entityId } = useModal();
|
||||
const { showPopup } = usePopup();
|
||||
const { workspace } = useWorkspace();
|
||||
|
||||
const cardId = Array.isArray(router.query.cardId)
|
||||
? router.query.cardId[0]
|
||||
: router.query.cardId;
|
||||
|
||||
const { data: card } = api.card.byId.useQuery({
|
||||
const { data: card, isLoading } = api.card.byId.useQuery({
|
||||
cardPublicId: cardId ?? "",
|
||||
});
|
||||
|
||||
const refetchCard = async () => {
|
||||
if (cardId) await utils.card.byId.refetch({ cardPublicId: cardId });
|
||||
};
|
||||
|
||||
const board = card?.list.board;
|
||||
const boardId = board?.publicId;
|
||||
const labels = board?.labels;
|
||||
const activities = card?.activities;
|
||||
const workspaceMembers = board?.workspace.members;
|
||||
const selectedLabels = card?.labels;
|
||||
const selectedMembers = card?.members;
|
||||
@@ -98,59 +109,6 @@ export function CardRightPanel() {
|
||||
};
|
||||
}) ?? [];
|
||||
|
||||
return (
|
||||
<div className="h-full w-[360px] border-l-[1px] border-light-600 bg-light-200 p-8 text-light-900 dark:border-dark-400 dark:bg-dark-100 dark:text-dark-900">
|
||||
<div className="mb-4 flex w-full flex-row">
|
||||
<p className="my-2 mb-2 w-[100px] text-sm font-medium">{t`List`}</p>
|
||||
<ListSelector
|
||||
cardPublicId={cardId ?? ""}
|
||||
lists={formattedLists}
|
||||
isLoading={!card}
|
||||
/>
|
||||
</div>
|
||||
<div className="mb-4 flex w-full flex-row">
|
||||
<p className="my-2 mb-2 w-[100px] text-sm font-medium">{t`Labels`}</p>
|
||||
<LabelSelector
|
||||
cardPublicId={cardId ?? ""}
|
||||
labels={formattedLabels}
|
||||
isLoading={!card}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex w-full flex-row">
|
||||
<p className="my-2 mb-2 w-[100px] text-sm font-medium">{t`Members`}</p>
|
||||
<MemberSelector
|
||||
cardPublicId={cardId ?? ""}
|
||||
members={formattedMembers}
|
||||
isLoading={!card}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function CardPage() {
|
||||
const router = useRouter();
|
||||
const utils = api.useUtils();
|
||||
const { modalContentType, entityId } = useModal();
|
||||
const { showPopup } = usePopup();
|
||||
const { workspace } = useWorkspace();
|
||||
|
||||
const cardId = Array.isArray(router.query.cardId)
|
||||
? router.query.cardId[0]
|
||||
: router.query.cardId;
|
||||
|
||||
const { data: card, isLoading } = api.card.byId.useQuery({
|
||||
cardPublicId: cardId ?? "",
|
||||
});
|
||||
|
||||
const refetchCard = async () => {
|
||||
if (cardId) await utils.card.byId.refetch({ cardPublicId: cardId });
|
||||
};
|
||||
|
||||
const board = card?.list.board;
|
||||
const boardId = board?.publicId;
|
||||
const activities = card?.activities;
|
||||
|
||||
const updateCard = api.card.update.useMutation({
|
||||
onError: () => {
|
||||
showPopup({
|
||||
@@ -180,6 +138,8 @@ export default function CardPage() {
|
||||
});
|
||||
};
|
||||
|
||||
const description = watch("description");
|
||||
|
||||
if (!cardId) return <></>;
|
||||
|
||||
return (
|
||||
@@ -189,7 +149,7 @@ export default function CardPage() {
|
||||
/>
|
||||
<div className="flex h-full flex-1 flex-row">
|
||||
<div className="flex h-full w-full flex-col overflow-hidden">
|
||||
<div className="h-full max-h-[calc(100dvh-3rem)] overflow-y-auto p-6 md:max-h-[calc(100dvh-4rem)] md:p-8">
|
||||
<div className="h-full max-h-[calc(100vh-4rem)] overflow-y-auto p-8">
|
||||
<div className="mb-8 flex w-full items-center justify-between">
|
||||
{!card && isLoading && (
|
||||
<div className="flex space-x-2">
|
||||
@@ -236,7 +196,7 @@ export default function CardPage() {
|
||||
</div>
|
||||
{card && (
|
||||
<>
|
||||
<div className="mb-10 flex w-full max-w-2xl flex-col justify-between">
|
||||
<div className="mb-10 flex w-full max-w-2xl justify-between">
|
||||
<form
|
||||
onSubmit={handleSubmit(onSubmit)}
|
||||
className="w-full space-y-6"
|
||||
@@ -270,6 +230,32 @@ export default function CardPage() {
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="w-[475px] border-l-[1px] border-light-600 bg-light-200 p-8 text-light-900 dark:border-dark-400 dark:bg-dark-100 dark:text-dark-900">
|
||||
<div className="mb-4 flex w-full">
|
||||
<p className="my-2 w-[100px] text-sm">{t`List`}</p>
|
||||
<ListSelector
|
||||
cardPublicId={cardId}
|
||||
lists={formattedLists}
|
||||
isLoading={!card}
|
||||
/>
|
||||
</div>
|
||||
<div className="mb-4 flex w-full">
|
||||
<p className="my-2 w-[100px] text-sm">{t`Labels`}</p>
|
||||
<LabelSelector
|
||||
cardPublicId={cardId}
|
||||
labels={formattedLabels}
|
||||
isLoading={!card}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex w-full">
|
||||
<p className="my-2 w-[100px] text-sm">{t`Members`}</p>
|
||||
<MemberSelector
|
||||
cardPublicId={cardId}
|
||||
members={formattedMembers}
|
||||
isLoading={!card}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Modal>
|
||||
{modalContentType === "NEW_LABEL" && (
|
||||
|
||||
@@ -40,7 +40,7 @@ export default function HomeView() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* <div className="relative overflow-hidden rounded-full bg-gradient-to-b from-light-300 to-light-400 p-[2px] dark:from-dark-300 dark:to-dark-400">
|
||||
<div className="relative overflow-hidden rounded-full bg-gradient-to-b from-light-300 to-light-400 p-[2px] dark:from-dark-300 dark:to-dark-400">
|
||||
<div className="relative z-10 rounded-full bg-light-50 dark:bg-dark-50">
|
||||
<Link
|
||||
href="https://news.ycombinator.com/item?id=44157177"
|
||||
@@ -58,7 +58,7 @@ export default function HomeView() {
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div> */}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="mt-2 text-center text-4xl font-bold text-light-1000 dark:text-dark-1000 lg:text-5xl">
|
||||
|
||||
@@ -2,8 +2,6 @@ import { t } from "@lingui/core/macro";
|
||||
import { HiEllipsisHorizontal, HiOutlinePlusSmall } from "react-icons/hi2";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
import { authClient } from "@kan/auth/client";
|
||||
|
||||
import Avatar from "~/components/Avatar";
|
||||
import Button from "~/components/Button";
|
||||
import Dropdown from "~/components/Dropdown";
|
||||
@@ -28,7 +26,6 @@ export default function MembersPage() {
|
||||
|
||||
const TableRow = ({
|
||||
memberPublicId,
|
||||
memberId,
|
||||
memberName,
|
||||
memberEmail,
|
||||
memberImage,
|
||||
@@ -38,7 +35,6 @@ export default function MembersPage() {
|
||||
showSkeleton,
|
||||
}: {
|
||||
memberPublicId?: string;
|
||||
memberId?: string | null | undefined;
|
||||
memberName?: string | null | undefined;
|
||||
memberEmail?: string | null | undefined;
|
||||
memberImage?: string | null | undefined;
|
||||
@@ -47,19 +43,13 @@ export default function MembersPage() {
|
||||
isLastRow?: boolean;
|
||||
showSkeleton?: boolean;
|
||||
}) => {
|
||||
const { data: session } = authClient.useSession();
|
||||
return (
|
||||
<tr className="rounded-b-lg">
|
||||
<td
|
||||
className={twMerge(
|
||||
"w-full sm:w-[65%]",
|
||||
isLastRow ? "rounded-bl-lg" : "",
|
||||
)}
|
||||
>
|
||||
<div className="flex items-center p-2 sm:p-4">
|
||||
<td className={twMerge("w-[65%]", isLastRow ? "rounded-bl-lg" : "")}>
|
||||
<div className="flex items-center p-4">
|
||||
<div className="flex-shrink-0">
|
||||
{showSkeleton ? (
|
||||
<div className="h-8 w-8 animate-pulse rounded-full bg-light-200 dark:bg-dark-200 sm:h-9 sm:w-9" />
|
||||
<div className="h-9 w-9 animate-pulse rounded-full bg-light-200 dark:bg-dark-200" />
|
||||
) : (
|
||||
<Avatar
|
||||
name={memberName ?? ""}
|
||||
@@ -73,7 +63,7 @@ export default function MembersPage() {
|
||||
<div className="flex items-center">
|
||||
<p
|
||||
className={twMerge(
|
||||
"mr-2 truncate text-xs font-medium text-neutral-900 dark:text-dark-1000 sm:text-sm",
|
||||
"mr-2 text-sm font-medium text-neutral-900 dark:text-dark-1000",
|
||||
showSkeleton &&
|
||||
"md mb-2 h-3 w-[125px] animate-pulse rounded-sm bg-light-200 dark:bg-dark-200",
|
||||
)}
|
||||
@@ -83,7 +73,7 @@ export default function MembersPage() {
|
||||
</div>
|
||||
<p
|
||||
className={twMerge(
|
||||
"truncate text-xs text-dark-900 sm:text-sm",
|
||||
"truncate text-sm text-dark-900",
|
||||
showSkeleton &&
|
||||
"h-3 w-[175px] animate-pulse rounded-sm bg-light-200 dark:bg-dark-200",
|
||||
)}
|
||||
@@ -96,15 +86,15 @@ export default function MembersPage() {
|
||||
</td>
|
||||
<td
|
||||
className={twMerge(
|
||||
"w-auto min-w-[120px] sm:w-[35%] sm:min-w-[150px]",
|
||||
"w-[35%] min-w-[150px]",
|
||||
isLastRow && "rounded-br-lg",
|
||||
)}
|
||||
>
|
||||
<div className="flex w-full items-center justify-between px-2 sm:px-3">
|
||||
<div className="flex flex-col sm:flex-row sm:items-center">
|
||||
<div className="flex w-full items-center justify-between px-3">
|
||||
<div>
|
||||
<span
|
||||
className={twMerge(
|
||||
"inline-flex items-center rounded-md bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-medium text-emerald-400 ring-1 ring-inset ring-emerald-500/20 sm:text-[11px]",
|
||||
"inline-flex items-center rounded-md bg-emerald-500/10 px-1.5 py-0.5 text-[11px] font-medium text-emerald-400 ring-1 ring-inset ring-emerald-500/20",
|
||||
showSkeleton &&
|
||||
"h-5 w-[50px] animate-pulse bg-light-200 ring-0 dark:bg-dark-200",
|
||||
)}
|
||||
@@ -113,7 +103,7 @@ export default function MembersPage() {
|
||||
memberRole.charAt(0).toUpperCase() + memberRole.slice(1)}
|
||||
</span>
|
||||
{memberStatus === "invited" && (
|
||||
<span className="mt-1 inline-flex items-center rounded-md bg-gray-500/10 px-1.5 py-0.5 text-[10px] font-medium text-gray-400 ring-1 ring-inset ring-gray-500/20 sm:ml-2 sm:mt-0 sm:text-[11px]">
|
||||
<span className="ml-2 inline-flex items-center rounded-md bg-gray-500/10 px-1.5 py-0.5 text-[11px] font-medium text-gray-400 ring-1 ring-inset ring-gray-500/20">
|
||||
{t`Pending`}
|
||||
</span>
|
||||
)}
|
||||
@@ -124,26 +114,24 @@ export default function MembersPage() {
|
||||
(workspace.role !== "admin" || showSkeleton) && "hidden",
|
||||
)}
|
||||
>
|
||||
{session?.user.id !== memberId && (
|
||||
<Dropdown
|
||||
items={[
|
||||
{
|
||||
label: t`Remove member`,
|
||||
action: () =>
|
||||
openModal(
|
||||
"REMOVE_MEMBER",
|
||||
memberPublicId,
|
||||
memberEmail ?? "",
|
||||
),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<HiEllipsisHorizontal
|
||||
size={20}
|
||||
className="text-light-900 dark:text-dark-900 sm:size-[25px]"
|
||||
/>
|
||||
</Dropdown>
|
||||
)}
|
||||
<Dropdown
|
||||
items={[
|
||||
{
|
||||
label: t`Remove member`,
|
||||
action: () =>
|
||||
openModal(
|
||||
"REMOVE_MEMBER",
|
||||
memberPublicId,
|
||||
memberEmail ?? "",
|
||||
),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<HiEllipsisHorizontal
|
||||
size={25}
|
||||
className="text-light-900 dark:text-dark-900"
|
||||
/>
|
||||
</Dropdown>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
@@ -154,7 +142,7 @@ export default function MembersPage() {
|
||||
return (
|
||||
<>
|
||||
<PageHead title={t`Members | ${workspace.name ?? "Workspace"}`} />
|
||||
<div className="m-auto h-full max-w-[1600px] p-6 px-5 md:px-28 md:py-12">
|
||||
<div className="m-auto max-w-[1600px] px-28 py-12">
|
||||
<div className="mb-8 flex w-full justify-between">
|
||||
<h1 className="font-bold tracking-tight text-neutral-900 dark:text-dark-1000 sm:text-[1.2rem]">
|
||||
{t`Members`}
|
||||
@@ -171,21 +159,21 @@ export default function MembersPage() {
|
||||
</div>
|
||||
|
||||
<div className="mt-8 flow-root">
|
||||
<div className="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
||||
<div className="inline-block min-w-full px-4 py-2 align-middle sm:px-6 lg:px-8">
|
||||
<div className="-mx-4 -my-2 overflow-x-visible sm:-mx-6 lg:-mx-8">
|
||||
<div className="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8">
|
||||
<div className="h-full shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
|
||||
<table className="min-w-full divide-y divide-light-600 dark:divide-dark-600">
|
||||
<thead className="rounded-t-lg bg-light-300 dark:bg-dark-200">
|
||||
<tr>
|
||||
<th
|
||||
scope="col"
|
||||
className="w-full rounded-tl-lg py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-light-900 dark:text-dark-900 sm:w-[65%] sm:pl-6"
|
||||
className="w-[65%] rounded-tl-lg py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-light-900 dark:text-dark-900 sm:pl-6"
|
||||
>
|
||||
{t`User`}
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
className="w-auto whitespace-nowrap rounded-tr-lg px-3 py-3.5 text-left text-sm font-semibold text-light-900 dark:text-dark-900 sm:w-[35%]"
|
||||
className="w-[35%] rounded-tr-lg px-3 py-3.5 text-left text-sm font-semibold text-light-900 dark:text-dark-900"
|
||||
>
|
||||
{t`Role`}
|
||||
</th>
|
||||
@@ -197,7 +185,6 @@ export default function MembersPage() {
|
||||
<TableRow
|
||||
key={member.publicId}
|
||||
memberPublicId={member.publicId}
|
||||
memberId={member.user?.id}
|
||||
memberName={member.user?.name}
|
||||
memberEmail={member.user?.email ?? member.email}
|
||||
memberImage={member.user?.image}
|
||||
|
||||
@@ -104,9 +104,9 @@ export default function SettingsPage() {
|
||||
return (
|
||||
<>
|
||||
<div className="flex h-full w-full flex-col overflow-hidden">
|
||||
<div className="h-full max-h-[calc(100vdh-3rem)] overflow-y-auto md:max-h-[calc(100vdh-4rem)]">
|
||||
<div className="h-full max-h-[calc(100vh-4rem)] overflow-y-auto">
|
||||
<PageHead title={t`Settings | ${workspace.name ?? "Workspace"}`} />
|
||||
<div className="m-auto max-w-[1600px] px-5 py-6 md:px-28 md:py-12">
|
||||
<div className="px-28 py-12">
|
||||
<div className="mb-8 flex w-full justify-between">
|
||||
<h1 className="font-bold tracking-tight text-neutral-900 dark:text-dark-1000 sm:text-[1.2rem]">
|
||||
{t`Settings`}
|
||||
|
||||
@@ -36,7 +36,6 @@ services:
|
||||
- S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY}
|
||||
- S3_REGION=${S3_REGION}
|
||||
- S3_ENDPOINT=${S3_ENDPOINT}
|
||||
- S3_FORCE_PATH_STYLE=${S3_FORCE_PATH_STYLE}
|
||||
- NEXT_PUBLIC_STORAGE_URL=${NEXT_PUBLIC_STORAGE_URL}
|
||||
- NEXT_PUBLIC_AVATAR_BUCKET_NAME=${NEXT_PUBLIC_AVATAR_BUCKET_NAME}
|
||||
- NEXT_PUBLIC_STORAGE_DOMAIN=${NEXT_PUBLIC_STORAGE_DOMAIN}
|
||||
|
||||
@@ -30,7 +30,6 @@ services:
|
||||
- S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY}
|
||||
- S3_REGION=${S3_REGION}
|
||||
- S3_ENDPOINT=${S3_ENDPOINT}
|
||||
- S3_FORCE_PATH_STYLE=${S3_FORCE_PATH_STYLE}
|
||||
- NEXT_PUBLIC_STORAGE_URL=${NEXT_PUBLIC_STORAGE_URL}
|
||||
- NEXT_PUBLIC_AVATAR_BUCKET_NAME=${NEXT_PUBLIC_AVATAR_BUCKET_NAME}
|
||||
- NEXT_PUBLIC_STORAGE_DOMAIN=${NEXT_PUBLIC_STORAGE_DOMAIN}
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"@kan/stripe": "workspace:^",
|
||||
"@trpc/server": "catalog:",
|
||||
"superjson": "2.2.1",
|
||||
"trpc-to-openapi": "^2.3.2",
|
||||
"trpc-to-openapi": "^2.1.0",
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -4,10 +4,8 @@ import { z } from "zod";
|
||||
import * as boardRepo from "@kan/db/repository/board.repo";
|
||||
import * as cardRepo from "@kan/db/repository/card.repo";
|
||||
import * as activityRepo from "@kan/db/repository/cardActivity.repo";
|
||||
import * as labelRepo from "@kan/db/repository/label.repo";
|
||||
import * as listRepo from "@kan/db/repository/list.repo";
|
||||
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
|
||||
import { colours } from "@kan/shared/constants";
|
||||
import { generateSlug, generateUID } from "@kan/shared/utils";
|
||||
|
||||
import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
|
||||
@@ -151,10 +149,8 @@ export const boardRouter = createTRPCRouter({
|
||||
})
|
||||
.input(
|
||||
z.object({
|
||||
name: z.string().min(1).max(100),
|
||||
name: z.string().min(1),
|
||||
workspacePublicId: z.string().min(12),
|
||||
lists: z.array(z.string().min(1)),
|
||||
labels: z.array(z.string().min(1)),
|
||||
}),
|
||||
)
|
||||
.output(z.custom<Awaited<ReturnType<typeof boardRepo.create>>>())
|
||||
@@ -203,30 +199,6 @@ export const boardRouter = createTRPCRouter({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
});
|
||||
|
||||
if (input.lists.length) {
|
||||
const listInputs = input.lists.map((list, index) => ({
|
||||
publicId: generateUID(),
|
||||
name: list,
|
||||
boardId: result.id,
|
||||
createdBy: userId,
|
||||
index,
|
||||
}));
|
||||
|
||||
await listRepo.bulkCreate(ctx.db, listInputs);
|
||||
}
|
||||
|
||||
if (input.labels.length) {
|
||||
const labelInputs = input.labels.map((label, index) => ({
|
||||
publicId: generateUID(),
|
||||
name: label,
|
||||
boardId: result.id,
|
||||
createdBy: userId,
|
||||
colourCode: colours[index % colours.length]?.code ?? "#0d9488",
|
||||
}));
|
||||
|
||||
await labelRepo.bulkCreate(ctx.db, labelInputs);
|
||||
}
|
||||
|
||||
return result;
|
||||
}),
|
||||
update: protectedProcedure
|
||||
@@ -380,40 +352,40 @@ export const boardRouter = createTRPCRouter({
|
||||
|
||||
return { success: true };
|
||||
}),
|
||||
checkSlugAvailability: publicProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
summary: "Check if a board slug is available",
|
||||
method: "GET",
|
||||
path: "/boards/{boardPublicId}/check-slug-availability",
|
||||
description: "Checks if a board slug is available",
|
||||
tags: ["Boards"],
|
||||
protect: true,
|
||||
},
|
||||
})
|
||||
.input(
|
||||
z.object({
|
||||
boardSlug: z
|
||||
.string()
|
||||
.min(3)
|
||||
.max(24)
|
||||
.regex(/^(?![-]+$)[a-zA-Z0-9-]+$/),
|
||||
boardPublicId: z.string().min(12),
|
||||
checkSlugAvailability: publicProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
summary: "Check if a board slug is available",
|
||||
method: "GET",
|
||||
path: "/boards/{boardPublicId}/check-slug-availability",
|
||||
description: "Checks if a board slug is available",
|
||||
tags: ["Boards"],
|
||||
protect: true,
|
||||
},
|
||||
})
|
||||
.input(
|
||||
z.object({
|
||||
boardSlug: z
|
||||
.string()
|
||||
.min(3)
|
||||
.max(24)
|
||||
.regex(/^(?![-]+$)[a-zA-Z0-9-]+$/),
|
||||
boardPublicId: z.string().min(12),
|
||||
}),
|
||||
)
|
||||
.output(
|
||||
z.object({
|
||||
isReserved: z.boolean(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const isBoardSlugAvailable = await boardRepo.isBoardSlugAvailable(
|
||||
ctx.db,
|
||||
input.boardSlug,
|
||||
input.boardPublicId,
|
||||
);
|
||||
return {
|
||||
isReserved: !isBoardSlugAvailable,
|
||||
};
|
||||
}),
|
||||
)
|
||||
.output(
|
||||
z.object({
|
||||
isReserved: z.boolean(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const isBoardSlugAvailable = await boardRepo.isBoardSlugAvailable(
|
||||
ctx.db,
|
||||
input.boardSlug,
|
||||
input.boardPublicId,
|
||||
);
|
||||
return {
|
||||
isReserved: !isBoardSlugAvailable,
|
||||
};
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -55,7 +55,6 @@ export const importRouter = createTRPCRouter({
|
||||
protect: true,
|
||||
},
|
||||
})
|
||||
.input(z.void())
|
||||
.output(z.array(z.object({ id: z.string(), name: z.string() })))
|
||||
.query(async ({ ctx }) => {
|
||||
const apiKey = apiKeys.trello;
|
||||
|
||||
@@ -15,47 +15,22 @@ export const apiKeys = {
|
||||
};
|
||||
|
||||
export const integrationRouter = createTRPCRouter({
|
||||
providers: protectedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
summary: "Get integration providers",
|
||||
method: "GET",
|
||||
path: "/integration/providers",
|
||||
description: "Retrieves all integration providers for the user",
|
||||
tags: ["Integration"],
|
||||
protect: true,
|
||||
},
|
||||
})
|
||||
.input(z.void())
|
||||
.output(
|
||||
z.array(
|
||||
z.object({
|
||||
expiresAt: z.date(),
|
||||
createdAt: z.date(),
|
||||
updatedAt: z.date().nullable(),
|
||||
userId: z.string(),
|
||||
accessToken: z.string(),
|
||||
refreshToken: z.string().nullable(),
|
||||
provider: z.string(),
|
||||
}),
|
||||
),
|
||||
)
|
||||
.query(async ({ ctx }) => {
|
||||
const user = ctx.user;
|
||||
providers: protectedProcedure.query(async ({ ctx }) => {
|
||||
const user = ctx.user;
|
||||
|
||||
if (!user)
|
||||
throw new TRPCError({
|
||||
message: "User not authenticated",
|
||||
code: "UNAUTHORIZED",
|
||||
});
|
||||
if (!user)
|
||||
throw new TRPCError({
|
||||
message: "User not authenticated",
|
||||
code: "UNAUTHORIZED",
|
||||
});
|
||||
|
||||
const integrations = await integrationsRepo.getProvidersForUser(
|
||||
ctx.db,
|
||||
user.id,
|
||||
);
|
||||
const integrations = await integrationsRepo.getProvidersForUser(
|
||||
ctx.db,
|
||||
user.id,
|
||||
);
|
||||
|
||||
return integrations;
|
||||
}),
|
||||
return integrations;
|
||||
}),
|
||||
disconnect: protectedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
|
||||
@@ -8,12 +8,6 @@ import * as labelRepo from "@kan/db/repository/label.repo";
|
||||
import { createTRPCRouter, protectedProcedure } from "../trpc";
|
||||
import { assertUserInWorkspace } from "../utils/auth";
|
||||
|
||||
const labelSchema = z.object({
|
||||
publicId: z.string(),
|
||||
name: z.string(),
|
||||
colourCode: z.string().nullable(),
|
||||
});
|
||||
|
||||
export const labelRouter = createTRPCRouter({
|
||||
byPublicId: protectedProcedure
|
||||
.meta({
|
||||
@@ -27,7 +21,7 @@ export const labelRouter = createTRPCRouter({
|
||||
},
|
||||
})
|
||||
.input(z.object({ labelPublicId: z.string().min(12) }))
|
||||
.output(labelSchema)
|
||||
.output(z.custom<Awaited<ReturnType<typeof labelRepo.getByPublicId>>>())
|
||||
.query(async ({ ctx, input }) => {
|
||||
const userId = ctx.user?.id;
|
||||
|
||||
@@ -58,11 +52,7 @@ export const labelRouter = createTRPCRouter({
|
||||
code: "NOT_FOUND",
|
||||
});
|
||||
|
||||
return {
|
||||
publicId: result.publicId,
|
||||
name: result.name,
|
||||
colourCode: result.colourCode,
|
||||
};
|
||||
return result;
|
||||
}),
|
||||
create: protectedProcedure
|
||||
.meta({
|
||||
@@ -82,7 +72,7 @@ export const labelRouter = createTRPCRouter({
|
||||
colourCode: z.string().length(7),
|
||||
}),
|
||||
)
|
||||
.output(labelSchema)
|
||||
.output(z.custom<Awaited<ReturnType<typeof labelRepo.create>>>())
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const userId = ctx.user?.id;
|
||||
|
||||
@@ -118,11 +108,7 @@ export const labelRouter = createTRPCRouter({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
});
|
||||
|
||||
return {
|
||||
publicId: result.publicId,
|
||||
name: result.name,
|
||||
colourCode: result.colourCode,
|
||||
};
|
||||
return result;
|
||||
}),
|
||||
update: protectedProcedure
|
||||
.meta({
|
||||
@@ -142,7 +128,7 @@ export const labelRouter = createTRPCRouter({
|
||||
colourCode: z.string().length(7),
|
||||
}),
|
||||
)
|
||||
.output(labelSchema)
|
||||
.output(z.custom<Awaited<ReturnType<typeof labelRepo.update>>>())
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const userId = ctx.user?.id;
|
||||
|
||||
@@ -167,17 +153,7 @@ export const labelRouter = createTRPCRouter({
|
||||
|
||||
const result = await labelRepo.update(ctx.db, input);
|
||||
|
||||
if (!result)
|
||||
throw new TRPCError({
|
||||
message: `Failed to update label`,
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
});
|
||||
|
||||
return {
|
||||
publicId: result.publicId,
|
||||
name: result.name,
|
||||
colourCode: result.colourCode,
|
||||
};
|
||||
return result;
|
||||
}),
|
||||
delete: protectedProcedure
|
||||
.meta({
|
||||
|
||||
@@ -181,7 +181,6 @@ export const initAuth = (db: dbClient) => {
|
||||
const client = new S3Client({
|
||||
region: env("S3_REGION") ?? "",
|
||||
endpoint: env("S3_ENDPOINT") ?? "",
|
||||
forcePathStyle: env("S3_FORCE_PATH_STYLE") === "true",
|
||||
credentials: {
|
||||
accessKeyId: env("S3_ACCESS_KEY_ID") ?? "",
|
||||
secretAccessKey: env("S3_SECRET_ACCESS_KEY") ?? "",
|
||||
|
||||
@@ -23,12 +23,7 @@ export const create = async (
|
||||
createdBy: labelInput.createdBy,
|
||||
boardId: labelInput.boardId,
|
||||
})
|
||||
.returning({
|
||||
id: labels.id,
|
||||
publicId: labels.publicId,
|
||||
name: labels.name,
|
||||
colourCode: labels.colourCode,
|
||||
});
|
||||
.returning({ id: labels.id });
|
||||
|
||||
if (labelInput.cardId && result) {
|
||||
await db.insert(cardsToLabels).values({
|
||||
@@ -96,7 +91,6 @@ export const update = async (
|
||||
.where(eq(labels.publicId, labelInput.labelPublicId))
|
||||
.returning({
|
||||
id: labels.id,
|
||||
publicId: labels.publicId,
|
||||
name: labels.name,
|
||||
colourCode: labels.colourCode,
|
||||
});
|
||||
|
||||
@@ -68,20 +68,6 @@ export const create = async (
|
||||
});
|
||||
};
|
||||
|
||||
export const bulkCreate = async (
|
||||
db: dbClient,
|
||||
listInput: {
|
||||
publicId: string;
|
||||
name: string;
|
||||
createdBy: string;
|
||||
boardId: number;
|
||||
index: number;
|
||||
importId?: number;
|
||||
}[],
|
||||
) => {
|
||||
return db.insert(lists).values(listInput).returning();
|
||||
};
|
||||
|
||||
export const getByPublicId = async (db: dbClient, listPublicId: string) => {
|
||||
return db.query.lists.findFirst({
|
||||
columns: {
|
||||
|
||||
156
pnpm-lock.yaml
generated
156
pnpm-lock.yaml
generated
@@ -10,14 +10,14 @@ catalogs:
|
||||
specifier: ^5.59.15
|
||||
version: 5.62.7
|
||||
'@trpc/client':
|
||||
specifier: ^11.4.3
|
||||
version: 11.4.3
|
||||
specifier: ^11.0.0-rc.477
|
||||
version: 11.0.0-rc.660
|
||||
'@trpc/react-query':
|
||||
specifier: ^11.4.3
|
||||
version: 11.4.3
|
||||
specifier: ^11.0.0-rc.477
|
||||
version: 11.0.0-rc.660
|
||||
'@trpc/server':
|
||||
specifier: ^11.4.3
|
||||
version: 11.4.3
|
||||
specifier: ^11.0.0-rc.477
|
||||
version: 11.0.0-rc.660
|
||||
eslint:
|
||||
specifier: ^9.12.0
|
||||
version: 9.16.0
|
||||
@@ -140,16 +140,16 @@ importers:
|
||||
version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)
|
||||
'@trpc/client':
|
||||
specifier: 'catalog:'
|
||||
version: 11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2)
|
||||
version: 11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2)
|
||||
'@trpc/next':
|
||||
specifier: ^11.0.0-rc.660
|
||||
version: 11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.3(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.3(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@trpc/server@11.4.3(typescript@5.7.2))(next@15.3.4(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(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)(typescript@5.7.2)
|
||||
version: 11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(next@15.3.4(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(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)(typescript@5.7.2)
|
||||
'@trpc/react-query':
|
||||
specifier: 'catalog:'
|
||||
version: 11.4.3(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.3(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
|
||||
version: 11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
|
||||
'@trpc/server':
|
||||
specifier: 'catalog:'
|
||||
version: 11.4.3(typescript@5.7.2)
|
||||
version: 11.0.0-rc.660(typescript@5.7.2)
|
||||
aws-sdk:
|
||||
specifier: ^2.1692.0
|
||||
version: 2.1692.0
|
||||
@@ -291,13 +291,13 @@ importers:
|
||||
version: link:../stripe
|
||||
'@trpc/server':
|
||||
specifier: 'catalog:'
|
||||
version: 11.4.3(typescript@5.7.2)
|
||||
version: 11.0.0-rc.660(typescript@5.7.2)
|
||||
superjson:
|
||||
specifier: 2.2.1
|
||||
version: 2.2.1
|
||||
trpc-to-openapi:
|
||||
specifier: ^2.3.2
|
||||
version: 2.3.2(@trpc/server@11.4.3(typescript@5.7.2))(zod-openapi@4.1.0(zod@3.24.0))(zod@3.24.0)
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(zod-openapi@4.1.0(zod@3.24.0))(zod@3.24.0)
|
||||
zod:
|
||||
specifier: 'catalog:'
|
||||
version: 3.24.0
|
||||
@@ -2818,11 +2818,11 @@ packages:
|
||||
'@tootallnate/quickjs-emscripten@0.23.0':
|
||||
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
|
||||
|
||||
'@trpc/client@11.4.3':
|
||||
resolution: {integrity: sha512-i2suttUCfColktXT8bqex5kHW5jpT15nwUh0hGSDiW1keN621kSUQKcLJ095blqQAUgB+lsmgSqSMmB4L9shQQ==}
|
||||
'@trpc/client@11.0.0-rc.660':
|
||||
resolution: {integrity: sha512-bNpkZEfyMGKHynYFxdLpY8nJ1n7E3JHKcd4Pe2cagmpkzOEF9tFT3kzNf+eLI8XMG8196lTRR0J0W2/1Q8/cug==}
|
||||
peerDependencies:
|
||||
'@trpc/server': 11.4.3
|
||||
typescript: '>=5.7.2'
|
||||
'@trpc/server': 11.0.0-rc.660+74625d5e4
|
||||
typescript: '>=5.6.2'
|
||||
|
||||
'@trpc/next@11.0.0-rc.660':
|
||||
resolution: {integrity: sha512-LQHdiVED8h+CJEAy/X9PDmY3fM8VPdZ+3bVkbmEiP4xoNnSKRTbSbknFyRzG9M2AogfIafF4zAZVwOvCxexyGw==}
|
||||
@@ -2841,20 +2841,20 @@ packages:
|
||||
'@trpc/react-query':
|
||||
optional: true
|
||||
|
||||
'@trpc/react-query@11.4.3':
|
||||
resolution: {integrity: sha512-z+jhAiOBD22NNhHtvF0iFp9hO36YFA7M8AiUu/XtNmMxyLd3Y9/d1SMjMwlTdnGqxEGPo41VEWBrdhDUGtUuHg==}
|
||||
'@trpc/react-query@11.0.0-rc.660':
|
||||
resolution: {integrity: sha512-U2BHtYVt+8jt0a8Nrrk5cep8O1UZRxtTCBHtXie9kmJyQWWml43KfHxL5ssnFywaFrDZQz6Ec7kIoOxR/CQNfg==}
|
||||
peerDependencies:
|
||||
'@tanstack/react-query': ^5.80.3
|
||||
'@trpc/client': 11.4.3
|
||||
'@trpc/server': 11.4.3
|
||||
'@tanstack/react-query': ^5.59.15
|
||||
'@trpc/client': 11.0.0-rc.660+74625d5e4
|
||||
'@trpc/server': 11.0.0-rc.660+74625d5e4
|
||||
react: '>=18.2.0'
|
||||
react-dom: '>=18.2.0'
|
||||
typescript: '>=5.7.2'
|
||||
typescript: '>=5.6.2'
|
||||
|
||||
'@trpc/server@11.4.3':
|
||||
resolution: {integrity: sha512-wnWq3wiLlMOlYkaIZz+qbuYA5udPTLS4GVVRyFkr6aT83xpdCHyVtURT+u4hSoIrOXQM9OPCNXSXsAujWZDdaw==}
|
||||
'@trpc/server@11.0.0-rc.660':
|
||||
resolution: {integrity: sha512-QUapcZCNOpHT7ng9LceGc9ImkboWd0Go9ryrduZpL+p4jdfaC6409AQ3x4XEW6Wu3yBmZAn4CywCsDrDhjDy/w==}
|
||||
peerDependencies:
|
||||
typescript: '>=5.7.2'
|
||||
typescript: '>=5.6.2'
|
||||
|
||||
'@tsconfig/node10@1.0.11':
|
||||
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
|
||||
@@ -3575,6 +3575,10 @@ packages:
|
||||
config-chain@1.1.13:
|
||||
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
|
||||
|
||||
consola@3.2.3:
|
||||
resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
|
||||
engines: {node: ^14.18.0 || >=16.10.0}
|
||||
|
||||
constant-case@2.0.0:
|
||||
resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==}
|
||||
|
||||
@@ -3625,8 +3629,8 @@ packages:
|
||||
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
||||
engines: {node: '>= 8'}
|
||||
|
||||
crossws@0.3.5:
|
||||
resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
|
||||
crossws@0.3.1:
|
||||
resolution: {integrity: sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==}
|
||||
|
||||
css-box-model@1.2.1:
|
||||
resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==}
|
||||
@@ -4440,8 +4444,8 @@ packages:
|
||||
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
|
||||
engines: {node: '>=6.0'}
|
||||
|
||||
h3@1.15.1:
|
||||
resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==}
|
||||
h3@1.13.0:
|
||||
resolution: {integrity: sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==}
|
||||
|
||||
handlebars@4.7.8:
|
||||
resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
|
||||
@@ -4973,6 +4977,9 @@ packages:
|
||||
lodash.castarray@4.4.0:
|
||||
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
|
||||
|
||||
lodash.clonedeep@4.5.0:
|
||||
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
|
||||
|
||||
lodash.get@4.4.2:
|
||||
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
|
||||
deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
|
||||
@@ -5333,6 +5340,11 @@ packages:
|
||||
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
mime@3.0.0:
|
||||
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
hasBin: true
|
||||
|
||||
mimic-fn@2.1.0:
|
||||
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -5485,6 +5497,9 @@ packages:
|
||||
no-case@2.3.2:
|
||||
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
|
||||
|
||||
node-fetch-native@1.6.4:
|
||||
resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
|
||||
|
||||
node-fetch@2.7.0:
|
||||
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
|
||||
engines: {node: 4.x || >=6.0.0}
|
||||
@@ -5498,9 +5513,6 @@ packages:
|
||||
resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
|
||||
hasBin: true
|
||||
|
||||
node-mock-http@1.0.1:
|
||||
resolution: {integrity: sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==}
|
||||
|
||||
node-plop@0.26.3:
|
||||
resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==}
|
||||
engines: {node: '>=8.9.4'}
|
||||
@@ -5564,6 +5576,9 @@ packages:
|
||||
obuf@1.1.2:
|
||||
resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
|
||||
|
||||
ohash@1.1.4:
|
||||
resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==}
|
||||
|
||||
on-exit-leak-free@2.1.2:
|
||||
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
@@ -5582,8 +5597,8 @@ packages:
|
||||
openapi-types@12.1.3:
|
||||
resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
|
||||
|
||||
openapi3-ts@4.4.0:
|
||||
resolution: {integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==}
|
||||
openapi3-ts@4.3.3:
|
||||
resolution: {integrity: sha512-LKkzBGJcZ6wdvkKGMoSvpK+0cbN5Xc3XuYkJskO+vjEQWJgs1kgtyUk0pjf8KwPuysv323Er62F5P17XQl96Qg==}
|
||||
|
||||
optionator@0.9.4:
|
||||
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
|
||||
@@ -6721,12 +6736,12 @@ packages:
|
||||
trough@2.2.0:
|
||||
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
|
||||
|
||||
trpc-to-openapi@2.3.2:
|
||||
resolution: {integrity: sha512-uDZou+5a+H77yhiqfzVRBXzTSX8/mQUGeFpr8+VtZmpzUBOmv5XYbyEtWpG7fOdGWZkB99wuuKeWUwNwwOGaXQ==}
|
||||
trpc-to-openapi@2.1.0:
|
||||
resolution: {integrity: sha512-LODbI2a9LQamLpEz9hsqeMJBxpNT8KqfyICJhTVe8JBPZM8DvUkoICPlsdHf1KJVteoem/LlbwkD7loKYPWP1Q==}
|
||||
peerDependencies:
|
||||
'@trpc/server': ^11.1.0
|
||||
'@trpc/server': ^11.0.0-rc.648
|
||||
zod: ^3.23.8
|
||||
zod-openapi: 4.2.4
|
||||
zod-openapi: ^4.1.0
|
||||
|
||||
ts-api-utils@1.4.3:
|
||||
resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
|
||||
@@ -6859,6 +6874,9 @@ packages:
|
||||
undici-types@6.19.8:
|
||||
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
|
||||
|
||||
unenv@1.10.0:
|
||||
resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==}
|
||||
|
||||
unified@10.1.2:
|
||||
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
|
||||
|
||||
@@ -9691,33 +9709,33 @@ snapshots:
|
||||
|
||||
'@tootallnate/quickjs-emscripten@0.23.0': {}
|
||||
|
||||
'@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2)':
|
||||
'@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2)':
|
||||
dependencies:
|
||||
'@trpc/server': 11.4.3(typescript@5.7.2)
|
||||
'@trpc/server': 11.0.0-rc.660(typescript@5.7.2)
|
||||
typescript: 5.7.2
|
||||
|
||||
'@trpc/next@11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.3(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.3(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@trpc/server@11.4.3(typescript@5.7.2))(next@15.3.4(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(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)(typescript@5.7.2)':
|
||||
'@trpc/next@11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(next@15.3.4(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(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)(typescript@5.7.2)':
|
||||
dependencies:
|
||||
'@trpc/client': 11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2)
|
||||
'@trpc/server': 11.4.3(typescript@5.7.2)
|
||||
'@trpc/client': 11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2)
|
||||
'@trpc/server': 11.0.0-rc.660(typescript@5.7.2)
|
||||
next: 15.3.4(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
typescript: 5.7.2
|
||||
optionalDependencies:
|
||||
'@tanstack/react-query': 5.62.7(react@18.3.1)
|
||||
'@trpc/react-query': 11.4.3(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.3(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
|
||||
'@trpc/react-query': 11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
|
||||
|
||||
'@trpc/react-query@11.4.3(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.3(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)':
|
||||
'@trpc/react-query@11.0.0-rc.660(@tanstack/react-query@5.62.7(react@18.3.1))(@trpc/client@11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)':
|
||||
dependencies:
|
||||
'@tanstack/react-query': 5.62.7(react@18.3.1)
|
||||
'@trpc/client': 11.4.3(@trpc/server@11.4.3(typescript@5.7.2))(typescript@5.7.2)
|
||||
'@trpc/server': 11.4.3(typescript@5.7.2)
|
||||
'@trpc/client': 11.0.0-rc.660(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(typescript@5.7.2)
|
||||
'@trpc/server': 11.0.0-rc.660(typescript@5.7.2)
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
typescript: 5.7.2
|
||||
|
||||
'@trpc/server@11.4.3(typescript@5.7.2)':
|
||||
'@trpc/server@11.0.0-rc.660(typescript@5.7.2)':
|
||||
dependencies:
|
||||
typescript: 5.7.2
|
||||
|
||||
@@ -10597,6 +10615,8 @@ snapshots:
|
||||
ini: 1.3.8
|
||||
proto-list: 1.2.4
|
||||
|
||||
consola@3.2.3: {}
|
||||
|
||||
constant-case@2.0.0:
|
||||
dependencies:
|
||||
snake-case: 2.1.0
|
||||
@@ -10648,7 +10668,7 @@ snapshots:
|
||||
shebang-command: 2.0.0
|
||||
which: 2.0.2
|
||||
|
||||
crossws@0.3.5:
|
||||
crossws@0.3.1:
|
||||
dependencies:
|
||||
uncrypto: 0.1.3
|
||||
|
||||
@@ -11622,17 +11642,18 @@ snapshots:
|
||||
section-matter: 1.0.0
|
||||
strip-bom-string: 1.0.0
|
||||
|
||||
h3@1.15.1:
|
||||
h3@1.13.0:
|
||||
dependencies:
|
||||
cookie-es: 1.2.2
|
||||
crossws: 0.3.5
|
||||
crossws: 0.3.1
|
||||
defu: 6.1.4
|
||||
destr: 2.0.3
|
||||
iron-webcrypto: 1.2.1
|
||||
node-mock-http: 1.0.1
|
||||
ohash: 1.1.4
|
||||
radix3: 1.1.2
|
||||
ufo: 1.5.4
|
||||
uncrypto: 0.1.3
|
||||
unenv: 1.10.0
|
||||
|
||||
handlebars@4.7.8:
|
||||
dependencies:
|
||||
@@ -12174,6 +12195,8 @@ snapshots:
|
||||
|
||||
lodash.castarray@4.4.0: {}
|
||||
|
||||
lodash.clonedeep@4.5.0: {}
|
||||
|
||||
lodash.get@4.4.2: {}
|
||||
|
||||
lodash.isplainobject@4.0.6: {}
|
||||
@@ -12915,6 +12938,8 @@ snapshots:
|
||||
dependencies:
|
||||
mime-db: 1.52.0
|
||||
|
||||
mime@3.0.0: {}
|
||||
|
||||
mimic-fn@2.1.0: {}
|
||||
|
||||
mini-svg-data-uri@1.4.4: {}
|
||||
@@ -13051,6 +13076,8 @@ snapshots:
|
||||
dependencies:
|
||||
lower-case: 1.1.4
|
||||
|
||||
node-fetch-native@1.6.4: {}
|
||||
|
||||
node-fetch@2.7.0:
|
||||
dependencies:
|
||||
whatwg-url: 5.0.0
|
||||
@@ -13058,8 +13085,6 @@ snapshots:
|
||||
node-gyp-build@4.8.4:
|
||||
optional: true
|
||||
|
||||
node-mock-http@1.0.1: {}
|
||||
|
||||
node-plop@0.26.3:
|
||||
dependencies:
|
||||
'@babel/runtime-corejs3': 7.26.0
|
||||
@@ -13130,6 +13155,8 @@ snapshots:
|
||||
|
||||
obuf@1.1.2: {}
|
||||
|
||||
ohash@1.1.4: {}
|
||||
|
||||
on-exit-leak-free@2.1.2: {}
|
||||
|
||||
once@1.4.0:
|
||||
@@ -13148,7 +13175,7 @@ snapshots:
|
||||
|
||||
openapi-types@12.1.3: {}
|
||||
|
||||
openapi3-ts@4.4.0:
|
||||
openapi3-ts@4.3.3:
|
||||
dependencies:
|
||||
yaml: 2.6.1
|
||||
|
||||
@@ -14491,12 +14518,13 @@ snapshots:
|
||||
|
||||
trough@2.2.0: {}
|
||||
|
||||
trpc-to-openapi@2.3.2(@trpc/server@11.4.3(typescript@5.7.2))(zod-openapi@4.1.0(zod@3.24.0))(zod@3.24.0):
|
||||
trpc-to-openapi@2.1.0(@trpc/server@11.0.0-rc.660(typescript@5.7.2))(zod-openapi@4.1.0(zod@3.24.0))(zod@3.24.0):
|
||||
dependencies:
|
||||
'@trpc/server': 11.4.3(typescript@5.7.2)
|
||||
'@trpc/server': 11.0.0-rc.660(typescript@5.7.2)
|
||||
co-body: 6.2.0
|
||||
h3: 1.15.1
|
||||
openapi3-ts: 4.4.0
|
||||
h3: 1.13.0
|
||||
lodash.clonedeep: 4.5.0
|
||||
openapi3-ts: 4.3.3
|
||||
zod: 3.24.0
|
||||
zod-openapi: 4.1.0(zod@3.24.0)
|
||||
optionalDependencies:
|
||||
@@ -14640,6 +14668,14 @@ snapshots:
|
||||
|
||||
undici-types@6.19.8: {}
|
||||
|
||||
unenv@1.10.0:
|
||||
dependencies:
|
||||
consola: 3.2.3
|
||||
defu: 6.1.4
|
||||
mime: 3.0.0
|
||||
node-fetch-native: 1.6.4
|
||||
pathe: 1.1.2
|
||||
|
||||
unified@10.1.2:
|
||||
dependencies:
|
||||
'@types/unist': 2.0.11
|
||||
|
||||
@@ -5,9 +5,9 @@ packages:
|
||||
|
||||
catalog:
|
||||
"@tanstack/react-query": ^5.59.15
|
||||
"@trpc/client": ^11.4.3
|
||||
"@trpc/react-query": ^11.4.3
|
||||
"@trpc/server": ^11.4.3
|
||||
"@trpc/client": ^11.0.0-rc.477
|
||||
"@trpc/react-query": ^11.0.0-rc.477
|
||||
"@trpc/server": ^11.0.0-rc.477
|
||||
eslint: ^9.12.0
|
||||
prettier: ^3.3.3
|
||||
tailwindcss: ^3.4.14
|
||||
|
||||
@@ -106,7 +106,6 @@
|
||||
"S3_ACCESS_KEY_ID",
|
||||
"S3_SECRET_ACCESS_KEY",
|
||||
"S3_ENDPOINT",
|
||||
"S3_FORCE_PATH_STYLE",
|
||||
"PORT",
|
||||
"BETTER_AUTH_SECRET",
|
||||
"BETTER_AUTH_TRUSTED_ORIGINS"
|
||||
|
||||
Reference in New Issue
Block a user