Compare commits

...

1465 Commits

Author SHA1 Message Date
Neeraj Gupta
427968a1cd [cli][setup] add: public-albums-url subcommand to configure albums url (#4235)
Adds a command `ente setup public-albums-url`. 


![Capture-Nov-28-17-12-36](https://github.com/user-attachments/assets/1884332f-635e-4173-a48e-69d762725590)
2024-11-29 14:05:04 +05:30
mngshm
8b71ae3b33 chore: grouping imports 2024-11-29 13:45:31 +05:30
mngshm
185a013cff [ente-cli]fix: trim trailing slashes in albumsUrl 2024-11-29 13:41:11 +05:30
Neeraj Gupta
0493f1c306 [server] Enhance alerts + defer replication attemp on size error (#4247)
## Description

## Tests
2024-11-29 13:08:55 +05:30
Manav Rathi
9dd6da97be [desktop] Dependency updates (#4248) 2024-11-29 13:05:27 +05:30
Manav Rathi
18133730d2 Revert prettier update
It is munging markdown lists, let it stabilize.
2024-11-29 13:01:42 +05:30
Neeraj Gupta
002b148dae Increase delay 2024-11-29 12:48:18 +05:30
Manav Rathi
741e592f24 [desktop] Dep updates 2024-11-29 12:44:03 +05:30
Neeraj Gupta
c6ec3fa8fd [server] Fixed delay in next attemp 2024-11-29 12:24:12 +05:30
Manav Rathi
c9b24f09e8 photosd-next 1.7.8-beta (#4246) 2024-11-29 12:12:15 +05:30
Manav Rathi
17dba8f195 photosd-next 1.7.8-beta 2024-11-29 12:10:24 +05:30
Neeraj Gupta
a54cbd779a [server] Alert on object replcement 2024-11-29 12:01:34 +05:30
Neeraj Gupta
99ad1068f0 [server] Retry replication after 7 day instead of 1 (temp change) 2024-11-29 11:11:28 +05:30
Neeraj Gupta
6703f16caa Fix alert copy 2024-11-29 11:07:43 +05:30
Manav Rathi
6b91327bdf photosd-v1.7.7 (#4245) 2024-11-29 11:00:53 +05:30
Manav Rathi
c3d7ddb105 photosd-v1.7.7 2024-11-29 10:59:11 +05:30
Manav Rathi
ad847e88c3 Update README (#4244) 2024-11-29 10:11:54 +05:30
Manav Rathi
219c4e513f Update README 2024-11-29 08:15:58 +05:30
Manav Rathi
31c5f24227 [web] Minor photo viewer refactoring - Part x/x (#4241) 2024-11-29 07:54:34 +05:30
Manav Rathi
4f55aa969e [web] Shared albums refactoring - Part x/x (#4240) 2024-11-29 07:44:09 +05:30
Manav Rathi
9f4561b901 Reuse structure 2024-11-29 07:29:33 +05:30
Manav Rathi
b081537a2c Reuse 2024-11-29 06:05:31 +05:30
Manav Rathi
33ed4a8dff Reuse 2024-11-29 06:05:31 +05:30
Manav Rathi
e912b876db The sync is standalone 2024-11-29 06:05:31 +05:30
Manav Rathi
c1a3cdceed Move 2024-11-29 06:05:31 +05:30
Manav Rathi
f9623ecf75 Shorten 2024-11-29 06:05:31 +05:30
Manav Rathi
35c2526703 Forward 2024-11-29 06:05:31 +05:30
Manav Rathi
e910ae16ff Doc 2024-11-29 06:05:31 +05:30
Manav Rathi
fc40b8fdd4 Reuse 2024-11-29 06:05:31 +05:30
Manav Rathi
cf5b006cab Prune 2024-11-29 06:05:31 +05:30
Manav Rathi
8eeaa5ea98 Prune exports 2024-11-29 06:05:31 +05:30
Manav Rathi
2b88cc3621 Doc 2024-11-29 06:05:31 +05:30
Manav Rathi
302d373af1 Use 2024-11-29 06:05:31 +05:30
Manav Rathi
9f1e8f9254 New way 2024-11-29 06:05:31 +05:30
Jin Cao
74117db8b0 [auth] Add Goverment of Canada Icon (#4172) 2024-11-28 19:24:16 +05:30
Ashil
d26c7fcf8a [mob][photos] Fix video not changing in viewer after deletion (#4237) 2024-11-28 19:22:03 +05:30
Manav Rathi
97c9139b50 [server] Fix and document the internal.admin flag (#4234)
Fix code that didn't even compile, + document
https://github.com/ente-io/ente/pull/4228
2024-11-28 17:59:02 +05:30
Manav Rathi
a1e05b2a9a [web] Don't reset search results on sync completion (#4236)
Plus an unrelated small cleanup of offline message.
2024-11-28 17:38:58 +05:30
ashilkn
481377baeb [mob][photos] Chore 2024-11-28 17:32:54 +05:30
ashilkn
094d879702 [mob][photos] Fix video not changing in viewer after deletion 2024-11-28 17:32:20 +05:30
Manav Rathi
394582b47c Don't reset search results on sync completion 2024-11-28 17:30:04 +05:30
mngshm
5596f46047 [ente-cli]add: public-albums-url subcommand to configure albums url in config file via ente-cli 2024-11-28 17:10:06 +05:30
Manav Rathi
926dce37f8 Extract 2024-11-28 16:53:14 +05:30
Manav Rathi
9e40d3001a Offline msg doesn't make sense for auth since it currently only fetches codes on load 2024-11-28 16:45:16 +05:30
Manav Rathi
836fc951f4 Format 2024-11-28 16:06:43 +05:30
Manav Rathi
f096e084ef Don't apply auto-first-admin if internal.admin is set 2024-11-28 16:04:04 +05:30
Manav Rathi
2196c3dbc8 Fix code that didn't even compile 2024-11-28 15:55:16 +05:30
Manav Rathi
c6872d2d35 [server] Document the internal.admin flag
Complements https://github.com/ente-io/ente/pull/4228
2024-11-28 15:42:33 +05:30
Manav Rathi
1178a3c910 [web] General non-functional cleanup (#4233) 2024-11-28 15:37:15 +05:30
Manav Rathi
4d761f91c4 Workaround for Admins list in Environment Variables by specifying singular admin (#4228)
## Description

This allows working around an issue with Viper where it doesn't properly
unmarshal GetIntSlice from environment variables. Seems like this is a
known issue and is quite old. I'm assuming there isn't plans to fix it
on the Viper side.

https://github.com/spf13/viper/issues/339

## Tests

I'll be brutally honest, I don't know how to run Go, but this seemed
like a pretty quick low hanging fix.
2024-11-28 15:36:46 +05:30
Ashil
7b54f7910a [mob][photos] Fix misaligned hint text in search bar (#4232)
## Description

Fix for the hint text ("Search") in the search bar getting misaligned
more towards the top for smaller font sizes (normal for a big enough
majority of people).
2024-11-28 15:33:17 +05:30
Manav Rathi
4fca50f9a6 Inline and move 2024-11-28 15:30:38 +05:30
ashilkn
61791d5b9b [mob][photos] Fix alginment of hintText in search bar for smaller font sizes 2024-11-28 15:15:04 +05:30
ashilkn
0c39466d1b [mob][photos] Chore 2024-11-28 14:59:39 +05:30
Manav Rathi
8623b8323d Tweak 2024-11-28 14:41:51 +05:30
Manav Rathi
73e0a1dec2 Inline 2024-11-28 14:32:58 +05:30
Ashil
f632aa86d1 [mob][photos] Fix bug when clicking on 'collect' in shared tab to collect photos (#4229) 2024-11-28 14:24:38 +05:30
ashilkn
aed5d962e5 [mob][photos] Fix bug when clicking on 'collect' in shared tab to collect photos 2024-11-28 14:16:59 +05:30
Manav Rathi
4cf4571c31 Inline 2024-11-28 14:14:27 +05:30
Manav Rathi
8c01c7a902 Remove unused variant 2024-11-28 14:09:53 +05:30
Manav Rathi
fca6f36087 Ren 2024-11-28 13:57:43 +05:30
Neeraj Gupta
67f42d0b31 [mob][auth] Send login purpose during ott (#4227)
## Description

## Tests
2024-11-28 13:42:01 +05:30
Andy
55cd084ea8 Add support for specifying a singular admin id to workaround GetIntSlice issue 2024-11-28 03:11:52 -05:00
Neeraj Gupta
fb7080001e [mob][auth] Send login purpose during ott 2024-11-28 13:32:40 +05:30
Manav Rathi
efda227c8a [web] New translations (#4225)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-28 12:55:32 +05:30
Crowdin Bot
f1fbf2c95b New Crowdin translations by GitHub Action 2024-11-28 07:23:08 +00:00
Manav Rathi
b46581790a [web] Ask the user their preferred 2FA choice if both are enabled (#4224)
Sibling of mobile https://github.com/ente-io/ente/pull/4210. Unlike
mobile, we automatically redirect so we need to ask the user their pref
beforehand.
2024-11-28 12:52:22 +05:30
Manav Rathi
4bca5f8bf6 Use 2024-11-28 12:36:22 +05:30
Manav Rathi
6fed5c944b Extract 2024-11-28 12:30:14 +05:30
Neeraj Gupta
0782b00bcd [mob] Enable translation for Ukrainian & Vietnamese (#4223)
## Description

## Tests
2024-11-28 12:10:22 +05:30
Manav Rathi
ee34ed5e1f 2FA choice place 1 2024-11-28 12:08:03 +05:30
Neeraj Gupta
5b3a6049b3 [mob] Enable translation for Ukrainian & Vietnamese 2024-11-28 11:45:26 +05:30
Manav Rathi
eab95b7ed0 [web] Rework upload URL handling (#4222) 2024-11-28 10:57:13 +05:30
Manav Rathi
3298d97bbc Fail upload on dupes 2024-11-28 09:26:39 +05:30
Manav Rathi
b36df8d7ad [web] Rework upload URL handling 2024-11-28 09:21:41 +05:30
Neeraj Gupta
d2761b6be9 [mob] Bump version v0.9.65 (#4217)
## Description

## Tests
2024-11-28 01:21:01 +05:30
Neeraj Gupta
b2482acfc3 [mob] Hint inputType 2024-11-28 01:18:48 +05:30
Neeraj Gupta
9994499050 [mob] Bump version v0.9.65 2024-11-28 01:11:12 +05:30
Neeraj Gupta
5f1beecb8a [mob] Fix person cover refresh issue (#4216)
## Description

## Tests
2024-11-28 00:53:56 +05:30
Neeraj Gupta
35bc7dfee6 [mob] bump version 2024-11-28 00:49:20 +05:30
Neeraj Gupta
32f1a8b3a6 [mob] Fix cover refresh issue 2024-11-28 00:48:52 +05:30
Neeraj Gupta
7e9b3468d7 [mob] Handle null value 2024-11-28 00:48:09 +05:30
Ashil
d2d859a8f7 [mob][photos] Update change log (#4215)
## Description

## Tests
2024-11-27 22:26:13 +05:30
ashilkn
0373141520 [mob][photos] Bump up to v0.9.63 2024-11-27 21:26:35 +05:30
ashilkn
9f110ddc0c [mob][photos] Update change log 2024-11-27 21:26:06 +05:30
Neeraj Gupta
72d9881fe4 [mob] Enable fallback to TOTP if both passkey & totp are enabled (#4210)
## Description

## Tests
2024-11-27 20:18:51 +05:30
Neeraj Gupta
943f4ac973 [server] Create totpSession when both passkey and totp are enabled (#4211)
## Description

- When both `passkeySessionID` and `twoFactorSessionID` are set in the
response, the web will surface passkey based login while mobile will
only surface totp based login.

- For now, I have added a new field in the response
(`twoFactorSessionIDV2) for totpBased twoFactor, that will be only set
when both passkey and totp based MFA are enabled.
- Once both mobile and desktop changes are out, we can remove this new
field `twoFactorSessionIDV2` from the response

Corresponding mobile diff: https://github.com/ente-io/ente/pull/4210
## Tests
2024-11-27 15:27:10 +05:30
Neeraj Gupta
14fe9bcb72 [auth] Enable login via totp when both passkey & totp are enabled 2024-11-27 15:25:45 +05:30
Ashil
06d6706344 [mob][photos] Minor UX improvement (#4213) 2024-11-27 15:23:34 +05:30
ashilkn
9dce5fb6ad Merge branch 'main' into fixes 2024-11-27 15:16:04 +05:30
ashilkn
a1dc65d6ee [mob][photos] Make text of checkbox acknowledging enabling ML clickable 2024-11-27 15:15:42 +05:30
Neeraj Gupta
08160f251a Merge remote-tracking branch 'origin/main' into twoFactorFallBack 2024-11-27 15:03:30 +05:30
Laurens Priem
2828a6a677 [mob][photos] Fix ml banner (#4212)
## Description

Fix ml banner not going away
2024-11-27 15:03:05 +05:30
laurenspriem
29ab1ecd31 [mob][photos] Fix ml banner 2024-11-27 15:01:41 +05:30
Neeraj Gupta
04ee6f8161 [server] Create totpSession when both passkey and totp are enabled 2024-11-27 14:54:24 +05:30
Neeraj Gupta
1b9f6de6bd [mob] Enable fallback to TOTP if both passkey & totp are enabled 2024-11-27 14:50:34 +05:30
Neeraj Gupta
b060906bb4 [mob] Super key 2024-11-27 13:46:32 +05:30
Ashil
fee5631191 [mob][photos] Fix clipping issues + other minor changes (#4201) 2024-11-27 13:11:52 +05:30
Ashil
d5fa3d6351 [mob][photos] Fix edit person screen clipping (#4207) 2024-11-27 12:45:25 +05:30
ashilkn
f458870332 [mob][photos] Fix clipping issue at bottom of edit person screen 2024-11-27 12:43:52 +05:30
Manav Rathi
78852a216d [web] Fix sort order changes not getting reflected until refresh (#4206) 2024-11-27 12:28:50 +05:30
Manav Rathi
91a459d0ed Update active collection property on sync 2024-11-27 12:21:47 +05:30
Neeraj Gupta
484a70f61f [staff] Update staff dashboard (#4205)
## Description

## Tests
2024-11-27 12:00:48 +05:30
ashilkn
bbefcd0438 [mob][photos] Chore 2024-11-27 11:58:36 +05:30
Neeraj Gupta
51aa4cfaeb [staff] Show expired plan in red 2024-11-27 11:58:35 +05:30
Neeraj Gupta
4e1bc124ff [staff] Add option for toggling email 2fa 2024-11-27 11:49:52 +05:30
ashilkn
e1e2d9fe12 [mob][photos] Chore" 2024-11-27 11:48:15 +05:30
Manav Rathi
6dca81e2ff Add caution note in docs 2024-11-27 11:37:05 +05:30
Manav Rathi
63c3df7477 On upload 2024-11-27 11:32:38 +05:30
Manav Rathi
25e6c2c13f [doc] Add metadata q to export faq (#4204) 2024-11-27 11:25:06 +05:30
Manav Rathi
b30a43ed25 [doc] Add metadata q to export faq 2024-11-27 11:24:18 +05:30
ashilkn
0c56c5341a [mob][photos] bump up to v0.9.62 2024-11-27 11:16:18 +05:30
ashilkn
971dbc069c [mob][photos] UI finness on enalbe ML banner 2024-11-27 11:13:59 +05:30
Manav Rathi
004bffefb2 [web] Fix typo in localized string for suggestions (#4203) 2024-11-27 11:09:10 +05:30
Manav Rathi
b0d11c7e4e [web] Fix typo in localized string for suggestions 2024-11-27 11:04:38 +05:30
Manav Rathi
cd0cceaf02 [docs] 2-way caution (#4202) 2024-11-27 11:01:24 +05:30
Manav Rathi
bc0058d827 [docs] 2-way caution 2024-11-27 11:01:11 +05:30
ashilkn
e43a6bbd21 [mob][photos] Fix minor clipping issue on ContinuousRectangleBorder of faces 2024-11-27 10:56:34 +05:30
Ashil
3ddb43b2b3 [mob][photos] Fix build failing (#4199) 2024-11-27 10:52:52 +05:30
Manav Rathi
660ecbf186 [docs] Add further clarify notes around the firefox canvas bug (#4200) 2024-11-27 10:52:39 +05:30
Manav Rathi
046e63a544 [docs] Add further clarify notes around the firefox canvas bug 2024-11-27 10:52:01 +05:30
ashilkn
dd620fcab2 [mob][photos] Fix build failing 2024-11-27 10:17:11 +05:30
Neeraj Gupta
e961755345 [Staff] Update support dashboard (#4198)
## Description

## Tests
2024-11-27 09:56:07 +05:30
Neeraj Gupta
8d32cba241 [staff] Lint fixes 2024-11-27 09:28:05 +05:30
Manav Rathi
5a58bcfacd [API] Add Cache-control: no-store to API responses (#4197)
...instead of adding it to ad-hoc API requests.

---
Tests: Smoke tested photos, shared albums and cast on localhost.
2024-11-27 09:14:41 +05:30
Manav Rathi
7e94b8c780 Fix mobile lint 2024-11-27 09:11:37 +05:30
Neeraj Gupta
f2d3a63c18 [staff] Show devices 2024-11-27 09:08:28 +05:30
Manav Rathi
3049c25db8 [API] Add Cache-control: no-store to API responses
...instead of adding it to ad-hoc API requests.
2024-11-27 08:29:10 +05:30
Laurens Priem
4138b4da51 [mob][photos] Quick fix undo (#4192)
## Description

Quick fix for suggestion undo issue.
2024-11-26 22:02:09 +05:30
laurenspriem
4dd22a646d [mob][photos] Quick fix undo 2024-11-26 21:35:54 +05:30
Ashil
2ae084780e [mob][photos] Fix incorrect condition + show permission dialog to allow link-in-app in debug mode too (#4189) 2024-11-26 21:33:45 +05:30
Laurens Priem
e980e92c8f [mob] Face thumbnails (#4170)
## Description

- Refactor face thumbnail generation
- Solve caching issue in hierarchical search
- Move to full res face thumbnails in suggestions
- Minor changes to suggestions screen

## Tests

Tested in debug mode on my Pixel 8.
2024-11-26 21:08:23 +05:30
laurenspriem
bdec17b024 [mob][photos] forgot somehow 2024-11-26 21:07:55 +05:30
laurenspriem
0f115f0d95 [mob][photos] merge conflicts again 2024-11-26 21:07:40 +05:30
ashilkn
c1ba766a5f [mob][photos] Fix incorrect condition + show permission dialog to allow link-in-app in debug mode too 2024-11-26 19:22:29 +05:30
Ashil
bf7d6a5f03 [mob][photos] Implement deep linking for public links (#3386)
## Description

Opening an Ente photos public link in the app if the app is installed on
device.
2024-11-26 18:41:04 +05:30
ashilkn
4014d62e51 Revert "Revert "[mob][photos] Open albums.ente.io links and not albums.ente.sh""
This reverts commit cec3131a2e.
2024-11-26 18:37:40 +05:30
laurenspriem
1b3d6ca3be Merge branch 'main' into face_thumbnails 2024-11-26 18:30:18 +05:30
Manav Rathi
8520a6e7d4 [web] Auth - Fix eslint overrides (#4188) 2024-11-26 18:15:14 +05:30
Manav Rathi
4891f470b1 Fin 2024-11-26 18:08:30 +05:30
Manav Rathi
8899157c47 ed 2024-11-26 18:06:02 +05:30
ashilkn
cec3131a2e Revert "[mob][photos] Open albums.ente.io links and not albums.ente.sh"
This reverts commit 4532b4ea8f.
2024-11-26 18:03:31 +05:30
Manav Rathi
b1af3dbabd exhaustive-deps 2024-11-26 18:01:55 +05:30
Manav Rathi
e5a43e9738 Memo the context 2024-11-26 18:01:33 +05:30
Manav Rathi
0e4522c287 Handle 401 2024-11-26 17:57:56 +05:30
ashilkn
15f39901c9 [mob][photos] Extract strings 2024-11-26 17:56:55 +05:30
Manav Rathi
6ae53dff02 Log 2024-11-26 17:53:07 +05:30
ashilkn
4532b4ea8f [mob][photos] Open albums.ente.io links and not albums.ente.sh 2024-11-26 17:43:39 +05:30
Manav Rathi
5df217c87e Handle tab logout 2024-11-26 17:42:14 +05:30
ashilkn
33e35ede52 Merge branch 'main' into deeplinks 2024-11-26 17:34:19 +05:30
Manav Rathi
738688c299 lint rec 2024-11-26 17:33:27 +05:30
Manav Rathi
4fc68dc69f exhaustive-deps 2024-11-26 17:31:32 +05:30
Manav Rathi
1f94020738 Rely on types 2024-11-26 17:28:56 +05:30
Manav Rathi
a6a9d2c740 Prune 2024-11-26 17:25:16 +05:30
Manav Rathi
96f21ecbff Conv deprecated 2024-11-26 17:23:13 +05:30
Manav Rathi
20dd64a778 [web] Auth http rewrite 2024-11-26 17:05:46 +05:30
ashilkn
4324433b3e [mob][photos] Fix ordering of files in sub-gallery in link-in-app gallery 2024-11-26 17:00:55 +05:30
Neeraj Gupta
5a3272f855 [staff] Surface auth code count 2024-11-26 16:55:56 +05:30
Neeraj Gupta
57eb1d6ccf [staff] Show correct status for passkey 2024-11-26 16:50:16 +05:30
ashilkn
8d6ae20ebc [mob][photos] Remove unused variables 2024-11-26 16:32:29 +05:30
Manav Rathi
afad2c7879 [web] Document UUID dependency (#4187)
...updating it too.
2024-11-26 16:20:26 +05:30
ashilkn
0c2dc3aee3 [mob][photos] Fix selection sheet not coming up 2024-11-26 16:19:04 +05:30
ashilkn
60b22e5460 [mob][photos] Chore 2024-11-26 16:08:02 +05:30
ashilkn
788d3b979a [mob][photos] Fix selection not working when clicking on public link and android app does a cold start 2024-11-26 16:07:42 +05:30
Manav Rathi
3315408f43 Update and scope
No breaking changes that affect our use of uuid v4 in 9 => 11
https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md
2024-11-26 16:00:15 +05:30
Manav Rathi
895ba6082b Doc 2024-11-26 15:46:27 +05:30
Manav Rathi
705a9ff2be Scope 2024-11-26 15:43:01 +05:30
Manav Rathi
48b3fa8c09 [web] Refactoring - Cast (#4186) 2024-11-26 15:36:47 +05:30
Manav Rathi
7525b0defe Type 2024-11-26 15:02:10 +05:30
Manav Rathi
ec3f5952b0 dep 2024-11-26 14:50:26 +05:30
Neeraj Gupta
32bf1574e8 [server] Fix usage cal in user_details (#4185)
## Description

## Tests
2024-11-26 14:27:35 +05:30
Neeraj Gupta
ccc6981df9 [server] Fix usage cal in user_details 2024-11-26 14:26:17 +05:30
Manav Rathi
56f584c086 Ref 2024-11-26 14:19:15 +05:30
Manav Rathi
5002cf1d62 Fin 2024-11-26 14:07:08 +05:30
Manav Rathi
b2a9ebe3b8 Typed res 2024-11-26 14:02:22 +05:30
Manav Rathi
34a881115f Remove dupe 2024-11-26 13:51:52 +05:30
Manav Rathi
f85246c8d6 Conv 2024-11-26 13:50:05 +05:30
Manav Rathi
960e6085b1 Move 2024-11-26 13:44:30 +05:30
Manav Rathi
489f5f03c0 Prune 2024-11-26 13:43:43 +05:30
Manav Rathi
20cc8a554d [web] New translations (#4184)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-26 13:00:57 +05:30
Crowdin Bot
3421976238 New Crowdin translations by GitHub Action 2024-11-26 07:30:06 +00:00
Manav Rathi
1b169015c5 [web] Translation cleanup (#4183) 2024-11-26 12:48:32 +05:30
Manav Rathi
768195ccb3 wf 2024-11-26 12:43:24 +05:30
Manav Rathi
58399ba359 ft 2024-11-26 12:36:38 +05:30
Manav Rathi
d50c9bc3a6 Editor strings 2024-11-26 12:32:45 +05:30
Manav Rathi
19983b22cc Rename 2024-11-26 12:22:22 +05:30
Manav Rathi
fcaf07e10d Un 2024-11-26 12:15:54 +05:30
Manav Rathi
3c5cc26083 Move 2024-11-26 12:11:12 +05:30
Neeraj Gupta
e87e2938e8 [mob] Refresh UI when person is changed (#4182)
## Description

## Tests
2024-11-26 12:05:49 +05:30
Manav Rathi
c0dd7b0565 [API] Remove trailing slash from inconsistent cast endpoints (#4179)
None of our other endpoints have a trailing slash. Remove this
inconsistency, otherwise clients who'd not provide a trailing slash
would get an unnecessary redirect.

Note that the CORS-aware clients (web, desktop) do not automatically
follow the redirect because the ACAO is missing on the 307, so we need
keep the old endpoints around temporarily.

Tested: with web and museum running locally
2024-11-26 12:03:52 +05:30
Manav Rathi
b3d75b8e66 Rename and fix casing 2024-11-26 12:03:01 +05:30
Manav Rathi
a98f924fb8 Rename 2024-11-26 12:00:04 +05:30
Manav Rathi
540c9cafab Rename and fix 2024-11-26 11:57:19 +05:30
Manav Rathi
8c6bfb320d Rename 2024-11-26 11:51:47 +05:30
Manav Rathi
11e123828d Rename 2024-11-26 11:47:52 +05:30
Manav Rathi
bc09c4bc59 Rename 2024-11-26 11:41:18 +05:30
Manav Rathi
32396f6c38 Ren 2024-11-26 11:39:14 +05:30
Manav Rathi
114996f1a9 Move 2024-11-26 11:38:21 +05:30
Manav Rathi
9e92f2a73f Rename 2024-11-26 11:38:01 +05:30
Manav Rathi
f2b90c5cbd Move to tr 2024-11-26 11:36:36 +05:30
Manav Rathi
73f4bdc6db Rename 2024-11-26 11:35:19 +05:30
Manav Rathi
371d39b778 [web] Send file size when creating files (#4180) 2024-11-26 10:38:21 +05:30
Manav Rathi
1a2de5b81c [web] Send file size when creating files 2024-11-26 10:33:03 +05:30
Manav Rathi
7be9963303 [API] Remove trailing slash from inconsistent cast endpoints
None of our other endpoints have a trailing slash. Remove this inconsistency,
otherwise clients who'd not provide a trailing slash would get an unnecessary
redirect.

Note that the CORS-aware clients (web, desktop) do not automatically follow the
redirect because the ACAO is missing on the 307, so we need keep the old
endpoints around temporarily.

Tested: with web and museum running locally
2024-11-26 09:53:44 +05:30
Manav Rathi
883aed490e [web] Refactoring - Cast (#4178) 2024-11-26 09:28:59 +05:30
Manav Rathi
76c65a92e3 Re 2024-11-26 09:19:50 +05:30
Manav Rathi
8cd0e6186f Re 2024-11-26 09:12:27 +05:30
Manav Rathi
72fb7e7307 Dialog tweaks 2024-11-26 08:37:36 +05:30
Manav Rathi
139d21949c Fix 2024-11-26 08:35:06 +05:30
Neeraj Gupta
4fc1ec5441 Refresh UI when person is changed 2024-11-26 08:34:47 +05:30
Braky
edd879f239 Update Instagram icon (#4173)
only changes the Instagram icon to the color gradient currently in use
2024-11-26 07:38:08 +05:30
Neeraj Gupta
4f2a2a28e5 [server] Sign up completion check during login + update discord alert (#4176)
## Description

## Tests
2024-11-26 07:37:05 +05:30
Manav Rathi
a59bb780ee Use 2024-11-26 07:29:06 +05:30
Manav Rathi
e36aad9f7c Forward 2024-11-26 07:25:57 +05:30
Manav Rathi
2b36a3e82a Doc and rearrange 2024-11-26 07:03:40 +05:30
Neeraj Gupta
39b1061db7 [mob] Fix UX issues in edit person (#4167)
## Description

## Tests
2024-11-26 07:03:15 +05:30
Neeraj Gupta
d4311bc6c2 [server] Include objectKey in size mismatch 2024-11-26 07:00:36 +05:30
Neeraj Gupta
cd1b0b1f6a [server] Add registration check for login 2024-11-26 06:59:32 +05:30
Manav Rathi
7fd2e58fc8 Typed fetch 2024-11-26 06:48:19 +05:30
ashilkn
efa9ae143c [mob][photos] Bump up to v0.9.61 2024-11-25 22:38:48 +05:30
ashilkn
5fd1f1041a Merge branch 'main' into deeplinks 2024-11-25 22:32:14 +05:30
ashilkn
daaa685a3e [mob][photos] Fix selection bug when not logged in 2024-11-25 22:28:42 +05:30
ashilkn
ddcf456850 [mob][photos] Refactor 2024-11-25 22:09:21 +05:30
ashilkn
c2502d4136 [mob][photos] Fix sorting of files in link-in-app gallery 2024-11-25 21:33:24 +05:30
ashilkn
d514a8ea40 [mob][photos] Fix minor issues with selection in in-app link view 2024-11-25 20:41:00 +05:30
ashilkn
8541eaee60 [mob][photos] Use better names 2024-11-25 20:33:52 +05:30
ashilkn
ae81c73d5b [mob][photos] Chore 2024-11-25 20:22:13 +05:30
ashilkn
32293207bd [mob][photos] Refactor 2024-11-25 20:17:19 +05:30
Manav Rathi
840b0fac63 Inline 2024-11-25 19:50:17 +05:30
Manav Rathi
5fe0bf95c4 Prune log only catch 2024-11-25 19:46:05 +05:30
Manav Rathi
c4a2c10059 Rename 2024-11-25 19:45:46 +05:30
Manav Rathi
a1d6f260cf Reuse 2024-11-25 19:43:05 +05:30
Manav Rathi
eecf4a0932 Reuse 2024-11-25 19:41:10 +05:30
Manav Rathi
15d035ed08 Remove unnecessary async 2024-11-25 19:34:35 +05:30
Manav Rathi
befc5bb00c Tweak 2024-11-25 19:27:21 +05:30
Manav Rathi
5a5a228294 Rename 2024-11-25 19:15:46 +05:30
ashilkn
7d6688adff [mob][photos] Use better names to avoid potential confusion 2024-11-25 18:50:08 +05:30
ashilkn
e2e2987e6e [mob][photos] Use collectionID as key for _cachedPublicAlbumKey map instead of authToken 2024-11-25 18:27:44 +05:30
ashilkn
3f21f5afdd [mob][photos] Chore 2024-11-25 18:24:22 +05:30
ashilkn
e7b5e8f135 Merge branch 'deeplinks' into deeplinks_final_touch 2024-11-25 18:08:57 +05:30
ashilkn
dd323e3256 [mob][photos] Use better names 2024-11-25 18:08:31 +05:30
ashilkn
6669e66bb9 [mob][photos] Notifiy/ask use before opening public link in browser after clicking on the upload files option of an in-app public link 2024-11-25 17:57:13 +05:30
laurenspriem
39f089a86b [mob][photos] Simplify 2024-11-25 17:14:23 +05:30
Aman Raj
799cb24c63 [mob][photos] upload files in web_view for public albums 2024-11-25 17:00:41 +05:30
Aman Raj
c7d56c66a2 [mob][photos] Check for uploading files to public collection 2024-11-25 16:58:52 +05:30
laurenspriem
9b24875af6 [mob][photos] fix merge issue 2024-11-25 16:31:24 +05:30
laurenspriem
16b231c6b7 [mob][photos] intl fix 2024-11-25 16:27:12 +05:30
ashilkn
598b941dda [mob][photos] Improve UX on wrong password for in-app public link 2024-11-25 15:58:29 +05:30
laurenspriem
393e3d4fbb [mob][photos] Refactor more 2024-11-25 15:48:20 +05:30
laurenspriem
2eaf4d198a [mob][photos] refactor 2024-11-25 15:39:30 +05:30
Aman Raj
55fa554a9f [mob][photos] fix: download progress dialog non-dismissible 2024-11-25 15:24:20 +05:30
Neeraj Gupta
23c0458968 Lint fix 2024-11-25 15:14:42 +05:30
laurenspriem
695c2cc9e3 [mob][photos] Remove code 2024-11-25 15:02:37 +05:30
Aman Raj
79f19ef0cb [mob][photos] Minor fix 2024-11-25 14:51:07 +05:30
laurenspriem
33e743386f [mob][photos] Generate only six thumbnails on build 2024-11-25 14:44:31 +05:30
Neeraj Gupta
e710323c46 [mob] Fix UX issues in edit person 2024-11-25 14:20:54 +05:30
Manav Rathi
ae4f5cb161 [web] Download related refactoring (#4166)
No functional changes
2024-11-25 11:59:48 +05:30
Manav Rathi
617259b9ef Move 2024-11-25 11:55:48 +05:30
Manav Rathi
ea92931aa4 Cleanup 2024-11-25 11:53:39 +05:30
ashilkn
1a4cd454cc [mob][photos] Fix using app as photo viewer (by sharing from outside app) not working when app is not killed 2024-11-25 11:45:49 +05:30
laurenspriem
88626e4d50 [mob][photos] Rename 2024-11-25 11:35:37 +05:30
Manav Rathi
bffaf65ec5 Move 2024-11-25 11:34:56 +05:30
Manav Rathi
b80b91b6cd Move 2024-11-25 11:19:36 +05:30
laurenspriem
aa7c78ee50 [mob][photos] generated 2024-11-25 11:16:38 +05:30
laurenspriem
b0cc76c60b Merge branch 'main' into face_thumbnails 2024-11-25 11:16:22 +05:30
Manav Rathi
0ee657af1a [web] New translations (#4162)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-25 09:58:42 +05:30
Neeraj Gupta
6ac0bf26a6 [mobile] New translations (#4163)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-11-25 08:27:00 +05:30
Neeraj Gupta
9e225063ee [auth] New translations (#4164)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-11-25 08:26:38 +05:30
Crowdin Bot
7ee572c4aa New Crowdin translations by GitHub Action 2024-11-25 01:17:33 +00:00
Crowdin Bot
41b25f40ed New Crowdin translations by GitHub Action 2024-11-25 01:05:13 +00:00
Crowdin Bot
a2aa9b8717 New Crowdin translations by GitHub Action 2024-11-25 00:36:45 +00:00
laurenspriem
85b7484426 [mob][photos] Reduce max number of thumbnails 2024-11-24 22:56:07 +05:30
laurenspriem
8615180dfe [mob][photos] use full file 2024-11-24 22:47:55 +05:30
laurenspriem
306c55eef6 [mob][photos] Use full res thumbnails for suggestions 2024-11-24 22:07:40 +05:30
Manav Rathi
ceed533383 [web] Switch file downloads to regular fetch (#4156)
...instead of axios.
2024-11-23 17:21:30 +05:30
Manav Rathi
8ae7565542 Tweak 2024-11-23 16:54:58 +05:30
Manav Rathi
503c1b347d Conv and streamline 2024-11-23 16:52:18 +05:30
Manav Rathi
36849a9e5f Conv 2024-11-23 16:44:15 +05:30
Manav Rathi
020d73f04d Prune 2024-11-23 16:40:05 +05:30
Manav Rathi
c391190664 Conv 2024-11-23 16:37:31 +05:30
Manav Rathi
eb979d155c Conv 2024-11-23 16:34:36 +05:30
Manav Rathi
459339f513 Conv 2024-11-23 16:22:55 +05:30
laurenspriem
dd8cef3ddf [mob][photos] keep face crops for clusters as well 2024-11-23 16:07:11 +05:30
Manav Rathi
d6b47dd452 Stateless 2024-11-23 16:00:17 +05:30
laurenspriem
d1e82b9261 [mob][photos] Store face crop as state 2024-11-23 15:49:26 +05:30
Manav Rathi
ea30dbed46 On demand 2024-11-23 15:28:53 +05:30
Manav Rathi
7503c87bee Doc 2024-11-23 14:59:05 +05:30
Manav Rathi
face515003 Prune 2024-11-23 14:33:48 +05:30
Manav Rathi
f2b4f7ada0 Prune 2024-11-23 14:19:19 +05:30
Manav Rathi
954c132491 useSyncExternalStore 2024-11-23 14:16:37 +05:30
Manav Rathi
ef26df12cc Tweak 2024-11-23 13:50:31 +05:30
laurenspriem
0cfcb83438 [mob][photos] person face widget disable thumbnail fallback 2024-11-23 13:17:29 +05:30
laurenspriem
5d66029a26 [mob][photos] Quicker cache method 2024-11-23 13:15:34 +05:30
laurenspriem
733fd45d6f [mob][photos] Consistent face thumbnails in hierarchical 2024-11-23 11:26:27 +05:30
Neeraj Gupta
5786a3cb79 [mob][photos] Fix #2894 - Edited image resolution (#4153)
## Description

Proposal to fix #2894 so that edited image keep same
dimensions/resolution as original image

The issue was that `FlutterImageCompress.compressWithList` was forcing
the result to be resized using the method's default values {minWidth =
1920, minHeight = 1080}.

It is now forcing the size to be the one right before the compression,
after the potential alterations (flip, rotate, ..).

## Tests

Tested on my Pixel 6a

Built with :

Flutter 3.24.3
JDK 17.0.2
Gradle 7.2
2024-11-23 10:45:34 +05:30
Manav Rathi
07ba083dfe [web] Refactoring of downloader - Part x/x (#4155) 2024-11-23 10:21:24 +05:30
Manav Rathi
01cc72a15f Tweaks 2024-11-23 10:21:10 +05:30
Manav Rathi
1e406cdb90 Handle download failures 2024-11-23 10:03:25 +05:30
Manav Rathi
5f6702f0e7 Types 2024-11-23 09:47:32 +05:30
Manav Rathi
41f2433cee Rework the original downloads 2024-11-23 09:42:40 +05:30
Manav Rathi
d740ebf0f5 Tweak 2024-11-23 08:28:31 +05:30
Manav Rathi
d64113976b Remove dead code 2024-11-23 07:52:22 +05:30
Manav Rathi
3c47e86106 [web] General refactoring, focus towards photo viewer - Part x/x (#4154) 2024-11-23 06:39:18 +05:30
Manav Rathi
2ecc1bbf01 Tweak 2024-11-23 06:29:10 +05:30
Manav Rathi
37d3de25b7 Same spelling as the rest of the codebase 2024-11-23 06:21:12 +05:30
Manav Rathi
745b460941 Fin 2024-11-23 06:14:10 +05:30
Manav Rathi
e02e66ea6d Uncontext 2024-11-23 06:12:41 +05:30
Manav Rathi
3017a35a26 Inline 2024-11-23 06:08:52 +05:30
Manav Rathi
d5d6b7b87a Inline 2024-11-23 06:04:15 +05:30
Manav Rathi
ebee0b25a8 Inline 2024-11-23 06:02:35 +05:30
Manav Rathi
4e0d49b689 Inline 2024-11-23 06:00:44 +05:30
Manav Rathi
76bac5aa72 Inline 2024-11-23 05:58:18 +05:30
Manav Rathi
17bbf31049 Inline 2024-11-23 05:56:32 +05:30
Manav Rathi
a91626aa89 Sep 2024-11-23 05:54:25 +05:30
Manav Rathi
33183412cb Prune 2024-11-23 05:01:38 +05:30
Manav Rathi
81a83ae7a3 Inline 2024-11-23 04:58:57 +05:30
Manav Rathi
552def7153 city fetch only once 2024-11-23 04:50:30 +05:30
Neeraj Gupta
3f0ee4a862 [server][delete] return list of apps being used (#4149)
## Description

## Tests
2024-11-22 23:10:44 +05:30
Neeraj Gupta
397746f2bb [mob][photos] extract remaining strings + localization of 'MagicFilters' (#4150)
Similar to #4118 (used same methodology) @laurenspriem

## Description

I have :
- extracted most of the remaining strings (I am excluding all strings
related to debug pages)
- fixed an issue where the magic filters would only show in english in
hierarchical search (were not localized using the built in
'getLocalizedTitle ' function). Modified file is
`mobile/lib/utils/hierarchical_search_util.dart`

## Tests

Tested on my Pixel 6a

Built with :

Flutter 3.24.3
JDK 17.0.2
Gradle 7.2
2024-11-22 23:10:31 +05:30
ashilkn
4706fff599 [mob][photos] Fix issue when opening links in app 2024-11-22 21:58:36 +05:30
Simon Dubrulle
562bb0da7a fix #2894
Edited image will keep same dimensions as original image
2024-11-22 15:10:17 +01:00
Manav Rathi
2157c2c96d [web] General refactoring, focus towards file conversion - Part x/x (#4152) 2024-11-22 18:19:14 +05:30
Manav Rathi
3b2bc8769f Move force conversion decision to the converter 2024-11-22 18:14:12 +05:30
Manav Rathi
4b368ed8df Fix background 2024-11-22 16:52:56 +05:30
Simon Dubrulle
193bef6927 extracted most remaining strings + fixed issue where 'magic' items would always show in english in hierarchical search 2024-11-22 12:22:10 +01:00
Manav Rathi
c6aff85fd6 Prune 2024-11-22 16:34:22 +05:30
Manav Rathi
16fd6bf1e1 Move 2024-11-22 16:28:37 +05:30
Manav Rathi
333c1da531 Fit better 2024-11-22 16:25:09 +05:30
Manav Rathi
1dcf46309d Trim 2024-11-22 16:19:10 +05:30
Neeraj Gupta
338c2ec369 [server][delete] return list of apps being used 2024-11-22 16:17:08 +05:30
Manav Rathi
13f1e0df4f Fix truncation 2024-11-22 16:04:24 +05:30
Manav Rathi
fb1082a7b7 Inline 1 2024-11-22 15:58:42 +05:30
Neeraj Gupta
8e215d783f [server] Encrich admin api response (#4148)
## Description

## Tests
2024-11-22 15:29:24 +05:30
Neeraj Gupta
831e78f510 [server] Trim space 2024-11-22 15:20:38 +05:30
Neeraj Gupta
25596854d3 [server] Additional data for support dashboard 2024-11-22 15:18:24 +05:30
Manav Rathi
6676fd40b4 Remove override
That I can't find the reason for (will restore if needed)
2024-11-22 15:13:32 +05:30
Manav Rathi
3cc93fbf00 Doc 2024-11-22 15:05:24 +05:30
Manav Rathi
7c163a1a7f Doc 2024-11-22 14:50:55 +05:30
Manav Rathi
6fe994a65c Move 2024-11-22 14:32:53 +05:30
laurenspriem
47ad0337bc [mob][photos] Format 2024-11-22 14:17:10 +05:30
Manav Rathi
60b0be15ad Move 2024-11-22 13:48:56 +05:30
Neeraj Gupta
f93885fba3 [server] Return passkey acount 2024-11-22 13:01:52 +05:30
Manav Rathi
ba84e9cf43 [web] Remove old forked ffmpeg (#4147)
Finalization of https://github.com/ente-io/ente/pull/4127
2024-11-22 12:56:57 +05:30
Manav Rathi
9c4c692c31 Unstar 2024-11-22 12:46:45 +05:30
Manav Rathi
1631354fd8 Remove 2024-11-22 12:42:53 +05:30
Manav Rathi
69c42d7037 Remove 2024-11-22 12:37:23 +05:30
Manav Rathi
e8b1d6f220 Remove 2024-11-22 12:36:26 +05:30
Manav Rathi
f925e36845 Remove submodule web/apps/photos/thirdparty/ffmpeg-wasm 2024-11-22 12:35:54 +05:30
Manav Rathi
52130a0f42 Remove old code 2024-11-22 12:34:47 +05:30
Manav Rathi
8418e9abc1 Doc 2024-11-22 12:34:17 +05:30
Manav Rathi
5e7413ae6f [web] Improve error message (#4146) 2024-11-22 12:31:56 +05:30
Manav Rathi
f16526efd7 [web] New promise queue (#4145) 2024-11-22 12:26:33 +05:30
Manav Rathi
89a7c183de [web] Improve error message
Don't include potentially unbounded stack traces in user facing error messages.
2024-11-22 12:25:18 +05:30
Manav Rathi
75972e5170 Use 2024-11-22 12:17:32 +05:30
Manav Rathi
d8821a0d73 Use 2024-11-22 12:05:19 +05:30
Manav Rathi
e919bf9e1b Write a new promise queue 2024-11-22 12:01:04 +05:30
Manav Rathi
1d070e831b Terminology 2024-11-22 10:37:50 +05:30
Alex Rirak
3dc4d03a87 [AUTH] Fix logo for KnownHost.com + Add dark mode support to Carta.com logo (#4121)
## Description
 - Fix logo for KnownHost.com
 - Add dark mode support to Carta.com logo
2024-11-22 09:57:40 +05:30
Manav Rathi
7708e57ab4 [web] Enable Vietnamese (#4142) 2024-11-22 08:52:56 +05:30
Manav Rathi
6a06e99cb5 [web] Enable Vietnamese 2024-11-22 08:48:33 +05:30
Manav Rathi
0c3cdc57e8 [web] [auth] Translation tweaks (#4141) 2024-11-22 08:42:11 +05:30
Manav Rathi
20fdecaf53 [web] [auth] Translation tweaks 2024-11-22 08:38:12 +05:30
Manav Rathi
cfdc5f00a2 [web] New translations (#4140)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-22 08:36:38 +05:30
Crowdin Bot
8edeef0963 New Crowdin translations by GitHub Action 2024-11-22 03:02:56 +00:00
Manav Rathi
3863878ffc [web][auth] Improve empty state (#4139)
Fixes: https://github.com/ente-io/ente/discussions/4134
2024-11-22 08:31:59 +05:30
Manav Rathi
a84a8d6f04 p => Typography 2024-11-22 08:29:13 +05:30
Manav Rathi
defbdf528c [web][auth] Improve empty state
Fixes: https://github.com/ente-io/ente/discussions/4134
2024-11-22 08:25:22 +05:30
Neeraj Gupta
f0dd74070e [mob][auth] Send signup as purpose during registration (#4133)
## Description

## Tests
2024-11-22 00:56:20 +05:30
mangesh
658177c916 [docs]: move cli self host guide to help page (from ente/cli/docs/sel… (#4128) 2024-11-22 00:53:43 +05:30
Neeraj Gupta
98abac9c77 [mob][auth] Send signup as purpose during registration 2024-11-22 00:52:57 +05:30
Neeraj Gupta
ab2f46e2db [server]Throw err if account registration is completed (#4129)
## Description

## Tests
2024-11-22 00:31:16 +05:30
Laurens Priem
8504f849ea [mobile][photos] Extracted hardcoded english strings + improved trans… (#4118)
## Description

In this PR, I have followed advices from @laurenspriem (in #4039) to:

- extract 15 hardcoded english strings (so that they can be exposed in
Crowdin)
- fix existing string which was wrongly using a parameter (placeholder)
- update the translations documentation so that it includes the
recommended (and hereby followed) approach

This is a follow up of #4040, after having discussed with @laurenspriem
(in #4039).

## Tests
Tested on my Pixel 6a (manually checked multiple new strings, the
easiest ones to trigger, but not all the 15)

Built with :

Flutter 3.24.3
JDK 17.0.2
Gradle 7.2
2024-11-21 20:12:17 +05:30
ashilkn
aaab52c974 Merge branch 'main' into deeplinks 2024-11-21 19:25:14 +05:30
Simon Dubrulle
192ee98c76 Merge branch 'main' into extract_strings_and_improve_translations_doc 2024-11-21 13:50:30 +01:00
ashilkn
a53efda913 [mob][photos] Update media_extension ref 2024-11-21 18:20:06 +05:30
ashilkn
8c36fdb264 [mob][photos] Fix null check used in null value error 2024-11-21 17:42:56 +05:30
Manav Rathi
763248ffc2 [web] Switch to assets (#4130)
- And don't block on cities fetch during remoteSync
2024-11-21 17:41:47 +05:30
ashilkn
5056977e7f [mob][photos] Change copies 2024-11-21 17:33:45 +05:30
laurenspriem
f737bcc7dc [mob][photos] toast message when clicking unclustered face 2024-11-21 17:27:35 +05:30
Neeraj Gupta
f37b25a1c7 [server]Throw err if account registration is completed 2024-11-21 17:26:32 +05:30
Manav Rathi
da884a1b10 Switch 2024-11-21 17:21:24 +05:30
Manav Rathi
12de02f1b5 Don't block on cities fetch during remoteSync 2024-11-21 17:09:59 +05:30
ashilkn
7d96f38e53 [mob][photos] Only show dialog asking for permission to open public link in-app in the android app's independednt and fdroid versions 2024-11-21 17:04:56 +05:30
Manav Rathi
1a9e25a6d8 Switch 2024-11-21 16:50:39 +05:30
laurenspriem
f9865e3fbe Merge branch 'main' into face_thumbnails 2024-11-21 16:31:51 +05:30
ashilkn
45bf98c859 Merge branch 'main' into deeplinks 2024-11-21 15:52:46 +05:30
mangeshrex
746c815186 [docs]: move cli self host guide to help page (from ente/cli/docs/self-hosting.md) 2024-11-21 15:38:39 +05:30
Manav Rathi
cb11062d23 [web] Use upstream ffmpeg WASM (#4127)
* ~0.10 => 0.12 of https://ffmpegwasm.netlify.app
* The old version still needs to be cleaned up, will do that in a
subsequent PR
2024-11-21 15:24:55 +05:30
Neeraj Gupta
76255069f2 [mob] Refactor UX for saving and editing person (#4126)
## Description

## Tests
2024-11-21 15:20:34 +05:30
Manav Rathi
44dee7aa0b LF 2024-11-21 15:20:07 +05:30
Neeraj Gupta
eeff11c795 Lint fix 2024-11-21 15:17:40 +05:30
Neeraj Gupta
3db2f75216 Lint fixes 2024-11-21 15:11:09 +05:30
Manav Rathi
632c5b5acf Restore queue
Observed on Safari

> Failed to generate video thumbnail using the wasm FFmpeg web worker, will
  fallback to canvas: RuntimeError: Out of bounds memory access (evaluating
  'Module["_malloc"](len)')
2024-11-21 15:06:58 +05:30
Neeraj Gupta
e0188687c0 Bump mob photos version 2024-11-21 14:59:03 +05:30
Neeraj Gupta
80e998231e Show merged clusters 2024-11-21 14:58:33 +05:30
Neeraj Gupta
b586957adc Show merged photos during edit person 2024-11-21 14:53:03 +05:30
Manav Rathi
e17bc10d67 Use nid 2024-11-21 14:44:05 +05:30
Manav Rathi
8a2e81cfef yarn 2024-11-21 14:39:30 +05:30
Manav Rathi
4509d8c23f Fit in 2024-11-21 14:10:22 +05:30
Neeraj Gupta
9e8bbe3a40 Use new shape for faceWidget 2024-11-21 14:10:11 +05:30
Neeraj Gupta
60df8392af Update review suggestions ui 2024-11-21 13:44:24 +05:30
Manav Rathi
e0d41f6024 Doc path 2024-11-21 13:34:19 +05:30
Neeraj Gupta
fb801fdfa6 Update UI 2024-11-21 12:48:00 +05:30
Manav Rathi
b9a77cc8ce Swap 2024-11-21 12:46:18 +05:30
Neeraj Gupta
d74e5bc723 Update person suggestions ui 2024-11-21 12:28:12 +05:30
Manav Rathi
c001ea5682 [web] General refactoring - Part x/x (#4124) 2024-11-21 11:56:14 +05:30
Manav Rathi
3cd17087b0 lf + space 2024-11-21 11:49:23 +05:30
Manav Rathi
8a95089a48 Swap 2024-11-21 11:44:41 +05:30
Manav Rathi
4d40f49754 Migrate to fetch 2024-11-21 11:40:50 +05:30
Manav Rathi
8d141d451d Space 2024-11-21 11:28:33 +05:30
Manav Rathi
9aa28027dc Same convention as other packages 2024-11-21 11:27:21 +05:30
Manav Rathi
2195c79fcc Move 2024-11-21 11:25:11 +05:30
Manav Rathi
d857648af9 Inline and move 2024-11-21 11:22:10 +05:30
Manav Rathi
68d475c224 Move 2024-11-21 11:12:06 +05:30
Manav Rathi
d60193fa56 Move 2024-11-21 11:10:05 +05:30
Neeraj Gupta
09953bbc34 Merge remote-tracking branch 'origin/main' into save_contact 2024-11-21 11:06:24 +05:30
Neeraj Gupta
5f60db24ea Support for editing person birthdate and cover 2024-11-21 11:03:29 +05:30
Manav Rathi
228bf49eb3 Prevent layout shift 2024-11-21 10:45:36 +05:30
Manav Rathi
eb55dad4a9 Trim 2024-11-21 10:32:49 +05:30
Manav Rathi
6e6c4ee72b Move 2024-11-21 10:28:00 +05:30
Manav Rathi
0fa7da8bb6 Move 2024-11-21 10:25:10 +05:30
Manav Rathi
8505383827 Localize 2024-11-21 10:12:53 +05:30
Manav Rathi
142a1bd684 Move 2024-11-21 09:40:58 +05:30
Manav Rathi
780da003cc Import 2024-11-21 09:33:36 +05:30
ashilkn
6c7d403d5d [mob][photos] Fix red screen error caused by the dialog asking for permission to allow opening album links in-app 2024-11-21 08:56:29 +05:30
Manav Rathi
5bdc754513 [web] General cleanup (#4122) 2024-11-21 08:33:01 +05:30
Manav Rathi
bef67b60b3 Use same check throughout 2024-11-21 08:25:27 +05:30
Manav Rathi
e4023f66f2 Allow running desktop and web apps simultaneously in dev mode 2024-11-21 08:24:04 +05:30
Manav Rathi
252587ffa5 Move 2024-11-21 07:54:18 +05:30
Manav Rathi
27f18b5936 Reuse 2024-11-21 07:33:39 +05:30
Manav Rathi
3dfdd0ec3c Rename 2024-11-21 07:29:24 +05:30
Manav Rathi
3578ed1eef Merge 2024-11-21 06:53:24 +05:30
Manav Rathi
aa3c212b26 Move 2024-11-21 06:33:47 +05:30
Simon Dubrulle
8cef4a14b1 [mobile][photos] Extracted hardcoded english strings + improved translations documentation + fixed malformed string that is using placeholder 2024-11-20 22:18:00 +01:00
Ashil
e7c3c6d9de [mob][photos] Fix blank screen coming up right after freeing up space when deleting in batches (#4113) 2024-11-20 22:27:08 +05:30
ashilkn
1db6c99b28 [mob][photos] Handle deep link from public album by opening the album in app 2024-11-20 21:10:02 +05:30
ashilkn
cda749ddfd [mob][photos] Remove stale code 2024-11-20 20:07:32 +05:30
Manav Rathi
328c27b676 [web] Forward some methods via the new crypto worker interface (#4114) 2024-11-20 19:12:42 +05:30
Manav Rathi
165ffabdcb Bypass 2024-11-20 19:03:10 +05:30
Manav Rathi
70a5274eea Reduce concepts, & avoid naming two things as EncryptedFile 2024-11-20 18:58:00 +05:30
Manav Rathi
d05dd416ca Fwd 2024-11-20 18:36:32 +05:30
ashilkn
492016ae36 [mob][photos] Fix blank screen coming up right after freeing up space when deleting in batches 2024-11-20 18:33:09 +05:30
Manav Rathi
2884c0aedf Fwd 2024-11-20 18:27:56 +05:30
Manav Rathi
91e45fe64a Restore thumb 2024-11-20 18:16:56 +05:30
Neeraj Gupta
5590f72b12 [mob]Support for editing name/birthday for person 2024-11-20 16:41:31 +05:30
Manav Rathi
040c893107 [web] Non-functional crypto layer ontology tweaks (#4111)
This PR reworks the names etc, and how the parameters and names fit in
the ontology of our crypto layers as part of our long term improvements
to the crypto layering, but doesn't change _any_ implementation
specifics.
2024-11-20 16:38:13 +05:30
Manav Rathi
045f367012 Tweak outline 2024-11-20 16:20:29 +05:30
Manav Rathi
105f750c95 Rework decryption 2024-11-20 16:16:04 +05:30
Manav Rathi
7f80ef1879 Rework 2024-11-20 15:03:01 +05:30
Neeraj Gupta
943e79464a Lint fixes 2024-11-20 14:41:19 +05:30
Neeraj Gupta
f38ee6369f [mob[ Added doc for mobile translations + added 2 new source string… (#4040)
This is my first contribution and I wanted to start with something
'simple'. My goal is to further contribute to the translation of Ente
photos. I am trying to understand that process which is not yet entirely
clear to me, especially when it comes to which files must be (or do not
need to be) generated.

## Description
As a first (small) step, I have:
- created 2 new source strings ('collaboratorsSuccessfullyAdded' and
'viewersSuccessfullyAdded') that replace hardcoded text in the
"add_a_participant" page.
- Created draft of a documentation for translations on mobile app (based
on the doc for web app)

## Tests

Tested on my Pixel 6a

Built with :
- Flutter 3.24.3
- JDK 17.0.2
- Gradle 7.2

## Questions
- I have manually updated the `l10n.dart` file (using existing similar
strings ) but I guess it should be automatically generated from the
`intl_en.arb` file, correct? If so, is it something anyone can do and
can we add the step in the doc?
- Should the other languages be updated as well in that commit, or will
they only be updated via the Github Crowdin action ? Looking at the
existing PR, it seems like they might need to be updated as well in the
commit.
2024-11-20 14:19:10 +05:30
Manav Rathi
fac2b34045 Interim type 2024-11-20 13:38:59 +05:30
Vishnu Mohandas
c074ee0780 Fix auth icons (#4108) 2024-11-20 13:26:23 +05:30
vishnukvmd
e7b97c2407 Merge branch 'main' into fix-auth-icons 2024-11-20 13:20:15 +05:30
Manav Rathi
a40cf7d880 Doc 2024-11-20 13:18:49 +05:30
vishnukvmd
7bc2ecb3e8 v4.1.1 2024-11-20 13:17:19 +05:30
vishnukvmd
b12ecea496 Revert "Add new icons (#3776)"
This reverts commit a6e4f9e603.
2024-11-20 13:16:43 +05:30
vishnukvmd
746046ac11 Update simple-icons 2024-11-20 13:10:02 +05:30
Manav Rathi
76dca8e5f6 Rename 2024-11-20 13:02:52 +05:30
Manav Rathi
b21ab6779a Direct 2024-11-20 12:47:17 +05:30
Vishnu Mohandas
3c5f6dd510 [docs] Document the threat model for app lock 2024-11-20 11:50:47 +05:30
Manav Rathi
2515ad0640 [web] Post eslint migration cleanup (#4106)
More needs to be done, but gradually.
2024-11-20 11:31:39 +05:30
Manav Rathi
510f94fc51 lf 2024-11-20 11:21:49 +05:30
Manav Rathi
fb7f64bd35 Tighten 2024-11-20 11:15:26 +05:30
Manav Rathi
f3bfc8525b Fix 2024-11-20 10:32:22 +05:30
Manav Rathi
c6fd49bff5 Prune 2024-11-20 10:29:19 +05:30
Manav Rathi
0fca6728cd Fix 2024-11-20 10:25:34 +05:30
Manav Rathi
8f0efb41fe Auto fix 2024-11-20 10:22:21 +05:30
Manav Rathi
8272703a21 Auto fix 2024-11-20 10:20:28 +05:30
Manav Rathi
8f0ec55e54 Fix 2024-11-20 10:18:50 +05:30
Manav Rathi
ebe0292cb4 Prune 2024-11-20 10:14:30 +05:30
Manav Rathi
132e509589 Apply rec 2024-11-20 10:09:56 +05:30
Manav Rathi
ba8ccbf065 Prune 2024-11-20 10:08:41 +05:30
Manav Rathi
f5512d3cd8 Apply autofixes prefer-regexp-exec 2024-11-20 10:07:42 +05:30
Manav Rathi
3b0544d779 Prune 2024-11-20 10:05:54 +05:30
Manav Rathi
a370188504 Fix awaited returns 2024-11-20 10:04:27 +05:30
Manav Rathi
07b1709308 Prune 2024-11-20 10:01:46 +05:30
Manav Rathi
4e5c99aafe Prune 2024-11-20 10:00:52 +05:30
Manav Rathi
fdf0e3f0ad Fix 2024-11-20 09:53:46 +05:30
Manav Rathi
98bfb8b5f5 This shouldn't be named useFoo, leaving that refactoring for later 2024-11-20 09:47:14 +05:30
Manav Rathi
cd6c3d9158 Prune 2024-11-20 09:45:57 +05:30
Manav Rathi
6533883eaa Prune 2024-11-20 09:43:50 +05:30
Manav Rathi
6fe4201eb8 Prune 2024-11-20 09:42:37 +05:30
Manav Rathi
09f76599b2 Prune 2024-11-20 09:39:57 +05:30
Manav Rathi
04a8bd6209 Apply lints 2024-11-20 09:38:35 +05:30
Manav Rathi
3d3ee1bb6f Apply lints 2024-11-20 09:36:04 +05:30
Manav Rathi
af82ef194d Not awaiting promises to retain existing behavior 2024-11-20 09:32:27 +05:30
Manav Rathi
1ddd143b2e Context 2024-11-20 09:19:56 +05:30
Manav Rathi
1ec67c6baf Prune 2024-11-20 09:07:20 +05:30
Manav Rathi
80146522ad Start fixing 2024-11-20 08:28:17 +05:30
Manav Rathi
3dd136bdf3 Tweaks 2024-11-20 08:19:46 +05:30
Manav Rathi
f69832ea16 Fix updated rule 2024-11-20 08:13:39 +05:30
Manav Rathi
e55181a9be Bring back the rest that are needed 2024-11-20 08:07:04 +05:30
Manav Rathi
8f43f27fcf Tweak ignores 2024-11-20 08:03:56 +05:30
Manav Rathi
916b56fa65 The files filter has a big impact on speed 2024-11-20 07:59:57 +05:30
Manav Rathi
c211a829f8 Bring back overrides 2024-11-20 07:56:54 +05:30
Manav Rathi
89b90c9332 Fix overwriting 2024-11-20 07:53:02 +05:30
Manav Rathi
7c2b8422a8 Dot's no longer needed
From docs:

> If you are using a flat configuration file(eslint.config.js), you can also omit the file arguments and ESLint will use .
2024-11-20 07:45:25 +05:30
Manav Rathi
2daca31499 [web] ESLint 8 => 9 (#4097)
This does the bulk of the migration. Will migrate the source to the new
rules in smaller subsequent PRs.
2024-11-19 20:14:40 +05:30
ashilkn
0a6e1a5730 [mob][photos] Configure clicking on albums.ente.sh links to open up the app on iOS 2024-11-19 20:11:44 +05:30
Manav Rathi
886a0ddb25 Update 2024-11-19 20:10:24 +05:30
Manav Rathi
9e2a70e469 tsc on build-config 2024-11-19 20:04:52 +05:30
Manav Rathi
e668c86185 Fix 2024-11-19 19:59:17 +05:30
Manav Rathi
2bda469176 Swap 2024-11-19 19:52:48 +05:30
Manav Rathi
91ddce1425 Fix 2024-11-19 19:49:42 +05:30
Manav Rathi
5c6784c549 Swap 2024-11-19 19:47:28 +05:30
Manav Rathi
01f1172382 Swap 2024-11-19 19:46:37 +05:30
Manav Rathi
87ac2360eb Swap 2024-11-19 19:44:24 +05:30
Manav Rathi
31b50852b6 Swap 2024-11-19 19:39:59 +05:30
Manav Rathi
c506eec544 Fix 2024-11-19 19:38:42 +05:30
Manav Rathi
938679922c Swap 2024-11-19 19:35:14 +05:30
Manav Rathi
1aac1ae3c3 Fix for now 2024-11-19 19:33:33 +05:30
Manav Rathi
a3586fed7e Swap 2024-11-19 19:32:52 +05:30
Manav Rathi
097b90eeda Get it to run 2024-11-19 19:31:33 +05:30
Manav Rathi
83adb94fc9 Swap 2024-11-19 19:29:52 +05:30
Manav Rathi
e6cbd75a52 Fix as per new rules 2024-11-19 19:28:04 +05:30
Manav Rathi
02c9f9f615 Swap 2024-11-19 19:25:18 +05:30
Manav Rathi
453c825cc6 Autofixer no-duplicate-type-constituents 2024-11-19 19:22:25 +05:30
Manav Rathi
ea19cd08c6 Swap 2024-11-19 19:20:31 +05:30
Manav Rathi
4a3260f627 Auto fixer for new lint rule 2024-11-19 19:19:31 +05:30
Manav Rathi
0271e53c26 Swap 2024-11-19 19:15:07 +05:30
Manav Rathi
1b772b644a Move to config 2024-11-19 19:14:12 +05:30
Manav Rathi
2bde3fb0d7 Squash 2024-11-19 19:12:22 +05:30
Manav Rathi
db5049b801 Swap 2024-11-19 19:06:17 +05:30
Manav Rathi
32cd241982 Merge 2024-11-19 19:02:30 +05:30
Manav Rathi
0338313f73 rr 2024-11-19 19:00:10 +05:30
Manav Rathi
0f93c48e10 Scope 2024-11-19 18:57:40 +05:30
Manav Rathi
dbfb5e5da3 hp 2024-11-19 18:49:40 +05:30
Manav Rathi
5209562bba rv 2024-11-19 18:47:24 +05:30
Manav Rathi
69d4e632f4 rp 2024-11-19 18:40:49 +05:30
Manav Rathi
b5be13df2c Cleanup 2024-11-19 18:27:24 +05:30
Manav Rathi
ebcabe5bfe Restore rules 2024-11-19 18:25:41 +05:30
Manav Rathi
41cdb73382 Upd 2024-11-19 18:22:23 +05:30
Manav Rathi
da71a34f75 TC 2024-11-19 18:15:51 +05:30
Neeraj Gupta
b0b527d2ea [mob] Clean up 2024-11-19 18:12:58 +05:30
Manav Rathi
2bdf85403b Direct 2024-11-19 18:09:47 +05:30
Manav Rathi
56b72bd55b Chain 2024-11-19 18:05:45 +05:30
Manav Rathi
dbeb95d438 wip checkpoint 2024-11-19 17:57:59 +05:30
Neeraj Gupta
572f2aff88 [mob] Hide merge section if no suggestion 2024-11-19 17:55:41 +05:30
Neeraj Gupta
a2d022f751 [mob] UI Changes 2024-11-19 17:53:23 +05:30
Manav Rathi
143d346ed4 eslint migration wip checkpoint 2024-11-19 17:49:37 +05:30
Neeraj Gupta
7e7d53fbaf [mob] Rename icons and action name for people bar 2024-11-19 17:22:20 +05:30
Laurens Priem
29b2bd577c [mob][photos] Fix ConcurrentModificationError (#4095)
## Description

Fix ConcurrentModificationError
2024-11-19 17:01:42 +05:30
laurenspriem
55044b1818 [mob][photos] Fix ConcurrentModificationError 2024-11-19 17:00:09 +05:30
Neeraj Gupta
c25310059a Merge remote-tracking branch 'origin/main' into save_contact 2024-11-19 16:50:11 +05:30
Ashil
538967bda0 Update apple-app-site-association for opening public link album in-app. (#4093) 2024-11-19 14:27:39 +05:30
Ashil
f848f64dc5 Update apple-app-site-association for opening public link album in-app. 2024-11-19 14:09:33 +05:30
Laurens Priem
8b07db8a73 Ml sync fix (#4027)
## Description

Remotely safe faceIDs of a certain person that are rejected by the user.
2024-11-19 13:43:45 +05:30
Manav Rathi
f7aaa7a2c8 [web] Lint infrastructure cleanup - Part 1/x (#4092) 2024-11-19 13:10:36 +05:30
Manav Rathi
4536486daa Prep 2024-11-19 12:57:26 +05:30
Manav Rathi
dee8f8af6c Prune 2024-11-19 12:53:48 +05:30
Manav Rathi
cbf48df272 Inline base config 2024-11-19 12:44:45 +05:30
Manav Rathi
cda9f17bcb Inline 2024-11-19 12:36:23 +05:30
Manav Rathi
28d6a525db Swap 2024-11-19 12:32:54 +05:30
Manav Rathi
27c7221483 Swap 2024-11-19 12:28:42 +05:30
Manav Rathi
e2636edbb9 Swap 2024-11-19 12:25:14 +05:30
Manav Rathi
3a3f9fbd94 Swap to newer 2024-11-19 12:20:21 +05:30
simondubrulle
bdf1023612 Merge pull request #1 from simondubrulle/main
Synced with main
2024-11-19 07:31:20 +01:00
Neeraj Gupta
18cf3f2e60 [mob] Add new screen for save person 2024-11-19 11:53:06 +05:30
Neeraj Gupta
14adea59bf Use super 2024-11-19 10:57:40 +05:30
Neeraj Gupta
e204450f2a [server] Handle error in bonus reversal (#4089)
## Description

## Tests
2024-11-19 10:30:09 +05:30
Neeraj Gupta
05f5c7f439 [server] Wrap inside db transaction 2024-11-19 10:28:02 +05:30
Neeraj Gupta
641a73c101 [server] validate bonus reversal 2024-11-19 10:24:58 +05:30
Manav Rathi
bd33bec3e6 [desktop] Move out of labs (#4088)
Prep for next release.
2024-11-19 08:18:23 +05:30
Manav Rathi
68c230dae9 Fix scroll (partially)
We want the consent message to be scrollable. The current changes are a partial
solution, the navbar still shows through at times.
2024-11-19 08:13:11 +05:30
Manav Rathi
a2b9126c88 Rename 2024-11-19 06:34:24 +05:30
Manav Rathi
07600c6018 Inline consent contents 2024-11-18 20:23:57 +05:30
Manav Rathi
0024ee5b77 wip checkpoint 2024-11-18 20:10:48 +05:30
Manav Rathi
d5d97d3d6e Prep 2024-11-18 19:58:30 +05:30
Manav Rathi
e3e9febeb3 Always show people section btn on destkop 2024-11-18 19:02:14 +05:30
ashilkn
e7d6ea0f3a [mob][photos] Cancel subscription to linkStream in passkey page after use 2024-11-18 19:02:05 +05:30
Manav Rathi
ed5c4dfc7e Unlab 2024-11-18 18:58:48 +05:30
Manav Rathi
43d47f1c4c [web] Deprecate our home grown ensure (#4082)
ensure:

     Error: Required value was undefined

Built in undefined property access (note how the error message has more
info):

     TypeError: Cannot read properties of undefined (reading 'length')
2024-11-18 18:43:48 +05:30
Manav Rathi
ebbca2b609 Fin 2024-11-18 18:37:30 +05:30
Manav Rathi
ebd550505f Cont 2024-11-18 18:32:51 +05:30
Manav Rathi
24b9e629c1 Cont 2024-11-18 18:29:15 +05:30
ashilkn
a86b6dddd4 [mob][photos] Resolve merge conflicts and merge main 2024-11-18 18:24:05 +05:30
Manav Rathi
a261d1b3a2 Continue 17bcf21216 2024-11-18 18:17:57 +05:30
Manav Rathi
17bcf21216 Start deprecating ensure
ensure:
    Error: Required value was undefined

Built in undefined property access (note how the error message has more info):
    TypeError: Cannot read properties of undefined (reading 'length')
2024-11-18 18:01:44 +05:30
Manav Rathi
49f8f0aadd [web] Periodic dependency update (#4080) 2024-11-18 17:40:36 +05:30
Manav Rathi
6304af0b31 Other updates 2024-11-18 17:35:26 +05:30
Manav Rathi
ed2ad06515 Fix comlink init (after dep update) 2024-11-18 17:33:28 +05:30
Manav Rathi
daee8fb4f6 Update deps 2024-11-18 16:56:15 +05:30
Manav Rathi
9b8851e007 [desktop] Support rejected faces in clusters synced with remote (#4051)
Sibling of https://github.com/ente-io/ente/pull/4027
2024-11-18 15:50:45 +05:30
Manav Rathi
c120ab0596 assigned and rejected should not intersect 2024-11-18 15:47:41 +05:30
Manav Rathi
038f776dec [web] Add workaround for black grid lines when zooming onto images in Chrome (#4076)
Fixes https://github.com/ente-io/ente/issues/4067
2024-11-18 14:22:59 +05:30
Manav Rathi
77844f802c [web] Add workaround for black grid lines when zooming onto images in Chrome
Fixes https://github.com/ente-io/ente/issues/4067
2024-11-18 14:19:25 +05:30
rippleFCL
9401c9f0e1 [cli] Update Ente CLI ENTE_CLI_SECRETS_PATH docs (#4047)
Co-authored-by: seeg <dev@charlie.fyi>
2024-11-18 14:15:43 +05:30
Ashil
cdb00ed06b [mob][photos] Faces UI enhancement (#4073) 2024-11-18 14:14:40 +05:30
Nugraha Yoga
05b88bb831 [mob] Fix market URI on mobile (#4054)
## Description
This PR fix typos in the market URI that resulted in 404 page on android
market.

![image](https://github.com/user-attachments/assets/f91669f0-cace-4f93-8a55-202adda4c164)
2024-11-18 14:14:18 +05:30
Aaron
34bce7c1d3 [auth][l10n]: Add Catalan translation (#4052) 2024-11-18 14:14:08 +05:30
Nikunj Kumar Nakum
78871e2843 Added Bluesky logo (#4061)
## Description
added bluesky logo
## Tests
2024-11-18 14:11:26 +05:30
Neeraj Gupta
7c3ff50b7f [mobile] New translations (#4069)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-11-18 14:09:35 +05:30
Neeraj Gupta
c4ad530bc1 [auth] New translations (#4070)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-11-18 14:07:49 +05:30
Manav Rathi
7acb76fda8 [desktop] Dependency updates (#4075) 2024-11-18 13:57:07 +05:30
Manav Rathi
c37f6d2904 [desktop] Dependency updates 2024-11-18 13:53:27 +05:30
Manav Rathi
e7a5f51a37 [web] New translations (#4068)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-18 13:35:40 +05:30
ashilkn
f42ae367dc [mob][photos] Fix loading and error state of 'all' screen of people section 2024-11-18 11:01:11 +05:30
ashilkn
4f86ca9415 Merge branch 'main' into faces_UI_enhancement 2024-11-18 10:51:04 +05:30
ashilkn
47b668a82a [mob][photos] Minor animation tweaks: 2024-11-18 10:48:46 +05:30
Neeraj Gupta
72d09bec50 [auth] Implement Custom Sorting (#4072)
## Description
This pull request introduces functionality to enable custom sorting for
TOTP codes in the app. Users can now drag and drop codes to rearrange
their order. The updated order is synced across all devices.
2024-11-18 10:31:53 +05:30
ashilkn
9de634ab8b [mob][photos] Use an app bar that occupies less space on UI in 'all' section of people section compared to the app bar used in 'all' screen of other sections 2024-11-18 10:31:05 +05:30
ashilkn
58887ce044 [mob][photos] Make 'all' screen of people section more similar to 'all' screen of other sections 2024-11-18 10:25:07 +05:30
ashilkn
ad4b5832ca [mob][photos] Fix appBar color change on scroll 2024-11-18 10:23:18 +05:30
ashilkn
8ba65c599a [mob][photos] Fix SafeArea widget breaking the item size logic on 'all' screen of people section 2024-11-18 10:00:01 +05:30
Crowdin Bot
665609d2b3 New Crowdin translations by GitHub Action 2024-11-18 01:17:41 +00:00
Crowdin Bot
60f5d91f45 New Crowdin translations by GitHub Action 2024-11-18 01:05:19 +00:00
Crowdin Bot
54d791e723 New Crowdin translations by GitHub Action 2024-11-18 00:36:55 +00:00
Vishnu Mohandas
e719cde4e3 Update admin.md 2024-11-17 22:03:23 +05:30
Aman Raj
01d182a496 [auth] added a new parameter to keep track of position of code 2024-11-16 21:20:46 +05:30
Aman Raj
20308e99e9 [auth] logic to cache codes and to save & update them 2024-11-16 21:19:04 +05:30
Aman Raj
2bc1ce9f92 [auth] added reorder code screen 2024-11-16 21:17:47 +05:30
Aman Raj
b69b6fc6a7 [auth] added edit icon to reorder codes 2024-11-16 20:49:02 +05:30
laurenspriem
12fc4816c7 [mob][photos] More refactor 2024-11-16 19:00:50 +05:30
laurenspriem
826383ccdf [mob][photos] Refactor face thumbnail generation 2024-11-16 18:43:24 +05:30
Manav Rathi
b5843cdf60 Update people after file upload 2024-11-16 14:49:47 +05:30
Manav Rathi
73d71834b9 Don't rely on count to track changes since we can now have rejns 2024-11-16 13:34:54 +05:30
Manav Rathi
95905a4187 Fix 2024-11-16 12:50:47 +05:30
Manav Rathi
1aae178179 Use 2024-11-16 09:56:05 +05:30
Manav Rathi
0e6705f8e1 Compute rejected clusters 2024-11-16 09:27:20 +05:30
Manav Rathi
8cf87acb7b Rework 2024-11-15 22:01:29 +05:30
Manav Rathi
f1ba5cfc43 Distinguish between suggestion reject and saved choice reject 2024-11-15 22:01:29 +05:30
Manav Rathi
f9fb65db41 Reject on unassign 2024-11-15 22:01:28 +05:30
Manav Rathi
5abd6468c7 Prune on positive suggestion accept 2024-11-15 22:01:28 +05:30
Manav Rathi
fb3c845759 Add cluster 2024-11-15 22:01:28 +05:30
Manav Rathi
f6eeb6abce Apply rejections to suggestion base clusters 2024-11-15 22:01:28 +05:30
Manav Rathi
c577ccd7e4 Filter out rejected face IDs when using remote cgroups 2024-11-15 22:01:28 +05:30
Manav Rathi
ddd13a88be Types 2024-11-15 22:01:28 +05:30
ashilkn
392ec34f25 [mob][photos] Remove hero animation from People section because when it's enabled, there is a UI glitch because of an issue in flutter
https://github.com/flutter/flutter/issues/47991
2024-11-15 20:57:15 +05:30
Prateek Sunal
e0ffde3f25 [mob][image-editor] dismiss page on save edits (#4036)
## Description

Previously saving edits would not close the page, this PR fixes that.

## Tests
2024-11-15 19:48:55 +05:30
Simon Dubrulle
a88586c437 Added (draft) doc for mobile translations + added 2 new source strings for "add_participant_page" 2024-11-15 13:40:29 +01:00
ashilkn
102929a5d6 [mob][photos] Decrease the chances of hero animation not working between faces in 'All' screen of People and People section when going back to search section from 'All' screen 2024-11-15 17:43:32 +05:30
Laurens Priem
c94feb0e40 Ml banner (#4039)
## Description

Add banner in home gallery for enabling ML. 

## Tests

Tested in debug mode on my Pixel 8.
2024-11-15 16:17:04 +05:30
laurenspriem
93986461dd [mob][photos] Copy changes 2024-11-15 16:06:11 +05:30
laurenspriem
4ce2d0a1e2 [mob][photos] ml section empty copy 2024-11-15 16:02:45 +05:30
laurenspriem
d4479a1a66 [mob][photos] Extract to string 2024-11-15 15:49:58 +05:30
laurenspriem
0f3e490699 [mob][photos] Don't keep showing the banner 2024-11-15 15:45:23 +05:30
laurenspriem
8a7e11e4af [mob][photos] Enable ml banner 2024-11-15 15:37:35 +05:30
ashilkn
27d5ef2bc0 [mob][photos] Fix alignment of faces in People section 2024-11-15 15:31:53 +05:30
laurenspriem
8d2288fbb4 [mob][photos] super key 2024-11-15 15:22:27 +05:30
Neeraj Gupta
179e586671 [mob] Refactor 2024-11-15 15:18:29 +05:30
Neeraj Gupta
92f6d027db [mob] Clean up 2024-11-15 15:13:23 +05:30
ashilkn
39252122ef [mob][photos] Show all faces in 'All' section of faces 2024-11-15 13:35:41 +05:30
Vishnu Mohandas
3c3c66ee8b [server] Update constraints for adding BF deal by support (#4038) 2024-11-15 13:32:01 +05:30
vishnukvmd
fe59e0ae65 [server] Update constraints for adding BF deal by support 2024-11-15 13:24:22 +05:30
ashilkn
184323429a [mob][photos] Create new 'All' page for people section 2024-11-15 13:22:29 +05:30
Manav Rathi
80710d29c4 [web] Retain original's file creation time on edits (#4037) 2024-11-15 10:38:57 +05:30
Manav Rathi
057bd3a4d2 Retain more info
Also invent a new scheme for passing around this data instead of piggy backing
on the JSON route, since the JSON route has other complications (e.g. it strips
off the "-edited" prefix) that we'd anyways would've needed to workaround.
2024-11-15 10:31:16 +05:30
Manav Rathi
708109f5e4 [web] Retain original's file creation time on edits 2024-11-15 09:10:28 +05:30
Prateek Sunal
120053f61d fix: dismiss image editor on save edits 2024-11-15 02:24:13 +05:30
Manav Rathi
e645081b12 [web] Show files that are archived in two ways in the archive section (#4035) 2024-11-14 22:14:13 +05:30
Manav Rathi
ba314455e2 [web] Show files that are archived in two ways in the archive section 2024-11-14 22:06:34 +05:30
tigattack
a5480025e9 Create custom icon for authentik (#4029)
* Adds a custom icon for [authentik](https://goauthentik.io/).
* Fixes minor formatting issues in `custom-icons.json`.
2024-11-14 17:31:49 +05:30
ashilkn
e9923fbf44 [mob][photos] Change UI of PersonSearchExample widget 2024-11-14 17:07:38 +05:30
Braky
916ae34bac Add three new icons (#4011)
Includes custom icons for

- Microsoft 365
- Raindrop.io
- WEB.DE
2024-11-14 16:54:01 +05:30
Neeraj Gupta
dfc6358314 [staff] Suraface error as alert & send token via header (#4033)
## Description

## Tests
2024-11-14 16:53:47 +05:30
Neeraj Gupta
ce61965ed6 [cli] Don't perform CLI secret initialisation unless needed (#4028)
## Description

Calling `GetOrCreateClISecret()` can cause issues in some unattended
scenarios.

I'm creating a Brew formula for ente CLI with the following test:

```
  test do
    assert_match "Version #{version}", shell_output("#{bin}/ente version")
  end
```

When running `brew test` for the formula, ente would fail with the
following error: `2024/11/13 11:49:56 error setting password in keyring:
exit status 154`

And I would see this pop-up:


![image](https://github.com/user-attachments/assets/ccd64b0d-1cb8-469c-9c16-be1b944d3b72)
2024-11-14 16:18:01 +05:30
Neeraj Gupta
9f9567817d [staff]Suraface error as alert & send token via header 2024-11-14 16:15:52 +05:30
Neeraj Gupta
f2210fbbae [staff] Surface error as dialog 2024-11-14 16:01:38 +05:30
Neeraj Gupta
0c3909b2d3 [staff] Fix disable 2FA (#4032)
## Description

## Tests
2024-11-14 15:11:43 +05:30
Neeraj Gupta
eb949bcad9 [staff] Lint fix 2024-11-14 15:07:24 +05:30
Neeraj Gupta
a1f0c1024b [staff] Fix disable 2FA 2024-11-14 14:59:44 +05:30
Neeraj Gupta
3f6f031cfe Merge branch 'main' into save_contact 2024-11-14 11:55:50 +05:30
Manav Rathi
3d0cc31816 [web] Reduce use of exceptions for control flow (#4031) 2024-11-14 10:27:09 +05:30
Manav Rathi
65a2b5aeeb LF 2024-11-14 10:19:14 +05:30
Manav Rathi
d8706580c3 Inline 2024-11-14 10:15:22 +05:30
Manav Rathi
548724ae0a Remove ad-hoc retry
If this is needed, will add it back with a comment explaining why the workaround
was needed.
2024-11-14 10:07:57 +05:30
Manav Rathi
54b4c01f51 Don't use exceptions for control flow 2024-11-14 09:59:19 +05:30
Manav Rathi
86f859aaca Don't use exceptions for control flow 2024-11-14 09:49:47 +05:30
Manav Rathi
f749f9de65 Unused and inline 2024-11-14 07:55:49 +05:30
Manav Rathi
805dfdc825 Unused 2024-11-13 21:21:04 +05:30
Manav Rathi
cce3063cf1 Inline 2024-11-13 21:09:55 +05:30
Manav Rathi
2910a8ac39 Inline 2024-11-13 21:04:21 +05:30
Manav Rathi
dbf877b9bb Inline 2024-11-13 21:01:45 +05:30
tigattack
cfae8523a1 [cli] Don't perform CLI secret initialisation when not needed
Calling `GetOrCreateClISecret()` can cause issues in some unattended scenarios.
2024-11-13 12:22:08 +00:00
Laurens Priem
b8981be2e6 [mob][photos] Copy change for model download (#4026)
## Description

Copy change to avoid giving the impression that models keep getting
downloaded.
2024-11-13 16:55:15 +05:30
Manav Rathi
cbc2a8f63c Inline 2024-11-13 16:43:10 +05:30
laurenspriem
f1ca5ccbd0 [mob][photos] Copy change for model download 2024-11-13 16:38:17 +05:30
laurenspriem
3d6106c1c1 [mob][photos] Add empty check 2024-11-13 16:06:50 +05:30
Manav Rathi
fcfc6972d1 [web] Fix search when an album only has symlinks (#4025)
The uniquification would prevent albums that only contains photos that
are
already present in another album from appearing in search results.
2024-11-13 15:57:07 +05:30
Manav Rathi
0c820a6ec4 [web] Fix search when an album only has symlinks
The uniquification would prevent albums that only contains photos that are
already present in another album from appearing in search results.
2024-11-13 15:54:12 +05:30
laurenspriem
1ed03c5942 [mob][photos] Safe removed clusters in rejected faces 2024-11-13 15:45:59 +05:30
Manav Rathi
fab883c49a [server] Add validation for object_keys (#4022)
## Description

## Tests
2024-11-13 15:24:18 +05:30
laurenspriem
822aa7fcd4 [mob][photos] Make sure user can add back rejected faces 2024-11-13 14:38:51 +05:30
Neeraj Gupta
bd53eaec28 [server] Add validation for object_keys 2024-11-13 12:04:55 +05:30
Neeraj Gupta
c2380de406 [mob] Clean up multipart upload on put or update error (#4021)
## Description

## Tests
2024-11-13 12:01:23 +05:30
Neeraj Gupta
3d8bdb751c [mob] Handle 401 during multipart failure (#4015)
## Description

## Tests
2024-11-13 12:00:47 +05:30
laurenspriem
4a495e5806 [mob][photos] Make other clustering methods private 2024-11-13 11:22:38 +05:30
laurenspriem
5d99a7c757 [mob][photos] Dont recluster rejected face to cluster mapping 2024-11-13 11:21:43 +05:30
Neeraj Gupta
ff218c3e4d [mob] Clean up multipart upload on put or update error 2024-11-13 11:16:19 +05:30
Manav Rathi
4b99b1c20c [web] General refactoring - Uploads UI - Part x/x (#4020) 2024-11-13 09:28:46 +05:30
Manav Rathi
e747494ef1 Tweak 2024-11-13 07:28:23 +05:30
Manav Rathi
fc114c7d92 Inline fin 2024-11-13 07:12:45 +05:30
Manav Rathi
3e94ea8f81 Tweak 2024-11-13 07:09:57 +05:30
Manav Rathi
b7c81656a3 Inline 2024-11-13 07:01:13 +05:30
Manav Rathi
b3d2846b2f Inline 2024-11-13 06:56:19 +05:30
Manav Rathi
0794f570a8 Inline 1 2024-11-13 06:43:21 +05:30
Manav Rathi
604c4462fe Tweaks 2024-11-13 06:31:19 +05:30
laurenspriem
4c222f2cd7 [mob][photos] Get rid of remotely rejected faces from local person 2024-11-12 21:36:49 +05:30
Manav Rathi
c96b510997 Inline 2024-11-12 19:34:39 +05:30
Manav Rathi
f2e3daaa12 [web] New translations (#4018)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-12 19:17:15 +05:30
Crowdin Bot
6f03b72bf2 New Crowdin translations by GitHub Action 2024-11-12 13:46:09 +00:00
Manav Rathi
217c749970 [web] General refactoring - Uploads (#4017) 2024-11-12 19:15:21 +05:30
Manav Rathi
67cd42fd23 Prune unused phase
Removed in 6aed8d3002
2024-11-12 19:10:06 +05:30
Manav Rathi
57d6fb3bc9 Ref 2024-11-12 19:01:28 +05:30
Manav Rathi
8d00796a32 Rename and use same convention 2024-11-12 18:24:49 +05:30
Manav Rathi
df19e12ab8 Last 2024-11-12 18:18:10 +05:30
Manav Rathi
5461bd112f Swap 2024-11-12 18:13:51 +05:30
Manav Rathi
bbd5aa6b3e Align divider with main view divider
+label tr
2024-11-12 17:29:24 +05:30
Manav Rathi
a52afe509c Conv 2024-11-12 17:25:49 +05:30
Manav Rathi
e5dee17127 Conv 2024-11-12 17:12:33 +05:30
Manav Rathi
55fdcc8446 Inline into last call site 2024-11-12 17:03:33 +05:30
Manav Rathi
d4cae11a9b Remove unnecessary wrapper 2024-11-12 16:52:20 +05:30
Manav Rathi
3b84f76de8 Sync sizes 2024-11-12 16:47:08 +05:30
Manav Rathi
61bc7c95b2 Tweak spacing 2024-11-12 16:21:42 +05:30
Manav Rathi
4c12fb15b1 Icon name consistency 2024-11-12 16:06:11 +05:30
laurenspriem
b9c63426fc [mob][photos] Assign not person feedback for completely rejected remote cluster 2024-11-12 14:54:25 +05:30
Neeraj Gupta
306978291b [mob] Handle 401 during multipart failure 2024-11-12 14:28:00 +05:30
Manav Rathi
2421d69fd0 [web] Enable Portuguese translations (#4014) 2024-11-12 13:07:29 +05:30
Neeraj Gupta
b0674cd5f3 [server] Fix BF handling for bonus calculation (#4012)
## Description

## Tests
2024-11-12 11:00:33 +05:30
Neeraj Gupta
13053decf0 [server] Fix BF handling for bonus calculation 2024-11-12 11:00:03 +05:30
Manav Rathi
36ed4464c1 [web] Enable Portuguese translations 2024-11-12 10:50:48 +05:30
Manav Rathi
f20672e4e2 [web] New translations (#4007)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-12 10:44:11 +05:30
Crowdin Bot
799229531c New Crowdin translations by GitHub Action 2024-11-12 05:09:59 +00:00
laurenspriem
015790874e [mob][photos] Pull rejected faces for person from remote 2024-11-12 09:26:04 +05:30
laurenspriem
908a55bb20 [mob][photos] Push not person feedback 2024-11-11 15:42:24 +05:30
Neeraj Gupta
81ea2b8059 An attempt to fix the Custom Icon for Coinbase (#3995)
The icon currently only displays as a small black circle in the app.
I've replaced the SVG file entirely, and hopefully that'll fix the
issue.
2024-11-11 11:59:37 +05:30
Neeraj Gupta
73fcd25d22 [mobile] New translations (#4008)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-11-11 11:55:59 +05:30
Neeraj Gupta
8628597450 [auth] New translations (#4009)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-11-11 11:55:38 +05:30
Crowdin Bot
8e28498b9b New Crowdin translations by GitHub Action 2024-11-11 01:17:14 +00:00
Crowdin Bot
0b5f9a4b18 New Crowdin translations by GitHub Action 2024-11-11 01:05:17 +00:00
Manav Rathi
7fd708bec7 [web] Rearrange files (#4001)
(mostly) non-functional rearrangement of code, with a long term aim at a
better split of photos and public albums code.
2024-11-09 18:59:10 +05:30
Manav Rathi
03f5b78872 Inline 2024-11-09 18:45:11 +05:30
Manav Rathi
d641b21edf Move 2024-11-09 18:39:58 +05:30
Manav Rathi
8a4df07082 Inline 2024-11-09 18:16:26 +05:30
Manav Rathi
b174d5f725 Fix calculation 2024-11-09 18:11:49 +05:30
Manav Rathi
d9256eaf95 Inline 2024-11-09 18:06:32 +05:30
Manav Rathi
7727ed8b6e Inline 2024-11-09 18:02:01 +05:30
Manav Rathi
fab7ecb980 Inline 2024-11-09 17:45:06 +05:30
Manav Rathi
5dfd3f3540 Unused 2024-11-09 17:39:37 +05:30
Manav Rathi
9ac9842e53 Inline 2024-11-09 17:38:23 +05:30
Manav Rathi
52a98c4973 Inline 2024-11-09 17:33:13 +05:30
Manav Rathi
5de432839f Inline 2024-11-09 17:29:26 +05:30
Manav Rathi
c0e93244f0 Inline 2024-11-09 17:24:53 +05:30
Manav Rathi
dc07bd9c74 Inline 2024-11-09 17:17:45 +05:30
Manav Rathi
c6bdd4bd8f Inline 2024-11-09 17:06:51 +05:30
Manav Rathi
a594e4fa83 Unused 2024-11-09 16:53:55 +05:30
Manav Rathi
76b50fab68 Inline 2024-11-09 16:53:19 +05:30
Manav Rathi
f6bc2a58e5 Inline 2024-11-09 16:52:01 +05:30
Manav Rathi
15ae4a47a6 Inline 2024-11-09 16:46:12 +05:30
Manav Rathi
b43b01433f Inline 2024-11-09 16:44:23 +05:30
Manav Rathi
423ef09aa0 Inline 2024-11-09 16:41:57 +05:30
Manav Rathi
f79cc7cd8f Inline 2024-11-09 16:40:15 +05:30
Manav Rathi
042e605c51 Tweak 2024-11-09 16:36:03 +05:30
Manav Rathi
6265a56128 Inline 2024-11-09 16:34:28 +05:30
Manav Rathi
6b4c514010 Tweak 2024-11-09 16:32:00 +05:30
Manav Rathi
466c9276af Inline 2024-11-09 16:30:59 +05:30
Manav Rathi
c4e54d1a6d Move 2024-11-09 16:29:15 +05:30
Manav Rathi
071f7ad658 Empty 2024-11-09 16:25:57 +05:30
Manav Rathi
83de44f857 Fix warnings 2024-11-09 16:08:18 +05:30
Manav Rathi
de3e4a8e8c Ignore self clicks 2024-11-09 15:54:46 +05:30
Manav Rathi
2a205d6b7b Tweak 2024-11-09 15:43:34 +05:30
Manav Rathi
b2914e3fae Move 2024-11-09 15:37:43 +05:30
Manav Rathi
0fe9f4db4b Tweak 2024-11-09 15:35:13 +05:30
Manav Rathi
cebb213eaa Tweak 2024-11-09 15:13:48 +05:30
Manav Rathi
0c4f248041 Inline 2024-11-09 15:05:24 +05:30
Manav Rathi
ae29519b00 Unused 2024-11-09 15:01:40 +05:30
Manav Rathi
1ebf1443cf [web] New translations (#3999)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-09 14:48:50 +05:30
Crowdin Bot
a471dce8a8 New Crowdin translations by GitHub Action 2024-11-09 09:18:28 +00:00
Manav Rathi
23c8bf1086 [web] Dialog related refactoring (#3998) 2024-11-09 14:44:50 +05:30
Manav Rathi
702f4e5b5a Fix casing (and lint) 2024-11-09 14:40:01 +05:30
Manav Rathi
d401f008ca Fix path 2024-11-09 14:34:03 +05:30
Manav Rathi
eec9de0907 Move 2024-11-09 14:30:01 +05:30
Manav Rathi
85fa95a42f Rename 2024-11-09 14:28:56 +05:30
Manav Rathi
60987c268f Remove unused 2024-11-09 14:26:08 +05:30
Manav Rathi
9c581d19b7 Tweak 2024-11-09 14:07:10 +05:30
Manav Rathi
e350ac2076 Ref 2024-11-09 13:33:12 +05:30
Manav Rathi
039b77e979 Move 2024-11-09 13:22:26 +05:30
Manav Rathi
1fe5864143 Better fullwidthing on mobile sized screens 2024-11-09 13:13:05 +05:30
Manav Rathi
6b85687f72 Ref 2024-11-09 12:59:17 +05:30
Manav Rathi
653bab956a Move 2024-11-09 12:47:24 +05:30
Manav Rathi
522d8f5ba7 Conv 2024-11-09 12:39:52 +05:30
Manav Rathi
0e2e3c14ec [web] New translations (#3997)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-09 12:25:27 +05:30
Crowdin Bot
5d7f4dd9ed New Crowdin translations by GitHub Action 2024-11-09 06:53:26 +00:00
Manav Rathi
53c258d0a8 [web] Migrate off deprecated dialog component (#3996) 2024-11-09 12:22:46 +05:30
Manav Rathi
ce274e0fc3 Rename 2024-11-09 12:17:51 +05:30
Manav Rathi
e2ce301885 Ref fin 2024-11-09 11:54:15 +05:30
NanoBunTV
e15e62f1a6 An attempt to fix the Custom Icon for Coinbase
The icon currently only displays as a small black circle in the app.
2024-11-09 00:22:31 -06:00
Vishnu Mohandas
ae89637cf9 [server] Send a notification email on BF deal purchase (#3994)
<img width="634" alt="Screenshot 2024-11-09 at 11 13 38 AM"
src="https://github.com/user-attachments/assets/156d86ae-1bf3-411a-9dfb-f992d9e34abd">
2024-11-09 11:42:56 +05:30
Manav Rathi
cd879975d2 Ref wip 2024-11-09 11:39:32 +05:30
Manav Rathi
ae783693ae Tweak 2024-11-09 11:25:45 +05:30
vishnukvmd
f5549d4458 [server] Send a notification email on BF deal purchase 2024-11-09 11:13:14 +05:30
Manav Rathi
2ce1876db8 Inline 2024-11-09 11:10:33 +05:30
Manav Rathi
eea5a9592b Use normal dialog 2024-11-09 11:03:33 +05:30
Manav Rathi
f75b2904f4 [web] New translations (#3993)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-09 10:46:57 +05:30
Crowdin Bot
079f208a96 New Crowdin translations by GitHub Action 2024-11-09 05:15:59 +00:00
Manav Rathi
7fc3e35b01 [web] Make some error messages more precise and concise (#3992) 2024-11-09 10:45:17 +05:30
Manav Rathi
38c809857f [web] Make some error messages more precise and concise 2024-11-09 10:41:57 +05:30
Ashil
d25b1f7b65 [mob][photos] Concatenate strings more efficiently (#3985)
## Description

If number of iterations are high, concatenating a list of values to a
string using `str1 += str2` can block the UI thread.
Using `List.join()` is a much more efficient way to do this.
2024-11-09 09:34:49 +05:30
Neeraj Gupta
f7a3de78a3 [mob] Imporve remote face sync (#3990)
## Description

## Tests
2024-11-09 08:46:36 +05:30
Neeraj Gupta
d2788d66d4 [mob] Add logs 2024-11-09 08:44:59 +05:30
Neeraj Gupta
619476892a [mob] Update local feedback on remote data change 2024-11-09 08:41:03 +05:30
Neeraj Gupta
d769cfad55 [mob] Refactor 2024-11-09 08:27:52 +05:30
ashilkn
1e9188f510 [mob][photos] Replace string concatenation happening in loop using '+' with more efficient alternative of by using 'List.join(). If number of iterations are very large, using '+' for concatenation can block the UI thread' 2024-11-08 21:38:33 +05:30
Manav Rathi
daa87ef79b [web] New translations (#3984)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-08 20:29:45 +05:30
Crowdin Bot
86c4e92585 New Crowdin translations by GitHub Action 2024-11-08 14:58:02 +00:00
Manav Rathi
157746b45a [web] Translation cleanup (#3983)
...related to dialogs etc that were recently changed
2024-11-08 20:27:17 +05:30
Manav Rathi
5c1984f7df Move 2024-11-08 20:23:47 +05:30
Manav Rathi
43f72cb360 Casing 2024-11-08 20:21:49 +05:30
Manav Rathi
3ca7805d6a Rename 2024-11-08 20:14:07 +05:30
Manav Rathi
d3fdd23061 Rename 2024-11-08 20:11:31 +05:30
Manav Rathi
d3d6c7120c Remove unused and shorten 2024-11-08 20:06:06 +05:30
Manav Rathi
c66e8f6544 Unused 2024-11-08 20:00:44 +05:30
Manav Rathi
f623724a78 Rename and dedup 2024-11-08 20:00:22 +05:30
Manav Rathi
49e3c8cc1a Rename 2024-11-08 19:55:02 +05:30
Manav Rathi
a3864b9f91 Rename 2024-11-08 19:48:35 +05:30
Manav Rathi
a3fc11db1c Rename 2024-11-08 19:46:10 +05:30
Manav Rathi
26c1e289b9 Rename 2024-11-08 19:40:05 +05:30
Manav Rathi
f69934eb7a Rename 2024-11-08 19:37:39 +05:30
Manav Rathi
9999c05d25 Rename 2024-11-08 19:34:48 +05:30
Manav Rathi
1ef1079cc5 Fix the interpolation 2024-11-08 19:32:06 +05:30
Manav Rathi
672ee27b7d [web] New translations (#3981)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-08 19:30:20 +05:30
Crowdin Bot
e4f88f33ae New Crowdin translations by GitHub Action 2024-11-08 13:57:59 +00:00
Manav Rathi
75d44e2f71 [web] Convert all remaining alert related uses of the deprecated dialog API (#3980) 2024-11-08 19:26:11 +05:30
Manav Rathi
bf8e271088 Cleanup 2024-11-08 19:18:28 +05:30
ashilkn
214dcce6ad [mob][photos] Remove unused methods 2024-11-08 19:05:19 +05:30
Manav Rathi
52866bdc8e Support secondary 2024-11-08 18:59:12 +05:30
Manav Rathi
92f7ff3139 Swap 2024-11-08 18:41:53 +05:30
Manav Rathi
e25c245e0c Swap 2024-11-08 18:37:55 +05:30
Ashil
e6b06453a6 [mob][photos] Fix cast not working on android (Pair with PIN option) (#3979) 2024-11-08 18:35:17 +05:30
Manav Rathi
4ce5c34baa Swap 2024-11-08 18:34:28 +05:30
ashilkn
10f9638f24 [mob][photos] Chore 2024-11-08 18:30:29 +05:30
ashilkn
8965f1cd09 [mob][photos] Fix: Cast not working on android (Pair with PIN option) 2024-11-08 18:27:35 +05:30
Manav Rathi
47119bf94b Swap 2024-11-08 18:25:15 +05:30
Manav Rathi
5ee24729e3 Chain 2024-11-08 18:21:16 +05:30
Manav Rathi
37192af79d Swap 2024-11-08 18:13:26 +05:30
Manav Rathi
eeb83d8c12 Swap 2024-11-08 18:05:27 +05:30
Manav Rathi
07e25d982e Swap 2024-11-08 18:03:07 +05:30
Manav Rathi
d03cce5984 Swap 2024-11-08 17:59:45 +05:30
Vishnu Mohandas
a8b1299117 [server] Update constraints to allow for BF 2024 (#3978) 2024-11-08 17:57:31 +05:30
vishnukvmd
949c3c3c73 [server] Update constraints to allow for BF 2024 2024-11-08 17:45:16 +05:30
Vishnu Mohandas
4dfb73e3d9 [server] Black Friday 2024 (#3977) 2024-11-08 16:28:24 +05:30
vishnukvmd
a558da2706 [server] Black Friday 2024 2024-11-08 16:14:59 +05:30
Ashil
616a7959e9 [mob][photos] Hierarchical search (#3969)
### Description

Hierarchical Search with filter types
- Album
- Contact
- Face
- File type (Photos, Videos, Live Photos)
- Location 
- Magic (Semantic search filter)
- Only them (Filter by photos only containing selected faces)


https://github.com/user-attachments/assets/8312f0a7-7b1d-4e91-ab25-d89bf0cd6e46

Closes #943
2024-11-08 16:00:10 +05:30
Manav Rathi
5802881c4b Swap 2024-11-08 15:48:51 +05:30
Manav Rathi
90cbe994a7 Swap 2024-11-08 15:46:02 +05:30
Manav Rathi
784b4af576 Remove deprecated 2024-11-08 15:43:29 +05:30
Manav Rathi
0b92e0b437 Swap 2024-11-08 15:41:35 +05:30
Manav Rathi
427c560d3f Swap 2024-11-08 15:30:44 +05:30
Manav Rathi
eeb68588a0 Swap 2024-11-08 15:26:17 +05:30
Manav Rathi
892a836fca Swap 2024-11-08 15:21:23 +05:30
Manav Rathi
c4d502f494 GE 2024-11-08 14:52:41 +05:30
Manav Rathi
cdf761d46b Multiline titles 2024-11-08 14:45:38 +05:30
Manav Rathi
60774518b2 Swap 2024-11-08 14:41:57 +05:30
Manav Rathi
f15aa51bd6 Swap 2024-11-08 14:34:09 +05:30
Manav Rathi
96ceead110 Inline 2024-11-08 14:28:53 +05:30
Manav Rathi
d69ca844ac Empty unused 2024-11-08 14:24:25 +05:30
Manav Rathi
801bf16b92 Unused 2024-11-08 14:08:59 +05:30
Manav Rathi
71727048aa Move 2024-11-08 13:58:21 +05:30
Manav Rathi
cb18772ec9 [web] New translations (#3976)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-08 13:48:31 +05:30
Crowdin Bot
ccaba92832 New Crowdin translations by GitHub Action 2024-11-08 08:17:29 +00:00
Manav Rathi
db44cb9823 [web] Allow for proper translation instead of splicing together strings (#3975) 2024-11-08 13:46:42 +05:30
Manav Rathi
98eef0603f Allow for proper translation instead of splicing together strings 2024-11-08 13:38:57 +05:30
Manav Rathi
1334ce879e [web] New translations (#3974)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-08 12:33:26 +05:30
Crowdin Bot
bf012572b8 New Crowdin translations by GitHub Action 2024-11-08 07:02:43 +00:00
Manav Rathi
02be77de74 [web] Translations cleanup (#3973) 2024-11-08 12:31:55 +05:30
Manav Rathi
053a97ad8a Rename 2024-11-08 12:28:53 +05:30
Manav Rathi
8d70936251 Remove unused 2024-11-08 12:26:27 +05:30
Manav Rathi
84bd08bdf4 Rename 2024-11-08 12:24:54 +05:30
Manav Rathi
0dc6dbb7ec Rename 2024-11-08 12:23:27 +05:30
Manav Rathi
ae79c10322 Rename and move 2024-11-08 12:20:39 +05:30
Manav Rathi
efb319ba5e Rename 2024-11-08 12:18:40 +05:30
Manav Rathi
022d766564 Fix casing 2024-11-08 12:12:25 +05:30
Manav Rathi
d2d75291ee Rename 2024-11-08 12:11:10 +05:30
Manav Rathi
1cc39ff489 Rename 2024-11-08 12:08:48 +05:30
Manav Rathi
7b43d5731d Rename 2024-11-08 12:05:38 +05:30
Manav Rathi
5f26a0e5b7 Rename 2024-11-08 12:02:02 +05:30
Manav Rathi
4835780698 Rename 2024-11-08 11:54:57 +05:30
Manav Rathi
bd151523d1 [web] New translations (#3972)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-08 11:50:13 +05:30
Crowdin Bot
31bc5cd72d New Crowdin translations by GitHub Action 2024-11-08 06:19:15 +00:00
Manav Rathi
3169bcbc5b [web] Payments UI related refactoring (#3971)
* No major functional changes intended (some small fixes only)
* Main motivation was to consolidate the "user details" related state
2024-11-08 10:48:16 +05:30
Manav Rathi
6460fd25ab Fix 2024-11-08 10:25:11 +05:30
Manav Rathi
d743b4ab22 Fix import 2024-11-08 10:21:41 +05:30
Manav Rathi
a1320d89ed Remove unnecessary click handler 2024-11-08 10:11:11 +05:30
Manav Rathi
632bb931da Tweak spacing 2024-11-08 09:51:57 +05:30
Manav Rathi
5c2378604a Better indication of progress in the middle while the page load is shifting 2024-11-08 07:43:42 +05:30
Manav Rathi
71e0fc2dd9 Tweak spacing again 2024-11-08 07:36:32 +05:30
Manav Rathi
a34defed94 btn color 2024-11-08 07:29:02 +05:30
Manav Rathi
9b753d7a2f Tweak spacing 2024-11-08 07:22:37 +05:30
ashilkn
65131a15ef [mob][photos] Fix 2024-11-07 23:59:18 +05:30
ashilkn
25b26ec303 [mob][photos] Workaround for a UX issue 2024-11-07 23:31:48 +05:30
ashilkn
88440400c2 [mob][photos] Fix loading state not appearing when the first filter is added in hierarchical search 2024-11-07 23:29:24 +05:30
ashilkn
88f613187d Revert "[mob] Render people section in GridView (#3958)"
This reverts commit 7a99c8be63, reversing
changes made to 287d4b00e1.
2024-11-07 23:15:17 +05:30
ashilkn
b108785979 [mob][photos] Bump up to v0.9.58 2024-11-07 22:58:57 +05:30
ashilkn
899c1d7041 [mob][photos] Remove unnecessary check 2024-11-07 22:55:35 +05:30
ashilkn
219ff7d2e9 Revert "[mob][photos] Add option to make 'only them' filter work a little different only for testing, for feedback on which option is better"
This reverts commit ebae813ee3.
2024-11-07 22:34:09 +05:30
ashilkn
65e8ff4da8 [mob][photos] Resolve merge conflicts and merge main 2024-11-07 22:21:44 +05:30
ashilkn
9becee9a85 [mob][photos] Remove unnecessary clipping 2024-11-07 22:09:03 +05:30
ashilkn
52663ae218 [mob][photos] Add comment 2024-11-07 22:00:34 +05:30
ashilkn
c5aecaf501 [mob][photos] Remove unused method 2024-11-07 21:54:11 +05:30
ashilkn
655d9602e0 [mob][photos] Dispose all notifiers of SearchFilterDataProvider after use 2024-11-07 21:47:58 +05:30
ashilkn
b83b7ad295 [mob][photos] Use better names 2024-11-07 20:23:34 +05:30
ashilkn
ae3b784463 [mob][photos] Improvements on PeopleBanner shown in hierarchical search 2024-11-07 19:59:14 +05:30
Manav Rathi
578b4a6577 sessid is optional 2024-11-07 19:29:48 +05:30
Manav Rathi
33ec855b40 Ensure confirmation is visible 2024-11-07 19:18:05 +05:30
Manav Rathi
7385d665d2 Integrated handling 2024-11-07 19:02:40 +05:30
Manav Rathi
02364b95c0 Don't allow dialog to be closed during operations 2024-11-07 18:42:36 +05:30
ashilkn
93fd05818a [mob][photos] Show 'Add a name' banner if an unnamed cluster is applied in hierarchical search
If there are multiple applied unnamed clusters, the banner will be shown for the first one
2024-11-07 18:35:21 +05:30
Manav Rathi
0b1f6e84a3 Fix 2024-11-07 18:29:23 +05:30
Manav Rathi
c37c6fda95 Fix paths 2024-11-07 18:10:59 +05:30
Manav Rathi
a09c01ce6d Fix the circular zod object import deps 2024-11-07 18:07:01 +05:30
ashilkn
68fa429611 [mob][photos] Make PeopleBanner UI better and minimal 2024-11-07 18:07:00 +05:30
ashilkn
4b2a845fd0 [mob][photos] Give a more subtle shadow for PeopleBanner 2024-11-07 17:35:11 +05:30
Neeraj Gupta
d6a7626906 [mob] Prioritize fetch for already indexed files (#3967)
## Description
- The app will first fetch indexes for files that are already indexed
before performing local indexing.
- If local indexing is disabled, the app will only fetch indexes for
files already indexed on the server.
## Tests
2024-11-07 17:20:46 +05:30
NanoBunTV
68d835c779 Add Custom Icon for PebbleHost, Restream, and Terabit (#3964)
https://pebblehost.com

https://restream.io

https://terabit.io
2024-11-07 17:04:08 +05:30
Neeraj Gupta
fd24628f7a [mob] Only return indexed files if local indexing is disabled 2024-11-07 16:57:35 +05:30
Neeraj Gupta
19ccc5338f [mob] Skip deleting downloaded models 2024-11-07 16:56:23 +05:30
Neeraj Gupta
27f55b1756 [mob] clean up icon 2024-11-07 16:41:22 +05:30
Neeraj Gupta
214dcddb65 [mob] Prioritize fetch for already indexed files. 2024-11-07 16:18:33 +05:30
ashilkn
0815bfd7b7 [mob][photos] Use better name 2024-11-07 15:12:24 +05:30
Manav Rathi
6cc8f2b965 Mig 2024-11-07 15:03:12 +05:30
Manav Rathi
6f1de7e537 Inline 2024-11-07 15:01:00 +05:30
Manav Rathi
5fd0459237 Mig 2024-11-07 14:58:55 +05:30
Manav Rathi
7dd085c321 Migrate to new dialog 2024-11-07 14:56:33 +05:30
Neeraj Gupta
6edacd2f1d [mob] FDStatus: Store objectID and nonce 2024-11-07 14:53:24 +05:30
Manav Rathi
7bd3d754c7 mig 2024-11-07 14:45:58 +05:30
Neeraj Gupta
6d7044ee3e [server] refactor fd status API (#3966)
## Description

## Tests
2024-11-07 14:34:03 +05:30
Neeraj Gupta
ccc436be26 [server] refactor fd status API 2024-11-07 14:33:04 +05:30
Manav Rathi
03c37ae448 mig 2024-11-07 14:31:33 +05:30
Manav Rathi
c0cc6c35df Mig2 2024-11-07 14:28:37 +05:30
Manav Rathi
c879e8cb77 Migrate from deprecated methods 2024-11-07 14:24:03 +05:30
Manav Rathi
da3f3fbb57 fin 2024-11-07 14:09:24 +05:30
Manav Rathi
d481fa5cde m4 2024-11-07 13:58:05 +05:30
Manav Rathi
f575d428fe once over 2024-11-07 13:55:43 +05:30
Manav Rathi
32f53eb9f3 vis 2024-11-07 13:35:40 +05:30
Neeraj Gupta
f543f32df2 Merge branch 'main' into file_data_v2 2024-11-07 13:34:33 +05:30
Manav Rathi
3c5e20dd50 Tweak 2024-11-07 13:03:53 +05:30
Manav Rathi
33beb2824a flexier parsing 2024-11-07 12:30:04 +05:30
Manav Rathi
93edaed4fc sync local state 2024-11-07 12:03:13 +05:30
Manav Rathi
1f8ddb0c08 wip checkpoint 2024-11-07 11:54:32 +05:30
Neeraj Gupta
27188596af [mob][photos] UI tweaks on pricing page (#3962)
## Description

#### Before
<img
src="https://github.com/user-attachments/assets/b8436f93-1e73-4751-92dd-3996be5c45b6"
width="400" alt="pricing page before">

#### After
<img
src="https://github.com/user-attachments/assets/b72cc507-36b1-48ee-ae59-d9b0fc7841ab"
width="400" alt="pricing page after">
2024-11-07 11:23:53 +05:30
Manav Rathi
ec1b294425 wip checkpoint 2024-11-07 11:05:41 +05:30
Manav Rathi
9bea0c4aab leave 2024-11-07 10:53:57 +05:30
Manav Rathi
e468c61867 wip checkpoint 2024-11-07 10:45:09 +05:30
Manav Rathi
fa98bcc745 wip checkpoint 2024-11-07 10:05:27 +05:30
Manav Rathi
13e013eaa9 wip checkpoint 2024-11-07 09:57:43 +05:30
Manav Rathi
94db831266 Use 2024-11-07 09:38:17 +05:30
Manav Rathi
3c03bbac05 copy over 2024-11-07 09:30:54 +05:30
Neeraj Gupta
82c1987a6d [cli] Default to ENTE_CLI_CONFIG_DIR, fallback to ENTE_CLI_CONFIG_PAT… (#3961)
…H for compatibility

## Description

## Tests
2024-11-06 23:12:37 +05:30
ashilkn
f2e99d5efd [mob][photos] Keep the galleryType as GalleryType.peopleTag when an 'Only them' filter is applied when, the initial filter is a face filter so that the selection option are of the inital face filter's
Needed to write extra code to make it work for 'Only them' face since the current logic checks if inital filter is in applied list, and if yes keep the gallery type unchanged and if not, change gallery type to GalleryType.searchResults. Since an 'Only them' filter is not exactly the same as a Face filter, had to write more code to handle this case since the 'Only them' filter can have the inital Face filter in it
2024-11-06 22:03:40 +05:30
ashilkn
d355d4c1f0 [mob][photos] Fix null check operator used on null value exception right after adding name to a person 2024-11-06 21:39:14 +05:30
ashilkn
b4f192fac1 [mob][photos] Minor fix 2024-11-06 21:17:06 +05:30
ashilkn
042cbdeee7 [mob][photos] Refactor 2024-11-06 21:16:24 +05:30
Neeraj Gupta
8e1b6d32ee Added Custom Icon for Ko-fi (#3956)
https://ko-fi.com
2024-11-06 20:25:34 +05:30
ashilkn
ca3c7ae526 [mob][photos] UI tweaks on pricing page 2024-11-06 19:13:44 +05:30
Neeraj Gupta
8ff6ab6c04 [cli] Default to ENTE_CLI_CONFIG_DIR, fallback to ENTE_CLI_CONFIG_PATH for compatibility 2024-11-06 19:09:26 +05:30
Manav Rathi
384fcf4b38 Fix 2024-11-06 19:09:08 +05:30
ashilkn
84d7a37789 [mob][photos] Extract string and use workaround for avoiding having context as a long lived object 2024-11-06 18:57:30 +05:30
Manav Rathi
0a2f92fc86 Conv 2024-11-06 18:55:11 +05:30
Manav Rathi
2b91cbd0d2 Move 2024-11-06 18:53:12 +05:30
Manav Rathi
7cd54f4815 Global handling of in-flight requests during logout 2024-11-06 18:42:19 +05:30
ashilkn
6fa7e033d9 [mob][photos] Chore 2024-11-06 18:42:01 +05:30
Manav Rathi
748605ff00 logout 2 2024-11-06 18:30:56 +05:30
Manav Rathi
53d01b2aa4 init 2024-11-06 18:22:57 +05:30
Manav Rathi
afed732e68 snap wip 2024-11-06 18:19:18 +05:30
Manav Rathi
221c79a6b8 snap wip 2024-11-06 18:08:15 +05:30
Manav Rathi
7fb2fb6dde z wip 2024-11-06 17:47:00 +05:30
Neeraj Gupta
fb710ac41b [server] Add delay in fileData replication (#3960)
## Description
Added additional logs for passkey authentication failures.

## Tests
2024-11-06 17:37:56 +05:30
Neeraj Gupta
9a683d65c9 [server] Log userID on passkey auth failure 2024-11-06 17:36:18 +05:30
Neeraj Gupta
9e06245941 [server] increse file data replication lockTime 2024-11-06 17:36:18 +05:30
Neeraj Gupta
a87fdfa94b fix log msg 2024-11-06 17:36:18 +05:30
Neeraj Gupta
ff7d65041a [server] Avoid immedidate sync 2024-11-06 17:36:18 +05:30
Manav Rathi
e64829410b z 2024-11-06 16:04:35 +05:30
Manav Rathi
f932a16528 Split 2024-11-06 15:52:06 +05:30
Manav Rathi
565dce5a1d T 2024-11-06 15:32:45 +05:30
ashilkn
64b113bd21 [mob][photos] Refactor 2024-11-06 15:21:45 +05:30
Manav Rathi
7fc692312c Axios artifact 2024-11-06 15:16:40 +05:30
Manav Rathi
892edde5dd LF 2024-11-06 15:07:48 +05:30
Manav Rathi
9737405c3a Move checkpoint 2024-11-06 14:54:13 +05:30
Manav Rathi
fc8bf78fc3 Move wip chkpt 2024-11-06 14:44:12 +05:30
Manav Rathi
8f3de6b6fb Move (wip checkpoint) 2024-11-06 14:34:03 +05:30
Neeraj Gupta
7a99c8be63 [mob] Render people section in GridView (#3958)
## Description

## Tests
2024-11-06 14:29:49 +05:30
Neeraj Gupta
6e86c7dff0 [mob] Show people in grid view 2024-11-06 14:25:42 +05:30
Manav Rathi
a7675e9a08 Move 2024-11-06 14:25:39 +05:30
Manav Rathi
47f70250a2 Unused 2024-11-06 14:25:20 +05:30
Manav Rathi
2f6f1a4c6b Move 2024-11-06 14:24:29 +05:30
Manav Rathi
d377205942 Dedup 2024-11-06 14:20:35 +05:30
Manav Rathi
033e06e8ef Move 2024-11-06 14:16:23 +05:30
Manav Rathi
ac05f9fbd7 Move 2024-11-06 14:12:20 +05:30
Manav Rathi
80870d84a7 Move 2024-11-06 14:08:17 +05:30
Manav Rathi
cf928948ce Doc 2024-11-06 14:06:39 +05:30
Manav Rathi
8080c91f79 Rearrange 2024-11-06 14:01:45 +05:30
Manav Rathi
8225070dd3 Inline 2024-11-06 13:57:10 +05:30
Manav Rathi
eb5f2e5e46 Inline 2024-11-06 13:54:59 +05:30
Manav Rathi
0a45caa5b2 Inline 2024-11-06 13:43:20 +05:30
Neeraj Gupta
0e27e1c928 [mob] Lint suggestion 2024-11-06 13:38:23 +05:30
Manav Rathi
dc8db28695 Tweak 2024-11-06 13:38:17 +05:30
Neeraj Gupta
fad4077f76 [mob] Separate all page for people 2024-11-06 13:37:50 +05:30
Manav Rathi
ad698a9abd Inline 2024-11-06 13:32:09 +05:30
Manav Rathi
944df7ecf3 Inline 2024-11-06 13:30:42 +05:30
Manav Rathi
5fff967620 re 2024-11-06 13:27:02 +05:30
Manav Rathi
abbc7a5748 Doc 2024-11-06 13:24:42 +05:30
Manav Rathi
4bc8ef6bc9 Inline 2024-11-06 13:19:08 +05:30
Manav Rathi
9c9036a8ee Use 2024-11-06 13:11:59 +05:30
Manav Rathi
99fe407684 z 2024-11-06 13:03:48 +05:30
Manav Rathi
044c82eacc Move 2024-11-06 12:46:06 +05:30
Manav Rathi
d7665d289c period 2024-11-06 12:39:38 +05:30
Neeraj Gupta
6a878b165d [mob] Lint 2024-11-06 12:38:36 +05:30
Manav Rathi
1d7c807e5f z 2024-11-06 12:38:04 +05:30
Manav Rathi
900ea0469f Ref 2024-11-06 12:26:59 +05:30
Manav Rathi
3a5189e715 Ref 2024-11-06 12:20:25 +05:30
Manav Rathi
dbdcadf452 Move and rewrite 2024-11-06 12:01:51 +05:30
Manav Rathi
07cd61a6f0 Inline 2024-11-06 11:57:45 +05:30
Manav Rathi
4257a34aed type 2024-11-06 11:54:47 +05:30
Manav Rathi
6d2bd35a66 Move 2024-11-06 11:50:38 +05:30
Manav Rathi
5c656f2378 Unused 2024-11-06 11:43:47 +05:30
Manav Rathi
287d4b00e1 [web] General (non-functional) rearrangement of code (#3957) 2024-11-06 11:36:34 +05:30
Manav Rathi
91b4ef2915 LF 2024-11-06 11:33:14 +05:30
Manav Rathi
e267dc6bc9 Move 2024-11-06 11:23:20 +05:30
Manav Rathi
6830ace1ce Inline 2024-11-06 11:16:11 +05:30
Manav Rathi
25f6ad893d Fix lints 2024-11-06 11:13:50 +05:30
Manav Rathi
bbc7d63250 Move 2024-11-06 11:12:30 +05:30
Manav Rathi
b03effff3e Tweak 2024-11-06 11:09:30 +05:30
Manav Rathi
339cdeaa55 Tweak 2024-11-06 11:03:14 +05:30
Manav Rathi
59e9e26d06 Flatten 2024-11-06 10:53:13 +05:30
Manav Rathi
c7b9a35034 Conv 2024-11-06 10:49:11 +05:30
NanoBunTV
c0a47b21f3 Added Custom Icon for Ko-fi
https://ko-fi.com
2024-11-05 23:18:21 -06:00
Manav Rathi
e07bf90f7a Remove deprecated defaultProps 2024-11-06 10:41:25 +05:30
Manav Rathi
0464e31393 Move 2024-11-06 10:30:32 +05:30
Manav Rathi
8ac01c96a3 Inline 2024-11-06 10:28:55 +05:30
Manav Rathi
0087be4938 Inline 2024-11-06 10:26:56 +05:30
Manav Rathi
f3c4ca932d Inline 2024-11-06 10:23:19 +05:30
Manav Rathi
499763edac Inline 2024-11-06 10:21:43 +05:30
Manav Rathi
2ee6e7edc4 Inline 2024-11-06 10:19:01 +05:30
Manav Rathi
058e157941 Inline 2024-11-06 10:15:10 +05:30
Manav Rathi
e7b7b3c1cc Inline 2024-11-06 10:13:11 +05:30
Manav Rathi
d50c577a2f Inline 2024-11-06 10:10:07 +05:30
Manav Rathi
ce80a002ea Inline 2024-11-06 10:09:21 +05:30
Manav Rathi
22b0d47e0a Unused 2024-11-06 10:06:44 +05:30
Manav Rathi
079154198b Inline 2024-11-06 10:01:41 +05:30
Manav Rathi
542cb16e1a Inline 2024-11-06 10:01:07 +05:30
Manav Rathi
2bb4be423f Inline 2024-11-06 09:59:59 +05:30
Manav Rathi
e87096aba5 Split 2024-11-06 09:51:40 +05:30
Manav Rathi
ac1045f9fe [web] Remove unused yarn invocations (#3955)
These are in infra.
2024-11-06 09:37:40 +05:30
Manav Rathi
37aa2af39d Fix 2024-11-06 09:31:52 +05:30
Manav Rathi
00791641a4 [web] Remove unused yarn invocations
These are in infra.
2024-11-06 09:28:19 +05:30
ashilkn
6a5b7f2166 [mob][photos] bump up to v0.9.57 2024-11-05 22:33:30 +05:30
ashilkn
bdc80c8f97 Merge branch 'main' into hierarchical_search 2024-11-05 22:31:42 +05:30
ashilkn
39a3a9a8fa [mob][photos] Avoid recomputing results of 'Only them' filter if already available 2024-11-05 22:29:55 +05:30
ashilkn
ebae813ee3 [mob][photos] Add option to make 'only them' filter work a little different only for testing, for feedback on which option is better 2024-11-05 22:27:38 +05:30
ashilkn
f09005ed95 [mob][photos] Make filtering of 'Only them' filter faster by making one db query instead of two and log and handle any errors when filtering using the 'Only them' filter 2024-11-05 21:01:35 +05:30
ashilkn
724b9620be [mob][photos] chore 2024-11-05 19:45:29 +05:30
Manav Rathi
ca0ab41403 [web] Improve handling of the CF Upload proxy flag (#3951) 2024-11-05 19:35:31 +05:30
Manav Rathi
4f0ba47c2e Fix 2024-11-05 19:15:41 +05:30
Manav Rathi
448a8789fa Switch 2024-11-05 19:07:00 +05:30
Manav Rathi
b730d41eca Update in shared albums manually 2024-11-05 18:54:55 +05:30
Manav Rathi
3e130d09ea Split so that it can be used by albums app 2024-11-05 18:46:47 +05:30
Manav Rathi
9d31ea521d Remove out of date comment 2024-11-05 18:30:52 +05:30
Manav Rathi
55b36501a0 Alt 2024-11-05 18:28:03 +05:30
Manav Rathi
237495d48f Move 2024-11-05 17:33:00 +05:30
mangesh
b6e5703ed9 [docs][without-docker]: make the docs more verbose wherever needed (#3937) 2024-11-05 16:59:58 +05:30
ashilkn
30cde90a68 [mob][photos] Only add initialGalleryFilter to filters to avoid in recommendations list when there are no applied filters
This resolves a bug: If 'A' is the initialGalleryFilter and a filter 'B' is applied (in this state both A and B filters are applied), and then the filter 'A' is removed, in recommendations, filter 'A' is not recommended since it's passed as a filter to avoid in recommendations
2024-11-05 16:18:49 +05:30
Neeraj Gupta
5450ac7a67 [mob] Fix appBar color change on scroll 2024-11-05 15:55:00 +05:30
Manav Rathi
228cea5b98 [web] Drawer refactoring - Maps settings (#3947) 2024-11-05 15:46:54 +05:30
Manav Rathi
385367a3df Inline 2024-11-05 15:41:33 +05:30
Murat Karayel
fc7da2081a [Auth] Fix title typo (#3946)
ClouDNS title typo

icon not showing in app because of typo
2024-11-05 15:32:29 +05:30
Manav Rathi
d26c4a7a84 Remove old code 2024-11-05 15:10:46 +05:30
Neeraj Gupta
1078a5edf8 [mob] Fix date parsing for batched photos from signal (#3945)
## Description
Related to https://github.com/ente-io/ente/issues/3851
## Tests
2024-11-05 15:08:52 +05:30
Neeraj Gupta
a200c4ac5f [mob] Fix date parsing for batched photos from signal 2024-11-05 15:07:58 +05:30
Manav Rathi
869f3b6138 Dedup 2024-11-05 14:57:44 +05:30
Manav Rathi
bf2c02e25c Use 2024-11-05 14:38:26 +05:30
Manav Rathi
ecca8be1d7 Fix 2024-11-05 14:33:32 +05:30
Manav Rathi
514129e07b Use 2024-11-05 14:31:49 +05:30
Manav Rathi
79d5d4ac1c Wrap 2024-11-05 14:25:33 +05:30
Manav Rathi
ead44dd73a Fix invalid nesting of p within p 2024-11-05 14:16:52 +05:30
Manav Rathi
1dd45a2e04 Make the message optional 2024-11-05 14:12:26 +05:30
Manav Rathi
a048f1a38f Use 2024-11-05 14:05:52 +05:30
Manav Rathi
1713510f2b New 2024-11-05 14:02:09 +05:30
Manav Rathi
66fc440d1b Move 2024-11-05 13:49:44 +05:30
Manav Rathi
05e5f9f675 Inline load and error states 2024-11-05 13:36:54 +05:30
Manav Rathi
d2b3de08c1 Placeholder 2024-11-05 13:20:53 +05:30
Manav Rathi
1b4c9217b6 Remote 2024-11-05 13:17:30 +05:30
Manav Rathi
f52ece7bb5 Allow subscriptions 2024-11-05 13:11:58 +05:30
Manav Rathi
862ba7b241 [web] New translations (#3942)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-05 12:24:57 +05:30
Crowdin Bot
65ba38968d New Crowdin translations by GitHub Action 2024-11-05 06:52:41 +00:00
Manav Rathi
2d80779b09 [desktop] Move face clustering related strings to translation (#3941) 2024-11-05 12:19:31 +05:30
Neeraj Gupta
7f1630967b [auth] Bump version v4.1.0 (#3940)
## Description

## Tests
2024-11-05 12:15:53 +05:30
Manav Rathi
5dcd4547d6 Move to tr 2024-11-05 12:14:28 +05:30
Manav Rathi
96b9b36c69 Move to tr 2024-11-05 12:07:49 +05:30
Neeraj Gupta
8a0d5ab9ef [auth] Bump version v4.1.0 2024-11-05 11:57:02 +05:30
Manav Rathi
ce02909b5d Use 2024-11-05 11:56:34 +05:30
Manav Rathi
fc6ab58514 Rename 2024-11-05 11:56:22 +05:30
Manav Rathi
38ed590a2b Move to tr 2024-11-05 11:52:20 +05:30
Manav Rathi
e4bfa1ddb1 Move 2024-11-05 11:47:49 +05:30
Neeraj Gupta
fb4c1b206d [mob] Basic skeleton to save person 2024-11-05 11:47:23 +05:30
Manav Rathi
8feef3f36f Remove unused 2024-11-05 11:45:09 +05:30
Manav Rathi
e7c788a793 [web] New translations (#3939)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-05 11:37:02 +05:30
Crowdin Bot
9223f83a4e New Crowdin translations by GitHub Action 2024-11-05 06:03:38 +00:00
Manav Rathi
151c8cd734 [web] Translation cleanup (#3938)
Related to the recent drawer refactorings
2024-11-05 11:32:51 +05:30
Manav Rathi
b494cc248b Unused 2024-11-05 11:23:21 +05:30
Manav Rathi
4794de7d74 Consistent casing 2024-11-05 11:22:44 +05:30
Manav Rathi
787d4388d3 Rename 2024-11-05 11:18:10 +05:30
Manav Rathi
934b1383b5 Rename 2024-11-05 11:15:11 +05:30
mangeshrex
7689e0a9f2 [docs][without-docker]: make the docs more verbose wherever needed 2024-11-05 11:11:49 +05:30
Manav Rathi
91e0ede0a6 Rename and move 2024-11-05 11:10:41 +05:30
Manav Rathi
7dd7194a7a Remove unused 2024-11-05 11:06:49 +05:30
Manav Rathi
b18de12f28 Rename 2024-11-05 11:06:07 +05:30
Manav Rathi
23ac921fb5 Remove unused 2024-11-05 11:01:16 +05:30
Manav Rathi
faf8720fdc [web] Drawer refactoring - Part x/x (#3936) 2024-11-05 10:59:33 +05:30
Manav Rathi
e2e3551ce4 Ditto 2024-11-05 10:53:02 +05:30
Manav Rathi
90a0a44ae2 Move 2024-11-05 10:32:52 +05:30
Murat Karayel
215837ac4a [Auth] New icons (#3854)
New icons:
+ Binance TR
+ ClouDNS
+ CSFloat

⁕ Revamped Ubiquiti icon

› altNames for WARGAMING.NET
2024-11-05 10:32:36 +05:30
Manav Rathi
6112396479 Move 2024-11-05 10:26:55 +05:30
Manav Rathi
70f40aa103 Update 2024-11-05 10:16:08 +05:30
ashilkn
472bf48b42 [mob][photos] Remove face IDs that aren't associated with any cluster from getting added to the 'Only them' filter results 2024-11-05 10:10:59 +05:30
Manav Rathi
73ea3d167d Enable state 2024-11-05 09:55:54 +05:30
Manav Rathi
e04cd24e91 Tweak 2024-11-05 09:42:44 +05:30
Manav Rathi
089808892b Update 2024-11-05 09:37:06 +05:30
Manav Rathi
07995dcbb8 md 2024-11-05 09:33:28 +05:30
Manav Rathi
dfd55328c7 md 2024-11-05 09:30:00 +05:30
Neeraj Gupta
c69afd28a3 [Auth - Custom Icons] Fixed spelling mistake for Ubiquiti SSO (#3877)
### Description:
Fixed spelling mistake for one of Ubiquiti's "altNames".

### Changes:
`"Ubiquti SSO` ---> `"Ubiquiti SSO"`
2024-11-05 09:20:10 +05:30
ashilkn
fb9b3543e0 [mob][photos] Remove stale code 2024-11-04 20:22:39 +05:30
ashilkn
b2da30e207 [mob][photos] Show 'Only them' filter in recommendations right after a person screen is opened, even when there are no filters selected 2024-11-04 19:19:52 +05:30
Manav Rathi
748f65e536 [web] Continuing settings drawer related refactoring (#3933) 2024-11-04 19:16:02 +05:30
Manav Rathi
da0bee0cc4 2FA drawer 2024-11-04 19:10:59 +05:30
Manav Rathi
23d739c380 Tweak 2024-11-04 18:57:05 +05:30
Manav Rathi
0a122b9fed Ditto 2024-11-04 18:47:33 +05:30
Manav Rathi
6b0b5fc3ce Touchups 2024-11-04 18:31:04 +05:30
Manav Rathi
fd29a26210 Swap 2024-11-04 18:22:45 +05:30
Manav Rathi
cbe7407c14 Dup 2024-11-04 18:19:40 +05:30
Manav Rathi
5311714bff Don't rely on container 2024-11-04 18:14:53 +05:30
Neeraj Gupta
c967abbae7 [server] Log additional details on replication failure (#3932)
## Description

## Tests
2024-11-04 18:01:54 +05:30
Neeraj Gupta
0fc17e9453 [server] Log additional details on replication failure 2024-11-04 18:00:59 +05:30
Manav Rathi
f52420df20 Shorten 2024-11-04 18:00:13 +05:30
ashilkn
b036079249 [mob][photos] Do not show any face filters in recommendations when an 'Only them' filter is applied 2024-11-04 17:49:20 +05:30
Alex Rirak
0edfb461af [AUTH] Add icon for Carta.com, KnownHost.com, TRowePrice.com (#3908)
## Description
- Added an Icon for Carta.com
- Added an Icon for KnownHost.com
- Added an Icon for TRowePrice.com
- Updated Config
2024-11-04 16:04:40 +05:30
Laurens Priem
59f7b316c3 Copy (#3930)
Copy change
2024-11-04 16:04:17 +05:30
Manav Rathi
27aaf78499 Split off 2024-11-04 15:59:52 +05:30
Neeraj Gupta
82223de0ba [mob] Fix nav bug during person label assignment (#3931)
## Description

## Tests
2024-11-04 15:58:48 +05:30
Neeraj Gupta
a4de4fe4b7 [mob] Fix nav bug during person label assignment 2024-11-04 15:54:59 +05:30
Manav Rathi
d5071628b6 Consistent 2024-11-04 15:48:42 +05:30
Manav Rathi
ec776e9f98 Unnest 2024-11-04 15:41:40 +05:30
Manav Rathi
8cf4c008d5 Ren 2024-11-04 15:31:29 +05:30
Manav Rathi
5c4aed51f2 [web] Refactoring - Nested left sidebar drawer (#3928) 2024-11-04 15:27:08 +05:30
Manav Rathi
7c91f1059d LF 2024-11-04 15:24:11 +05:30
Manav Rathi
3c15f80a79 Restore basic usability 2024-11-04 15:19:57 +05:30
Manav Rathi
f164df75fc Remove unnecessary boxes 2024-11-04 15:15:23 +05:30
Manav Rathi
18daf681de Update 2024-11-04 15:10:12 +05:30
Manav Rathi
ff42397316 Use 2024-11-04 14:54:01 +05:30
Manav Rathi
302dff72a4 Drop the workaround 2024-11-04 14:31:08 +05:30
Manav Rathi
d9e106088a S3 2024-11-04 14:28:25 +05:30
Manav Rathi
31cdb63c7d S2 2024-11-04 14:19:48 +05:30
Manav Rathi
b1c7c238a9 Sketch 2024-11-04 14:14:17 +05:30
Manav Rathi
bd35f3e43d Rename 2024-11-04 14:05:24 +05:30
Manav Rathi
cfcbed2613 Move 2024-11-04 14:01:43 +05:30
laurenspriem
0197451d0e Merge branch 'main' into mobile_ml_naming 2024-11-04 14:01:19 +05:30
Neeraj Gupta
63471eea85 [mob] Add attributes for person email & userID 2024-11-04 13:44:07 +05:30
Manav Rathi
80d35ea2fe [infra] Add data-puller CF worker (#3927) 2024-11-04 13:43:59 +05:30
Manav Rathi
fd301ff116 [infra] Add data-puller CF worker 2024-11-04 13:40:41 +05:30
Manav Rathi
34f485c658 [docs] Add note about leafmost folder (#3924) 2024-11-04 11:38:50 +05:30
Manav Rathi
fcb966f649 [docs] Add note about leafmost folder 2024-11-04 11:37:08 +05:30
mangesh
ca7ed779d6 minor fix: describing markdown syntax type. (#3879) 2024-11-04 11:34:06 +05:30
mangesh
1fcdc7cc73 add: resource links for running museum as a bg service (#3890) 2024-11-04 11:32:56 +05:30
Neeraj Gupta
1ae5b614f4 [auth] New translations (#3918)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-11-04 11:32:30 +05:30
Neeraj Gupta
c58dffd5c9 [mob] Handle 404 for multipart failure (#3923)
## Description

## Tests
2024-11-04 11:29:04 +05:30
Neeraj Gupta
ef329177c0 Merge remote-tracking branch 'origin/main' into file_data_v2 2024-11-04 09:51:16 +05:30
Neeraj Gupta
c13364513b [auth] Remove bad icon 2024-11-04 09:50:16 +05:30
Manav Rathi
5ef200d520 [desktop] Fix build failures due to apt failures (#3922) 2024-11-04 09:47:28 +05:30
Manav Rathi
a11dd01d4a [desktop] Fix build failures due to apt failures
https://github.com/ente-io/ente/pull/3921/files
2024-11-04 09:46:28 +05:30
Manav Rathi
86af6653dd [desktop] Fix build failures due to apt failures (#3921)
https://github.com/actions/runner-images/issues/6039#issuecomment-1209531257
2024-11-04 09:42:37 +05:30
github-actions[bot]
7e7e1983b7 [mobile] New translations (#3917)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-11-04 09:41:56 +05:30
Neeraj Gupta
cb37870911 Rename file back to original name 2024-11-04 09:36:30 +05:30
Neeraj Gupta
257aae3d81 Temporarily rename file to resolve case sensitivity issue 2024-11-04 09:36:29 +05:30
Manav Rathi
a1bb2ff0c1 [desktop] Fix build failures due to apt failures
https://github.com/actions/runner-images/issues/6039#issuecomment-1209531257
2024-11-04 09:32:47 +05:30
Manav Rathi
1a338f2451 [web] Fix capitalization for the uk-UA lang (#3920)
https://github.com/ente-io/ente/issues/3634#issuecomment-2448388285
2024-11-04 08:23:02 +05:30
Manav Rathi
432acfbeb6 [web] Fix capitalization for the uk-UA lang
https://github.com/ente-io/ente/issues/3634#issuecomment-2448388285
2024-11-04 08:19:12 +05:30
Manav Rathi
af2b6e3918 [web] New translations (#3916)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-11-04 08:17:44 +05:30
Crowdin Bot
46f7d14964 New Crowdin translations by GitHub Action 2024-11-04 01:17:23 +00:00
Crowdin Bot
caf0374f80 New Crowdin translations by GitHub Action 2024-11-04 00:35:43 +00:00
Manav Rathi
d4587abf3f [web] Minor drawer related refactoring (#3891)
Non functional
2024-10-30 23:04:12 +05:30
Manav Rathi
4e47d856bf Rename and move 2024-10-30 23:01:11 +05:30
Manav Rathi
c2514bc336 Default anchor is already left 2024-10-30 22:34:07 +05:30
Manav Rathi
7f3996c0ba [web] Settings related refactoring (#3888)
Prep for moving the preferences code into packages/new/photos.
2024-10-30 22:26:47 +05:30
Manav Rathi
b7af7be2da LF 2024-10-30 22:20:20 +05:30
Manav Rathi
8685222472 Only attempt to init settings after login 2024-10-30 21:59:28 +05:30
ashilkn
b2c6374010 [mob][photos] Stop showing name of face filter so that it occupies less space in UI 2024-10-30 21:24:20 +05:30
ashilkn
e0e6980dac [mob][photos] Use thumbnail image for face filter thumbnails 2024-10-30 21:09:33 +05:30
mangeshrex
5a37760cf1 add: resource links for running museum as a bg service 2024-10-30 20:50:54 +05:30
ashilkn
556fb50870 [mob][photos] Move different filter chip widgets to separate files 2024-10-30 15:56:18 +05:30
ashilkn
da38c3e9f5 [mob][photos] Fix missing files in hierarchical search when searching over an archived album 2024-10-30 15:40:33 +05:30
Manav Rathi
f502246cde LF 2024-10-30 14:42:24 +05:30
Manav Rathi
774227c14e Split again 2024-10-30 14:37:40 +05:30
ashilkn
862e84e6b2 [mob][photos] Make 'only them' filter working, showing filtered files in gallery 2024-10-30 14:33:08 +05:30
Manav Rathi
98ad12b415 Start using 2024-10-30 14:28:25 +05:30
Manav Rathi
9b04de216c wip: checkpoint 2024-10-30 14:02:43 +05:30
Manav Rathi
6b71ce2cf9 To settings 2024-10-30 13:27:43 +05:30
Manav Rathi
3483466391 Rename 2024-10-30 13:25:27 +05:30
Manav Rathi
5609778ca1 Transition to settings 2024-10-30 13:25:14 +05:30
Manav Rathi
072c472f1c Outline 2024-10-30 13:11:44 +05:30
Manav Rathi
b8dea0f296 Outline 2024-10-30 12:27:11 +05:30
Manav Rathi
56bac2160e Combine 2024-10-30 12:12:19 +05:30
Manav Rathi
258d1768fd Inline 2024-10-30 11:31:02 +05:30
Manav Rathi
23e6788891 [web] [desktop] Retain JPEG originals even on date modifications (#3887) 2024-10-30 10:57:34 +05:30
Manav Rathi
28cb942e6c Fix formatting lint issue 2024-10-30 10:53:02 +05:30
Manav Rathi
f97952298d [web] [desktop] Retain JPEG originals even on date modifications 2024-10-30 10:34:42 +05:30
ashilkn
e6813aa042 [mob][photos] When an 'only them' filter is added, remove all individual face filters from applied list 2024-10-29 20:20:31 +05:30
Manav Rathi
ac6524121a [web] General refactoring - Update the OTP input component package (#3884) 2024-10-29 19:37:21 +05:30
Manav Rathi
8e5fc76ef1 Move dep to correct place 2024-10-29 19:29:12 +05:30
Manav Rathi
d2db27d4ee Style to fit during the login flow 2024-10-29 19:27:33 +05:30
Manav Rathi
d9e6ff2fee Autofocus back to first on error 2024-10-29 19:21:20 +05:30
ashilkn
4717e48598 [mob][photos] Show thumbnail for 'only them' filter with different layouts depending on the number of faces in filter 2024-10-29 18:52:52 +05:30
Manav Rathi
61936029e8 Update 2024-10-29 18:34:52 +05:30
laurenspriem
1277c9d188 [mob][photos] Copy 2024-10-29 18:16:16 +05:30
ashilkn
f753779860 [mob][photos] Create only them filter and add it to recommendations on a condition 2024-10-29 17:26:18 +05:30
mangesh
3244f9d37e minor fix: describing markdown syntax type. 2024-10-29 13:15:26 +05:30
Neeraj Gupta
b886a9e31c [mob] Add support for storing fileDataInfo 2024-10-29 13:11:40 +05:30
Manav Rathi
da6b0c920a Doc 2024-10-29 12:54:20 +05:30
Manav Rathi
28691784bf Unused CSS 2024-10-29 12:45:53 +05:30
Manav Rathi
0e12a390f4 [web] General minor refactorings (#3878)
Circling around how to extract the share page
2024-10-29 12:35:20 +05:30
Manav Rathi
c6bcd7ccf0 Fin 2024-10-29 12:21:47 +05:30
Manav Rathi
eb0af57a84 Autofocus on the delete action only in the file viewer context 2024-10-29 12:14:36 +05:30
Manav Rathi
d15f8451fe Stable identity of context functions to prevent unnecessary rerenders 2024-10-29 12:14:36 +05:30
Neeraj Gupta
5568a86fb2 [mob] Remove dead code 2024-10-29 11:47:11 +05:30
Neeraj Gupta
ea8e561e04 [mob] generated 2024-10-29 11:43:49 +05:30
Neeraj Gupta
ee36ebc6a6 [mob] Add migration for filedata 2024-10-29 11:43:39 +05:30
Manav Rathi
75c280d86b Auth app doesn't use it 2024-10-29 11:10:52 +05:30
Manav Rathi
04d07fc94f Should be fixed upstream
https://github.com/klendi/react-top-loading-bar/issues/52
2024-10-29 11:06:37 +05:30
Manav Rathi
6f576bdae6 Update 2024-10-29 10:56:35 +05:30
Manav Rathi
145dd4d50b Prune 2024-10-29 10:54:30 +05:30
Manav Rathi
a0ea952932 Doc 2024-10-29 10:54:13 +05:30
Manav Rathi
06a0a8177b Unused css
Best I can tell, it seems a leftover from 7df731ed2c
2024-10-29 10:46:12 +05:30
Manav Rathi
4df1e16b90 Use the mui built in icons
The ad-hoc variation did not fit in with the rest of the icons (e.g it had a different stroke width, and general vibe)
2024-10-29 09:57:31 +05:30
Manav Rathi
8ce0775514 Remove unused 2024-10-29 09:47:08 +05:30
zDqrK404
44ccc69f77 [AUTH] Add Icon for DigiFinex.com (#3858)
## Description

Added a Icon for DigiFinex.com 

And Updated Index for it in custom-icons.json 

## Tests

None 
2024-10-29 09:34:25 +05:30
mangesh
85ae97c459 [draft] Docs for self hosting ente without docker (#3831)
## Description

in draft 

## Tests
2024-10-29 09:34:05 +05:30
mangesh
fd4de8b67b [docs][ente-cli]: add docs to troubleshoot keyring errors (#3870)
## Description

Adding docs for setting up the ENTE_CLI_SECRET_PATH variable. This fix
is for errors related to keyrings with ente-cli.

## Tests
2024-10-29 09:33:37 +05:30
KingLuc12
ae0c379e3f Update custom-icons.json
Changed one of the "altNames" from "Ubiquti SSO" to "Ubiquiti SSO".
2024-10-28 20:58:06 +00:00
KingLuc12
19c81646e3 Merge branch 'ente-io:main' into main 2024-10-28 20:55:14 +00:00
Manav Rathi
5bf1c4e14f [docs] Update ML FAQ to reflect functionality in latest desktop release (#3874)
/cc @laurenspriem, please reword if needed!
2024-10-28 18:20:12 +05:30
Manav Rathi
c09fc35488 [docs] Update ML FAQ to reflect functionality in latest desktop release 2024-10-28 18:16:09 +05:30
Manav Rathi
16ef8c548d [desktop] Start next release train (#3873)
Also updated 1.7.6 changelog with two entries I'd forgotten to add
earlier.
2024-10-28 17:52:47 +05:30
Manav Rathi
3a406d46c2 [desktop] Start next release train
Also updated 1.7.6 changelog with two entries I'd forgotten to add earlier.
2024-10-28 17:50:47 +05:30
ashilkn
b05373c8f2 [mob][photos] Change configuration in iOS to open albums.ente.sh instead of albums.ente.io 2024-10-28 17:37:15 +05:30
Manav Rathi
bc70689b9d photosd-v1.7.6 (#3872) 2024-10-28 17:14:09 +05:30
Manav Rathi
4246cc2f15 photosd-v1.7.6 2024-10-28 17:12:41 +05:30
Manav Rathi
3ec04beb61 [auth] Fix case insensitive rename (#3871)
A recent PR seems to have added "Render.svg". I'm not sure of the
intent, but
this seems to have been meant as replacement of the existing
"render.svg" (note
the different case). Because of how the macOS APFS filesystem and git
interact,
main is now showing as dirty on a git checkout.

Based on a visual comparison, and assuming the most recent PR is the
meant to
intentionally update this file, I've retained "Render.svg".
2024-10-28 17:10:32 +05:30
Manav Rathi
4e7dca6e4e [auth] Fix case insensitive rename
A recent PR seems to have added "Render.svg". I'm not sure of the intent, but
this seems to have been meant as replacement of the existing "render.svg" (note
the different case). Because of how the macOS APFS filesystem and git interact,
main is now showing as dirty on a git checkout.

Based on a visual comparison, and assuming the most recent PR is the meant to
intentionally update this file, I've retained "Render.svg".
2024-10-28 17:07:22 +05:30
Neeraj Gupta
8dce201ec6 Merge branch 'main' into file_data_v2 2024-10-28 15:55:46 +05:30
github-actions[bot]
60aae73223 [mobile] New translations (#3869)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-10-28 15:55:14 +05:30
Neeraj Gupta
d3dd168b2a [server] generated strings 2024-10-28 15:38:55 +05:30
LeGenDaRy
a6e4f9e603 Add new icons (#3776)
Add new icons
2024-10-28 15:14:31 +05:30
Neeraj Gupta
bec0f639d6 [server] API to get file data status (#3868)
## Description
Note:
This API won't really return status/diff for deleted files. The clients
will primarily use this data to identify for which all files we already
have preview generated or it's ML inference is done.
This doesn't simulate perfect diff behaviour as we won't maintain a
tombstone entries for the deleted API.
## Tests
2024-10-28 15:14:09 +05:30
Neeraj Gupta
70f79ebae4 [server] Change method type 2024-10-28 15:12:24 +05:30
Neeraj Gupta
17d1589859 [server] API to get index diff status 2024-10-28 15:03:08 +05:30
github-actions[bot]
dcd112bfdf [mobile] New translations (#3862)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-10-28 10:29:11 +05:30
github-actions[bot]
d3ce42fca1 [auth] New translations (#3863)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-10-28 10:26:21 +05:30
KingLuc12
d7e10a5e7a [Custom Icons] Add Ubiquiti (#3825)
## Description
Added Ubiquiti to the custom icons.
2024-10-28 10:25:43 +05:30
Manav Rathi
b4467771c0 [web] Enable Ukrainian (#3865) 2024-10-28 10:10:03 +05:30
Manav Rathi
984800379e [web] Enable Ukrainian 2024-10-28 10:02:53 +05:30
Manav Rathi
24c6d52b54 [web] New translations (#3861)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-10-28 09:57:52 +05:30
Crowdin Bot
54787eaf8d New Crowdin translations by GitHub Action 2024-10-28 00:36:03 +00:00
ashilkn
322c729c13 [mob][photos] Curate slightly better recommendations in app bar
Before, the recommendations were only based on relevance. Now the recommendations will be mostly relevant and a bit more diverse when it comes to type of filter
2024-10-26 18:50:24 +05:30
ashilkn
2c4c25feb3 [mob][photos] Create FilterTypeNames enum and enforce that a new entry is added here any time a new class extends HierarchicalSearchFilter 2024-10-26 18:40:57 +05:30
Aman Raj Singh Mourya
c849ea1046 [mob][photos] use better dialog widget to ask permissions 2024-10-26 17:12:52 +05:30
Manav Rathi
85e6fb60dc [desktop] Fix OOM on large library imports (#3847)
It is hard for me to be certain, but I feel this should resolve the
sporadic OOMs that have been reported when uploading large libraries.

- https://github.com/ente-io/ente/issues/2500 
- https://github.com/ente-io/ente/discussions/3420

There are two fixes here:

1. First one is a inefficient array concat in our code. This was not
incorrect per se, but it did lead to an allocation pattern that caused
V8's GC to crash the renderer with OOMs.

2. But even after the first fix, I was able to sometimes reproduce OOMs.
I added a lot of instrumentation (I've cherry-committed some of it to
git history for future reference when debugging similar issues), but I
couldn't spot any abnormal allocation patterns during uploads. Out of
ideas, I started imagining it was a Chromium issue, and on a whim, I
updated Electron 30 => 33 (something I needed to do anyway, as part of
regular app dependency updates). That apparently has resolved the
remaining OOMs.

With these changes, I've not been able to reproduce a crash even after
bumping up the parallel upload count from 4 to 12. I've let the parallel
upload count be at the existing 4 for now, but if indeed we stop getting
field reports of OOM crashes after this is released, we can increase
that too in the future.
2024-10-26 15:33:09 +05:30
Manav Rathi
f5ad895768 Revert "Debugging instrumentation"
This reverts commit 6700f912fc (it was always meant to be reverted, and only a history entry)
2024-10-26 14:36:22 +05:30
Manav Rathi
158254a658 Update to Electron 33
Two reasons:

- Electron 30 is end of support

- The prev-to-prev commit didn't fix all OOMs
  (3511fcf723), and they still sporadically
  occur. But there isn't any any aberrant memory consumption I can spot (See
  prev commit for some example instrumentation, the app's memory usage doesn'
  exceed a few hundred MBs at any point). So to rule out an upstream issue.
2024-10-26 14:24:36 +05:30
Manav Rathi
6700f912fc Debugging instrumentation
commiting to keep them in history
2024-10-26 14:20:13 +05:30
Neeraj Gupta
a830026640 [server] Add '/' before query params for an album's share URL (#3843) 2024-10-26 13:58:44 +05:30
Aman Raj Singh Mourya
b3f332cbb5 [mob][photos] open owned collection without fetching from the server 2024-10-26 13:14:45 +05:30
ashilkn
3b8c1ed9e3 [server] Add '/' before query params for an album's share URL 2024-10-26 07:51:20 +05:30
Prateek Sunal
e75913cb96 [auth] linux fixes (#3334)
## Description

- fix #2563 #2564
- update binary name

## Tests
2024-10-25 22:31:16 +05:30
Manav Rathi
3511fcf723 [desktop] Fix an OOM on large library imports
Should reduce the following occurrences (This should make it better, but there
might be other reasons for the OOM too): -
https://github.com/ente-io/ente/issues/2500 - -
https://github.com/ente-io/ente/discussions/3420

---

Here, the issue is that the combineChunksToFormUploadPart function, while not
incorrect, is terribly inefficent in how it combines Uint8Arrays byte by
byte. This apparently causes an allocation pattern that the V8 garbage
collector, Oilpan, doesn't like, and crashes the renderer process with:

    [main] <--- Last few GCs --->
    [main]
    [main] [17639:0x13000e90000]    39409 ms: Mark-Compact (reduce) 48.1 (57.8) -> 47.7 (52.8) MB, pooled: 0 MB, 35.08 / 0.04 ms  (average mu = 0.857, current mu = 0.906) CppHeap allocation failure; GC in old space requested
    [main]
    [main]
    [main] <--- JS stacktrace --->
    [main]
    [main] [17639:1025/145540.195043:ERROR:v8_initializer.cc(811)] V8 process OOM (Oilpan: Large allocation.).

The effort was primarily spent in getting it to a reproducible-ish state, and I
can now sporadically reproduce this watching a folder full of large videos, and
setting the network conditions in DevTools to 3G. For real users, what probably
happens is, depending on network speed, there is a potential race condition
where 4 multipart uploads may start within the same GC cycle (but I'm guessing
here, since the setup I have for reproducing this is still very sporadic).

Here is a smaller isolated example. This code, when repeatedly invoked in a
setTimeout (independent of any uploads or anything else in the app), causes the
renderer to OOM within a minute.

    import { wait } from "@/utils/promise";

    async function combineChunksToFormUploadPart() {
        const combinedChunks = [];
        for (let i = 0; i < 5 * 5; i++) {
            const { done, value: chunk } = await readDo();
            if (done) {
                break;
            }
            for (let index = 0; index < chunk.length; index++) {
                combinedChunks.push(chunk[index]!);
            }
        }
        return Uint8Array.from(combinedChunks);
    }

    const readDo = async () => {
        await wait(10);
        const ENCRYPTION_CHUNK_SIZE = 4 * 1024 * 1024;
        return {
            done: false,
            value: Uint8Array.from(
                Array(ENCRYPTION_CHUNK_SIZE).fill(Math.random()),
            ),
        };
    };

---

Some flags which helped in debugging:

    app.commandLine.appendSwitch("js-flags", "--expose_gc --trace_gc --trace_gc_verbose");
2024-10-25 20:49:03 +05:30
Manav Rathi
24009842d7 [docs] [web] Add NVM as an alternative (#3842) 2024-10-25 19:10:09 +05:30
Manav Rathi
1b6dda46df Add NVM as an alternative 2024-10-25 19:07:09 +05:30
Ashil
9956faf4b3 Update sha256 fingerprint of ente photos in Digital asset links JSON (#3841) 2024-10-25 17:38:19 +05:30
ashilkn
a829681970 Update sha256 fingerprint of ente photos in Digital asset links JSON 2024-10-25 17:34:03 +05:30
Neeraj Gupta
27dd13324e ML Lite (#3838)
## Description

- Adds an option to not index files locally on mobile
- Uses the global ML flag for consent

## Tests

Tested in debug mode on my Pixel 8.
2024-10-25 11:18:36 +05:30
laurenspriem
0a2090e2fb [mob][photos] Rename keys 2024-10-25 11:15:19 +05:30
laurenspriem
656baa972d [mob][photos] Simplify 2024-10-25 10:39:51 +05:30
laurenspriem
ab4d73e172 [mob][photos] Fix 2024-10-25 10:35:53 +05:30
laurenspriem
f81c7f6faa [mob][photos] Refactor 2024-10-25 10:23:35 +05:30
ashilkn
1c3bdb6d69 Merge branch 'main' into hierarchical_search 2024-10-25 09:58:37 +05:30
ashilkn
8b647ed0b1 [mob][photos] Wrap safearea around FilterOptionsBottomSheet 2024-10-25 09:57:39 +05:30
ashilkn
a29f9db35d [mob][photos] Show loading state in gallery from when a filter is applied to when all computation related to it finishes 2024-10-25 09:10:51 +05:30
ashilkn
ae5ae0c770 [mob][photos] Enable hierarchical search for uncategorized album 2024-10-25 08:34:55 +05:30
ashilkn
567ae6aa41 Revert "[mob][photos] Change leading width of appbar when filters are applied"
This reverts commit 925abee3c5.
2024-10-25 08:23:38 +05:30
ashilkn
53e7bbac78 [mob][photos] Chore 2024-10-24 22:15:04 +05:30
ashilkn
e944b6e8cb [mob][photos] Performance improvements 2024-10-24 22:13:00 +05:30
ashilkn
925abee3c5 [mob][photos] Change leading width of appbar when filters are applied 2024-10-24 21:10:52 +05:30
ashilkn
dabf4bb309 [mob][photos] Remove duplicate people naming banner 2024-10-24 21:02:40 +05:30
ashilkn
656d103e9d [mob][photos] Stop showing cluster id in UI 2024-10-24 20:59:25 +05:30
Manav Rathi
37d763bfcd [infra] Add some notes on creating a graphical cloud VM (#3830) 2024-10-24 20:22:42 +05:30
Manav Rathi
3c8b023cd0 Tweak 2024-10-24 20:20:03 +05:30
laurenspriem
8bf29ee82f [mob][photos] Fix remote fetch counter 2024-10-24 19:46:42 +05:30
laurenspriem
b85e830a2b [mob][photos] Remove unneeded 2024-10-24 19:33:57 +05:30
laurenspriem
9e1d32fd88 [mob][photos] Fix colors 2024-10-24 19:28:25 +05:30
laurenspriem
4c63ffa90f [mob][photos] Inherited widget fix 2024-10-24 19:21:53 +05:30
Aman Raj Singh Mourya
10ca0b7669 Merge branch 'deeplinks' of https://github.com/ente-io/ente into deeplinks 2024-10-24 19:12:36 +05:30
Aman Raj Singh Mourya
621df27da9 [mob][photos] added android_intent_plus to open app settings for permissions 2024-10-24 19:12:33 +05:30
Aman Raj Singh Mourya
020033bd92 [mob][photos] Ask permission to enable deeplinks for github & fdroid users 2024-10-24 19:10:52 +05:30
ashilkn
5498438384 [mob][photos] Increase size of face filter chip in all filters view 2024-10-24 19:10:36 +05:30
laurenspriem
d16566ec31 [mob][photos] format 2024-10-24 19:07:25 +05:30
ashilkn
83cfd4ab4b [mob][photos] UI improvements in filter chips 2024-10-24 19:06:05 +05:30
laurenspriem
d2f20140da [mob][photos] format 2024-10-24 19:02:13 +05:30
laurenspriem
054a9deb59 [mob][photos] Only index locally if enough RAM 2024-10-24 19:00:22 +05:30
ashilkn
32b5b903be [mob][photos] Show close icon always inside the generic filter chip 2024-10-24 18:38:24 +05:30
laurenspriem
e500ef2144 [mob][photos] Extract strings 2024-10-24 17:56:41 +05:30
ashilkn
96cba31c29 [mob][photos] Chore 2024-10-24 17:54:01 +05:30
laurenspriem
602e820442 [mob][photos] Fix ML consent logic 2024-10-24 17:51:24 +05:30
laurenspriem
811ba9abfa [mob][photos] Prettier UI 2024-10-24 17:34:25 +05:30
laurenspriem
ca900d5a9a [mob][photos] Update ML debug options 2024-10-24 17:19:42 +05:30
ashilkn
8c708530ef [mob][photos] Perf improvements to hierarchical search
Normal search and hierarchical search needs slightly different set of files. Refactored code in such a way that the elements in both these lists are references of a elements in a list of all files and hence reducing the memory needed for search and hierarchical search combined. Files used for hierarchical search contain only uploaded files now, rather than mix of uploaded and un-uploaded, reducing iterations required for hierarchical search
2024-10-24 17:17:50 +05:30
Aman Raj Singh Mourya
9d045f51eb [mob][photos] resolve merge conflicts 2024-10-24 17:17:49 +05:30
laurenspriem
e969f8fa33 [mob][photos] Format 2024-10-24 17:10:35 +05:30
laurenspriem
39182fa9a4 [mob][photos] Enable local indexing by default 2024-10-24 17:09:11 +05:30
laurenspriem
1bf6b56f96 [mob][photos] Switch ML flags 2024-10-24 17:06:33 +05:30
Manav Rathi
18927c9e1c Notes on install
Ref: https://timoanttila.com/blog/install-xfce-to-hetzner-cloud
2024-10-24 16:55:10 +05:30
Saijo George
67c9d8b413 Update custom-icons.json for impact.com (#3820)
## Description

## Tests
2024-10-24 14:41:07 +05:30
laurenspriem
ee59fe8dcd [mob][photos] Toggle for local indexing 2024-10-24 14:29:39 +05:30
ashilkn
7be790d8ff [mob][photos] Bump up to v0.9.54 2024-10-24 14:20:08 +05:30
ashilkn
24bb6f28a9 Merge branch 'main' into deeplinks 2024-10-24 14:16:33 +05:30
Neeraj Gupta
70b90e8123 [mob] Bump version v0.9.53 (#3829)
## Description

## Tests
2024-10-24 12:14:42 +05:30
Neeraj Gupta
41a1d9042d [mob] Bump version v0.9.53 2024-10-24 12:14:11 +05:30
ashilkn
d45cb08fec [mob][photos] Remove duplicates and don't show files in ignored collections in Hierarchical search gallery 2024-10-24 11:52:44 +05:30
Neeraj Gupta
fb92cc49e4 [mob][auth] Fix detection of default locale (#3819)
## Description

## Tests
2024-10-24 11:23:38 +05:30
Neeraj Gupta
de435ecf33 [auth] Fix auto detection for default locale 2024-10-24 11:16:48 +05:30
Laurens Priem
e93f6b1c3b [mob][photos] Revert onnx preprocessing (#3818)
## Description

Reverting some changes that moved preprocessing inside ONNX because it's
giving memory issues.

## Tests

Tested in debug mode on my pixel 8.
2024-10-24 08:22:22 +05:30
KingLuc12
4668be96c1 Added Ubiquiti to "custom-icons.json" 2024-10-23 23:00:37 +01:00
KingLuc12
9b6a7881a5 Add files via upload 2024-10-23 22:50:24 +01:00
laurenspriem
77dc0ba6f0 [mob][photos] ML Lite initial commit 2024-10-23 22:43:28 +05:30
ashilkn
2ec911da06 [mob][photos] Fix files in group in HierarchicalSearchGallery not ordered by creation time + reduce iterations 2024-10-23 21:41:42 +05:30
ashilkn
5e56ec21b7 [mob][photos] Use better name for function 2024-10-23 21:39:11 +05:30
ashilkn
6a692ebc73 [mob][photos] Clear all file selections when filters are applied 2024-10-23 20:46:26 +05:30
ashilkn
43dc2794d7 [mob][photos] Keep selection sheet the same until the initial top level filter of the gallery is removed. Once removed, use GalleryType.searchResult for the selection sheet 2024-10-23 20:39:11 +05:30
ashilkn
802ba55016 [mob][photos] Group filter recommendations by type in appbar 2024-10-23 18:44:35 +05:30
ashilkn
e7525ff5ea [mob][photos] Elevate app bar which has filters when gallery is scroll underneath to it (only visible in light theme) 2024-10-23 18:21:39 +05:30
ashilkn
9983689c74 [mob][photos] Fade the left edge of applied filters in appbar so that the filters fade away to the left when scrolling 2024-10-23 18:06:09 +05:30
ashilkn
b7f23a74c3 [mob][photos] Add icons for TopLevelGenericFilter search results 2024-10-23 18:05:12 +05:30
ashilkn
7ed11779bd [mob][photos] Show a gallery's TopLevelGenericFiter too in all filters view 2024-10-23 17:58:17 +05:30
Neeraj Gupta
e25eac5d62 [mob] Lint fix 2024-10-23 17:39:02 +05:30
Neeraj Gupta
e4647c07d5 [mob] Fix autoLanguage detection 2024-10-23 17:25:57 +05:30
laurenspriem
3a8ec51674 [mob][photos] Revert onnx preprocessing 2024-10-23 17:05:13 +05:30
ashilkn
37f2b9f70e [mob][photos] Fix filters getting squished a bit because of it's size constrain and it's outer stroke width 2024-10-23 16:39:11 +05:30
ashilkn
f9d6c54004 [
mob][photos] Slight changes to UI in all filters view and in app bar and fix clipping issue of overflowing of widget content (of filter chip) by changing the design
2024-10-23 16:26:26 +05:30
ashilkn
3dabf7e89c [mob][photos] Make all filters button's UI better 2024-10-23 08:57:39 +05:30
ashilkn
9722cd5d67 [mob][photos] Create a bigger view that shows all applied and recommended filters (bottom sheet) and make changes related to it 2024-10-22 22:52:43 +05:30
ashilkn
8e7a560ad4 [mob][photos] Pass FileTypeFilter instead of TopLevelGenericFilter for file type search results 2024-10-22 21:28:50 +05:30
ashilkn
f62c4e3900 [mob][photos] Add UI change for face filter chip when filter is applied 2024-10-22 17:55:49 +05:30
ashilkn
f774a9a3c3 [mob][photos] Bug fix 2024-10-22 17:40:37 +05:30
ashilkn
1e868ac624 [mob][photos] Add 'isApplied' state to filters, change UI for applied filters 2024-10-22 17:17:00 +05:30
ashilkn
2d6bd7f5a5 [mob][photos] Only show most relevant filters in app bar as recommendation and capped to max 16 2024-10-22 15:20:48 +05:30
ashilkn
1701311be3 [mob][photos] Minor fix 2024-10-22 12:47:10 +05:30
ashilkn
da21dcbd9e [mob][photos] Show loading indicator till the image of face in face filter is ready 2024-10-22 12:35:58 +05:30
ashilkn
fa076305df [mob][photos] Add animation to changes in recommended filter in appbar 2024-10-21 15:44:53 +05:30
ashilkn
8a130b52c2 [mob][photos] Improve UI of appbar when there are added filters 2024-10-21 08:34:57 +05:30
ashilkn
f63e8b51d9 [mob][photos] Use service locators where ever necessary 2024-10-19 22:44:08 +05:30
ashilkn
9a07038bdf [mob][photos] Resolve merge conflicts and merge main 2024-10-19 22:40:17 +05:30
ashilkn
3716eb3d30 [mob][photos] Make MagicResultScreen hierarchical searchable 2024-10-19 22:22:06 +05:30
ashilkn
59333b700c [mob][photos] Make UI of Appbar and filter chips better 2024-10-19 22:01:07 +05:30
ashilkn
5111b98839 [mob][photos] Pass matchedUploadedIDs to MagicFilter right when recommendations are curated for MagicFilter to work when applied 2024-10-19 20:24:08 +05:30
ashilkn
f66e49313d [mob][photos] Show magic filter recommendations for a gallery using magic cache used for the discovery section 2024-10-19 19:26:43 +05:30
ashilkn
641aaf9d56 [mob][photos] Resolve merge conflicts and merge main 2024-10-18 20:27:42 +05:30
ashilkn
0fc63396b7 [mob][photos] Chore 2024-10-18 20:03:32 +05:30
ashilkn
0c185d3446 [mob][photos] Resolve merge conflicts and merge main 2024-10-18 19:04:21 +05:30
ashilkn
063d87e44a [mob][photos] Use HierarchicalSearchGallery in PeoplePage when searching so that the gallery updates when adding/removing filters 2024-10-18 18:57:13 +05:30
ashilkn
c8990d8f40 [mob][photos] Make filters useable (make them appear on appbar) in named people page 2024-10-18 09:50:10 +05:30
ashilkn
fd9269ccdf [mob][photos] Make sure AppliedFilters or RecommendedFilters widget is not used when a gallery is not hierarchical searchable 2024-10-18 09:41:13 +05:30
ashilkn
c7a692cb4d [mob][photos] Fix face thumbnail not appearing when filter is applied 2024-10-18 07:25:24 +05:30
ashilkn
288e987246 [mob][photos] Add more logging in filtering files 2024-10-18 07:13:48 +05:30
ashilkn
e616071395 [mob][photos] Optimize getting uploaded file IDs associated with personID and clusterID when applying face filters 2024-10-17 21:20:40 +05:30
ashilkn
2f54acab58 [mob][photos] Make face filtering work (yet to be optimized for performance) 2024-10-17 19:14:24 +05:30
ashilkn
1136d47c09 [mob][photos] Show face thumbnail and name of face if available in FaceFilterChip 2024-10-17 17:46:41 +05:30
Aman Raj Singh Mourya
191a03c6d0 [mob][photos] change accepted links from albums.ente.io to albums.ente.sh 2024-10-17 17:07:37 +05:30
ashilkn
0ef03389ab [mob][photos] Pass FaceFilter.name as null if face name is not available (when personId is null) instead of passing clusterID 2024-10-17 09:16:36 +05:30
ashilkn
c4d49f4176 [mob][photos] Use FaceFilterChip instead of GenericFilterChip where ever necessary 2024-10-17 09:05:30 +05:30
ashilkn
a7420be774 [mob][photos] Remove no more necessary abstract method 'resultType' in HierarchicalSearchFilter 2024-10-17 09:03:57 +05:30
ashilkn
6252753512 Merge branch 'main' into hierarchical_search 2024-10-17 08:47:00 +05:30
ashilkn
b9b9dac719 [mob][photos] Remove unused extension on ResultType 2024-10-17 08:45:36 +05:30
ashilkn
6facd67452 [mob][photos] Add more documentation about TopLevelGenericFilter 2024-10-17 08:28:50 +05:30
ashilkn
863ba6b955 [mob][photos] Clean up isSameFilter implementations 2024-10-17 08:25:12 +05:30
ashilkn
ea983dd76b [mob][photos] Remove toHierarchicalSearchFilter which is no longer used from HierarchicalSearchFilter 2024-10-14 15:45:05 +05:30
ashilkn
171e96976a [mob][photos] Attach a SearchResults's corresponding HierarchicalSearchFilter to it when ever a instance is created 2024-10-11 20:57:45 +05:30
ashilkn
4450018491 [mob][photos] Create a different filter chip widget for faces and a generic one for everything else 2024-10-11 08:45:24 +05:30
ashilkn
b9a99d89af [mob][photos] Create a custom filter chip for hierarchical search 2024-10-11 07:52:06 +05:30
ashilkn
f5cadb3b7a [mob][photos] Curate face filters and show in recommendations 2024-10-10 19:50:38 +05:30
ashilkn
bc90b6d980 [mob][photos] FaceFilter should accept either personId or clusterId 2024-10-10 19:29:49 +05:30
ashilkn
66a13392a9 [mob][photos] Make implementation of abstract fn isSameFilter() more accurate when the fn is used to compare two same sub-HierarchicalSearchFilter types 2024-10-10 17:36:21 +05:30
ashilkn
6c5b0a6578 [mob][photos] Chore 2024-10-10 10:09:19 +05:30
ashilkn
87ff4076b0 [mob][photos] Create FaceFilter class 2024-10-10 10:09:01 +05:30
ashilkn
0dd3e5d452 [mob][photos] Fix typo 2024-10-09 15:32:23 +05:30
Aman Raj Singh Mourya
86b70ab034 [mob][photos] hide "add photos" for deeplinks, will implement after v1 2024-10-09 14:41:04 +05:30
Aman Raj Singh Mourya
6ea51a70f5 [mob][photos] using ReceiveSharingIntent to listen to deeplink & showing loading dialog till the album is fetched 2024-10-08 16:38:27 +05:30
Aman Raj Singh Mourya
45ba65682c [mob][photos] hide owner avatar if file is from a public link 2024-10-08 13:32:15 +05:30
Aman Raj Singh Mourya
22737f139b [mob][photos] Hide file owner if file is a public shared file 2024-10-08 13:05:18 +05:30
ashilkn
7504e01bf7 [mob][photos] Enable hierarchical search in location screen 2024-10-07 20:14:46 +05:30
ashilkn
af8d630060 [mob][photos] Use GalleryAppBar widget on location screen 2024-10-07 20:05:46 +05:30
ashilkn
2611cdc480 [mob][photos] Only show what comes before '@' in the name of contacts filter 2024-10-07 18:37:22 +05:30
ashilkn
b68fdf3d15 [mob][photos] Fix 'cannot modify an unmodifiable set' bug 2024-10-07 18:33:35 +05:30
ashilkn
d91a710f18 [mob][photos] Add ResultType used in search a member of HierarchicalSerachFilter and make use of it in isSameFilter() for isSameFilter() to work when comparing other filters and TopLevelGenericFilters 2024-10-07 18:11:50 +05:30
ashilkn
f1535f901f [mob][photos] Pass better string for FileTypeFilter. Also, do it in such a way that name() of HierarchicalSearchFilter doesn't need a BuildContext parameter 2024-10-07 17:04:16 +05:30
ashilkn
5f2cc6f6c3 [mob][photos] Add initialFilter in search results page depending on the type of search result passed 2024-10-07 16:26:05 +05:30
ashilkn
e6590a7190 [mob][photos] Wrap GalleryFilesState over SharedPublicCollectionPage to fix error 2024-10-07 15:03:38 +05:30
ashilkn
27bce439c4 Merge branch 'main' into deeplinks 2024-10-07 14:24:51 +05:30
Ashil
4f19c40492 Media extension fix for deeplinks (#3584)
## Description

## Tests
2024-10-07 14:24:18 +05:30
ashilkn
aa9fbd281e [mob][photos] Create a top level generic filter to be used for search ResultTypes(s) for which we don't plan to keep a subtype of HierarchicalSearchFilter 2024-10-05 22:18:18 +05:30
ashilkn
fac18333ce [mob][photos] Improve performance when adding/removing filters during hierarchical search by using cached results of applied filters instead of iterating through all filters and files 2024-10-05 19:45:55 +05:30
ashilkn
42c9ae4caf [mob][photos] Remove dead code 2024-10-05 17:42:57 +05:30
Aman Raj Singh Mourya
0ace359983 [mob][photos] media_extension fix to support deeplinks 2024-10-05 17:04:09 +05:30
ashilkn
bbc894cfda [mob][photos] Add contacts filter in hierarchical search 2024-10-05 16:46:12 +05:30
ashilkn
d7eb0e9dc3 [mob][photos] Create ContactsFilter class 2024-10-05 16:14:55 +05:30
ashilkn
45e2ca52c9 Merge branch 'main' into hierarchical_search 2024-10-05 16:03:29 +05:30
ashilkn
05b14ac32e [mob][photos] Return false if file doesn't have location data on checking if a file matches a location filter 2024-10-04 15:38:57 +05:30
ashilkn
e2897b7d18 [mob][photos] Curate location filters in isolate 2024-10-04 15:31:16 +05:30
ashilkn
3427f1778e [mob][photos] Create LocationFilter class 2024-10-04 15:14:23 +05:30
ashilkn
4b72817864 [mob][photos] Make initialGalleryFilter non-nullable and make a a required parameter of SearchFilterDataProvider 2024-10-03 08:47:35 +05:30
ashilkn
acfe65bf37 [mob][photos] Enable hierarchical search in search results page 2024-10-03 08:41:17 +05:30
ashilkn
18a22c8014 [mob][photos] Handle and log failures in curating and applying filters 2024-10-03 07:51:15 +05:30
ashilkn
2c2c7f6c9e [mob][photos] Fix null check used on null value exception + refactor filtering of files 2024-10-03 07:47:05 +05:30
ashilkn
6aec2c5718 [mob][photos] Curate both album and fileType filters and add all to applied filters at once 2024-10-03 07:22:19 +05:30
ashilkn
38e9496b8c [mob][photos] Add comment 2024-10-03 07:09:37 +05:30
ashilkn
369bdc8f4c [mob][photos] Create function to curate file type filters 2024-10-03 07:08:04 +05:30
ashilkn
a29fd51855 [mob][photos] Create FileTypeFilter class for photos, videos and live photos filters 2024-10-02 11:08:51 +05:30
ashilkn
a105195481 [mob][photos] Make matchedUploadedIDs a property of HierarchicalSearchFilter so that it's a property of all filters that extend it 2024-10-02 10:49:23 +05:30
ashilkn
007f7aa5d6 [mob][photos] Create a new widget 'HierarchicalSearchGallery' and use it when the first filter is added instead of handling everything in the 'Gallery' widget
Using a separate gallery for Hierarchical Search makes it easier to plug this in in different galleries
2024-10-02 10:05:26 +05:30
Aman Raj Singh Mourya
2b856305b2 [mob][photos] skip deleted files 2024-10-01 21:05:18 +05:30
ashilkn
2292146706 [mob][photos] Refactor 2024-10-01 15:58:48 +05:30
ashilkn
60c718c7ed [mob][photos] Move filtering logic outside of gallery to reduce clutter in gallery file 2024-09-30 16:38:54 +05:30
ashilkn
b7f899cd88 [mob][photos] Fix incorrect order of files in _allGalleryFiles compared to file order in gallery 2024-09-30 16:04:12 +05:30
ashilkn
c27451f46b [mob][photos] Update all files in GalleryFilesState when filters are added in hierarchical search in a gallery 2024-09-30 16:02:27 +05:30
ashilkn
79e49d49d4 [mob][photos] Resolve merge conflicts and merge main 2024-09-30 13:01:35 +05:30
Aman Raj Singh Mourya
38311cfc47 [mob][photos] show error dialog when something goes wrong 2024-09-27 18:19:54 +05:30
Aman Raj Singh Mourya
ac656cfe9f [mob][photos] cached public collectionID 2024-09-27 17:09:26 +05:30
Aman Raj Singh Mourya
1bcacc921b [mob][photos] fixed album name not displaying and app bar fixes 2024-09-27 17:08:45 +05:30
ashilkn
2523a32e94 Merge branch 'main' into hierarchical_search 2024-09-26 09:50:26 +05:30
ashilkn
38ee4cd1da [mob][photos] Safely add filters to recommended list ensuring that the not any already existing filters in recommended or applied is added 2024-09-25 19:23:34 +05:30
ashilkn
8169bbe1fa [mob][photos] Curate new album filters on each new udpate to applied filters 2024-09-25 19:11:50 +05:30
ashilkn
17cf7fe6a4 [mob][photos] On applying the first filter on hierarchical search, add the initial gallery filter to applied filters
If we are on an album named 'Trip to Coorg' and another album filter is added, a functional  filter chip will get added to applied filters automatically
2024-09-25 15:41:07 +05:30
Aman Raj Singh Mourya
d6bed953a1 [mob][photos] made shared_public_collection to handle public link seprately 2024-09-25 15:18:17 +05:30
Aman Raj Singh Mourya
a8d1a80578 Merge branch 'main' into deeplinks 2024-09-25 13:24:20 +05:30
ashilkn
bd6fe03710 [mob][photos] Do not show up the initial gallery filter on hierarchical search's filter recommendations
For example, if we search for an album 'Trip to Coorg' and go in the album, 'Trip to Coorg' shouldn't come up in recommended filters
2024-09-25 13:14:54 +05:30
ashilkn
88891bf24e [mob][photos] Go back to search screen if all applied filters are de-selected 2024-09-25 11:55:07 +05:30
ashilkn
798c8f0782 [mob][photos] Enable use of hierarchical search in album page 2024-09-25 11:54:27 +05:30
Aman Raj Singh Mourya
bda3ec2e3a [mob][photos] added a new gallery type for shared public link 2024-09-25 01:04:23 +05:30
Aman Raj Singh Mourya
71e87ad2aa [mob][photos] Updated public_url to save shared public link data 2024-09-25 01:03:37 +05:30
ashilkn
1258558be8 [mob][photos] Improve curation of album filter recommendation 2024-09-24 19:19:33 +05:30
Aman Raj Singh Mourya
886d7e98d4 [mob][photos] minor changes 2024-09-24 18:35:04 +05:30
ashilkn
468386ede6 [mob][photos] Get just the album filters logic working on gallery 2024-09-24 18:19:55 +05:30
Aman Raj Singh Mourya
119ae6d345 [mob][photos] remove redundant logging 2024-09-23 20:43:08 +05:30
Aman Raj Singh Mourya
fd3991bab6 [mob][photos] updated public_url.dart to store additional information of public links 2024-09-21 19:29:07 +05:30
Aman Raj Singh Mourya
add3278c89 [mob][photos] fuction to handle deeplinks 2024-09-21 19:28:09 +05:30
Aman Raj Singh Mourya
130418e443 [mob][photos] add configurations for opening links in mobile app 2024-09-21 19:27:06 +05:30
ashilkn
6aebe8ad39 [mob][photos] Show applied filters in app bar of search result page (unpolished UI) 2024-09-21 18:03:16 +05:30
ashilkn
d7a08bed88 [mob][photos] chore 2024-09-21 18:00:09 +05:30
ashilkn
2b5bb5f338 [mob][photos] Create AppliedFilters widget 2024-09-21 17:59:37 +05:30
ashilkn
98aca5090b [mob][photos] Use better name for widget 2024-09-21 16:24:08 +05:30
ashilkn
d55559b811 [mob][photos] Show recommendations on the search results page 2024-09-21 16:17:12 +05:30
ashilkn
63649a25e4 [mob][photos] Create a MVP widget of recommendations row that can be plugged in to bottom of app bar, which will show curated recommendations of filters specific to a gallery 2024-09-21 16:05:35 +05:30
ashilkn
85fe1168a1 [mob][photos] Improvements to SearchFilterDataProvider 2024-09-21 15:01:18 +05:30
ashilkn
e8b2adb199 [mob][photos] Curate album filters for search result page (just getting the data without showing it on UI) 2024-09-20 19:38:29 +05:30
ashilkn
80c3106bfc [mob][photos] Write method to curate album filters for a list of EnteFiles 2024-09-20 19:36:21 +05:30
ashilkn
080aeeecdb [mob][photos] Add more fields in search filter models 2024-09-20 19:33:55 +05:30
ashilkn
72a40a63d9 [mob][photos] Create an inherited widget to store searchFilterDataProvider for gallery screens 2024-09-20 19:01:14 +05:30
ashilkn
6a735e1a6a [mob][photos] Create a SearchFilterDataProvider which will be used to update the recommended and applied filters list and make it possible to listen to applied and recommended state changes separately from it 2024-09-20 19:00:01 +05:30
ashilkn
a77e9aa37e [mob][photos] Create model for album filter 2024-09-19 15:18:33 +05:30
879 changed files with 48098 additions and 29835 deletions

4
.gitmodules vendored
View File

@@ -9,10 +9,6 @@
[submodule "auth/assets/simple-icons"]
path = auth/assets/simple-icons
url = https://github.com/simple-icons/simple-icons.git
[submodule "web/apps/photos/thirdparty/ffmpeg-wasm"]
path = web/apps/photos/thirdparty/ffmpeg-wasm
url = https://github.com/abhinavkgrd/ffmpeg.wasm.git
branch = master
[submodule "web/apps/photos/thirdparty/photoswipe"]
path = web/apps/photos/thirdparty/photoswipe
url = https://github.com/ente-io/PhotoSwipe.git

View File

@@ -66,16 +66,19 @@ best to start small. Consider some well-scoped changes, say like adding more
[custom icons to auth](auth/docs/adding-icons.md).
Each of the individual product/platform specific directories in this repository
have instructions on setting up a dev environment and making changes. The issues
and discussions (feature requests) labelled "good first issues" should be good
starting points. Once you have a bearing, you can head on to issues or
discussions labelled "help wanted".
have instructions on setting up a dev environment.
If you're planning on adding a new feature or making any other substantial
change, please [discuss it with
us](https://github.com/ente-io/ente/discussions). Discussing your idea with us
first ensures that everyone is on the same page before you start working on your
change.
For anything beyond trivial bug fixes, please use [features requests and
discussions](https://github.com/ente-io/ente/discussions) instead of performing
code changes directly.
> [!TIP]
>
> Please remember that code is a important, but small, part of the overall big
> picture that makes a product a joy to use. Something that's easy in code is
> not necessarily the right choice for the product as a whole. So we'll repeat -
> there are other ways to contribute than code that we'd request you to
> consider.
## Leave a review or star

View File

@@ -36,6 +36,13 @@
{
"title": "AscendEX"
},
{
"title": "authentik",
"altNames": [
"goauthentik"
],
"hex": "fd4b2d"
},
{
"title": "BaiduCloud",
"altNames": [
@@ -73,6 +80,10 @@
"币安"
]
},
{
"title": "Binance TR",
"slug": "binance_tr"
},
{
"title": "BinanceUS",
"slug": "binance_us",
@@ -127,6 +138,22 @@
"blockchain.com Exchange"
]
},
{
"title": "Bloom Host",
"slug": "bloom_host",
"altNames": [
"Bloom Host Billing"
]
},
{
"title": "Bluesky"
},
{
"title": "Booking",
"altNames": [
"Booking.com"
]
},
{
"title": "BorgBase",
"altNames": [
@@ -157,6 +184,12 @@
{
"title": "Capacities"
},
{
"title": "Carta",
"altNames": [
"Carta.com"
]
},
{
"title": "CERN"
},
@@ -171,6 +204,9 @@
{
"title": "CloudAMQP"
},
{
"title": "ClouDNS"
},
{
"title": "Cloudflare"
},
@@ -198,6 +234,9 @@
"Crypto com"
]
},
{
"title": "CSFloat"
},
{
"title": "DCS",
"altNames": [
@@ -210,6 +249,13 @@
{
"title": "deriv"
},
{
"title": "DigiFinex",
"altNames": [
"Digi Finex",
"Digifinex.com"
]
},
{
"title": "DirectAdmin"
},
@@ -296,6 +342,15 @@
"Government Gateway"
]
},
{
"title": "Government of Canada",
"slug": "canada_flag",
"altNames": [
"CRA",
"CRA/ARC",
"Canada Revenue Agency"
]
},
{
"title": "Guideline"
},
@@ -331,6 +386,10 @@
{
"title": "Infomaniak"
},
{
"title": "Impact.com",
"slug": "impact"
},
{
"title": "ING"
},
@@ -371,6 +430,20 @@
{
"title": "Kite"
},
{
"title": "KnownHost",
"altNames": [
"Known Host",
"KnownHost.com"
]
},
{
"title": "Ko-fi",
"altNames": [
"Ko fi",
"Kofi"
]
},
{
"title": "Koofr"
},
@@ -447,6 +520,10 @@
{
"title": "Microsoft"
},
{
"title": "Microsoft 365",
"slug": "microsoft365"
},
{
"title": "Migros"
},
@@ -568,6 +645,12 @@
{
"title": "pCloud"
},
{
"title": "PebbleHost",
"altNames": [
"Pebble Host"
]
},
{
"title": "Peerberry"
},
@@ -608,6 +691,13 @@
"qiniu"
]
},
{
"title": "Raindrop.io",
"slug": "raindrop_io",
"altNames": [
"Raindrop"
]
},
{
"title": "Real-Debrid",
"slug": "real_debrid"
@@ -625,7 +715,13 @@
]
},
{
"title": "Render"
"title": "Restorecord"
},
{
"title": "Restream",
"altNames": [
"restream.io"
]
},
{
"title": "Revolt",
@@ -735,6 +831,21 @@
"GoTeleport"
]
},
{
"title": "tencent cloud",
"slug": "tencent_cloud",
"altNames": [
"腾讯云",
"tencentcloud"
]
},
{
"title": "Terabit",
"altNames": [
"Terabit Hosting",
"terabit.io"
]
},
{
"title": "Termius",
"hex": "858585"
@@ -763,6 +874,15 @@
{
"title": "Tresorit"
},
{
"title": "TRowePrice",
"altNames": [
"T Rowe Price",
"TRowe Price",
"T Rowe Price Group",
"T Rowe Price Group, Inc"
]
},
{
"title": "Tweakers"
},
@@ -777,6 +897,15 @@
"Twitch tv"
]
},
{
"title": "Ubiquiti",
"slug": "ubiquiti",
"altNames": [
"Unifi SSO",
"Unifi",
"Ubiquiti SSO"
]
},
{
"title": "Ubisoft"
},
@@ -812,6 +941,10 @@
{
"title": "Wealthsimple"
},
{
"title": "WEB.DE",
"slug": "web_de"
},
{
"title": "WHMCS"
},

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 500 500">
<path fill="#0085ff" d="M27.672 29.228C13.737 33.12 7.077 40.088 2.364 55.97c-2.562 8.71-2.46 35.862.102 66.089a378.9 378.9 0 0 1 1.025 11.783c.41 4.509.922 9.837 1.127 11.784.205 1.947.615 7.275 1.024 11.783.615 8.607 2.357 24.899 3.074 29.202.205 1.435.615 5.328 1.025 8.71.615 5.43 1.332 10.041 2.971 17.521 1.128 5.533 6.456 17.01 11.374 24.591 11.066 17.112 28.792 30.945 48.158 37.81 2.869.922 6.045 2.151 7.172 2.664 3.074 1.332 18.546 4.713 25.616 5.635 3.382.41 11.579.82 18.137.82 6.557.102 11.68.41 11.27.717-.614.41-6.66 1.742-20.185 4.406-1.127.205-4.816 1.127-8.197 2.152-3.381.922-7.48 2.05-9.222 2.459-5.123 1.435-18.443 6.968-25.103 10.554-9.325 5.02-17.727 12.193-22.44 19.263-5.123 7.685-6.25 11.476-6.967 22.235-1.23 18.443 9.529 42.112 31.763 69.778 22.747 28.382 45.29 46.109 67.934 53.69 9.017 2.972 23.874 3.177 31.661.41 18.444-6.557 34.12-23.464 48.466-52.358 7.89-15.882 19.366-46.519 25.308-68.036 1.947-6.866 2.972-7.788 3.997-3.484.922 3.996 2.766 10.246 9.324 32.48 15.164 50.618 31.251 77.259 52.871 87.095 7.583 3.484 11.169 4.099 22.44 3.996 11.066-.102 20.698-2.766 33.3-9.324 9.427-4.918 27.358-16.497 30.227-19.673.308-.307 2.562-2.152 5.124-4.201 5.328-4.303 15.472-14.652 21.005-21.415 2.05-2.562 4.508-5.533 5.43-6.66 2.87-3.381 12.501-18.341 12.501-19.366 0-.512.615-1.742 1.434-2.561.82-.923 2.87-5.84 4.714-10.862 11.066-31.661-1.332-57.175-36.375-74.49-13.32-6.661-29.92-12.092-44.572-14.756-7.48-1.434-5.533-1.947 6.968-2.049 26.026-.102 47.953-5.43 67.626-16.394 24.694-13.833 43.137-40.576 45.801-66.5.41-3.893.82-7.377 1.025-7.684.205-.513.512-2.87 2.05-17.214.307-2.357.717-6.25 1.024-8.71a816.84 816.84 0 0 1 1.127-11.476c.308-3.996.717-8.811.922-10.758.205-1.947.718-7.788 1.025-12.808.41-5.123.82-10.861 1.025-12.808 2.049-20.903 2.664-49.183 1.332-57.175-2.664-15.677-8.198-25.309-17.214-29.92-20.8-10.656-46.314-4.098-83.713 21.415-13.423 9.222-16.6 11.681-25.411 19.059-32.686 27.665-69.983 70.187-99.083 113.222-9.324 13.73-22.337 35.248-22.337 36.887 0 2.357-1.845.718-3.996-3.688-2.767-5.943-13.833-23.67-21.518-34.736-6.558-9.529-21.62-30.227-23.157-31.866a242.786 242.786 0 0 1-3.586-4.508 242.855 242.855 0 0 0-3.586-4.509c-.615-.615-3.996-4.713-7.583-9.222-12.705-15.574-37.911-42.01-52.359-54.92-1.946-1.742-4.508-3.996-5.635-5.021C107.287 55.151 69.99 33.224 51.546 29.33c-5.84-1.332-19.365-1.332-23.874-.102z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="323" height="260">
<path d="M0 0 C2.54280617 -0.00322238 5.08561216 -0.00658715 7.62841797 -0.01008606 C12.94027204 -0.01604441 18.25210908 -0.0179728 23.56396484 -0.01733398 C29.63504045 -0.01673551 35.70602655 -0.02725539 41.77707958 -0.04307765 C47.69411481 -0.05792837 53.6111158 -0.06131667 59.52816772 -0.06072426 C62.00914881 -0.06188842 64.49013087 -0.06621985 66.97109985 -0.07405663 C93.68181546 -0.15052263 121.9429312 -0.21514162 146.6875 11.16796875 C147.5839624 11.57740723 147.5839624 11.57740723 148.49853516 11.99511719 C158.43485513 16.62677806 166.04173988 22.35671599 173.6875 30.16796875 C174.48800781 30.93625 175.28851563 31.70453125 176.11328125 32.49609375 C194.05105697 50.712695 197.15590312 74.65080731 196.98471069 99.03547668 C196.67643329 123.04695525 187.3698842 142.87862635 171.0625 160.29296875 C161.16511894 169.80791623 147.49135596 179.29180348 133.63232422 181.49462891 C131.56482236 182.00483226 131.56482236 182.00483226 130.45825195 183.83520508 C130.11753662 184.5495874 129.77682129 185.26396973 129.42578125 186 C129.03382568 186.792854 128.64187012 187.58570801 128.23803711 188.40258789 C127.82948486 189.25328857 127.42093262 190.10398926 127 190.98046875 C122.90931947 199.10803497 118.55825733 206.17501356 112.6875 213.16796875 C111.61048828 214.45380859 111.61048828 214.45380859 110.51171875 215.765625 C88.48096692 241.08338065 59.91845952 254.78769402 26.6875 258.16796875 C20.98341629 258.51073898 15.27482269 258.51009072 9.5625 258.48046875 C8.79403748 258.47798126 8.02557495 258.47549377 7.23382568 258.47293091 C-28.39281197 258.29492256 -60.17611795 248.13707604 -86 222.91796875 C-117.72300344 190.81731051 -124.68949851 146.11311077 -124.68310547 102.8034668 C-124.6875095 99.47328641 -124.72408667 96.14440378 -124.76171875 92.81445312 C-124.89908822 66.59572752 -118.49428944 43.79369285 -100.3125 24.16796875 C-72.94000538 -1.4516075 -35.04854413 0.01053577 0 0 Z " fill="#FDFDFD" transform="translate(125.3125,0.83203125)"/>
<path d="M0 0 C2.54280617 -0.00322238 5.08561216 -0.00658715 7.62841797 -0.01008606 C12.94027204 -0.01604441 18.25210908 -0.0179728 23.56396484 -0.01733398 C29.63504045 -0.01673551 35.70602655 -0.02725539 41.77707958 -0.04307765 C47.69411481 -0.05792837 53.6111158 -0.06131667 59.52816772 -0.06072426 C62.00914881 -0.06188842 64.49013087 -0.06621985 66.97109985 -0.07405663 C93.68181546 -0.15052263 121.9429312 -0.21514162 146.6875 11.16796875 C147.5839624 11.57740723 147.5839624 11.57740723 148.49853516 11.99511719 C158.43485513 16.62677806 166.04173988 22.35671599 173.6875 30.16796875 C174.48800781 30.93625 175.28851563 31.70453125 176.11328125 32.49609375 C194.05105697 50.712695 197.15590312 74.65080731 196.98471069 99.03547668 C196.67643329 123.04695525 187.3698842 142.87862635 171.0625 160.29296875 C161.16511894 169.80791623 147.49135596 179.29180348 133.63232422 181.49462891 C131.56482236 182.00483226 131.56482236 182.00483226 130.45825195 183.83520508 C130.11753662 184.5495874 129.77682129 185.26396973 129.42578125 186 C129.03382568 186.792854 128.64187012 187.58570801 128.23803711 188.40258789 C127.82948486 189.25328857 127.42093262 190.10398926 127 190.98046875 C122.90931947 199.10803497 118.55825733 206.17501356 112.6875 213.16796875 C111.61048828 214.45380859 111.61048828 214.45380859 110.51171875 215.765625 C88.48096692 241.08338065 59.91845952 254.78769402 26.6875 258.16796875 C20.98341629 258.51073898 15.27482269 258.51009072 9.5625 258.48046875 C8.79403748 258.47798126 8.02557495 258.47549377 7.23382568 258.47293091 C-28.39281197 258.29492256 -60.17611795 248.13707604 -86 222.91796875 C-117.72300344 190.81731051 -124.68949851 146.11311077 -124.68310547 102.8034668 C-124.6875095 99.47328641 -124.72408667 96.14440378 -124.76171875 92.81445312 C-124.89908822 66.59572752 -118.49428944 43.79369285 -100.3125 24.16796875 C-72.94000538 -1.4516075 -35.04854413 0.01053577 0 0 Z M-36.9140625 21.43359375 C-38.11208055 21.51490665 -38.11208055 21.51490665 -39.33430099 21.59786224 C-59.87532769 23.03702093 -75.91541819 29.0329654 -90.28125 44.25390625 C-109.07937063 66.43239067 -105.57544337 100.41897449 -103.5625 127.48046875 C-100.67806578 160.87568918 -89.45526266 193.36884095 -63.40625 215.703125 C-46.11461633 229.47966647 -24.75667842 237.18292476 -2.703125 237.40625 C-1.90239563 237.41604385 -1.10166626 237.42583771 -0.27667236 237.43592834 C31.40210244 237.74407943 58.5682937 234.42601899 83.6875 213.16796875 C84.57501953 212.49894531 84.57501953 212.49894531 85.48046875 211.81640625 C99.92688668 200.62986885 109.44195114 181.91739525 115.6875 165.16796875 C115.6875 164.50796875 115.6875 163.84796875 115.6875 163.16796875 C116.63625 163.22984375 117.585 163.29171875 118.5625 163.35546875 C132.95828384 163.24053235 147.65575489 153.81755214 157.6875 144.16796875 C172.69867383 128.52027871 177.1423516 109.69666423 176.90234375 88.73828125 C176.40533008 70.41977737 169.3070055 54.18127534 156.0625 41.48046875 C128.30854933 17.93166212 89.40490962 20.03712213 55.1015625 19.96484375 C54.1655357 19.96201637 53.2295089 19.959189 52.26511765 19.95627594 C47.29881276 19.9414396 42.3325357 19.93211582 37.36621094 19.92773438 C33.3625359 19.92338159 29.35908023 19.90959136 25.35546875 19.88671875 C4.55642016 19.77063981 -16.16158136 19.92055353 -36.9140625 21.43359375 Z " fill="#FDFDFD" transform="translate(125.3125,0.83203125)"/>
<path d="M0 0 C4.0210469 0.01922649 8.04204837 0.0231668 12.06313515 0.02671432 C16.96746392 0.03191701 21.87175453 0.0463432 26.77606201 0.06115723 C27.66865345 0.06303795 28.56124489 0.06491867 29.48088455 0.06685638 C104.8138903 0.27266545 104.8138903 0.27266545 131.51824951 25.28381348 C146.00743215 40.30240856 148.80733183 59.88073551 148.57684326 79.86193848 C148.40676974 86.00676871 147.47862433 91.48394134 145.36199951 97.26428223 C145.01008545 98.26459473 144.65817139 99.26490723 144.29559326 100.29553223 C141.58482813 107.38109653 138.02089666 113.29886827 133.36199951 119.26428223 C132.85153076 119.95135254 132.34106201 120.63842285 131.81512451 121.34631348 C122.87990418 132.55957266 108.37551958 140.69513688 94.36199951 143.26428223 C91.99868361 143.39507643 89.73161448 143.36301618 87.36199951 143.26428223 C87.19909424 143.87666748 87.03618896 144.48905273 86.86834717 145.11999512 C85.11048486 151.38021067 82.80074198 156.97474004 79.73699951 162.70178223 C79.29968506 163.52581543 78.86237061 164.34984863 78.4118042 165.19885254 C74.73551439 171.93915894 70.52328772 177.5676745 65.36199951 183.26428223 C64.89922607 183.86756348 64.43645264 184.47084473 63.95965576 185.09240723 C49.47077198 203.94116789 24.33449634 213.53715386 1.64834595 216.98568726 C-4.74743651 217.76502358 -11.1953617 217.70435182 -17.62872314 217.65539551 C-20.13627476 217.63929331 -22.64221551 217.65535698 -25.14971924 217.67443848 C-49.65501476 217.70824096 -72.66730829 211.29352564 -91.63800049 195.26428223 C-92.8406958 194.28008301 -92.8406958 194.28008301 -94.06768799 193.27600098 C-119.10785027 171.94115866 -129.00627857 139.52551634 -131.82550049 107.76428223 C-136.63221747 45.60381817 -136.63221747 45.60381817 -118.39581299 24.20959473 C-117.81573486 23.5676416 -117.23565674 22.92568848 -116.63800049 22.26428223 C-116.14042236 21.6635791 -115.64284424 21.06287598 -115.13018799 20.44396973 C-102.43285769 6.21530312 -83.29710537 2.75552416 -65.23956299 1.52990723 C-63.99376402 1.43907742 -63.99376402 1.43907742 -62.72279739 1.34641266 C-41.83021959 -0.1566744 -20.93488238 -0.11960086 0 0 Z M-60.07330322 24.16931152 C-61.09852868 24.2489832 -62.12375414 24.32865488 -63.18004704 24.41074085 C-77.00845239 25.59515547 -91.10367573 27.98067259 -101.01300049 38.57678223 C-110.24587232 50.49605462 -110.04439324 65.31049838 -110.01300049 79.70178223 C-110.01345367 80.50920868 -110.01390686 81.31663513 -110.01437378 82.14852905 C-109.97746532 104.67128976 -107.8656026 128.00449845 -98.88800049 148.88928223 C-98.53802002 149.70832031 -98.18803955 150.5273584 -97.82745361 151.37121582 C-95.09768008 157.57737817 -91.97126085 163.02383596 -87.63800049 168.26428223 C-86.78528564 169.39156738 -86.78528564 169.39156738 -85.91534424 170.54162598 C-74.84904372 184.28639414 -56.78325281 191.95760765 -39.63800049 194.26428223 C-34.06896395 194.72523809 -28.49279335 194.73905875 -22.90802002 194.71032715 C-20.4044088 194.70183786 -17.90310592 194.73066241 -15.39971924 194.7623291 C-1.4111781 194.82463695 13.39607291 193.41506302 25.86199951 186.51428223 C26.51233154 186.1706665 27.16266357 185.82705078 27.83270264 185.47302246 C45.76119889 175.70092377 59.14034743 158.33058735 65.10614014 138.83215332 C66.65815977 133.34173031 68.03768132 127.81352704 69.36199951 122.26428223 C70.5105542 122.23850098 71.65910889 122.21271973 72.84246826 122.18615723 C89.25221041 121.65612451 103.08201623 118.5830522 114.73309326 106.22912598 C124.98158848 93.86703222 126.57244625 79.77313106 125.36199951 64.26428223 C124.25712996 56.0053823 121.59738055 49.7270971 116.36199951 43.26428223 C115.90567139 42.66100098 115.44934326 42.05771973 114.97918701 41.43615723 C106.00717163 31.00795087 91.41642311 27.13140428 78.36199951 25.26428223 C77.02038002 25.01923698 77.02038002 25.01923698 75.6516571 24.76924133 C71.91333955 24.19541338 68.19525137 23.91442452 64.42279053 23.71228027 C63.64398057 23.67024066 62.86517061 23.62820105 62.06276035 23.5848875 C51.84299806 23.08287388 41.61903966 23.0999366 31.38934326 23.09631348 C29.21051513 23.0930874 27.03168721 23.0897224 24.8528595 23.08622742 C20.31040954 23.08028359 15.76797847 23.07838256 11.2255249 23.07897949 C5.47995176 23.07908079 -0.26549691 23.06544066 -6.01104069 23.04820728 C-10.50622586 23.03694452 -15.0013823 23.03506461 -19.49658012 23.03558922 C-21.61110296 23.03442998 -23.72562707 23.03012825 -25.84013557 23.02225685 C-37.29303826 22.98361158 -48.6517746 23.27581235 -60.07330322 24.16931152 Z " fill="#222222" transform="translate(153.63800048828125,20.7357177734375)"/>
<path d="M0 0 C1.35857222 0.7254263 2.69428007 1.49576426 4 2.3125 C4.65742187 2.72113281 5.31484375 3.12976563 5.9921875 3.55078125 C9.28920162 5.76019113 11.85613423 7.90753671 14 11.3125 C17.37685097 9.8446346 19.61214759 7.92270997 22.25 5.375 C29.90031292 -1.44591006 36.06662986 -2.28755463 46.31640625 -2.0234375 C56.45286385 -1.09900977 63.25727312 3.87224965 70 11.3125 C76.91029016 20.67851311 79.1616053 29.74587701 78 41.3125 C73.24255207 64.40690745 57.47949388 81.29735894 38.30078125 94.15625 C37.21152344 94.8678125 36.12226563 95.579375 35 96.3125 C33.96230469 97.0034375 32.92460937 97.694375 31.85546875 98.40625 C19.0058113 106.80067146 19.0058113 106.80067146 11 105.3125 C-10.98227742 96.73759509 -33.45456844 76.30764159 -43.4765625 55.203125 C-48.11963646 43.94561607 -49.3422345 31.41401025 -45.0625 19.8125 C-40.18731436 9.93887965 -33.243791 3.28797846 -23 -0.6875 C-16.13548782 -2.97567073 -6.68983172 -2.87037762 0 0 Z " fill="#FF5A17" transform="translate(121,74.6875)"/>
<path d="M0 0 C7.62988387 1.99349999 11.91910105 6.29924697 16.13671875 12.734375 C18.40839779 18.69624759 17.88963136 27.56784264 16.3125 33.65234375 C13.64789323 39.43676095 9.24615056 42.74733911 3.75 45.8125 C-0.81653159 47.25856834 -5.26111678 48.00810414 -10 47 C-12.38845831 45.34390665 -13.79844446 44.03102932 -14.36903381 41.11225891 C-14.51386976 38.7208417 -14.52794694 36.36048646 -14.49609375 33.96484375 C-14.49754898 33.08977676 -14.49900421 32.21470978 -14.50050354 31.31312561 C-14.49884598 29.46644759 -14.48730062 27.61975556 -14.46655273 25.77319336 C-14.43756561 22.94390362 -14.44595258 20.11648411 -14.45898438 17.28710938 C-14.45274777 15.49217838 -14.44435744 13.69725331 -14.43359375 11.90234375 C-14.43652939 11.05542465 -14.43946503 10.20850555 -14.44248962 9.33592224 C-14.34745355 3.43414071 -14.34745355 3.43414071 -12.62367249 1.2802887 C-9.12922644 -1.47513139 -4.18738864 -0.49329344 0 0 Z " fill="#212121" transform="translate(237,71)"/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="904" height="904">
<path d="M0 0 C1.11288391 0.00060425 2.22576782 0.0012085 3.37237549 0.00183105 C19.19099691 0.02517285 34.84917119 0.19185902 50.5625 2.1875 C52.2007373 2.38883545 52.2007373 2.38883545 53.87207031 2.59423828 C144.11102555 13.92744782 231.51339069 51.17412862 298.98046875 112.8515625 C300.37469497 114.11290483 301.77481127 115.36842668 303.20581055 116.58789062 C309.19714778 121.71020777 314.78307669 127.22194476 320.3527832 132.79248047 C321.98825882 134.42577448 323.63157708 136.0508847 325.27539062 137.67578125 C331.09001224 143.45977566 336.53034336 149.35895875 341.6472168 155.78417969 C343.24543187 157.78963912 344.87613176 159.73578404 346.57421875 161.65625 C405.79203624 228.64193707 442.65605654 320.29719472 449.5625 409.1875 C449.64862549 410.24493408 449.73475098 411.30236816 449.82348633 412.3918457 C450.72419906 424.79729885 450.76142247 437.19135266 450.75 449.625 C450.74959213 451.29133484 450.74959213 451.29133484 450.74917603 452.99133301 C450.73133919 468.81731301 450.48400796 484.46060387 448.5625 500.1875 C448.46598145 501.05342773 448.36946289 501.91935547 448.27001953 502.81152344 C438.14431989 593.02834817 399.26877576 681.47431329 337.8984375 748.60546875 C336.63709517 749.99969497 335.38157332 751.39981127 334.16210938 752.83081055 C329.03979223 758.82214778 323.52805524 764.40807669 317.95751953 769.9777832 C316.32422552 771.61325882 314.6991153 773.25657708 313.07421875 774.90039062 C307.29022434 780.71501224 301.39104125 786.15534336 294.96582031 791.2722168 C292.96036088 792.87043187 291.01421596 794.50113176 289.09375 796.19921875 C222.23274492 855.30681276 130.17937532 892.30230102 41.5625 899.1875 C40.50506592 899.27362549 39.44763184 899.35975098 38.3581543 899.44848633 C25.95279899 900.34919196 13.55857494 900.38745456 1.125 900.375 C0.01211609 900.37439575 -1.10076782 900.3737915 -2.24737549 900.37316895 C-18.06823152 900.34982385 -33.7211673 900.17158591 -49.4375 898.1875 C-50.50838867 898.05859375 -51.57927734 897.9296875 -52.68261719 897.796875 C-144.47214559 886.52218741 -229.08903921 848.15294951 -298.4375 787.1875 C-299.34113281 786.39730469 -300.24476563 785.60710938 -301.17578125 784.79296875 C-307.85140813 778.81292094 -314.22766301 772.52473887 -320.58743286 766.21279907 C-321.59508155 765.21319029 -322.60420601 764.21506645 -323.61495972 763.21859741 C-329.60908412 757.30024829 -335.24089687 751.22111789 -340.48193359 744.61669922 C-342.37137958 742.2696346 -344.34074007 740.0343426 -346.375 737.8125 C-391.43715685 687.50642352 -420.73249017 621.85371633 -437.4375 557.1875 C-437.83966718 555.68354652 -438.24198334 554.17963287 -438.64453125 552.67578125 C-443.69584874 532.77238285 -446.83696415 511.65075455 -448.4375 491.1875 C-448.56668823 489.60352417 -448.56668823 489.60352417 -448.69848633 487.98754883 C-449.59918104 475.58073986 -449.63745601 463.18502073 -449.625 450.75 C-449.62439575 449.63711609 -449.6237915 448.52423218 -449.62316895 447.37762451 C-449.59982385 431.55676848 -449.42158591 415.9038327 -447.4375 400.1875 C-447.30859375 399.11661133 -447.1796875 398.04572266 -447.046875 396.94238281 C-440.4868699 343.53604502 -425.54073226 289.91173527 -399.33984375 242.64453125 C-397.63812667 239.55208851 -396.08334006 236.43385498 -394.5625 233.25 C-381.20876689 206.4333752 -362.4962862 181.56702106 -342.94384766 158.98095703 C-341.8152422 157.63723974 -340.71528861 156.26936853 -339.63037109 154.89013672 C-333.44070728 147.07610164 -326.61041352 140.05423723 -319.54541016 133.03466797 C-317.56568576 131.0656685 -315.59689246 129.08619273 -313.62890625 127.10546875 C-307.25451675 120.7248322 -300.85627204 114.61259775 -293.75146484 109.04223633 C-291.36709203 107.13106516 -289.15330692 105.1029816 -286.9375 103 C-279.31894602 96.05295318 -270.796479 90.19951996 -262.4375 84.1875 C-261.02597656 83.16462891 -261.02597656 83.16462891 -259.5859375 82.12109375 C-229.85439671 60.92076827 -197.38904037 43.55411722 -163.4375 30.1875 C-162.52548828 29.8260791 -161.61347656 29.4646582 -160.67382812 29.09228516 C-122.51432036 14.14110403 -81.30867967 4.38424409 -40.4375 1.1875 C-38.85352417 1.05831177 -38.85352417 1.05831177 -37.23754883 0.92651367 C-24.83073986 0.02581896 -12.43502073 -0.01245601 0 0 Z " fill="#000000" transform="translate(451.4375,1.8125)"/>
<path d="M0 0 C233.85843373 0 233.85843373 0 270 13 C271.20011719 13.42796875 272.40023438 13.8559375 273.63671875 14.296875 C289.44811188 20.27865604 304.081328 28.05350622 317 39 C318.22589844 39.99966797 318.22589844 39.99966797 319.4765625 41.01953125 C344.81574688 62.39674693 356.76928326 95.10294351 359.80371094 127.25927734 C361.0036314 144.01339073 360.22261787 160.53401268 357 177 C356.69255859 178.75957031 356.69255859 178.75957031 356.37890625 180.5546875 C350.99149974 207.92672804 332.75342874 232.71081084 309.8984375 248.17578125 C286.34475375 263 286.34475375 263 279 263 C286.9944143 277.39508684 295.1117491 291.70380211 303.4375 305.91015625 C309.04206461 315.47534172 314.56226164 325.08936946 320.09570312 334.69580078 C322.01506662 338.02614252 323.93682353 341.35509148 325.859375 344.68359375 C331.61613159 354.65143316 337.36365676 364.6239207 343.0625 374.625 C347.84252943 383.01048241 352.69381747 391.3528543 357.56518555 399.68554688 C363.8788019 410.49052519 370.13330951 421.32933469 376.37451172 432.17626953 C377.82175919 434.69036749 379.27175921 437.2028511 380.72265625 439.71484375 C381.4611125 440.99729508 382.19941203 442.27983668 382.9375 443.5625 C383.54464844 444.61566406 384.15179687 445.66882813 384.77734375 446.75390625 C386 449 386 449 386 450 C368.40636948 450.30399394 350.81356086 450.53307186 333.21790314 450.67355824 C325.04736936 450.74053018 316.87846926 450.83178743 308.70898438 450.98071289 C301.58637502 451.1104922 294.46494869 451.19420178 287.34118986 451.22315043 C283.57013155 451.24006961 279.80245662 451.27966279 276.03248596 451.37449074 C272.47889243 451.46314684 268.93005216 451.48988228 265.37545776 451.47039986 C263.45838506 451.47564986 261.54182457 451.54542453 259.62609863 451.61746216 C255.98576831 451.56115318 253.37717104 451.37603377 250 450 C246.45988364 446.00478726 244.28662185 441.83198107 242 437 C241.1754463 435.52668234 240.34184823 434.05826327 239.48828125 432.6015625 C238.76023327 431.2775707 238.03500825 429.95202298 237.3125 428.625 C236.45780129 427.07249249 235.602292 425.52043103 234.74609375 423.96875 C234.07876221 422.75832031 234.07876221 422.75832031 233.39794922 421.5234375 C230.91580094 417.04291277 228.39622559 412.58362075 225.875 408.125 C225.33456055 407.16916016 224.79412109 406.21332031 224.23730469 405.22851562 C219.53151113 396.91776268 214.78647131 388.62956921 210.04129028 380.34127808 C204.08768973 369.93861815 198.21662094 359.49109588 192.37109375 349.02734375 C184.34641457 334.66629451 176.22855735 320.35765384 168.04443359 306.08691406 C167.58633301 305.28737305 167.12823242 304.48783203 166.65625 303.6640625 C166.26244141 302.97779785 165.86863281 302.2915332 165.46289062 301.58447266 C163.2847522 297.73637964 161.14740447 293.86532805 159 290 C149.1 289.67 139.2 289.34 129 289 C129 342.13 129 395.26 129 450 C86.43 450 43.86 450 0 450 C0 301.5 0 153 0 0 Z " fill="#FEFEFE" transform="translate(283,227)"/>
<path d="M0 0 C77.16082803 0 77.16082803 0 93.5234375 14.3515625 C105.35605673 27.56152365 106.80173357 42.68365139 106.15673828 59.62207031 C105.26854826 73.09710268 100.03099568 85.35817152 90.2265625 94.6875 C65.74626402 114.51964054 28.01100936 108 0 108 C0 72.36 0 36.72 0 0 Z " fill="#000000" transform="translate(412,324)"/>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><defs><style>.cls-1{fill:#fd4b2d;}</style></defs><rect class="cls-1" x="546.66" y="275.34" width="34.99" height="99.97"/><rect class="cls-1" x="637.66" y="271.13" width="34.99" height="78.19"/><path class="cls-1" d="M127.64,385.31a127.57,127.57,0,0,0-112.13,66.9H74.82c26.27-22.67,64.42-29.28,92,0h62.8C205.11,419.06,168.36,385.31,127.64,385.31Z"/><path class="cls-1" d="M212.39,512.53C130.55,683.65-12.89,537.81,74.82,452.21H15.51C-31,533.33,33.3,642.73,127.64,640.24c73,0,133.2-108.3,133.2-127.46,0-8.47-11.78-34.33-31.2-60.57h-62.8C187.65,471.08,205.81,498.56,212.39,512.53Zm2.17-5h0Z"/><path class="cls-1" d="M999.94,274.11V725.89c0,86.58-70.42,157.06-157.05,157.06H776.22V729.12H457.88V883H391.22c-86.64,0-157.06-70.48-157.06-157.06V583.81H738.87V312.11H495.24V464.76H234.16V274.11a151.29,151.29,0,0,1,1.06-18,154.4,154.4,0,0,1,3.88-21.15c.58-2.23,1.23-4.46,1.88-6.64a13.66,13.66,0,0,1,.52-1.64c.36-1.12.71-2.17,1.06-3.23s.76-2.17,1.18-3.23c.47-1.23.88-2.41,1.35-3.58s1-2.35,1.47-3.53a159,159,0,0,1,14.27-26.49c.06-.06.12-.17.17-.23,1.41-2.06,2.88-4.11,4.41-6.17,1.29-1.7,2.58-3.35,3.88-5,1.52-1.82,3.11-3.7,4.69-5.46s3.12-3.47,4.76-5.11l.18-.18a36.53,36.53,0,0,1,2.64-2.64,159.75,159.75,0,0,1,18.68-15.63c1.76-1.29,3.64-2.52,5.52-3.76,2.11-1.35,4.23-2.64,6.4-3.93,4.11-2.41,8.28-4.64,12.63-6.64,1.35-.64,2.76-1.29,4.11-1.88a152.81,152.81,0,0,1,18.38-6.63c2.41-.71,4.82-1.35,7.29-1.94,1.17-.3,2.35-.59,3.58-.82a158.5,158.5,0,0,1,21.26-3.12l3.12-.17c.52,0,1-.06,1.52-.06,2.35-.12,4.76-.18,7.17-.18H842.89c2.4,0,4.81.06,7.16.18.53,0,1,.06,1.53.06l3.11.17A158.26,158.26,0,0,1,876,120.58c1.24.23,2.41.52,3.59.82,2.46.59,4.87,1.23,7.28,1.94A152.81,152.81,0,0,1,905.2,130c1.35.59,2.76,1.24,4.11,1.88,4.35,2,8.52,4.23,12.63,6.64,2.18,1.29,4.29,2.58,6.4,3.93,1.88,1.24,3.76,2.47,5.52,3.76a157.53,157.53,0,0,1,21.5,18.45c1.65,1.64,3.23,3.34,4.76,5.11s3.17,3.64,4.7,5.46c1.29,1.64,2.58,3.29,3.87,5,1.53,2.06,3,4.11,4.41,6.17.06.06.12.17.18.23a159.71,159.71,0,0,1,14.27,26.49c.47,1.18,1,2.35,1.47,3.53s.88,2.35,1.35,3.58c.41,1.06.82,2.11,1.17,3.23s.71,2.11,1.06,3.23a15.74,15.74,0,0,1,.53,1.64c.64,2.18,1.29,4.41,1.88,6.64a155.92,155.92,0,0,1,3.87,21.15A151.29,151.29,0,0,1,999.94,274.11Z"/><path class="cls-1" d="M973.27,186.59H260.84A157.05,157.05,0,0,1,391.2,117.07H842.9A157.08,157.08,0,0,1,973.27,186.59Z"/><path class="cls-1" d="M998.94,256.1H235.16a155.35,155.35,0,0,1,25.68-69.51H973.27A155.34,155.34,0,0,1,998.94,256.1Z"/><path class="cls-1" d="M1000,274.11v51.51H738.87V312.11H495.24v13.51H234.1V274.11a153.41,153.41,0,0,1,1.06-18H998.94A151.29,151.29,0,0,1,1000,274.11Z"/><rect class="cls-1" x="234.1" y="325.62" width="261.13" height="69.54"/><rect class="cls-1" x="738.87" y="325.62" width="261.13" height="69.54"/><rect class="cls-1" x="234.1" y="395.16" width="261.13" height="69.48"/><rect class="cls-1" x="738.87" y="395.16" width="261.13" height="69.48"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1200" viewBox="0 0 9600 4800">
<title>Flag of Canada</title>
<path fill="#f00" d="m0 0h2400l99 99h4602l99-99h2400v4800h-2400l-99-99h-4602l-99 99H0z"/>
<path fill="#fff" d="m2400 0h4800v4800h-4800zm2490 4430-45-863a95 95 0 0 1 111-98l859 151-116-320a65 65 0 0 1 20-73l941-762-212-99a65 65 0 0 1-34-79l186-572-542 115a65 65 0 0 1-73-38l-105-247-423 454a65 65 0 0 1-111-57l204-1052-327 189a65 65 0 0 1-91-27l-332-652-332 652a65 65 0 0 1-91 27l-327-189 204 1052a65 65 0 0 1-111 57l-423-454-105 247a65 65 0 0 1-73 38l-542-115 186 572a65 65 0 0 1-34 79l-212 99 941 762a65 65 0 0 1 20 73l-116 320 859-151a95 95 0 0 1 111 98l-45 863z"/>
</svg>

After

Width:  |  Height:  |  Size: 699 B

View File

@@ -0,0 +1,6 @@
<svg width="198" height="86" viewBox="0 0 99 43" fill="none" xmlns="http://www.w3.org/2000/svg">
<g style="mix-blend-mode:difference">
<path d="M97.926 1.077H1.074v40.846h96.852V1.077Z" stroke="#fff" stroke-width="3" stroke-miterlimit="10"></path>
<path d="M21.816 30.34a7.627 7.627 0 0 1-5.455-2.267 7.669 7.669 0 0 1-2.218-5.486c0-4.92 4.124-7.81 7.819-7.81 2.643 0 5.115.994 6.437 3.314l-2.472 1.444a4.648 4.648 0 0 0-3.916-2.09c-2.174 0-4.762 1.71-4.762 5.099 0 3.313 2.472 5.125 4.957 5.125a4.59 4.59 0 0 0 4.028-2.478l2.528 1.18c-1.424 2.587-3.978 3.969-6.946 3.969ZM37.9 27.537c2.819 0 4.758-2.12 4.758-4.97 0-2.85-1.94-4.97-4.758-4.97-2.819 0-4.825 2.094-4.825 4.923 0 2.867 1.943 5.017 4.825 5.017Zm-.298 2.803c-4.464 0-7.643-3.39-7.643-7.783 0-4.48 3.15-7.78 7.643-7.78 2.062 0 4.048.872 5 2.21v-1.825h3.053v14.764h-3.053v-1.83c-1.001 1.33-2.941 2.244-5 2.244ZM61.08 29.92V18.014h-2.35v-2.95h2.38v-4.363h3.146v4.364h3.261v2.949h-3.261v11.904H61.08ZM76.52 27.537c2.818 0 4.761-2.12 4.761-4.97 0-2.85-1.943-4.97-4.762-4.97-2.818 0-4.82 2.094-4.82 4.923 0 2.867 1.939 5.017 4.82 5.017Zm-.298 2.803c-4.468 0-7.64-3.39-7.64-7.783 0-4.48 3.146-7.78 7.64-7.78 2.062 0 4.048.872 5 2.21v-1.825h3.056v14.764h-3.056v-1.83c-1.001 1.33-2.941 2.244-5 2.244ZM48.8 29.902V15.138h2.909v2.565c.601-1.657 1.873-2.8 3.559-2.8.366-.007.731.034 1.087.12v2.855c-2.373-.275-4.379 1.389-4.379 5.189v6.835h-3.175Z" fill="#fff"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 242 KiB

View File

@@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="katman_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 800 600" style="enable-background:new 0 0 800 600;" xml:space="preserve">
<path d="M399.8,69.1L399.8,69.1c127.3,0,230.5,103.2,230.5,230.5l0,0c0,127.3-103.2,230.5-230.5,230.5l0,0
c-127.3,0-230.5-103.2-230.5-230.5l0,0C169.3,172.3,272.5,69.1,399.8,69.1z" style="fill:#0052FF;"/>
<path d="M399.9,380.6c-44.8,0-81-36.3-81-81s36.3-81,81-81c40.1,0,73.4,29.2,79.8,67.5h81.6
c-6.9-83.2-76.5-148.6-161.5-148.6c-89.5,0-162.1,72.6-162.1,162.1s72.6,162.1,162.1,162.1c85,0,154.6-65.4,161.5-148.6h-81.7
C473.2,351.4,440,380.6,399.9,380.6z" style="fill:#FFFFFF;"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="464" height="464">
<path d="M0 0 C0.8939447 -0.00067474 1.7878894 -0.00134949 2.70892334 -0.00204468 C16.2805355 0.01422313 29.41164925 0.55527652 42.75 3.25 C43.6260791 3.41628906 44.5021582 3.58257812 45.40478516 3.75390625 C87.03111375 11.76610281 124.10787271 31.41871187 155.75 59.25 C156.74257813 60.11882813 157.73515625 60.98765625 158.7578125 61.8828125 C164.18223795 66.71601991 169.10589996 71.67319368 173.75 77.25 C174.59304688 78.21679688 175.43609375 79.18359375 176.3046875 80.1796875 C216.05219286 125.88059445 235.22559137 186.33089501 231.54785156 246.56054688 C228.00767396 292.11528508 212.35636492 336.34978797 183.75 372.25 C183.06808594 373.12398438 182.38617188 373.99796875 181.68359375 374.8984375 C143.90732005 422.34488071 88.69851938 453.7125829 28.24511719 460.65234375 C-34.37189258 466.81196118 -95.92023521 450.38447219 -145.32373047 410.84912109 C-150.63059762 406.44354697 -155.62331058 401.69957299 -160.56298828 396.89013672 C-162.11230568 395.38386838 -163.67658294 393.8953131 -165.24609375 392.41015625 C-172.34316289 385.55468946 -178.35256425 378.1277555 -184.25 370.25 C-184.87406738 369.43305664 -184.87406738 369.43305664 -185.51074219 368.59960938 C-221.70234035 321.12863129 -236.255038 259.54945873 -229.125 200.625 C-223.65339389 160.98806158 -208.5347753 121.51559714 -183.25 90.25 C-182.6209375 89.43144531 -181.991875 88.61289063 -181.34375 87.76953125 C-175.73595711 80.54145393 -169.54040683 73.88109081 -163.25 67.25 C-162.53714844 66.49460937 -161.82429688 65.73921875 -161.08984375 64.9609375 C-155.86381746 59.57394531 -150.12911839 54.90365572 -144.25 50.25 C-143.27289063 49.4559375 -142.29578125 48.661875 -141.2890625 47.84375 C-132.4373368 40.7980439 -123.02475219 34.92815996 -113.25 29.25 C-112.63463379 28.88664551 -112.01926758 28.52329102 -111.38525391 28.14892578 C-77.7399993 8.43365597 -38.64381278 0.02618084 0 0 Z " fill="#0152FF" transform="translate(231.25,0.75)"/>
<path d="M0 0 C1.15219528 0.00323273 1.15219528 0.00323273 2.32766724 0.00653076 C46.5920503 0.20539431 86.3613979 17.15905335 117.875 48.3125 C129.3506392 59.925572 138.17221165 72.99064893 145.875 87.3125 C146.40867187 88.28574219 146.94234375 89.25898438 147.4921875 90.26171875 C153.97570121 102.57367613 157.87724071 115.31499682 160.75 128.875 C160.965354 129.88594727 161.18070801 130.89689453 161.40258789 131.93847656 C162.5567448 137.69444587 162.875 142.26232321 162.875 148.3125 C135.815 148.3125 108.755 148.3125 80.875 148.3125 C78.895 140.3925 78.895 140.3925 76.875 132.3125 C73.01912026 122.99682416 67.61430699 114.79765915 60.875 107.3125 C60.28460938 106.62929687 59.69421875 105.94609375 59.0859375 105.2421875 C45.82581396 90.8535428 26.25081675 82.81513123 6.9296875 81.94140625 C-15.82776053 81.49114274 -33.37630167 86.44103207 -51.125 101.3125 C-51.95386719 101.95058594 -52.78273438 102.58867187 -53.63671875 103.24609375 C-67.01650901 114.35741093 -76.32245113 133.7719616 -77.95727539 150.94946289 C-78.7845932 162.6053713 -79.02063903 174.17097236 -75.125 185.3125 C-74.76148438 186.38886719 -74.39796875 187.46523438 -74.0234375 188.57421875 C-66.85648891 208.47984048 -53.16199311 224.73833972 -34.125 234.3125 C-22.24116835 239.47938333 -12.28408945 241.65925979 0.625 241.625 C1.82382813 241.64111328 3.02265625 241.65722656 4.2578125 241.67382812 C15.13116783 241.67972474 24.94707086 239.60770873 34.875 235.1875 C35.88445679 234.73963135 35.88445679 234.73963135 36.91430664 234.28271484 C43.60090916 231.18170478 49.2920051 227.12007895 54.875 222.3125 C55.67421875 221.62542969 56.4734375 220.93835938 57.296875 220.23046875 C70.17339685 208.26418379 77.47881348 192.2934326 80.875 175.3125 C107.935 175.3125 134.995 175.3125 162.875 175.3125 C161.72034654 193.78695543 161.72034654 193.78695543 159.6875 200.25 C159.46682861 200.9910498 159.24615723 201.73209961 159.01879883 202.49560547 C158.32779264 204.77609494 157.60642624 207.04468382 156.875 209.3125 C156.64651367 210.03614746 156.41802734 210.75979492 156.18261719 211.50537109 C148.20098681 236.50582439 134.68330188 257.13677494 116.875 276.3125 C116.2975 276.95574219 115.72 277.59898437 115.125 278.26171875 C104.08045348 290.02120243 90.19356562 299.0741488 75.875 306.3125 C75.23820313 306.63444336 74.60140625 306.95638672 73.9453125 307.28808594 C59.11895893 314.67856932 44.1525632 319.43429789 27.875 322.3125 C26.85817139 322.49256592 26.85817139 322.49256592 25.82080078 322.67626953 C7.12014261 325.83144721 -11.58008855 324.89065948 -30.125 321.3125 C-31.21240479 321.11164795 -31.21240479 321.11164795 -32.32177734 320.90673828 C-60.31415204 315.60636896 -84.60079698 301.51463953 -106.125 283.3125 C-106.78242187 282.77882813 -107.43984375 282.24515625 -108.1171875 281.6953125 C-112.64277216 277.97427622 -116.35828242 273.78690391 -120.125 269.3125 C-120.87652344 268.47203125 -121.62804687 267.6315625 -122.40234375 266.765625 C-139.33234936 247.40176393 -151.77531886 222.450249 -157.125 197.3125 C-157.40601563 196.06210937 -157.68703125 194.81171875 -157.9765625 193.5234375 C-162.26681816 172.32844099 -162.35863192 147.32944708 -157.125 126.3125 C-156.95871094 125.59320313 -156.79242188 124.87390625 -156.62109375 124.1328125 C-153.836591 112.21101554 -149.47578439 101.30049164 -144.125 90.3125 C-143.81191895 89.65652832 -143.49883789 89.00055664 -143.17626953 88.32470703 C-136.1444676 73.7287857 -126.31185167 60.98489211 -115.125 49.3125 C-114.320625 48.44496094 -113.51625 47.57742187 -112.6875 46.68359375 C-92.86548432 25.94716961 -67.14696372 12.28214517 -39.75 4.4375 C-39.08605225 4.24623535 -38.42210449 4.0549707 -37.73803711 3.85791016 C-25.30600388 0.53525727 -12.78348897 -0.06474055 0 0 Z " fill="#FEFEFF" transform="translate(230.125,69.6875)"/>
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C-6.91 9.91 -15.82 18.82 -25 28 C-25.66 27.67 -26.32 27.34 -27 27 C-18.40135601 17.51620148 -9.76517923 8.31079083 0 0 Z " fill="#2B6FFF" transform="translate(84,53)"/>
</svg>

Before

Width:  |  Height:  |  Size: 845 B

After

Width:  |  Height:  |  Size: 5.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.1 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@@ -0,0 +1,4 @@
<svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0 C16.51609799 13.78388103 26.78945808 30.37994064 29.9375 51.8125 C31.60365015 72.47276181 26.18347293 92.00538863 13.15234375 108.3125 C0.25256773 123.23710859 -16.37587433 132.52146526 -36 135.4375 C-55.3821639 136.72964426 -75.66936482 132.88496585 -90.95703125 120.10546875 C-94.0135961 117.41931005 -96.8854214 114.57680878 -99.75 111.6875 C-100.49121094 110.97980469 -101.23242188 110.27210937 -101.99609375 109.54296875 C-114.55469701 96.73955841 -120.03632901 78.24858455 -120.25 60.6875 C-119.99578268 39.79401367 -111.97546672 21.40455017 -97.515625 6.36328125 C-88.3053946 -2.50081304 -77.00924384 -8.73453329 -64.75 -12.3125 C-64.02425781 -12.53679688 -63.29851563 -12.76109375 -62.55078125 -12.9921875 C-41.15449729 -18.44394572 -17.53604486 -13.02151142 0 0 Z M-95.87890625 21.23046875 C-105.9647934 34.93246231 -110.2601026 50.75398996 -108.75 67.6875 C-106.05979432 85.3587089 -98.04963665 100.45413838 -83.875 111.5625 C-78.43628974 115.42267458 -72.99463992 118.36285302 -66.75 120.6875 C-65.95980469 121.00589844 -65.16960937 121.32429688 -64.35546875 121.65234375 C-49.18190749 126.83763949 -30.88575614 124.61655816 -16.625 118 C-0.57016353 109.49051748 11.30759568 95.78299417 16.75830078 78.42016602 C21.16695193 62.16443743 19.01947426 44.87222004 11.5625 29.9375 C8.18739643 24.16251123 3.96113434 19.40648623 -0.75 14.6875 C-1.81734375 13.60275391 -1.81734375 13.60275391 -2.90625 12.49609375 C-14.31425121 1.60475926 -29.68131603 -3.32033928 -45.25 -3.8125 C-65.64417655 -3.14700582 -82.8144851 5.62507762 -95.87890625 21.23046875 Z " fill="#C9C8C8" transform="translate(119.75,14.3125)"/>
<path d="M0 0 C4.875 1.875 4.875 1.875 6 3 C6.15740605 4.70563778 6.25093392 6.41727244 6.31640625 8.12890625 C6.37924805 9.68061523 6.37924805 9.68061523 6.44335938 11.26367188 C6.48267578 12.35228516 6.52199219 13.44089844 6.5625 14.5625 C6.60568359 15.65498047 6.64886719 16.74746094 6.69335938 17.87304688 C6.79982068 20.58189564 6.90183516 23.29083992 7 26 C7.73637695 25.2479126 8.47275391 24.4958252 9.23144531 23.72094727 C11.96711295 20.93095387 14.71271826 18.15092173 17.46142578 15.3737793 C18.64938098 14.17074358 19.83462895 12.96502827 21.01708984 11.7565918 C22.71787064 10.01939629 24.42817535 8.29209066 26.140625 6.56640625 C26.66682434 6.02472305 27.19302368 5.48303986 27.73516846 4.92494202 C32.53641461 0.12152095 32.53641461 0.12152095 36 0 C38.25 1.4375 38.25 1.4375 40 3 C39.55320448 7.89934398 38.49070872 10.12085452 34.96484375 13.5234375 C34.23644287 14.23935059 33.50804199 14.95526367 32.75756836 15.69287109 C31.8269458 16.57797363 30.89632324 17.46307617 29.9375 18.375 C26.988125 21.22125 24.03875 24.0675 21 27 C35.85 27.495 35.85 27.495 51 28 C50.92105982 20.61069075 50.92105982 20.61069075 50.81982422 13.22167969 C50.8148291 12.29774414 50.80983398 11.37380859 50.8046875 10.421875 C50.78897705 9.00793457 50.78897705 9.00793457 50.77294922 7.56542969 C51.01170446 4.86775222 51.54307781 3.26746794 53 1 C54.875 0.0625 54.875 0.0625 57 0 C59.10244751 1.1325531 59.10244751 1.1325531 61 3 C61.49447632 5.62513733 61.49447632 5.62513733 61.48583984 8.81665039 C61.49506973 10.6084951 61.49506973 10.6084951 61.50448608 12.4365387 C61.49011505 13.72720749 61.47574402 15.01787628 61.4609375 16.34765625 C61.45855297 17.68379031 61.45764777 19.01992776 61.4581604 20.35606384 C61.45503329 23.15466333 61.43847449 25.95275017 61.41162109 28.7512207 C61.3776079 32.34164987 61.36999344 35.93151664 61.37151146 39.52208805 C61.37096815 42.28016039 61.36000801 45.03810933 61.34550858 47.79614067 C61.33603506 49.76488111 61.33258276 51.73364752 61.32919312 53.70240784 C61.31643341 54.89381882 61.30367371 56.0852298 61.29052734 57.31274414 C61.27909195 58.89134972 61.27909195 58.89134972 61.26742554 60.50184631 C61 63 61 63 59 65 C56.5625 65.375 56.5625 65.375 54 65 C51.87779463 62.82256996 51.06212859 61.46799085 50.65942383 58.43457031 C50.6829895 57.02062988 50.6829895 57.02062988 50.70703125 55.578125 C50.71827026 54.19222168 50.71827026 54.19222168 50.72973633 52.77832031 C50.75704834 51.61397461 50.78436035 50.44962891 50.8125 49.25 C50.874375 45.5375 50.93625 41.825 51 38 C41.1 38.33 31.2 38.66 21 39 C27.27916024 45.00256903 27.27916024 45.00256903 33.59594727 50.96533203 C34.36994873 51.72185059 35.1439502 52.47836914 35.94140625 53.2578125 C36.74263916 54.0223877 37.54387207 54.78696289 38.36938477 55.57470703 C40 58 40 58 39.75366211 61.29638672 C39.50495361 62.1885791 39.25624512 63.08077148 39 64 C36.39208984 64.84936523 36.39208984 64.84936523 33 65 C30.57169741 63.20070624 28.76435891 61.58486287 26.7265625 59.41015625 C25.87365128 58.54238808 25.87365128 58.54238808 25.00350952 57.65708923 C23.19357739 55.80801392 21.4094969 53.93610166 19.625 52.0625 C18.40136749 50.803754 17.17612415 49.54657174 15.94921875 48.29101562 C12.94716212 45.21183495 9.96806408 42.1119453 7 39 C6.970271 40.02154175 6.970271 40.02154175 6.93994141 41.0637207 C6.84473017 44.14703917 6.73503534 47.22967649 6.625 50.3125 C6.5940625 51.38435547 6.563125 52.45621094 6.53125 53.56054688 C6.47324219 55.10258789 6.47324219 55.10258789 6.4140625 56.67578125 C6.3826416 57.62364502 6.3512207 58.57150879 6.31884766 59.5480957 C6 62 6 62 4 65 C1.21334312 65.42871644 -0.31123926 65.49431737 -2.63490295 63.8266449 C-4.5278853 61.29363338 -4.38725314 59.54418261 -4.40405273 56.39868164 C-4.41673691 55.25061539 -4.42942108 54.10254913 -4.44248962 52.91969299 C-4.43955399 51.67904587 -4.43661835 50.43839874 -4.43359375 49.16015625 C-4.4388356 47.88651718 -4.44407745 46.61287811 -4.44947815 45.30064392 C-4.4559079 42.60449431 -4.45598429 39.90918907 -4.44604492 37.21313477 C-4.43455932 33.76166105 -4.45475698 30.31121107 -4.48396206 26.85987186 C-4.50674367 23.56412806 -4.49985663 20.26846036 -4.49609375 16.97265625 C-4.50732773 15.73403336 -4.51856171 14.49541046 -4.53013611 13.21925354 C-4.51606468 11.49242592 -4.51606468 11.49242592 -4.50170898 9.73071289 C-4.50154282 8.71828018 -4.50137665 7.70584747 -4.50120544 6.66273499 C-3.87405472 3.33089532 -2.56098608 2.13583901 0 0 Z " fill="#E6444B" transform="translate(46,42)"/>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs><radialGradient id="paint0_radial_2253_2948" cx="0" cy="0" r="1" gradientTransform="matrix(-9.1078 21.447 -27.064 -11.493 10.943 5.234)" gradientUnits="userSpaceOnUse"><stop offset=".06" stop-color="#AE7FE2"/><stop offset="1" stop-color="#0078D4"/></radialGradient><radialGradient id="paint2_radial_2253_2948" cx="0" cy="0" r="1" gradientTransform="matrix(14.846 -4.9755 3.7895 11.307 6.368 19.448)" gradientUnits="userSpaceOnUse"><stop offset=".111" stop-color="#D59DFF"/><stop offset="1" stop-color="#5E438F"/></radialGradient><radialGradient id="paint4_radial_2253_2948" cx="0" cy="0" r="1" gradientTransform="matrix(-26.443 -6.4905 4.7493 -19.349 23.585 12.29)" gradientUnits="userSpaceOnUse"><stop offset=".096" stop-color="#50E6FF"/><stop offset="1" stop-color="#436DCD"/></radialGradient><linearGradient id="paint1_linear_2253_2948" x1="13.592" x2="11.378" y1="24.74" y2="19.401" gradientTransform="translate(-.468 -.468) scale(.77926)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#114A8B"/><stop offset="1" stop-color="#0078D4" stop-opacity="0"/></linearGradient><linearGradient id="paint3_linear_2253_2948" x1="27.449" x2="23.878" y1="16.963" y2="22.083" gradientTransform="translate(-.468 -.468) scale(.77926)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#493474"/><stop offset="1" stop-color="#8C66BA" stop-opacity="0"/></linearGradient><linearGradient id="paint5_linear_2253_2948" x1="11.128" x2="17.351" y1="3.486" y2="3.756" gradientTransform="translate(-.468 -.468) scale(.77926)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2D3F80"/><stop offset="1" stop-color="#436DCD" stop-opacity="0"/></linearGradient><style>.cls-1{fill:none}.cls-2{fill:#ca64ea}.cls-3{opacity:.75}.cls-4{fill:#7719aa}.cls-5{fill:#fff}.cls-6{fill:#ae4bd5}.cls-7{fill:#9332bf}</style></defs><path fill="url(#paint0_radial_2253_2948)" d="M9.864.558 9.74.632s2.109.146 2.804.146l.546 4.13-2.727 2.727-2.728 1.896v2.186c0 1.527.798 2.943 2.104 3.733l2.872 1.738-6.067 3.539h-1.17l-2.18-1.32a4.364 4.364 0 0 1-2.105-3.733V8.323c0-1.527.799-2.943 2.106-3.734L9.74.629c.041-.024.082-.048.123-.07z"/><path fill="url(#paint1_linear_2253_2948)" d="M9.864.558 9.74.632s2.109.146 2.804.146l.546 4.13-2.727 2.727-2.728 1.896v2.186c0 1.527.798 2.943 2.104 3.733l2.872 1.738-6.067 3.539h-1.17l-2.18-1.32a4.364 4.364 0 0 1-2.105-3.733V8.323c0-1.527.799-2.943 2.106-3.734L9.74.629c.041-.024.082-.048.123-.07z"/><path fill="url(#paint2_radial_2253_2948)" d="M16.363 9.272v2.444a4.364 4.364 0 0 1-2.104 3.733l-6.546 3.962a4.364 4.364 0 0 1-4.368.088l6.394 3.87c1.39.841 3.13.841 4.52 0l6.546-3.962a4.364 4.364 0 0 0 2.104-3.733v-1.765l-.546-.819z"/><path fill="url(#paint3_linear_2253_2948)" d="M16.363 9.272v2.444a4.364 4.364 0 0 1-2.104 3.733l-6.546 3.962a4.364 4.364 0 0 1-4.368.088l6.394 3.87c1.39.841 3.13.841 4.52 0l6.546-3.962a4.364 4.364 0 0 0 2.104-3.733v-1.765l-.546-.819z"/><path fill="url(#paint4_radial_2253_2948)" d="M20.805 4.59 14.259.63A4.364 4.364 0 0 0 9.872.554l-.13.079a4.364 4.364 0 0 0-2.105 3.734V9.54l2.105-1.273a4.364 4.364 0 0 1 4.517 0l6.546 3.959a4.364 4.364 0 0 1 2.103 3.59l.002-.142v-7.35a4.364 4.364 0 0 0-2.105-3.735z"/><path fill="url(#paint5_linear_2253_2948)" d="M20.805 4.59 14.259.63A4.364 4.364 0 0 0 9.872.554l-.13.079a4.364 4.364 0 0 0-2.105 3.734V9.54l2.105-1.273a4.364 4.364 0 0 1 4.517 0l6.546 3.959a4.364 4.364 0 0 1 2.103 3.59l.002-.142v-7.35a4.364 4.364 0 0 0-2.105-3.735z"/></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24"><defs><path id="a" d="M12 0c6.627 0 12 5.373 12 12v12H12C5.373 24 0 18.627 0 12S5.373 0 12 0z"/><path id="c" d="M0 24V12l.004-.305C.166 5.209 5.474 0 12 0c6.627 0 12 5.373 12 12s-5.373 12-12 12H0z"/></defs><g fill="none" fill-rule="evenodd"><path fill="#0b7ed0" d="M17.657 4.843a8 8 0 0 1-.32 11.616L12 21.5l-5.337-5.04A8 8 0 1 1 17.657 4.843z"/><g transform="matrix(.5 0 0 .5 0 9.5)"><mask id="b" fill="#fff"><use xlink:href="#a" width="100%" height="100%"/></mask><use xlink:href="#a" width="100%" height="100%" fill="#2cd4ed"/><path fill="#0db4e2" d="M35.314-9.314c6.248 6.249 6.248 16.38 0 22.627-.209.21-.422.411-.64.606l-10.673 10.08-10.674-10.08c-.218-.195-.43-.397-.64-.606-6.248-6.248-6.248-16.379 0-22.627 6.249-6.248 16.38-6.248 22.627 0z" mask="url(#b)"/></g><g transform="matrix(.5 0 0 .5 12 9.5)"><mask id="d" fill="#fff"><use xlink:href="#c" width="100%" height="100%"/></mask><use xlink:href="#c" width="100%" height="100%" fill="#3169ff"/><path fill="#3153ff" d="M11.314-9.314c6.248 6.249 6.248 16.38 0 22.627-.209.21-.422.411-.64.606L.002 23.999l-10.674-10.08c-.218-.195-.43-.397-.64-.606-6.248-6.248-6.248-16.379 0-22.627 6.249-6.248 16.38-6.248 22.627 0z" mask="url(#d)"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="200px" height="200px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
<g><path style="opacity:1" fill="#fefefe" d="M -0.5,-0.5 C 66.1667,-0.5 132.833,-0.5 199.5,-0.5C 199.5,66.1667 199.5,132.833 199.5,199.5C 132.833,199.5 66.1667,199.5 -0.5,199.5C -0.5,132.833 -0.5,66.1667 -0.5,-0.5 Z"/></g>
<g><path style="opacity:1" fill="#0e0e0e" d="M 119.5,47.5 C 133.743,46.0344 143.909,51.701 150,64.5C 154.009,81.9852 147.509,93.4852 130.5,99C 123.167,99.3333 115.833,99.6667 108.5,100C 104.333,101.5 101.5,104.333 100,108.5C 99.5001,122.829 99.3334,137.163 99.5,151.5C 82.1667,151.5 64.8333,151.5 47.5,151.5C 47.5,132.833 47.5,114.167 47.5,95.5C 60.0736,101.213 72.4069,100.713 84.5,94C 88.6667,91.1667 92.1667,87.6667 95,83.5C 97.7515,75.0718 100.752,66.7384 104,58.5C 108.127,53.202 113.294,49.5354 119.5,47.5 Z"/></g>
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512" fill="none">
<rect width="512" height="512" fill="white"/>
<path d="M358.635 63.3162C307.498 60.9566 264.496 97.209 257.16 144.973C256.869 147.19 256.433 149.335 256.07 151.48C244.666 210.971 191.568 256.019 127.792 256.019C105.056 256.019 83.7007 250.298 65.1054 240.288C62.8536 239.072 60.166 240.645 60.166 243.148V255.947V448.793H255.997V304.212C255.997 277.613 277.934 256.019 304.955 256.019H353.913C409.336 256.019 453.935 210.757 451.756 155.699C449.795 106.147 408.973 65.6758 358.635 63.3162Z" fill="black"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 635 B

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg class="trusty" width="72" height="72" viewBox="0 0 72 72" fill="none" xmlns="http://www.w3.org/2000/svg" role="presentation">
<g clip-path="url(#clip0_136_2653)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V72H18.9547C19.6146 64.85 20.4143 61.99 24.1933 54.57C28.4921 46.13 29.8117 39.71 29.8117 31.39C29.8117 31.2927 29.8125 31.1864 29.8133 31.0731C29.8198 30.1968 29.8294 28.905 29.5018 28.17C27.8023 28.34 25.373 27.59 23.9334 25.86C22.7137 24.38 21.8839 22.49 21.8839 21.3C21.8839 21.04 21.9139 20.85 22.0739 20.69C23.6634 20.25 26.7826 20.96 28.902 21.95C29.7717 20.53 30.5315 19.61 32.421 18.57C30.7015 14.92 27.5823 12.48 22.8836 12.48C17.4552 12.48 13.8961 15.53 12.7365 18.48C12.3866 19.38 12.8664 19.57 13.4463 18.99C15.7856 16.61 18.2649 15.43 21.504 15.43C25.4829 15.43 27.8223 17.93 27.8223 18.99C27.8223 19.34 27.5623 19.34 27.2124 19.21L27.1642 19.1942C25.9042 18.7805 24.7757 18.41 22.6237 18.41C16.6254 18.41 13.8661 24.03 13.8661 28.81C13.8661 31.44 14.7959 33.37 16.6254 33.37C18.035 33.37 18.8448 32.47 19.5446 31.03C19.7645 30.58 20.1244 30.58 20.4143 31.06C20.8042 31.7 20.8942 32.79 20.8942 33.63C20.8942 37.42 18.105 39.41 14.8959 39.41C8.89753 39.41 5.23854 34.08 5.23854 27.15C5.23854 17.78 11.1469 7.92 23.1436 7.92C31.7812 7.92 36.2699 12.53 38.6593 17.1H39.9289C41.6584 12.99 44.7776 10.55 49.4263 10.55C55.6245 10.55 58.1838 15.37 58.1838 21.11C58.1838 22.6809 58.0188 24.1895 57.8605 25.6374C57.7144 26.973 57.574 28.2568 57.574 29.49C57.574 31.38 58.3738 33.5 60.5232 33.5C61.9028 33.5 63.0625 32.6 63.6323 30.45C63.7923 29.87 64.1422 29.78 64.632 30.39C64.952 30.78 65.4018 31.71 65.4018 32.8C65.4018 35.82 63.4424 39 59.5235 39.03C56.1844 39.06 54.165 37.23 53.7451 34.92C53.6851 34.53 54.035 34.34 54.2549 34.66C55.4746 36.27 57.0442 37.13 59.2635 37.13C60.5132 37.13 61.7628 36.58 62.1827 35.65C62.3127 35.36 62.2127 35.2 61.9928 35.3C61.223 35.65 60.5532 35.78 59.8134 35.78C54.6748 35.78 54.035 30.55 53.6851 25.25C53.2052 26.63 52.2755 27.82 49.8662 28.04C50.0861 27.69 50.256 27.11 50.256 26.69C50.256 26.27 50.0361 25.98 49.5162 25.98C48.7465 25.98 48.0766 26.56 48.0766 27.49C48.0766 28.4238 48.7643 29.4058 49.4753 30.4212C50.0588 31.2544 50.658 32.1101 50.9059 32.98C51.0658 33.56 51.0658 34.07 51.0658 34.71C51.0658 35.83 50.9359 36.93 50.7759 37.47C50.6459 37.89 50.356 38.02 49.5262 38.02C48.9464 38.02 48.7565 37.83 48.6265 37.35C48.5665 37.09 48.4665 36.77 48.2766 36.77C48.067 36.77 47.9936 37.0062 47.9006 37.3054L47.8867 37.35C47.6968 38.02 47.1169 38.15 45.7373 38.15C45.1996 38.15 44.8471 38.1229 44.6162 38.1051H44.6161H44.6161L44.616 38.1051C44.5035 38.0964 44.4199 38.09 44.3577 38.09C44.0078 38.09 43.8778 38.22 43.8778 38.41C43.8778 38.67 43.9078 38.92 43.9778 39.15C44.0378 39.34 44.1677 39.41 44.5576 39.34C45.8373 39.15 46.967 39.12 47.8267 39.12C50.1661 39.12 50.296 39.34 50.1061 40.15C49.9461 40.86 49.6862 41.79 49.3063 42.62C49.0464 43.17 48.8564 43.23 48.4765 43.26C47.7068 43.32 46.677 43.36 45.9072 43.32C44.5099 43.2542 43.2844 42.8113 42.119 42.3902C40.9831 41.9798 39.9043 41.59 38.7792 41.59C38.1699 41.59 37.6128 41.6732 37.0419 41.7585C36.4421 41.8481 35.8271 41.94 35.1202 41.94C33.7406 41.94 32.7609 41.65 31.8212 40.98C30.4615 46.18 29.9617 52.53 29.9617 55.45C29.9617 57.47 30.5415 59.66 31.5712 60.49C31.9211 60.78 32.241 60.78 32.501 60.3C35.0084 55.6355 37.7216 54.0276 40.2896 52.5059C42.6874 51.0849 44.9585 49.7391 46.817 46.05C47.0069 45.7 47.3968 45.76 47.4568 46.18C48.0966 49.97 47.6768 54.56 46.847 58.96C46.747 59.47 47.1069 59.67 47.4568 59.22C48.5165 57.87 49.8961 55.43 50.406 53.47C50.536 52.99 50.9159 52.96 51.1158 53.44C52.3655 56.49 53.7751 62.27 54.195 66.44C54.2249 66.89 54.6448 66.92 54.8048 66.5C55.7045 64 56.2844 59.85 55.6046 56.8C55.5446 56.45 55.7345 56.25 56.1144 56.45C61.6929 59.16 67.1214 64.14 72 71.98V0H0ZM23.1341 65.1C22.1641 67.2 21.4341 69.52 21.2541 72H24.3941C23.9041 69.53 23.8441 67.14 23.8441 65.1C23.8441 64.43 23.5241 64.23 23.1341 65.1ZM45.7273 35.31C44.9875 35.37 44.6676 35.08 44.6676 34.12H44.6776C44.6776 33.8 44.9375 33.38 45.4174 33.38C45.6454 33.38 45.912 33.4104 46.2316 33.4469C46.7107 33.5017 47.3092 33.57 48.0766 33.57C48.3261 33.57 48.5664 33.5332 48.8162 33.4948L48.8164 33.4948L48.8165 33.4948C49.0872 33.4533 49.3691 33.41 49.6862 33.41C50.0361 33.41 50.1961 33.64 50.1961 34.15C50.1961 34.86 50.1261 35.28 49.6462 35.31C48.9064 35.34 48.7465 35.47 48.5865 36.08C48.4865 36.37 48.1666 36.43 48.0067 36.11C47.6168 35.31 46.947 35.21 45.7273 35.31ZM38.4393 26C37.8895 25.2 36.3199 24.2 34.7503 24.23C33.3107 24.2 32.411 25.16 32.411 25.93C32.411 26.12 32.541 26.25 32.7309 26.12C33.0208 25.96 33.2108 25.9 33.4407 25.9C33.7006 26.73 34.4404 27.79 35.88 27.79C36.9697 27.79 37.8395 27.28 37.6795 26.12C37.9395 26.12 38.0994 26.15 38.3194 26.22C38.4493 26.25 38.5093 26.09 38.4493 26H38.4393ZM49.1963 18.45C51.3457 18.45 52.7254 20.18 53.3652 22.27C51.6257 21.98 50.6659 21.98 49.5762 23.23C48.9664 21.47 47.5568 20.09 46.3371 19.51C46.727 19.06 47.5868 18.45 49.1963 18.45Z" fill="#00CFEC"></path>
</g>
<defs>
<clipPath id="clip0_136_2653">
<rect width="72" height="72" fill="white"></rect>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="logosandtypes_com" data-name="logosandtypes com" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150">
<defs>
<style>
.cls-1 {
fill: none;
}
.cls-2 {
fill: #005ed9;
}
</style>
</defs>
<g id="Layer_3" data-name="Layer 3">
<g id="Layer_3-2" data-name="Layer 3">
<g id="Layer_2" data-name="Layer 2">
<path id="Layer_3-3" data-name="Layer 3" class="cls-1" d="M0,0H150V150H0V0Z"/>
</g>
</g>
</g>
<path class="cls-2" d="M133.15,14.8h-7.69v7.69h7.69v-7.69Zm-26.9,53.84v-15.4h0s15.37,0,15.37,0v15.38h15.37c.26,14.25-.82,26.68-8.06,39.12-20.96,36.88-72.74,41.85-100.21,9.49h0c-6.41-7.45-11.02-16.51-13.18-26.18-1.1-5.25-1.58-11.92-1.58-17.55V15.76h30.75l.06,58.57c.15,7.58,1.52,15.37,6.05,21.31,13.04,17.66,40.64,16.06,51.33-3.18,3.84-6.42,4.19-16.61,4.09-23.82h0Zm3.84-42.31h11.53v11.53h15.38v15.38h-15.38v-15.37h-11.53v-11.53Z"/>
</svg>

After

Width:  |  Height:  |  Size: 968 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#fcd205" d="M21 24H3c-1.65 0-3-1.35-3-3V3c0-1.65 1.35-3 3-3h18c1.65 0 3 1.35 3 3v18c0 1.65-1.35 3-3 3"/><path fill="#28292b" d="M23.259 18.159a.606.606 0 0 0-.136-.31c-.302-.414-1.72-.69-1.72-.685a26.722 26.722 0 0 0-2.448-.4c.13-.62-.006-1.762-.009-2.158.018-.71.004-2.542-.05-3.005-.04-.435-.099-.625-.337-.986-.172-.257-.224-.508-.619-.469-.359.036-.491.535-.43.837l.155.617c.065.127.239 4.125.2 4.473.003.17-.013.387-.018.57a59.89 59.89 0 0 0-3.035-.204 6.85 6.85 0 0 1 .043-.034c.52-.404.34-.941.253-1.526-.119-.938-.028-3.597-.14-3.917-.076-.25-.29-.396-.475-.587-.23-.236-.517-.308-.781-.037-.26.235.065 3.593.083 5.068.023.308-.045.696.077.994-.1-.004-2.768-.06-2.992-.055.003-.052-.032-.119-.057-.17a3.18 3.18 0 0 1-.189-.598 6.314 6.314 0 0 1-.092-.85c-.02-.61.036-2.498.105-2.992.076-.545.367-1.509-.58-1.297-.103.023-.604.085-.738.191-.156.123-.141.43-.147.6-.023.644-.094 2.675-.09 3.162.005.41.078.937.229 1.337.091.243.363.485.646.638-.521.015-1.023.031-1.201.041-.88.05-1.554.098-2.211.163l-.008-.032c-.11-.34.048-1.74.353-4.368.074-.634-.038-.659-.424-1.016-.22-.205-.408-.343-.793-.035-.244.196-.18.447-.223.73-.146.985-.359 2.533-.45 3.536-.025.277.014.91.085 1.295.007.018.004.038.013.058a65.69 65.69 0 0 0-1.2.173c-1.056.164-1.989.204-2.623.489-.39.175-.412.234-.503.376a.368.368 0 0 0-.05.167c0 .011.009.151.02.192a.517.517 0 0 0 .352.374c.047.015.341.04.372.043.709.071 1.099-.101 1.792-.374 3.431-1.369 13.25-.954 15.413-.545.939.187 2.388.383 3.287.898.147.08.284.138.41.176.062.02.123.029.179.042.137.032.284.003.309-.002a.697.697 0 0 0 .14-.042.372.372 0 0 0 .191-.156.919.919 0 0 0 .068-.21.895.895 0 0 0-.005-.18zM12.102 5.817c.203.018 1.804.066 1.896-.56.052-.356-.3-.933-.4-1.037-.133-.11-.425.847-.5-.094-.01-.153-.05-.39-.123-.536-.036-.073-.08-.126-.135-.126a.185.185 0 0 0-.089.03.537.537 0 0 0-.145.21c-.09.223-.13 1.086-.354 1.1-.244.016-.236-.552-.203-.718.005-.027-.001-.033-.012-.03-.023.006-.03.01-.049.016-.146.056-.313.226-.325.238-.23.236-.54.85-.383 1.131.163.293.65.36.822.376zM4.438 9.41c.221.082.515-.066.728-.103.212-.037 1.077-.232.914-.035-.092.111-.33.112-.542.174-.293.087-.764.135-.782.513-.043.899 1.355.301 1.764.155 1.11-.386 2.381-.452 3.504-.64 1.245-.208 2.526-.227 3.783-.275 1.323-.05 2.747-.106 4.047.077.346.05.674.087 1.026.125.305.03.948.311 1.22.183.247-.117.135-.409.262-.558.184-.214.545-.177.294-.634-.192-.348-.89-.461-1.25-.39-.037-.22.132-.123.176-.237a.75.75 0 0 0-.043-.603c-.194-.333-1.115-.45-1.116-.45-2.209-.356-6.184-.74-10.416-.246-.702.082-1.933.17-2.652.46-.318.13-.314.132-.353.341-.038.297.105.642.461.569.684-.141 1.89-.336 2.237-.424 1.706-.435 7.386-.35 8.118-.177.452.097 2.935.178 2.995.633-5.796-.24-8.009-.237-13.213.38-.435.073-.696.168-1.039.284-.422.142-.708.662-.123.878"/></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -23,7 +23,7 @@ import 'package:tray_manager/tray_manager.dart';
import 'package:window_manager/window_manager.dart';
class App extends StatefulWidget {
final Locale locale;
final Locale? locale;
const App({super.key, this.locale = const Locale("en")});
static void setLocale(BuildContext context, Locale newLocale) {

View File

@@ -6,11 +6,34 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Бяспечна зрабіць рэзервовую копію кодаў 2ФА",
"onBoardingGetStarted": "Пачаць",
"setupFirstAccount": "Наладзіць ваш першы ўліковы запіс",
"importScanQrCode": "Сканіраваць код QR-код",
"qrCode": "QR-код",
"importEnterSetupKey": "Увесці ключ наладжвання",
"importAccountPageTitle": "Увесці падрабязнасці ўліковага запісу",
"secretCanNotBeEmpty": "Сакрэт не можа быць пустым",
"bothIssuerAndAccountCanNotBeEmpty": "І выдавец, і ўліковы запіс не могуць быць пустымі",
"incorrectDetails": "Няправільныя падрабязнасці",
"pleaseVerifyDetails": "Праверце падрабязнасці і паспрабуйце яшчэ раз",
"codeIssuerHint": "Выдавец",
"codeSecretKeyHint": "Сакрэтны ключ",
"secret": "Сакрэт",
"all": "Усе",
"notes": "Нататкі",
"notesLengthLimit": "Максімальная колькасць сімвалаў у нататках не больш за {count}",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "Уліковы запіс (vy@damen.com)",
"codeTagHint": "Тэг",
"accountKeyType": "Тып ключа",
"sessionExpired": "Сеанс завяршыўся",
@@ -18,8 +41,19 @@
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Аўтарызуйцеся яшчэ раз",
"loggingOut": "Выхад...",
"timeBasedKeyType": "Заснаваныя на часе (TOTP)",
"counterBasedKeyType": "Заснаваныя на лічыльніку (HOTP)",
"saveAction": "Захаваць",
"nextTotpTitle": "наступны",
"deleteCodeTitle": "Выдаліць код?",
"deleteCodeMessage": "Вы сапраўды хочаце выдаліць гэты код? Гэта дзеянне з'яўляецца незваротным.",
"trashCode": "Выдаліць код?",
"trashCodeMessage": "Вы сапраўды хочаце выдаліць код для {account}?",
"trash": "Сметніца",
"viewLogsAction": "Паглядзець журнал",
"preparingLogsTitle": "Падрыхтоўка журнала...",
"emailLogsTitle": "Адправіць журнал па электроннай пошце",
"blog": "Блог",
"changePassword": "Змяніць пароль",
"data": "Даныя",

View File

@@ -6,8 +6,34 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Fes una còpia de seguretat de forma segura dels teus codis 2FA",
"onBoardingGetStarted": "Primers passos",
"setupFirstAccount": "Configura el teu primer compte",
"importScanQrCode": "Escaneja un codi QR",
"qrCode": "Codi QR",
"importEnterSetupKey": "Introdueix una clau de configuració",
"importAccountPageTitle": "Introdueix les dades del compte",
"secretCanNotBeEmpty": "El secret no pot estar buit",
"bothIssuerAndAccountCanNotBeEmpty": "Ni l'emissor ni el compte poden estar buits",
"incorrectDetails": "Detalls incorrectes",
"pleaseVerifyDetails": "Verifica els detalls i torna-ho a provar",
"codeIssuerHint": "Emissor",
"codeSecretKeyHint": "Clau secreta",
"secret": "Secret",
"all": "Tots",
"notes": "Notes",
"notesLengthLimit": "Les notes poden tenir un màxim de {count} caràcters",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "Compte (tu@domini.com)",
"codeTagHint": "Etiqueta",
"accountKeyType": "Tipus de clau",
"sessionExpired": "La sessió ha caducat",
@@ -15,12 +41,448 @@
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Torna a iniciar sessió",
"loggingOut": "Tancant sessió...",
"timeBasedKeyType": "Basat en temps (TOTP)",
"counterBasedKeyType": "Basat en comptador (HOTP)",
"saveAction": "Desa",
"nextTotpTitle": "següent",
"deleteCodeTitle": "Esborrar el codi?",
"deleteCodeMessage": "Segur que vols esborrar aquest codi? Aquesta acció és irreversible.",
"trashCode": "Enviar el codi a la paperera?",
"trashCodeMessage": "Estàs segur que vols enviar a la paperera el codi per a {account}?",
"trash": "Paperera",
"viewLogsAction": "Veure registres",
"sendLogsDescription": "Això enviarà els registres per ajudar-nos a diagnosticar el problema. Tot i que prenem precaucions per assegurar que la informació sensible no es registri, et recomanem que revisis els registres abans de compartir-los.",
"preparingLogsTitle": "Preparant registres...",
"emailLogsTitle": "Enviar registres per correu electrònic",
"emailLogsMessage": "Si us plau, envia els registres a {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "Copia el correu electrònic",
"exportLogsAction": "Exporta registres",
"reportABug": "Informa d'un error",
"crashAndErrorReporting": "Informes d'errors i fallades",
"reportBug": "Informar d'error",
"emailUsMessage": "Si us plau, envia'ns un correu a {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "Contacta amb suport",
"rateUsOnStore": "Valora'ns a {storeName}",
"blog": "Blog",
"merchandise": "Marxandatge",
"verifyPassword": "Verifica la contrasenya",
"pleaseWait": "Si us plau, espera...",
"generatingEncryptionKeysTitle": "Generant claus d'encriptació...",
"recreatePassword": "Recrea la contrasenya",
"recreatePasswordMessage": "Aquest dispositiu no és prou potent per verificar la contrasenya, així que hem de regenerar-la d'una manera compatible amb tots els dispositius. \n\nInicia sessió amb la teva clau de recuperació i regenera la contrasenya (pots reutilitzar la mateixa si ho desitges).",
"useRecoveryKey": "Usa la clau de recuperació",
"incorrectPasswordTitle": "Contrasenya incorrecta",
"welcomeBack": "Benvingut de nou!",
"madeWithLoveAtPrefix": "fet amb ❤️ a ",
"supportDevs": "Subscriu-te a <bold-green>ente</bold-green> per donar-nos suport",
"supportDiscount": "Usa el codi de descompte \"AUTH\" per obtenir un 10% de descompte el primer any",
"changeEmail": "Canvia el correu electrònic",
"changePassword": "Canvia la contrasenya",
"importTypePlainText": "Text pla"
"data": "Dades",
"importCodes": "Importa codis",
"importTypePlainText": "Text pla",
"importTypeEnteEncrypted": "Exportació xifrada d'Ente",
"passwordForDecryptingExport": "Contrasenya per desxifrar l'exportació",
"passwordEmptyError": "La contrasenya no pot estar buida",
"importFromApp": "Importa codis des de {appName}",
"importGoogleAuthGuide": "Exporta els teus comptes des de Google Authenticator a un codi QR usant l'opció \"Transferir Comptes\". Després, utilitza un altre dispositiu per escanejar el codi QR.\n\nConsell: Pots utilitzar la càmera del teu portàtil per fer una foto del codi QR.",
"importSelectJsonFile": "Selecciona un fitxer JSON",
"importSelectAppExport": "Selecciona el fitxer d'exportació de {appName}",
"importEnteEncGuide": "Selecciona el fitxer JSON xifrat exportat des d'Ente",
"importRaivoGuide": "Utilitza l'opció \"Exporta OTPs a un arxiu Zip\" a la configuració de Raivo.\n\nExtreu el fitxer zip i importa el fitxer JSON.",
"importBitwardenGuide": "Utilitza l'opció \"Exporta caixa forta\" a la configuració de Bitwarden i importa el fitxer JSON sense xifrar.",
"importAegisGuide": "Utilitza l'opció \"Exporta la caixa forta\" a la configuració d'Aegis.\n\nSi la teva caixa forta està xifrada, hauràs d'introduir la contrasenya per desxifrar-la.",
"import2FasGuide": "Utilitza l'opció \"Configuració->Còpia de seguretat - Exporta\" a 2FAS.\n\nSi la teva còpia de seguretat està xifrada, hauràs d'introduir la contrasenya per desxifrar-la.",
"importLastpassGuide": "Utilitza l'opció \"Transferir comptes\" a la configuració de Lastpass Authenticator i prem \"Exporta comptes a fitxer\". Importa el fitxer JSON descarregat.",
"exportCodes": "Exporta codis",
"importLabel": "Importa",
"importInstruction": "Si us plau, selecciona un fitxer que contingui una llista dels teus codis en el següent format",
"importCodeDelimiterInfo": "Els codis poden estar separats per una coma o una nova línia",
"selectFile": "Selecciona fitxer",
"emailVerificationToggle": "Verificació de correu electrònic",
"emailVerificationEnableWarning": "Per evitar quedar bloquejat fora del teu compte, assegura't de desar una còpia del teu correu electrònic 2FA fora d'Ente Auth abans d'habilitar la verificació per correu.",
"authToChangeEmailVerificationSetting": "Si us plau, autentica't per canviar la configuració de verificació per correu electrònic",
"authenticateGeneric": "Si us plau, autentica't",
"authToViewYourRecoveryKey": "Si us plau, autentica't per veure la teva clau de recuperació",
"authToChangeYourEmail": "Si us plau, autentica't per canviar el teu correu electrònic",
"authToChangeYourPassword": "Si us plau, autentica't per canviar la teva contrasenya",
"authToViewSecrets": "Si us plau, autentica't per veure els teus secrets",
"authToInitiateSignIn": "Si us plau, autentica't per iniciar la sessió per a la còpia de seguretat.",
"ok": "D'acord",
"cancel": "Cancel·la",
"yes": "Sí",
"no": "No",
"email": "Correu electrònic",
"support": "Suport",
"general": "General",
"settings": "Configuració",
"copied": "Copiat",
"pleaseTryAgain": "Si us plau, intenta-ho de nou",
"existingUser": "Usuari existent",
"newUser": "Nou a Ente",
"delete": "Elimina",
"enterYourPasswordHint": "Introdueix la teva contrasenya",
"forgotPassword": "Has oblidat la contrasenya",
"oops": "Ups",
"suggestFeatures": "Suggerir funcions",
"faq": "FAQ",
"somethingWentWrongMessage": "Alguna cosa ha anat malament, si us plau intenta-ho de nou",
"leaveFamily": "Deixa la família",
"leaveFamilyMessage": "Segur que vols deixar el pla familiar?",
"inFamilyPlanMessage": "Estàs en un pla familiar!",
"hintForMobile": "Mantingues pressionat un codi per editar o eliminar.",
"hintForDesktop": "Clic dret sobre un codi per editar o eliminar.",
"scan": "Escaneja",
"scanACode": "Escaneja un codi",
"verify": "Verifica",
"verifyEmail": "Verifica el correu electrònic",
"enterCodeHint": "Introdueix el codi de 6 dígits de\nl'aplicació d'autenticació",
"lostDeviceTitle": "Dispositiu perdut?",
"twoFactorAuthTitle": "Autenticació de dos factors",
"passkeyAuthTitle": "Verificació per passkey",
"verifyPasskey": "Verifica la passkey",
"recoverAccount": "Recupera el compte",
"enterRecoveryKeyHint": "Introdueix la teva clau de recuperació",
"recover": "Recupera",
"contactSupportViaEmailMessage": "Si us plau, envia un correu a {email} des del teu correu registrat",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "Codi QR invàlid",
"noRecoveryKeyTitle": "No tens clau de recuperació?",
"enterEmailHint": "Introdueix la teva adreça de correu electrònic",
"invalidEmailTitle": "Adreça de correu electrònic no vàlida",
"invalidEmailMessage": "Si us plau, introdueix una adreça de correu electrònic vàlida.",
"deleteAccount": "Elimina el compte",
"deleteAccountQuery": "Ens sabrà greu veure't marxar. Tens algun problema?",
"yesSendFeedbackAction": "Sí, envia comentaris",
"noDeleteAccountAction": "No, elimina el compte",
"initiateAccountDeleteTitle": "Si us plau, autentica't per iniciar l'eliminació del compte",
"sendEmail": "Envia correu electrònic",
"createNewAccount": "Crea un nou compte",
"weakStrength": "Feble",
"strongStrength": "Forta",
"moderateStrength": "Moderada",
"confirmPassword": "Confirma la contrasenya",
"close": "Tanca",
"oopsSomethingWentWrong": "Ups, alguna cosa ha anat malament.",
"selectLanguage": "Selecciona l'idioma",
"language": "Idioma",
"social": "Social",
"security": "Seguretat",
"lockscreen": "Pantalla de bloqueig",
"authToChangeLockscreenSetting": "Si us plau, autentica't per canviar la configuració de la pantalla de bloqueig",
"deviceLockEnablePreSteps": "Per habilitar el bloqueig de dispositiu, configura un codi o bloqueig de pantalla en la configuració del sistema.",
"viewActiveSessions": "Veure sessions actives",
"authToViewYourActiveSessions": "Si us plau, autentica't per veure les teves sessions actives",
"searchHint": "Cerca...",
"search": "Cerca",
"sorryUnableToGenCode": "Ho sentim, no podem generar un codi per a {issuerName}",
"noResult": "Sense resultat",
"addCode": "Afegeix codi",
"scanAQrCode": "Escaneja un codi QR",
"enterDetailsManually": "Introdueix els detalls manualment",
"edit": "Edita",
"share": "Comparteix",
"shareCodes": "Comparteix codis",
"shareCodesDuration": "Selecciona la durada per a la qual vols compartir els codis.",
"restore": "Restaura",
"copiedToClipboard": "Copiat al porta-retalls",
"copiedNextToClipboard": "El següent codi s'ha copiat al porta-retalls",
"error": "Error",
"recoveryKeyCopiedToClipboard": "La clau de recuperació s'ha copiat al porta-retalls",
"recoveryKeyOnForgotPassword": "Si oblides la teva contrasenya, l'única manera de recuperar les teves dades és amb aquesta clau.",
"recoveryKeySaveDescription": "No guardem aquesta clau, si us plau, guarda aquesta clau de 24 paraules en un lloc segur.",
"doThisLater": "Fes-ho més tard",
"saveKey": "Guarda la clau",
"save": "Guarda",
"send": "Envia",
"saveOrSendDescription": "Vols guardar-ho al teu emmagatzematge (per defecte, a la carpeta Descàrregues) o enviar-ho a altres aplicacions?",
"saveOnlyDescription": "Vols guardar-ho al teu emmagatzematge (per defecte, a la carpeta Descàrregues)?",
"back": "Enrere",
"createAccount": "Crea un compte",
"passwordStrength": "Força de la contrasenya: {passwordStrengthValue}",
"@passwordStrength": {
"description": "Text to indicate the password strength",
"placeholders": {
"passwordStrengthValue": {
"description": "The strength of the password as a string",
"type": "String",
"example": "Weak or Moderate or Strong"
}
},
"message": "Password Strength: {passwordStrengthText}"
},
"password": "Contrasenya",
"signUpTerms": "Estic d'acord amb els <u-terms>termes del servei</u-terms> i la <u-policy>política de privacitat</u-policy>",
"privacyPolicyTitle": "Política de privacitat",
"termsOfServicesTitle": "Termes",
"encryption": "Xifratge",
"setPasswordTitle": "Configura la contrasenya",
"changePasswordTitle": "Canvia la contrasenya",
"resetPasswordTitle": "Restableix la contrasenya",
"encryptionKeys": "Claus de xifratge",
"passwordWarning": "No guardem aquesta contrasenya, per tant, si l'oblides, <underline>no podrem desxifrar les teves dades</underline>",
"enterPasswordToEncrypt": "Introdueix una contrasenya que puguem utilitzar per xifrar les teves dades",
"enterNewPasswordToEncrypt": "Introdueix una nova contrasenya que puguem utilitzar per xifrar les teves dades",
"passwordChangedSuccessfully": "La contrasenya s'ha canviat amb èxit",
"generatingEncryptionKeys": "Generant claus de xifratge...",
"continueLabel": "Continua",
"insecureDevice": "Dispositiu no segur",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Ho sentim, no hem pogut generar claus segures en aquest dispositiu.\n\nSi us plau, registra't des d'un altre dispositiu.",
"howItWorks": "Com funciona",
"ackPasswordLostWarning": "Entenc que si perdo la meva contrasenya, puc perdre les meves dades ja que les meves dades estan <underline>xifrades d'extrem a extrem</underline>.",
"loginTerms": "En fer clic a iniciar sessió, estic d'acord amb els <u-terms>termes del servei</u-terms> i la <u-policy>política de privacitat</u-policy>",
"logInLabel": "Inicia sessió",
"logout": "Tanca la sessió",
"areYouSureYouWantToLogout": "Segur que vols tancar la sessió?",
"yesLogout": "Sí, tanca la sessió",
"exit": "Surt",
"verifyingRecoveryKey": "Verificant clau de recuperació...",
"recoveryKeyVerified": "Clau de recuperació verificada",
"recoveryKeySuccessBody": "Perfecte! La teva clau de recuperació és vàlida. Gràcies per verificar-ho.\n\nSi us plau, recorda mantenir una còpia de seguretat de la teva clau de recuperació en un lloc segur.",
"invalidRecoveryKey": "La clau de recuperació que has introduït no és vàlida. Assegura't que conté 24 paraules i verifica l'ortografia de cadascuna.\n\nSi has introduït un codi de recuperació antic, assegura't que tingui 64 caràcters i comprova cadascun.",
"recreatePasswordTitle": "Recrea la contrasenya",
"recreatePasswordBody": "El dispositiu actual no és prou potent per verificar la teva contrasenya, però podem regenerar-la d'una manera que funcioni amb tots els dispositius.\n\nSi us plau, inicia sessió utilitzant la teva clau de recuperació i regenera la teva contrasenya (pots tornar a utilitzar la mateixa si ho desitges).",
"invalidKey": "Clau no vàlida",
"tryAgain": "Intenta-ho de nou",
"viewRecoveryKey": "Veure clau de recuperació",
"confirmRecoveryKey": "Confirma la clau de recuperació",
"recoveryKeyVerifyReason": "La teva clau de recuperació és l'única manera de recuperar les teves fotos si oblides la teva contrasenya. Pots trobar la teva clau de recuperació a Configuració > Compte.\n\nIntrodueix aquí la teva clau de recuperació per verificar que l'has guardat correctament.",
"confirmYourRecoveryKey": "Confirma la teva clau de recuperació",
"confirm": "Confirma",
"emailYourLogs": "Envia els teus registres per correu",
"pleaseSendTheLogsTo": "Si us plau, envia els registres a \n{toEmail}",
"copyEmailAddress": "Copia l'adreça de correu",
"exportLogs": "Exporta els registres",
"enterYourRecoveryKey": "Introdueix la teva clau de recuperació",
"tempErrorContactSupportIfPersists": "Sembla que alguna cosa ha anat malament. Si us plau, torna-ho a intentar després d'un temps. Si l'error persisteix, contacta amb el nostre equip de suport.",
"networkHostLookUpErr": "No s'ha pogut connectar a Ente, si us plau, comprova la configuració de la xarxa i contacta amb suport si l'error persisteix.",
"networkConnectionRefusedErr": "No s'ha pogut connectar a Ente, si us plau, torna-ho a intentar després d'un temps. Si l'error persisteix, contacta amb suport.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Sembla que alguna cosa ha anat malament. Si us plau, torna-ho a intentar després d'un temps. Si l'error persisteix, contacta amb el nostre equip de suport.",
"about": "Sobre",
"weAreOpenSource": "Som de codi obert!",
"privacy": "Privacitat",
"terms": "Termes",
"checkForUpdates": "Comprova si hi ha actualitzacions",
"checkStatus": "Comprova l'estat",
"downloadUpdate": "Descarrega",
"criticalUpdateAvailable": "Actualització crítica disponible",
"updateAvailable": "Actualització disponible",
"update": "Actualitza",
"checking": "Comprovant...",
"youAreOnTheLatestVersion": "Estàs en la versió més recent",
"warning": "Advertència",
"exportWarningDesc": "El fitxer exportat conté informació sensible. Guarda-ho de manera segura.",
"iUnderStand": "Ho entenc",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Si us plau, autentica't per exportar els teus codis",
"importSuccessTitle": "Visca!",
"importSuccessDesc": "Has importat {count} codis!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "Ho sentim",
"importFailureDesc": "No s'ha pogut analitzar el fitxer seleccionat.\nEscriu a support@ente.io si necessites ajuda!",
"pendingSyncs": "Advertència",
"pendingSyncsWarningBody": "Alguns dels teus codis no s'han sincronitzat.\n\nSi us plau, assegura't de tenir una còpia de seguretat d'aquests codis abans de tancar la sessió.",
"checkInboxAndSpamFolder": "Comprova la teva safata d'entrada (i el correu no desitjat) per completar la verificació",
"tapToEnterCode": "Toca per introduir el codi",
"resendEmail": "Reenviar correu electrònic",
"weHaveSendEmailTo": "Hem enviat un correu a <green>{email}</green>",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
"email": {
"description": "The email address of the user",
"type": "String",
"example": "example@ente.io"
}
}
},
"activeSessions": "Sessions actives",
"somethingWentWrongPleaseTryAgain": "S'ha produït un error, si us plau, intenta-ho de nou",
"thisWillLogYouOutOfThisDevice": "Això tancarà la sessió en aquest dispositiu!",
"thisWillLogYouOutOfTheFollowingDevice": "Això tancarà la sessió en el següent dispositiu:",
"terminateSession": "Finalitzar sessió?",
"terminate": "Finalitzar",
"thisDevice": "Aquest dispositiu",
"toResetVerifyEmail": "Per restablir la teva contrasenya, si us plau verifica primer el teu correu electrònic.",
"thisEmailIsAlreadyInUse": "Aquest correu electrònic ja està en ús",
"verificationFailedPleaseTryAgain": "La verificació ha fallat, intenta-ho de nou",
"yourVerificationCodeHasExpired": "El teu codi de verificació ha expirat",
"incorrectCode": "Codi incorrecte",
"sorryTheCodeYouveEnteredIsIncorrect": "Ho sentim, el codi que has introduït és incorrecte",
"emailChangedTo": "Correu electrònic canviat a {newEmail}",
"authenticationFailedPleaseTryAgain": "Autenticació fallida, intenta-ho de nou",
"authenticationSuccessful": "Autenticació amb èxit!",
"twofactorAuthenticationSuccessfullyReset": "Autenticació de dos factors restablerta amb èxit",
"incorrectRecoveryKey": "Clau de recuperació incorrecta",
"theRecoveryKeyYouEnteredIsIncorrect": "La clau de recuperació que has introduït és incorrecta",
"enterPassword": "Introdueix la contrasenya",
"selectExportFormat": "Selecciona el format d'exportació",
"exportDialogDesc": "Les exportacions xifrades estaran protegides amb una contrasenya que triïs.",
"encrypted": "Xifrat",
"plainText": "Text pla",
"passwordToEncryptExport": "Contrasenya per xifrar l'exportació",
"export": "Exporta",
"useOffline": "Usa sense còpies de seguretat",
"signInToBackup": "Inicia sessió per fer una còpia de seguretat dels teus codis",
"singIn": "Inicia sessió",
"sigInBackupReminder": "Exporta els teus codis per assegurar que tens una còpia de seguretat des de la que els pots restaurar.",
"offlineModeWarning": "Has triat procedir sense còpies de seguretat. Realitza còpies manuals per garantir la seguretat dels teus codis.",
"showLargeIcons": "Mostra icones grans",
"compactMode": "Mode compacte",
"shouldHideCode": "Amaga els codis",
"doubleTapToViewHiddenCode": "Pots tocar dues vegades en una entrada per veure el codi",
"focusOnSearchBar": "Enfoca la barra de cerca en iniciar l'app",
"confirmUpdatingkey": "Estàs segur que vols actualitzar la clau secreta?",
"minimizeAppOnCopy": "Minimitza l'app en copiar",
"editCodeAuthMessage": "Autentica't per editar el codi",
"deleteCodeAuthMessage": "Autentica't per eliminar el codi",
"showQRAuthMessage": "Autentica't per mostrar el codi QR",
"confirmAccountDeleteTitle": "Confirma la supressió del compte",
"confirmAccountDeleteMessage": "Aquest compte està vinculat a altres apps d'Ente, si en fas ús.\n\nLes dades pujades, a través de totes les apps d'Ente, es programaran per a la supressió, i el teu compte s'eliminarà permanentment.",
"androidBiometricHint": "Verifica la identitat",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "No reconegut. Torna-ho a provar.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Correcte",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Cancel·la",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "Es requereix autenticació",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "Biometria necessària",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "Credencials del dispositiu requerides",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "Es requereixen credencials del dispositiu",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "Ves a configuració",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "L'autenticació biomètrica no està configurada al teu dispositiu. Ves a 'Configuració > Seguretat' per afegir autenticació biomètrica.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "L'autenticació biomètrica està desactivada. Bloqueja i desbloqueja la pantalla per activar-la.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "L'autenticació biomètrica no està configurada al teu dispositiu. Activa Touch ID o Face ID al teu telèfon.",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "D'acord",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "Sense connexió a Internet",
"pleaseCheckYourInternetConnectionAndTryAgain": "Comprova la connexió a Internet i torna-ho a intentar.",
"signOutFromOtherDevices": "Tanca sessió en altres dispositius",
"signOutOtherBody": "Si creus que algú pot saber la teva contrasenya, pots forçar tots els altres dispositius que usen el teu compte a tancar sessió.",
"signOutOtherDevices": "Tancar sessió en altres dispositius",
"doNotSignOut": "No tancar sessió",
"hearUsWhereTitle": "Com vas conèixer Ente? (opcional)",
"hearUsExplanation": "No fem seguiment de les instal·lacions de l'app. Ens ajudaria saber on ens has trobat!",
"recoveryKeySaved": "Clau de recuperació guardada a la carpeta Descàrregues!",
"waitingForBrowserRequest": "Esperant sol·licitud del navegador...",
"waitingForVerification": "Esperant verificació...",
"passkey": "Passkey",
"passKeyPendingVerification": "La verificació encara està pendent",
"loginSessionExpired": "Sessió caducada",
"loginSessionExpiredDetails": "La teva sessió ha caducat. Torna a iniciar sessió.",
"developerSettingsWarning": "Estàs segur que vols modificar la configuració de desenvolupador?",
"developerSettings": "Configuració de desenvolupador",
"serverEndpoint": "Endpoint del servidor",
"invalidEndpoint": "Endpoint no vàlid",
"invalidEndpointMessage": "Ho sentim, l'endpoint que has introduït no és vàlid. Introdueix un endpoint vàlid i torna-ho a intentar.",
"endpointUpdatedMessage": "Extrem actualitzat correctament",
"customEndpoint": "Connectat a {endpoint}",
"pinText": "Fixa",
"unpinText": "Desfixa",
"pinnedCodeMessage": "{code} fixat",
"unpinnedCodeMessage": "{code} deixat de fixar",
"tags": "Etiquetes",
"createNewTag": "Crea una nova etiqueta",
"tag": "Etiqueta",
"create": "Crear",
"editTag": "Editar etiqueta",
"deleteTagTitle": "Eliminar etiqueta?",
"deleteTagMessage": "Estàs segur que vols eliminar aquesta etiqueta? Aquesta acció és irreversible.",
"somethingWentWrongParsingCode": "No hem pogut analitzar {x} codis.",
"updateNotAvailable": "Actualització no disponible",
"viewRawCodes": "Veure codis en brut",
"rawCodes": "Codis en brut",
"rawCodeData": "Dades del codi en brut",
"appLock": "Bloqueig de l'aplicació",
"noSystemLockFound": "No s'ha trobat cap bloqueig del sistema",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Per habilitar el bloqueig de l'aplicació, configura un codi o bloqueig de pantalla en la configuració del sistema.",
"autoLock": "Bloqueig automàtic",
"immediately": "Immediatament",
"reEnterPassword": "Torna a introduir la contrasenya",
"reEnterPin": "Torna a introduir el PIN",
"next": "Següent",
"tooManyIncorrectAttempts": "Massa intents incorrectes",
"tapToUnlock": "Toca per desbloquejar",
"setNewPassword": "Estableix una nova contrasenya",
"deviceLock": "Bloqueig del dispositiu",
"hideContent": "Amaga el contingut",
"hideContentDescriptionAndroid": "Amaga el contingut d'aquesta app en el commutador d'apps del sistema i desactiva les captures de pantalla",
"hideContentDescriptioniOS": "Amaga el contingut d'aquesta app en el commutador d'apps del sistema",
"autoLockFeatureDescription": "Temps després del qual l'app es bloqueja quan es posa en segon pla",
"appLockDescription": "Tria entre el bloqueig predeterminat del dispositiu o un bloqueig personalitzat amb PIN o contrasenya.",
"pinLock": "Bloqueig amb PIN",
"enterPin": "Introdueix el PIN",
"setNewPin": "Estableix un nou PIN",
"importFailureDescNew": "No s'ha pogut analitzar el fitxer seleccionat.",
"appLockNotEnabled": "Bloqueig de l'aplicació no habilitat",
"appLockNotEnabledDescription": "Si us plau, habilita el bloqueig de l'aplicació a Seguretat > Bloqueig de l'aplicació",
"authToViewPasskey": "Autentica't per veure la passkey",
"appLockOfflineModeWarning": "Has triat procedir sense còpies de seguretat. Si oblides el bloqueig de l'aplicació, no podràs accedir a les teves dades."
}

View File

@@ -90,7 +90,7 @@
"welcomeBack": "Καλωσορίσατε και πάλι!",
"madeWithLoveAtPrefix": "φτιαγμένη με ❤️ στο ",
"supportDevs": "Εγγραφείτε στο <bold-green>ente</bold-green> για να μας υποστηρίξετε",
"supportDiscount": "Χρησιμοποιήστε τον κωδικό κουπονιού \"AUTH\" για να πάρετε 10% από το πρώτο έτος",
"supportDiscount": "Χρησιμοποιήστε τον κωδικό κουπονιού \"AUTH\" για να λάβετε 10% έκπτωση για τον πρώτο χρόνο",
"changeEmail": "Αλλαγή email",
"changePassword": "Αλλαγή κωδικού πρόσβασής",
"data": "Δεδομένα",
@@ -483,5 +483,6 @@
"importFailureDescNew": "Αδυναμία ανάλυσης του επιλεγμένου αρχείου.",
"appLockNotEnabled": "Το κλείδωμα εφαρμογής δεν είναι ενεργοποιημένο",
"appLockNotEnabledDescription": "Παρακαλώ ενεργοποιήστε το κλείδωμα εφαρμογής μέσω της επιλογής Ασφάλεια > Κλείδωμα εφαρμογής",
"authToViewPasskey": "Παρακαλώ πιστοποιηθείτε για να δείτε το κλειδί πρόσβασης"
"authToViewPasskey": "Παρακαλώ πιστοποιηθείτε για να δείτε το κλειδί πρόσβασης",
"appLockOfflineModeWarning": "Έχετε επιλέξει να προχωρήσετε χωρίς αντίγραφα ασφαλείας. Αν ξεχάσετε τον κωδικό της εφαρμογής, θα κλειδωθείτε από την πρόσβαση στα δεδομένα σας."
}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Two-factor authentication",
"passkeyAuthTitle": "Passkey verification",
"verifyPasskey": "Verify passkey",
"loginWithTOTP": "Login with TOTP",
"recoverAccount": "Recover account",
"enterRecoveryKeyHint": "Enter your recovery key",
"recover": "Recover",

View File

@@ -13,7 +13,7 @@
"qrCode": "بارکد",
"importEnterSetupKey": "وارد کردن کلید تنظیم",
"importAccountPageTitle": "ورود اطلاعات حساب",
"secretCanNotBeEmpty": "سکرت نمیتواند خالی باشد",
"secretCanNotBeEmpty": "رمز محرمانه نمیتواند خالی باشد",
"incorrectDetails": "اطلاعات اشتباه",
"pleaseVerifyDetails": "لطفا اطلاعات را تایید کنید و دوباره امتحان کنید",
"codeIssuerHint": "صادر کننده",
@@ -76,6 +76,7 @@
"contactSupport": "ارتباط با پشتیبانی",
"rateUsOnStore": "به ما در {storeName} امتیاز دهید",
"blog": "وبلاگ",
"merchandise": "کالا",
"verifyPassword": "تایید رمز عبور",
"pleaseWait": "لطفا صبر کنید...",
"generatingEncryptionKeysTitle": "در حال تولید کلید‌های رمزگذاری...",
@@ -93,16 +94,25 @@
"importCodes": "ورود کدها",
"importTypePlainText": "متن ساده",
"importTypeEnteEncrypted": "Ente Encrypted export",
"passwordForDecryptingExport": "پسورد برای رمزگشایی ورودی",
"passwordEmptyError": "رمز عبور نمی‌تواند خالی باشد",
"importFromApp": "وارد کردن کد ها از {appName}",
"importSelectJsonFile": "انتخاب کنید فایل JSON",
"importSelectAppExport": "انتخاب فایل وارد کردن {appName}",
"importEnteEncGuide": "انتخاب فایل JSON رمزگذاری شده از Ente",
"exportCodes": "صدور کدها",
"importLabel": "وارد کردن",
"importInstruction": "لطفا یک فایل که حاوی لیستی از کدهای شما در قالب زیر است، انتخاب کنید",
"importCodeDelimiterInfo": "کدها می‌توانند با کاما یا یک خط جدید از یکدیگر جدا شوند",
"selectFile": "انتخاب فایل",
"emailVerificationToggle": "تائید ایمیل",
"authToChangeEmailVerificationSetting": "لطفا جهت تغییر ایمیل تایید هویت کنید",
"authenticateGeneric": "لطفا احراز هویت کنید",
"authToViewYourRecoveryKey": "لطفا جهت نمایش کلید بازیابی خود، اعتبارسنجی کنید",
"authToChangeYourEmail": "لطفا جهت تغییر ایمیل خود، اعتبارسنجی کنید",
"authToChangeYourPassword": "لطفا جهت تغییر رمز عبور خود، اعتبارسنجی کنید",
"authToViewSecrets": "لطفا جهت دیدن راز های خود احراز هویت کنید",
"authToInitiateSignIn": "لطفا جهت ورود برای پشتیبان گیری خود احراز هویت کنید.",
"ok": "تایید",
"cancel": "لغو",
"yes": "بله",
@@ -180,6 +190,7 @@
"enterDetailsManually": "ورود دستی جزئیات",
"edit": "ویرایش",
"share": "اشتراک‌گذاری",
"shareCodes": "به اشتراک گزاشتن کدها",
"restore": "بازگرداندن",
"copiedToClipboard": "به حافظه موقت کپی شد",
"error": "خطا",
@@ -213,9 +224,13 @@
"changePasswordTitle": "تغییر رمز عبور",
"resetPasswordTitle": "بازنشانی رمز عبور",
"encryptionKeys": "کلیدهای رمزنگاری",
"enterPasswordToEncrypt": "رمز عبوری را وارد کنید که بتوانیم از آن برای رمزگذاری اطلاعات شما استفاده کنیم",
"enterNewPasswordToEncrypt": "رمز عبور جدیدی را وارد کنید که بتوانیم از آن برای رمزگذاری اطلاعات شما استفاده کنیم",
"passwordChangedSuccessfully": "رمز عبور با موفقیت تغییر کرد",
"generatingEncryptionKeys": "در حال تولید کلیدهای رمزگذاری...",
"continueLabel": "ادامه",
"insecureDevice": "دستگاه ناامن",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "با عرض پوزش، ما نمی‌توانیم کلیدهای امن را در این دستگاه تولید کنیم.\n\nلطفا از دستگاه دیگری ثبت نام کنید.",
"howItWorks": "چگونه کار می‌کند",
"ackPasswordLostWarning": "می‌دانم که اگر رمز عبور خود را گم کنم، از آنجایی که اطلاعات من <underline>رمزگذاری سرتاسری</underline> شده است، ممکن است اطلاعاتم را از دست بدهم.",
"loginTerms": "با کلیک روی ورود، با <u-terms>شرایط استفاده از خدمات</u-terms> و <u-policy>سیاست حفظ حریم خصوصی</u-policy> موافقت می‌کنم",
@@ -293,6 +308,10 @@
}
},
"activeSessions": "نشست های فعال",
"somethingWentWrongPleaseTryAgain": "مشکلی پیش آمده، لطفا دوباره تلاش کنید",
"thisWillLogYouOutOfThisDevice": "این کار شما را از این دستگاه خارج می‌کند!",
"thisWillLogYouOutOfTheFollowingDevice": "با این کار شما از دستگاه زیر خارج می‌شوید:",
"terminateSession": "خروچ دستگاه؟",
"terminate": "خروج",
"thisDevice": "این دستگاه",
"toResetVerifyEmail": "برای تنظیم مجدد رمز عبور، لطفا ابتدا ایمیل خود را تایید کنید.",
@@ -303,12 +322,18 @@
"sorryTheCodeYouveEnteredIsIncorrect": "معظرت میخوام، کدی که شما وارد کردید اشتباه است",
"emailChangedTo": "ایمیل عوض شد به {newEmail}",
"authenticationFailedPleaseTryAgain": "احراز هویت ناموفق بود، لطفا دوباره تلاش کنید",
"authenticationSuccessful": "احراز هویت موفق آمیز!",
"twofactorAuthenticationSuccessfullyReset": "احراز هویت دو مرحله با موفقیت بازنشانی شد",
"incorrectRecoveryKey": "کلید بازیابی درست نیست",
"theRecoveryKeyYouEnteredIsIncorrect": "کلید بازیابی که وارد کردید درست نیست",
"enterPassword": "رمز عبور را وارد کنید",
"selectExportFormat": "انتخاب فرمت استخراج",
"encrypted": "رمزنگاری شده",
"plainText": "متن ساده",
"passwordToEncryptExport": "پسورد برای رمزگذاری ورودی",
"export": "صدور",
"useOffline": "استفاده بدون پشتیبان گیری",
"signInToBackup": "ورود برای پشتیبان گیری کد های شما",
"singIn": "ورود",
"showLargeIcons": "نشان دادن ایکون های بزرگ",
"compactMode": "حالت فشرده",
@@ -318,9 +343,87 @@
"editCodeAuthMessage": "احراز هویت برای ویرایش کد",
"deleteCodeAuthMessage": "احراز هویت برای حذف کد",
"showQRAuthMessage": "احراز هویت برای نمایش کد QR",
"confirmAccountDeleteTitle": "تایید حذف حساب کاربری",
"androidBiometricHint": "تایید هویت",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "شناخته نشد. دوباره امتحان کنید.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "موفقیت",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "لغو",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "احراز هویت لازم است",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "بیومتریک لازم است",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "اعتبار دستگاه لازم است",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "اعتبار دستگاه لازم است",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "به تنظیمات بروید",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"iOSOkButton": "تأیید",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "نبود اتصال اینترنت",
"pleaseCheckYourInternetConnectionAndTryAgain": "لطفا اتصال اینترنت خود را بررسی کنید و دوباره امتحان کنید.",
"signOutFromOtherDevices": "از دستگاه های دیگر خارج شوید",
"signOutOtherDevices": "از دستگاه های دیگر خارج شوید",
"doNotSignOut": "خارج نشوید",
"hearUsWhereTitle": "از کجا در مورد Ente شنیدی؟ (اختیاری)",
"hearUsExplanation": "ما نصب برنامه را ردیابی نمی‌کنیم. اگر بگویید کجا ما را پیدا کردید، به ما کمک می‌کند!",
"waitingForBrowserRequest": "منتظر جواب از مرورگر...",
"waitingForVerification": "درانتظار تأییدیه...",
"passkey": "پس کی",
"passKeyPendingVerification": "تأییدیه هنوز در انتظار است",
"loginSessionExpired": "نشست منقضی شده است",
"loginSessionExpiredDetails": "نشست شما منقضی شده. لطفا دوباره وارد شوید.",
"developerSettings": "تنظیمات برنامه‌نویسان",
"customEndpoint": "متصل شده به {endpoint}",
"pinText": "پین",
"unpinText": "حذف پین",
"pinnedCodeMessage": "{code} پین شد",
"unpinnedCodeMessage": "{code} از پین حذف شد",
"tags": "برچسب‌ها",
"createNewTag": "ایجاد برچسب جدید",
"tag": "برچسب",
"create": "ایجاد",
"editTag": "ویرایش برچسب"
"editTag": "ویرایش برچسب",
"deleteTagTitle": "حذف تگ؟",
"deleteTagMessage": "آیا مطمئن هستید که می خواهید این تگ را حذف کنید؟ این کار غیرقابل تغییر است.",
"updateNotAvailable": "به‌رورزرسانی در دسترس نیست",
"appLock": "قفل برنامه",
"noSystemLockFound": "هیج قبل سیستمی پیدا نشد",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "جهت فعالسازی قفل برنامه، لطفا در تنظیمات سیستم خود یک رمز یا قفل صفحه را فعال کنید.",
"autoLock": "قفل خودکار",
"immediately": "فوری",
"reEnterPassword": "رمز عبور را مجدداً وارد کنید",
"reEnterPin": "پین را مجدداً وارد کنید",
"next": "بعدی",
"tapToUnlock": "برای باز کردن قفل ضربه بزنید",
"deviceLock": "قفل دستگاه",
"hideContent": "پنهان کردن محتوا",
"pinLock": "پین قفل",
"enterPin": "پین را وارد کنید",
"setNewPin": "پین جدید انتخاب کنید",
"appLockNotEnabled": "قفل برنامه فعال نیست"
}

View File

@@ -17,6 +17,8 @@
"pleaseVerifyDetails": "Vahvista tietosi ja yritä uudelleen",
"codeIssuerHint": "Myöntäjä",
"codeSecretKeyHint": "Salainen avain",
"all": "Kaikki",
"notes": "Muistiinpanot",
"codeAccountHint": "Tili (sinun@jokinosoite.com)",
"accountKeyType": "Avaimen tyyppi",
"sessionExpired": "Istunto on vanheutunut",
@@ -31,6 +33,7 @@
"nextTotpTitle": "seuraava",
"deleteCodeTitle": "Poista koodi?",
"deleteCodeMessage": "Haluatko varmasti poistaa tämän koodin? Toimintoa ei voi peruuttaa.",
"trash": "Roskakori",
"viewLogsAction": "Näytä lokikirjaukset",
"sendLogsDescription": "Tämä toiminto lähettää lokin kirjaukset eteenpäin jotta saisimme apua ongelmasi ratkaisemiseen. Vaikkakin käytäntömme on olla kirjaamatta mitään arkaluontoista tietoa, suosittelemme että tarkistat nämä tiedot ennen niiden jakamista.",
"preparingLogsTitle": "Valmistellaan lokikirjaukset...",
@@ -71,9 +74,11 @@
"supportDiscount": "Käytä kuponkikoodia \"AUTH\" saadaksesi 10% alennuksen ensimmäisestä vuodesta",
"changeEmail": "vaihda sähköpostiosoitteesi",
"changePassword": "Vaihda salasana",
"data": "Tiedot",
"importCodes": "Tuo koodit",
"importTypePlainText": "Pelkkä teksti",
"importTypeEnteEncrypted": "Ente salattu vienti",
"passwordForDecryptingExport": "Salasana salauksen purkamiseksi",
"importSelectJsonFile": "Valitse JSON-tiedosto",
"exportCodes": "Vie koodit",
"importLabel": "Tuo",
@@ -149,6 +154,8 @@
"addCode": "Lisää koodi",
"enterDetailsManually": "Syötä tiedot manuaalisesti",
"edit": "Muokkaa",
"share": "Jaa",
"restore": "Palauta",
"copiedToClipboard": "Kopioitu leikepöydälle",
"copiedNextToClipboard": "Seuraava koodi kopioitu leikepöydälle",
"error": "Virhe",

View File

@@ -0,0 +1 @@
{}

View File

@@ -1,28 +1,28 @@
{
"account": "Akun",
"account": "Akun\n",
"unlock": "Buka",
"recoveryKey": "Kunci pemulihan",
"counterAppBarTitle": "Penghitung",
"counterAppBarTitle": "Pencacah",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Cadangkan kode 2FA kamu dengan aman",
"onBoardingBody": "Cadangkan kode autentikasi 2 langkah Anda dengan aman",
"onBoardingGetStarted": "Mulai",
"setupFirstAccount": "Siapkan akun pertama kamu",
"importScanQrCode": "Pindai Kode QR",
"qrCode": "Kode QR",
"setupFirstAccount": "Siapkan akun pertama Anda",
"importScanQrCode": "Pindai Kode Respons Cepat (QR)",
"qrCode": "Kode Respons Cepat (QR)",
"importEnterSetupKey": "Masukkan kunci penyiapan",
"importAccountPageTitle": "Masukkan detail akun",
"importAccountPageTitle": "Masukkan rincian akun",
"secretCanNotBeEmpty": "Rahasia tidak boleh kosong",
"bothIssuerAndAccountCanNotBeEmpty": "Nama penerbit dan akun tidak boleh kosong",
"incorrectDetails": "Rincian salah",
"pleaseVerifyDetails": "Periksa kembali data kamu dan coba lagi",
"pleaseVerifyDetails": "Mohon periksa kembali data Anda dan coba kembali",
"codeIssuerHint": "Penerbit",
"codeSecretKeyHint": "Kunci Rahasia",
"codeSecretKeyHint": "Kunci Sandi",
"secret": "Rahasia",
"all": "Semua",
"notes": "Catatan",
"notesLengthLimit": "Catatan diperbolehkan sebanyak maksimal {count} karakter",
"notesLengthLimit": "Banyaknya karakter pada catatan yang diperbolehkan paling banyak adalah sebanyak {count} karakter",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
@@ -33,27 +33,28 @@
}
}
},
"codeAccountHint": "Akun (kamu@domain.com)",
"codeAccountHint": "Akun (nama@domain.com)",
"codeTagHint": "Tag",
"accountKeyType": "Tipe kunci",
"accountKeyType": "Jenis kunci",
"sessionExpired": "Sesi berakhir",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Silakan masuk akun lagi",
"loggingOut": "Mengeluarkan akun...",
"loggingOut": "Keluar dari akun...",
"timeBasedKeyType": "Berbasis waktu (TOTP)",
"counterBasedKeyType": "Berbasis pencacah (HOTP)",
"saveAction": "Simpan",
"nextTotpTitle": "berikutnya",
"deleteCodeTitle": "Hapus kode?",
"deleteCodeMessage": "Apakah kamu yakin ingin menghapus kode ini? Tindakan ini tidak dapat dikembalikan ke semula.",
"deleteCodeMessage": "Anda yakin ingin menghapus kode ini? Tindakan ini tidak dapat dikembalikan ke semula.",
"trashCode": "Hapus kode?",
"trashCodeMessage": "Apakah anda yakin ingin menghapus kode untuk {account}?",
"trashCodeMessage": "Anda yakin ingin menghapus kode untuk akun {account}?",
"trash": "Hapus",
"viewLogsAction": "Lihat log",
"sendLogsDescription": "Langkah ini akan mengirimkan log untuk membantu kami menganalisa masalah kamu. Meskipun kami melakukan tindakan pencegahan untuk memastikan bahwa informasi sensitif tidak dicatat, kami menganjurkan kamu untuk melihat log ini sebelum membagikannya.",
"sendLogsDescription": "Langkah ini akan mengirimkan log untuk membantu kami menyelesaikan masalah Anda. Kami menyarankan Anda untuk meninjau log-log berikut sebelum dibagikan walaupun kami sudah berupaya untuk memastikan agar segala informasi yang bersifat sensitif tidak terlog.",
"preparingLogsTitle": "Menyiapkan log...",
"emailLogsTitle": "Log email",
"emailLogsTitle": "Log surel",
"emailLogsMessage": "Harap kirim log ke {email}",
"@emailLogsMessage": {
"placeholders": {
@@ -62,12 +63,12 @@
}
}
},
"copyEmailAction": "Salin email",
"copyEmailAction": "Salin surel",
"exportLogsAction": "Ekspor log",
"reportABug": "Laporkan bug",
"crashAndErrorReporting": "Pelaporan Error dan Crash",
"reportBug": "Laporkan bug",
"emailUsMessage": "Harap email kami di {email}",
"reportABug": "Laporkan keberadaan kutu",
"crashAndErrorReporting": "Pelaporan Galat dan Kemogokan",
"reportBug": "Laporkan kutu",
"emailUsMessage": "Harap kirimkan surel ke {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
@@ -75,72 +76,413 @@
}
}
},
"contactSupport": "Hubungi dukungan",
"rateUsOnStore": "Nilai kami di {storeName}",
"contactSupport": "Hubungi bantuan",
"rateUsOnStore": "Beri kami penilaian di {storeName}",
"blog": "Blog",
"merchandise": "Merchandise",
"verifyPassword": "Verifikasi sandi",
"pleaseWait": "Harap tunggu...",
"merchandise": "Toko kami",
"verifyPassword": "Verifikasi kata sandi",
"pleaseWait": "Mohon tunggu...",
"generatingEncryptionKeysTitle": "Membuat kunci enkripsi...",
"recreatePassword": "Buat kembali katasandi",
"recreatePasswordMessage": "Perangkat ini tidak cukup kuat untuk memverifikasi kata sandi kamu, jadi kami perlu membuat ulang kata sandi kamu sekali lagi dengan cara yang dapat digunakan di semua perangkat.\n\nSilahkan masuk menggunakan kunci pemulihan dan buat ulang kata sandi kamu (Kamu dapat menggunakan kata sandi yang sama lagi jika mau).",
"recreatePassword": "Buat ulang kata sandi",
"recreatePasswordMessage": "Gawai ini tidak cukup mutakhir untuk memverifikasi kata sandi Anda, sehingga kami perlu membuat ulang kata sandi Anda sekali lagi dengan cara yang dapat digunakan di semua perangkat.\n\nSilakan masuk dengan kunci pemulihan dan buat ulang kata sandi Anda (Gunakan kata sandi yang sama lagi jika Anda mau).",
"useRecoveryKey": "Gunakan kunci pemulihan",
"incorrectPasswordTitle": "Kata sandi salah",
"welcomeBack": "Selamat datang kembali!",
"madeWithLoveAtPrefix": "dibuat dengan ❤️ di ",
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk mendukung kami",
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan potongan 10% pada tahun pertamamu",
"changeEmail": "Ubah email",
"changePassword": "Ubah sandi",
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk memberikan kami dukungan",
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan diskon 10% pada tahun Anda berlangganan",
"changeEmail": "Ubah surel",
"changePassword": "Ubah kata sandi",
"data": "Data",
"importCodes": "Impor kode",
"importTypePlainText": "Teks biasa",
"importTypeEnteEncrypted": "Eksport enkripsi ente",
"passwordForDecryptingExport": "Kata sandi untuk mendekripsi ekspor",
"importTypeEnteEncrypted": "Eksporan Ente Terenkripsi",
"passwordForDecryptingExport": "Kata sandi untuk mendekripsi eksporan",
"passwordEmptyError": "Kata sandi tidak boleh kosong",
"importFromApp": "Impor kode dari {appName}",
"importSelectJsonFile": "Pilih File JSON",
"importSelectAppExport": "Pilih file ekspor dari {appName}",
"importEnteEncGuide": "Pilih file enkripsi JSON yang telah diekspor dari Ente",
"importRaivoGuide": "Gunakan opsi \"Export OTPs to Zip archive\" pada pengaturan Raivo.\n\nEkstrak file zip dan impor file JSON tersebut.",
"importBitwardenGuide": "Gunakan opsi \"Export vault\" didalam fitur Bitwarden Tools dan impor file JSON yang tidak terenkripsi.",
"importAegisGuide": "Gunakan opsi \"Export vault\" didalam fitur Bitwarden Tools dan impor file JSON yang tidak terenkripsi.",
"importGoogleAuthGuide": "Ekspor semua akun Anda dari Google Authenticator ke kode respons cepat (QR) dengan pilihan \"Transfer Akun\". Kemudian, pindai kode respons cepat tersebut dengan perangkat lain.\n\nKiat: webcam laptop juga dapat digunakan untuk untuk memindai kode respons cepat.",
"importSelectJsonFile": "Pilih berkas JSON",
"importSelectAppExport": "Pilih berkas eksporan dari {appName}",
"importEnteEncGuide": "Pilih berkas JSON terenkripsi yang telah diekspor dari Ente",
"importRaivoGuide": "Gunakan pilihan \"Export OTPs to Zip archive\" pada pengaturan Raivo.\n\nEkstrak berkas zip dan impor berkas JSON tersebut.",
"importBitwardenGuide": "Gunakan pilihan \"Export vault\" pada Bitwarden Tools dan impor ber JSON yang takterenkripsi.",
"importAegisGuide": "Gunakan pilihan \"Export vault\" pada pengaturan Aegis.\n\nJika brankas terenkripsi, masukkan kata sandi brankas untuk mendekripsi brankas.",
"import2FasGuide": "Gunakan pilihan \"Pengaturan->Cadangkan -Eksport\" pada 2FAS.\n\nJika cadangan Anda dienkripsi, kata sandi akan Anda perlukan untuk mendekripsi cadangan",
"importLastpassGuide": "Gunakan pilihan \"Transfer accounts\" pada pengaturan Lastpass Authenticator dan tekan \"Export accounts to file\". Impor berkas JSON terunduh.",
"exportCodes": "Kode pengeksporan",
"importLabel": "Impor",
"importInstruction": "Mohon pilih berkas yang mengandung daftar kode dalam format seperti berikut",
"importCodeDelimiterInfo": "Kode dapat dipisahkan oleh tanda koma atau baris baru",
"selectFile": "Pilih file",
"emailVerificationToggle": "Verifikasi email",
"emailVerificationEnableWarning": "Untuk menghindari akun kamu terkunci, pastikan untuk menyimpan salinan 2FA email kamu di luar Ente Auth sebelum mengaktifkan verifikasi email.",
"emailVerificationToggle": "Verifikasi surel",
"emailVerificationEnableWarning": "Agar tidak akun Anda tidak terkunci, pastikan simpan salinan pengaturan 2FA surel Anda di luar aplikasi Ente Auth sebelum verifikasi surel Anda nyalakan.",
"authToChangeEmailVerificationSetting": "Mohon autentikasikan untuk mengubah verifikasi surel",
"authenticateGeneric": "Mohon autentikasikan",
"authToViewYourRecoveryKey": "Mohon autentikasikan untuk menampilkan kunci pemulihan",
"authToChangeYourEmail": "Moohn autentikasikan untuk mengubah surel",
"authToChangeYourPassword": "Mohon autentikasikan untuk mengubah kata sandi",
"authToViewSecrets": "Mohon autentikasikan untuk menampilkan RahasiaKu",
"authToInitiateSignIn": "Mohon autentikasikan untuk memulai proses pencadangan.",
"ok": "Oke",
"cancel": "Batal",
"email": "Email",
"support": "Dukungan",
"yes": "Ya",
"no": "Tidak",
"email": "Surel",
"support": "Bantuan",
"general": "Umum",
"settings": "Pengaturan",
"copied": "Disalin",
"pleaseTryAgain": "Mohon coba lagi",
"existingUser": "Pengguna yang Sudah Ada",
"newUser": "Baru di Ente",
"delete": "Hapus",
"enterYourPasswordHint": "Masukkan sandi kamu",
"enterYourPasswordHint": "Masukkan kata sandi Anda",
"forgotPassword": "Lupa kata sandi",
"oops": "Aduh",
"suggestFeatures": "Sarankan fitur",
"faq": "Tanya Jawab Umum",
"somethingWentWrongMessage": "Terjadi kesalahan, silakan coba lagi",
"leaveFamily": "Tinggalkan keluarga",
"leaveFamilyMessage": "Anda yakin sudah tidak ingin berlangganan paket keluarga ini?",
"inFamilyPlanMessage": "Anda sedang berlangganan paket keluarga!",
"hintForMobile": "Tekan lama kode untuk menyunting atau menghapus.",
"hintForDesktop": "Klik kanan kode untuk menyunting atau menghapus.",
"scan": "Pindai",
"scanACode": "Pindai kode",
"verify": "Verifikasi",
"verifyEmail": "Verifikasi email",
"enterCodeHint": "Masukkan kode 6 angka dari\napp autentikator kamu",
"enterCodeHint": "Masukkan kode 6 angka pada aplikasi pengautentikasi Anda",
"lostDeviceTitle": "Perangkat hilang?",
"twoFactorAuthTitle": "Autentikasi dua langkah",
"passkeyAuthTitle": "Verifikasi passkey",
"verifyPasskey": "Verifikasi passkey",
"recoverAccount": "Pulihkan akun",
"enterRecoveryKeyHint": "Masukkan kunci pemulihanmu",
"recover": "Pulihkan",
"contactSupportViaEmailMessage": "Silakan kirimkan surel ke {email} dari alamat surelmu yang terdaftar",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "Kode QR tidak sah",
"noRecoveryKeyTitle": "Tidak punya kunci pemulihan?",
"enterEmailHint": "Masukkan alamat surelmu",
"invalidEmailTitle": "Alamat surel tidak sah",
"invalidEmailMessage": "Harap masukkan alamat surel yang sah.",
"deleteAccount": "Hapus akun",
"deleteAccountQuery": "Sayang sekali Anda harus pergi. Apakah ada masalah?",
"yesSendFeedbackAction": "Ya, kirim umpan balik",
"noDeleteAccountAction": "Tidak, hapus akun",
"initiateAccountDeleteTitle": "Harap autentikasi untuk memulai penghapusan akun",
"sendEmail": "Kirim surel",
"createNewAccount": "Buat akun baru",
"weakStrength": "Lemah",
"strongStrength": "Kuat",
"moderateStrength": "Sedang",
"confirmPassword": "Konfirmasi sandi",
"close": "Tutup",
"oopsSomethingWentWrong": "Ups, sepertinya ada yang salah.",
"selectLanguage": "Pilih bahasa",
"language": "Bahasa",
"social": "Sosial",
"security": "Keamanan",
"lockscreen": "Layar kunci",
"authToChangeLockscreenSetting": "Mohon autentikan untuk mengganti pengaturan layar kunci",
"deviceLockEnablePreSteps": "Pasang kunci sandi atau kunci layar pada pengaturan sistem untuk menyalakan Pengunci Gawai.",
"viewActiveSessions": "Tampilkan sesi yang aktif",
"authToViewYourActiveSessions": "Mohon autentikasikan untuk menampilkan sesi aktif Anda",
"searchHint": "Cari...",
"scanAQrCode": "Pindai kode QR",
"search": "Cari",
"sorryUnableToGenCode": "Maaf, kami tidak dapat membuat kode untuk {issuerName}",
"noResult": "Tiada hasil",
"addCode": "Tambahkan kode",
"scanAQrCode": "Pindai kode Respons Cepat (QR)",
"enterDetailsManually": "Masukkan rincian secara manual",
"edit": "Sunting",
"share": "Bagikan",
"shareCodes": "Bagikan kode",
"shareCodesDuration": "Pilih durasi untuk membagikan kode.",
"restore": "Pulihkan",
"copiedToClipboard": "Tersalin ke papan klip",
"copiedNextToClipboard": "",
"error": "Galat",
"recoveryKeyCopiedToClipboard": "Kunci pemulihan tersalin ke papan klip",
"recoveryKeyOnForgotPassword": "Jika Anda lupa kata sandi Anda, satu-satunya cara untuk memulihkan data Anda adalah dengan kunci ini.",
"recoveryKeySaveDescription": "Kami tidak menyimpan kunci ini, tolong simpan kunci berisikan 24 kata ini di tempat yang aman.",
"doThisLater": "Nanti saja",
"saveKey": "Simpan kunci",
"save": "Simpan",
"send": "Kirim",
"saveOrSendDescription": "Anda ingin menyimpan kode ke penyimpanan Anda (folder pilihan bawaan adalah folder Downloads) atau Anda ingin kirimkan ke aplikasi lain?",
"saveOnlyDescription": "Anda ingin menyimpan kode ke penyimpanan Anda (folder pilihan bawaan adalah folder Downloads)",
"back": "Kembali",
"createAccount": "Buat akun",
"password": "Sandi",
"signUpTerms": "Saya menyetujui <u-terms>ketentuan layanan</u-terms> dan <u-policy>kebijakan privasi</u-policy> Ente",
"ackPasswordLostWarning": "Saya mengerti bahwa jika saya lupa sandi saya, data saya bisa hilang karena <underline>dienkripsi secara end-to-end</underline>.",
"loginTerms": "Dengan mengklik masuk akun, saya menyetujui <u-terms>ketentuan layanan</u-terms> dan <u-policy>kebijakan privasi</u-policy> Ente",
"passwordStrength": "Tingkat kekuatan kata sandi: {passwordStrengthValue}",
"@passwordStrength": {
"description": "Text to indicate the password strength",
"placeholders": {
"passwordStrengthValue": {
"description": "The strength of the password as a string",
"type": "String",
"example": "Weak or Moderate or Strong"
}
},
"message": "Password Strength: {passwordStrengthText}"
},
"password": "Kata Sandi",
"signUpTerms": "Saya menyetujui <u-terms>syarat dan ketentuan</u-terms> serta <u-policy>kebijakan privasi</u-policy> Ente",
"privacyPolicyTitle": "Kebijakan Privasi",
"termsOfServicesTitle": "Ketentuan",
"encryption": "Enkripsi",
"setPasswordTitle": "Atur kata sandi",
"changePasswordTitle": "Ubah kata sandi",
"resetPasswordTitle": "Atur ulang kata sandi",
"encryptionKeys": "Kunci enkripsi",
"passwordWarning": "Kami tidak menyimpan kata sandi Anda. Jika Anda lupa, <underline>kami tidak dapat mendekripsi data Anda</underline>",
"enterPasswordToEncrypt": "Masukkan kata sandi yang dapat kami gunakan untuk mengenkripsi data Anda",
"enterNewPasswordToEncrypt": "Masukkan kata sandi baru yang dapat kami gunakan untuk mengenkripsi data Anda",
"passwordChangedSuccessfully": "Kata sandi sukses diubah",
"generatingEncryptionKeys": "Sedang membuat kunci enkripsi...",
"continueLabel": "Lanjutkan",
"insecureDevice": "Gawai takaman",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Maaf, kami tidak dapat membuat kunci yang aman pada perangkat ini.\n\nHarap mendaftar dengan perangkat lain.",
"howItWorks": "Cara kerjanya",
"ackPasswordLostWarning": "Saya mengerti bahwa jika saya lupa kata sandi saya, data saya dapat hilang karena data saya <underline>terenkripsi secara end-to-end</underline>.",
"loginTerms": "Dengan menekan masuk akun, saya menyetujui <u-terms>syarat dan ketentuan</u-terms> serta <u-policy>kebijakan privasi</u-policy> Ente",
"logInLabel": "Masuk akun",
"logout": "Keluar akun",
"areYouSureYouWantToLogout": "Anda yakin ingin keluar dari akun ini?",
"yesLogout": "Ya, keluar akun",
"exit": "Keluar",
"verifyingRecoveryKey": "Memverifikasi kunci pemulihan...",
"recoveryKeyVerified": "Kunci pemulihan terverifikasi",
"recoveryKeySuccessBody": "Bagus! Kunci pemulihan ada valid. Terima kasih.\n\nMohon ingat-ingat untuk mencadangkan kunci pemulihan Anda dengan aman.",
"invalidRecoveryKey": "Kunci pemulihan yang Anda masukkan takvalid. Mohon pastikan kunci yang Anda masukkan terdiri atas 24 kata serta periksa kembali ejaan masing-masing kata.\n\nJika Anda justru memasukkan kode pemulihan yang lama, mohon pastikan panjang karakter kode 64 karakter. Jangan lupa periksa ejaan masing-masing kata.",
"recreatePasswordTitle": "Membuat kembali kata sandi",
"recreatePasswordBody": "Gawai Anda saat ini tidak dapat memverifikasi kata sandi Anda. Namun, kami dapat membuat ulang dengan cara yang dapat digunakan pada semua gawai.\n\nMohon masuk log dengan kunci pemulihan dan buat ulang kata sandi Anda (kata sandi yang sama diperbolehkan).",
"invalidKey": "Kunci takvalid",
"tryAgain": "Coba lagi",
"viewRecoveryKey": "Tampilkan kunci pemulihan",
"confirmRecoveryKey": "Konfirmasikan kunci pemeulihan",
"recoveryKeyVerifyReason": "Kunci pemulihan Anda merupakan satu-satunya cara untuk memulihkan foto-foto Anda bila Anda melupakan kata sandi Anda. Kunci pemulihan dapat Anda temukan di Pengaturan > Akun.\n\nMohon masukkan kunci pemulihan di sini untuk memastikan bahwa Anda telah menyimpan kunci tersebut dengan aman.",
"confirmYourRecoveryKey": "Konfirmasikan kunci pemulihan",
"confirm": "Konfirmasikan",
"emailYourLogs": "Kirimkan log Anda melalui surel",
"pleaseSendTheLogsTo": "Mohon kirim log ke {toEmail}",
"copyEmailAddress": "Salin alamat surel",
"exportLogs": "Ekspor log",
"enterYourRecoveryKey": "Masukkan kata kunci",
"tempErrorContactSupportIfPersists": "Sepertinya ada yang salah. Mohon coba lagi setelah beberapa waktu. Jika galat masih ada, Anda dapat menghubungi tim bantuan kami.",
"networkHostLookUpErr": "Tidak dapat terhubung ke Ente. Mohon periksa kembali koneksi internet Anda dan hubungi tim bantuan kami jika galat masih ada.",
"networkConnectionRefusedErr": "Sepertinya ada yang salah. Mohon coba lagi setelah beberapa waktu. Jika galat masih ada, Anda dapat menghubungi tim bantuan kami.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Sepertinya ada yang salah. Mohon coba lagi setelah beberapa waktu. Jika galat masih ada, Anda dapat menghubungi tim bantuan kami.",
"about": "Tentang Kami",
"weAreOpenSource": "Aplikasi kami bersumber terbuka, lo!",
"privacy": "Privasi",
"terms": "Ketentuan",
"checkForUpdates": "Periksa pemutakhiran aplikasi",
"checkStatus": "Periksa status",
"downloadUpdate": "Unduh pemutakhiran",
"criticalUpdateAvailable": "Tersedia pemutakhiran kritis",
"updateAvailable": "Tersedia aplikasi versi termutakhir",
"update": "Mutakhirkan",
"checking": "Sedang memeriksa...",
"youAreOnTheLatestVersion": "Aplikasi Anda merupakan versi termutakhir",
"warning": "Peringatan",
"androidCancelButton": "Batal",
"exportWarningDesc": "Berkas yang diekspor mengandung informasi yang bersifat sensitif. TOLONG SIMPAN BAIK-BAIK BERKAS INI.",
"iUnderStand": "Saya mengerti",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Mohon autentikasikan untuk mengekspor kode-kode Anda",
"importSuccessTitle": "Yey! :>",
"importSuccessDesc": "Sebanyak {count} kode telah Anda impor!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "Maaf",
"importFailureDesc": "Tidak dapat mengurai berkas yang dipilih.\nMohon kirimkan surel ke support@ente.io jika Anda memerlukan bantuan!",
"pendingSyncs": "Peringatan",
"pendingSyncsWarningBody": "Ada sebagian kode yang belum dicadangkan.\n\nMohon pastikan bahwa Anda telah mencadangkan kode-kode ini sebelum Anda keluar log.",
"checkInboxAndSpamFolder": "Mohon cek",
"tapToEnterCode": "Ketuk untuk memasukkan kode",
"resendEmail": "Kirim ulang surel",
"weHaveSendEmailTo": "Kami telah mengirimkan sebuah posel ke <green>{email}</green>",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
"email": {
"description": "The email address of the user",
"type": "String",
"example": "example@ente.io"
}
}
},
"activeSessions": "Sesi aktif",
"somethingWentWrongPleaseTryAgain": "Ada yang salah. Mohon coba kembali",
"thisWillLogYouOutOfThisDevice": "Langkah ini akan mengeluarkan Anda dari gawai ini!",
"thisWillLogYouOutOfTheFollowingDevice": "Langkah ini akan mengeluarkan Anda dari gawai berikut:",
"terminateSession": "Akhiri sesi?",
"terminate": "Akhiri",
"thisDevice": "Gawai ini",
"toResetVerifyEmail": "Untuk mengatur ulang kata sandi, mohon verifikasi surel Anda terlebih dahulu.",
"thisEmailIsAlreadyInUse": "Surel ini sudah dipakai!",
"verificationFailedPleaseTryAgain": "Gagal memverifikasi. Mohon coba lagi",
"yourVerificationCodeHasExpired": "Kode verifikasi Anda telah kedaluwarsa",
"incorrectCode": "Kode takbenar",
"sorryTheCodeYouveEnteredIsIncorrect": "Maaf, kode yang Anda masukkan takbenar",
"emailChangedTo": "Surel sudah diganti menjadi {newEmail}",
"authenticationFailedPleaseTryAgain": "Gagal mengautentikasi. Mohon coba lagi",
"authenticationSuccessful": "Sukses mengautentikasi!",
"twofactorAuthenticationSuccessfullyReset": "Autentikasi dwifaktor sukses diatur ulang",
"incorrectRecoveryKey": "Kunci pemulihan takbenar",
"theRecoveryKeyYouEnteredIsIncorrect": "Kunci pemulihan yang Anda masukkan takbenar",
"enterPassword": "Masukkan kata sandi",
"selectExportFormat": "Pilih format pengeksporan",
"exportDialogDesc": "Data ekspor yang terenkripsi akan dilindungi kata sandi yang Anda pilih.",
"encrypted": "Terenkripsi",
"plainText": "Kata",
"passwordToEncryptExport": "Kata sandi untuk mengenkripsi data yang diekspor",
"export": "Ekspor",
"useOffline": "Gunakan tanpa pencadangan",
"signInToBackup": "Masuk untuk mencadangkan kode-kode Anda",
"singIn": "Masuk",
"sigInBackupReminder": "Mohon ekspor kode-kode Anda demi memastikan bahwa Anda memiliki kode cadangan yang sewaktu-waktu dapat Anda pulihkan jika Anda butuh.",
"offlineModeWarning": "Anda telah memilih pilihan 'Gunakan tanpa pencadangan'. Mohon lakukan pencadangan secara manual demi memastikan bahwa kode-kode Anda aman.",
"showLargeIcons": "Perbesar ikon",
"compactMode": "Mode ringkas",
"shouldHideCode": "Sembunyikan kode",
"doubleTapToViewHiddenCode": "Ketuk dua kali untuk memasukkan kode baru",
"focusOnSearchBar": "Buka pencarian begitu aplikasi dibuka",
"confirmUpdatingkey": "Anda yakin ingin memutakhirkan kunci rahasia ini?",
"minimizeAppOnCopy": "Minimkan layar aplikasi saat sedang menyalin",
"editCodeAuthMessage": "Autentikasikan untuk menyunting kode",
"deleteCodeAuthMessage": "Autentikasikan untuk menghapus kode",
"showQRAuthMessage": "Autentikasikan untuk menampilkan kode Respons Cepat (QR)",
"confirmAccountDeleteTitle": "Konfirmasikan penghapusan akun",
"confirmAccountDeleteMessage": "Akun ini terhubung dengan aplikasi Ente yang lain (jika Anda pakai).\n\nData yang Anda unggah di seluruh aplikasi Ente akan dijadwalkan untuk dihapus. Akun Anda juga akan dihapus secara permanen.",
"androidBiometricHint": "Verifikasikan identitas Anda",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Tidak dikenal. Coba lagi.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Sukses",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Batalkan",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"hearUsWhereTitle": "Dari mana Anda menemukan Ente? (opsional)"
"androidSignInTitle": "Autentikasi",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "Biometrik diperlukan",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "Kredensial gawal diperlukan",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "Kredensial gawal diperlukan",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "Ke pengaturan",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "Tidak ada autentikasi biometrik pada gawai Anda. Buka 'Pengaturan > Keamanan' untuk menambahkan autentikasi biometrik pada gawai Anda.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "Autentikasi biometrik dimatikan. Kunci dan buka layar Anda untuk menyalakan autentikasi biometrik.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Tidak ada autentikasi biometrik pada gawai Anda. Nyalakan Touch ID atau Face ID pada gawai Anda.",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "Oke",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "Tiada koneksi internet",
"pleaseCheckYourInternetConnectionAndTryAgain": "Mohon periksa koneksi internet Anda dan coba kembali.",
"signOutFromOtherDevices": "Keluar dari gawai yang lain",
"signOutOtherBody": "Jika Anda pikir seseorang mungkin mengetahui kata sandi Anda, Anda dapat mengeluarkan akun Anda pada semua gawai",
"signOutOtherDevices": "Keluar akun pada gawai yang lain",
"doNotSignOut": "Jangan keluar",
"hearUsWhereTitle": "Dari mana Anda menemukan Ente? (opsional)",
"hearUsExplanation": "Kami tidak melacak penginstalan aplikasi kami. Akan sangat membantu kami bila Anda memberitahu kami dari mana Anda mengetahui Ente!",
"recoveryKeySaved": "Kunci pemulihan sudah tersimpan di folder 'Downloads'!",
"waitingForBrowserRequest": "Menantikan permohonan peramban...",
"waitingForVerification": "Menantikan verifikasi...",
"passkey": "Kunci sandi",
"passKeyPendingVerification": "Verifikasi tertunda",
"loginSessionExpired": "Sesi sudah berakhir",
"loginSessionExpiredDetails": "Sesi Anda sudah berakhir. Mohon masuk log kembali.",
"developerSettingsWarning": "Anda yakin ingin mengatur Pengaturan Pengembang?",
"developerSettings": "Pengaturan Pengembang",
"serverEndpoint": "Peladen endpoint",
"invalidEndpoint": "Endpoint takvalid",
"invalidEndpointMessage": "Maaf, endpoint yang Anda masukkan takvalid. Mohon masukkan endpoint yang valid, lalu coba kembali.",
"endpointUpdatedMessage": "Endpoint sukses dimutakhirkan",
"customEndpoint": "Terkoneksi ke {endpoint}",
"pinText": "Sematkan",
"unpinText": "Awasematkan",
"pinnedCodeMessage": "{code} telah disematkan",
"unpinnedCodeMessage": "{code} telah diawasematkan",
"tags": "Tanda",
"createNewTag": "Buat Tanda Baru",
"tag": "Tanda",
"create": "Buat",
"editTag": "Sunting tanda",
"deleteTagTitle": "Hapus tanda?",
"deleteTagMessage": "Anda yakin ingin menghapus tanda? Langkah ini tidak akan dapat dikembalikan seperti semula.",
"somethingWentWrongParsingCode": "Kode {x} tidak dapat kami urai.",
"updateNotAvailable": "Pemutakhiran tidak tersedia",
"viewRawCodes": "Tampilkan kode mentahan",
"rawCodes": "Kode mentahan",
"rawCodeData": "Data kode mentahan",
"appLock": "Pengunci Apl",
"noSystemLockFound": "Pengunci sistem tidak ditemukan",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Untuk menyalakan Pengunci Apl, mohon pasang kode sandi atau kunci layar di pengaturan sistem gawai Anda",
"autoLock": "Autokunci",
"immediately": "Dengan segera",
"reEnterPassword": "Masukkan kembali kata sandi",
"reEnterPin": "Masukkan kembali PIN",
"next": "Selanjutnya",
"tooManyIncorrectAttempts": "Terlalu banyak percobaan yang salah",
"tapToUnlock": "Ketuk untuk membuka",
"setNewPassword": "Pasang kata sandi baru",
"deviceLock": "Pengunci bawaan gawai",
"hideContent": "Sembunyikan isi",
"hideContentDescriptionAndroid": "Sembunyikan isi aplikasi pada pengganti apl dan matikan penangkap layar",
"hideContentDescriptioniOS": "Sembunyikan isi aplikasi di pengganti apl",
"autoLockFeatureDescription": "Durasi waktu aplikasi akan terkunci setelah aplikasi ditutup",
"appLockDescription": "Pilih layar kunci bawaan gawai Anda ATAU layar kunci kustom dengan PIN atau kata sandi.",
"pinLock": "PIN",
"enterPin": "Masukkan PIN",
"setNewPin": "Pasang PIN yang baru",
"importFailureDescNew": "Berkas yang dipilih tidak dapat diurai",
"appLockNotEnabled": "Pengunci Apl tidak dinyalakan",
"appLockNotEnabledDescription": "Mohon nyalakan pengunci apl di Keamanan > Pengunci Apl",
"authToViewPasskey": "Mohon autentikasikan untuk menampilkan kunci sandi",
"appLockOfflineModeWarning": "Anda telah memilih untuk mengunci aplikasi tanpa cadangan apa pun. Jika Anda lupa kode Pengunci Apl Anda, Anda tidak akan dapat mengakses data-data Anda."
}

View File

@@ -1,6 +1,6 @@
{
"account": "계정",
"unlock": "잠금해제",
"unlock": "잠금 해제",
"recoveryKey": "복구 키",
"counterAppBarTitle": "카운터",
"@counterAppBarTitle": {
@@ -19,6 +19,7 @@
"pleaseVerifyDetails": "입력된 정보를 확인하고 다시 시도하세요",
"codeIssuerHint": "발행인",
"codeSecretKeyHint": "비밀 키",
"all": "모든 항목",
"codeAccountHint": "계정 (you@domain.com)",
"codeTagHint": "태그",
"accountKeyType": "키 종류",
@@ -34,8 +35,11 @@
"nextTotpTitle": "다음",
"deleteCodeTitle": "코드를 삭제할까요?",
"deleteCodeMessage": "정말 이 코드를 삭제하시겠습니까? 이 동작은 되돌릴 수 없습니다.",
"trashCode": "코드를 삭제할까요?",
"trashCodeMessage": "정말로 {account} 의 코드를 삭제할까요?",
"trash": "휴지통",
"viewLogsAction": "로그 확인",
"sendLogsDescription": "이렇게 하면 문제를 디버깅하는 데 도움이 되는 로그가 전송됩니다. 민감한 정보가 기록되지 않도록 예방 조치를 취하고 있지만, 로그를 공유하기 전에 해당 로그를 확인하는 것이 좋습니다.",
"sendLogsDescription": "이 로그를 전송하면 문제 해결을 위한 디버그에 도움이 됩니다. 민감한 정보가 로그에 기록되지 않도록 주의를 기울이고 있지만, 공유하기 전에 해당 로그를 직접 확인하시기를 권장합니다.",
"preparingLogsTitle": "로그를 준비하는 중...",
"emailLogsTitle": "이메일 로그",
"emailLogsMessage": "{email} 로 로그를 보내주세요",
@@ -51,7 +55,7 @@
"reportABug": "버그 제보",
"crashAndErrorReporting": "충돌 & 에러 보고",
"reportBug": "버그 제보",
"emailUsMessage": "{email} 로 이메일을 보내주세요",
"emailUsMessage": "{email} 로 이메일을 보내주세요.",
"@emailUsMessage": {
"placeholders": {
"email": {
@@ -59,7 +63,7 @@
}
}
},
"contactSupport": "지원 연락",
"contactSupport": "지원 문의",
"rateUsOnStore": "{storeName} 에서 평가해주세요",
"blog": "블로그",
"merchandise": "제품",
@@ -82,5 +86,22 @@
"importTypeEnteEncrypted": "Ente로 암호화된 내보내기",
"passwordForDecryptingExport": "복호화용 비밀번호",
"passwordEmptyError": "비밀번호는 비어있을 수 없습니다",
"importSelectJsonFile": "JSON 파일 선택"
"importFromApp": "{appName} 로부터 코드 불러오기",
"importSelectJsonFile": "JSON 파일 선택",
"exportCodes": "코드 내보내기",
"selectFile": "파일 선택",
"emailVerificationToggle": "이메일 검증",
"email": "이메일",
"support": "지원",
"general": "일반 설정",
"settings": "설정",
"copied": "복사 됨",
"pleaseTryAgain": "다시 시도해주세요.",
"existingUser": "기존 유저",
"newUser": "Ente에 새로 가입",
"delete": "삭제",
"enterYourPasswordHint": "패스워드 입력",
"forgotPassword": "패스워드 분실",
"suggestFeatures": "기능 제안",
"faq": "FAQ"
}

View File

@@ -8,17 +8,17 @@
},
"onBoardingBody": "Saugiai kurkite atsargines 2FA kodų kopijas",
"onBoardingGetStarted": "Pradėti",
"setupFirstAccount": "Nustatyti pirmąją paskyrą",
"setupFirstAccount": "Nustatykite savo pirmąją paskyrą",
"importScanQrCode": "Skenuoti QR kodą",
"qrCode": "QR kodas",
"importEnterSetupKey": "Įveskite sąrankos raktą",
"importAccountPageTitle": "Įveskite paskyros duomenis",
"importEnterSetupKey": "Įvesti sąrankos raktą",
"importAccountPageTitle": "Įvesti paskyros duomenis",
"secretCanNotBeEmpty": "Paslaptis negali būti tuščia.",
"bothIssuerAndAccountCanNotBeEmpty": "Tiek išdavėjas ir paskyra negali būti tušti.",
"incorrectDetails": "Neteisingi duomenys",
"pleaseVerifyDetails": "Patikrinkite duomenis ir bandykite dar kartą.",
"codeIssuerHint": "Išdavėjas",
"codeSecretKeyHint": "Slaptas raktas",
"codeSecretKeyHint": "Slaptasis raktas",
"secret": "Paslaptis",
"all": "Viskas",
"notes": "Pastabos",
@@ -50,7 +50,7 @@
"deleteCodeMessage": "Ar tikrai norite ištrinti šį kodą? Šis veiksmas negrįžtamas.",
"trashCode": "Ištuštinti kodą?",
"trashCodeMessage": "Ar tikrai norite ištuštinti {account} kodą?",
"trash": "Šiukšlinė",
"trash": "Ištuštinti",
"viewLogsAction": "Peržiūrėti žurnalus",
"sendLogsDescription": "Tai nusiųs žurnalo įrašus, kurie padės mums išspręsti jūsų problemą. Nors imamės atsargumo priemonių, kad slaptos informacijos nebūtų įrašoma, raginame jus peržiūrėti šiuos žurnalus prieš bendrinant juos.",
"preparingLogsTitle": "Ruošiami žurnalai...",
@@ -66,7 +66,7 @@
"copyEmailAction": "Kopijuoti el. paštą",
"exportLogsAction": "Eksportuoti žurnalus",
"reportABug": "Pranešti apie riktą",
"crashAndErrorReporting": "Strigčių ir klaidų pranešimas",
"crashAndErrorReporting": "Pranešti apie strigčius ir klaidas",
"reportBug": "Pranešti apie riktą",
"emailUsMessage": "Siųskite el. laišką mums adresu {email}",
"@emailUsMessage": {
@@ -77,18 +77,18 @@
}
},
"contactSupport": "Susisiekti su palaikymo komanda",
"rateUsOnStore": "Vertinti mus parduotuvėje {storeName}",
"rateUsOnStore": "Vertinti mus parduotuvėje {storeName}",
"blog": "Tinklaraštis",
"merchandise": "Atributika",
"verifyPassword": "Patvirtinkite slaptažodį",
"pleaseWait": "Palaukite...",
"generatingEncryptionKeysTitle": "Generuojami šifravimo raktai...",
"recreatePassword": "Iš naujo sukurti slaptažodį",
"recreatePasswordMessage": "Dabartinis įrenginys nėra pakankamai galingas, kad patvirtintų jūsų slaptažodį, todėl turime jį vieną kartą regeneruoti taip, kad jis veiktų visuose įrenginiuose. \n\nPrisijunkite naudojant atkūrimo raktą ir regeneruokite slaptažodį (jei norite, galite vėl naudoti tą patį).",
"recreatePasswordMessage": "Dabartinis įrenginys nėra pakankamai galingas, kad patvirtintų jūsų slaptažodį, todėl turime jį vieną kartą iš naujo sugeneruoti taip, kad jis veiktų visuose įrenginiuose. \n\nPrisijunkite naudodami atkūrimo raktą ir sugeneruokite iš naujo slaptažodį (jei norite, galite vėl naudoti tą patį).",
"useRecoveryKey": "Naudoti atkūrimo raktą",
"incorrectPasswordTitle": "Neteisingas slaptažodis.",
"welcomeBack": "Sveiki sugrįžę!",
"madeWithLoveAtPrefix": "sukurta su ❤️ ",
"madeWithLoveAtPrefix": "sukurta su ❤️ vietoje ",
"supportDevs": "Prenumeruokite <bold-green>„ente“</bold-green>, kad palaikytumėte mus",
"supportDiscount": "Naudokite kupono kodą „AUTH“, kad gautumėte 10 % nuolaida pirmiesiems metams",
"changeEmail": "Keisti el. paštą",
@@ -100,14 +100,14 @@
"passwordForDecryptingExport": "Slaptažodis eksportui iššifruoti",
"passwordEmptyError": "Slaptažodis negali būti tuščias.",
"importFromApp": "Importuoti kodus iš „{appName}“",
"importGoogleAuthGuide": "Eksportuokite paskyras iš „Google Authenticator“ į QR kodą naudojant parinktį Perkelti paskyras. Tada naudojant kitą įrenginį nuskenuokite QR kodą.\n\nPatarimas: QR kodą galite nufotografuoti naudojant nešiojamojo kompiuterio internetinę vaizdo kamerą.",
"importGoogleAuthGuide": "Eksportuokite paskyras iš „Google Authenticator“ į QR kodą naudodami parinktį Perkelti paskyras. Tada naudojant kitą įrenginį nuskenuokite QR kodą.\n\nPatarimas: QR kodą galite nufotografuoti naudojant nešiojamojo kompiuterio internetinę vaizdo kamerą.",
"importSelectJsonFile": "Pasirinkti JSON failą",
"importSelectAppExport": "Pasirinkti „{appName}“ eksporto failą",
"importEnteEncGuide": "Pasirinkite užšifruotą JSON failą, eksportuotą iš „Ente“",
"importRaivoGuide": "Naudokite „Raivo“ nustatymuose esančią parinktį „Export OTPs to Zip archive“ (eksportuoti OTP į ZIP archyvą).\n\nIšskleiskite ZIP failą ir importuokite JSON failą.",
"importBitwardenGuide": "Naudokite „Bitwarden“ įrankiuose esančią parinktį Eksportuoti saugyklą ir importuokite nešifruotą JSON failą.",
"importAegisGuide": "Naudokite „Aegis“ nustatymuose esančią parinktį Eksportuoti slėptuvę.\n\nJei jūsų saugykla yra užšifruota, turėsite įvesti saugyklos slaptažodį, kad iššifruotumėte saugyklą.",
"import2FasGuide": "Naudokite 2FAS parinktį „Settings->2FAS Backup->Export to file“.\n\nJei atsarginė kopija užšifruota, turėsite įvesti slaptažodį, kad iššifruotumėte atsarginę kopiją.",
"importBitwardenGuide": "Naudokite „Bitwarden“ įrankiuose esančią parinktį Eksportuoti saugyklą ir importuokite nešifruotą JSON failą.",
"importAegisGuide": "Naudokite „Aegis“ nustatymuose esančią parinktį Eksportuoti slėptuvę.\n\nJei jūsų saugykla užšifruota, turėsite įvesti saugyklos slaptažodį, kad iššifruotumėte saugyklą.",
"import2FasGuide": "Naudokite programoje 2FAS esančią parinktį „Settings->2FAS Backup->Export to file“.\n\nJei atsarginė kopija užšifruota, turėsite įvesti slaptažodį, kad iššifruotumėte atsarginę kopiją.",
"importLastpassGuide": "Naudokite „Lastpass Authenticator“ nustatymuose esančią parinktį „Transfer accounts“ (perkelti paskyras) ir paspauskite „Export accounts to file“ (eksportuoti paskyras į failą). Importuokite atsisiųstą JSON failą.",
"exportCodes": "Eksportuoti kodus",
"importLabel": "Importuoti",
@@ -122,7 +122,7 @@
"authToChangeYourEmail": "Nustatykite tapatybę, kad pakeistumėte savo el. paštą",
"authToChangeYourPassword": "Nustatykite tapatybę, kad pakeistumėte slaptažodį",
"authToViewSecrets": "Nustatykite tapatybę, kad peržiūrėtumėte savo paslaptis",
"authToInitiateSignIn": "Nustatykite tapatybę, kad pradėtumėte prisijungti prie atsarginės kopijos.",
"authToInitiateSignIn": "Nustatykite tapatybę, kad pradėtumėte prisijungti norint kurti atsargines kopijas.",
"ok": "Gerai",
"cancel": "Atšaukti",
"yes": "Taip",
@@ -134,7 +134,7 @@
"copied": "Nukopijuota",
"pleaseTryAgain": "Bandykite dar kartą.",
"existingUser": "Esamas naudotojas",
"newUser": "Naujas platformoje „Ente“",
"newUser": "Naujas sistemoje „Ente“",
"delete": "Ištrinti",
"enterYourPasswordHint": "Įveskite savo slaptažodį",
"forgotPassword": "Pamiršau slaptažodį",
@@ -148,7 +148,7 @@
"hintForMobile": "Ilgai paspauskite kodą, kad jį redaguotumėte arba pašalintumėte.",
"hintForDesktop": "Dešiniuoju pelės mygtuku spustelėkite kodą, kad jį redaguotumėte arba pašalintumėte.",
"scan": "Skenuoti",
"scanACode": "Skenuoti kodą",
"scanACode": "Skenuokite kodą",
"verify": "Patvirtinti",
"verifyEmail": "Patvirtinti el. paštą",
"enterCodeHint": "Įveskite 6 skaitmenų kodą\niš autentifikatoriaus programos",
@@ -170,17 +170,19 @@
"invalidQRCode": "Netinkamas QR kodas.",
"noRecoveryKeyTitle": "Neturite atkūrimo rakto?",
"enterEmailHint": "Įveskite savo el. pašto adresą",
"invalidEmailTitle": "Netinkamas el. pašto adresas.",
"invalidEmailTitle": "Netinkamas el. pašto adresas",
"invalidEmailMessage": "Įveskite tinkamą el. pašto adresą.",
"deleteAccount": "Ištrinti paskyrą",
"deleteAccountQuery": "Apgailestausime, kad išeinate. Ar susiduriate su kažkokiomis problemomis?",
"yesSendFeedbackAction": "Taip, siųsti atsiliepimą",
"noDeleteAccountAction": "Ne, ištrinti paskyrą",
"initiateAccountDeleteTitle": "Nustatykite tapatybę, kad pradėtumėte paskyros ištrynimą",
"sendEmail": "Siųsti el. laišką",
"createNewAccount": "Kurti naują paskyrą",
"weakStrength": "Silpna",
"strongStrength": "Stipri",
"moderateStrength": "Vidutinė",
"confirmPassword": "Patvirtinkite slaptažodį",
"close": "Uždaryti",
"oopsSomethingWentWrong": "Ups, kažkas nutiko ne taip.",
"selectLanguage": "Pasirinkite kalbą",
@@ -190,20 +192,93 @@
"lockscreen": "Ekrano užraktas",
"authToChangeLockscreenSetting": "Nustatykite tapatybę, kad pakeistumėte užrakinto ekrano nustatymą",
"deviceLockEnablePreSteps": "Kad įjungtumėte įrenginio užraktą, sistemos nustatymuose nustatykite įrenginio prieigos kodą arba ekrano užraktą.",
"viewActiveSessions": "Peržiūrėti aktyvius seansus",
"authToViewYourActiveSessions": "Nustatykite tapatybę, kad peržiūrėtumėte savo aktyvius seansus",
"searchHint": "Ieškokite...",
"search": "Paieška",
"sorryUnableToGenCode": "Atsiprašome, nepavyksta sugeneruoti {issuerName} kodo.",
"noResult": "Nėra rezultatų",
"addCode": "Pridėti kodą",
"scanAQrCode": "Skenuoti QR kodą",
"enterDetailsManually": "Įvesti duomenis rankiniu būdu",
"edit": "Redaguoti",
"share": "Bendrinti",
"shareCodes": "Bendrinti kodus",
"shareCodesDuration": "Pasirinkite trukmę, kuriai norite bendrinti kodus.",
"restore": "Atkurti",
"copiedToClipboard": "Nukopijuota į iškarpinę",
"copiedNextToClipboard": "Nukopijuotas sekantis kodas į iškarpinę",
"error": "Klaida",
"recoveryKeyCopiedToClipboard": "Nukopijuotas atkūrimo raktas į iškarpinę",
"recoveryKeyOnForgotPassword": "Jei pamiršote slaptažodį, vienintelis būdas atkurti duomenis naudoti šį raktą.",
"recoveryKeySaveDescription": "Šio rakto nesaugome, todėl išsaugokite šį 24 žodžių raktą saugioje vietoje.",
"doThisLater": "Daryti tai vėliau",
"saveKey": "Išsaugoti raktą",
"save": "Išsaugoti",
"send": "Siųsti",
"saveOrSendDescription": "Ar norite tai išsaugoti saugykloje (pagal numatytuosius nustatymus atsisiuntimų aplanke), ar siųsti į kitas programas?",
"saveOnlyDescription": "Ar norite tai išsaugoti savo saugykloje (pagal numatytuosius nustatymus atsisiuntimų aplanke)?",
"back": "Atgal",
"createAccount": "Kurti paskyrą",
"passwordStrength": "Slaptažodžio stiprumas: {passwordStrengthValue}",
"@passwordStrength": {
"description": "Text to indicate the password strength",
"placeholders": {
"passwordStrengthValue": {
"description": "The strength of the password as a string",
"type": "String",
"example": "Weak or Moderate or Strong"
}
},
"message": "Password Strength: {passwordStrengthText}"
},
"password": "Slaptažodis",
"signUpTerms": "Sutinku su <u-terms>paslaugų sąlygomis</u-terms> ir <u-policy> privatumo politika</u-policy>",
"privacyPolicyTitle": "Privatumo politika",
"termsOfServicesTitle": "Sąlygos",
"encryption": "Šifravimas",
"setPasswordTitle": "Nustatyti slaptažodį",
"changePasswordTitle": "Keisti slaptažodį",
"resetPasswordTitle": "Nustatyti slaptažodį iš naujo",
"encryptionKeys": "Šifravimo raktai",
"passwordWarning": "Šio slaptažodžio nesaugome, todėl jei jį pamiršite, <underline>negalėsime iššifruoti jūsų duomenų</underline>",
"enterPasswordToEncrypt": "Įveskite slaptažodį, kurį galime naudoti jūsų duomenims užšifruoti",
"enterNewPasswordToEncrypt": "Įveskite naują slaptažodį, kurį galime naudoti jūsų duomenims užšifruoti",
"passwordChangedSuccessfully": "Slaptažodis sėkmingai pakeistas",
"generatingEncryptionKeys": "Generuojami šifravimo raktai...",
"continueLabel": "Tęsti",
"insecureDevice": "Nesaugus įrenginys",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Atsiprašome, šiame įrenginyje nepavyko sugeneruoti saugių raktų.\n\nRegistruokitės iš kito įrenginio.",
"howItWorks": "Kaip tai veikia",
"ackPasswordLostWarning": "Suprantu, kad jei prarasiu slaptažodį, galiu prarasti savo duomenis, kadangi duomenys yra <underline>visapusiškai užšifruota</underline>.",
"loginTerms": "Spustelėjus Prisijungti sutinku su <u-terms>paslaugų sąlygomis</u-terms> ir <u-policy> privatumo politika</u-policy>",
"logInLabel": "Prisijungti",
"logout": "Atsijungti",
"areYouSureYouWantToLogout": "Ar tikrai norite atsijungti?",
"yesLogout": "Taip, atsijungti",
"exit": "Išeiti",
"verifyingRecoveryKey": "Patvirtinima atkūrimo raktą...",
"recoveryKeyVerified": "Patvirtintas atkūrimo raktas",
"recoveryKeySuccessBody": "Puiku! Jūsų atkūrimo raktas tinkamas. Dėkojame už patvirtinimą.\n\nNepamirškite sukurti saugią atkūrimo rakto atsarginę kopiją.",
"invalidRecoveryKey": "Įvestas atkūrimo raktas yra netinkamas. Įsitikinkite, kad jame yra 24 žodžiai, ir patikrinkite kiekvieno iš jų rašybą.\n\nJei įvedėte senesnį atkūrimo kodą, įsitikinkite, kad jis yra 64 simbolių ilgio, ir patikrinkite kiekvieną iš jų.",
"recreatePasswordTitle": "Iš naujo sukurti slaptažodį",
"recreatePasswordBody": "Dabartinis įrenginys nėra pakankamai galingas, kad patvirtintų jūsų slaptažodį, bet mes galime iš naujo sugeneruoti taip, kad jis veiktų su visais įrenginiais.\n\nPrisijunkite naudodami atkūrimo raktą ir sugeneruokite iš naujo slaptažodį (jei norite, galite vėl naudoti tą patį).",
"invalidKey": "Netinkamas raktas.",
"tryAgain": "Bandyti dar kartą",
"viewRecoveryKey": "Peržiūrėti atkūrimo raktą",
"confirmRecoveryKey": "Patvirtinkite atkūrimo raktą",
"recoveryKeyVerifyReason": "Atkūrimo raktas vienintelis būdas atkurti nuotraukas, jei pamiršote slaptažodį. Atkūrimo raktą galite rasti Nustatymose > Paskyra.\n\nĮveskite savo atkūrimo raktą čia, kad patvirtintumėte, ar teisingai jį išsaugojote.",
"confirmYourRecoveryKey": "Patvirtinkite savo atkūrimo raktą",
"confirm": "Patvirtinti",
"emailYourLogs": "Atsiųskite žurnalus el. laišku",
"pleaseSendTheLogsTo": "Siųskite žurnalus adresu\n{toEmail}",
"copyEmailAddress": "Kopijuoti el. pašto adresą",
"exportLogs": "Eksportuoti žurnalus",
"enterYourRecoveryKey": "Įveskite atkūrimo raktą",
"tempErrorContactSupportIfPersists": "Atrodo, kad kažkas nutiko ne taip. Bandykite dar kartą po kurio laiko. Jei klaida tęsiasi, susisiekite su mūsų palaikymo komanda.",
"networkHostLookUpErr": "Nepavyksta prisijungti prie „Ente“. Patikrinkite tinklo nustatymus ir susisiekite su palaikymo komanda, jei klaida tęsiasi.",
"networkConnectionRefusedErr": "Nepavyksta prisijungti prie „Ente“. Bandykite dar kartą po kurio laiko. Jei klaida tęsiasi, susisiekite su palaikymo komanda.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Atrodo, kad kažkas nutiko ne taip. Bandykite dar kartą po kurio laiko. Jei klaida tęsiasi, susisiekite su mūsų palaikymo komanda.",
"about": "Apie",
"weAreOpenSource": "Esame atviro kodo!",
"privacy": "Privatumas",
@@ -224,7 +299,7 @@
},
"authToExportCodes": "Nustatykite tapatybę, kad eksportuotumėte savo kodus",
"importSuccessTitle": "Valio!",
"importSuccessDesc": "Importavote {count} kodų!",
"importSuccessDesc": "Importavote {count} kodų.",
"@importSuccessDesc": {
"placeholders": {
"count": {
@@ -241,7 +316,7 @@
"checkInboxAndSpamFolder": "Patikrinkite savo gautieją (ir šlamštą), kad užbaigtumėte patvirtinimą",
"tapToEnterCode": "Palieskite, kad įvestumėte kodą",
"resendEmail": "Iš naujo siųsti el. laišką",
"weHaveSendEmailTo": "Išsiuntėme laišką į <green>{email}</green>",
"weHaveSendEmailTo": "Išsiuntėme laišką adresu <green>{email}</green>",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
@@ -256,10 +331,117 @@
"somethingWentWrongPleaseTryAgain": "Kažkas nutiko ne taip. Bandykite dar kartą.",
"thisWillLogYouOutOfThisDevice": "Tai jus atjungs nuo šio įrenginio.",
"thisWillLogYouOutOfTheFollowingDevice": "Tai jus atjungs nuo toliau nurodyto įrenginio:",
"terminateSession": "Baigti seansą?",
"terminate": "Baigti",
"thisDevice": "Šis įrenginys",
"toResetVerifyEmail": "Kad iš naujo nustatytumėte slaptažodį, pirmiausia patvirtinkite savo el. paštą.",
"thisEmailIsAlreadyInUse": "Šis el. paštas jau naudojamas.",
"verificationFailedPleaseTryAgain": "Patvirtinimas nepavyko. Bandykite dar kartą.",
"yourVerificationCodeHasExpired": "Jūsų patvirtinimo kodo laikas nebegaliojantis.",
"incorrectCode": "Neteisingas kodas",
"sorryTheCodeYouveEnteredIsIncorrect": "Atsiprašome, įvestas kodas yra neteisingas.",
"emailChangedTo": "El. paštas pakeistas į {newEmail}",
"authenticationFailedPleaseTryAgain": "Tapatybės nustatymas nepavyko. Bandykite dar kartą.",
"authenticationSuccessful": "Tapatybės nustatymas sėkmingas!",
"twofactorAuthenticationSuccessfullyReset": "Dvigubas tapatybės nustatymas sėkmingai iš naujo nustatytas.",
"incorrectRecoveryKey": "Neteisingas atkūrimo raktas",
"theRecoveryKeyYouEnteredIsIncorrect": "Įvestas atkūrimo raktas yra neteisingas.",
"enterPassword": "Įveskite slaptažodį",
"selectExportFormat": "Pasirinkite eksporto formatą",
"exportDialogDesc": "Užšifruoti eksportai bus apsaugoti jūsų pasirinktu slaptažodžiu.",
"encrypted": "Užšifruota",
"plainText": "Paprastasis tekstas",
"passwordToEncryptExport": "Slaptažodis eksportui užšifruoti",
"export": "Eksportuoti",
"useOffline": "Naudoti be atsarginių kopijų",
"signInToBackup": "Prisijunkite, kad sukurtumėte atsargines kodų kopijas",
"singIn": "Prisijungti",
"sigInBackupReminder": "Eksportuokite kodus, kad turėtumėte atsarginę kopiją, kurią galėsite atkurti.",
"offlineModeWarning": "Pasirinkote tęsti be atsarginių kopijų. Kad įsitikintumėte, jog jūsų kodai yra saugūs, pasidarykite atsargines kopijas rankiniu būdu.",
"showLargeIcons": "Rodyti dideles piktogramas",
"compactMode": "Kompaktinis režimas",
"shouldHideCode": "Slėpti kodus",
"doubleTapToViewHiddenCode": "Galite dukart paliesti elementą, kad peržiūrėtumėte kodą",
"focusOnSearchBar": "Fokusuoti paiešką paleidžiant programą",
"confirmUpdatingkey": "Ar tikrai norite atnaujinti slaptąjį raktą?",
"minimizeAppOnCopy": "Sumažinti programą kopijuojant",
"editCodeAuthMessage": "Nustatykite tapatybę, kad redaguotumėte kodą",
"deleteCodeAuthMessage": "Nustatykite tapatybę, kad ištrintumėte kodą",
"showQRAuthMessage": "Nustatykite tapatybę, kad būtų rodomas QR kodas",
"confirmAccountDeleteTitle": "Patvirtinkite paskyros ištrynimą",
"confirmAccountDeleteMessage": "Ši paskyra susieta su kitomis „Ente“ programomis, jei jas naudojate.\n\nJūsų įkelti duomenys per visas „Ente“ programas bus planuojama ištrinti, o jūsų paskyra bus ištrinta negrįžtamai.",
"androidBiometricHint": "Patvirtinkite tapatybę",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Neatpažinta. Bandykite dar kartą.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Sėkmė",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Atšaukti",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "Privalomas tapatybės nustatymas",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "Privaloma biometrija",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "Privalomi įrenginio kredencialai",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "Privalomi įrenginio kredencialai",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "Eiti į nustatymus",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "Biometrinis tapatybės nustatymas jūsų įrenginyje nenustatytas. Eikite į Nustatymai > Saugumas ir pridėkite biometrinį tapatybės nustatymą.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "Biometrinis tapatybės nustatymas išjungtas. Kad jį įjungtumėte, užrakinkite ir atrakinkite ekraną.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Biometrinis tapatybės nustatymas jūsų įrenginyje nenustatytas. Telefone įjunkite „Touch ID“ arba „Face ID“.",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "Gerai",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "Nėra interneto ryšio",
"pleaseCheckYourInternetConnectionAndTryAgain": "Patikrinkite savo interneto ryšį ir bandykite dar kartą.",
"signOutFromOtherDevices": "Atsijungti iš kitų įrenginių",
"signOutOtherBody": "Jei manote, kad kas nors gali žinoti jūsų slaptažodį, galite priverstinai atsijungti iš visų kitų įrenginių, naudojančių jūsų paskyrą.",
"signOutOtherDevices": "Atsijungti kitus įrenginius",
"doNotSignOut": "Neatsijungti",
"hearUsWhereTitle": "Kaip išgirdote apie „Ente“? (nebūtina)",
"hearUsExplanation": "Mes nesekame programų diegimų. Mums padėtų, jei pasakytumėte, kur mus radote.",
"recoveryKeySaved": "Atkūrimo raktas išsaugotas atsisiuntimų aplanke.",
"waitingForBrowserRequest": "Laukiama naršyklės užklausos...",
"waitingForVerification": "Laukiama patvirtinimo...",
"passkey": "Slaptaraktas",
"passKeyPendingVerification": "Vis dar laukiama patvirtinimo",
"loginSessionExpired": "Seansas baigėsi",
"loginSessionExpiredDetails": "Jūsų seansas baigėsi. Prisijunkite iš naujo.",
"developerSettingsWarning": "Ar tikrai norite modifikuoti kūrėjo nustatymus?",
"developerSettings": "Kūrėjo nustatymai",
"serverEndpoint": "Serverio galutinis taškas",
"invalidEndpoint": "Netinkamas galutinis taškas",
"invalidEndpointMessage": "Atsiprašome. Jūsų įvestas galutinis taškas yra netinkamas. Įveskite tinkamą galutinį tašką ir bandykite dar kartą.",
"invalidEndpointMessage": "Atsiprašome, įvestas galutinis taškas netinkamas. Įveskite tinkamą galutinį tašką ir bandykite dar kartą.",
"endpointUpdatedMessage": "Galutinis taškas sėkmingai atnaujintas",
"customEndpoint": "Prijungta prie {endpoint}",
"pinText": "Prisegti",
@@ -268,6 +450,14 @@
"unpinnedCodeMessage": "{code} buvo atsegtas",
"tags": "Žymės",
"createNewTag": "Kurti naują žymę",
"tag": "Žymė",
"create": "Kurti",
"editTag": "Redaguoti žymę",
"deleteTagTitle": "Ištrinti žymę?",
"deleteTagMessage": "Ar tikrai norite ištrinti šią žymę? Šis veiksmas negrįžtamas.",
"somethingWentWrongParsingCode": "Mums nepavyko išanalizuoti {x} kodų.",
"updateNotAvailable": "Nėra naujinimų",
"viewRawCodes": "Peržiūrėti neapdorotus kodus",
"rawCodes": "Neapdoroti kodai",
"rawCodeData": "Neapdoroti kodo duomenys",
"appLock": "Programos užraktas",
@@ -277,8 +467,22 @@
"immediately": "Iš karto",
"reEnterPassword": "Įveskite slaptažodį iš naujo",
"reEnterPin": "Įveskite PIN iš naujo",
"next": "Sekantis",
"next": "Toliau",
"tooManyIncorrectAttempts": "Per daug neteisingų bandymų.",
"tapToUnlock": "Palieskite, kad atrakintumėte",
"setNewPassword": "Nustatykite naują slaptažodį",
"deviceLock": "Įrenginio užraktas",
"hideContent": "Slėpti turinį",
"hideContentDescriptionAndroid": "Paslepia programų turinį programų perjungiklyje ir išjungia ekrano kopijas",
"hideContentDescriptioniOS": "Paslepia programos turinį programos perjungiklyje",
"autoLockFeatureDescription": "Laikas, po kurio programa užrakinama perkėlus ją į foną",
"appLockDescription": "Pasirinkite tarp numatytojo įrenginio užrakinimo ekrano ir pasirinktinio užrakinimo ekrano su PIN kodu arba slaptažodžiu.",
"pinLock": "PIN užraktas",
"enterPin": "Įveskite PIN",
"setNewPin": "Nustatykite naują PIN",
"importFailureDescNew": "Nepavyko išanalizuoti pasirinkto failo.",
"appLockNotEnabled": "Programos užraktas neįjungtas",
"appLockNotEnabledDescription": "Įjunkite programos užraktą iš Saugumas > Programos užraktas",
"authToViewPasskey": "Nustatykite tapatybę, kad peržiūrėtumėte slaptaraktą",
"appLockOfflineModeWarning": "Pasirinkote tęsti be atsarginių kopijų. Jei pamiršite programos užraktą, jums bus užrakinta prieiga prie duomenų."
}

View File

@@ -116,7 +116,7 @@
"selectFile": "Selecionar arquivo",
"emailVerificationToggle": "Verificação por e-mail",
"emailVerificationEnableWarning": "Para evitar ser bloqueado da sua conta, certifique-se de guardar uma cópia do seu e-mail 2FA fora do Ente Auth antes de ativar a verificação de e-mail.",
"authToChangeEmailVerificationSetting": "Autentique-se para altere o e-mail de verificação",
"authToChangeEmailVerificationSetting": "Autentique-se para alterar a verificação de e-mail",
"authenticateGeneric": "Autentique",
"authToViewYourRecoveryKey": "Autentique para ver sua chave de recuperação",
"authToChangeYourEmail": "Autentique para alterar o seu e-mail",

View File

@@ -1,5 +1,5 @@
{
"account": "Hesabım",
"account": "Hesap",
"unlock": "Kilidi aç",
"recoveryKey": "Kurtarma Anahtarı",
"counterAppBarTitle": "Sayaç",
@@ -88,19 +88,19 @@
"useRecoveryKey": "Kurtarma anahtarını kullan",
"incorrectPasswordTitle": "Yanlış şifre",
"welcomeBack": "Tekrar hoş geldiniz!",
"madeWithLoveAtPrefix": "❤️ ile şurada yapılmıştır: ",
"madeWithLoveAtPrefix": "❤️ ile şurada yapılmıştır ",
"supportDevs": "Bu projeyi desteklemek için <bold-green>ente</bold-green> kanalına abone olun",
"supportDiscount": "İlk yılda %10 indirim için \"AUTH\" kupon kodunu kullanın",
"changeEmail": "E-posta'yı değiştir",
"changeEmail": "E-posta adresini değiştir",
"changePassword": "Şifreyi değiştir",
"data": "Veri",
"importCodes": "Kodu içe aktar",
"importTypePlainText": "Salt metin",
"importTypeEnteEncrypted": "Ente Şifreli dışa aktarma",
"importTypeEnteEncrypted": "Ente şifrelenmiş dışa aktarma",
"passwordForDecryptingExport": "Dışa aktarımın şifresini çözmek için parola",
"passwordEmptyError": "Şifre boş olamaz",
"importFromApp": "Kodları {appName} uygulamasından içe aktarın",
"importGoogleAuthGuide": "\"Hesapları Aktar\" seçeneğini kullanarak hesaplarınızı Google Authenticator'dan bir QR koduna aktarın. Ardından başka bir cihaz kullanarak QR kodunu tarayın.\n\nİpucu: QR kodunun fotoğrafını çekmek için dizüstü bilgisayarınızın kamerasını kullanabilirsiniz.",
"importGoogleAuthGuide": "\"Hesapları Aktar\" seçeneğini kullanarak hesaplarınızı Google Authenticator'den bir QR koduna aktarın. Ardından başka bir cihaz kullanarak QR kodunu tarayın.\n\nİpucu: QR kodunun fotoğrafını çekmek için dizüstü bilgisayarınızın kamerasını kullanabilirsiniz.",
"importSelectJsonFile": "JSON dosyasını seçin",
"importSelectAppExport": "{appName} dışarı aktarma dosyasını seçin",
"importEnteEncGuide": "Ente'den dışa aktarılan şifrelenmiş JSON dosyasını seçin",
@@ -482,5 +482,7 @@
"setNewPin": "Yeni PIN belirleyin",
"importFailureDescNew": "Seçilen dosya ayrıştırılamadı.",
"appLockNotEnabled": "Uygulama kilidi etkin değil",
"appLockNotEnabledDescription": "Uygulama kilidini Güvenlik -> Uygulama Kilidi üzerinden etkinleştirin"
"appLockNotEnabledDescription": "Uygulama kilidini Güvenlik -> Uygulama Kilidi üzerinden etkinleştirin",
"authToViewPasskey": "Geçiş anahtarını görmek için lütfen kimliğinizi doğrulayın",
"appLockOfflineModeWarning": "Yedekleme olmadan devam etmeyi seçtiniz. Eğer uygulama parolanızı unutursanız, verilerinize erişiminiz engellenir."
}

View File

@@ -45,7 +45,7 @@
"timeBasedKeyType": "На основі часу (TOTP)",
"counterBasedKeyType": "На основі лічильника (HOTP)",
"saveAction": "Зберегти",
"nextTotpTitle": "далі",
"nextTotpTitle": "наступний",
"deleteCodeTitle": "Видалити код?",
"deleteCodeMessage": "Ви впевнені, що хочете видалити цей код? Ця дія є незворотною.",
"trashCode": "Смітник?",
@@ -140,7 +140,7 @@
"forgotPassword": "Нагадати пароль",
"oops": "От халепа",
"suggestFeatures": "Запропонувати нові функції",
"faq": "Часто Запитувані Питання",
"faq": "Часті питання",
"somethingWentWrongMessage": "Щось пішло не так, спробуйте, будь ласка, знову",
"leaveFamily": "Залишити сімейний план",
"leaveFamilyMessage": "Ви впевнені, що хочете залишити сімейний план?",

View File

@@ -6,7 +6,7 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Sao lưu an toàn mã 2FA của bạn",
"onBoardingBody": "Sao lưu mã 2FA của bạn một cách an toàn",
"onBoardingGetStarted": "Bắt đầu",
"setupFirstAccount": "Thiết lập tài khoản đầu tiên của bạn",
"importScanQrCode": "Quét mã QR",
@@ -17,8 +17,22 @@
"bothIssuerAndAccountCanNotBeEmpty": "Cả nhà phát hành và tài khoản không được để trống",
"incorrectDetails": "Thông tin chi tiết không chính xác",
"pleaseVerifyDetails": "Vui lòng xác minh chi tiết và thử lại",
"codeIssuerHint": "Nhà phát hành",
"codeIssuerHint": "Bên phát hành",
"codeSecretKeyHint": "Khóa bí mật",
"secret": "Khóa bí mật",
"all": "Tất cả",
"notes": "Ghi chú",
"notesLengthLimit": "Ghi chú có thể dài tối đa {count} ký tự",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "Tài khoản (bạn@miền.com)",
"codeTagHint": "Thẻ",
"accountKeyType": "Loại khóa",
@@ -31,9 +45,12 @@
"timeBasedKeyType": "Dựa trên thời gian (TOTP)",
"counterBasedKeyType": "Dựa trên bộ đếm (HOTP)",
"saveAction": "Lưu",
"nextTotpTitle": "tiếp",
"nextTotpTitle": "tiếp theo",
"deleteCodeTitle": "Xóa mã?",
"deleteCodeMessage": "Bạn có chắc chắn muốn xóa mã này không? Hành động này không thể đảo ngược.",
"trashCode": "Xóa mã?",
"trashCodeMessage": "Bạn có chắc chắn muốn xóa mã cho {account} không?",
"trash": "Xóa",
"viewLogsAction": "Xem các bản ghi",
"sendLogsDescription": "Thao tác này sẽ gửi nhật ký để giúp chúng tôi gỡ lỗi sự cố của bạn. Mặc dù chúng tôi thực hiện các biện pháp phòng ngừa để đảm bảo rằng thông tin nhạy cảm không được ghi lại, nhưng chúng tôi khuyến khích bạn xem các nhật ký này trước khi chia sẻ chúng.",
"preparingLogsTitle": "Đang chuẩn bị nhật ký...",
@@ -91,6 +108,7 @@
"importBitwardenGuide": "Sử dụng tùy chọn \"Xuất vault\" trong công cụ Bitwarden và nhập tệp JSON không được mã hóa.",
"importAegisGuide": "Nếu vault của bạn được mã hóa, bạn sẽ cần nhập mật khẩu vault để giải mã vault.",
"import2FasGuide": "Sử dụng tùy chọn \"Cài đặt->Sao lưu -Xuất dữ liệu\" trong 2FAS.\n\nNếu bản sao lưu của bạn được mã hóa, bạn sẽ cần nhập mật khẩu để giải mã bản sao lưu",
"importLastpassGuide": "Sử dụng tùy chọn \"Chuyển tài khoản\" trong Cài đặt Lastpass Authenticator và nhấn \"Xuất tài khoản ra tệp\". Nhập tệp JSON đã tải xuống.",
"exportCodes": "Xuất mã",
"importLabel": "Nhập",
"importInstruction": "Vui lòng chọn tệp chứa danh sách mã của bạn ở định dạng sau",
@@ -99,6 +117,7 @@
"emailVerificationToggle": "Email xác thực",
"emailVerificationEnableWarning": "Để tránh bị khóa tài khoản, hãy đảm bảo lưu trữ bản sao email 2FA của bạn bên ngoài Ente Auth trước khi bật xác minh email.",
"authToChangeEmailVerificationSetting": "Vui lòng xác thực để thay đổi email",
"authenticateGeneric": "Vui lòng xác thực",
"authToViewYourRecoveryKey": "Vui lòng xác thực để xem khóa khôi phục của bạn",
"authToChangeYourEmail": "Vui lòng xác thực để thay đổi email của bạn",
"authToChangeYourPassword": "Vui lòng xác thực để thay đổi mật khẩu của bạn",
@@ -112,7 +131,7 @@
"support": "Hỗ trợ",
"general": "Tổng quan",
"settings": "Cài đặt",
"copied": "\u001dĐã sao chép",
"copied": "Đã sao chép",
"pleaseTryAgain": "Vui lòng thử lại",
"existingUser": "Người dùng hiện tại",
"newUser": "Mới tham gia Ente",
@@ -126,6 +145,8 @@
"leaveFamily": "Rời khỏi gia đình",
"leaveFamilyMessage": "Bạn có chắc chắn muốn thoát khỏi gói dành cho gia đình không?",
"inFamilyPlanMessage": "Bạn đang sử dụng gói dành cho gia đình!",
"hintForMobile": "Nhấn giữ trên mã để chỉnh sửa hoặc xóa.",
"hintForDesktop": "Nhấp chuột phải vào mã để chỉnh sửa hoặc xóa.",
"scan": "Quét",
"scanACode": "Quét mã",
"verify": "Xác minh",
@@ -133,6 +154,8 @@
"enterCodeHint": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn",
"lostDeviceTitle": "Mất thiết bị?",
"twoFactorAuthTitle": "Xác thực hai yếu tố",
"passkeyAuthTitle": "Xác minh mã khóa",
"verifyPasskey": "Xác minh mã khóa",
"recoverAccount": "Khôi phục tài khoản",
"enterRecoveryKeyHint": "Nhập khóa khôi phục của bạn",
"recover": "Khôi phục",
@@ -179,6 +202,10 @@
"scanAQrCode": "Quét mã QR",
"enterDetailsManually": "Nhập chi tiết thủ công",
"edit": "Sửa",
"share": "Chia sẻ",
"shareCodes": "Chia sẻ mã",
"shareCodesDuration": "Chọn khoảng thời gian mà bạn muốn chia sẻ mã.",
"restore": "Khôi phục",
"copiedToClipboard": "Đã sao chép vào khay nhớ tạm",
"copiedNextToClipboard": "Đã sao chép mã tiếp theo vào bảng nhớ tạm",
"error": "Lỗi",
@@ -332,6 +359,7 @@
"sigInBackupReminder": "Vui lòng xuất mã của bạn để đảm bảo rằng bạn có bản sao lưu có thể khôi phục.",
"offlineModeWarning": "Bạn đã chọn tiếp tục mà không cần sao lưu. Vui lòng sao lưu thủ công để đảm bảo mã của bạn được an toàn.",
"showLargeIcons": "Hiển thị biểu tượng lớn",
"compactMode": "Chế độ thu gọn",
"shouldHideCode": "Ẩn mã",
"doubleTapToViewHiddenCode": "Bạn có thể nhấn đúp vào một mục để xem mã",
"focusOnSearchBar": "Mở tìm kiếm khi khởi động ứng dụng",
@@ -354,7 +382,7 @@
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Hủy",
"androidCancelButton": "Hủy bỏ",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
@@ -405,12 +433,15 @@
"recoveryKeySaved": "Đã lưu khoá dự phòng vào thư mục Tải về!",
"waitingForBrowserRequest": "Đang chờ yêu cầu từ trình duyệt...",
"waitingForVerification": "Đang chờ xác thực",
"passkey": "Mã khoá",
"passKeyPendingVerification": "Đang chờ xác thực",
"loginSessionExpired": "Phiên làm việc hết hạn",
"loginSessionExpiredDetails": "Phiên làm việc hết hạn. Vui lòng đăng nhập lại.",
"developerSettingsWarning": "Bạn có chắc chắn muốn thay đổi Tuỳ chọn cho nhà phát triển không?",
"developerSettings": "Cài đặt cho nhà phát triển",
"serverEndpoint": "Điểm cuối máy chủ",
"invalidEndpoint": "Điểm cuối không hợp lệ",
"invalidEndpointMessage": "Xin lỗi, điểm cuối bạn nhập không hợp lệ. Vui lòng nhập một điểm cuối hợp lệ và thử lại.",
"endpointUpdatedMessage": "Cập nhật điểm cuối thành công",
"customEndpoint": "Đã kết nối đến",
"pinText": "Ghim",
@@ -424,6 +455,7 @@
"editTag": "Sửa thẻ",
"deleteTagTitle": "Xóa thẻ?",
"deleteTagMessage": "Bạn có chắc chắn muốn xóa thẻ này không? Hành động này không thể đảo ngược.",
"somethingWentWrongParsingCode": "Chúng tôi không thể phân tích {x} mã.",
"updateNotAvailable": "Cập nhật không khả dụng",
"viewRawCodes": "Xem mã nguồn",
"rawCodes": "Mã nguồn",
@@ -435,7 +467,7 @@
"immediately": "Tức thì",
"reEnterPassword": "Nhập lại mật khẩu",
"reEnterPin": "Nhập lại mã PIN",
"next": "Tiếp",
"next": "Tiếp theo",
"tooManyIncorrectAttempts": "Quá nhiều lần thử không chính xác",
"tapToUnlock": "Nhấn để mở khóa",
"setNewPassword": "Đặt lại mật khẩu",
@@ -448,5 +480,9 @@
"pinLock": "Mã PIN",
"enterPin": "Nhập mã PIN",
"setNewPin": "Đổi mã PIN",
"importFailureDescNew": "Không thể phân tích file đã chọn."
"importFailureDescNew": "Không thể phân tích file đã chọn.",
"appLockNotEnabled": "Khóa ứng dụng chưa được bật",
"appLockNotEnabledDescription": "Vui lòng bật khóa ứng dụng từ Bảo mật > Khóa ứng dụng",
"authToViewPasskey": "Vui lòng xác thực để xem mã khóa",
"appLockOfflineModeWarning": "Bạn đã chọn tiếp tục mà không có bản sao lưu. Nếu bạn quên khóa ứng dụng, bạn sẽ bị khóa khỏi việc truy cập dữ liệu của mình."
}

View File

@@ -7,6 +7,7 @@ import 'package:shared_preferences/shared_preferences.dart';
const List<Locale> appSupportedLocales = <Locale>[
Locale('ar'),
Locale('bg'),
Locale('ca'),
Locale('de'),
Locale('el'),
Locale('en'),
@@ -26,6 +27,7 @@ const List<Locale> appSupportedLocales = <Locale>[
Locale("zh", "CN"),
];
Locale? autoDetectedLocale;
Locale localResolutionCallBack(locales, supportedLocales) {
Locale? languageCodeMatch;
final Map<String, Locale> languageCodeToLocale = {
@@ -35,12 +37,14 @@ Locale localResolutionCallBack(locales, supportedLocales) {
for (Locale locale in locales) {
if (appSupportedLocales.contains(locale)) {
autoDetectedLocale = locale;
return locale;
}
if (languageCodeMatch == null &&
languageCodeToLocale.containsKey(locale.languageCode)) {
languageCodeMatch = languageCodeToLocale[locale.languageCode];
autoDetectedLocale = languageCodeMatch;
}
}
@@ -48,7 +52,9 @@ Locale localResolutionCallBack(locales, supportedLocales) {
return languageCodeMatch ?? const Locale('en');
}
Future<Locale> getLocale() async {
Future<Locale?> getLocale({
bool noFallback = false,
}) async {
final String? savedValue =
(await SharedPreferences.getInstance()).getString('locale');
// if savedLocale is not null and is supported by the app, return it
@@ -64,6 +70,12 @@ Future<Locale> getLocale() async {
return savedLocale;
}
}
if (autoDetectedLocale != null) {
return autoDetectedLocale!;
}
if (noFallback) {
return null;
}
return const Locale('en');
}

View File

@@ -104,7 +104,7 @@ Future<void> _runInForeground() async {
return await _runWithLogs(() async {
_logger.info("Starting app in foreground");
await _init(false, via: 'mainMethod');
final Locale locale = await getLocale();
final Locale? locale = await getLocale(noFallback: true);
unawaited(UpdateService.instance.showUpdateNotification());
runApp(
AppLock(

View File

@@ -11,6 +11,7 @@ class CodeDisplay {
final int tapCount;
String note;
final List<String> tags;
int position;
CodeDisplay({
this.pinned = false,
@@ -19,6 +20,7 @@ class CodeDisplay {
this.tapCount = 0,
this.tags = const [],
this.note = '',
this.position = 0,
});
// copyWith
@@ -29,6 +31,7 @@ class CodeDisplay {
int? tapCount,
List<String>? tags,
String? note,
int? position,
}) {
final bool updatedPinned = pinned ?? this.pinned;
final bool updatedTrashed = trashed ?? this.trashed;
@@ -36,6 +39,7 @@ class CodeDisplay {
final int updatedTapCount = tapCount ?? this.tapCount;
final List<String> updatedTags = tags ?? this.tags;
final String updatedNote = note ?? this.note;
final int updatedPosition = position ?? this.position;
return CodeDisplay(
pinned: updatedPinned,
@@ -44,6 +48,7 @@ class CodeDisplay {
tapCount: updatedTapCount,
tags: updatedTags,
note: updatedNote,
position: updatedPosition,
);
}
@@ -58,6 +63,7 @@ class CodeDisplay {
tapCount: json['tapCount'] ?? 0,
tags: List<String>.from(json['tags'] ?? []),
note: json['note'] ?? '',
position: json['position'] ?? 0,
);
}
@@ -99,6 +105,7 @@ class CodeDisplay {
'tapCount': tapCount,
'tags': tags,
'note': note,
'position': position,
};
}

View File

@@ -108,7 +108,7 @@ class _OnboardingPageState extends State<OnboardingPage> {
child: Text("Lang"),
),
onTap: () async {
final locale = await getLocale();
final locale = (await getLocale())!;
// ignore: unawaited_futures
routeToPage(
context,

View File

@@ -1,5 +1,6 @@
import 'package:ente_auth/core/network.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:logging/logging.dart';
import 'package:url_launcher/url_launcher_string.dart';
@@ -24,6 +25,10 @@ class PasskeyService {
return response.data!["isPasskeyRecoveryEnabled"] as bool;
}
String get accountsUrl {
return kDebugMode ? "http://localhost:3001" : "https://accounts.ente.io";
}
Future<void> configurePasskeyRecovery(
String secret,
String userEncryptedSecret,
@@ -42,7 +47,7 @@ class PasskeyService {
Future<void> openPasskeyPage(BuildContext context) async {
try {
final jwtToken = await getJwtToken();
final url = "https://accounts.ente.io/passkeys?token=$jwtToken";
final url = "$accountsUrl/passkeys?token=$jwtToken";
await launchUrlString(
url,
mode: LaunchMode.externalApplication,

View File

@@ -99,7 +99,7 @@ class UpdateService {
if (flavor == "playstore") {
return const Tuple2(
"Play Store",
"market://details??id=io.ente.auth",
"market://details?id=io.ente.auth",
);
}
return const Tuple2(

View File

@@ -75,13 +75,17 @@ class UserService {
bool isChangeEmail = false,
bool isCreateAccountScreen = false,
bool isResetPasswordScreen = false,
String? purpose,
}) async {
final dialog = createProgressDialog(context, context.l10n.pleaseWait);
await dialog.show();
try {
final response = await _dio.post(
"${_config.getHttpEndpoint()}/users/ott",
data: {"email": email, "purpose": isChangeEmail ? "change" : ""},
data: {
"email": email,
"purpose": isChangeEmail ? "change" : purpose ?? "",
},
);
await dialog.hide();
if (response.statusCode == 200) {
@@ -375,11 +379,17 @@ class UserService {
if (response.statusCode == 200) {
Widget page;
final String passkeySessionID = response.data["passkeySessionID"];
final String twoFASessionID = response.data["twoFactorSessionID"];
if (twoFASessionID.isNotEmpty) {
String twoFASessionID = response.data["twoFactorSessionID"];
if (twoFASessionID.isEmpty) {
twoFASessionID = response.data["twoFactorSessionIDV2"];
}
if (passkeySessionID.isNotEmpty) {
page = PasskeyPage(
passkeySessionID,
totp2FASessionID: twoFASessionID,
);
} else if (twoFASessionID.isNotEmpty) {
page = TwoFactorAuthenticationPage(twoFASessionID);
} else if (passkeySessionID.isNotEmpty) {
page = PasskeyPage(passkeySessionID);
} else {
await _saveConfiguration(response);
if (Configuration.instance.getEncryptedToken() != null) {
@@ -681,13 +691,18 @@ class UserService {
if (response.statusCode == 200) {
Widget? page;
final String passkeySessionID = response.data["passkeySessionID"];
final String twoFASessionID = response.data["twoFactorSessionID"];
String twoFASessionID = response.data["twoFactorSessionID"];
if (twoFASessionID.isEmpty) {
twoFASessionID = response.data["twoFactorSessionIDV2"];
}
Configuration.instance.setVolatilePassword(userPassword);
if (twoFASessionID.isNotEmpty) {
if (passkeySessionID.isNotEmpty) {
page = PasskeyPage(
passkeySessionID,
totp2FASessionID: twoFASessionID,
);
} else if (twoFASessionID.isNotEmpty) {
page = TwoFactorAuthenticationPage(twoFASessionID);
} else if (passkeySessionID.isNotEmpty) {
page = PasskeyPage(passkeySessionID);
} else {
await _saveConfiguration(response);
if (Configuration.instance.getEncryptedToken() != null) {

View File

@@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'package:collection/collection.dart';
@@ -16,16 +17,54 @@ class CodeStore {
CodeStore._privateConstructor();
late AuthenticatorService _authenticatorService;
final Map<int, Code> _cacheCodes = {};
final _logger = Logger("CodeStore");
Future<void> init() async {
_authenticatorService = AuthenticatorService.instance;
}
Future<bool> saveUpadedIndexes(List<Code> codes) async {
for (final code in codes) {
if (code.hasError || code.isTrashed) {
continue;
}
Code? c = _cacheCodes[code.generatedID];
if (c == null) {
continue;
}
int oldIndex = c.display.position;
int newIndex = codes.indexOf(code);
if (oldIndex != newIndex) {
Code updatedCode =
c.copyWith(display: c.display.copyWith(position: newIndex));
await addCode(updatedCode);
}
}
return true;
}
Future<void> updateCodeIndex(Code code) async {
final key = code.generatedID!;
_cacheCodes.remove(key);
int deletedIndex = code.display.position;
_cacheCodes.forEach((key, c) async {
if (c.display.position > deletedIndex) {
Code updatedCode = c.copyWith(
display: c.display.copyWith(position: c.display.position - 1),
);
await addCode(updatedCode);
}
});
}
Future<List<Code>> getAllCodes({
AccountMode? accountMode,
bool sortCodes = true,
}) async {
_cacheCodes.clear();
final mode = accountMode ?? _authenticatorService.getAccountMode();
final List<EntityResult> entities =
await _authenticatorService.getEntities(mode);
@@ -48,6 +87,7 @@ class CodeStore {
code.generatedID = entity.generatedID;
code.hasSynced = entity.hasSynced;
codes.add(code);
_cacheCodes[code.generatedID!] = code;
}
if (sortCodes) {
@@ -118,6 +158,7 @@ class CodeStore {
Future<void> removeCode(Code code, {AccountMode? accountMode}) async {
final mode = accountMode ?? _authenticatorService.getAccountMode();
await _authenticatorService.deleteEntry(code.generatedID!, mode);
await updateCodeIndex(code);
Bus.instance.fire(CodesUpdatedEvent());
}

View File

@@ -108,8 +108,12 @@ class _EmailEntryPageState extends State<EmailEntryPage> {
UserService.instance.setEmail(_email!);
_config.setVolatilePassword(_passwordController1.text);
UserService.instance.setRefSource(_referralSource);
UserService.instance
.sendOtt(context, _email!, isCreateAccountScreen: true);
UserService.instance.sendOtt(
context,
_email!,
isCreateAccountScreen: true,
purpose: "signup",
);
FocusScope.of(context).unfocus();
},
),

View File

@@ -49,8 +49,12 @@ class _LoginPageState extends State<LoginPage> {
),
);
} else {
await UserService.instance
.sendOtt(context, _email!, isCreateAccountScreen: false);
await UserService.instance.sendOtt(
context,
_email!,
isCreateAccountScreen: false,
purpose: 'login',
);
}
FocusScope.of(context).unfocus();
}

View File

@@ -28,6 +28,7 @@ import 'package:ente_auth/ui/components/models/button_type.dart';
import 'package:ente_auth/ui/home/coach_mark_widget.dart';
import 'package:ente_auth/ui/home/home_empty_state.dart';
import 'package:ente_auth/ui/home/speed_dial_label_widget.dart';
import 'package:ente_auth/ui/reorder_codes_page.dart';
import 'package:ente_auth/ui/scanner_page.dart';
import 'package:ente_auth/ui/settings_page.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
@@ -186,6 +187,10 @@ class _HomePageState extends State<HomePage> {
.toList() ??
[];
}
_filteredCodes
.sort((a, b) => a.display.position.compareTo(b.display.position));
if (mounted) {
setState(() {});
}
@@ -255,6 +260,18 @@ class _HomePageState extends State<HomePage> {
}
}
Future<void> navigateToReorderPage(List<Code> allCodes) async {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return ReorderCodesPage(codes: _filteredCodes);
},
),
).then((value) {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
@@ -310,6 +327,13 @@ class _HomePageState extends State<HomePage> {
),
centerTitle: PlatformUtil.isDesktop() ? false : true,
actions: <Widget>[
IconButton(
icon: const Icon(Icons.edit),
tooltip: l10n.edit,
onPressed: () {
navigateToReorderPage(_allCodes!);
},
),
PlatformUtil.isDesktop()
? IconButton(
icon: const Icon(Icons.lock),

View File

@@ -5,10 +5,13 @@ import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/core/errors.dart';
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/models/account/two_factor.dart';
import 'package:ente_auth/services/passkey_service.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/ui/components/buttons/button_widget.dart';
import 'package:ente_auth/ui/components/models/button_type.dart';
import 'package:ente_auth/ui/two_factor_authentication_page.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/navigation_util.dart';
import 'package:ente_auth/utils/toast_util.dart';
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
@@ -16,9 +19,11 @@ import 'package:url_launcher/url_launcher_string.dart';
class PasskeyPage extends StatefulWidget {
final String sessionID;
final String totp2FASessionID;
const PasskeyPage(
this.sessionID, {
required this.totp2FASessionID,
super.key,
});
@@ -42,8 +47,9 @@ class _PasskeyPageState extends State<PasskeyPage> {
}
Future<void> launchPasskey() async {
final String accountsUrl = PasskeyService.instance.accountsUrl;
await launchUrlString(
"https://accounts.ente.io/passkeys/verify?"
"$accountsUrl/passkeys/verify?"
"passkeySessionID=${widget.sessionID}"
"&redirect=enteauth://passkey"
"&clientPackage=io.ente.auth",
@@ -175,6 +181,30 @@ class _PasskeyPageState extends State<PasskeyPage> {
shouldSurfaceExecutionStates: true,
),
const Padding(padding: EdgeInsets.all(30)),
if (widget.totp2FASessionID.isNotEmpty)
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
routeToPage(
context,
TwoFactorAuthenticationPage(
widget.totp2FASessionID,
),
);
},
child: Container(
padding: const EdgeInsets.all(10),
child: Center(
child: Text(
context.l10n.loginWithTOTP,
style: const TextStyle(
decoration: TextDecoration.underline,
fontSize: 12,
),
),
),
),
),
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {

View File

@@ -0,0 +1,171 @@
import 'dart:ui';
import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/services/preference_service.dart';
import 'package:ente_auth/store/code_store.dart';
import 'package:ente_auth/ui/code_widget.dart';
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
class ReorderCodesPage extends StatefulWidget {
const ReorderCodesPage({super.key, required this.codes});
final List<Code> codes;
@override
State<ReorderCodesPage> createState() => _ReorderCodesPageState();
}
class _ReorderCodesPageState extends State<ReorderCodesPage> {
int selectedSortOption = 2;
final logger = Logger('ReorderCodesPage');
@override
Widget build(BuildContext context) {
final bool isCompactMode = PreferenceService.instance.isCompactMode();
return PopScope(
canPop: false,
onPopInvokedWithResult: (didPop, result) async {
if (!didPop) {
final hasSaved = await saveUpadedIndexes();
if (hasSaved) {
Navigator.of(context).pop();
}
}
},
child: Scaffold(
appBar: AppBar(
title: const Text("Edit Codes"),
leading: IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () async {
final hasSaved = await saveUpadedIndexes();
if (hasSaved) {
Navigator.of(context).pop();
}
},
),
actions: [
PopupMenuButton(
icon: const Icon(Icons.sort),
onSelected: (int value) {
selectedSortOption = value;
switch (value) {
case 0:
sortByIssuer();
break;
case 1:
sortByAccount();
break;
case 2:
setState(() {});
break;
}
},
itemBuilder: (context) => [
PopupMenuItem(
value: 0,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
selectedSortOption == 0
? const Icon(Icons.check)
: const SizedBox.square(dimension: 24),
const SizedBox(width: 10),
const Text("Issuer"),
],
),
),
PopupMenuItem(
value: 1,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
selectedSortOption == 1
? const Icon(Icons.check)
: const SizedBox.square(dimension: 24),
const SizedBox(width: 10),
const Text("Account"),
],
),
),
PopupMenuItem(
value: 2,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
selectedSortOption == 2
? const Icon(Icons.check)
: const SizedBox.square(dimension: 24),
const SizedBox(width: 10),
const Text("Manual"),
],
),
),
],
),
],
),
body: ReorderableListView(
buildDefaultDragHandles: false,
proxyDecorator:
(Widget child, int index, Animation<double> animation) {
return AnimatedBuilder(
animation: animation,
builder: (BuildContext context, _) {
final animValue = Curves.easeInOut.transform(animation.value);
final scale = lerpDouble(1, 1.05, animValue)!;
return Transform.scale(scale: scale, child: child);
},
);
},
children: [
for (final code in widget.codes)
selectedSortOption == 2
? ReorderableDragStartListener(
key: ValueKey('${code.hashCode}_${code.generatedID}'),
index: widget.codes.indexOf(code),
child: CodeWidget(
key: ValueKey(code.generatedID),
code,
isCompactMode: isCompactMode,
),
)
: CodeWidget(
key: ValueKey('${code.hashCode}_${code.generatedID}'),
code,
isCompactMode: isCompactMode,
),
],
onReorder: (oldIndex, newIndex) {
if (selectedSortOption == 2) updateCodeIndex(oldIndex, newIndex);
},
),
),
);
}
Future<bool> saveUpadedIndexes() async {
final result = await CodeStore.instance.saveUpadedIndexes(widget.codes);
return result;
}
void updateCodeIndex(int oldIndex, int newIndex) {
setState(() {
// Adjust index when moving down the list
// oldIndex = 2, newIndex = 0
if (oldIndex < newIndex) newIndex -= 1;
final Code code = widget.codes.removeAt(oldIndex);
widget.codes.insert(newIndex, code);
});
}
void sortByIssuer() {
widget.codes.sort((a, b) => a.issuer.compareTo(b.issuer));
setState(() {});
}
void sortByAccount() {
widget.codes.sort((a, b) => a.account.compareTo(b.account));
setState(() {});
}
}

View File

@@ -49,7 +49,7 @@ class _AdvancedSectionWidgetState extends State<AdvancedSectionWidget> {
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async {
final locale = await getLocale();
final locale = (await getLocale())!;
// ignore: unawaited_futures
routeToPage(
context,

View File

@@ -126,6 +126,8 @@ class _ItemsWidgetState extends State<ItemsWidget> {
switch (locale.languageCode) {
case 'ar':
return 'العربية';
case 'ca':
return 'Català';
case 'en':
return 'English';
case 'bg':

View File

@@ -35,7 +35,7 @@ class AppLock extends StatefulWidget {
final ThemeData? darkTheme;
final ThemeData? lightTheme;
final ThemeMode savedThemeMode;
final Locale locale;
final Locale? locale;
const AppLock({
super.key,
@@ -43,7 +43,7 @@ class AppLock extends StatefulWidget {
required this.lockScreen,
required this.savedThemeMode,
this.enabled = true,
this.locale = const Locale('en', 'US'),
this.locale,
this.backgroundLockLatency = const Duration(seconds: 0),
this.darkTheme,
this.lightTheme,

View File

@@ -1,6 +1,6 @@
name: ente_auth
description: ente two-factor authenticator
version: 4.0.3+403
version: 4.1.1+411
publish_to: none
environment:

72
cli/cmd/setup.go Normal file
View File

@@ -0,0 +1,72 @@
package cmd
import (
"fmt"
"os"
"net/url"
"strings"
"github.com/spf13/viper"
"github.com/spf13/cobra"
"github.com/ente-io/cli/pkg"
)
var setupCmd = &cobra.Command {
Use: "setup",
Short: "Manage setup/configuration settings",
}
// Command to set the public albums url in configurations/<environment>.yaml file
// Reads value from environment variable "ENTE_MUSEUM_DIR"
var addPublicAlbumsUrl = &cobra.Command {
Use: "public-albums-url account add-public-url [url]",
Short: "Set the public-albums URL in Museum YAML configuraiton file",
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
// Get environment to make changes to valid file
environment := os.Getenv("ENVIRONMENT")
if environment == "" {
environment = "local"
}
dir := pkg.ConfigureServerDir()
// Adding path to the museum config file
viper.AddConfigPath(dir)
viper.SetConfigName(environment)
viper.SetConfigType("yaml")
err := viper.ReadInConfig()
if err != nil {
fmt.Errorf("%v", err)
return
}
albumsUrl := strings.TrimSuffix(args[0], "/")
_, err = url.ParseRequestURI(albumsUrl)
if err != nil {
// Report Error and exit
fmt.Printf("Invalid URL: %s\nPlease enter a valid endpoint for public albums", err)
os.Exit(1)
} else {
viper.Set("apps.public-albums", albumsUrl)
}
// Overwrite the public album url in Configuration File
err = viper.WriteConfig()
if err != nil {
fmt.Println("Error saving config: %v\n", err)
} else {
fmt.Println("Public Albums URL set to", albumsUrl)
}
},
}
func init() {
// `ente setup` will be the initial root command
rootCmd.AddCommand(setupCmd)
rootCmd.Flags().String("public-albums-url", "", "Sets the public-albums url in your environments configuration file")
setupCmd.AddCommand(addPublicAlbumsUrl)
}

View File

@@ -1,7 +1,7 @@
# You can put this configuration file in the following locations:
# - $HOME/.ente/config.yaml
# - config.yaml in the current working directory
# - $ENTE_CLI_CONFIG_PATH/config.yaml
# - $ENTE_CLI_CONFIG_DIR/config.yaml
endpoint:
api: "http://localhost:8080"

View File

@@ -1,8 +1,10 @@
## Self Hosting
If you are self-hosting the server, you can still configure CLI to export data & perform basic admin actions.
To do this, first configure the CLI to point to your server.
Define a config.yaml and put it either in the same directory as CLI binary or path defined in env variable `ENTE_CLI_CONFIG_PATH`
Define a config.yaml and put it either in the same directory as CLI binary or path defined in env variable `ENTE_CLI_CONFIG_DIR`
```yaml
endpoint:

View File

@@ -18,29 +18,29 @@ import (
var AppVersion = "0.2.2"
func main() {
cliDBPath, err := GetCLIConfigPath()
cliConfigDir, err := GetCLIConfigDir()
if secrets.IsRunningInContainer() {
cliDBPath = constants.CliDataPath
_, err := internal.ValidateDirForWrite(cliDBPath)
cliConfigDir = constants.CliDataPath
_, err := internal.ValidateDirForWrite(cliConfigDir)
if err != nil {
log.Fatalf("Please mount a volume to %s\n%v\n", cliDBPath, err)
log.Fatalf("Please mount a volume to %s\n%v\n", cliConfigDir, err)
}
}
if err != nil {
log.Fatalf("Could not create cli config path\n%v\n", err)
}
initConfig(cliDBPath)
newCliPath := fmt.Sprintf("%s/ente-cli.db", cliDBPath)
if !strings.HasPrefix(cliDBPath, "/") {
oldCliPath := fmt.Sprintf("%sente-cli.db", cliDBPath)
initConfig(cliConfigDir)
newCliDBPath := filepath.Join(cliConfigDir, "ente-cli.db")
if !strings.HasPrefix(cliConfigDir, "/") {
oldCliPath := fmt.Sprintf("%sente-cli.db", cliConfigDir)
if _, err := os.Stat(oldCliPath); err == nil {
log.Printf("migrating old cli db from %s to %s\n", oldCliPath, newCliPath)
if err := os.Rename(oldCliPath, newCliPath); err != nil {
log.Printf("migrating old cli db from %s to %s\n", oldCliPath, newCliDBPath)
if err := os.Rename(oldCliPath, newCliDBPath); err != nil {
log.Fatalf("Could not rename old cli db\n%v\n", err)
}
}
}
db, err := pkg.GetDB(newCliPath)
db, err := pkg.GetDB(newCliDBPath)
if err != nil {
if strings.Contains(err.Error(), "timeout") {
@@ -49,14 +49,28 @@ func main() {
panic(err)
}
}
// Define a set of commands that do not require KeyHolder initialisation.
skipKeyHolderCommands := map[string]struct{}{"version": {}, "docs": {}, "help": {}}
var keyHolder *secrets.KeyHolder
// Only initialise KeyHolder if the command isn't in the skip list.
if len(os.Args) > 1 {
if _, skip := skipKeyHolderCommands[os.Args[1]]; !skip {
keyHolder = secrets.NewKeyHolder(secrets.GetOrCreateClISecret())
}
}
ctrl := pkg.ClICtrl{
Client: api.NewClient(api.Params{
Debug: viper.GetBool("log.http"),
Host: viper.GetString("endpoint.api"),
}),
DB: db,
KeyHolder: secrets.NewKeyHolder(secrets.GetOrCreateClISecret()),
KeyHolder: keyHolder,
}
err = ctrl.Init()
if err != nil {
panic(err)
@@ -85,11 +99,11 @@ func main() {
cmd.Execute(&ctrl, AppVersion)
}
func initConfig(cliConfigPath string) {
viper.SetConfigName("config") // name of config file (without extension)
viper.SetConfigType("yaml") // REQUIRED if the config file does not have the extension in the name
viper.AddConfigPath(cliConfigPath + "/") // path to look for the config file in
viper.AddConfigPath(".") // optionally look for config in the working directory
func initConfig(cliConfigDir string) {
viper.SetConfigName("config") // name of config file (without extension)
viper.SetConfigType("yaml") // REQUIRED if the config file does not have the extension in the name
viper.AddConfigPath(cliConfigDir + "/") // path to look for the config file in
viper.AddConfigPath(".") // optionally look for config in the working directory
viper.SetDefault("endpoint.api", constants.EnteApiUrl)
viper.SetDefault("endpoint.accounts", constants.EnteAccountUrl)
@@ -102,11 +116,19 @@ func initConfig(cliConfigPath string) {
}
}
// GetCLIConfigPath returns the path to the .ente-cli folder and creates it if it doesn't exist.
func GetCLIConfigPath() (string, error) {
if os.Getenv("ENTE_CLI_CONFIG_PATH") != "" {
return os.Getenv("ENTE_CLI_CONFIG_PATH"), nil
// GetCLIConfigDir returns the path to the .ente-cli folder and creates it if it doesn't exist.
func GetCLIConfigDir() (string, error) {
var configDir = os.Getenv("ENTE_CLI_CONFIG_DIR")
if configDir == "" {
// for backward compatibility, check for ENTE_CLI_CONFIG_PATH
configDir = os.Getenv("ENTE_CLI_CONFIG_PATH")
}
if configDir != "" {
// remove trailing slash (for all OS)
configDir = strings.TrimSuffix(configDir, string(filepath.Separator))
return configDir, nil
}
// Get the user's home directory
homeDir, err := os.UserHomeDir()
if err != nil {

View File

@@ -41,3 +41,17 @@ func GetCLITempPath() (string) {
}
return os.TempDir()
}
// Configure Museum Server Directory to find proper <environment.yaml> file.
// Made for and used in command `ente account public-albums-url [url]`
func ConfigureServerDir() (string) {
serverEnv := os.Getenv("ENTE_SERVER_DIR")
if serverEnv != "" {
fmt.Errorf(`ENTE_SERVER_DIR environment is not set, please setup it with\n
export ENTE_SERVER_DIR=/path/to/ente/
`)
}
configDir := filepath.Join(serverEnv, "server", "configurations")
return configDir
}

View File

@@ -88,7 +88,7 @@ jobs:
if: startsWith(matrix.os, 'ubuntu')
# See:
# https://github.com/electron-userland/electron-builder/issues/4181
run: sudo apt-get install libarchive-tools
run: sudo apt-get update && sudo apt-get install libarchive-tools
- name: Build
uses: ente-io/action-electron-builder@eff78a1d33bdab4c54ede0e5cdc71e0c2cf803e2

View File

@@ -1,11 +1,21 @@
# CHANGELOG
## v1.7.6 (Unreleased)
## v1.7.8 (Unreleased)
- Parse description from metadata JSON.
- Support Italian and Lithuanian translations.
- .
## v1.7.7
- Retain JPEG originals even on date modifications.
- Support Portuguese and Vietnamese translations.
## v1.7.6
- Face merging and suggestions (beta).
- Parse description from metadata JSON.
- Support Italian, Ukrainian and Lithuanian translations.
- Fix an out of memory crash on uploading large libraries.
## v1.7.5
- Face grouping (beta).

View File

@@ -1,6 +1,6 @@
{
"name": "ente",
"version": "1.7.6-beta",
"version": "1.7.8-beta",
"private": true,
"description": "Desktop client for Ente Photos",
"repository": "github:ente-io/photos-desktop",
@@ -15,7 +15,7 @@
"build:quick": "yarn build-renderer && yarn build-main:quick",
"dev": "concurrently --kill-others --success first --names 'main,rndr' \"yarn dev-main\" \"yarn dev-renderer\"",
"dev-main": "tsc && electron .",
"dev-renderer": "cross-env-shell _ENTE_IS_DESKTOP=1 \"cd ../web && yarn install && yarn dev:photos\"",
"dev-renderer": "cross-env-shell _ENTE_IS_DESKTOP=1 \"cd ../web && yarn install && yarn workspace photos next dev -p 3008\"",
"postinstall": "electron-builder install-app-deps",
"lint": "yarn prettier --check --log-level warn . && yarn eslint && yarn tsc",
"lint-fix": "yarn prettier --write --log-level warn . && yarn eslint && yarn tsc"
@@ -28,35 +28,35 @@
"auto-launch": "^5.0.6",
"chokidar": "^3.6.0",
"clip-bpe-js": "^0.0.6",
"comlink": "^4.4.1",
"comlink": "^4.4.2",
"compare-versions": "^6.1.1",
"electron-log": "^5.1.7",
"electron-log": "^5.2.3",
"electron-store": "^8.2.0",
"electron-updater": "^6.3.4",
"electron-updater": "^6.3.9",
"ffmpeg-static": "^5.2.0",
"lru-cache": "^11.0.0",
"lru-cache": "^11.0.2",
"next-electron-server": "^1.0.0",
"node-stream-zip": "^1.15.0",
"onnxruntime-node": "^1.19.2"
"onnxruntime-node": "^1.20.1"
},
"devDependencies": {
"@eslint/js": "^9.9.1",
"@eslint/js": "^9.15.0",
"@tsconfig/node20": "^20.1.4",
"@types/auto-launch": "^5.0.5",
"@types/eslint__js": "^8.42.3",
"@types/ffmpeg-static": "^3.0.3",
"ajv": "^8.17.1",
"concurrently": "^8.2.2",
"concurrently": "^9.1.0",
"cross-env": "^7.0.3",
"electron": "^30.4.0",
"electron-builder": "^25.0.5",
"electron": "^33.2.1",
"electron-builder": "^25.1.8",
"eslint": "^9",
"prettier": "^3.3.3",
"prettier-plugin-organize-imports": "^4.0.0",
"prettier-plugin-packagejson": "^2.5.2",
"prettier": "3.3.3",
"prettier-plugin-organize-imports": "^4.1.0",
"prettier-plugin-packagejson": "^2.5.6",
"shx": "^0.3.4",
"typescript": "^5.5.4",
"typescript-eslint": "^8.4.0"
"typescript": "^5.7.2",
"typescript-eslint": "^8.16.0"
},
"packageManager": "yarn@1.22.22",
"productName": "ente"

View File

@@ -187,13 +187,13 @@ const logStartupBanner = () => {
*
* It uses protocol handlers to serve files from the "ente://" protocol.
*
* - In development this is proxied to http://localhost:3000
* - In development this is proxied to http://localhost:3008
* - In production it serves files from the `/out` directory
*
* For more details, see this comparison:
* https://github.com/HaNdTriX/next-electron-server/issues/5
*/
const setupRendererServer = () => serveNextAt(rendererURL);
const setupRendererServer = () => serveNextAt(rendererURL, { port: 3008 });
/**
* Register privileged schemes.

View File

@@ -48,6 +48,7 @@ const messageWithError = (message: string, e?: unknown) => {
es = [`${e.name}: ${e.message}`, e.stack].filter((x) => x).join("\n");
} else {
// For the rest rare cases, use the default string serialization of e.
// eslint-disable-next-line @typescript-eslint/no-base-to-string
es = String(e);
}

View File

@@ -9,7 +9,7 @@ import {
makeTempFilePath,
} from "../utils/temp";
/* Duplicated in the web app's code (used by the WASM FFmpeg implementation). */
/* Ditto in the web app's code (used by the WASM FFmpeg invocation). */
const ffmpegPathPlaceholder = "FFMPEG";
const inputPathPlaceholder = "INPUT";
const outputPathPlaceholder = "OUTPUT";

View File

@@ -7,13 +7,6 @@
resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d"
integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==
"@babel/runtime@^7.21.0":
version "7.25.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2"
integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==
dependencies:
regenerator-runtime "^0.14.0"
"@derhuerst/http-basic@^8.2.0":
version "8.2.4"
resolved "https://registry.yarnpkg.com/@derhuerst/http-basic/-/http-basic-8.2.4.tgz#d021ebb8f65d54bea681ae6f4a8733ce89e7f59b"
@@ -56,10 +49,10 @@
optionalDependencies:
global-agent "^3.0.0"
"@electron/notarize@2.3.2":
version "2.3.2"
resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.3.2.tgz#20a52a961747be8542a35003380988a0d3fe15e6"
integrity sha512-zfayxCe19euNwRycCty1C7lF7snk9YwfRpB5M8GLr1a4ICH63znxaPNAubrMvj0yDvVozqfgsdYpXVUnpWBDpg==
"@electron/notarize@2.5.0":
version "2.5.0"
resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.5.0.tgz#d4d25356adfa29df4a76bd64a8bd347237cd251e"
integrity sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==
dependencies:
debug "^4.1.1"
fs-extra "^9.0.1"
@@ -77,10 +70,10 @@
minimist "^1.2.6"
plist "^3.0.5"
"@electron/rebuild@3.6.0":
version "3.6.0"
resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.6.0.tgz#60211375a5f8541a71eb07dd2f97354ad0b2b96f"
integrity sha512-zF4x3QupRU3uNGaP5X1wjpmcjfw1H87kyqZ00Tc3HvriV+4gmOGuvQjGNkrJuXdsApssdNyVwLsy+TaeTGGcVw==
"@electron/rebuild@3.6.1":
version "3.6.1"
resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.6.1.tgz#59e8e36c3f6e6b94a699425dfb61f0394c3dd4df"
integrity sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==
dependencies:
"@malept/cross-spawn-promise" "^2.0.0"
chalk "^4.0.0"
@@ -146,11 +139,16 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/js@9.9.1", "@eslint/js@^9.9.1":
"@eslint/js@9.9.1":
version "9.9.1"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
"@eslint/js@^9.15.0":
version "9.15.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.15.0.tgz#df0e24fe869143b59731942128c19938fdbadfb5"
integrity sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==
"@eslint/object-schema@^2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843"
@@ -386,62 +384,62 @@
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz#188c65610ef875a086404b5bfe105df936b035da"
integrity sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==
"@typescript-eslint/eslint-plugin@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz#ac56825bcdf3b392fc76a94b1315d4a162f201a6"
integrity sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
"@typescript-eslint/scope-manager" "8.4.0"
"@typescript-eslint/type-utils" "8.4.0"
"@typescript-eslint/utils" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
"@typescript-eslint/scope-manager" "8.16.0"
"@typescript-eslint/type-utils" "8.16.0"
"@typescript-eslint/utils" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
graphemer "^1.4.0"
ignore "^5.3.1"
natural-compare "^1.4.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/parser@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.4.0.tgz#36b7cd7643a1c190d49dc0278192b2450f615a6f"
integrity sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==
"@typescript-eslint/parser@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.16.0.tgz#ee5b2d6241c1ab3e2e53f03fd5a32d8e266d8e06"
integrity sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==
dependencies:
"@typescript-eslint/scope-manager" "8.4.0"
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/typescript-estree" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
"@typescript-eslint/scope-manager" "8.16.0"
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/typescript-estree" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
debug "^4.3.4"
"@typescript-eslint/scope-manager@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz#8a13d3c0044513d7960348db6f4789d2a06fa4b4"
integrity sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==
"@typescript-eslint/scope-manager@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz#ebc9a3b399a69a6052f3d88174456dd399ef5905"
integrity sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==
dependencies:
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
"@typescript-eslint/type-utils@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz#4a91b5789f41946adb56d73e2fb4639fdcf37af7"
integrity sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==
"@typescript-eslint/type-utils@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz#585388735f7ac390f07c885845c3d185d1b64740"
integrity sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==
dependencies:
"@typescript-eslint/typescript-estree" "8.4.0"
"@typescript-eslint/utils" "8.4.0"
"@typescript-eslint/typescript-estree" "8.16.0"
"@typescript-eslint/utils" "8.16.0"
debug "^4.3.4"
ts-api-utils "^1.3.0"
"@typescript-eslint/types@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.4.0.tgz#b44d6a90a317a6d97a3e5fabda5196089eec6171"
integrity sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==
"@typescript-eslint/types@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.16.0.tgz#49c92ae1b57942458ab83d9ec7ccab3005e64737"
integrity sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==
"@typescript-eslint/typescript-estree@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz#00ed79ae049e124db37315cde1531a900a048482"
integrity sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==
"@typescript-eslint/typescript-estree@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz#9d741e56e5b13469b5190e763432ce5551a9300c"
integrity sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==
dependencies:
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
debug "^4.3.4"
fast-glob "^3.3.2"
is-glob "^4.0.3"
@@ -449,23 +447,23 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/utils@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.4.0.tgz#35c552a404858c853a1f62ba6df2214f1988afc3"
integrity sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==
"@typescript-eslint/utils@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.16.0.tgz#c71264c437157feaa97842809836254a6fc833c3"
integrity sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@typescript-eslint/scope-manager" "8.4.0"
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/typescript-estree" "8.4.0"
"@typescript-eslint/scope-manager" "8.16.0"
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/typescript-estree" "8.16.0"
"@typescript-eslint/visitor-keys@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz#1e8a8b8fd3647db1e42361fdd8de3e1679dec9d2"
integrity sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==
"@typescript-eslint/visitor-keys@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz#d5086afc060b01ff7a4ecab8d49d13d5a7b07705"
integrity sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==
dependencies:
"@typescript-eslint/types" "8.4.0"
eslint-visitor-keys "^3.4.3"
"@typescript-eslint/types" "8.16.0"
eslint-visitor-keys "^4.2.0"
"@xmldom/xmldom@^0.8.8":
version "0.8.10"
@@ -494,6 +492,13 @@ agent-base@6, agent-base@^6.0.2:
dependencies:
debug "4"
agent-base@^7.0.2, agent-base@^7.1.0:
version "7.1.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
dependencies:
debug "^4.3.4"
agentkeepalive@^4.2.1:
version "4.5.0"
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
@@ -566,40 +571,43 @@ anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
app-builder-bin@5.0.0-alpha.7:
version "5.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-5.0.0-alpha.7.tgz#8c835ad083b18fb5d434bc4e4d99cca1fb46c19f"
integrity sha512-ww2mK4ITUvqisnqOuUWAeHzokpPidyZ7a0ZkwW+V7sF5/Pdi2OldkRjAWqEzn6Xtmj3SLVT84as4wB59A6jJ4g==
app-builder-bin@5.0.0-alpha.10:
version "5.0.0-alpha.10"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz#cf12e593b6b847fb9d04027fa755c6c6610d778b"
integrity sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==
app-builder-lib@25.0.5:
version "25.0.5"
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-25.0.5.tgz#4886ee77030576cbd36fab92633347d3cc554f87"
integrity sha512-rxgxMx1f7I4ZAP0jA5+5iB7X6x6MJvGF7GauRzQBnIVihwXX2HOiAE7yenyY9Ry5YAiH47MnCxdq413Wq6XOcQ==
app-builder-lib@25.1.8:
version "25.1.8"
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-25.1.8.tgz#ae376039c5f269c7d562af494a087e5bc6310f1b"
integrity sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==
dependencies:
"@develar/schema-utils" "~2.6.5"
"@electron/notarize" "2.3.2"
"@electron/notarize" "2.5.0"
"@electron/osx-sign" "1.3.1"
"@electron/rebuild" "3.6.0"
"@electron/rebuild" "3.6.1"
"@electron/universal" "2.0.1"
"@malept/flatpak-bundler" "^0.4.0"
"@types/fs-extra" "9.0.13"
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.9"
builder-util "25.0.3"
builder-util-runtime "9.2.5"
builder-util "25.1.7"
builder-util-runtime "9.2.10"
chromium-pickle-js "^0.2.0"
config-file-ts "0.2.8-rc1"
debug "^4.3.4"
dotenv "^16.4.5"
dotenv-expand "^11.0.6"
ejs "^3.1.8"
electron-publish "25.0.3"
electron-publish "25.1.7"
form-data "^4.0.0"
fs-extra "^10.1.0"
hosted-git-info "^4.1.0"
is-ci "^3.0.0"
isbinaryfile "^5.0.0"
js-yaml "^4.1.0"
json5 "^2.2.3"
lazy-val "^1.0.5"
minimatch "^10.0.0"
read-config-file "6.4.0"
resedit "^1.7.0"
sanitize-filename "^1.6.3"
semver "^7.3.8"
@@ -756,30 +764,30 @@ buffer@^5.1.0, buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
builder-util-runtime@9.2.5:
version "9.2.5"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.5.tgz#0afdffa0adb5c84c14926c7dd2cf3c6e96e9be83"
integrity sha512-HjIDfhvqx/8B3TDN4GbABQcgpewTU4LMRTQPkVpKYV3lsuxEJoIfvg09GyWTNmfVNSUAYf+fbTN//JX4TH20pg==
builder-util-runtime@9.2.10:
version "9.2.10"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz#a0f7d9e214158402e78b74a745c8d9f870c604bc"
integrity sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==
dependencies:
debug "^4.3.4"
sax "^1.2.4"
builder-util@25.0.3:
version "25.0.3"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-25.0.3.tgz#bd00d8e8abbe6ea56974a2adbbc39578eab0134b"
integrity sha512-eH5c1ukdY2xjtFQWQ6jlzEuXuqcuAVc3UQ6V6fdYu9Kg3CkDbCR82Mox42uaJDmee9WXSbP/88cOworFdOHPhw==
builder-util@25.1.7:
version "25.1.7"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-25.1.7.tgz#a07b404f0cb1a635aa165902be65297d58932ff8"
integrity sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==
dependencies:
"7zip-bin" "~5.2.0"
"@types/debug" "^4.1.6"
app-builder-bin "5.0.0-alpha.7"
app-builder-bin "5.0.0-alpha.10"
bluebird-lst "^1.0.9"
builder-util-runtime "9.2.5"
builder-util-runtime "9.2.10"
chalk "^4.1.2"
cross-spawn "^7.0.3"
debug "^4.3.4"
fs-extra "^10.1.0"
http-proxy-agent "^5.0.0"
https-proxy-agent "^5.0.1"
http-proxy-agent "^7.0.0"
https-proxy-agent "^7.0.0"
is-ci "^3.0.0"
js-yaml "^4.1.0"
source-map-support "^0.5.19"
@@ -956,10 +964,10 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
comlink@^4.4.1:
version "4.4.1"
resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.1.tgz#e568b8e86410b809e8600eb2cf40c189371ef981"
integrity sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==
comlink@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca"
integrity sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==
commander@^5.0.0:
version "5.1.0"
@@ -991,17 +999,15 @@ concat-stream@^2.0.0:
readable-stream "^3.0.2"
typedarray "^0.0.6"
concurrently@^8.2.2:
version "8.2.2"
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784"
integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==
concurrently@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.0.tgz#8da6d609f4321752912dab9be8710232ac496aa0"
integrity sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg==
dependencies:
chalk "^4.1.2"
date-fns "^2.30.0"
lodash "^4.17.21"
rxjs "^7.8.1"
shell-quote "^1.8.1"
spawn-command "0.0.2"
supports-color "^8.1.1"
tree-kill "^1.2.2"
yargs "^17.7.2"
@@ -1063,13 +1069,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
date-fns@^2.30.0:
version "2.30.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
dependencies:
"@babel/runtime" "^7.21.0"
debounce-fn@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7"
@@ -1164,21 +1163,14 @@ dir-compare@^4.2.0:
minimatch "^3.0.5"
p-limit "^3.1.0 "
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
dmg-builder@25.1.8:
version "25.1.8"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-25.1.8.tgz#41f3b725edd896156e891016a44129e1bd580430"
integrity sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==
dependencies:
path-type "^4.0.0"
dmg-builder@25.0.5:
version "25.0.5"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-25.0.5.tgz#e7e2731b65cf1ed43c14f2ca672e7d9a2e0234f0"
integrity sha512-ocnZV44ZqInoSFaY54fF7BlCtw+WtbrjyPrkBhaB+Ztn7GPKjmFgRbIKytifJ8h9Cib8jdFRMgjCUtkU45Y6DA==
dependencies:
app-builder-lib "25.0.5"
builder-util "25.0.3"
builder-util-runtime "9.2.5"
app-builder-lib "25.1.8"
builder-util "25.1.7"
builder-util-runtime "9.2.10"
fs-extra "^10.1.0"
iconv-lite "^0.6.2"
js-yaml "^4.1.0"
@@ -1225,36 +1217,35 @@ ejs@^3.1.8:
dependencies:
jake "^10.8.5"
electron-builder@^25.0.5:
version "25.0.5"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-25.0.5.tgz#fed2432016618fd5ff81dc9dad7ec47889ffe0f1"
integrity sha512-Uj5LFRbUqNiVajsgqcwlKe+CHtwubK3hcoJsW5C2YiWodej2mmxM+LrTqga0rrWWHVMNmrcmGcS/WHpKwy6KEw==
electron-builder@^25.1.8:
version "25.1.8"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-25.1.8.tgz#b0e310f1600787610bb84c3f39bc7aadb2548486"
integrity sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==
dependencies:
app-builder-lib "25.0.5"
builder-util "25.0.3"
builder-util-runtime "9.2.5"
app-builder-lib "25.1.8"
builder-util "25.1.7"
builder-util-runtime "9.2.10"
chalk "^4.1.2"
dmg-builder "25.0.5"
dmg-builder "25.1.8"
fs-extra "^10.1.0"
is-ci "^3.0.0"
lazy-val "^1.0.5"
read-config-file "6.4.0"
simple-update-notifier "2.0.0"
yargs "^17.6.2"
electron-log@^5.1.7:
version "5.1.7"
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.1.7.tgz#73c7ddc1602b3a9ee355bc09d1dc490864add0eb"
integrity sha512-/PjrS9zGkrZCDTHt6IgNE3FeciBbi4wd7U76NG9jAoNXF99E9IJdvBkqvaUJ1NjLojYDKs0kTvn9YhKy1/Zi+Q==
electron-log@^5.2.3:
version "5.2.3"
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.3.tgz#b58447b2158b9aa5faa07c4d15340113069d3f15"
integrity sha512-BabCiEV+p362LzY0EFE8hyzeGknzKDWSbhS0VFfRYQGA4FHWXWSfaKJlvTR9LFepNoORXxc/BWvqBXIPgsVFgA==
electron-publish@25.0.3:
version "25.0.3"
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-25.0.3.tgz#63509992a5ae31bb2b0d8863b26a2f7c35e303cc"
integrity sha512-wSGm+TFK2lArswIFBPLuIRHbo945s3MCvG5y1xVC57zL/PsrElUkaGH2ERtRrcKNpaDNq77rDA9JnMJhAFJjUg==
electron-publish@25.1.7:
version "25.1.7"
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-25.1.7.tgz#14e50c2a3fafdc1c454eadbbc47ead89a48bb554"
integrity sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==
dependencies:
"@types/fs-extra" "^9.0.11"
builder-util "25.0.3"
builder-util-runtime "9.2.5"
builder-util "25.1.7"
builder-util-runtime "9.2.10"
chalk "^4.1.2"
fs-extra "^10.1.0"
lazy-val "^1.0.5"
@@ -1268,12 +1259,12 @@ electron-store@^8.2.0:
conf "^10.2.0"
type-fest "^2.17.0"
electron-updater@^6.3.4:
version "6.3.4"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.3.4.tgz#3934bc89875bb524c2cbbd11041114e97c0c2496"
integrity sha512-uZUo7p1Y53G4tl6Cgw07X1yF8Jlz6zhaL7CQJDZ1fVVkOaBfE2cWtx80avwDVi8jHp+I/FWawrMgTAeCCNIfAg==
electron-updater@^6.3.9:
version "6.3.9"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.3.9.tgz#e1e7f155624c58e6f3760f376c3a584028165ec4"
integrity sha512-2PJNONi+iBidkoC5D1nzT9XqsE8Q1X28Fn6xRQhO3YX8qRRyJ3mkV4F1aQsuRnYPqq6Hw+E51y27W75WgDoofw==
dependencies:
builder-util-runtime "9.2.5"
builder-util-runtime "9.2.10"
fs-extra "^10.1.0"
js-yaml "^4.1.0"
lazy-val "^1.0.5"
@@ -1282,10 +1273,10 @@ electron-updater@^6.3.4:
semver "^7.6.3"
tiny-typed-emitter "^2.1.0"
electron@^30.4.0:
version "30.4.0"
resolved "https://registry.yarnpkg.com/electron/-/electron-30.4.0.tgz#66641a644059147f0e597e49999599e23dcdbfe3"
integrity sha512-ric3KLPQ9anXYjtTDkj5NbEcXZqRUwqxrxTviIjLdMdHqd5O+hkSHEzXgbSJUOt+7uw+zZuybn9+IM9y7iEpqg==
electron@^33.2.1:
version "33.2.1"
resolved "https://registry.yarnpkg.com/electron/-/electron-33.2.1.tgz#d0d7bba7a7abf4f14881d0a6e03c498b301a2d5f"
integrity sha512-SG/nmSsK9Qg1p6wAW+ZfqU+AV8cmXMTIklUL18NnOKfZLlum4ZsDoVdmmmlL39ZmeCaq27dr7CgslRPahfoVJg==
dependencies:
"@electron/get" "^2.0.0"
"@types/node" "^20.9.0"
@@ -1355,7 +1346,7 @@ eslint-scope@^8.0.2:
esrecurse "^4.3.0"
estraverse "^5.2.0"
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3:
eslint-visitor-keys@^3.3.0:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
@@ -1365,6 +1356,11 @@ eslint-visitor-keys@^4.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb"
integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
eslint-visitor-keys@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
eslint@^9:
version "9.9.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec"
@@ -1464,7 +1460,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-glob@^3.3.0, fast-glob@^3.3.2:
fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -1504,6 +1500,11 @@ fd-slicer@~1.1.0:
dependencies:
pend "~1.2.0"
fdir@^6.4.2:
version "6.4.2"
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689"
integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==
ffmpeg-static@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ffmpeg-static/-/ffmpeg-static-5.2.0.tgz#6ca64a5ed6e69ec4896d175c1f69dd575db7c5ef"
@@ -1760,17 +1761,6 @@ globalthis@^1.0.1:
define-properties "^1.2.1"
gopd "^1.0.1"
globby@^13.1.2:
version "13.2.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==
dependencies:
dir-glob "^3.0.1"
fast-glob "^3.3.0"
ignore "^5.2.4"
merge2 "^1.4.1"
slash "^4.0.0"
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -1860,6 +1850,14 @@ http-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
http-proxy-agent@^7.0.0:
version "7.0.2"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
dependencies:
agent-base "^7.1.0"
debug "^4.3.4"
http-response-object@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810"
@@ -1875,7 +1873,7 @@ http2-wrapper@^1.0.0-beta.5.2:
quick-lru "^5.1.1"
resolve-alpn "^1.0.0"
https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
@@ -1883,6 +1881,14 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
agent-base "6"
debug "4"
https-proxy-agent@^7.0.0:
version "7.0.5"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2"
integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==
dependencies:
agent-base "^7.0.2"
debug "4"
humanize-ms@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
@@ -1910,7 +1916,7 @@ ieee754@^1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1:
ignore@^5.2.0, ignore@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
@@ -2207,10 +2213,10 @@ lru-cache@^10.2.0:
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
lru-cache@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.0.tgz#15d93a196f189034d7166caf9fe55e7384c98a21"
integrity sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==
lru-cache@^11.0.2:
version "11.0.2"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39"
integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==
lru-cache@^6.0.0:
version "6.0.0"
@@ -2253,7 +2259,7 @@ matcher@^3.0.0:
dependencies:
escape-string-regexp "^4.0.0"
merge2@^1.3.0, merge2@^1.4.1:
merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -2537,17 +2543,17 @@ onetime@^5.1.0, onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
onnxruntime-common@1.19.2:
version "1.19.2"
resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.19.2.tgz#39447d703aef6499f71487cb8970f58752234523"
integrity sha512-a4R7wYEVFbZBlp0BfhpbFWqe4opCor3KM+5Wm22Az3NGDcQMiU2hfG/0MfnBs+1ZrlSGmlgWeMcXQkDk1UFb8Q==
onnxruntime-common@1.20.1:
version "1.20.1"
resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.20.1.tgz#b42e317d4d6728745b9e8089617c8cd938d312dc"
integrity sha512-YiU0s0IzYYC+gWvqD1HzLc46Du1sXpSiwzKb63PACIJr6LfL27VsXSXQvt68EzD3V0D5Bc0vyJTjmMxp0ylQiw==
onnxruntime-node@^1.19.2:
version "1.19.2"
resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.19.2.tgz#2f2e1c9286c97291030770c085fb403647538ad7"
integrity sha512-9eHMP/HKbbeUcqte1JYzaaRC8JPn7ojWeCeoyShO86TOR97OCyIyAIOGX3V95ErjslVhJRXY8Em/caIUc0hm1Q==
onnxruntime-node@^1.20.1:
version "1.20.1"
resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.20.1.tgz#a5ba0bd160aeccdb4b7d36fbc2f6a97bde1f7843"
integrity sha512-di/I4HDXRw+FLgq+TyHmQEDd3cEp9iFFZm0r4uJ1Wd7b/WE1VXtKWo8yemex347c6GNF/3Pv86ZfPhIWxORr0w==
dependencies:
onnxruntime-common "1.19.2"
onnxruntime-common "1.20.1"
tar "^7.0.1"
optionator@^0.9.3:
@@ -2672,11 +2678,6 @@ path-scurry@^1.11.1:
lru-cache "^10.2.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pe-library@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/pe-library/-/pe-library-0.4.1.tgz#e269be0340dcb13aa6949d743da7d658c3e2fbea"
@@ -2692,6 +2693,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
picomatch@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
pkg-up@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
@@ -2713,20 +2719,20 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
prettier-plugin-organize-imports@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.0.0.tgz#a69acf024ea3c8eb650c81f664693826ca853534"
integrity sha512-vnKSdgv9aOlqKeEFGhf9SCBsTyzDSyScy1k7E0R1Uo4L0cTcOV7c1XQaT7jfXIOc/p08WLBfN2QUQA9zDSZMxA==
prettier-plugin-organize-imports@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f"
integrity sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==
prettier-plugin-packagejson@^2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.2.tgz#25e8531e15b04e1f68ee7ee4a4b111bd5bea6fcc"
integrity sha512-w+TmoLv2pIa+siplW1cCj2ujEXQQS6z7wmWLOiLQK/2QVl7Wy6xh/ZUpqQw8tbKMXDodmSW4GONxlA33xpdNOg==
prettier-plugin-packagejson@^2.5.6:
version "2.5.6"
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.6.tgz#cd3cca60e1aa87ee3ce3b4032c1c999798d9f714"
integrity sha512-TY7KiLtyt6Tlf53BEbXUWkN0+TRdHKgIMmtXtDCyHH6yWnZ50Lwq6Vb6lyjapZrhDTXooC4EtlY5iLe1sCgi5w==
dependencies:
sort-package-json "2.10.1"
synckit "0.9.1"
sort-package-json "2.12.0"
synckit "0.9.2"
prettier@^3.3.3:
prettier@3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
@@ -2779,18 +2785,6 @@ read-binary-file-arch@^1.0.6:
dependencies:
debug "^4.3.4"
read-config-file@6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.4.0.tgz#970542833216cccff6b1d83320495003dcf85a45"
integrity sha512-uB5QOBeF84PT61GlV11OTV4jUGHAO3iDEOP6v9ygxhG6Bs9PLg7WsjNT6mtIX2G+x8lJTr4ZWNeG6LDTKkNf2Q==
dependencies:
config-file-ts "0.2.8-rc1"
dotenv "^16.4.5"
dotenv-expand "^11.0.6"
js-yaml "^4.1.0"
json5 "^2.2.3"
lazy-val "^1.0.5"
readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0:
version "3.6.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
@@ -2814,11 +2808,6 @@ rechoir@^0.6.2:
dependencies:
resolve "^1.1.6"
regenerator-runtime@^0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -3020,11 +3009,6 @@ simple-update-notifier@2.0.0:
dependencies:
semver "^7.5.3"
slash@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
slice-ansi@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
@@ -3061,19 +3045,19 @@ sort-object-keys@^1.1.3:
resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45"
integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==
sort-package-json@2.10.1:
version "2.10.1"
resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-2.10.1.tgz#18e7fa0172233cb2d4d926f7c99e6bfcf4d1d25c"
integrity sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==
sort-package-json@2.12.0:
version "2.12.0"
resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-2.12.0.tgz#4196a1ba82ba63c4a512add1d00ab39026bf8ab7"
integrity sha512-/HrPQAeeLaa+vbAH/znjuhwUluuiM/zL5XX9kop8UpDgjtyWKt43hGDk2vd/TBdDpzIyzIHVUgmYofzYrAQjew==
dependencies:
detect-indent "^7.0.1"
detect-newline "^4.0.0"
get-stdin "^9.0.0"
git-hooks-list "^3.0.0"
globby "^13.1.2"
is-plain-obj "^4.1.0"
semver "^7.6.0"
sort-object-keys "^1.1.3"
tinyglobby "^0.2.9"
source-map-support@^0.5.19:
version "0.5.21"
@@ -3088,11 +3072,6 @@ source-map@^0.6.0:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
spawn-command@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e"
integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==
sprintf-js@^1.1.2, sprintf-js@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
@@ -3164,10 +3143,10 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
synckit@0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.1.tgz#febbfbb6649979450131f64735aa3f6c14575c88"
integrity sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==
synckit@0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62"
integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==
dependencies:
"@pkgr/core" "^0.1.0"
tslib "^2.6.2"
@@ -3214,6 +3193,14 @@ tiny-typed-emitter@^2.1.0:
resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5"
integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==
tinyglobby@^0.2.9:
version "0.2.10"
resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f"
integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==
dependencies:
fdir "^6.4.2"
picomatch "^4.0.2"
tmp-promise@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7"
@@ -3277,20 +3264,25 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
typescript-eslint@^8.4.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.4.0.tgz#3fa38bd279994cdb40ba9264ef5262a17cf4cfa0"
integrity sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw==
typescript-eslint@^8.16.0:
version "8.16.0"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.16.0.tgz#d608c972d6b2461ca10ec30fd3fa62a080baba19"
integrity sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==
dependencies:
"@typescript-eslint/eslint-plugin" "8.4.0"
"@typescript-eslint/parser" "8.4.0"
"@typescript-eslint/utils" "8.4.0"
"@typescript-eslint/eslint-plugin" "8.16.0"
"@typescript-eslint/parser" "8.16.0"
"@typescript-eslint/utils" "8.16.0"
typescript@^5.4.3, typescript@^5.5.4:
typescript@^5.4.3:
version "5.5.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba"
integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==
typescript@^5.7.2:
version "5.7.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6"
integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==
undici-types@~6.19.2:
version "6.19.8"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"

View File

@@ -227,10 +227,11 @@ export const sidebar = [
collapsed: true,
items: [
{ text: "Getting started", link: "/self-hosting/" },
{ text: "System requirements", link: "/self-hosting/guides/system-requirements", },
{
text: "Guides",
items: [
{ text: "Introduction", link: "/self-hosting/guides/" },
{ text: "Introduction", link: "/self-hosting/guides/" },
{
text: "Connect to custom server",
link: "/self-hosting/guides/custom-server/",
@@ -248,10 +249,6 @@ export const sidebar = [
text: "Mobile build",
link: "/self-hosting/guides/mobile-build",
},
{
text: "System requirements",
link: "/self-hosting/guides/system-requirements",
},
{
text: "Configuring S3",
link: "/self-hosting/guides/configuring-s3",
@@ -264,6 +261,14 @@ export const sidebar = [
text: "DB migration",
link: "/self-hosting/guides/db-migration",
},
{
text: "Hosting Ente without Docker",
link: "/self-hosting/guides/standalone-ente",
},
{
text: "Configure CLI for Self Hosted Instance",
link: "/self-hosting/guides/selfhost-cli"
}
],
},
{
@@ -295,6 +300,10 @@ export const sidebar = [
text: "Yarn",
link: "/self-hosting/troubleshooting/yarn",
},
{
text: "Ente CLI Secrets",
link: "/self-hosting/troubleshooting/keyring",
},
],
},
],

View File

@@ -25,6 +25,11 @@ at [ente.io](https://ente.io).
You can enable FaceID lock under Settings → Security → Lockscreen.
### How secure is the lock screen provided by Ente Auth?
Auth's lock screen acts as a barrier to prevent an attacker from accessing the
contents of the app. It does not introduce a layer of cryptographic security.
### Why do the desktop and mobile apps display different codes?
Please verify that the time on both your mobile and desktop is the same.

View File

@@ -5,12 +5,12 @@ description: Frequently asked questions about keeping extra backups of your data
# Export
## Can I backup my data in a local drive outside Ente?
## How can I backup my data in a local drive outside Ente?
Yes! You can use our CLI tool or our desktop app to set up exports of your data
in a local drive or NAS of your choice. This way, you can use Ente in your day
to day use, but will have an additional guarantee that a copy of your original
photos and videos are always available in normal directories and files.
to your local drive. This way, you can use Ente in your day to day use, but will
have an additional guarantee that a copy of your original photos and videos are
always available in normal directories and files.
- You can use
[Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#export) to export
@@ -24,8 +24,19 @@ photos and videos are always available in normal directories and files.
needing to run any other cron jobs. See
[migration/export](/photos/migration/export/) for more details.
## Does the exported data from Ente photos preserve the same folder and album structure as in the app?
## Does the exported data preserve folder structure?
When you export your data for local backup, it will maintain the exact structure
how you have set up within Ente. The exported data will reflect the same photos
and album structure intact.
Yes. When you export your data for local backup, it will maintain the exact
album structure how you have set up within Ente.
## Does the exported data preserve metadata?
Yes, the metadata is written out to a separate JSON file during export. Note
that the original is not modified. For more details, see the [description of the
exported metadata](https://help.ente.io/photos/faq/photo-dates#export).
## Can I do a 2-way sync?
A two way sync is not currently supported. Attempting to export data to the same
folder that is also being watched by the Ente app will result in undefined
behaviour (e.g. duplicate files, export stalling etc).

View File

@@ -24,8 +24,10 @@ De-merging a certain grouping can be done by going to the person, pressing
### Desktop
Note that while desktop supports naming a person, it currently does not yet
support merging persons. This will be added soon.
Similarly, on desktop you can use the "Add a name" button to merge people by
selecting an existing person, and use the "Review suggestions" sheet to de-merge
previously merged persons (click the top right history icon on the suggestion
sheet to see the previous merges, and if necessary, undo them).
## How do I change the cover for a recognized person?
@@ -56,7 +58,10 @@ person**. This will take you to the grouping of this person. Here you can press
### Desktop
This is currently not yet supported on desktop, but will be added soon.
Similarly, on desktop, you use the "Ignore" option from the top right menu to
ignore a particular face group (If you already give them a name, "Reset person"
first). And to undo this action, open that person (via the file info of a photo
containing that person), and select "Show person".
## How well does the app handle photos of babies?
@@ -70,4 +75,4 @@ If you find a mixed grouping of several different babies, you can use the
option will make the model re-evaluate the grouping with stricter settings,
hopefully separating the different babies in different new groupings.
Please note this functionality is currently only available on mobile.
Please note this functionality is currently only available on mobile.

View File

@@ -64,12 +64,14 @@ videos that you imported. The modifications (e.g. date changes) you make within
Ente will be written into a separate metadata JSON file during export so as to
not modify the original.
> There is one exception to this. For JPEG files, the Exif DateTimeOriginal is
> changed during export from web or desktop apps. This was done on a customer
> request, but in hindsight this has been an incorrect move. We are going to
> deprecate this behavior, and will instead provide separate tools (or
> functionality within the app itself) for customers who intentionally wish to
> modify their originals to reflect the associated metadata JSON.
> [!WARNING]
>
> There used to be one exception to this - for JPEG files, the Exif
> DateTimeOriginal was changed during export from web or desktop apps. This was
> done on a customer request, but in hindsight this was an incorrect change.
>
> We have deprecated this behaviour, and the desktop version 1.7.6 is going to
> be the last version with this exception.
As an example: suppose you have `flower.png`. When you export your library, you
will end up with:
@@ -81,13 +83,36 @@ metadata/flower.png.json
Ente writes this JSON in the same format as Google Takeout so that if a tool
supports Google Takeout import, it should be able to read the JSON written by
Ente too
Ente too.
> One small difference is that, to avoid clutter, Ente puts the JSON in the
> `metadata/` subfolder, while Google puts it next to the file.<br>
>
> <br>Ente itself will read it from either place.
Here is a sample of how the JSON would look:
```json
{
"description": "This will be imported as the caption",
"creationTime": {
"timestamp": "1613532136",
"formatted": "17 Feb 2021, 03:22:16 UTC"
},
"modificationTime": {
"timestamp": "1640225957",
"formatted": "23 Dec 2021, 02:19:17 UTC"
},
"geoData": {
"latitude": 12.004170700000001,
"longitude": 79.8013945
}
}
```
`photoTakenTime` will be considered as an alias for `creationTime`, and
`geoDataExif` will be considered as a fallback for `geoData`.
### File creation time.
The photo's data will be preserved verbatim, however when it is written out to

View File

@@ -48,6 +48,10 @@ albums**.
result in the creation of a new album  empty folders (or folders that only
contain other folders) will be ignored.
- In separate album mode, only the leafmost folder name is considered. For
example, both `A/B/C/D/x.png` and `1/2/3/D/y.png` will get uploaded into the
same Ente album named "D".
> [!NOTE]
>
> Ente albums cannot be nested currently. That is, in the **separate album**

View File

@@ -48,3 +48,9 @@ allows you to automate backups to ente's cloud.
Some more details about the feature are in our
[blog post](http://ente.io/blog/watch-folders) announcing it.
## 2-way sync
Note that a two way sync is not currently supported. Attempting to export data
to the same folder that is also being watched by the Ente app will result in
undefined behaviour (e.g. duplicate files, export stalling etc).

View File

@@ -64,6 +64,7 @@ data reflects the latest album states with new files, moves, and deletions.
If you run into any issues during your data export, please reach out to
[support@ente.io](mailto:support@ente.io) and we will be happy to help you!
Note that we also provide a
[CLI tool](https://github.com/ente-io/ente/tree/main/cli#export) to export your
data. Please find more details [here](/photos/faq/export).
Note that we also provide a [CLI
tool](https://github.com/ente-io/ente/tree/main/cli#export) to export your data.
You can find more information about the export in the [export
FAQ](/photos/faq/export).

View File

@@ -5,20 +5,26 @@ description:
images in Ente Photos
---
# Missing thumbnails
# Missing or improper thumbnails
## Web
Firefox (including its other forks like Librewolf) prevents the app from
generating thumbnails if the "block canvas fingerprinting" setting in Firefox is
enabled (i.e. **`privacy.resistFingerprinting`** is set to true in
`about:config`). The app needs the canvas to generate thumbnails, and that
Firefox feature blocks access to the canvas. Ideally, Firefox should be
prompting for a permission, but some users have reported that sometime it
silently blocks access, and turning off that setting works.
**Firefox** prevents the app from generating thumbnails if the "block canvas
fingerprinting" setting in Firefox is enabled (i.e.
**`privacy.resistFingerprinting`** is set to true in `about:config`). The app
needs the canvas to generate thumbnails, and that Firefox feature blocks access
to the canvas. Ideally, Firefox should be prompting for a permission, but some
users have reported that sometime it silently blocks access, and turning off
that setting works.
Similar issues may arise if you are using an **extension** that blocks access to
the canvas, or some other browser that has similar restrictions.
Similar issues may arise if you are using an extension that blocks access to the
canvas.
In all these cases, you need to allow Ente access to the canvas for the
thumbnail to be generated properly.
Note that once the thumbnails are missing or have been incorrectly generated,
they cannot be viewed on any of the other clients (the thumbnails are only
generated once, during upload, so viewing it in a different place does not
change the already generated thumbnail).
There is currently no functionality to regenerate thumbnails in the above cases.
You will need to upload the affected files again.

View File

@@ -40,8 +40,8 @@ explicit whitelist of admins.
> [!NOTE]
>
> The first user is only treated as the admin if there are the list of admins in
> the configuration is empty.
> The first user is only treated as the admin if the list of admins in the
> configuration is empty.
>
> Also, if at some point you delete the first user, then you will need to define
> a whitelist to make some other user as the admin if you wish (since the first

View File

@@ -0,0 +1,37 @@
---
title: CLI for Self Hosted Instance
description: Guide to configuring Ente CLI for Self Hosted Instance
---
## Self Hosting
If you are self-hosting the server, you can still configure CLI to export
data & perform basic admin actions.
To do this, first configure the CLI to point to your server. Define a config.yaml
and put it either in the same directory as CLI binary
or path defined in env variable `ENTE_CLI_CONFIG_DIR`
```yaml
endpoint:
api: "http://localhost:8080"
```
You should be able to [add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md),
and subsequently increase the
[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) using the CLI.
For the admin actions, you first need to whitelist admin users. You can create
`server/museum.yaml`, and whitelist add the admin userID `internal.admins`.
See [local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1)
in the server source code for details about how to define this.
You can use [account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md)
command to find the user id of any account.
```yaml
internal:
admins:
# - 1580559962386440
```

View File

@@ -0,0 +1,104 @@
---
title: Installing Ente Standalone (without Docker)
description: Installing and setting up Ente standalone without docker.
---
# Installing and Deploying Ente Standalone (without Docker)
## Running Museum (Ente's server) without Docker
First, start by installing all the dependencies to get your machine ready for development.
```sh
# For MacOS
brew tap homebrew/core
brew update
brew install go
# For Ubuntu based distros
sudo apt update && sudo apt upgrade
sudo apt install golang-go
```
Alternatively, you can also download the latest binaries from ['All Release'](https://go.dev/dl/) page from the official website.
```sh
brew install postgres@15
# Link the postgres keg
brew link postgresql@15
brew install libsodium
# For Ubuntu based distros
sudo apt install postgresql
sudo apt install libsodium23 libsodium-dev
```
The package `libsodium23` might be installed already in some cases.
Installing pkg-config
```sh
brew install pkg-config
# For Ubuntu based distros
sudo apt install pkg-config
```
## Starting Postgres
### With pg_ctl
```sh
pg_ctl -D /usr/local/var/postgres -l logfile start
```
Dependeing on the Operating System type the path for postgres binary or configuration file might be different, please check if the command keeps failing for you.
Ideally, if you are on a Linux system with systemd as the init. You can also start postgres as a systemd service. After Installation execute the following commands:
```sh
sudo systemctl enable postgresql
sudo systemctl daemon-reload && sudo systemctl start postgresql
```
### Create user
```sh
createuser -s postgres
```
## Start Museum
Start by cloning ente to your system.
```sh
git clone https://github.com/ente-io/ente
```
```sh
export ENTE_DB_USER=postgres
cd ente/server
go run cmd/museum/main.go
```
You can also add the export line to your shell's RC file, to avoid exporting the environment variable every time.
For live reloads, install [air](https://github.com/air-verse/air#installation). Then you can just call air after declaring the required environment variables. For example,
```sh
ENTE_DB_USER=postgres
air
```
## Museum as a background service
Please check the below links if you want to run Museum as a service, both of them are battle tested.
1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323)
2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4)
Once you are done with setting and running Museum, all you are left to do is run the web app and reverse_proxy it with a webserver. You can check the following resources for Deploying your web app.
1. [Hosting the Web App](https://help.ente.io/self-hosting/guides/web-app).
2. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd)

View File

@@ -0,0 +1,35 @@
---
title: Ente CLI Secrets
description: A quick hotfix for keyring errors while running Ente CLI.
---
# Ente CLI Secrets
Ente CLI makes use of keyring for storing sensitive information
like your passwords. And running the cli straight out of the
box might give you some errors related to keyrings in some case.
Follow the below steps to run Ente CLI and also avoid keyrings errors.
Run:
```sh
# export the secrets path
export ENTE_CLI_SECRETS_PATH=./<path-to-secrets.txt>
./ente-cli
```
You can also add the above line to your shell's rc file, to prevent the need to export manually every time.
Then one of the following:
1. If the file doesn't exist, Ente CLI will create it and fill it with a random 32 character encryption key.
2. If you do create the file, please fill it with a cryptographically generated 32 byte string.
And you are good to go.
## Ref
- [Ente CLI Secrets Path](https://www.reddit.com/r/selfhosted/comments/1gc09il/comment/lu2hox2/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button)
- [Keyrings](https://man7.org/linux/man-pages/man7/keyrings.7.html)

View File

@@ -0,0 +1,32 @@
## Setting up a remote desktop
This is handy, e.g., when creating test environments with large disks, where we
still need a graphical session to run the desktop app.
Create a normal Ubuntu instance (tweak the exact commands if using a different
distro).
Install
- **Xfce4** - The desktop environment
- **xorg** - An X server
- **xrdp** - A remote desktop protocol (RDP) server.
```sh
sudo apt install xfce4 xorg xrdp
```
Configure xrdp to use Xfce
```sh
echo xfce4-session > ~/.xsession
```
Start the xrdp service, and also enable it so that it starts on boot
```sh
sudo systemctl enable xrdp
sudo systemctl start xrdp
```
On macOS, install a RDP client, e.g. [Microsoft Remote Desktop](https://apps.apple.com/us/app/microsoft-remote-desktop/id1295203466).

View File

@@ -9,6 +9,7 @@ import { useEffect, useState } from "react";
import "./App.css";
import FamilyTableComponent from "./components/FamilyComponentTable";
import StorageBonusTableComponent from "./components/StorageBonusTableComponent";
import TokensTableComponent from "./components/TokenTableComponent";
import type { UserData } from "./components/UserComponent";
import UserComponent from "./components/UserComponent";
import duckieimage from "./components/duckie.png";
@@ -45,11 +46,14 @@ interface Security {
isEmailMFAEnabled: boolean;
isTwoFactorEnabled: boolean;
passkeys: string;
passkeyCount: number;
canDisableEmailMFA: boolean;
}
interface UserResponse {
user: User;
subscription: Subscription;
authCodes?: number;
details?: {
usage?: number;
storageBonus?: number;
@@ -119,10 +123,14 @@ const App: React.FC = () => {
const startTime = Date.now();
try {
const encodedEmail = encodeURIComponent(email);
const encodedToken = encodeURIComponent(token);
const url = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
console.log(`Fetching data from URL: ${url}`);
const response = await fetch(url);
const url = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const response = await fetch(url, {
headers: {
"Content-Type": "application/json",
"X-AUTH-TOKEN": token,
},
});
if (!response.ok) {
throw new Error("Network response was not ok");
}
@@ -177,7 +185,16 @@ const App: React.FC = () => {
.isTwoFactorEnabled
? "Enabled"
: "Disabled",
Passkeys: "None",
Passkeys:
(userDataResponse.details?.profileData.passkeyCount ??
0) > 0
? "Enabled"
: "Disabled",
"Can Disable EmailMFA": userDataResponse.details
?.profileData.canDisableEmailMFA
? "Yes"
: "No",
AuthCodes: `${userDataResponse.authCodes ?? 0}`,
},
};
@@ -305,6 +322,7 @@ const App: React.FC = () => {
<Tab label="User" />
<Tab label="Family" />
<Tab label="Bonuses" />
<Tab label="Devices" />
</Tabs>
</Box>
<Box
@@ -332,6 +350,11 @@ const App: React.FC = () => {
<StorageBonusTableComponent />
</div>
)}
{tabValue === 3 && userData && (
<div>
<TokensTableComponent />
</div>
)}
</Box>
</>
) : (

View File

@@ -31,20 +31,18 @@ const ChangeEmail: React.FC<ChangeEmailProps> = ({ open, onClose }) => {
useEffect(() => {
const fetchUserID = async () => {
const token = getToken();
const email = getEmail();
setNewEmail(email); // Set initial email state
const encodedEmail = encodeURIComponent(email);
const encodedToken = encodeURIComponent(token);
const url = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
const url = `${apiOrigin}/admin/user?email=${encodedEmail}`;
try {
const response = await fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-AUTH-TOKEN": token,
"X-AUTH-TOKEN": getToken(),
},
});
@@ -78,7 +76,7 @@ const ChangeEmail: React.FC<ChangeEmailProps> = ({ open, onClose }) => {
event.preventDefault();
const token = getToken();
const url = `${apiOrigin}/admin/user/change-email?token=${token}`;
const url = `${apiOrigin}/admin/user/change-email`;
const body = {
userID,

View File

@@ -47,11 +47,16 @@ const CloseFamily: React.FC<CloseFamilyProps> = ({
}
const encodedEmail = encodeURIComponent(email);
const encodedToken = encodeURIComponent(token);
// Fetch user data
const userUrl = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
const userResponse = await fetch(userUrl);
const userUrl = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const userResponse = await fetch(userUrl, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
});
if (!userResponse.ok) {
throw new Error("Failed to fetch user data");
}
@@ -63,11 +68,14 @@ const CloseFamily: React.FC<CloseFamilyProps> = ({
}
// Close family action
const closeFamilyUrl = `${apiOrigin}/admin/user/close-family?token=${encodedToken}`;
const closeFamilyUrl = `${apiOrigin}/admin/user/close-family`;
const body = JSON.stringify({ userId });
const closeFamilyResponse = await fetch(closeFamilyUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
body: body,
});
@@ -78,9 +86,12 @@ const CloseFamily: React.FC<CloseFamilyProps> = ({
handleCloseFamily(); // Notify parent component of successful action
handleClose(); // Close dialog on successful action
console.log("Family closed successfully");
} catch (error) {
console.error("Error closing family:", error);
if (error instanceof Error) {
alert(error.message);
} else {
alert("Failed to close family");
}
} finally {
setLoading(false);
}

View File

@@ -21,17 +21,24 @@ const DeleteAccount: React.FC<DeleteAccountProps> = ({ open, handleClose }) => {
try {
const encodedEmail = encodeURIComponent(getEmail());
console.log(encodedEmail);
const encodedToken = encodeURIComponent(getToken());
console.log(encodedToken);
const deleteUrl = `${apiOrigin}/admin/user/delete?email=${encodedEmail}&token=${encodedToken}`;
const response = await fetch(deleteUrl, { method: "DELETE" });
const token = getToken();
const deleteUrl = `${apiOrigin}/admin/user/delete?email=${encodedEmail}`;
const response = await fetch(deleteUrl, {
method: "DELETE",
headers: { "X-Auth-Token": token },
});
if (!response.ok) {
throw new Error("Failed to delete user account");
}
handleClose(); // Close dialog on successful delete
console.log("Account deleted successfully");
} catch (error) {
console.error("Error deleting user account:", error);
if (error instanceof Error) {
alert("Failed to delete the account: " + error.message);
} else {
alert("An error occurred while deleting the account");
}
}
};

View File

@@ -47,27 +47,35 @@ const Disable2FA: React.FC<Disable2FAProps> = ({
}
const encodedEmail = encodeURIComponent(email);
const encodedToken = encodeURIComponent(token);
// Fetch user data
const userUrl = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
const userResponse = await fetch(userUrl);
const userUrl = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const userResponse = await fetch(userUrl, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
});
if (!userResponse.ok) {
throw new Error("Failed to fetch user data");
}
const userData = (await userResponse.json()) as UserData;
const userId = userData.subscription?.userID;
const userID = userData.subscription?.userID;
if (!userId) {
if (!userID) {
throw new Error("User ID not found");
}
// Disable 2FA
const disableUrl = `${apiOrigin}/admin/user/disable-2fa?token=${encodedToken}`;
const body = JSON.stringify({ userId });
const disableUrl = `${apiOrigin}/admin/user/disable-2fa`;
const body = JSON.stringify({ userID });
const disableResponse = await fetch(disableUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
body: body,
});
@@ -75,12 +83,15 @@ const Disable2FA: React.FC<Disable2FAProps> = ({
const errorResponse = await disableResponse.text();
throw new Error(`Failed to disable 2FA: ${errorResponse}`);
}
handleDisable2FA(); // Notify parent component of successful disable
handleClose(); // Close dialog on successful disable
console.log("2FA disabled successfully");
} catch (error) {
console.error("Error disabling 2FA:", error);
if (error instanceof Error) {
alert(error.message);
} else {
alert("Failed to disable 2FA");
}
} finally {
setLoading(false);
}

View File

@@ -47,11 +47,16 @@ const DisablePasskeys: React.FC<DisablePasskeysProps> = ({
}
const encodedEmail = encodeURIComponent(email);
const encodedToken = encodeURIComponent(token);
// Fetch user data
const userUrl = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
const userResponse = await fetch(userUrl);
const userUrl = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const userResponse = await fetch(userUrl, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
});
if (!userResponse.ok) {
throw new Error("Failed to fetch user data");
}
@@ -63,11 +68,14 @@ const DisablePasskeys: React.FC<DisablePasskeysProps> = ({
}
// Disable passkeys action
const disablePasskeysUrl = `${apiOrigin}/admin/user/disable-passkeys?token=${encodedToken}`;
const disablePasskeysUrl = `${apiOrigin}/admin/user/disable-passkeys`;
const body = JSON.stringify({ userId });
const disablePasskeysResponse = await fetch(disablePasskeysUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
body: body,
});
@@ -80,7 +88,11 @@ const DisablePasskeys: React.FC<DisablePasskeysProps> = ({
handleClose(); // Close dialog on successful action
console.log("Passkeys disabled successfully");
} catch (error) {
console.error("Error disabling passkeys:", error);
if (error instanceof Error) {
alert(error.message);
} else {
alert("Failed to disable passkeys");
}
} finally {
setLoading(false);
}

View File

@@ -40,9 +40,15 @@ const FamilyTableComponent: React.FC = () => {
const fetchData = async () => {
try {
const encodedEmail = encodeURIComponent(getEmail());
const encodedToken = encodeURIComponent(getToken());
const url = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
const response = await fetch(url);
const token = getToken();
const url = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const response = await fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
});
if (!response.ok) {
throw new Error("Network response was not ok");
}

View File

@@ -37,9 +37,15 @@ const StorageBonusTableComponent: React.FC = () => {
const fetchData = async () => {
try {
const encodedEmail = encodeURIComponent(getEmail());
const encodedToken = encodeURIComponent(getToken());
const url = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
const response = await fetch(url);
const token = getToken();
const url = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const response = await fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
});
if (!response.ok) {
throw new Error("Failed to fetch bonus data");
}

View File

@@ -0,0 +1,186 @@
import {
Button,
Dialog,
DialogActions,
DialogContent,
DialogContentText,
DialogTitle,
Paper,
} from "@mui/material";
import React, { useState } from "react";
import { getEmail, getToken } from "../App"; // Import getEmail and getToken functions
import { apiOrigin } from "../services/support";
interface UserData {
subscription?: {
userID: string;
// Add other properties as per your API response structure
};
// Add other properties as per your API response structure
}
interface ToggleEmailMFAProps {
open: boolean;
handleClose: () => void;
handleToggleEmailMFA: (status: boolean) => void; // Callback to handle toggling Email MFA
}
const ToggleEmailMFA: React.FC<ToggleEmailMFAProps> = ({
open,
handleClose,
handleToggleEmailMFA,
}) => {
const [loading, setLoading] = useState(false);
const handleToggle = async (enable: boolean) => {
try {
setLoading(true);
const email = getEmail();
const token = getToken();
if (!email) {
throw new Error("Email not found");
}
if (!token) {
throw new Error("Token not found");
}
const encodedEmail = encodeURIComponent(email);
// Fetch user data
const userUrl = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const userResponse = await fetch(userUrl, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
});
if (!userResponse.ok) {
throw new Error("Failed to fetch user data");
}
const userData = (await userResponse.json()) as UserData;
const userId = userData.subscription?.userID;
if (!userId) {
throw new Error("User ID not found");
}
// Toggle Email MFA action
const toggleEmailMFAUrl = `${apiOrigin}/admin/user/update-email-mfa`;
const body = JSON.stringify({ userID: userId, emailMFA: enable });
const toggleEmailMFAResponse = await fetch(toggleEmailMFAUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
body: body,
});
if (!toggleEmailMFAResponse.ok) {
const errorResponse = await toggleEmailMFAResponse.text();
throw new Error(`Failed to update Email MFA: ${errorResponse}`);
}
handleToggleEmailMFA(enable); // Notify parent component of successful action with status
handleClose(); // Close dialog on successful action
console.log(
`Email MFA ${enable ? "enabled" : "disabled"} successfully`,
);
} catch (error) {
if (error instanceof Error) {
alert(error.message);
} else {
alert("Failed to update Email MFA");
}
} finally {
setLoading(false);
}
};
const handleCancel = () => {
handleClose(); // Close dialog
};
return (
<div>
<Dialog
open={open}
onClose={handleClose}
aria-labelledby="alert-dialog-title"
aria-describedby="alert-dialog-description"
PaperComponent={Paper}
sx={{
width: "499px",
height: "286px",
margin: "auto",
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
}}
BackdropProps={{
style: {
backgroundColor: "rgba(255, 255, 255, 0.9)", // Semi-transparent backdrop
},
}}
>
<DialogTitle id="alert-dialog-title">
{"Toggle Email MFA"}
</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-description">
Do you want to enable or disable Email MFA for this
account?
</DialogContentText>
</DialogContent>
<DialogActions sx={{ justifyContent: "center" }}>
<Button
onClick={handleCancel}
sx={{
bgcolor: "white",
color: "black",
"&:hover": { bgcolor: "#FAFAFA" },
}}
>
Cancel
</Button>
<Button
onClick={() => {
handleToggle(true).catch((error: unknown) =>
console.error(error),
);
}}
sx={{
bgcolor: "#4CAF50",
color: "white",
"&:hover": { bgcolor: "#45A049" },
}}
disabled={loading}
>
{loading ? "Processing..." : "Enable Email MFA"}
</Button>
<Button
onClick={() => {
handleToggle(false).catch((error: unknown) =>
console.error(error),
);
}}
sx={{
bgcolor: "#F4473D",
color: "white",
"&:hover": { bgcolor: "#E53935" },
}}
disabled={loading}
>
{loading ? "Processing..." : "Disable Email MFA"}
</Button>
</DialogActions>
</Dialog>
</div>
);
};
export default ToggleEmailMFA;

View File

@@ -0,0 +1,194 @@
import {
Paper,
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
TableSortLabel,
} from "@mui/material";
import * as React from "react";
import { useEffect, useState } from "react";
import { getEmail, getToken } from "../App";
import { apiOrigin } from "../services/support";
interface TokenData {
creationTime: number;
lastUsedTime: number;
ua: string;
isDeleted: boolean;
app: string;
}
interface UserData {
tokens: TokenData[];
}
const TokensTableComponent: React.FC = () => {
const [tokens, setTokens] = useState<TokenData[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const [order, setOrder] = useState<"asc" | "desc">("asc");
const [orderBy, setOrderBy] = useState<keyof TokenData>("lastUsedTime");
useEffect(() => {
const fetchData = async () => {
try {
const encodedEmail = encodeURIComponent(getEmail());
const token = getToken();
const url = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const response = await fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Auth-Token": token,
},
});
if (!response.ok) {
throw new Error("Failed to fetch token data");
}
const userData = (await response.json()) as UserData;
setTokens(userData.tokens);
} catch (error) {
console.error("Error fetching token data:", error);
setError("No token data");
} finally {
setLoading(false);
}
};
fetchData().catch((error: unknown) =>
console.error("Fetch data error:", error),
);
}, []);
const handleRequestSort = (property: keyof TokenData) => {
const isAsc = orderBy === property && order === "asc";
setOrder(isAsc ? "desc" : "asc");
setOrderBy(property);
};
const sortedTokens = tokens.sort((a, b) => {
if (orderBy === "lastUsedTime" || orderBy === "creationTime") {
return order === "asc"
? a[orderBy] - b[orderBy]
: b[orderBy] - a[orderBy];
}
return 0;
});
const formatDate = (timestamp: number): string => {
const date = new Date(timestamp / 1000);
return date.toLocaleDateString();
};
if (loading) {
return <p>Loading...</p>;
}
if (error) {
return <p>Error: {error}</p>;
}
if (tokens.length === 0) {
return <p>No token data available</p>;
}
return (
<div style={{ marginTop: "20px", marginBottom: "20px" }}>
<TableContainer
component={Paper}
style={{
backgroundColor: "#F1F1F3",
}}
>
<Table aria-label="tokens-table">
<TableHead>
<TableRow>
<TableCell
sortDirection={
orderBy === "creationTime" ? order : false
}
>
<TableSortLabel
active={orderBy === "creationTime"}
direction={
orderBy === "creationTime"
? order
: "asc"
}
onClick={() =>
handleRequestSort("creationTime")
}
>
Created At
</TableSortLabel>
</TableCell>
<TableCell
sortDirection={
orderBy === "lastUsedTime" ? order : false
}
>
<TableSortLabel
active={orderBy === "lastUsedTime"}
direction={
orderBy === "lastUsedTime"
? order
: "asc"
}
onClick={() =>
handleRequestSort("lastUsedTime")
}
>
Last Used At
</TableSortLabel>
</TableCell>
<TableCell>
<b>User Agent</b>
</TableCell>
<TableCell>
<b>App</b>
</TableCell>
<TableCell>
<b>Is Deleted</b>
</TableCell>
</TableRow>
</TableHead>
<TableBody>
{sortedTokens.map((token, index) => (
<TableRow key={index}>
<TableCell>
{formatDate(token.creationTime)}
</TableCell>
<TableCell>
{formatDate(token.lastUsedTime)}
</TableCell>
<TableCell>{token.ua}</TableCell>
<TableCell>{token.app}</TableCell>
<TableCell>
<span
style={{
backgroundColor: token.isDeleted
? "#494949"
: "transparent",
color: token.isDeleted
? "white"
: "inherit",
padding: "4px 8px",
borderRadius: "10px",
}}
>
{token.isDeleted ? "Yes" : "No"}
</span>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
</div>
);
};
export default TokensTableComponent;

View File

@@ -63,10 +63,12 @@ const UpdateSubscription: React.FC<UpdateSubscriptionProps> = ({
const email = getEmail();
const token = getToken();
const encodedEmail = encodeURIComponent(email);
const encodedToken = encodeURIComponent(token);
const url = `${apiOrigin}/admin/user?email=${encodedEmail}&token=${encodedToken}`;
const response = await fetch(url);
const url = `${apiOrigin}/admin/user?email=${encodedEmail}`;
const response = await fetch(url, {
headers: {
"X-AUTH-TOKEN": token,
},
});
if (!response.ok) {
throw new Error("Network response was not ok");
}
@@ -172,7 +174,11 @@ const UpdateSubscription: React.FC<UpdateSubscriptionProps> = ({
console.log("Subscription updated successfully");
onClose();
} catch (error) {
console.error("Error updating subscription:", error);
if (error instanceof Error) {
alert(`Failed to update subscription: ${error.message}`);
} else {
alert("Failed to update subscription");
}
}
})().catch((error: unknown) => {
console.error("Unhandled promise rejection:", error);

View File

@@ -2,7 +2,6 @@ import DeleteIcon from "@mui/icons-material/Delete";
import EditIcon from "@mui/icons-material/Edit";
import Box from "@mui/material/Box";
import Button from "@mui/material/Button";
import Grid from "@mui/material/Grid";
import IconButton from "@mui/material/IconButton";
import Paper from "@mui/material/Paper";
@@ -18,7 +17,9 @@ import ChangeEmail from "./ChangeEmail";
import DeleteAccount from "./DeleteAccont";
import Disable2FA from "./Disable2FA";
import DisablePasskeys from "./DisablePasskeys";
import ToggleEmailMFA from "./ToggleEmailMFA";
import UpdateSubscription from "./UpdateSubscription";
export interface UserData {
User: Record<string, string>;
Storage: Record<string, string>;
@@ -32,343 +33,370 @@ interface UserComponentProps {
const UserComponent: React.FC<UserComponentProps> = ({ userData }) => {
const [deleteAccountOpen, setDeleteAccountOpen] = React.useState(false);
const [email2FAEnabled, setEmail2FAEnabled] = React.useState(false);
const [email2FAOpen, setEmail2FAToggleOpen] = React.useState(false);
const [disable2FAOpen, setDisable2FAOpen] = React.useState(false);
const [twoFactorEnabled, setTwoFactorEnabled] = React.useState(false);
const [is2FADisabled, setIs2FADisabled] = React.useState(false);
const [canDisableEmailMFA, setCanDisableEmailMFA] = React.useState(false);
const [updateSubscriptionOpen, setUpdateSubscriptionOpen] =
React.useState(false);
const [changeEmailOpen, setChangeEmailOpen] = React.useState(false);
const [DisablePasskeysOpen, setDisablePasskeysOpen] = React.useState(false);
const [disablePasskeysOpen, setDisablePasskeysOpen] = React.useState(false);
React.useEffect(() => {
if (userData?.Security["Two factor 2FA"] === "Enabled") {
setTwoFactorEnabled(true);
} else {
setTwoFactorEnabled(false);
}
setTwoFactorEnabled(userData?.Security["Two factor 2FA"] === "Enabled");
setEmail2FAEnabled(userData?.Security["Email MFA"] === "Enabled");
setCanDisableEmailMFA(
userData?.Security["Can Disable EmailMFA"] === "Yes",
);
}, [userData]);
const handleEditEmail = () => {
console.log("Edit Email clicked");
setChangeEmailOpen(true);
};
const handleEditEmail = () => setChangeEmailOpen(true);
const handleDeleteAccountClick = () => setDeleteAccountOpen(true);
const handleEditSubscription = () => setUpdateSubscriptionOpen(true);
const handleDisablePasskeys = () => setDisablePasskeysOpen(true);
const handleCloseChangeEmail = () => {
setChangeEmailOpen(false);
};
const handleDeleteAccountClick = () => {
setDeleteAccountOpen(true);
};
const handleCloseDeleteAccount = () => {
setDeleteAccountOpen(false);
};
const handleOpenDisable2FA = () => {
setDisable2FAOpen(true);
};
const handleCloseDisable2FA = () => {
setDisable2FAOpen(false);
};
const handleDisable2FA = () => {
setIs2FADisabled(true);
};
const handleCancelDisable2FA = () => {
setTwoFactorEnabled(true);
handleCloseDisable2FA();
};
const handleEditSubscription = () => {
setUpdateSubscriptionOpen(true);
};
const handleCloseUpdateSubscription = () => {
setUpdateSubscriptionOpen(false);
};
const handleOpenDisablePasskeys = () => {
setDisablePasskeysOpen(true);
};
const handleCloseDisablePasskeys = () => {
setDisablePasskeysOpen(false);
};
const handleDisablePasskeys = () => {
console.log("Close family action");
handleOpenDisablePasskeys();
};
if (!userData) {
return null;
}
if (!userData) return null;
return (
<Grid container spacing={6} justifyContent="center">
{Object.entries(userData).map(([title, data]) => (
<Grid item xs={12} sm={10} md={6} key={title}>
<TableContainer
component={Paper}
variant="outlined"
sx={{
backgroundColor: "#F1F1F3",
minHeight: 300,
display: "flex",
flexDirection: "column",
marginBottom: "20px",
height: "100%",
width: "100%",
padding: "13px",
overflowX: "hidden", // Prevent horizontal scrolling
"&:not(:last-child)": {
marginBottom: "40px",
},
}}
>
<Box
sx={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
padding: "16px",
width: "100%",
}}
>
<Typography
variant="h6"
component="div"
sx={{
fontWeight: "bold",
textAlign: "center",
width: "100%",
}}
>
{title}
</Typography>
{title === "User" && (
<IconButton
edge="start"
aria-label="delete"
onClick={handleDeleteAccountClick}
>
<DeleteIcon style={{ color: "" }} />
</IconButton>
)}
{title === "Subscription" && (
<IconButton
edge="end"
aria-label="edit"
onClick={handleEditSubscription}
>
<EditIcon
style={{
color: "black",
marginRight: "15px",
}}
/>
</IconButton>
)}
</Box>
<Table
sx={{
width: "100%",
tableLayout: "fixed", // Ensure table layout is fixed
height: "100%",
borderBottom: "none",
}}
aria-label={title}
>
<TableBody>
{Object.entries(
data as Record<string, string>,
).map(([label, value], index) => (
<TableRow key={label}>
<TableCell
component="th"
scope="row"
style={{
padding: "16px",
borderBottom:
index === 1 || index === 0
? "1px solid rgba(224, 224, 224, 1)"
: "none",
}}
>
{label}
</TableCell>
<TableCell
align="right"
style={{
padding: "10px",
borderBottom:
index === 1 || index === 0
? "1px solid rgba(224, 224, 224, 1)"
: "none",
}}
>
{label === "Email" ? (
<Box
sx={{
display: "flex",
alignItems: "center",
justifyContent:
"flex-end",
}}
>
<Typography>
{value}
</Typography>
<IconButton
edge="end"
aria-label="edit-email"
onClick={
handleEditEmail
}
>
<EditIcon
style={{
color: "black",
}}
/>
</IconButton>
</Box>
) : label === "Passkeys" ? (
<Button
variant="outlined"
onClick={
handleDisablePasskeys
}
>
Disable Passkeys
</Button>
) : typeof value === "string" ? (
label === "Two factor 2FA" ? (
is2FADisabled ||
value === "Disabled" ? (
<Typography
sx={{
width: "100%",
paddingLeft:
"1px",
}}
>
{value}
</Typography>
) : (
<Box
sx={{
display: "flex",
alignItems:
"center",
justifyContent:
"right",
width: "100%",
paddingRight:
"50px",
}}
>
<Typography
sx={{
marginRight:
"1px",
}}
>
{value}
</Typography>
{value ===
"Enabled" && (
<Switch
checked={
twoFactorEnabled
}
onChange={(
e,
) => {
const isChecked =
e
.target
.checked;
setTwoFactorEnabled(
isChecked,
);
if (
!isChecked
) {
handleOpenDisable2FA();
}
}}
sx={{
"& .MuiSwitch-switchBase.Mui-checked":
{
color: "#00B33C",
"&:hover":
{
backgroundColor:
"rgba(0, 179, 60, 0.08)",
},
},
"& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track":
{
backgroundColor:
"#00B33C",
},
}}
/>
)}
</Box>
)
) : (
<Typography>
{value}
</Typography>
)
) : (
<Typography>
{String(value)}
</Typography>
)}
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
<DataTable
title={title}
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
data={data}
onEditEmail={handleEditEmail}
onDeleteAccount={handleDeleteAccountClick}
onEditSubscription={handleEditSubscription}
onDisablePasskeys={handleDisablePasskeys}
canDisableEmailMFA={canDisableEmailMFA}
twoFactorEnabled={twoFactorEnabled}
setTwoFactorEnabled={setTwoFactorEnabled}
setDisable2FAOpen={setDisable2FAOpen}
email2FAEnabled={email2FAEnabled}
setEmail2FAToggleOpen={setEmail2FAToggleOpen}
/>
</Grid>
))}
<DeleteAccount
open={deleteAccountOpen}
handleClose={handleCloseDeleteAccount}
handleClose={() => setDeleteAccountOpen(false)}
/>
<Disable2FA
open={disable2FAOpen}
handleClose={handleCancelDisable2FA}
handleDisable2FA={handleDisable2FA}
handleClose={() => setDisable2FAOpen(false)}
handleDisable2FA={() => setTwoFactorEnabled(false)}
/>
<ToggleEmailMFA
open={email2FAOpen}
handleClose={() => setEmail2FAToggleOpen(false)}
handleToggleEmailMFA={(status) => setEmail2FAToggleOpen(status)}
/>
<UpdateSubscription
open={updateSubscriptionOpen}
onClose={handleCloseUpdateSubscription}
onClose={() => setUpdateSubscriptionOpen(false)}
/>
<ChangeEmail
open={changeEmailOpen}
onClose={handleCloseChangeEmail}
onClose={() => setChangeEmailOpen(false)}
/>
<DisablePasskeys
open={DisablePasskeysOpen}
handleClose={handleCloseDisablePasskeys}
handleDisablePasskeys={handleCloseDisablePasskeys}
open={disablePasskeysOpen}
handleClose={() => setDisablePasskeysOpen(false)}
handleDisablePasskeys={() => setDisablePasskeysOpen(false)}
/>
</Grid>
);
};
interface DataTableProps {
title: string;
data: Record<string, string>;
onEditEmail: () => void;
onDeleteAccount: () => void;
onEditSubscription: () => void;
onDisablePasskeys: () => void;
canDisableEmailMFA: boolean;
twoFactorEnabled: boolean;
setTwoFactorEnabled: (enabled: boolean) => void;
setDisable2FAOpen: (open: boolean) => void;
email2FAEnabled: boolean;
setEmail2FAToggleOpen: (open: boolean) => void;
}
const DataTable: React.FC<DataTableProps> = ({
title,
data,
onEditEmail,
onDeleteAccount,
onEditSubscription,
onDisablePasskeys,
canDisableEmailMFA,
twoFactorEnabled,
setTwoFactorEnabled,
setDisable2FAOpen,
email2FAEnabled,
setEmail2FAToggleOpen,
}) => (
<TableContainer
component={Paper}
variant="outlined"
sx={{
backgroundColor: "#F1F1F3",
minHeight: 300,
display: "flex",
flexDirection: "column",
marginBottom: "20px",
height: "100%",
width: "100%",
padding: "13px",
overflowX: "hidden",
"&:not(:last-child)": {
marginBottom: "40px",
},
}}
>
<Box
sx={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
padding: "16px",
width: "100%",
}}
>
<Typography
variant="h6"
component="div"
sx={{
fontWeight: "bold",
textAlign: "center",
width: "100%",
}}
>
{title}
</Typography>
{title === "User" && (
<IconButton
edge="start"
aria-label="delete"
onClick={onDeleteAccount}
>
<DeleteIcon style={{ color: "" }} />
</IconButton>
)}
{title === "Subscription" && (
<IconButton
edge="end"
aria-label="edit"
onClick={onEditSubscription}
>
<EditIcon style={{ color: "black", marginRight: "15px" }} />
</IconButton>
)}
</Box>
<Table
sx={{
width: "100%",
tableLayout: "fixed",
height: "100%",
borderBottom: "none",
}}
aria-label={title}
>
<TableBody>
{Object.entries(data)
.filter(([label]) => label !== "Can Disable EmailMFA")
.map(([label, value], index) => (
<TableRow key={label}>
<TableCell
component="th"
scope="row"
style={{
padding: "16px",
borderBottom:
index === 1 || index === 0
? "1px solid rgba(224, 224, 224, 1)"
: "none",
}}
>
{label}
</TableCell>
<TableCell
align="right"
style={{
padding: "10px",
borderBottom:
index === 1 || index === 0
? "1px solid rgba(224, 224, 224, 1)"
: "none",
}}
>
{/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */}
{renderTableCellContent(
label,
value,
onEditEmail,
onDisablePasskeys,
canDisableEmailMFA,
twoFactorEnabled,
setTwoFactorEnabled,
setDisable2FAOpen,
email2FAEnabled,
setEmail2FAToggleOpen,
)}
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
);
const renderTableCellContent = (
label: string,
value: string,
onEditEmail: () => void,
onDisablePasskeys: () => void,
canToggleEmailMFA: boolean,
twoFactorEnabled: boolean,
setTwoFactorEnabled: (enabled: boolean) => void,
setDisable2FAOpen: (open: boolean) => void,
email2FAEnabled: boolean,
setEmail2FAToggleOpen: (open: boolean) => void,
) => {
switch (label) {
case "Email":
return (
<Box
sx={{
display: "flex",
alignItems: "center",
justifyContent: "flex-end",
}}
>
<Typography>{value}</Typography>
<IconButton
edge="end"
aria-label="edit-email"
onClick={onEditEmail}
>
<EditIcon style={{ color: "black" }} />
</IconButton>
</Box>
);
case "Passkeys":
return value === "Enabled" ? (
<Button variant="outlined" onClick={onDisablePasskeys}>
Remove Passkey
</Button>
) : (
<Typography sx={{ width: "100%", paddingLeft: "1px" }}>
{value}
</Typography>
);
case "Two factor 2FA":
return (
<Box
sx={{
display: "flex",
alignItems: "center",
justifyContent: "right",
width: "100%",
paddingRight: "50px",
}}
>
<Typography sx={{ marginRight: "1px" }}>{value}</Typography>
{value === "Enabled" && (
<Switch
checked={twoFactorEnabled}
onChange={(e) => {
const isChecked = e.target.checked;
setTwoFactorEnabled(isChecked);
if (!isChecked) {
setDisable2FAOpen(true);
}
}}
sx={{
"& .MuiSwitch-switchBase.Mui-checked": {
color: "#00B33C",
"&:hover": {
backgroundColor:
"rgba(0, 179, 60, 0.08)",
},
},
"& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track":
{
backgroundColor: "#00B33C",
},
}}
/>
)}
</Box>
);
// If Expirty time (in format 30/1/2026, 11:12:53 am) is greatheer than current date, show it in bold green
case "Expiry time": {
const expiryTime = new Date(
Date.parse(
value.replace(
/(\d+)\/(\d+)\/(\d+), (\d+:\d+:\d+ \w+)/,
"$2/$1/$3 $4",
),
),
);
const currentTime = new Date();
return (
<Typography
sx={{
color: expiryTime > currentTime ? "#00B33C" : "red",
}}
>
{value}
</Typography>
);
}
case "Email MFA":
return (
<Box
sx={{
display: "flex",
alignItems: "center",
justifyContent: "right",
width: "100%",
paddingRight: "50px",
}}
>
<Typography sx={{ marginRight: "1px" }}>{value}</Typography>
{canToggleEmailMFA && (
<Switch
checked={email2FAEnabled}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
onChange={(_) => {
setEmail2FAToggleOpen(true);
}}
sx={{
"& .MuiSwitch-switchBase.Mui-checked": {
color: "#00B33C",
"&:hover": {
backgroundColor:
"rgba(0, 179, 60, 0.08)",
},
},
"& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track":
{
backgroundColor: "#00B33C",
},
}}
/>
)}
</Box>
);
default:
return <Typography>{value}</Typography>;
}
};
export default UserComponent;

View File

@@ -10,6 +10,15 @@
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.25.9":
version "7.26.2"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
dependencies:
"@babel/helper-validator-identifier" "^7.25.9"
js-tokens "^4.0.0"
picocolors "^1.0.0"
"@babel/code-frame@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz"
@@ -54,6 +63,17 @@
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
"@babel/generator@^7.25.9":
version "7.26.2"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f"
integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==
dependencies:
"@babel/parser" "^7.26.2"
"@babel/types" "^7.26.0"
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^3.0.2"
"@babel/helper-compilation-targets@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz"
@@ -85,6 +105,14 @@
dependencies:
"@babel/types" "^7.24.6"
"@babel/helper-module-imports@^7.16.7":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
dependencies:
"@babel/traverse" "^7.25.9"
"@babel/types" "^7.25.9"
"@babel/helper-module-imports@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz"
@@ -127,11 +155,21 @@
resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz"
integrity sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==
"@babel/helper-string-parser@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
"@babel/helper-validator-identifier@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz"
integrity sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==
"@babel/helper-validator-identifier@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
"@babel/helper-validator-option@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz"
@@ -160,6 +198,13 @@
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz"
integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==
"@babel/parser@^7.25.9", "@babel/parser@^7.26.2":
version "7.26.2"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11"
integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==
dependencies:
"@babel/types" "^7.26.0"
"@babel/plugin-transform-react-jsx-self@^7.24.5":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.6.tgz"
@@ -174,6 +219,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.6"
"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.9", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
version "7.26.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1"
integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==
dependencies:
regenerator-runtime "^0.14.0"
"@babel/template@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz"
@@ -183,6 +235,15 @@
"@babel/parser" "^7.24.6"
"@babel/types" "^7.24.6"
"@babel/template@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016"
integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==
dependencies:
"@babel/code-frame" "^7.25.9"
"@babel/parser" "^7.25.9"
"@babel/types" "^7.25.9"
"@babel/traverse@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz"
@@ -199,6 +260,19 @@
debug "^4.3.1"
globals "^11.1.0"
"@babel/traverse@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84"
integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==
dependencies:
"@babel/code-frame" "^7.25.9"
"@babel/generator" "^7.25.9"
"@babel/parser" "^7.25.9"
"@babel/template" "^7.25.9"
"@babel/types" "^7.25.9"
debug "^4.3.1"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.6":
version "7.24.6"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz"
@@ -208,6 +282,133 @@
"@babel/helper-validator-identifier" "^7.24.6"
to-fast-properties "^2.0.0"
"@babel/types@^7.25.9", "@babel/types@^7.26.0":
version "7.26.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff"
integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==
dependencies:
"@babel/helper-string-parser" "^7.25.9"
"@babel/helper-validator-identifier" "^7.25.9"
"@date-io/core@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@date-io/core/-/core-3.0.0.tgz#9fd2375383b5791b7211dfce3e576211f9ddce5e"
integrity sha512-S3j+IAQVBYNkQzchVVhX40eBkGDreBpScy9RXwTS5j2+k07+62pMVPisQ44Gq76Rqy5AOG/EZXCwBpY/jbemvA==
"@date-io/date-fns@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-3.0.0.tgz#b082daa73ab9f1f8be55fe99a529653f69a7275b"
integrity sha512-hsLAbsdP8LKfi7OQ729cXMWfmHQEq0hn3ysXfAAoc92j6j6sBq0s0tplnkWu6O4iBUpVCYRPGuNjQQhTaOu2AA==
dependencies:
"@date-io/core" "^3.0.0"
"@emotion/babel-plugin@^11.12.0":
version "11.12.0"
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz#7b43debb250c313101b3f885eba634f1d723fcc2"
integrity sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==
dependencies:
"@babel/helper-module-imports" "^7.16.7"
"@babel/runtime" "^7.18.3"
"@emotion/hash" "^0.9.2"
"@emotion/memoize" "^0.9.0"
"@emotion/serialize" "^1.2.0"
babel-plugin-macros "^3.1.0"
convert-source-map "^1.5.0"
escape-string-regexp "^4.0.0"
find-root "^1.1.0"
source-map "^0.5.7"
stylis "4.2.0"
"@emotion/cache@^11.11.0", "@emotion/cache@^11.13.0":
version "11.13.1"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7"
integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==
dependencies:
"@emotion/memoize" "^0.9.0"
"@emotion/sheet" "^1.4.0"
"@emotion/utils" "^1.4.0"
"@emotion/weak-memoize" "^0.4.0"
stylis "4.2.0"
"@emotion/hash@^0.9.2":
version "0.9.2"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b"
integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==
"@emotion/is-prop-valid@^1.3.0":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240"
integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==
dependencies:
"@emotion/memoize" "^0.9.0"
"@emotion/memoize@^0.9.0":
version "0.9.0"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102"
integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==
"@emotion/react@^11.11.4":
version "11.13.3"
resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.13.3.tgz#a69d0de2a23f5b48e0acf210416638010e4bd2e4"
integrity sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==
dependencies:
"@babel/runtime" "^7.18.3"
"@emotion/babel-plugin" "^11.12.0"
"@emotion/cache" "^11.13.0"
"@emotion/serialize" "^1.3.1"
"@emotion/use-insertion-effect-with-fallbacks" "^1.1.0"
"@emotion/utils" "^1.4.0"
"@emotion/weak-memoize" "^0.4.0"
hoist-non-react-statics "^3.3.1"
"@emotion/serialize@^1.2.0", "@emotion/serialize@^1.3.0", "@emotion/serialize@^1.3.1":
version "1.3.2"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.2.tgz#e1c1a2e90708d5d85d81ccaee2dfeb3cc0cccf7a"
integrity sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==
dependencies:
"@emotion/hash" "^0.9.2"
"@emotion/memoize" "^0.9.0"
"@emotion/unitless" "^0.10.0"
"@emotion/utils" "^1.4.1"
csstype "^3.0.2"
"@emotion/sheet@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c"
integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==
"@emotion/styled@^11.11.5":
version "11.13.0"
resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.13.0.tgz#633fd700db701472c7a5dbef54d6f9834e9fb190"
integrity sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==
dependencies:
"@babel/runtime" "^7.18.3"
"@emotion/babel-plugin" "^11.12.0"
"@emotion/is-prop-valid" "^1.3.0"
"@emotion/serialize" "^1.3.0"
"@emotion/use-insertion-effect-with-fallbacks" "^1.1.0"
"@emotion/utils" "^1.4.0"
"@emotion/unitless@^0.10.0":
version "0.10.0"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745"
integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==
"@emotion/use-insertion-effect-with-fallbacks@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz#1a818a0b2c481efba0cf34e5ab1e0cb2dcb9dfaf"
integrity sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==
"@emotion/utils@^1.4.0", "@emotion/utils@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.1.tgz#b3adbb43de12ee2149541c4f1337d2eb7774f0ad"
integrity sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==
"@emotion/weak-memoize@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6"
integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==
"@esbuild/aix-ppc64@0.20.2":
version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537"
@@ -370,6 +571,13 @@
"@floating-ui/core" "^1.0.0"
"@floating-ui/utils" "^0.2.0"
"@floating-ui/react-dom@^2.0.8", "@floating-ui/react-dom@^2.1.2":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31"
integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==
dependencies:
"@floating-ui/dom" "^1.0.0"
"@floating-ui/react-dom@^2.1.0":
version "2.1.0"
resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz"
@@ -386,11 +594,25 @@
"@floating-ui/utils" "^0.2.0"
tabbable "^6.0.0"
"@floating-ui/react@^0.26.23":
version "0.26.27"
resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.27.tgz#402f7b4b2702650662705fe9cbe0f1d5607846a1"
integrity sha512-jLP72x0Kr2CgY6eTYi/ra3VA9LOkTo4C+DUTrbFgFOExKy3omYVmwMjNKqxAHdsnyLS96BIDLcO2SlnsNf8KUQ==
dependencies:
"@floating-ui/react-dom" "^2.1.2"
"@floating-ui/utils" "^0.2.8"
tabbable "^6.0.0"
"@floating-ui/utils@^0.2.0":
version "0.2.2"
resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz"
integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==
"@floating-ui/utils@^0.2.8":
version "0.2.8"
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62"
integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==
"@humanwhocodes/config-array@^0.11.14":
version "0.11.14"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz"
@@ -442,6 +664,145 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@mui/base@5.0.0-beta.40":
version "5.0.0-beta.40"
resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40.tgz#1f8a782f1fbf3f84a961e954c8176b187de3dae2"
integrity sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==
dependencies:
"@babel/runtime" "^7.23.9"
"@floating-ui/react-dom" "^2.0.8"
"@mui/types" "^7.2.14"
"@mui/utils" "^5.15.14"
"@popperjs/core" "^2.11.8"
clsx "^2.1.0"
prop-types "^15.8.1"
"@mui/core-downloads-tracker@^5.16.7":
version "5.16.7"
resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz#182a325a520f7ebd75de051fceabfc0314cfd004"
integrity sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==
"@mui/icons-material@^5.16.0":
version "5.16.7"
resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.7.tgz#e27f901af792065efc9f3d75d74a66af7529a10a"
integrity sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==
dependencies:
"@babel/runtime" "^7.23.9"
"@mui/lab@^5.0.0-alpha.171":
version "5.0.0-alpha.173"
resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.173.tgz#a0f9696d93a765b48d69a7da5aaca0affa510ae8"
integrity sha512-Gt5zopIWwxDgGy/MXcp6GueD84xFFugFai4hYiXY0zowJpTVnIrTQCQXV004Q7rejJ7aaCntX9hpPJqCrioshA==
dependencies:
"@babel/runtime" "^7.23.9"
"@mui/base" "5.0.0-beta.40"
"@mui/system" "^5.16.5"
"@mui/types" "^7.2.15"
"@mui/utils" "^5.16.5"
clsx "^2.1.0"
prop-types "^15.8.1"
"@mui/material@^5.16.0":
version "5.16.7"
resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.7.tgz#6e814e2eefdaf065a769cecf549c3569e107a50b"
integrity sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==
dependencies:
"@babel/runtime" "^7.23.9"
"@mui/core-downloads-tracker" "^5.16.7"
"@mui/system" "^5.16.7"
"@mui/types" "^7.2.15"
"@mui/utils" "^5.16.6"
"@popperjs/core" "^2.11.8"
"@types/react-transition-group" "^4.4.10"
clsx "^2.1.0"
csstype "^3.1.3"
prop-types "^15.8.1"
react-is "^18.3.1"
react-transition-group "^4.4.5"
"@mui/private-theming@^5.16.6":
version "5.16.6"
resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.6.tgz#547671e7ae3f86b68d1289a0b90af04dfcc1c8c9"
integrity sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==
dependencies:
"@babel/runtime" "^7.23.9"
"@mui/utils" "^5.16.6"
prop-types "^15.8.1"
"@mui/styled-engine@^5.16.6":
version "5.16.6"
resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.6.tgz#60110c106dd482dfdb7e2aa94fd6490a0a3f8852"
integrity sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==
dependencies:
"@babel/runtime" "^7.23.9"
"@emotion/cache" "^11.11.0"
csstype "^3.1.3"
prop-types "^15.8.1"
"@mui/system@^5.16.5", "@mui/system@^5.16.7":
version "5.16.7"
resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.7.tgz#4583ca5bf3b38942e02c15a1e622ba869ac51393"
integrity sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==
dependencies:
"@babel/runtime" "^7.23.9"
"@mui/private-theming" "^5.16.6"
"@mui/styled-engine" "^5.16.6"
"@mui/types" "^7.2.15"
"@mui/utils" "^5.16.6"
clsx "^2.1.0"
csstype "^3.1.3"
prop-types "^15.8.1"
"@mui/types@^7.2.14", "@mui/types@^7.2.15", "@mui/types@^7.2.19":
version "7.2.19"
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.19.tgz#c941954dd24393fdce5f07830d44440cf4ab6c80"
integrity sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==
"@mui/utils@^5.15.14", "@mui/utils@^5.16.5", "@mui/utils@^5.16.6":
version "5.16.6"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.6.tgz#905875bbc58d3dcc24531c3314a6807aba22a711"
integrity sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==
dependencies:
"@babel/runtime" "^7.23.9"
"@mui/types" "^7.2.15"
"@types/prop-types" "^15.7.12"
clsx "^2.1.1"
prop-types "^15.8.1"
react-is "^18.3.1"
"@mui/utils@^5.16.6 || ^6.0.0":
version "6.1.7"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.1.7.tgz#0959d9772ae13c6ceac984a493e06aebb9087e71"
integrity sha512-Gr7cRZxBoZ0BIa3Xqf/2YaUrBLyNPJvXPQH3OsD9WMZukI/TutibbQBVqLYpgqJn8pKSjbD50Yq2auG0wI1xOw==
dependencies:
"@babel/runtime" "^7.26.0"
"@mui/types" "^7.2.19"
"@types/prop-types" "^15.7.13"
clsx "^2.1.1"
prop-types "^15.8.1"
react-is "^18.3.1"
"@mui/x-date-pickers@^7.9.0":
version "7.22.2"
resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.22.2.tgz#99ebf6ff3d5f926c8bceb43324c9d91022d79852"
integrity sha512-1KHSlIlnSoY3oHm820By8X344pIdGYqPvCCvfVHrEeeIQ/pHdxDD8tjZFWkFl4Jgm9oVFK90fMcqNZAzc+WaCw==
dependencies:
"@babel/runtime" "^7.25.7"
"@mui/utils" "^5.16.6 || ^6.0.0"
"@mui/x-internals" "7.21.0"
"@types/react-transition-group" "^4.4.11"
clsx "^2.1.1"
prop-types "^15.8.1"
react-transition-group "^4.4.5"
"@mui/x-internals@7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.21.0.tgz#daca984059015b27efdb47bb44dc7ff4a6816673"
integrity sha512-94YNyZ0BhK5Z+Tkr90RKf47IVCW8R/1MvdUhh6MCQg6sZa74jsX+x+gEZ4kzuCqOsuyTyxikeQ8vVuCIQiP7UQ==
dependencies:
"@babel/runtime" "^7.25.7"
"@mui/utils" "^5.16.6 || ^6.0.0"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@@ -468,6 +829,11 @@
resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz"
integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
"@popperjs/core@^2.11.8":
version "2.11.8"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
"@rollup/plugin-node-resolve@^15.2.3":
version "15.2.3"
resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz#e5e0b059bd85ca57489492f295ce88c2d4b0daf9"
@@ -607,11 +973,30 @@
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
"@types/parse-json@^4.0.0":
version "4.0.2"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
"@types/prop-types@*":
version "15.7.12"
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz"
integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
"@types/prop-types@^15.7.12", "@types/prop-types@^15.7.13":
version "15.7.13"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451"
integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==
"@types/react-datepicker@^6.2.0":
version "6.2.0"
resolved "https://registry.yarnpkg.com/@types/react-datepicker/-/react-datepicker-6.2.0.tgz#1c93c10d12d1d683eacf46a82e35b953cd0da117"
integrity sha512-+JtO4Fm97WLkJTH8j8/v3Ldh7JCNRwjMYjRaKh4KHH0M3jJoXtwiD3JBCsdlg3tsFIw9eQSqyAPeVDN2H2oM9Q==
dependencies:
"@floating-ui/react" "^0.26.2"
"@types/react" "*"
date-fns "^3.3.1"
"@types/react-dom@^18":
version "18.3.0"
resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz"
@@ -619,6 +1004,13 @@
dependencies:
"@types/react" "*"
"@types/react-transition-group@^4.4.10", "@types/react-transition-group@^4.4.11":
version "4.4.11"
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.11.tgz#d963253a611d757de01ebb241143b1017d5d63d5"
integrity sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==
dependencies:
"@types/react" "*"
"@types/react@*", "@types/react@^18":
version "18.3.3"
resolved "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz"
@@ -872,6 +1264,15 @@ available-typed-arrays@^1.0.7:
dependencies:
possible-typed-array-names "^1.0.0"
babel-plugin-macros@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
dependencies:
"@babel/runtime" "^7.12.5"
cosmiconfig "^7.0.0"
resolve "^1.19.0"
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
@@ -952,7 +1353,7 @@ chalk@^4.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
clsx@^2.1.0:
clsx@^2.1.0, clsx@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz"
integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
@@ -986,11 +1387,27 @@ concat-map@0.0.1:
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
convert-source-map@^1.5.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
convert-source-map@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
cosmiconfig@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
dependencies:
"@types/parse-json" "^4.0.0"
import-fresh "^3.2.1"
parse-json "^5.0.0"
path-type "^4.0.0"
yaml "^1.10.0"
cross-spawn@^7.0.2:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
@@ -1000,7 +1417,7 @@ cross-spawn@^7.0.2:
shebang-command "^2.0.0"
which "^2.0.1"
csstype@^3.0.2:
csstype@^3.0.2, csstype@^3.1.3:
version "3.1.3"
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
@@ -1103,11 +1520,26 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
dom-helpers@^5.0.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
dependencies:
"@babel/runtime" "^7.8.7"
csstype "^3.0.2"
electron-to-chromium@^1.4.668:
version "1.4.788"
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz"
integrity sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
dependencies:
is-arrayish "^0.2.1"
es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3:
version "1.23.3"
resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz"
@@ -1444,6 +1876,11 @@ fill-range@^7.1.1:
dependencies:
to-regex-range "^5.0.1"
find-root@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
find-up@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
@@ -1665,6 +2102,13 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
dependencies:
function-bind "^1.1.2"
hoist-non-react-statics@^3.3.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
dependencies:
react-is "^16.7.0"
ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1:
version "5.3.1"
resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz"
@@ -1713,6 +2157,11 @@ is-array-buffer@^3.0.4:
call-bind "^1.0.2"
get-intrinsic "^1.2.1"
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
is-async-function@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz"
@@ -1930,11 +2379,21 @@ jsesc@^2.5.1:
resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
jsesc@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
json-buffer@3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
@@ -1975,6 +2434,11 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
locate-path@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
@@ -2150,6 +2614,16 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
parse-json@^5.0.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
dependencies:
"@babel/code-frame" "^7.0.0"
error-ex "^1.3.1"
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
@@ -2222,7 +2696,7 @@ prettier@^3:
resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.0.tgz"
integrity sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==
prop-types@^15.7.2, prop-types@^15.8.1:
prop-types@^15.6.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -2241,16 +2715,15 @@ queue-microtask@^1.2.2:
resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
react-datepicker@^7.1.0:
version "7.1.0"
resolved "https://registry.npmjs.org/react-datepicker/-/react-datepicker-7.1.0.tgz"
integrity sha512-Z91n5ybhmzI+YChj1ZG7ntPPOmHR2Dh4jbIl+mNgKXKoxyzUQBh7M3eQaFOwrBCVdKy5vsj370/ocQlGu1qsGA==
react-datepicker@^7.3.0:
version "7.5.0"
resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-7.5.0.tgz#e7b1014a6dbd3b314839a5c57a6dacfbb16074e4"
integrity sha512-6MzeamV8cWSOcduwePHfGqY40acuGlS1cG//ePHT6bVbLxWyqngaStenfH03n1wbzOibFggF66kWaBTb1SbTtQ==
dependencies:
"@floating-ui/react" "^0.26.2"
clsx "^2.1.0"
date-fns "^3.3.1"
prop-types "^15.7.2"
react-onclickoutside "^6.13.0"
"@floating-ui/react" "^0.26.23"
clsx "^2.1.1"
date-fns "^3.6.0"
prop-types "^15.8.1"
react-dom@^18:
version "18.3.1"
@@ -2260,15 +2733,15 @@ react-dom@^18:
loose-envify "^1.1.0"
scheduler "^0.23.2"
react-is@^16.13.1:
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-onclickoutside@^6.13.0:
version "6.13.1"
resolved "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz"
integrity sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w==
react-is@^18.3.1:
version "18.3.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
react-refresh@^0.14.2:
version "0.14.2"
@@ -2282,6 +2755,16 @@ react-toastify@^10.0.5:
dependencies:
clsx "^2.1.0"
react-transition-group@^4.4.5:
version "4.4.5"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
dependencies:
"@babel/runtime" "^7.5.5"
dom-helpers "^5.0.1"
loose-envify "^1.4.0"
prop-types "^15.6.2"
react@^18:
version "18.3.1"
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
@@ -2302,6 +2785,11 @@ reflect.getprototypeof@^1.0.4:
globalthis "^1.0.3"
which-builtin-type "^1.1.3"
regenerator-runtime@^0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
regexp.prototype.flags@^1.5.2:
version "1.5.2"
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz"
@@ -2317,7 +2805,7 @@ resolve-from@^4.0.0:
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
resolve@^1.22.1:
resolve@^1.19.0, resolve@^1.22.1:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -2493,6 +2981,11 @@ source-map-js@^1.2.0:
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
source-map@^0.5.7:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
string.prototype.matchall@^4.0.11:
version "4.0.11"
resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz"
@@ -2551,6 +3044,11 @@ strip-json-comments@^3.1.1:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
stylis@4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
@@ -2779,6 +3277,11 @@ yallist@^3.0.2:
resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yaml@^1.10.0:
version "1.10.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"

View File

@@ -0,0 +1,5 @@
{
"name": "data-puller",
"version": "0.0.0",
"private": true
}

View File

@@ -0,0 +1,30 @@
/**
* Proxy requests for downloading files from object storage.
*
* Used by museum when replicating.
*/
export default {
async fetch(request: Request) {
switch (request.method) {
case "GET":
return handleGET(request);
default:
console.log(`Unsupported HTTP method ${request.method}`);
return new Response(null, { status: 405 });
}
},
} satisfies ExportedHandler;
const handleGET = async (request: Request) => {
const url = new URL(request.url);
// Random bots keep trying to pentest causing noise in the logs. If the
// request doesn't have a src, we can just safely ignore it.
const src = url.searchParams.get("src");
if (!src) return new Response(null, { status: 400 });
const source = atob(src);
return fetch(source);
};

View File

@@ -0,0 +1 @@
{ "extends": "../tsconfig.base.json", "include": ["src"] }

Some files were not shown because too many files have changed in this diff Show More