Compare commits
234 Commits
photos-v1.
...
smart-albu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c15c0578e | ||
|
|
78055a25d0 | ||
|
|
b050f683c8 | ||
|
|
9141db8d47 | ||
|
|
dd08ca82fe | ||
|
|
8d71a6bb58 | ||
|
|
c583fa4742 | ||
|
|
5a31d81d28 | ||
|
|
9f926383a5 | ||
|
|
ec0d3c4266 | ||
|
|
55cc92e57d | ||
|
|
3f71d491e9 | ||
|
|
304daf0b09 | ||
|
|
e1281657ba | ||
|
|
595871f571 | ||
|
|
d31127c2e3 | ||
|
|
09d7b82c08 | ||
|
|
88c9f4943b | ||
|
|
cacc7dc85a | ||
|
|
24a30709cd | ||
|
|
ae1e435d77 | ||
|
|
3addc83c14 | ||
|
|
5b47f69d93 | ||
|
|
1c02064211 | ||
|
|
ba01e2d181 | ||
|
|
fdfc155add | ||
|
|
3c5a29b0ab | ||
|
|
8e4e06af73 | ||
|
|
439b4fdeec | ||
|
|
fa65a993c0 | ||
|
|
32efdf464e | ||
|
|
f76fa34e5b | ||
|
|
868c45baa4 | ||
|
|
fa1838c82e | ||
|
|
6b5db8d85b | ||
|
|
9c071c0dab | ||
|
|
73b87950de | ||
|
|
ee0c7472a1 | ||
|
|
ba56908d2d | ||
|
|
b5d725e139 | ||
|
|
5750d72c5a | ||
|
|
00a430927f | ||
|
|
ab57a1f8fe | ||
|
|
cfdeb475ef | ||
|
|
1f0f240f97 | ||
|
|
2ff5058a3e | ||
|
|
641dfdd11e | ||
|
|
054ad8b480 | ||
|
|
4ff77067dc | ||
|
|
437b3d028a | ||
|
|
418d20b336 | ||
|
|
8afc4bb0cb | ||
|
|
ecd3ce850f | ||
|
|
bc61727e8b | ||
|
|
32f987e551 | ||
|
|
3596d0e42d | ||
|
|
b3827dd812 | ||
|
|
087ba629e0 | ||
|
|
e0c647f583 | ||
|
|
e08f97e543 | ||
|
|
efa82b7fb7 | ||
|
|
4d9b6ecbc6 | ||
|
|
7c325065a5 | ||
|
|
d7f019c4f5 | ||
|
|
4a346c47d1 | ||
|
|
dee38e3ed8 | ||
|
|
69237fa659 | ||
|
|
fb8a22d370 | ||
|
|
8a177bbe2c | ||
|
|
943a524ba9 | ||
|
|
63746523e2 | ||
|
|
b5868468bd | ||
|
|
aa48543a98 | ||
|
|
164da10772 | ||
|
|
291368f7ba | ||
|
|
b6d797681d | ||
|
|
d67dc4b76f | ||
|
|
d78fa3f27d | ||
|
|
e30b8024e2 | ||
|
|
c95d3b8c00 | ||
|
|
ec532ad2ac | ||
|
|
479f2188b6 | ||
|
|
c7d96482cb | ||
|
|
67e1a64e7f | ||
|
|
49a8016786 | ||
|
|
39558a27c9 | ||
|
|
f7d4273c1d | ||
|
|
3369e14f69 | ||
|
|
9b28996d3f | ||
|
|
fd98243394 | ||
|
|
9cd6784837 | ||
|
|
127c480855 | ||
|
|
4f1db7f001 | ||
|
|
ab96fdb379 | ||
|
|
90650995f7 | ||
|
|
f83cd57b6f | ||
|
|
d1717ef308 | ||
|
|
08a43f5d64 | ||
|
|
f0273def2f | ||
|
|
bcb389c56d | ||
|
|
689edebec4 | ||
|
|
d4e2317816 | ||
|
|
2040044994 | ||
|
|
a3ee242faa | ||
|
|
78f2bb0d7d | ||
|
|
a97658b67d | ||
|
|
b6dafd5a17 | ||
|
|
a6e78ab732 | ||
|
|
e3ab4eda15 | ||
|
|
de8fa9f9e9 | ||
|
|
b723b7daf0 | ||
|
|
14bc47c055 | ||
|
|
99a8f5152a | ||
|
|
b68fda70ef | ||
|
|
987c02fdac | ||
|
|
0f8ea1e814 | ||
|
|
27af2c3bbc | ||
|
|
96c2270062 | ||
|
|
e2e0436830 | ||
|
|
dea67250c8 | ||
|
|
781583c1db | ||
|
|
06d3f679f1 | ||
|
|
a809ab58b3 | ||
|
|
f06314fb13 | ||
|
|
dc2246aa47 | ||
|
|
9696409b01 | ||
|
|
adb1c96ce6 | ||
|
|
c413111768 | ||
|
|
6d6cd91b22 | ||
|
|
b8d69e79f0 | ||
|
|
7f3311ad36 | ||
|
|
18dba3f629 | ||
|
|
22e85b0364 | ||
|
|
26fbe84d9c | ||
|
|
82cc0559b4 | ||
|
|
1c780c4b02 | ||
|
|
86f14f985b | ||
|
|
fa6694e2f9 | ||
|
|
3708a347f5 | ||
|
|
35f0251064 | ||
|
|
aa60c3c71a | ||
|
|
d2c1437210 | ||
|
|
e31768afe9 | ||
|
|
90c1638e7d | ||
|
|
8a4b038e86 | ||
|
|
99d84a1154 | ||
|
|
126a96326f | ||
|
|
a3dbaf7015 | ||
|
|
b7ead2004a | ||
|
|
3b7d13aec0 | ||
|
|
87fad99863 | ||
|
|
d2228ccd58 | ||
|
|
9233149e25 | ||
|
|
0e66632337 | ||
|
|
b092d2e250 | ||
|
|
e259b06d63 | ||
|
|
2920f77c75 | ||
|
|
884e805f46 | ||
|
|
9f727bb95d | ||
|
|
848771dcaa | ||
|
|
97b3a3cb57 | ||
|
|
bd42a4d1f6 | ||
|
|
22e0cd2168 | ||
|
|
0662baac73 | ||
|
|
ef3c561cf1 | ||
|
|
8f55749607 | ||
|
|
384a2f2c0a | ||
|
|
03c903fc5b | ||
|
|
d7d5e85618 | ||
|
|
f04b62e540 | ||
|
|
9db925c3a6 | ||
|
|
aeac72e35c | ||
|
|
85bea417a1 | ||
|
|
cb282aa56e | ||
|
|
6f07399b5a | ||
|
|
8524742c92 | ||
|
|
9937b9f096 | ||
|
|
69fcdcf14b | ||
|
|
9125090a3d | ||
|
|
4a552fbcb4 | ||
|
|
85ef085084 | ||
|
|
f1d128f6b0 | ||
|
|
c925ed2117 | ||
|
|
142a5f9661 | ||
|
|
ae0c83b1aa | ||
|
|
8f1ee2ef15 | ||
|
|
f1d978fbf7 | ||
|
|
4604280ef8 | ||
|
|
18ab4060b2 | ||
|
|
9a4d465672 | ||
|
|
7ea9483cca | ||
|
|
d9add4f827 | ||
|
|
3c19c00a70 | ||
|
|
12c19d1ed1 | ||
|
|
c757b837f1 | ||
|
|
a9f1c0dbd4 | ||
|
|
896d77a83e | ||
|
|
b1210e1d15 | ||
|
|
127df30242 | ||
|
|
c0c17af51a | ||
|
|
d92ec2276e | ||
|
|
1f99727ab9 | ||
|
|
85784920a9 | ||
|
|
d7b3af063b | ||
|
|
f66304815e | ||
|
|
17ac627ddd | ||
|
|
baa3d49d4b | ||
|
|
d2c2062256 | ||
|
|
c646909765 | ||
|
|
8b4f03b256 | ||
|
|
976bd0134c | ||
|
|
8a785aac8f | ||
|
|
452812af11 | ||
|
|
44fb8fec1a | ||
|
|
1d8fc7aba8 | ||
|
|
654db76175 | ||
|
|
364170f38d | ||
|
|
0cd7c92672 | ||
|
|
962aaa1b7a | ||
|
|
6ec0c550a3 | ||
|
|
b67fcdb9ed | ||
|
|
2f4c3c7777 | ||
|
|
cb84164466 | ||
|
|
7b6aed426d | ||
|
|
81c539979d | ||
|
|
3cffd969b4 | ||
|
|
fbb15adf11 | ||
|
|
3efd36ab7b | ||
|
|
11cb355e98 | ||
|
|
caadca9a48 | ||
|
|
0a50e33023 | ||
|
|
5eef2a5816 | ||
|
|
fe4bf5c217 | ||
|
|
912fc72600 |
27
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,39 +1,22 @@
|
||||
name: Report a bug
|
||||
description: For regressions only (things that were working earlier)
|
||||
description: Things that were working earlier but don't anymore
|
||||
labels: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Before opening a new issue, **please** ensure
|
||||
1. You are on the latest version,
|
||||
2. You've searched for existing issues,
|
||||
3. It was working earlier (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/enhancements))
|
||||
4. It is not about self hosting (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/q-a))
|
||||
**Checklist**
|
||||
1. You've searched existing [issues](https://github.com/search?q=repo%3Aente-io%2Fente+&type=issues) and [discussions](https://github.com/search?q=repo%3Aente-io%2Fente+&type=discussions)
|
||||
2. It was working earlier (otherwise use [enhancements](https://github.com/ente-io/ente/discussions/categories/enhancements))
|
||||
3. It is not about self hosting (for those use [this](https://github.com/ente-io/ente/discussions/categories/q-a))
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: >
|
||||
Describe the bug and steps to reproduce the behaviour, and how it
|
||||
differs from the previously working behaviour.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Version
|
||||
description: The version can be seen at the bottom of settings.
|
||||
placeholder: e.g. v1.2.3
|
||||
- type: input
|
||||
attributes:
|
||||
label: Last working version
|
||||
description: >
|
||||
The version where things were last known to be working. It is fine
|
||||
if you don't remember the exact version (mention roughly then),
|
||||
but **if there just isn't a last working version, then please file
|
||||
it as an
|
||||
[enhancement](https://github.com/ente-io/ente/discussions/categories/enhancements))**
|
||||
(where the community upvotes can be used to help prioritize).
|
||||
placeholder: e.g. v1.2.3
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: What product are you using?
|
||||
|
||||
2
.github/workflows/auth-internal-release.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
2
.github/workflows/auth-lint.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
- ".github/workflows/auth-lint.yml"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
4
.github/workflows/auth-release.yml
vendored
@@ -29,7 +29,7 @@ on:
|
||||
- "auth-v*"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -98,7 +98,7 @@ jobs:
|
||||
|
||||
- name: Install appimagetool
|
||||
run: |
|
||||
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
wget -O appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
chmod +x appimagetool
|
||||
mv appimagetool /usr/local/bin/
|
||||
|
||||
|
||||
2
.github/workflows/auth-win-sign.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
@@ -4,7 +4,7 @@ on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
RUST_VERSION: "1.85.1"
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -4,7 +4,7 @@ on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
2
.github/workflows/mobile-lint.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
- ".github/workflows/mobile-lint.yml"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
2
.github/workflows/mobile-release.yml
vendored
@@ -9,7 +9,7 @@ on:
|
||||
- "photos-v*"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.29.3"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
10
.github/workflows/web-deploy.yml
vendored
@@ -93,3 +93,13 @@ jobs:
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/payments web/apps/payments/dist
|
||||
|
||||
- name: Build locker
|
||||
run: yarn build:locker
|
||||
|
||||
- name: Publish locker
|
||||
uses: cloudflare/wrangler-action@v3
|
||||
with:
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/locker web/apps/locker/out
|
||||
|
||||
@@ -1,54 +1,42 @@
|
||||
# Contributing
|
||||
|
||||
First and foremost, thank you for your interest in contributing to Ente 🙏
|
||||
|
||||
There are many ways to contribute, and most of them don't require writing code.
|
||||
|
||||
* [Spread the word](#spread-the-word)
|
||||
* [Engage with the community](#engage-with-the-community)
|
||||
* [Translate](#translate)
|
||||
* [Document](#document)
|
||||
|
||||
- [Spread the word](#spread-the-word)
|
||||
- [Engage with the community](#engage-with-the-community)
|
||||
- [Translate](#translate)
|
||||
- [Document](#document)
|
||||
|
||||
## Spread the word
|
||||
|
||||
This is perhaps the most impactful contribution you can make. [Spread the
|
||||
word](https://help.ente.io/photos/features/referral-program/). Online on your
|
||||
favorite social media channels. Offline to your friends and family who are
|
||||
looking for a privacy-friendly alternative to big tech.
|
||||
**This is the most impactful contribution you can make**.
|
||||
|
||||
[Spread the word](https://help.ente.io/photos/features/referral-program/). Online on your favorite social media channels. Offline to your friends and family who are looking for a privacy-friendly alternative to big tech.
|
||||
|
||||
## Engage with the community
|
||||
|
||||
Just hang around, enjoy the vibe. Answer someone's query on our
|
||||
[Discord](https://discord.gg/z2YVKkycX3), or pile on in the sporadic #off-topic
|
||||
rants there. Chuckle (or wince!) at our [Twitter](https://twitter.com/enteio)
|
||||
memes. Suggest a new feature in our [Github
|
||||
Discussions](https://github.com/ente-io/ente/discussions/new?category=enhancements),
|
||||
or upvote the existing ones that you feel we should focus on first. Provide your
|
||||
opinion on existing threads.
|
||||
Just hang around, enjoy the vibe. The Ente community — the people who are building Ente, and the people who are using Ente — hang out at various places depending on their proclivity:
|
||||
|
||||
These might seem like small things, but it provides us energy. Knowing that
|
||||
there is a community of people who care for what we are building.
|
||||
- [Discord](https://discord.ente.io)
|
||||
- [Mastodon](https://fosstodon.org/@ente)
|
||||
- [X / Twitter](https://twitter.com/enteio)
|
||||
- [Github Discussions](https://github.com/ente-io/ente/discussions)
|
||||
|
||||
Just being around might seem a small thing, but it provides us energy. Knowing that there is a community of people who care for what we are building, **who want us to do better**.
|
||||
|
||||
## Translate
|
||||
|
||||
If you're interested in helping out with translation, please visit our Crowdin
|
||||
projects to get started:
|
||||
|
||||
| Project | |
|
||||
| ------------- | ------------- |
|
||||
| [Auth](https://crowdin.com/project/ente-authenticator-app) | [](https://crowdin.com/project/ente-authenticator-app) |
|
||||
| [Photos](https://crowdin.com/project/ente-photos-app) | [](https://crowdin.com/project/ente-photos-app) |
|
||||
| [Photos Web / Desktop](https://crowdin.com/project/ente-photos-web) | [](https://crowdin.com/project/ente-photos-web) |
|
||||
Visit our Crowdin projects to help with translations:
|
||||
|
||||
| Project | |
|
||||
| ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| [Auth](https://crowdin.com/project/ente-authenticator-app) | [](https://crowdin.com/project/ente-authenticator-app) |
|
||||
| [Photos](https://crowdin.com/project/ente-photos-app) | [](https://crowdin.com/project/ente-photos-app) |
|
||||
| [Photos Web / Desktop](https://crowdin.com/project/ente-photos-web) | [](https://crowdin.com/project/ente-photos-web) |
|
||||
|
||||
If your language is not listed for translation, please [create a GitHub
|
||||
issue](https://github.com/ente-io/ente/issues/new?title=Request+for+New+Language+Translation&body=Language+name%3A+%0AProject%3A+auth%2Fphotos%2Fboth)
|
||||
to have it added. It is okay to have partial translations. Once ~90% of the
|
||||
strings in a language get translated, we will start surfacing it in the apps.
|
||||
|
||||
Thank you for your support.
|
||||
|
||||
## Document
|
||||
|
||||
The help guides and FAQs for users of Ente products are also open source, and
|
||||
@@ -60,25 +48,9 @@ See [docs/](docs/README.md) for how to edit these documents.
|
||||
|
||||
## Code contributions
|
||||
|
||||
Code is a small aspect of community, and the ways mentioned above are more
|
||||
important in helping us. But if you'd _really_ like to contribute code, it is
|
||||
best to start small. Consider some well-scoped changes, say like adding more
|
||||
[custom icons to auth](auth/docs/adding-icons.md).
|
||||
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](auth/docs/adding-icons.md), or fixing a specific bug.
|
||||
|
||||
Each of the individual product/platform specific directories in this repository
|
||||
have instructions on setting up a dev environment.
|
||||
|
||||
For anything beyond trivial bug fixes, please use
|
||||
[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.
|
||||
Code that changes the behaviour of the product might not get merged, at least not initially. The PR can serve as a discussion bed, but you might find it easier to just start a discussion instead, or post your perspective in the (likely) existing thread about the behaviour change or new feature you wish for.
|
||||
|
||||
## Leave a review or star
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ This page outlines the key features available in Ente Auth.
|
||||
Ente Auth supports the icon pack provided by
|
||||
[simple-icons](https://github.com/simple-icons/simple-icons). If an icon you
|
||||
need is missing, please refer to the
|
||||
[docs/adding-icons](https://github.com/ente-io/ente/blob/main/auth/docs/adding-icons.md)
|
||||
[docs/adding-icons](https://github.com/ente-io/ente/blob/main/mobile/apps/auth/docs/adding-icons.md)
|
||||
guide for instructions on how to contribute.
|
||||
|
||||
### Search
|
||||
@@ -136,4 +136,4 @@ Easily add or share entries using QR codes:
|
||||
right-click (desktop) a code and select "QR". This allows you to easily share
|
||||
the complete entry (including the secret) with others by letting them scan the
|
||||
displayed QR code. This can also be used to easily add the same entry to
|
||||
another authenticatior app or service.
|
||||
another authenticator app or service.
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"flutter": "3.24.3"
|
||||
"flutter": "3.29.3"
|
||||
}
|
||||
3
mobile/apps/auth/.gitignore
vendored
@@ -44,4 +44,5 @@ android/key.properties
|
||||
dist/
|
||||
|
||||
# FVM Version Cache
|
||||
.fvm/
|
||||
.fvm/
|
||||
lib/l10n/arb/*.dart
|
||||
@@ -44,7 +44,7 @@ or managing your secrets, please use our mobile or desktop app.
|
||||
|
||||
## 🧑💻 Build from source
|
||||
|
||||
1. [Install Flutter](https://flutter.dev/docs/get-started/install)
|
||||
1. [Install Flutter v3.29.3](https://flutter.dev/docs/get-started/install).
|
||||
|
||||
2. Pull in all submodules with `git submodule update --init --recursive`
|
||||
|
||||
@@ -73,7 +73,7 @@ If the code you're working needs to modify user facing strings, see
|
||||
## 🔩 Architecture
|
||||
|
||||
The architecture that powers end-to-end encrypted storage and sync of your
|
||||
tokens has been documented [here](../architecture/README.md).
|
||||
tokens has been documented [here](architecture/README.md).
|
||||
|
||||
## 🌍 Translate
|
||||
|
||||
|
||||
@@ -71,6 +71,9 @@
|
||||
],
|
||||
"hex": "fd4b2d"
|
||||
},
|
||||
{
|
||||
"title": "availity"
|
||||
},
|
||||
{
|
||||
"title": "AzurHosts",
|
||||
"slug": "azurhosts",
|
||||
@@ -121,6 +124,13 @@
|
||||
{
|
||||
"title": "Belo"
|
||||
},
|
||||
{
|
||||
"title": "bestbuy",
|
||||
"altNames": [
|
||||
"Best Buy",
|
||||
"bestbuy.com"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Bethesda",
|
||||
"altNames": [
|
||||
@@ -292,6 +302,25 @@
|
||||
{
|
||||
"title": "CoinDCX"
|
||||
},
|
||||
{
|
||||
"title": "colorado",
|
||||
"altNames": [
|
||||
"Colorado.gov",
|
||||
"Colorado Gov",
|
||||
"Colorado Government",
|
||||
"Colorado Government Portal",
|
||||
"Colorado COVES Death Certificates",
|
||||
"Colorado COVES",
|
||||
"Colorado Official State Web Portal",
|
||||
"Colorado State Web Portal",
|
||||
"Colorado State Portal",
|
||||
"Colorado Web Portal",
|
||||
"Colorado Portal",
|
||||
"Colorado State",
|
||||
"Colorado PEAK",
|
||||
"myColorado"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "ConfigCat"
|
||||
},
|
||||
@@ -403,6 +432,13 @@
|
||||
"Murena"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "emeritihealth",
|
||||
"altNames": [
|
||||
"Emeriti Health",
|
||||
"Emeriti Retirement Health",
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "eneba"
|
||||
},
|
||||
@@ -706,6 +742,14 @@
|
||||
{
|
||||
"title": "Letterboxd"
|
||||
},
|
||||
{
|
||||
"title": "lincolnfinancial",
|
||||
"altNames": [
|
||||
"Lincoln Financial",
|
||||
"Lincoln Financial Group",
|
||||
"LFG"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "LinkedIn",
|
||||
"slug": "linkedin"
|
||||
@@ -739,6 +783,10 @@
|
||||
"lu.ma"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "MangaDex",
|
||||
"slug": "mangadex"
|
||||
},
|
||||
{
|
||||
"title": "Marketplace.tf",
|
||||
"slug": "marketplacedottf"
|
||||
@@ -838,6 +886,9 @@
|
||||
"title": "Name.com",
|
||||
"slug": "name_com"
|
||||
},
|
||||
{
|
||||
"title": "nasdaq"
|
||||
},
|
||||
{
|
||||
"title": "Nextcloud",
|
||||
"slug": "nextcloud"
|
||||
@@ -922,6 +973,9 @@
|
||||
{
|
||||
"title": "NuCommunity"
|
||||
},
|
||||
{
|
||||
"title": "numerai"
|
||||
},
|
||||
{
|
||||
"title": "NVIDIA"
|
||||
},
|
||||
@@ -952,6 +1006,10 @@
|
||||
"title": "Oracle Cloud",
|
||||
"slug": "oracle_cloud"
|
||||
},
|
||||
{
|
||||
"title": "Pangolin",
|
||||
"slug": "pangolin"
|
||||
},
|
||||
{
|
||||
"title": "Parqet",
|
||||
"slug": "parqet"
|
||||
@@ -1300,6 +1358,10 @@
|
||||
"title": "Termius",
|
||||
"hex": "858585"
|
||||
},
|
||||
{
|
||||
"title": "Temu",
|
||||
"slug": "temu"
|
||||
},
|
||||
{
|
||||
"title": "tianyiyun",
|
||||
"altNames": [
|
||||
@@ -1366,6 +1428,16 @@
|
||||
"title": "Ubuntu One",
|
||||
"slug": "ubuntu_one"
|
||||
},
|
||||
{
|
||||
"title": "unitedhealthgroup",
|
||||
"altNames": [
|
||||
"Unitedhealth Group",
|
||||
"United Healthgroup",
|
||||
"UHG",
|
||||
"uhg.com",
|
||||
"unitedhealthgroup.com"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Unity",
|
||||
"hex": "858585"
|
||||
@@ -1511,6 +1583,10 @@
|
||||
},
|
||||
{
|
||||
"title": "Zitadel"
|
||||
},
|
||||
{
|
||||
"title": "Co-Wheels",
|
||||
"slug": "cowheels"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
10
mobile/apps/auth/assets/custom-icons/icons/availity.svg
Normal file
|
After Width: | Height: | Size: 15 KiB |
1
mobile/apps/auth/assets/custom-icons/icons/bestbuy.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 638 638"><defs><style>.cls-1{fill:#104ab8;}.cls-1,.cls-2,.cls-3,.cls-4{fill-rule:evenodd;}.cls-2{fill:#fff;}.cls-3{fill:#ffed31;}.cls-4{fill:#1c252c;}</style></defs><title>Best Buy Logo Vector</title><g id="logo-en"><polygon class="cls-1" points="0 0 638 0 638 638 0 638 0 0 0 0"/><path class="cls-2" d="M232,347.26V482.49h70.8c27.87,0,53.62-9.78,53.62-38.51,0-19.42-14-28.29-29.38-32.93,9.37-3.76,20-11.66,20-28.23,0-21.2-21-35.56-49.35-35.56Zm43.37,31.5h15.95c6.49,0,11.44,5.08,11.44,10.24,0,4.8-5.14,9.93-11.44,9.93H275.41V378.76Zm0,48.23h21c7.35,0,13.52,5.59,13.52,12,0,6.78-5.77,12.4-14.79,12.4H275.41V427Z" transform="translate(-181 -181)"/><path class="cls-2" d="M267.12,497.24V632.46h70.8c27.87,0,53.62-9.78,53.62-38.51,0-19.42-14-28.29-29.38-32.93,9.38-3.76,20-11.66,20-28.22,0-21.2-21-35.56-49.35-35.56Zm43.37,31.49h15.95c6.49,0,11.44,5.08,11.44,10.25,0,4.79-5.14,9.92-11.44,9.92H310.49V528.73Zm0,48.24h21.05c7.35,0,13.52,5.58,13.52,12,0,6.77-5.77,12.4-14.79,12.4H310.49V577Z" transform="translate(-181 -181)"/><polygon class="cls-2" points="178.87 301.47 178.87 166.25 287.94 166.25 287.94 198.9 222.11 198.9 222.11 216.64 275.56 216.64 275.56 247.25 222.11 247.25 222.11 268.94 287.94 268.94 287.94 301.47 178.87 301.47 178.87 301.47"/><path class="cls-2" d="M528,486.34c30.7,0,55.26-17.51,55.26-45.89,0-45.8-59.58-38.75-59.58-53,0-5.51,5.79-8.43,11.73-8.43,10.24,0,17.64,6.74,17.64,6.74l25.63-24.41c-10.25-9.75-26.44-18-48.26-18-32.75,0-54.19,19.45-54.19,42.9,0,46.38,58.73,39.65,58.73,54.2,0,5.11-4.91,10.24-13.81,10.24-10.11,0-18.12-6.1-24.35-11.28L471,464c10.38,10.12,27,22.32,57,22.32Z" transform="translate(-181 -181)"/><polygon class="cls-2" points="435.66 301.47 435.66 198.78 399.94 198.78 399.94 166.25 514.75 166.25 514.75 198.78 479.04 198.78 479.04 301.47 435.66 301.47 435.66 301.47"/><path class="cls-2" d="M393,497.14h43.25v81c0,8.22,8.19,15.8,16.72,15.8,8.05,0,16.19-6.84,16.19-16.23V497.14h43.12v80c0,31.76-26.36,57.09-60.45,57.09-34.28,0-58.83-27.57-58.83-58.82V497.14Z" transform="translate(-181 -181)"/><polygon class="cls-2" points="384.63 451.37 384.63 403.05 333.81 316.14 377.56 316.14 406.32 362.7 435.18 316.14 479.04 316.14 428.01 403.54 428.01 451.37 384.63 451.37 384.63 451.37"/><polygon class="cls-3" points="479.04 390.15 453.52 415.66 453.52 450.11 479.04 475.62 586.96 475.62 586.96 390.15 479.04 390.15 479.04 390.15"/><path class="cls-4" d="M655.85,613.87a5.75,5.75,0,1,1-5.75-5.74,5.74,5.74,0,0,1,5.75,5.74Z" transform="translate(-181 -181)"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
16
mobile/apps/auth/assets/custom-icons/icons/colorado.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="254" height="197">
|
||||
<path d="M0 0 C83.82 0 167.64 0 254 0 C254 65.01 254 130.02 254 197 C170.18 197 86.36 197 0 197 C0 131.99 0 66.98 0 0 Z " fill="#255E39" transform="translate(0,0)"/>
|
||||
<path d="M0 0 C83.82 0 167.64 0 254 0 C254 20.13 254 40.26 254 61 C252 58 252 58 250.44140625 55.1015625 C245.56357778 46.07605867 239.90237971 38.57068879 233 31 C232.40574219 30.32324219 231.81148437 29.64648438 231.19921875 28.94921875 C220.24437377 17.12451014 203.62450839 8.5338504 188 5 C186.79472656 4.72285156 185.58945313 4.44570312 184.34765625 4.16015625 C158.77417322 -1.25753788 132.93293113 2.2138374 110.6875 16.3125 C104.6016815 20.31637252 99.20467262 24.91572017 94 30 C92.94425781 31.01513672 92.94425781 31.01513672 91.8671875 32.05078125 C88.51106627 35.20766805 88.51106627 35.20766805 86 39 C81.91471475 37.63823825 81.46098573 35.78559446 79.3828125 32.05859375 C79.04377899 31.45749283 78.70474548 30.85639191 78.35543823 30.23707581 C77.26990008 28.30862811 76.19708095 26.37345578 75.125 24.4375 C73.71411291 21.91357977 72.29846937 19.39234086 70.8828125 16.87109375 C70.54493713 16.26711761 70.20706177 15.66314148 69.85894775 15.04086304 C67.36815994 10.6040756 64.75182831 6.27882324 62 2 C59.33448576 4.40817141 57.69828306 6.99238148 55.91796875 10.1015625 C55.32242188 11.13708252 54.726875 12.17260254 54.11328125 13.23950195 C53.47777344 14.35671631 52.84226563 15.47393066 52.1875 16.625 C51.52109934 17.78945891 50.85442872 18.95376337 50.1875 20.11791992 C40.93068749 36.30218373 31.75265124 52.53667981 23 69 C27.95 68.01 32.9 67.02 38 66 C35.92604704 72.67301098 33.33060795 78.79820286 30.25 85.0625 C29.27859712 87.06444928 28.30863363 89.06709742 27.33984375 91.0703125 C26.54876221 92.70468262 26.54876221 92.70468262 25.74169922 94.37207031 C22.3730026 101.36581172 19.10119743 108.40590787 15.8125 115.4375 C15.13382358 116.88746733 14.45511339 118.33741885 13.77636719 119.78735352 C12.18329197 123.1911238 10.59131013 126.59540409 9 130 C12.34653694 130 15.42039041 128.66450025 18.58984375 127.65625 C21 127 21 127 24 127 C22.01427175 133.18398243 19.7878242 139.22422353 17.34765625 145.2421875 C17.00625107 146.09120636 16.66484589 146.94022522 16.31309509 147.81497192 C15.23207037 150.50266587 14.14761226 153.188954 13.0625 155.875 C6.77912222 171.34098251 6.77912222 171.34098251 1 187 C2.11632812 186.61328125 3.23265625 186.2265625 4.3828125 185.828125 C33.68892175 175.93751189 66.60784235 172.70374295 97 180 C97.66676758 180.1551709 98.33353516 180.3103418 99.02050781 180.47021484 C108.69943089 182.7670275 118.15151684 185.81999107 127.46875 189.29296875 C128.6546875 189.73253906 129.840625 190.17210937 131.0625 190.625 C132.12597656 191.02976563 133.18945312 191.43453125 134.28515625 191.8515625 C143.57746226 194.72426278 152.62428287 195.36040388 162.3125 195.3125 C164.10361206 195.30404053 164.10361206 195.30404053 165.9309082 195.29541016 C174.3610904 195.1791794 181.93838254 194.62771049 190 192 C190.93513428 191.70198486 190.93513428 191.70198486 191.88916016 191.39794922 C217.24006336 183.15751684 235.08132548 168.03878987 248.72729492 145.21801758 C251.80476766 140.09761617 251.80476766 140.09761617 254 139 C254 158.14 254 177.28 254 197 C170.18 197 86.36 197 0 197 C0 131.99 0 66.98 0 0 Z " fill="#FDFDFD" transform="translate(0,0)"/>
|
||||
<path d="M0 0 C0.65613281 0.47308594 1.31226563 0.94617187 1.98828125 1.43359375 C8.19172898 6.28906392 12.5611382 12.98165036 16 20 C24.23839404 17.77769262 32.0090674 14.65817187 39.875 11.375 C42.26721473 10.38036914 44.66040281 9.38807517 47.0546875 8.3984375 C48.10124512 7.96192871 49.14780273 7.52541992 50.22607422 7.07568359 C53 6 53 6 57 5 C57 30.41 57 55.82 57 82 C56.01 82.495 56.01 82.495 55 83 C55 81.35 55 79.7 55 78 C51.21452654 76.50479006 47.4282773 75.01156244 43.64135742 73.52001953 C42.35827504 73.01435393 41.0753909 72.50818496 39.79272461 72.00146484 C31.90172043 68.88456448 23.99310874 65.84575736 16 63 C15.525625 64.093125 15.05125 65.18625 14.5625 66.3125 C8.10206161 78.96512328 -2.35460415 87.70575421 -15.4375 93 C-29.87838266 97.0535811 -45.55564041 96.50754481 -58.859375 89.4921875 C-73.15897526 80.99933099 -81.70929125 69.15197361 -86.08203125 53.2265625 C-88.73289686 42.16808167 -87.6277083 31.38695655 -83 21 C-82.39865234 19.61554688 -82.39865234 19.61554688 -81.78515625 18.203125 C-75.22740726 4.7454836 -63.31358344 -4.70987829 -49.4375 -9.9375 C-32.12753124 -14.39739533 -14.1778871 -10.52355405 0 0 Z " fill="#FBFAFA" transform="translate(197,57)"/>
|
||||
<path d="M0 0 C4.17781518 3.50676714 8.11713034 7.1703933 12 11 C12.80566406 11.79277344 13.61132812 12.58554687 14.44140625 13.40234375 C22.19006532 21.50137697 28.59401999 31.29414841 32 42 C31.29689697 42.29277832 30.59379395 42.58555664 29.86938477 42.88720703 C28.88252686 43.29825684 27.89566895 43.70930664 26.87890625 44.1328125 C25.7820752 44.58946289 24.68524414 45.04611328 23.55517578 45.51660156 C21.21112215 46.49465882 18.86831579 47.47571148 16.52685547 48.45996094 C13.00083028 49.94082264 9.46957562 51.40863582 5.9375 52.875 C4.72900391 53.38546875 3.52050781 53.8959375 2.27539062 54.421875 C1.12103516 54.89882812 -0.03332031 55.37578125 -1.22265625 55.8671875 C-2.26172119 56.30144043 -3.30078613 56.73569336 -4.37133789 57.18310547 C-7 58 -7 58 -10 57 C-11.4296875 54.92578125 -11.4296875 54.92578125 -12.875 52.3125 C-19.42601148 40.51709955 -29.84217649 32.8446492 -42.5625 28.65625 C-56.42990775 24.92271714 -71.13091577 25.7886915 -83.85546875 32.5078125 C-97.34889321 40.51080907 -106.24401068 52.0414341 -110.5546875 67.203125 C-111.02309404 70.14504676 -111.01460289 72.9684764 -110.99194336 75.94140625 C-111.02545456 84.76399115 -111.02545456 84.76399115 -114.08203125 88.640625 C-116.9592845 90.92925563 -119.95266091 92.94464306 -123 95 C-125.07005107 96.76090923 -127.03276148 98.62570442 -129 100.5 C-143.70570026 114.18796331 -143.70570026 114.18796331 -150 117 C-159.57148912 93.63001896 -160.76344158 66.4060235 -151.12304688 42.85791016 C-141.87944936 21.5593662 -127.22320872 4.39468338 -107 -7 C-106.02675781 -7.56203125 -105.05351563 -8.1240625 -104.05078125 -8.703125 C-71.86898073 -26.08920004 -28.99166492 -22.13908958 0 0 Z " fill="#C30230" transform="translate(222,20)"/>
|
||||
<path d="M0 0 C4.45538794 1.64894619 8.90185574 3.3200767 13.34472656 5.00244141 C15.22690683 5.70955694 17.1119842 6.40898279 18.99902344 7.10302734 C22.15076109 8.26257362 25.29431886 9.44248243 28.4375 10.625 C29.46238525 10.99681396 30.48727051 11.36862793 31.54321289 11.75170898 C32.97395142 12.29613647 32.97395142 12.29613647 34.43359375 12.8515625 C35.71834595 13.32843506 35.71834595 13.32843506 37.02905273 13.81494141 C39 15 39 15 39.84375 16.9699707 C40.49342913 25.41072381 30.94776473 35.75864029 26 42 C25.40703125 42.75925781 24.8140625 43.51851562 24.203125 44.30078125 C9.68750758 61.76294494 -14.28234764 74.8665569 -37 77 C-61.22105191 78.03276946 -85.35950409 76.70549321 -105 61 C-105.74378906 60.44441406 -106.48757812 59.88882813 -107.25390625 59.31640625 C-123.79829816 46.85775982 -123.79829816 46.85775982 -126 40 C-125.10539062 39.23816406 -124.21078125 38.47632813 -123.2890625 37.69140625 C-116.87637214 32.21935059 -110.50956553 26.71190714 -104.265625 21.046875 C-100.88076288 17.98882715 -97.44363278 14.99153574 -94 12 C-90.74459922 13.40639025 -88.85406513 15.05982643 -86.5 17.6875 C-77.43916873 26.95043159 -66.1810049 31.99274637 -53.34033203 32.2980957 C-46.39490631 32.33973156 -39.63170864 32.26258295 -33 30 C-32.21882813 29.75507813 -31.43765625 29.51015625 -30.6328125 29.2578125 C-17.23315198 24.54079805 -7.75035638 15.14019465 -1.25 2.6328125 C-0.8375 1.76398438 -0.425 0.89515625 0 0 Z " fill="#021A71" transform="translate(213,119)"/>
|
||||
<path d="M0 0 C5.35552828 3.39157167 9.73048255 7.37353935 14.31640625 11.7578125 C16.86387172 13.88626254 18.8665855 14.9914145 22 16 C22.95261719 15.09636719 23.90523437 14.19273438 24.88671875 13.26171875 C26.15342443 12.07007711 27.42036387 10.87868391 28.6875 9.6875 C29.31333984 9.09259766 29.93917969 8.49769531 30.58398438 7.88476562 C33.87475275 4.80074709 36.98137595 2.12841083 41 0 C41.66644531 0.61746094 42.33289063 1.23492187 43.01953125 1.87109375 C48.7281423 7.11662866 54.5269502 12.15258764 60.58984375 16.9921875 C66.81970816 22.18205834 66.81970816 22.18205834 67.53125 25.41015625 C67.38452482 37.86345569 62.48204938 48.68984739 54.2265625 58 C46.31381371 65.47871616 35.90872336 71.06835437 25 72 C24.06671875 72.08121094 23.1334375 72.16242188 22.171875 72.24609375 C8.50219507 72.83653804 -2.2982359 67.43653936 -13.1875 59.75 C-21.40487698 51.71523139 -27.73929647 40.75799942 -28.75 29.125 C-28.43874508 24.7355076 -26.48070743 22.6315565 -23.25 19.8046875 C-22.5075 19.20914063 -21.765 18.61359375 -21 18 C-20.154375 17.30132812 -19.30875 16.60265625 -18.4375 15.8828125 C-16.58822798 14.36451814 -14.73128441 12.85552457 -12.8671875 11.35546875 C-8.44244171 7.72042555 -4.21848422 3.87075667 0 0 Z " fill="#031A71" transform="translate(144,75)"/>
|
||||
<path d="M0 0 C0.89460938 0.43441406 1.78921875 0.86882813 2.7109375 1.31640625 C13.56733148 7.178859 20.58301944 16.62066024 25 28 C26.34950368 32.74608059 27 37.065874 27 42 C23.55220914 40.49993609 21.17639467 38.49590738 18.4375 35.9375 C12.27265981 30.28487205 5.96967741 24.64645161 -1 20 C-1.6290625 20.56847656 -2.258125 21.13695313 -2.90625 21.72265625 C-8.23211968 26.5271682 -13.58511587 31.29600848 -19 36 C-23.98743064 34.50843196 -26.93142754 31.54332502 -30.5625 28 C-35.25906082 23.26431569 -35.25906082 23.26431569 -41 20 C-41.66644531 20.61746094 -42.33289063 21.23492187 -43.01953125 21.87109375 C-49.49783882 27.82388826 -56.14900967 33.47570939 -63 39 C-65.00712736 40.65839866 -67.00426503 42.32789773 -69 44 C-69.89444705 31.15474652 -65.74873183 21.17814981 -58 11 C-42.95796817 -5.60359869 -19.74821462 -9.8220012 0 0 Z " fill="#FDD204" transform="translate(185,56)"/>
|
||||
<path d="M0 0 C4.28792054 2.72349458 7.96086865 5.64265272 11.6875 9.125 C14.40593357 11.65919672 16.90611339 13.93740893 20 16 C18.45427224 19.81628832 16.11228755 21.97025743 13.0625 24.6875 C12.57450928 25.12392822 12.08651855 25.56035645 11.58374023 26.01000977 C7.44438884 29.68168288 3.1542964 33.15674428 -1.15625 36.625 C-4.88158413 39.73626806 -8.42845194 43.02239671 -11.94116211 46.37084961 C-14.47323772 48.75074994 -16.77334734 50.66509642 -20 52 C-20.96345444 50.12762629 -21.92053102 48.2519701 -22.875 46.375 C-23.40867187 45.33085938 -23.94234375 44.28671875 -24.4921875 43.2109375 C-27.26231047 37.31186734 -29.44678461 31.53349556 -28 25 C-26.12378629 22.11112789 -23.67216304 20.14329744 -21 18 C-20.154375 17.30132812 -19.30875 16.60265625 -18.4375 15.8828125 C-16.58822798 14.36451814 -14.73128441 12.85552457 -12.8671875 11.35546875 C-8.44244171 7.72042555 -4.21848422 3.87075667 0 0 Z " fill="#7A853B" transform="translate(144,75)"/>
|
||||
<path d="M0 0 C0.30292969 1.05058594 0.60585937 2.10117188 0.91796875 3.18359375 C3.21554955 10.95006406 5.53141385 18.15450633 10 25 C9.34515625 25.52207031 8.6903125 26.04414063 8.015625 26.58203125 C2.85533541 30.74379023 -2.14926847 34.98462376 -7 39.5 C-12.46969905 44.59155144 -18.15506859 49.34016295 -24 54 C-27.98232778 50.33096724 -30.64316353 46.66489768 -33.25 41.9375 C-33.600625 41.32583984 -33.95125 40.71417969 -34.3125 40.08398438 C-35.98121521 37.11559674 -37.4271484 34.37813958 -38 31 C-31.44231174 24.87720206 -24.8192745 18.95918641 -17.8125 13.34765625 C-14.05017212 10.20715756 -10.48696844 6.86610283 -6.97070312 3.453125 C-3.32463848 0 -3.32463848 0 0 0 Z " fill="#6D3C5E" transform="translate(111,106)"/>
|
||||
<path d="M0 0 C5.83043424 4.10970437 11.09789229 8.68615219 16.30078125 13.5625 C18.89058893 15.98553895 18.89058893 15.98553895 21.48046875 17.8125 C24.59352223 20.10458893 26.65980595 21.65401484 27.62890625 25.48828125 C28.05445689 35.19358123 24.02478887 43.92444646 19 52 C18.071875 51.0409375 18.071875 51.0409375 17.125 50.0625 C11.25501774 44.20900645 5.00673282 38.77135771 -1.4375 33.5625 C-7.88257776 28.34767925 -14.13523865 22.86476135 -20 17 C-19.31035156 16.443125 -18.62070313 15.88625 -17.91015625 15.3125 C-11.80242122 10.35258349 -5.83030237 5.28326166 0 0 Z " fill="#35647D" transform="translate(184,75)"/>
|
||||
<path d="M0 0 C0.66 0.33 1.32 0.66 2 1 C-1.63 4.63 -5.26 8.26 -9 12 C-9.66 11.67 -10.32 11.34 -11 11 C-9.92173635 9.72486237 -8.83714481 8.45507431 -7.75 7.1875 C-7.14671875 6.47980469 -6.5434375 5.77210937 -5.921875 5.04296875 C-4.07629602 3.08110329 -2.20054668 1.54330375 0 0 Z " fill="#FEDE22" transform="translate(135,60)"/>
|
||||
<path d="M0 0 C3.75931429 1.03381143 5.16972619 2.16972619 8 5 C4.37 4.01 0.74 3.02 -3 2 C-2.01 1.34 -1.02 0.68 0 0 Z " fill="#45755B" transform="translate(109,181)"/>
|
||||
<path d="M0 0 C0.33 0.66 0.66 1.32 1 2 C6.445 1.505 6.445 1.505 12 1 C12 1.33 12 1.66 12 2 C7.71 2.66 3.42 3.32 -1 4 C-0.67 2.68 -0.34 1.36 0 0 Z " fill="#4F7F60" transform="translate(24,65)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
9
mobile/apps/auth/assets/custom-icons/icons/cowheels.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg viewBox="0 0 135.47 135.47" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path fill="none" stroke="#ff5e00" stroke-width="19.85" d="m 67.6,-67.73 a 28.84,28.84 0 0 1 -24.98,-14.42 28.84,28.84 0 0 1 0,-28.84 28.84,28.84 0 0 1 24.98,-14.42" transform="rotate(90)"/>
|
||||
<path fill="none" stroke="#ffb71c" stroke-width="19.85" d="m -67.6,125.41 a 28.84,28.84 0 0 1 -24.98,-14.42 28.84,28.84 0 0 1 0,-28.84 28.84,28.84 0 0 1 24.98,-14.42" transform="rotate(-90)"/>
|
||||
<path fill="none" stroke="#d92a1c" stroke-width="19.84" d="M -67.6,67.73 A 28.84,28.97 0 0 1 -87.99,59.25 28.84,28.97 0 0 1 -96.44,38.76" transform="rotate(-90)"/>
|
||||
<path fill="none" stroke="#a130cd" stroke-width="19.84" d="m 38.76,96.44 a 28.84,28.84 0 0 1 -24.98,-14.42 28.84,28.84 0 0 1 0,-28.84 28.84,28.84 0 0 1 24.98,-14.42"/>
|
||||
<path fill="#a130cd" d="m 38.70,28.84 -0.001,19.84 c 3.01,0 5.07,0.46 7.84,1.56 2.21,-8.13 6.14,-12.85 9.61,-16.95 -0.02,-0.05 -6.98,-4.45 -17.45,-4.45 z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 981 B |
11
mobile/apps/auth/assets/custom-icons/icons/emeritihealth.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="121" height="111">
|
||||
<path d="M0 0 C39.93 0 79.86 0 121 0 C121 36.63 121 73.26 121 111 C81.07 111 41.14 111 0 111 C0 74.37 0 37.74 0 0 Z " fill="#FDFDFC" transform="translate(0,0)"/>
|
||||
<path d="M0 0 C1.34094727 -0.00483398 1.34094727 -0.00483398 2.70898438 -0.00976562 C15.92329958 0.09656756 29.05768111 5.15920937 38.69921875 14.3671875 C46.33623486 22.91378081 51.45414229 32.03867724 53.4375 43.3125 C55.4175 42.9825 57.3975 42.6525 59.4375 42.3125 C56.40996635 50.06943534 46.82853593 55.97682128 39.5 59.3125 C37.82136046 60.00117263 36.13406518 60.66925254 34.4375 61.3125 C33.5609375 61.67085937 32.684375 62.02921875 31.78125 62.3984375 C20.17960201 66.92308022 6.59150797 64.44771949 -4.48828125 59.66015625 C-6.56191878 58.74121933 -8.62982096 57.81032187 -10.69677734 56.87646484 C-21.71786864 51.93615813 -31.96757967 49.00024219 -43.6875 53.25 C-49.85297476 56.02724089 -53.58090596 59.9493408 -57.5625 65.3125 C-58.41134766 66.43978516 -58.41134766 66.43978516 -59.27734375 67.58984375 C-59.70144531 68.15832031 -60.12554687 68.72679688 -60.5625 69.3125 C-60.21265815 63.71503042 -56.42242893 59.17242893 -52.5625 55.3125 C-52.45417831 53.23031638 -52.37676459 51.14650871 -52.3125 49.0625 C-51.32728272 34.37380601 -44.38377625 22.27099897 -33.859375 12.1953125 C-23.67156706 3.84408218 -13.05318857 -0.23629958 0 0 Z " fill="#7D9C07" transform="translate(60.5625,2.6875)"/>
|
||||
<path d="M0 0 C39.93 0 79.86 0 121 0 C121 15.18 121 30.36 121 46 C118.69 46 116.38 46 114 46 C113.72027344 45.10539062 113.44054687 44.21078125 113.15234375 43.2890625 C110.46208014 35.17501984 107.34684612 28.77440212 102 22 C101.401875 21.113125 100.80375 20.22625 100.1875 19.3125 C91.26978576 9.88520209 79.12630771 4.33913818 66.27734375 3.7265625 C48.74009638 3.25612695 36.53738751 7.13555151 23.3125 19.1875 C14.84180419 28.0987521 10.10977052 38.99431955 9.6875 51.125 C9.34944073 57.79987234 7.81473954 60.61643116 3 65 C2.01 66.32 1.02 67.64 0 69 C0 46.23 0 23.46 0 0 Z " fill="#FDFEFC" transform="translate(0,0)"/>
|
||||
<path d="M0 0 C7.7514671 5.16764473 13.82626339 13.90836132 16.703125 22.71875 C16.703125 24.03875 16.703125 25.35875 16.703125 26.71875 C11.46215703 26.16706916 7.64974874 24.39540175 3.078125 21.96875 C-14.90773287 12.27142089 -14.90773287 12.27142089 -34.734375 12.4375 C-39.88111467 14.59356662 -45.70693353 17.53886707 -48.296875 22.71875 C-47.08 22.615625 -45.863125 22.5125 -44.609375 22.40625 C-34.14474874 22.43895196 -24.29281839 28.5635433 -15.1953125 33.265625 C-10.48229066 35.6284877 -6.28828923 36.00534278 -1.109375 36.28125 C0.01500977 36.34602539 0.01500977 36.34602539 1.16210938 36.41210938 C3.00890875 36.51797685 4.85599334 36.6188476 6.703125 36.71875 C3.65258646 39.76928854 0.59053342 39.47031177 -3.60205078 39.58984375 C-11.64954951 39.3417513 -18.79427187 36.1503666 -26.171875 33.21875 C-39.2911509 28.00909237 -50.24239432 25.58953741 -64.296875 28.71875 C-63.91593636 18.62387614 -58.87170481 10.32516481 -51.57421875 3.50390625 C-35.74413322 -8.9049258 -17.299832 -9.65024642 0 0 Z " fill="#FBFCF9" transform="translate(85.296875,20.28125)"/>
|
||||
<path d="M0 0 C0.07476562 0.59425781 0.14953125 1.18851563 0.2265625 1.80078125 C1.89490592 12.31788733 7.03959282 21.85443765 15 29 C18.20627298 31.27541953 21.4909817 33.22982559 25 35 C26.60294922 35.81017578 26.60294922 35.81017578 28.23828125 36.63671875 C32.50890201 38.42008659 36.60502154 38.5364421 41.1875 38.5 C42.02394043 38.49427979 42.86038086 38.48855957 43.72216797 38.48266602 C54.81538411 38.16495288 64.10602396 33.8155071 72 26 C76.47244994 20.53700746 79.32082187 14.4918547 82 8 C85.96 8 89.92 8 94 8 C91.39683113 21.53647814 84.16445962 32.6524866 73.296875 41.1015625 C60.88291389 49.43665068 45.9146679 53.47483724 31.00488281 50.61767578 C22.25796227 48.44289499 14.98853845 44.65676037 8 39 C6.948125 38.236875 5.89625 37.47375 4.8125 36.6875 C-1.36142088 30.78797561 -5.25051243 24.03047722 -8.4375 16.1875 C-8.69660156 15.55344238 -8.95570312 14.91938477 -9.22265625 14.26611328 C-10.58441341 10.72610583 -11.29621798 7.7930351 -11 4 C-4.5 0 -4.5 0 0 0 Z " fill="#7D9C08" transform="translate(20,59)"/>
|
||||
<path d="M0 0 C2.01050607 0.26263368 4.00961749 0.61336248 6 1 C8.78756093 1.25820896 11.57995448 1.40834288 14.375 1.5625 C15.11105469 1.60568359 15.84710938 1.64886719 16.60546875 1.69335938 C18.40348068 1.79843799 20.20171958 1.89962093 22 2 C19.47636907 4.52363093 17.87673704 4.2605272 14.4296875 4.2734375 C13.71039063 4.26570313 12.99109375 4.25796875 12.25 4.25 C11.54617187 4.25773437 10.84234375 4.26546875 10.1171875 4.2734375 C5.70222524 4.257025 2.15942781 3.64807517 -2 2 C-1.34 1.34 -0.68 0.68 0 0 Z " fill="#DFE7C3" transform="translate(70,55)"/>
|
||||
<path d="M0 0 C0.99 0.33 1.98 0.66 3 1 C2.60167969 1.45890625 2.20335937 1.9178125 1.79296875 2.390625 C-0.91142062 5.52271585 -3.57991771 8.63877459 -6 12 C-5.54300722 6.97307937 -3.00758252 3.85103739 0 0 Z " fill="#9DB444" transform="translate(6,60)"/>
|
||||
<path d="M0 0 C0 0.66 0 1.32 0 2 C0.66 2.33 1.32 2.66 2 3 C-4.625 2.25 -4.625 2.25 -8 0 C-5.13822943 -1.43088528 -3.06624227 -0.59991697 0 0 Z " fill="#E9EED6" transform="translate(76,56)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 25 KiB |
1
mobile/apps/auth/assets/custom-icons/icons/mangadex.svg
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
12
mobile/apps/auth/assets/custom-icons/icons/nasdaq.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 70.1 60" style="enable-background:new 0 0 70.1 60;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#0090BA;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M53.3,0L37.7,43c-0.4,1.1-1.4,1.8-2.5,2v0h16.5c1.3,0,2.4-0.8,2.8-2L70.1,0H53.3z M33.9,44.3
|
||||
c1,0,1.8-0.5,2.3-1.2c0.1-0.1,0.2-0.3,0.4-0.7l5.7-15.8l-3.3-9.2c-0.4-1-1.4-1.7-2.6-1.7c-1,0-1.8,0.5-2.3,1.2
|
||||
c-0.1,0.1-0.3,0.4-0.4,0.7l-5.7,15.8l3.4,9.2C31.7,43.6,32.7,44.3,33.9,44.3z M18.4,15h16.7v0c-1.2,0.1-2.3,0.9-2.7,2L16.8,60H0
|
||||
l15.6-43C16,15.9,17.1,15,18.4,15z">
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 719 B |
1
mobile/apps/auth/assets/custom-icons/icons/numerai.svg
Normal file
|
After Width: | Height: | Size: 10 KiB |
22
mobile/apps/auth/assets/custom-icons/icons/pangolin.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="900.82861"
|
||||
height="955.20648"
|
||||
viewBox="0 0 238.34422 252.7317"
|
||||
version="1.1"
|
||||
id="svg420"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs417" />
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-13.119542,-5.9258171)">
|
||||
<path
|
||||
d="m 213.66176,90.072122 c 4.95655,0 8.97383,4.018046 8.97383,8.973827 0,4.956581 -4.01728,8.974621 -8.97383,8.974621 -4.95657,0 -8.97462,-4.01804 -8.97462,-8.974621 0,-4.955781 4.01805,-8.973827 8.97462,-8.973827 z m 35.2316,37.450998 c -0.90048,29.80928 -23.66033,69.21262 -54.51292,79.34466 -36.04206,11.836 -63.40991,-5.92226 -72.08409,-26.74061 -6.75754,-16.21966 -1.65117,-35.62363 10.96266,-43.83669 10.6506,-6.93533 30.48543,-8.76736 47.15454,2.19144 -5.85627,-15.34246 -21.62491,-25.4256 -35.59101,-28.49424 -13.96613,-3.06867 -28.38324,0.43858 -38.74504,5.69946 13.29071,-14.68572 44.40801,-28.946049 78.24077,-10.95958 22.67676,12.05491 32.43775,28.93208 42.0489,51.72763 C 251.59637,117.87858 234.026,71.411066 203.39074,43.794029 172.15544,15.636686 129.95516,4.340214 97.668803,6.103155 108.32483,12.678273 120.84625,22.06586 132.41209,33.053363 81.298533,26.697169 39.174705,38.314245 13.119542,73.749217 27.67508,70.878527 46.868833,69.073666 65.974711,70.016861 28.737658,96.252107 7.1124298,140.38147 18.105298,186.43137 c 6.718497,-11.74129 16.767711,-25.84558 28.726275,-38.62863 -3.677175,34.36994 1.42836,80.83745 45.62293,110.85478 -2.25587,-9.42394 -4.08014,-20.88443 -4.91466,-33.0154 20.673197,16.1282 50.685067,29.42205 87.917917,20.24096 65.77679,-16.21975 83.34719,-79.78335 73.4356,-118.35996"
|
||||
style="fill:#f36118;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0776283"
|
||||
id="path32" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
2
mobile/apps/auth/assets/custom-icons/icons/temu.svg
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
@@ -4,8 +4,8 @@ Ente Auth supports the icon pack provided by
|
||||
[simple-icons](https://github.com/simple-icons/simple-icons).
|
||||
|
||||
If you would like to add your own custom icon, please open a pull-request with
|
||||
the relevant SVG placed within `assets/custom-icons/icons` and add the
|
||||
corresponding entry within `assets/custom-icons/_data/custom-icons.json`.
|
||||
the relevant SVG placed within `mobile/apps/auth/assets/custom-icons/icons` and add the
|
||||
corresponding entry within `mobile/apps/auth/assets/custom-icons/_data/custom-icons.json`.
|
||||
|
||||
Please be careful to upload small and optimized icon files. If your icon file
|
||||
is over 50KB, it is likely not optimized.
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# Generated file, do not edit.
|
||||
#
|
||||
|
||||
import lldb
|
||||
|
||||
def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
|
||||
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
|
||||
base = frame.register["x0"].GetValueAsAddress()
|
||||
page_len = frame.register["x1"].GetValueAsUnsigned()
|
||||
|
||||
# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
|
||||
# first page to see if handled it correctly. This makes diagnosing
|
||||
# misconfiguration (e.g. missing breakpoint) easier.
|
||||
data = bytearray(page_len)
|
||||
data[0:8] = b'IHELPED!'
|
||||
|
||||
error = lldb.SBError()
|
||||
frame.GetThread().GetProcess().WriteMemory(base, data, error)
|
||||
if not error.Success():
|
||||
print(f'Failed to write into {base}[+{page_len}]', error)
|
||||
return
|
||||
|
||||
def __lldb_init_module(debugger: lldb.SBDebugger, _):
|
||||
target = debugger.GetDummyTarget()
|
||||
# Caveat: must use BreakpointCreateByRegEx here and not
|
||||
# BreakpointCreateByName. For some reasons callback function does not
|
||||
# get carried over from dummy target for the later.
|
||||
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
|
||||
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
|
||||
bp.SetAutoContinue(True)
|
||||
print("-- LLDB integration loaded --")
|
||||
5
mobile/apps/auth/ios/Flutter/ephemeral/flutter_lldbinit
Normal file
@@ -0,0 +1,5 @@
|
||||
#
|
||||
# Generated file, do not edit.
|
||||
#
|
||||
|
||||
command script import --relative-to-command-file flutter_lldb_helper.py
|
||||
@@ -232,44 +232,44 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
app_links: 3da4c36b46cac3bf24eb897f1a6ce80bda109874
|
||||
connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343
|
||||
cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c
|
||||
device_info_plus: 335f3ce08d2e174b9fdc3db3db0f4e3b1f66bd89
|
||||
app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0
|
||||
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
|
||||
cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba
|
||||
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
|
||||
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
|
||||
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
|
||||
file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517
|
||||
file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6
|
||||
fk_user_agent: 137145b086229251761678fe034da53753f4ce59
|
||||
file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655
|
||||
file_saver: 503e386464dbe118f630e17b4c2e1190fa0cf808
|
||||
fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
|
||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||
flutter_email_sender: 2397f5e84aaacfb61af569637a963e7c687858d8
|
||||
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
|
||||
flutter_local_authentication: 989278c681612f1ee0e36019e149137f114b9d7f
|
||||
flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100
|
||||
flutter_native_splash: 35ddbc7228eafcb3969dcc5f1fbbe27c1145a4f0
|
||||
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
|
||||
fluttertoast: 76fea30fcf04176325f6864c87306927bd7d2038
|
||||
local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391
|
||||
move_to_background: 155f7bfbd34d43ad847cb630d2d2d87c17199710
|
||||
flutter_email_sender: 10a22605f92809a11ef52b2f412db806c6082d40
|
||||
flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
|
||||
flutter_local_authentication: 1172a4dd88f6306dadce067454e2c4caf07977bb
|
||||
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
|
||||
flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778
|
||||
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
|
||||
fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c
|
||||
local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3
|
||||
move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d
|
||||
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
|
||||
objective_c: 89e720c30d716b036faf9c9684022048eee1eee2
|
||||
objective_c: 77e887b5ba1827970907e10e832eec1683f3431d
|
||||
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
||||
package_info_plus: 580e9a5f1b6ca5594e7c9ed5f92d1dfb2a66b5e1
|
||||
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
||||
privacy_screen: 3159a541f5d3a31bea916cfd4e58f9dc722b3fd4
|
||||
qr_code_scanner: d77f94ecc9abf96d9b9b8fc04ef13f611e5a147a
|
||||
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
|
||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||
privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e
|
||||
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
|
||||
SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868
|
||||
Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854
|
||||
sentry_flutter: 27892878729f42701297c628eb90e7c6529f3684
|
||||
share_plus: 011d6fb4f9d2576b83179a3a5c5e323202cdabcf
|
||||
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
||||
sodium_libs: 6c6d0e83f4ee427c6464caa1f1bdc2abf3ca0b7f
|
||||
sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3
|
||||
sentry_flutter: 2df8b0aab7e4aba81261c230cbea31c82a62dd1b
|
||||
share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad
|
||||
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
|
||||
sodium_libs: 1faae17af662384acbd13e41867a0008cd2e2318
|
||||
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
|
||||
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
|
||||
sqlite3_flutter_libs: 9379996d65aa23dcda7585a5b58766cebe0aa042
|
||||
sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b
|
||||
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
|
||||
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
|
||||
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
|
||||
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
||||
|
||||
PODFILE CHECKSUM: 78f002751f1a8f65042b8da97902ba4124271c5a
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
@@ -43,11 +44,13 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
|
||||
@@ -40,7 +40,7 @@ class _AppState extends State<App>
|
||||
late StreamSubscription<SignedOutEvent> _signedOutEvent;
|
||||
late StreamSubscription<SignedInEvent> _signedInEvent;
|
||||
Locale? locale;
|
||||
setLocale(Locale newLocale) {
|
||||
void setLocale(Locale newLocale) {
|
||||
setState(() {
|
||||
locale = newLocale;
|
||||
});
|
||||
@@ -82,7 +82,7 @@ class _AppState extends State<App>
|
||||
UpdateService.instance.getLatestVersionInfo(),
|
||||
);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -27,10 +27,8 @@ Future<void> bootstrap(FutureOr<Widget> Function() builder) async {
|
||||
|
||||
await runZonedGuarded(
|
||||
() async {
|
||||
await BlocOverrides.runZoned(
|
||||
() async => runApp(await builder()),
|
||||
blocObserver: AppBlocObserver(),
|
||||
);
|
||||
Bloc.observer = AppBlocObserver();
|
||||
runApp(await builder());
|
||||
},
|
||||
(error, stackTrace) => log(error.toString(), stackTrace: stackTrace),
|
||||
);
|
||||
|
||||
@@ -39,7 +39,7 @@ final lightThemeData = ThemeData(
|
||||
bodyLarge: const TextStyle(color: Colors.orange),
|
||||
),
|
||||
cardColor: const Color.fromRGBO(250, 250, 250, 1.0),
|
||||
dialogTheme: const DialogTheme().copyWith(
|
||||
dialogTheme: const DialogThemeData().copyWith(
|
||||
backgroundColor: const Color.fromRGBO(250, 250, 250, 1.0), //
|
||||
titleTextStyle: const TextStyle(
|
||||
color: Colors.black,
|
||||
@@ -150,7 +150,7 @@ final darkThemeData = ThemeData(
|
||||
elevation: 0,
|
||||
),
|
||||
cardColor: const Color.fromRGBO(10, 15, 15, 1.0),
|
||||
dialogTheme: const DialogTheme().copyWith(
|
||||
dialogTheme: const DialogThemeData().copyWith(
|
||||
backgroundColor: const Color.fromRGBO(15, 15, 15, 1.0),
|
||||
titleTextStyle: const TextStyle(
|
||||
color: Colors.white,
|
||||
@@ -275,7 +275,7 @@ TextTheme _buildTextTheme(Color textColor) {
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
bodySmall: TextStyle(
|
||||
color: textColor.withOpacity(0.4),
|
||||
color: textColor.withValues(alpha: 0.4),
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
@@ -343,7 +343,7 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(48, 48, 48, 0.5);
|
||||
|
||||
Color get iconColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.75)
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.75)
|
||||
: const Color.fromRGBO(255, 255, 255, 1);
|
||||
|
||||
Color get bgColorForQuestions => brightness == Brightness.light
|
||||
@@ -354,7 +354,7 @@ extension CustomColorScheme on ColorScheme {
|
||||
|
||||
Color get cupertinoPickerTopColor => brightness == Brightness.light
|
||||
? const Color.fromARGB(255, 238, 238, 238)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.1);
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.1);
|
||||
|
||||
Color get stepProgressUnselectedColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(196, 196, 196, 0.6)
|
||||
@@ -381,20 +381,20 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(20, 20, 20, 1);
|
||||
|
||||
Color get galleryThumbDrawColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.8)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.8)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
|
||||
|
||||
Color get backupEnabledBgColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(230, 230, 230, 0.95)
|
||||
: const Color.fromRGBO(10, 40, 40, 0.3);
|
||||
|
||||
Color get dotsIndicatorActiveColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
|
||||
|
||||
Color get dotsIndicatorInactiveColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.12)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.12);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.12)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.12);
|
||||
|
||||
Color get toastTextColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(255, 255, 255, 1)
|
||||
@@ -409,8 +409,8 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(100, 100, 100, 1);
|
||||
|
||||
Color get themeSwitchInactiveIconColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
|
||||
|
||||
Color get searchResultsColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(245, 245, 245, 1.0)
|
||||
@@ -421,8 +421,8 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(150, 150, 150, 1);
|
||||
|
||||
Color get searchResultsBackgroundColor => brightness == Brightness.light
|
||||
? Colors.black.withOpacity(0.32)
|
||||
: Colors.black.withOpacity(0.64);
|
||||
? Colors.black.withValues(alpha: 0.32)
|
||||
: Colors.black.withValues(alpha: 0.64);
|
||||
|
||||
Color get codeCardBackgroundColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(246, 246, 246, 1)
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
"contactSupport": "Звярнуцца ў службу падтрымкі",
|
||||
"rateUsOnStore": "Ацаніць нас у {storeName}",
|
||||
"blog": "Блог",
|
||||
"merchandise": "Тавары",
|
||||
"verifyPassword": "Праверыць пароль",
|
||||
"pleaseWait": "Пачакайце...",
|
||||
"generatingEncryptionKeysTitle": "Генерацыя ключоў шыфравання...",
|
||||
@@ -85,6 +86,9 @@
|
||||
"useRecoveryKey": "Выкарыстоўваць ключ аднаўлення",
|
||||
"incorrectPasswordTitle": "Няправільны пароль",
|
||||
"welcomeBack": "З вяртаннем!",
|
||||
"emailAlreadyRegistered": "Электронная пошта ўжо зарэгістравана.",
|
||||
"emailNotRegistered": "Электронная пошта не зарэгістравана.",
|
||||
"madeWithLoveAtPrefix": "зроблена з ❤️ у ",
|
||||
"changeEmail": "Змяніць адрас электроннай пошты",
|
||||
"changePassword": "Змяніць пароль",
|
||||
"data": "Даныя",
|
||||
@@ -94,9 +98,13 @@
|
||||
"passwordForDecryptingExport": "Пароль для дэшыфроўкі экспартавання",
|
||||
"passwordEmptyError": "Пароль не можа быць пустым",
|
||||
"importFromApp": "Імпартаваць коды з {appName}",
|
||||
"importSelectJsonFile": "Выбраць файл JSON",
|
||||
"importSelectAppExport": "Выберыце файл экспартавання {appName}",
|
||||
"exportCodes": "Экспартаваць коды",
|
||||
"importLabel": "Імпарт",
|
||||
"selectFile": "Выбраць файл",
|
||||
"emailVerificationToggle": "Праверка эл. пошты",
|
||||
"authenticateGeneric": "Прайдзіце аўтэнтыфікацыю",
|
||||
"ok": "OK",
|
||||
"cancel": "Скасаваць",
|
||||
"yes": "Так",
|
||||
@@ -113,19 +121,29 @@
|
||||
"enterYourPasswordHint": "Увядзіце ваш пароль",
|
||||
"forgotPassword": "Забылі пароль",
|
||||
"oops": "Вой",
|
||||
"suggestFeatures": "Прапанаваць функцыю",
|
||||
"faq": "Частыя пытанні",
|
||||
"leaveFamily": "Пакінуць сямейны план",
|
||||
"inFamilyPlanMessage": "Вы ўдзельнік сямейнага плана!",
|
||||
"scan": "Сканіраваць",
|
||||
"scanACode": "Сканіраваць код",
|
||||
"verify": "Праверыць",
|
||||
"verifyEmail": "Праверыць электронную пошту",
|
||||
"lostDeviceTitle": "Згубілі прыладу?",
|
||||
"twoFactorAuthTitle": "Двухфактарная аўтэнтыфікацыя",
|
||||
"passkeyAuthTitle": "Праверка ключа доступу",
|
||||
"verifyPasskey": "Праверыць ключ доступу",
|
||||
"loginWithTOTP": "Увайсці з TOTP",
|
||||
"recoverAccount": "Аднавіць уліковы запіс",
|
||||
"enterRecoveryKeyHint": "Увядзіце свой ключ аднаўлення",
|
||||
"recover": "Аднавіць",
|
||||
"invalidQRCode": "Памылковы QR-код",
|
||||
"noRecoveryKeyTitle": "Няма ключа аднаўлення?",
|
||||
"enterEmailHint": "Увядзіце свой адрас электроннай пошты",
|
||||
"enterNewEmailHint": "Увядзіце свой новы адрас электроннай пошты",
|
||||
"invalidEmailTitle": "Памылковы адрас электроннай пошты",
|
||||
"deleteAccount": "Выдаліць уліковы запіс",
|
||||
"yesSendFeedbackAction": "Так. Адправіць водгук",
|
||||
"noDeleteAccountAction": "Не, выдаліць уліковы запіс",
|
||||
"sendEmail": "Адправіць ліст",
|
||||
"createNewAccount": "Стварыць новы ўліковы запіс",
|
||||
@@ -140,16 +158,21 @@
|
||||
"social": "Сацыяльныя сеткі",
|
||||
"security": "Бяспека",
|
||||
"lockscreen": "Экран блакіроўкі",
|
||||
"viewActiveSessions": "Паглядзець актыўныя сеансы",
|
||||
"searchHint": "Пошук...",
|
||||
"search": "Пошук",
|
||||
"noResult": "Няма вынікаў",
|
||||
"addCode": "Дадаць код",
|
||||
"scanAQrCode": "Сканіраваць QR-код",
|
||||
"enterDetailsManually": "Увесці падрабязнасці ўручную",
|
||||
"edit": "Рэдагаваць",
|
||||
"share": "Абагуліць",
|
||||
"shareCodes": "Абагуліць коды",
|
||||
"restore": "Аднавіць",
|
||||
"copiedToClipboard": "Скапіявана ў буфер абмену",
|
||||
"copiedNextToClipboard": "Скапіяваць наступны код у буфер абмену",
|
||||
"error": "Памылка",
|
||||
"recoveryKeyCopiedToClipboard": "Ключ аднаўлення скапіяваны ў буфер абмену",
|
||||
"doThisLater": "Зрабіць гэта пазней",
|
||||
"saveKey": "Захаваць ключ",
|
||||
"save": "Захаваць",
|
||||
@@ -164,57 +187,118 @@
|
||||
"changePasswordTitle": "Змяніць пароль",
|
||||
"resetPasswordTitle": "Скінуць пароль",
|
||||
"encryptionKeys": "Ключы шыфравання",
|
||||
"passwordChangedSuccessfully": "Пароль паспяхова зменены",
|
||||
"generatingEncryptionKeys": "Генерацыя ключоў шыфравання...",
|
||||
"continueLabel": "Працягнуць",
|
||||
"insecureDevice": "Небяспечная прылада",
|
||||
"howItWorks": "Як гэта працуе",
|
||||
"logInLabel": "Увайсці",
|
||||
"logout": "Выйсці",
|
||||
"areYouSureYouWantToLogout": "Вы сапраўды хочаце выйсці?",
|
||||
"yesLogout": "Так, выйсці",
|
||||
"exit": "Выхад",
|
||||
"theme": "Тема",
|
||||
"lightTheme": "Светлая",
|
||||
"darkTheme": "Цёмная",
|
||||
"systemTheme": "Сістэманая",
|
||||
"verifyingRecoveryKey": "Праверка ключа аднаўлення...",
|
||||
"recoveryKeyVerified": "Ключ аднаўлення правераны",
|
||||
"recreatePasswordTitle": "Стварыць пароль паўторна",
|
||||
"invalidKey": "Памылковы ключ",
|
||||
"tryAgain": "Паспрабуйце яшчэ раз",
|
||||
"viewRecoveryKey": "Прагледзець ключ аднаўлення",
|
||||
"confirmRecoveryKey": "Пацвердзіце ключ аднаўлення",
|
||||
"confirmYourRecoveryKey": "Пацвердзіце свой ключ аднаўлення",
|
||||
"confirm": "Пацвердзіць",
|
||||
"emailYourLogs": "Адправіць журналы",
|
||||
"pleaseSendTheLogsTo": "Адпраўце журналы на \n{toEmail}",
|
||||
"copyEmailAddress": "Скапіяваць адрас электроннай пошты",
|
||||
"exportLogs": "Экспартаваць журналы",
|
||||
"enterYourRecoveryKey": "Увядзіце свой ключ аднаўлення",
|
||||
"tempErrorContactSupportIfPersists": "Здаецца, што нешта пайшло не так. Паспрабуйце яшчэ раз крыху пазней. Звяжыцеся са службай падтрымкі, калі праблема застанецца.",
|
||||
"networkHostLookUpErr": "Немагчыма падключыцца да сервера Ente. Праверце свае сеткавыя налады. Звяжыцеся са службай падтрымкі, калі праблема застанецца.",
|
||||
"about": "Аб праграме",
|
||||
"weAreOpenSource": "Наша праграма мае адкрыты зыходны код!",
|
||||
"privacy": "Прыватнасць",
|
||||
"terms": "Умовы",
|
||||
"checkForUpdates": "Праверыць абнаўленні",
|
||||
"checkStatus": "Праверыць статус",
|
||||
"downloadUpdate": "Спампаваць",
|
||||
"criticalUpdateAvailable": "Даступна крытычнае абнаўленне",
|
||||
"updateAvailable": "Даступна абнаўленне",
|
||||
"update": "Абнавіць",
|
||||
"checking": "Праверка...",
|
||||
"youAreOnTheLatestVersion": "У вас апошняя версія праграмы",
|
||||
"warning": "Папярэджанне",
|
||||
"exportWarningDesc": "Экспартаваны файл змяшчае канфідэнцыяльныя звесткі. Захоўвайце яго ў надзейным месцы.",
|
||||
"iUnderStand": "Ясна",
|
||||
"@iUnderStand": {
|
||||
"description": "Text for the button to confirm the user understands the warning"
|
||||
},
|
||||
"authToExportCodes": "Прайдзіце аўтэнтыфікацыю, каб экспартаваць свае коды",
|
||||
"importSuccessTitle": "Ура!",
|
||||
"importSuccessDesc": "Коды паспяхова імпартаваны ({count} шт.)!",
|
||||
"@importSuccessDesc": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"description": "The number of codes imported",
|
||||
"type": "int",
|
||||
"example": "1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sorry": "Прабачце",
|
||||
"importFailureDesc": "Не ўдалося прааналізаваць выбраны файл.\nНапішыце нам на support@ente.io, калі вам патрэбная дапамога!",
|
||||
"pendingSyncs": "Папярэджанне",
|
||||
"pendingSyncsWarningBody": "Некаторыя вашы коды не былі зарэзерваваны.\n\nПераканайцеся, што ў вас ёсць іх рэзервовая копія перад выхадам з сістэмы.",
|
||||
"checkInboxAndSpamFolder": "Праверце свае ўваходныя лісты (і спам) для завяршэння праверкі",
|
||||
"tapToEnterCode": "Націсніце, каб увесці код",
|
||||
"resendEmail": "Адправіць ліст яшчэ раз",
|
||||
"manualSort": "Карыстальніцкая",
|
||||
"editOrder": "Рэдагаваць заказ",
|
||||
"mostFrequentlyUsed": "Часта выкарыстоўваюцца",
|
||||
"mostRecentlyUsed": "Нядаўна выкарыстаныя",
|
||||
"activeSessions": "Актыўныя сеансы",
|
||||
"terminateSession": "Перарваць сеанс?",
|
||||
"terminate": "Перарваць",
|
||||
"thisDevice": "Гэта прылада",
|
||||
"thisEmailIsAlreadyInUse": "Гэта электронная пошта ўжо выкарыстоўваецца",
|
||||
"yourVerificationCodeHasExpired": "Ваш праверачны код пратэрмінаваны",
|
||||
"incorrectCode": "Няправільны код",
|
||||
"emailChangedTo": "Электронная пошта зменена на {newEmail}",
|
||||
"authenticationSuccessful": "Аўтэнтыфікацыя паспяхова пройдзена!",
|
||||
"incorrectRecoveryKey": "Няправільны ключ аднаўлення",
|
||||
"enterPassword": "Увядзіце пароль",
|
||||
"selectExportFormat": "Выберыце фармат экспартавання",
|
||||
"exportDialogDesc": "Зашыфраванае экспартаванне будзе абаронена паролем, які вы выберыце.",
|
||||
"encrypted": "Зашыфравана",
|
||||
"plainText": "Звычайны тэкст",
|
||||
"passwordToEncryptExport": "Пароль для шыфравання экспартавання",
|
||||
"export": "Экспартаваць",
|
||||
"useOffline": "Выкарыстоўваць без рэзервовых копій",
|
||||
"signInToBackup": "Увайсці для рэзервовага капіявання кодаў",
|
||||
"singIn": "Увайсці",
|
||||
"sigInBackupReminder": "Экспартуйце свае коды, каб у вас была рэзервовая копія з якой вы заўсёды зможаце аднавіць іх.",
|
||||
"offlineModeWarning": "Вы выбралі працягнуць без рэзервовых копій. Зрабіце рэзервовую копію кодаў уручную, каб не згубіць доступ да іх.",
|
||||
"showLargeIcons": "Паказваць вялікі значкі",
|
||||
"compactMode": "Кампактны рэжым",
|
||||
"shouldHideCode": "Схаваць коды",
|
||||
"doubleTapToViewHiddenCode": "Можна двойчы націснуць на запіс, каб паглядзець код",
|
||||
"focusOnSearchBar": "Сфакусіравацца на пошуку пры запуску праграмы",
|
||||
"confirmUpdatingkey": "Вы сапраўды хочаце абнавіць сакрэтны ключ?",
|
||||
"minimizeAppOnCopy": "Згортваць праграму пры капіяванні",
|
||||
"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."
|
||||
@@ -223,6 +307,22 @@
|
||||
"@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."
|
||||
@@ -231,11 +331,24 @@
|
||||
"@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": "Адсутнічае падключэнне да інтэрнэту",
|
||||
"signOutFromOtherDevices": "Выйсці з іншых прылад",
|
||||
"signOutOtherDevices": "Выйсці на іншых прыладах",
|
||||
"doNotSignOut": "Не выходзіць",
|
||||
"waitingForBrowserRequest": "Чаканне запыту браўзера...",
|
||||
"waitingForVerification": "Чаканне праверкі...",
|
||||
"passkey": "Ключ доступу",
|
||||
"passKeyPendingVerification": "Праверка пакуль яшчэ не завершана",
|
||||
"loginSessionExpired": "Сеанс завяршыўся",
|
||||
"developerSettings": "Налады распрацоўшчыка",
|
||||
"serverEndpoint": "Канцавы пункт сервера",
|
||||
"invalidEndpoint": "Памылковы канцавы пункт",
|
||||
"endpointUpdatedMessage": "Канцавы пункт паспяхова абноўлены",
|
||||
"customEndpoint": "Падключана да {endpoint}",
|
||||
"pinText": "Замацаваць",
|
||||
"unpinText": "Адмацаваць",
|
||||
"pinnedCodeMessage": "{code} быў замацаваны",
|
||||
"unpinnedCodeMessage": "{code} быў адмацаваны",
|
||||
"pinned": "Замацавана",
|
||||
"tags": "Тэгі",
|
||||
"createNewTag": "Стварыць новы тэг",
|
||||
@@ -243,23 +356,38 @@
|
||||
"create": "Стварыць",
|
||||
"editTag": "Рэдагаванне тэг",
|
||||
"deleteTagTitle": "Выдаліць тэг?",
|
||||
"updateNotAvailable": "Абнаўленне недаступна",
|
||||
"viewRawCodes": "Паглядзець неапрацаваныя коды",
|
||||
"rawCodes": "Неапрацаваныя коды",
|
||||
"rawCodeData": "Неапрацаваныя даныя кода",
|
||||
"appLock": "Блакіроўка праграмы",
|
||||
"noSystemLockFound": "Сістэма блакіроўкі не знойдзена",
|
||||
"autoLock": "Аўтаблакіроўка",
|
||||
"immediately": "Адразу",
|
||||
"reEnterPassword": "Увядзіце пароль паўторна",
|
||||
"reEnterPin": "Увядзіце PIN-код яшчэ раз",
|
||||
"next": "Далей",
|
||||
"tooManyIncorrectAttempts": "Занадта шмат няўдалых спроб",
|
||||
"tapToUnlock": "Націсніце для разблакіроўкі",
|
||||
"setNewPassword": "Задаць новы пароль",
|
||||
"deviceLock": "Блакіроўка прылады",
|
||||
"hideContent": "Схаваць змест",
|
||||
"pinLock": "Блакіроўка PIN'ам",
|
||||
"enterPin": "Увядзіце PIN-код",
|
||||
"setNewPin": "Задаць новы PIN",
|
||||
"appLockNotEnabled": "Блакіроўка праграмы не ўключана",
|
||||
"duplicateCodes": "Дублікаты кадоў",
|
||||
"noDuplicates": "✨ Няма дублікатаў",
|
||||
"deduplicateCodes": "Дубліраваныя кады",
|
||||
"deselectAll": "Зняць выбар з усіх",
|
||||
"selectAll": "Выбраць усе",
|
||||
"deleteDuplicates": "Выдаліць дублікаты",
|
||||
"plainHTML": "Звычайны HTML",
|
||||
"tellUsWhatYouThink": "Раскажыце, што вы думаеце",
|
||||
"dropReviewiOS": "Пакіньце водгук у App Store",
|
||||
"dropReviewAndroid": "Пакіньце водгук у Play Store",
|
||||
"giveUsAStarOnGithub": "Адзначце нас зоркай на Github",
|
||||
"loginWithAuthAccount": "Увайдзіце з дапамогай уліковага запісу Auth",
|
||||
"advanced": "Пашыраныя",
|
||||
"algorithm": "Алгарытм",
|
||||
"type": "Тып",
|
||||
|
||||
@@ -173,6 +173,7 @@
|
||||
"invalidQRCode": "Codi QR invàlid",
|
||||
"noRecoveryKeyTitle": "No tens clau de recuperació?",
|
||||
"enterEmailHint": "Introdueix la teva adreça de correu electrònic",
|
||||
"enterNewEmailHint": "Introdueix la teva nova 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",
|
||||
@@ -499,16 +500,22 @@
|
||||
"appLockOfflineModeWarning": "Has triat procedir sense còpies de seguretat. Si oblides el bloqueig de l'aplicació, no podràs accedir a les teves dades.",
|
||||
"duplicateCodes": "Codis duplicats",
|
||||
"noDuplicates": "✨ Sense duplicats",
|
||||
"youveNoDuplicateCodesThatCanBeCleared": "No teniu cap codi duplicat que es puguin esborrar",
|
||||
"deduplicateCodes": "Desduplica codis",
|
||||
"deselectAll": "Desselecciona-ho tot",
|
||||
"selectAll": "Seleccionar-ho tot",
|
||||
"deleteDuplicates": "Elimina duplicats",
|
||||
"plainHTML": "HTML pla",
|
||||
"tellUsWhatYouThink": "Digueu-nos què us sembla",
|
||||
"dropReviewiOS": "Deixa una ressenya a l'App Store",
|
||||
"dropReviewAndroid": "Deixa una ressenya a la Play Store",
|
||||
"supportEnte": "Donar suport a <bold-green>ente</bold-green>",
|
||||
"giveUsAStarOnGithub": "Dona'ns una estrella a Github",
|
||||
"free5GB": "5 GB gratuïts a <bold-green>ente</bold-green> Photos",
|
||||
"loginWithAuthAccount": "Inicieu sessió amb el vostre compte Auth",
|
||||
"freeStorageOffer": "10% de descompte a <bold-green>ente</bold-green> photos",
|
||||
"freeStorageOfferDescription": "Utilitzeu el codi \"AUTH\" per obtenir un 10% de descompte el primer any"
|
||||
"freeStorageOfferDescription": "Utilitzeu el codi \"AUTH\" per obtenir un 10% de descompte el primer any",
|
||||
"advanced": "Avançat",
|
||||
"algorithm": "Algorisme",
|
||||
"type": "Tipus"
|
||||
}
|
||||
@@ -173,6 +173,7 @@
|
||||
"invalidQRCode": "Código QR no válido",
|
||||
"noRecoveryKeyTitle": "¿No tienes la clave de recuperación?",
|
||||
"enterEmailHint": "Introduce tu dirección de correo electrónico",
|
||||
"enterNewEmailHint": "Introduce tu nueva dirección de correo electrónico",
|
||||
"invalidEmailTitle": "Dirección de correo electrónico no válida",
|
||||
"invalidEmailMessage": "Por favor, introduce una dirección de correo electrónico válida.",
|
||||
"deleteAccount": "Eliminar cuenta",
|
||||
@@ -513,5 +514,10 @@
|
||||
"free5GB": "5 GB gratis en <bold-green>ente</bold-green> Fotos",
|
||||
"loginWithAuthAccount": "Inicia sesión con tu cuenta de Auth",
|
||||
"freeStorageOffer": "10% de descuento en <bold-green>ente</bold-green> fotos",
|
||||
"freeStorageOfferDescription": "Usa el cupón \"AUTH\" para obtener un 10% de descuento en el primer año"
|
||||
"freeStorageOfferDescription": "Usa el cupón \"AUTH\" para obtener un 10% de descuento en el primer año",
|
||||
"advanced": "Avanzado",
|
||||
"algorithm": "Algoritmo",
|
||||
"type": "Tipo",
|
||||
"period": "Periodo",
|
||||
"digits": "Dígitos"
|
||||
}
|
||||
@@ -11,6 +11,7 @@
|
||||
"setupFirstAccount": "Lisa oma esimene kasutajakonto",
|
||||
"importScanQrCode": "Skanneeri QR-koodi",
|
||||
"qrCode": "QR-kood",
|
||||
"importEnterSetupKey": "Sisesta seadistusvõti",
|
||||
"importAccountPageTitle": "Sisesta kasutajakonto üksikasjad",
|
||||
"secretCanNotBeEmpty": "Saladus ei tohi jääda tühjaks",
|
||||
"bothIssuerAndAccountCanNotBeEmpty": "Nii kasutajakonto kui väljaandja ei tohi tühjaks jääda",
|
||||
@@ -32,6 +33,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"codeAccountHint": "Kasutajakonto (sina@domeen.com)",
|
||||
"codeTagHint": "Silt",
|
||||
"accountKeyType": "Võtme tüüp",
|
||||
"sessionExpired": "Sessioon on aegunud",
|
||||
@@ -40,7 +42,12 @@
|
||||
},
|
||||
"pleaseLoginAgain": "Palun logi uuesti sisse",
|
||||
"loggingOut": "Väljalogimine...",
|
||||
"timeBasedKeyType": "Ajapõhine (TOTP)",
|
||||
"counterBasedKeyType": "Loenduripõhine (HOTP)",
|
||||
"saveAction": "Salvesta",
|
||||
"nextTotpTitle": "järgmine",
|
||||
"deleteCodeTitle": "Kas kustutame koodi?",
|
||||
"deleteCodeMessage": "Kas sa oled kindel, et soovid selle koodi kustutada? Seda tegevust ei saa tagasi pöörata.",
|
||||
"trash": "Prügikast",
|
||||
"viewLogsAction": "Vaata logisid",
|
||||
"preparingLogsTitle": "Valmistan logisid ette...",
|
||||
@@ -56,7 +63,18 @@
|
||||
"copyEmailAction": "Kopeeri e-posti aadress",
|
||||
"exportLogsAction": "Ekspordi logid",
|
||||
"reportABug": "Teata veast",
|
||||
"contactSupport": "Võtke ühendust klienditoega",
|
||||
"crashAndErrorReporting": "Teatamine vigadest ja kokkujooksmistest",
|
||||
"reportBug": "Teata veast",
|
||||
"emailUsMessage": "Saada meile e-kiri aadressile {email}",
|
||||
"@emailUsMessage": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"contactSupport": "Võta ühendust klienditoega",
|
||||
"rateUsOnStore": "Arvusta meid rakendustepoes: {storeName}",
|
||||
"blog": "Blogi",
|
||||
"verifyPassword": "Korda salasõna",
|
||||
"pleaseWait": "Palun oota...",
|
||||
@@ -70,8 +88,13 @@
|
||||
"changeEmail": "Muuda e-posti aadressi",
|
||||
"changePassword": "Muuda salasõna",
|
||||
"data": "Andmed",
|
||||
"importCodes": "Impordi koode",
|
||||
"importTypePlainText": "Votmindamata tekstina",
|
||||
"importTypeEnteEncrypted": "Ente krüptitud ekspordina",
|
||||
"passwordForDecryptingExport": "Salasõna eksporditud andmete dekrüptimiseks",
|
||||
"passwordEmptyError": "Salasõna väli ei saa olla tühi",
|
||||
"importFromApp": "Impordi koodid rakendusest {appName}",
|
||||
"selectFile": "Vali fail",
|
||||
"ok": "Sobib",
|
||||
"cancel": "Katkesta",
|
||||
"yes": "Jah",
|
||||
|
||||
1
mobile/apps/auth/lib/l10n/arb/app_ms.arb
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -1,28 +1,28 @@
|
||||
{
|
||||
"account": "Tài khoản",
|
||||
"unlock": "Mở khóa",
|
||||
"recoveryKey": "Khóa khôi phục",
|
||||
"counterAppBarTitle": "Bộ Đếm",
|
||||
"recoveryKey": "Mã khôi phục",
|
||||
"counterAppBarTitle": "Đếm ngược",
|
||||
"@counterAppBarTitle": {
|
||||
"description": "Text shown in the AppBar of the Counter Page"
|
||||
},
|
||||
"onBoardingBody": "Sao lưu mã 2FA của bạn một cách an toàn",
|
||||
"onBoardingBody": "Sao lưu an toàn mã 2FA của bạ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",
|
||||
"qrCode": "Mã QR",
|
||||
"importEnterSetupKey": "Nhập khóa thiết lập",
|
||||
"importAccountPageTitle": "Nhập chi tiết tài khoản",
|
||||
"secretCanNotBeEmpty": "Khoá bí mật không được để trống",
|
||||
"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",
|
||||
"secretCanNotBeEmpty": "Không được để trống khóa bí mật",
|
||||
"bothIssuerAndAccountCanNotBeEmpty": "Không được để trống dịch vụ và tài khoản",
|
||||
"incorrectDetails": "Thông tin không chính xác",
|
||||
"pleaseVerifyDetails": "Vui lòng xác minh chi tiết và thử lại",
|
||||
"codeIssuerHint": "Bên phát hành",
|
||||
"codeIssuerHint": "Dịch vụ",
|
||||
"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": "Ghi chú dài tối đa {count} ký tự",
|
||||
"@notesLengthLimit": {
|
||||
"description": "Text to indicate the maximum number of characters allowed for notes",
|
||||
"placeholders": {
|
||||
@@ -33,10 +33,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"codeAccountHint": "Tài khoản (bạn@miền.com)",
|
||||
"codeAccountHint": "Tài khoản (you@domain.com)",
|
||||
"codeTagHint": "Thẻ",
|
||||
"accountKeyType": "Loại khóa",
|
||||
"sessionExpired": "Phiên làm việc đã hết hạn",
|
||||
"sessionExpired": "Phiên đăng nhập đã hết hạn",
|
||||
"@sessionExpired": {
|
||||
"description": "Title of the dialog when the users current session is invalid/expired"
|
||||
},
|
||||
@@ -47,15 +47,15 @@
|
||||
"saveAction": "Lưu",
|
||||
"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.",
|
||||
"deleteCodeMessage": "Bạn có chắc muốn xóa mã này không? Hành động này không thể hoàn tác.",
|
||||
"trashCode": "Xóa mã?",
|
||||
"trashCodeMessage": "Bạn có chắc chắn muốn xóa mã cho {account} không?",
|
||||
"trashCodeMessage": "Bạn có chắc muốn xóa mã cho {account} không?",
|
||||
"trash": "Xóa",
|
||||
"viewLogsAction": "Xem nhật ký",
|
||||
"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ý...",
|
||||
"sendLogsDescription": "Gửi nhật ký để giúp chúng tôi xử lý vấn đề của bạn. 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, bạn vẫn nên xem các nhật ký này trước khi chia sẻ chúng.",
|
||||
"preparingLogsTitle": "Đang ghi nhật ký...",
|
||||
"emailLogsTitle": "Nhật ký email",
|
||||
"emailLogsMessage": "Vui lòng gửi nhật ký tới {email}",
|
||||
"emailLogsMessage": "Vui lòng gửi nhật ký đến {email}",
|
||||
"@emailLogsMessage": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
@@ -65,7 +65,7 @@
|
||||
},
|
||||
"copyEmailAction": "Sao chép email",
|
||||
"exportLogsAction": "Xuất nhật ký",
|
||||
"reportABug": "Báo cáo lỗi",
|
||||
"reportABug": "Báo lỗi",
|
||||
"crashAndErrorReporting": "Báo cáo sự cố & lỗi",
|
||||
"reportBug": "Báo lỗi",
|
||||
"emailUsMessage": "Vui lòng gửi email cho chúng tôi tại {email}",
|
||||
@@ -79,88 +79,88 @@
|
||||
"contactSupport": "Liên hệ hỗ trợ",
|
||||
"rateUsOnStore": "Đánh giá chúng tôi trên {storeName}",
|
||||
"blog": "Blog",
|
||||
"merchandise": "Hàng hóa",
|
||||
"verifyPassword": "Xác nhận mật khẩu",
|
||||
"merchandise": "Vật phẩm",
|
||||
"verifyPassword": "Xác minh mật khẩu",
|
||||
"pleaseWait": "Vui lòng chờ...",
|
||||
"generatingEncryptionKeysTitle": "Đang tạo khóa mã hóa...",
|
||||
"recreatePassword": "Tạo lại mật khẩu",
|
||||
"recreatePasswordMessage": "Thiết bị hiện tại không đủ mạnh để xác minh mật khẩu của bạn, vì vậy chúng tôi cần tạo lại mật khẩu một lần theo cách hoạt động với tất cả các thiết bị.\n\nVui lòng đăng nhập bằng khóa khôi phục và tạo lại mật khẩu của bạn (bạn có thể sử dụng lại cùng một mật khẩu nếu muốn).",
|
||||
"useRecoveryKey": "Dùng khóa khôi phục",
|
||||
"recreatePasswordMessage": "Thiết bị hiện tại không đủ mạnh để xác minh mật khẩu của bạn, nhưng chúng tôi có thể tạo lại để nó hoạt động với tất cả thiết bị.\n\nVui lòng đăng nhập bằng mã khôi phục và tạo lại mật khẩu (bạn có thể dùng lại mật khẩu cũ nếu muốn).",
|
||||
"useRecoveryKey": "Dùng mã khôi phục",
|
||||
"incorrectPasswordTitle": "Mật khẩu không đúng",
|
||||
"welcomeBack": "Chào mừng trở lại!",
|
||||
"emailAlreadyRegistered": "Email đã được đăng kí.",
|
||||
"emailNotRegistered": "Email chưa được đăng kí.",
|
||||
"madeWithLoveAtPrefix": "được làm bằng ❤️ tại ",
|
||||
"emailAlreadyRegistered": "Email đã được đăng ký.",
|
||||
"emailNotRegistered": "Email chưa được đăng ký.",
|
||||
"madeWithLoveAtPrefix": "lập trình bằng ❤️ bởi ",
|
||||
"supportDevs": "Đăng ký <bold-green>ente</bold-green> để hỗ trợ dự án này.",
|
||||
"supportDiscount": "Sử dụng mã giảm giá \"AUTH\" để được giảm 10% trong năm đầu tiên",
|
||||
"changeEmail": "Thay đổi email",
|
||||
"supportDiscount": "Dùng mã \"AUTH\" để được giảm 10% trong năm đầu tiên",
|
||||
"changeEmail": "Đổi email",
|
||||
"changePassword": "Đổi mật khẩu",
|
||||
"data": "Dữ liệu",
|
||||
"importCodes": "Nhập mã",
|
||||
"importTypePlainText": "Văn bản thuần",
|
||||
"importTypeEnteEncrypted": "Xuất key đã được mã hóa",
|
||||
"passwordForDecryptingExport": "Mật khẩu để giải mã xuất",
|
||||
"importTypeEnteEncrypted": "Ente Auth",
|
||||
"passwordForDecryptingExport": "Mật khẩu để giải mã tệp xuất",
|
||||
"passwordEmptyError": "Mật khẩu không thể để trống",
|
||||
"importFromApp": "Nhập mã từ {appName}",
|
||||
"importGoogleAuthGuide": "Xuất dữ liệu tài khoản của bạn từ Google Authenticator sang mã QR bằng tùy chọn \"Chuyển tài khoản\". Sau đó dùng thiết bị khác quét mã QR.",
|
||||
"importGoogleAuthGuide": "Xuất dữ liệu tài khoản Google Authenticator của bạn thành mã QR bằng tùy chọn \"Chuyển tài khoản\". Sau đó, dùng thiết bị khác quét mã QR.",
|
||||
"importSelectJsonFile": "Chọn tệp JSON",
|
||||
"importSelectAppExport": "Chọn {appName} tệp dữ liệu xuất",
|
||||
"importEnteEncGuide": "Chọn tệp JSON được mã hóa đã xuất từ ente",
|
||||
"importRaivoGuide": "Sử dụng tùy chọn \"Xuất OTP sang lưu trữ Zip\" trong cài đặt của Raivo.",
|
||||
"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.",
|
||||
"importSelectAppExport": "Chọn tệp xuất từ {appName}",
|
||||
"importEnteEncGuide": "Chọn tệp JSON Ente đã mã hóa",
|
||||
"importRaivoGuide": "Dùng tùy chọn \"Xuất OTP thành tệp Zip\" của Raivo.\n\nGiải nén tệp Zip đó và nhập tệp JSON.",
|
||||
"importBitwardenGuide": "Dùng tùy chọn \"Xuất kho\" của Bitwarden và nhập tệp JSON không có mã hóa.",
|
||||
"importAegisGuide": "Dùng tùy chọn \"Xuất kho\" của Aegis.\n\nNếu kho của bạn có mã hóa, bạn phải có mật khẩu để giải mã.",
|
||||
"import2FasGuide": "Dùng tùy chọn \"Cài đặt->Sao lưu -Xuất dữ liệu\" của 2FAS.\n\nNếu bản sao lưu của bạn có mã hóa, bạn phải có mật khẩu để giải mã.",
|
||||
"importLastpassGuide": "Dùng tùy chọn \"Chuyển tài khoản\" của 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",
|
||||
"importCodeDelimiterInfo": "Các mã có thể được phân tách bằng một dấu phẩy hoặc một dòng mới",
|
||||
"selectFile": "Chọn tập tin",
|
||||
"emailVerificationToggle": "Email xác thực",
|
||||
"importInstruction": "Vui lòng chọn tệp chứa danh sách mã của bạn có định dạng",
|
||||
"importCodeDelimiterInfo": "Phân tách mã bằng dấu phẩy hoặc xuống dòng",
|
||||
"selectFile": "Chọn tệp",
|
||||
"emailVerificationToggle": "Xác minh email",
|
||||
"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",
|
||||
"authToChangeEmailVerificationSetting": "Vui lòng xác thực để đổ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",
|
||||
"authToViewYourRecoveryKey": "Vui lòng xác thực để xem mã khôi phục",
|
||||
"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",
|
||||
"authToViewSecrets": "Vui lòng xác thực để xem bí mật của bạn",
|
||||
"authToInitiateSignIn": "Vui lòng xác thực để bắt đầu đăng nhập nhằm sao lưu.",
|
||||
"ok": "Đồng ý",
|
||||
"authToChangeYourPassword": "Vui lòng xác thực để đổi mật khẩu",
|
||||
"authToViewSecrets": "Vui lòng xác thực để xem khóa bí mật",
|
||||
"authToInitiateSignIn": "Vui lòng xác thực để bắt đầu sao lưu",
|
||||
"ok": "Được",
|
||||
"cancel": "Hủy",
|
||||
"yes": "Đúng",
|
||||
"yes": "Có",
|
||||
"no": "Không",
|
||||
"email": "Thư điện tử",
|
||||
"email": "Email",
|
||||
"support": "Hỗ trợ",
|
||||
"general": "Tổng quan",
|
||||
"general": "Chung",
|
||||
"settings": "Cài đặt",
|
||||
"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",
|
||||
"existingUser": "Đã có tài khoản",
|
||||
"newUser": "Mới dùng Ente",
|
||||
"delete": "Xóa",
|
||||
"enterYourPasswordHint": "Nhập mật khẩu của bạn",
|
||||
"forgotPassword": "Quên mật khẩu",
|
||||
"oops": "Rất tiếc",
|
||||
"suggestFeatures": "Gợi ý tính năng",
|
||||
"oops": "Ốii!",
|
||||
"suggestFeatures": "Đề xuất tính năng",
|
||||
"faq": "Câu hỏi thường gặp",
|
||||
"somethingWentWrongMessage": "Đã xảy ra lỗi, xin thử lại",
|
||||
"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.",
|
||||
"somethingWentWrongMessage": "Có gì đó không ổn, vui lòng thử lại",
|
||||
"leaveFamily": "Rời khỏi gói gia đình",
|
||||
"leaveFamilyMessage": "Bạn có chắc muốn rời khỏi gói gia đình không?",
|
||||
"inFamilyPlanMessage": "Bạn đang dùng gói gia đình!",
|
||||
"hintForMobile": "Nhấn giữ mã để chỉnh sửa hoặc xóa.",
|
||||
"hintForDesktop": "Nhấn 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",
|
||||
"verifyEmail": "Xác nhận địa chỉ Email",
|
||||
"enterCodeHint": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn",
|
||||
"verifyEmail": "Xác minh email",
|
||||
"enterCodeHint": "Nhập mã 6 chữ số từ\nứ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",
|
||||
"twoFactorAuthTitle": "Xác thực 2 bước",
|
||||
"passkeyAuthTitle": "Xác minh khóa truy cập",
|
||||
"verifyPasskey": "Xác minh khóa truy cập",
|
||||
"loginWithTOTP": "Đăng nhập bằng TOTP",
|
||||
"recoverAccount": "Khôi phục tài khoản",
|
||||
"enterRecoveryKeyHint": "Nhập khóa khôi phục của bạn",
|
||||
"enterRecoveryKeyHint": "Nhập mã khôi phục của bạn",
|
||||
"recover": "Khôi phục",
|
||||
"contactSupportViaEmailMessage": "Vui lòng gửi email đến {email} từ địa chỉ email đã đăng ký của bạn",
|
||||
"@contactSupportViaEmailMessage": {
|
||||
@@ -171,12 +171,13 @@
|
||||
}
|
||||
},
|
||||
"invalidQRCode": "Mã QR không hợp lệ",
|
||||
"noRecoveryKeyTitle": "Không có khóa khôi phục?",
|
||||
"noRecoveryKeyTitle": "Không có mã khôi phục?",
|
||||
"enterEmailHint": "Nhập địa chỉ email của bạn",
|
||||
"enterNewEmailHint": "Nhập địa chỉ email mới của bạn",
|
||||
"invalidEmailTitle": "Địa chỉ email không hợp lệ",
|
||||
"invalidEmailMessage": "Xin vui lòng nhập một địa chỉ email hợp lệ.",
|
||||
"deleteAccount": "Xoá tài khoản",
|
||||
"deleteAccountQuery": "Chúng tôi sẽ rất tiếc khi thấy bạn đi. Bạn đang phải đối mặt với một số vấn đề?",
|
||||
"invalidEmailMessage": "Vui lòng nhập một địa chỉ email hợp lệ.",
|
||||
"deleteAccount": "Xóa tài khoản",
|
||||
"deleteAccountQuery": "Chúng tôi rất tiếc khi thấy bạn ra đi. Có phải bạn gặp vấn đề?",
|
||||
"yesSendFeedbackAction": "Có, gửi phản hồi",
|
||||
"noDeleteAccountAction": "Không, xóa tài khoản",
|
||||
"initiateAccountDeleteTitle": "Vui lòng xác thực để bắt đầu xóa tài khoản",
|
||||
@@ -187,40 +188,40 @@
|
||||
"moderateStrength": "Trung bình",
|
||||
"confirmPassword": "Xác nhận mật khẩu",
|
||||
"close": "Đóng",
|
||||
"oopsSomethingWentWrong": "Rất tiếc, Đã xảy ra lỗi.",
|
||||
"oopsSomethingWentWrong": "Ốii!, có gì đó không ổn.",
|
||||
"selectLanguage": "Chọn ngôn ngữ",
|
||||
"language": "Ngôn ngữ",
|
||||
"social": "Xã hội",
|
||||
"social": "Mạng xã hội",
|
||||
"security": "Bảo mật",
|
||||
"lockscreen": "Màn hình khoá",
|
||||
"authToChangeLockscreenSetting": "Vui lòng xác thực để thay đổi cài đặt màn hình khóa",
|
||||
"lockscreen": "Khóa màn hình",
|
||||
"authToChangeLockscreenSetting": "Vui lòng xác thực để thay đổi cài đặt khóa màn hình",
|
||||
"deviceLockEnablePreSteps": "Để bật khoá thiết bị, vui lòng thiết lập mật khẩu thiết bị hoặc khóa màn hình trong cài đặt hệ thống của bạn.",
|
||||
"viewActiveSessions": "Xem danh sách phiên làm việc hiện tại",
|
||||
"authToViewYourActiveSessions": "Vui lòng xác thực để xem danh sách phiên làm việc của bạn",
|
||||
"viewActiveSessions": "Xem phiên hoạt động",
|
||||
"authToViewYourActiveSessions": "Vui lòng xác thực để xem các phiên hoạt động",
|
||||
"searchHint": "Tìm kiếm...",
|
||||
"search": "Tìm kiếm",
|
||||
"sorryUnableToGenCode": "Rất tiếc, không thể tạo mã cho {issuerName}",
|
||||
"noResult": "Không có kết quả",
|
||||
"addCode": "Thêm mã",
|
||||
"scanAQrCode": "Quét mã QR",
|
||||
"enterDetailsManually": "Nhập chi tiết thủ công",
|
||||
"enterDetailsManually": "Nhập 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ã.",
|
||||
"shareCodesDuration": "Chọn thời hạn 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",
|
||||
"copiedToClipboard": "Đã sao chép vào bộ nhớ tạm",
|
||||
"copiedNextToClipboard": "Đã sao chép mã tiếp theo vào bộ nhớ tạm",
|
||||
"error": "Lỗi",
|
||||
"recoveryKeyCopiedToClipboard": "Đã sao chép khóa khôi phục vào bộ nhớ tạm",
|
||||
"recoveryKeyOnForgotPassword": "Nếu bạn quên mật khẩu, cách duy nhất bạn có thể khôi phục dữ liệu của mình là sử dụng khóa này.",
|
||||
"recoveryKeySaveDescription": "Chúng tôi không lưu trữ khóa này, vui lòng lưu khóa 24 từ này ở nơi an toàn.",
|
||||
"recoveryKeyCopiedToClipboard": "Đã sao chép mã khôi phục vào bộ nhớ tạm",
|
||||
"recoveryKeyOnForgotPassword": "Nếu bạn quên mật khẩu, cách duy nhất để khôi phục dữ liệu của bạn là dùng mã này.",
|
||||
"recoveryKeySaveDescription": "Chúng tôi không lưu trữ mã này, nên hãy lưu nó ở nơi an toàn.",
|
||||
"doThisLater": "Để sau",
|
||||
"saveKey": "Lưu khóa",
|
||||
"saveKey": "Lưu mã",
|
||||
"save": "Lưu",
|
||||
"send": "Gửi",
|
||||
"saveOrSendDescription": "Bạn có muốn lưu vào bộ nhớ (Mặc định lưu vào thư mục Tải về) hoặc chuyển qua ứng dụng khác?",
|
||||
"saveOnlyDescription": "Bạn có muốn lưu vào bộ nhớ không (Mặc định lưu vào thư mục Tải về)?",
|
||||
"saveOrSendDescription": "Bạn muốn lưu vào bộ nhớ (Mặc định là thư mục Tải xuống) hay gửi qua ứng dụng khác?",
|
||||
"saveOnlyDescription": "Bạn muốn lưu vào bộ nhớ (Mặc định là thư mục Tải xuống)?",
|
||||
"back": "Quay lại",
|
||||
"createAccount": "Tạo tài khoản",
|
||||
"passwordStrength": "Độ mạnh mật khẩu: {passwordStrengthValue}",
|
||||
@@ -236,76 +237,76 @@
|
||||
"message": "Password Strength: {passwordStrengthText}"
|
||||
},
|
||||
"password": "Mật khẩu",
|
||||
"signUpTerms": "Tôi đồng ý với <u-terms>điều khoản dịch vụ</u-terms> và <u-policy>chính sách quyền riêng tư</u-policy>",
|
||||
"signUpTerms": "Tôi đồng ý với <u-terms>điều khoản</u-terms> và <u-policy>chính sách bảo mật</u-policy>",
|
||||
"privacyPolicyTitle": "Chính sách bảo mật",
|
||||
"termsOfServicesTitle": "Điều khoản",
|
||||
"encryption": "Mã hóa",
|
||||
"setPasswordTitle": "Đặt mật khẩu",
|
||||
"changePasswordTitle": "Thay đổi mật khẩu",
|
||||
"changePasswordTitle": "Đổi mật khẩu",
|
||||
"resetPasswordTitle": "Đặt lại mật khẩu",
|
||||
"encryptionKeys": "Khóa mã hóa",
|
||||
"passwordWarning": "Chúng tôi không lưu trữ mật khẩu này, vì vậy nếu bạn quên, <underline>chúng tôi không thể giải mã dữ liệu của bạn</underline>",
|
||||
"enterPasswordToEncrypt": "Nhập mật khẩu mà chúng tôi có thể sử dụng để mã hóa dữ liệu của bạn",
|
||||
"enterNewPasswordToEncrypt": "Nhập một mật khẩu mới mà chúng tôi có thể sử dụng để mã hóa dữ liệu của bạn",
|
||||
"passwordChangedSuccessfully": "Thay đổi mật khẩu thành công",
|
||||
"passwordWarning": "Chúng tôi không lưu trữ mật khẩu này, nên nếu bạn quên, <underline>chúng tôi không thể giải mã dữ liệu của bạn</underline>",
|
||||
"enterPasswordToEncrypt": "Vui lòng nhập một mật khẩu dùng để mã hóa dữ liệu của bạn",
|
||||
"enterNewPasswordToEncrypt": "Vui lòng nhập một mật khẩu mới để mã hóa dữ liệu của bạn",
|
||||
"passwordChangedSuccessfully": "Đã thay đổi mật khẩu thành công",
|
||||
"generatingEncryptionKeys": "Đang tạo khóa mã hóa...",
|
||||
"continueLabel": "Tiếp tục",
|
||||
"insecureDevice": "Thiết bị không an toàn",
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Rất tiếc, chúng tôi không thể tạo khóa bảo mật trên thiết bị này.\n\nvui lòng đăng ký từ một thiết bị khác.",
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Rất tiếc, chúng tôi không thể tạo khóa an toàn trên thiết bị này.\n\nVui lòng đăng ký từ một thiết bị khác.",
|
||||
"howItWorks": "Cách thức hoạt động",
|
||||
"ackPasswordLostWarning": "Tôi hiểu rằng việc mất mật khẩu có thể đồng nghĩa với việc mất dữ liệu của tôi vì dữ liệu của tôi được <underline>mã hóa hai đầu</underline>.",
|
||||
"loginTerms": "Bằng cách nhấp vào đăng nhập, tôi đồng ý với <u-terms>điều khoản dịch vụ</u-terms> và <u-policy>chính sách quyền riêng tư</u-policy>",
|
||||
"ackPasswordLostWarning": "Tôi hiểu rằng nếu mất mật khẩu, dữ liệu của tôi sẽ mất vì nó được <underline>mã hóa đầu cuối</underline>.",
|
||||
"loginTerms": "Nhấn vào đăng nhập, tôi đồng ý với <u-terms>điều khoản</u-terms> và <u-policy>chính sách bảo mật</u-policy>",
|
||||
"logInLabel": "Đăng nhập",
|
||||
"logout": "Đăng xuất",
|
||||
"areYouSureYouWantToLogout": "Bạn có chắc chắn muốn đăng xuất?",
|
||||
"areYouSureYouWantToLogout": "Bạn có chắc muốn đăng xuất không?",
|
||||
"yesLogout": "Có, đăng xuất",
|
||||
"exit": "Thoát",
|
||||
"theme": "Chủ đề",
|
||||
"lightTheme": "Sáng",
|
||||
"darkTheme": "Tối",
|
||||
"systemTheme": "Hệ thống",
|
||||
"verifyingRecoveryKey": "Đang xác minh khóa khôi phục...",
|
||||
"recoveryKeyVerified": "Khóa khôi phục đã được xác thực",
|
||||
"recoveryKeySuccessBody": "Tuyệt vời! Khóa khôi phục của bạn hợp lệ. Cảm ơn bạn đã xác minh.\n\nHãy nhớ sao lưu khóa khôi phục của bạn một cách an toàn.",
|
||||
"invalidRecoveryKey": "Khóa khôi phục bạn đã nhập không hợp lệ. Vui lòng đảm bảo rằng nó chứa 24 từ và kiểm tra chính tả của từng từ.\n\nNếu bạn đã nhập mã khôi phục cũ hơn, hãy đảm bảo mã đó dài 64 ký tự và kiểm tra từng ký tự.",
|
||||
"systemTheme": "Giống hệ thống",
|
||||
"verifyingRecoveryKey": "Đang xác minh mã khôi phục...",
|
||||
"recoveryKeyVerified": "Mã khôi phục đã được xác minh",
|
||||
"recoveryKeySuccessBody": "Tuyệt! Mã khôi phục của bạn hợp lệ. Cảm ơn đã xác minh.\n\nNhớ lưu giữ mã khôi phục của bạn ở nơi an toàn.",
|
||||
"invalidRecoveryKey": "Mã khôi phục không hợp lệ. Vui lòng đảm bảo nó chứa 24 từ, và đúng chính tả từng từ.\n\nNếu bạn nhập loại mã khôi phục cũ, hãy đảm bảo nó dài 64 ký tự, và kiểm tra từng ký tự.",
|
||||
"recreatePasswordTitle": "Tạo lại mật khẩu",
|
||||
"recreatePasswordBody": "Thiết bị hiện tại không đủ mạnh để xác minh mật khẩu của bạn nhưng chúng tôi có thể tạo lại mật khẩu theo cách hoạt động với tất cả các thiết bị.\n\nVui lòng đăng nhập bằng khóa khôi phục và tạo lại mật khẩu của bạn (bạn có thể sử dụng lại cùng một mật khẩu nếu muốn).",
|
||||
"invalidKey": "Khoá không hợp lệ",
|
||||
"recreatePasswordBody": "Thiết bị hiện tại không đủ mạnh để xác minh mật khẩu của bạn, nhưng chúng tôi có thể tạo lại để nó hoạt động với tất cả thiết bị.\n\nVui lòng đăng nhập bằng mã khôi phục và tạo lại mật khẩu (bạn có thể dùng lại mật khẩu cũ nếu muốn).",
|
||||
"invalidKey": "Mã không hợp lệ",
|
||||
"tryAgain": "Thử lại",
|
||||
"viewRecoveryKey": "Hiển thị khóa khôi phục",
|
||||
"confirmRecoveryKey": "Xác nhận khóa khôi phục",
|
||||
"recoveryKeyVerifyReason": "Nếu bạn quên mật khẩu, khóa khôi phục là cách duy nhất để khôi phục ảnh của bạn. Bạn có thể tìm thấy khóa khôi phục của mình trong Cài đặt > Tài khoản.\n\nVui lòng nhập khóa khôi phục của bạn tại đây để xác minh rằng bạn đã lưu chính xác.",
|
||||
"confirmYourRecoveryKey": "Xác nhận khóa khôi phục",
|
||||
"viewRecoveryKey": "Xem mã khôi phục",
|
||||
"confirmRecoveryKey": "Xác nhận mã khôi phục",
|
||||
"recoveryKeyVerifyReason": "Mã khôi phục là cách duy nhất để khôi phục ảnh của bạn nếu bạn quên mật khẩu. Bạn có thể xem mã khôi phục của mình trong Cài đặt > Tài khoản.\n\nVui lòng nhập mã khôi phục của bạn ở đây để xác minh rằng bạn đã lưu nó đúng cách.",
|
||||
"confirmYourRecoveryKey": "Xác nhận mã khôi phục của bạn",
|
||||
"confirm": "Xác nhận",
|
||||
"emailYourLogs": "Gửi email nhật ký của bạn",
|
||||
"emailYourLogs": "Gửi nhật ký qua email",
|
||||
"pleaseSendTheLogsTo": "Vui lòng gửi nhật ký đến \n{toEmail}",
|
||||
"copyEmailAddress": "Sao chép địa chỉ email",
|
||||
"exportLogs": "Xuất nhật ký",
|
||||
"enterYourRecoveryKey": "Nhập khóa khôi phục của bạn",
|
||||
"tempErrorContactSupportIfPersists": "Có vẻ như đã xảy ra sự cố. Vui lòng thử lại sau một thời gian. Nếu lỗi vẫn tiếp diễn, vui lòng liên hệ với nhóm hỗ trợ của chúng tôi.",
|
||||
"networkHostLookUpErr": "Không thể kết nối đến Ente, vui lòng kiểm tra lại kết nối mạng. Nếu vẫn còn lỗi, xin vui lòng liên hệ hỗ trợ.",
|
||||
"networkConnectionRefusedErr": "Không thể kết nối đến Ente, vui lòng thử lại sau. Nếu vẫn còn lỗi, xin vui lòng liên hệ hỗ trợ.",
|
||||
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Có vẻ như đã xảy ra sự cố. Vui lòng thử lại sau một thời gian. Nếu lỗi vẫn tiếp diễn, vui lòng liên hệ với nhóm hỗ trợ của chúng tôi.",
|
||||
"about": "Về chúng tôi",
|
||||
"weAreOpenSource": "Chúng tôi có mã nguồn mở!",
|
||||
"enterYourRecoveryKey": "Nhập mã khôi phục của bạn",
|
||||
"tempErrorContactSupportIfPersists": "Có vẻ đã xảy ra sự cố. Vui lòng thử lại sau ít phút. Nếu lỗi vẫn tiếp diễn, hãy liên hệ với đội ngũ hỗ trợ của chúng tôi.",
|
||||
"networkHostLookUpErr": "Không thể kết nối với Ente, vui lòng kiểm tra cài đặt mạng của bạn và liên hệ với bộ phận hỗ trợ nếu lỗi vẫn tiếp diễn.",
|
||||
"networkConnectionRefusedErr": "Không thể kết nối với Ente, vui lòng thử lại sau ít phút. Nếu lỗi vẫn tiếp diễn, hãy liên hệ với bộ phận hỗ trợ.",
|
||||
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Có vẻ đã xảy ra sự cố. Vui lòng thử lại sau ít phút. Nếu lỗi vẫn tiếp diễn, hãy liên hệ với đội ngũ hỗ trợ của chúng tôi.",
|
||||
"about": "Giới thiệu",
|
||||
"weAreOpenSource": "Chúng tôi là mã nguồn mở!",
|
||||
"privacy": "Riêng tư",
|
||||
"terms": "Điều khoản",
|
||||
"checkForUpdates": "Kiểm tra cập nhật",
|
||||
"checkStatus": "Kiểm tra trạng thái",
|
||||
"downloadUpdate": "Tải xuống",
|
||||
"criticalUpdateAvailable": "Đã có bản cập nhật quan trọng",
|
||||
"updateAvailable": "Đã có bản cập nhật",
|
||||
"criticalUpdateAvailable": "Cập nhật quan trọng có sẵn",
|
||||
"updateAvailable": "Cập nhật có sẵn",
|
||||
"update": "Cập nhật",
|
||||
"checking": "Đang kiểm tra...",
|
||||
"youAreOnTheLatestVersion": "Bạn đang sử dụng phiên bản mới nhất",
|
||||
"warning": "Cánh báo",
|
||||
"exportWarningDesc": "Tệp đã xuất chứa thông tin nhạy cảm. Hãy lưu trữ tệp này một cách an toàn.",
|
||||
"warning": "Cảnh báo",
|
||||
"exportWarningDesc": "Tệp xuất chứa thông tin nhạy cảm. Hãy lưu trữ tệp này một cách an toàn.",
|
||||
"iUnderStand": "Tôi hiểu",
|
||||
"@iUnderStand": {
|
||||
"description": "Text for the button to confirm the user understands the warning"
|
||||
},
|
||||
"authToExportCodes": "Vui lòng xác thực để xuất mã của bạn",
|
||||
"importSuccessTitle": "Hoan hô!",
|
||||
"authToExportCodes": "Vui lòng xác thực để xuất mã",
|
||||
"importSuccessTitle": "Tuyệt!",
|
||||
"importSuccessDesc": "Bạn đã nhập {count} mã!",
|
||||
"@importSuccessDesc": {
|
||||
"placeholders": {
|
||||
@@ -316,14 +317,14 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"sorry": "Xin lỗi",
|
||||
"importFailureDesc": "Không thể phân tích cú pháp tệp đã chọn.\nVui lòng viết thư cho support@ente.io nếu bạn cần trợ giúp!",
|
||||
"pendingSyncs": "Cánh báo",
|
||||
"sorry": "Rất tiếc",
|
||||
"importFailureDesc": "Không thể phân tích tệp đã chọn.\nVui lòng liên hệ support@ente.io nếu bạn cần trợ giúp!",
|
||||
"pendingSyncs": "Cảnh báo",
|
||||
"pendingSyncsWarningBody": "Một số mã của bạn chưa được sao lưu.\n\nVui lòng đảm bảo rằng bạn có bản sao lưu cho các mã này trước khi đăng xuất.",
|
||||
"checkInboxAndSpamFolder": "Vui lòng kiểm tra hộp thư đến (và thư rác) của bạn để hoàn tất xác minh",
|
||||
"tapToEnterCode": "Chạm để nhập mã",
|
||||
"checkInboxAndSpamFolder": "Vui lòng kiểm tra hộp thư đến (và thư rác) để hoàn tất xác minh",
|
||||
"tapToEnterCode": "Nhấn để nhập mã",
|
||||
"resendEmail": "Gửi lại email",
|
||||
"weHaveSendEmailTo": "Chúng tôi đã gửi thư đến <green>{email}</green>",
|
||||
"weHaveSendEmailTo": "Chúng tôi đã gửi một email đến <green>{email}</green>",
|
||||
"@weHaveSendEmailTo": {
|
||||
"description": "Text to indicate that we have sent a mail to the user",
|
||||
"placeholders": {
|
||||
@@ -335,57 +336,57 @@
|
||||
}
|
||||
},
|
||||
"manualSort": "Tùy chỉnh",
|
||||
"editOrder": "Chỉnh sửa đơn hàng",
|
||||
"editOrder": "Chỉnh sửa thứ tự",
|
||||
"mostFrequentlyUsed": "Thường dùng",
|
||||
"mostRecentlyUsed": "Dùng gần đây",
|
||||
"activeSessions": "Các phiên làm việc hiện tại",
|
||||
"somethingWentWrongPleaseTryAgain": "Phát hiện có lỗi, xin thử lại",
|
||||
"thisWillLogYouOutOfThisDevice": "Thao tác này sẽ đăng xuất bạn khỏi thiết bị này!",
|
||||
"thisWillLogYouOutOfTheFollowingDevice": "Thao tác này sẽ đăng xuất bạn khỏi thiết bị sau:",
|
||||
"activeSessions": "Phiên hoạt động",
|
||||
"somethingWentWrongPleaseTryAgain": "Có gì đó không ổn, vui lòng thử lại",
|
||||
"thisWillLogYouOutOfThisDevice": "Bạn sẽ đăng xuất khỏi thiết bị này!",
|
||||
"thisWillLogYouOutOfTheFollowingDevice": "Bạn cũng sẽ đăng xuất khỏi những thiết bị sau:",
|
||||
"terminateSession": "Kết thúc phiên?",
|
||||
"terminate": "Kết thúc",
|
||||
"thisDevice": "Thiết bị này",
|
||||
"toResetVerifyEmail": "Để đặt lại mật khẩu, vui lòng xác minh email của bạn trước.",
|
||||
"thisEmailIsAlreadyInUse": "Email này đã được sử dụng",
|
||||
"verificationFailedPleaseTryAgain": "Mã xác nhận thất bại. Vui lòng thử lại",
|
||||
"verificationFailedPleaseTryAgain": "Xác minh không thành công, vui lòng thử lại",
|
||||
"yourVerificationCodeHasExpired": "Mã xác minh của bạn đã hết hạn",
|
||||
"incorrectCode": "Mã không chính xác",
|
||||
"sorryTheCodeYouveEnteredIsIncorrect": "Xin lỗi, mã bạn đã nhập không chính xác",
|
||||
"emailChangedTo": "Thay đổi email thành {newEmail}",
|
||||
"authenticationFailedPleaseTryAgain": "Xác thực lỗi, vui lòng thử lại",
|
||||
"sorryTheCodeYouveEnteredIsIncorrect": "Rất tiếc, mã bạn nhập không chính xác",
|
||||
"emailChangedTo": "Email đã được đổi thành {newEmail}",
|
||||
"authenticationFailedPleaseTryAgain": "Xác thực không thành công, vui lòng thử lại",
|
||||
"authenticationSuccessful": "Xác thực thành công!",
|
||||
"twofactorAuthenticationSuccessfullyReset": "Xác thực hai bước được khôi phục thành công",
|
||||
"incorrectRecoveryKey": "Khóa khôi phục không chính xác",
|
||||
"theRecoveryKeyYouEnteredIsIncorrect": "Khóa khôi phục bạn đã nhập không chính xác",
|
||||
"twofactorAuthenticationSuccessfullyReset": "Xác thực 2 bước đã được đặt lại thành công",
|
||||
"incorrectRecoveryKey": "Mã khôi phục không chính xác",
|
||||
"theRecoveryKeyYouEnteredIsIncorrect": "Mã khôi phục bạn nhập không chính xác",
|
||||
"enterPassword": "Nhập mật khẩu",
|
||||
"selectExportFormat": "Chọn định dạng dữ liệu xuất",
|
||||
"exportDialogDesc": "Xuất dữ liệu được mã hóa sẽ được bảo vệ bằng mật khẩu bạn chọn.",
|
||||
"encrypted": "Đã mã hóa",
|
||||
"exportDialogDesc": "Dữ liệu xuất được mã hóa sẽ được bảo vệ bằng mật khẩu bạn chọn.",
|
||||
"encrypted": "Được mã hóa",
|
||||
"plainText": "Văn bản thuần",
|
||||
"passwordToEncryptExport": "Mật khẩu để giải mã dữ liệu xuất",
|
||||
"export": "Xuất dữ liệu",
|
||||
"export": "Xuất",
|
||||
"useOffline": "Sử dụng mà không sao lưu",
|
||||
"signInToBackup": "Đăng nhập để sao lưu mã của bạn",
|
||||
"singIn": "Đăng nhập",
|
||||
"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",
|
||||
"offlineModeWarning": "Bạn đã chọn tiếp tục mà không 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 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",
|
||||
"confirmUpdatingkey": "Bạn có chắc chắn muốn cập nhật khóa bí mật không?",
|
||||
"confirmUpdatingkey": "Bạn có chắc muốn cập nhật khóa bí mật không?",
|
||||
"minimizeAppOnCopy": "Thu nhỏ khi sao chép",
|
||||
"editCodeAuthMessage": "Xác minh để chỉnh sửa mã",
|
||||
"deleteCodeAuthMessage": "Xác minh để xóa mã",
|
||||
"showQRAuthMessage": "Xác minh để hiển thị mã QR",
|
||||
"editCodeAuthMessage": "Xác thực để sửa mã",
|
||||
"deleteCodeAuthMessage": "Xác thực để xóa mã",
|
||||
"showQRAuthMessage": "Xác thực để hiện mã QR",
|
||||
"confirmAccountDeleteTitle": "Xác nhận xóa tài khoản",
|
||||
"confirmAccountDeleteMessage": "Tài khoản này được liên kết với các ứng dụng Ente trên các nền tảng khác, nếu bạn có sử dụng.\n\nDữ liệu đã tải lên của bạn, trên mọi nền tảng, sẽ bị lên lịch xóa và tài khoản của bạn sẽ bị xóa vĩnh viễn.",
|
||||
"androidBiometricHint": "Xác định danh tính",
|
||||
"confirmAccountDeleteMessage": "Tài khoản này được liên kết với các ứng dụng Ente khác, nếu bạn có dùng.\n\nDữ liệu bạn đã tải lên, trên tất cả ứng dụng Ente, sẽ được lên lịch để xóa, và tài khoản của bạn sẽ bị xóa vĩnh viễn.",
|
||||
"androidBiometricHint": "Xác minh danh tính",
|
||||
"@androidBiometricHint": {
|
||||
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidBiometricNotRecognized": "Không nhận dạng được. Vui lòng thử lại.",
|
||||
"androidBiometricNotRecognized": "Không nhận diện được. Thử lại.",
|
||||
"@androidBiometricNotRecognized": {
|
||||
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
@@ -413,19 +414,19 @@
|
||||
"@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": "Chuyển đến cài đặt",
|
||||
"goToSettings": "Đi đến cài đặt",
|
||||
"@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": "Xác thực sinh trắc học chưa được thiết lập trên thiết bị của bạn. Đi tới 'Cài đặt > Bảo mật' để thêm xác thực sinh trắc học.",
|
||||
"androidGoToSettingsDescription": "Xác thực sinh trắc học chưa được thiết lập trên thiết bị của bạn. Đi đến 'Cài đặt > Bảo mật' để thêm xác thực sinh trắc học.",
|
||||
"@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": "Xác thực sinh trắc học bị vô hiệu hóa. Vui lòng khóa và mở khóa màn hình của bạn để kích hoạt nó.",
|
||||
"iOSLockOut": "Xác thực sinh trắc học đã bị vô hiệu hóa. Vui lòng khóa và mở khóa màn hình của bạn để kích hoạt lại.",
|
||||
"@iOSLockOut": {
|
||||
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
|
||||
},
|
||||
"iOSGoToSettingsDescription": "Xác thực sinh trắc học chưa được thiết lập trên thiết bị của bạn. Vui lòng bật Touch ID hoặc Face ID trên điện thoại của bạn.",
|
||||
"iOSGoToSettingsDescription": "Xác thực sinh trắc học chưa được thiết lập trên thiết bị của bạn. Vui lòng kích hoạt Touch ID hoặc 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."
|
||||
},
|
||||
@@ -436,25 +437,25 @@
|
||||
"noInternetConnection": "Không có kết nối Internet",
|
||||
"pleaseCheckYourInternetConnectionAndTryAgain": "Vui lòng kiểm tra kết nối internet của bạn và thử lại.",
|
||||
"signOutFromOtherDevices": "Đăng xuất khỏi các thiết bị khác",
|
||||
"signOutOtherBody": "Nếu bạn cho rằng ai đó có thể biết mật khẩu của mình, bạn có thể buộc đăng xuất tất cả các thiết bị khác đang sử dụng tài khoản của mình.",
|
||||
"signOutOtherBody": "Nếu bạn nghĩ rằng ai đó biết mật khẩu của bạn, hãy ép tài khoản của bạn đăng xuất khỏi tất cả thiết bị khác đang sử dụng.",
|
||||
"signOutOtherDevices": "Đăng xuất khỏi các thiết bị khác",
|
||||
"doNotSignOut": "Không được đăng xuất",
|
||||
"hearUsWhereTitle": "Bạn biết đến Ente bằng cách nào? (không bắt buộc)",
|
||||
"hearUsExplanation": "Chúng tôi không theo dõi lượt cài đặt ứng dụng. Sẽ rất hữu ích nếu bạn cho chúng tôi biết nơi bạn tìm thấy chúng tôi!",
|
||||
"recoveryKeySaved": "Đã lưu khoá dự phòng vào thư mục Tải về!",
|
||||
"doNotSignOut": "Không đăng xuất",
|
||||
"hearUsWhereTitle": "Bạn biết Ente từ đâu? (tùy chọn)",
|
||||
"hearUsExplanation": "Chúng tôi không theo dõi cài đặt ứng dụng, nên nếu bạn bật mí bạn tìm thấy chúng tôi từ đâu sẽ rất hữu ích!",
|
||||
"recoveryKeySaved": "Đã lưu mã khôi phục vào thư mục Tải xuống!",
|
||||
"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",
|
||||
"waitingForVerification": "Đang chờ xác minh...",
|
||||
"passkey": "Khóa truy cập",
|
||||
"passKeyPendingVerification": "Xác minh vẫn đang chờ",
|
||||
"loginSessionExpired": "Phiên đăng nhập đã hết hạn",
|
||||
"loginSessionExpiredDetails": "Phiên đăng nhập của bạn đã hết hạn. Vui lòng đăng nhập lại.",
|
||||
"developerSettingsWarning": "Bạn có chắc muốn thay đổi cài đặt Nhà phát triển không?",
|
||||
"developerSettings": "Cài đặt 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",
|
||||
"endpointUpdatedMessage": "Điểm cuối đã được cập nhật thành công",
|
||||
"customEndpoint": "Đã kết nối với {endpoint}",
|
||||
"pinText": "Ghim",
|
||||
"unpinText": "Bỏ ghim",
|
||||
"pinnedCodeMessage": "{code} đã được ghim",
|
||||
@@ -466,37 +467,37 @@
|
||||
"create": "Tạo",
|
||||
"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.",
|
||||
"deleteTagMessage": "Bạn có chắc muốn xóa thẻ này không? Hành động này không thể hoàn tá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",
|
||||
"rawCodeData": "Dữ liệu thô",
|
||||
"viewRawCodes": "Xem mã thô",
|
||||
"rawCodes": "Mã thô",
|
||||
"rawCodeData": "Dữ liệu mã thô",
|
||||
"appLock": "Khóa ứng dụng",
|
||||
"noSystemLockFound": "Không thấy khoá hệ thống",
|
||||
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Để bật khoá ứng dụng, vui lòng thiết lập mật khẩu thiết bị hoặc khóa màn hình trong cài đặt hệ thống của bạn.",
|
||||
"noSystemLockFound": "Không tìm thấy khóa hệ thống",
|
||||
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Để bật khóa ứng dụng, vui lòng thiết lập mã khóa thiết bị hoặc khóa màn hình trong cài đặt hệ thống của bạn.",
|
||||
"autoLock": "Tự động khóa",
|
||||
"immediately": "Tức thì",
|
||||
"immediately": "Lập tức",
|
||||
"reEnterPassword": "Nhập lại mật khẩu",
|
||||
"reEnterPin": "Nhập lại mã PIN",
|
||||
"next": "Tiếp theo",
|
||||
"tooManyIncorrectAttempts": "Quá nhiều lần thử không chính xác",
|
||||
"reEnterPin": "Nhập lại PIN",
|
||||
"next": "Kế tiếp",
|
||||
"tooManyIncorrectAttempts": "Thử sai nhiều lần",
|
||||
"tapToUnlock": "Nhấn để mở khóa",
|
||||
"setNewPassword": "Đặt lại mật khẩu",
|
||||
"setNewPassword": "Đặt mật khẩu mới",
|
||||
"deviceLock": "Khóa thiết bị",
|
||||
"hideContent": "Ẩn nội dung",
|
||||
"hideContentDescriptionAndroid": "Ẩn nội dung khi chuyển ứng dụng và chặn chụp màn hình",
|
||||
"hideContentDescriptioniOS": "Ẩn nội dung khi chuyển ứng dụng",
|
||||
"autoLockFeatureDescription": "Thời gian ứng dụng tự khoá sau khi ở trạng thái nền",
|
||||
"appLockDescription": "Chọn giữa màn hình khoá mặc định của thiết bị và màn hình khoá tự chọn dùng mã PIN hoặc mật khẩu.",
|
||||
"pinLock": "Mã PIN",
|
||||
"enterPin": "Nhập mã PIN",
|
||||
"setNewPin": "Đổi mã PIN",
|
||||
"importFailureDescNew": "Không thể phân tích file đã chọn.",
|
||||
"hideContentDescriptioniOS": "Ẩn nội dung ứng dụng trong trình chuyển đổi ứng dụng",
|
||||
"autoLockFeatureDescription": "Sau thời gian này, ứng dụng sẽ khóa sau khi được chạy ở chế độ nền",
|
||||
"appLockDescription": "Chọn giữa màn hình khóa mặc định của thiết bị và màn hình khóa tùy chỉnh với PIN hoặc mật khẩu.",
|
||||
"pinLock": "Khóa PIN",
|
||||
"enterPin": "Nhập PIN",
|
||||
"setNewPin": "Đặt PIN mới",
|
||||
"importFailureDescNew": "Không thể phân tích tệp đã 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.",
|
||||
"authToViewPasskey": "Vui lòng xác thực để xem mã truy cập",
|
||||
"appLockOfflineModeWarning": "Bạn đã chọn tiếp tục mà không sao lưu. Nếu bạn quên khóa ứng dụng, bạn sẽ không thể truy cập dữ liệu của mình.",
|
||||
"duplicateCodes": "Mã trùng lặp",
|
||||
"noDuplicates": "✨ Không có trùng lặp",
|
||||
"youveNoDuplicateCodesThatCanBeCleared": "Bạn không có mã nào bị trùng để xóa",
|
||||
@@ -505,13 +506,18 @@
|
||||
"selectAll": "Chọn tất cả",
|
||||
"deleteDuplicates": "Xóa trùng lặp",
|
||||
"plainHTML": "HTML thuần",
|
||||
"tellUsWhatYouThink": "Hãy cho chúng tôi biết bạn nghĩ gì",
|
||||
"tellUsWhatYouThink": "Cho biết bạn nghĩ gì",
|
||||
"dropReviewiOS": "Đánh giá ngay trên App Store",
|
||||
"dropReviewAndroid": "Đánh giá ngay trên Play Store",
|
||||
"supportEnte": "Hỗ trợ <bold-green>ente</bold-green>",
|
||||
"giveUsAStarOnGithub": "Cho chúng tôi ngôi sao trên Github",
|
||||
"free5GB": "Miễn phí 5GB cho <bold-green>ente</bold-green> Hình ảnh",
|
||||
"giveUsAStarOnGithub": "Tặng sao trên GitHub",
|
||||
"free5GB": "Miễn phí 5GB cho <bold-green>ente</bold-green> Photos",
|
||||
"loginWithAuthAccount": "Đăng nhập bằng tài khoản Ente Auth",
|
||||
"freeStorageOffer": "Giảm giá 10% cho <bold-green>ente</bold-green> Hình ảnh",
|
||||
"freeStorageOfferDescription": "Sử dụng mã giảm giá \"AUTH\" để được giảm 10% trong năm đầu tiên"
|
||||
"freeStorageOffer": "Giảm giá 10% cho <bold-green>ente</bold-green> Photos",
|
||||
"freeStorageOfferDescription": "Dùng mã \"AUTH\" để được giảm 10% trong năm đầu tiên",
|
||||
"advanced": "Nâng cao",
|
||||
"algorithm": "Thuật toán",
|
||||
"type": "Loại",
|
||||
"period": "Thời hạn",
|
||||
"digits": "Chữ số"
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
import "package:ente_auth/l10n/arb/app_localizations.dart"
|
||||
show AppLocalizations;
|
||||
import "package:flutter/widgets.dart";
|
||||
import "package:flutter_gen/gen_l10n/app_localizations.dart";
|
||||
|
||||
export "package:flutter_gen/gen_l10n/app_localizations.dart";
|
||||
export "package:ente_auth/l10n/arb/app_localizations.dart"
|
||||
show AppLocalizations;
|
||||
|
||||
extension AppLocalizationsX on BuildContext {
|
||||
AppLocalizations get l10n => AppLocalizations.of(this);
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'dart:convert';
|
||||
|
||||
class BillingPlans {
|
||||
final List<BillingPlan> plans;
|
||||
final FreePlan freePlan;
|
||||
final FreePlan? freePlan;
|
||||
|
||||
BillingPlans({
|
||||
required this.plans,
|
||||
@@ -12,12 +12,12 @@ class BillingPlans {
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
'plans': plans.map((x) => x.toMap()).toList(),
|
||||
'freePlan': freePlan.toMap(),
|
||||
'freePlan': freePlan?.toMap(),
|
||||
};
|
||||
}
|
||||
|
||||
static fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return null;
|
||||
static BillingPlans fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return BillingPlans(plans: [], freePlan: null);
|
||||
|
||||
return BillingPlans(
|
||||
plans: List<BillingPlan>.from(
|
||||
@@ -49,7 +49,7 @@ class FreePlan {
|
||||
};
|
||||
}
|
||||
|
||||
static fromMap(Map<String, dynamic>? map) {
|
||||
static FreePlan? fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return null;
|
||||
|
||||
return FreePlan(
|
||||
@@ -91,7 +91,7 @@ class BillingPlan {
|
||||
};
|
||||
}
|
||||
|
||||
static fromMap(Map<String, dynamic>? map) {
|
||||
static BillingPlan? fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return null;
|
||||
|
||||
return BillingPlan(
|
||||
|
||||
@@ -332,7 +332,7 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
|
||||
},
|
||||
);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
barrierDismissible: false,
|
||||
);
|
||||
},
|
||||
|
||||
@@ -75,7 +75,7 @@ class CodeDisplayStore {
|
||||
builder: (BuildContext context) {
|
||||
return EditTagDialog(tag: tag);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
barrierDismissible: false,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -147,12 +147,13 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
||||
),
|
||||
),
|
||||
child: DottedBorder(
|
||||
padding: EdgeInsets.zero,
|
||||
borderType: BorderType.RRect,
|
||||
strokeWidth: 1,
|
||||
color: const Color(0xFF6B6B6B),
|
||||
dashPattern: const [6, 6],
|
||||
radius: const Radius.circular(8),
|
||||
options: const RoundedRectDottedBorderOptions(
|
||||
padding: EdgeInsets.zero,
|
||||
strokeWidth: 1,
|
||||
color: Color(0xFF6B6B6B),
|
||||
dashPattern: [6, 6],
|
||||
radius: Radius.circular(8),
|
||||
),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: Stack(
|
||||
@@ -314,7 +315,13 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
||||
await _recoveryKeyFile.delete();
|
||||
}
|
||||
_recoveryKeyFile.writeAsStringSync(recoveryKey);
|
||||
await Share.shareXFiles([XFile(_recoveryKeyFile.path)]);
|
||||
await SharePlus.instance.share(
|
||||
ShareParams(
|
||||
files: [
|
||||
XFile(_recoveryKeyFile.path),
|
||||
],
|
||||
),
|
||||
);
|
||||
Future.delayed(const Duration(milliseconds: 500), () {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
|
||||
@@ -82,7 +82,7 @@ class _SessionsPageState extends State<SessionsPage> {
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.8),
|
||||
.withValues(alpha: 0.8),
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
@@ -95,7 +95,7 @@ class _SessionsPageState extends State<SessionsPage> {
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.8),
|
||||
.withValues(alpha: 0.8),
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -54,12 +54,12 @@ class BannerWidget extends StatelessWidget {
|
||||
dashColor = const Color.fromRGBO(255, 191, 12, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color(0xFFFDB816).withOpacity(0.1),
|
||||
color: const Color(0xFFFDB816).withValues(alpha: 0.1),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 80,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color(0xFFFDB816).withOpacity(0.2),
|
||||
color: const Color(0xFFFDB816).withValues(alpha: 0.2),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -71,12 +71,13 @@ class BannerWidget extends StatelessWidget {
|
||||
dashColor = const Color.fromRGBO(233, 233, 233, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(78, 78, 78, 1).withOpacity(0.2),
|
||||
color: const Color.fromRGBO(78, 78, 78, 1).withValues(alpha: 0.2),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(23, 22, 22, 0.30).withOpacity(0.1),
|
||||
color:
|
||||
const Color.fromRGBO(23, 22, 22, 0.30).withValues(alpha: 0.1),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -87,12 +88,12 @@ class BannerWidget extends StatelessWidget {
|
||||
dashColor = const Color.fromRGBO(29, 185, 84, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withValues(alpha: 0.08),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withValues(alpha: 0.08),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -103,12 +104,12 @@ class BannerWidget extends StatelessWidget {
|
||||
imagePath = "assets/discount.png";
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withValues(alpha: 0.08),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withValues(alpha: 0.08),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -121,10 +122,11 @@ class BannerWidget extends StatelessWidget {
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(50)),
|
||||
child: DottedBorder(
|
||||
borderType: BorderType.RRect,
|
||||
radius: const Radius.circular(50),
|
||||
dashPattern: const <double>[3, 3],
|
||||
color: dashColor,
|
||||
options: RoundedRectDottedBorderOptions(
|
||||
radius: const Radius.circular(50),
|
||||
dashPattern: <double>[3, 3],
|
||||
color: dashColor,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
if (BannerType.starUs == type)
|
||||
|
||||
@@ -28,7 +28,7 @@ class CustomIconWidget extends StatelessWidget {
|
||||
width: 1.5,
|
||||
color: getEnteColorScheme(context)
|
||||
.tagChipSelectedColor
|
||||
.withOpacity(0.5),
|
||||
.withValues(alpha: 0.5),
|
||||
),
|
||||
borderRadius: SmoothBorderRadius(
|
||||
cornerRadius: 15.5,
|
||||
@@ -102,7 +102,7 @@ class CustomIconWidget extends StatelessWidget {
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
size: 16,
|
||||
color: Colors.black.withOpacity(0.9),
|
||||
color: Colors.black.withValues(alpha: 0.9),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -52,7 +52,7 @@ class NotificationWidget extends StatelessWidget {
|
||||
subTextStyle = textTheme.miniMuted;
|
||||
strokeColorScheme = colorScheme;
|
||||
boxShadow = [
|
||||
BoxShadow(color: Colors.black.withOpacity(0.25), blurRadius: 1),
|
||||
BoxShadow(color: Colors.black.withValues(alpha: 0.25), blurRadius: 1),
|
||||
];
|
||||
break;
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ class TitleBarWidget extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
_actionsWithPaddingInBetween() {
|
||||
List<Widget> _actionsWithPaddingInBetween() {
|
||||
if (actionIcons == null) {
|
||||
return <Widget>[const SizedBox.shrink()];
|
||||
}
|
||||
@@ -135,7 +135,7 @@ class TitleBarWidget extends StatelessWidget {
|
||||
return <Widget>[const SizedBox.shrink()];
|
||||
}
|
||||
if (length == 1) {
|
||||
return actionIcons;
|
||||
return actionIcons!;
|
||||
}
|
||||
while (index < length) {
|
||||
if (!addWhiteSpace) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:ente_auth/ente_theme_data.dart';
|
||||
import 'package:ente_auth/models/execution_states.dart';
|
||||
import 'package:ente_auth/models/typedefs.dart';
|
||||
import 'package:ente_auth/theme/colors.dart';
|
||||
import 'package:ente_auth/ui/common/loading_widget.dart';
|
||||
import 'package:ente_auth/utils/debouncer.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -104,7 +105,7 @@ class _ToggleSwitchWidgetState extends State<ToggleSwitchWidget> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _stateIcon(enteColorScheme) {
|
||||
Widget _stateIcon(EnteColorScheme enteColorScheme) {
|
||||
if (executionState == ExecutionState.idle) {
|
||||
return const SizedBox(width: 24);
|
||||
} else if (executionState == ExecutionState.inProgress) {
|
||||
|
||||
@@ -23,7 +23,8 @@ class CoachMarkWidget extends StatelessWidget {
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
color: Theme.of(context).colorScheme.surface.withOpacity(0.1),
|
||||
color:
|
||||
Theme.of(context).colorScheme.surface.withValues(alpha: 0.1),
|
||||
child: BackdropFilter(
|
||||
filter: ImageFilter.blur(sigmaX: 8, sigmaY: 8),
|
||||
child: Row(
|
||||
|
||||
@@ -77,7 +77,7 @@ class AboutSectionWidget extends StatelessWidget {
|
||||
UpdateService.instance.getLatestVersionInfo(),
|
||||
);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
);
|
||||
} else {
|
||||
showShortToast(
|
||||
|
||||
@@ -56,7 +56,7 @@ class AccountSectionWidget extends StatelessWidget {
|
||||
builder: (BuildContext context) {
|
||||
return const ChangeEmailDialog();
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
barrierDismissible: false,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ class _DuplicateCodePageState extends State<DuplicateCodePage> {
|
||||
color: Theme.of(context)
|
||||
.iconTheme
|
||||
.color!
|
||||
.withOpacity(0.7),
|
||||
.withValues(alpha: 0.7),
|
||||
),
|
||||
),
|
||||
const Padding(padding: EdgeInsets.only(left: 4)),
|
||||
|
||||
@@ -170,9 +170,14 @@ Future<void> _exportCodes(
|
||||
}
|
||||
codeFile.writeAsStringSync(fileContent);
|
||||
final Size size = MediaQuery.of(context).size;
|
||||
await Share.shareXFiles(
|
||||
[XFile(codeFile.path)],
|
||||
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
await SharePlus.instance.share(
|
||||
ShareParams(
|
||||
files: <XFile>[
|
||||
XFile(codeFile.path, mimeType: 'text/plain'),
|
||||
],
|
||||
sharePositionOrigin:
|
||||
Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
),
|
||||
);
|
||||
Future.delayed(const Duration(seconds: 30), () async {
|
||||
if (codeFile.existsSync()) {
|
||||
|
||||
@@ -116,10 +116,10 @@ class _LockScreenConfirmPasswordState extends State<LockScreenConfirmPassword> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import "dart:io";
|
||||
|
||||
import "package:ente_auth/l10n/l10n.dart";
|
||||
import "package:ente_auth/theme/colors.dart";
|
||||
import "package:ente_auth/theme/ente_theme.dart";
|
||||
import "package:ente_auth/theme/text_style.dart";
|
||||
import "package:ente_auth/ui/settings/lock_screen/custom_pin_keypad.dart";
|
||||
import "package:ente_auth/utils/lock_screen_settings.dart";
|
||||
import "package:flutter/material.dart";
|
||||
@@ -89,7 +91,7 @@ class _LockScreenConfirmPinState extends State<LockScreenConfirmPin> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _getBody(colorTheme, textTheme) {
|
||||
Widget _getBody(EnteColorScheme colorTheme, EnteTextTheme textTheme) {
|
||||
return Center(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
@@ -107,10 +109,10 @@ class _LockScreenConfirmPinState extends State<LockScreenConfirmPin> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -127,10 +127,10 @@ class _LockScreenPasswordState extends State<LockScreenPassword> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -178,10 +178,10 @@ class _LockScreenPinState extends State<LockScreenPin> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -43,7 +43,7 @@ class _SupportSectionWidgetState extends State<SupportSectionWidget> {
|
||||
trailingIconIsMuted: true,
|
||||
onTap: () async {
|
||||
try {
|
||||
PlatformUtil.openWebView(
|
||||
await PlatformUtil.openWebView(
|
||||
context,
|
||||
context.l10n.faq,
|
||||
"https://help.ente.io/auth/faq",
|
||||
|
||||
@@ -35,7 +35,7 @@ class SortCodeMenuWidget extends StatelessWidget {
|
||||
text,
|
||||
style: Theme.of(context).textTheme.titleMedium!.copyWith(
|
||||
fontSize: 14,
|
||||
color: Theme.of(context).iconTheme.color!.withOpacity(0.7),
|
||||
color: Theme.of(context).iconTheme.color!.withValues(alpha: 0.7),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:ente_auth/l10n/l10n.dart';
|
||||
import 'package:ente_auth/locale.dart';
|
||||
import 'package:ente_auth/utils/lock_screen_settings.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
/// A widget which handles app lifecycle events for showing and hiding a lock screen.
|
||||
/// This should wrap around a `MyApp` widget (or equivalent).
|
||||
|
||||
@@ -96,10 +96,10 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -98,8 +98,9 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
|
||||
style: TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
fontSize: 12,
|
||||
color:
|
||||
getEnteColorScheme(context).textBase.withOpacity(0.9),
|
||||
color: getEnteColorScheme(context)
|
||||
.textBase
|
||||
.withValues(alpha: 0.9),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -180,7 +180,7 @@ Future<ButtonResult?> showGenericErrorDialog({
|
||||
context,
|
||||
context.l10n.faq,
|
||||
"https://help.ente.io/auth/troubleshooting/windows-login",
|
||||
);
|
||||
).ignore();
|
||||
},
|
||||
),
|
||||
ButtonWidget(
|
||||
|
||||
@@ -34,7 +34,7 @@ class DirectoryUtils {
|
||||
}
|
||||
|
||||
static String migratedNamingChanges = "migrated_naming_changes.b5";
|
||||
static migrateNamingChanges() async {
|
||||
static Future<void> migrateNamingChanges() async {
|
||||
try {
|
||||
final sharedPrefs = await SharedPreferences.getInstance();
|
||||
if (sharedPrefs.containsKey(migratedNamingChanges)) {
|
||||
@@ -57,7 +57,7 @@ class DirectoryUtils {
|
||||
Directory oldDataDir;
|
||||
Directory newDataDir = await getApplicationSupportDirectory();
|
||||
await newDataDir.create(recursive: true);
|
||||
|
||||
|
||||
if (Platform.isLinux) {
|
||||
oldDataDir = Directory(
|
||||
p.join(dataHome.path, "ente_auth"),
|
||||
|
||||
@@ -232,9 +232,13 @@ Future<void> exportLogs(
|
||||
MimeType.zip,
|
||||
);
|
||||
} else {
|
||||
await Share.shareXFiles(
|
||||
[XFile(zipFilePath, mimeType: 'application/zip')],
|
||||
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
await SharePlus.instance.share(
|
||||
ShareParams(
|
||||
files: <XFile>[
|
||||
XFile(zipFilePath, mimeType: 'application/zip'),
|
||||
],
|
||||
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,11 @@ class PlatformUtil {
|
||||
? cupertinoTextSelectionControls
|
||||
: desktopTextSelectionControls;
|
||||
|
||||
static openWebView(BuildContext context, String title, String url) async {
|
||||
static Future<void> openWebView(
|
||||
BuildContext context,
|
||||
String title,
|
||||
String url,
|
||||
) async {
|
||||
if (PlatformUtil.isDesktop()) {
|
||||
await launchUrlString(url);
|
||||
return;
|
||||
|
||||
@@ -91,9 +91,11 @@ Future<ShareResult> shareText(
|
||||
}) async {
|
||||
try {
|
||||
final sharePosOrigin = _sharePosOrigin(context, key);
|
||||
return Share.share(
|
||||
text,
|
||||
sharePositionOrigin: sharePosOrigin,
|
||||
return SharePlus.instance.share(
|
||||
ShareParams(
|
||||
text: text,
|
||||
sharePositionOrigin: sharePosOrigin,
|
||||
),
|
||||
);
|
||||
} catch (e, s) {
|
||||
Logger("ShareUtil").severe("failed to share text", e, s);
|
||||
|
||||
@@ -47,6 +47,6 @@ void showToast(
|
||||
}
|
||||
}
|
||||
|
||||
void showShortToast(context, String message) {
|
||||
void showShortToast(BuildContext context, String message) {
|
||||
showToast(context, message, toastLength: Toast.LENGTH_SHORT);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ class WindowsProtocolHandler {
|
||||
hKey,
|
||||
txtKey,
|
||||
txtValue,
|
||||
REG_VALUE_TYPE.REG_SZ,
|
||||
REG_SZ,
|
||||
txtData,
|
||||
txtData.length * 2 + 2,
|
||||
);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <flutter_local_authentication/flutter_local_authentication_plugin.h>
|
||||
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
|
||||
#include <gtk/gtk_plugin.h>
|
||||
#include <screen_retriever/screen_retriever_plugin.h>
|
||||
#include <screen_retriever_linux/screen_retriever_linux_plugin.h>
|
||||
#include <sentry_flutter/sentry_flutter_plugin.h>
|
||||
#include <sodium_libs/sodium_libs_plugin.h>
|
||||
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
|
||||
@@ -31,9 +31,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
|
||||
g_autoptr(FlPluginRegistrar) gtk_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin");
|
||||
gtk_plugin_register_with_registrar(gtk_registrar);
|
||||
g_autoptr(FlPluginRegistrar) screen_retriever_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin");
|
||||
screen_retriever_plugin_register_with_registrar(screen_retriever_registrar);
|
||||
g_autoptr(FlPluginRegistrar) screen_retriever_linux_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverLinuxPlugin");
|
||||
screen_retriever_linux_plugin_register_with_registrar(screen_retriever_linux_registrar);
|
||||
g_autoptr(FlPluginRegistrar) sentry_flutter_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin");
|
||||
sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar);
|
||||
|
||||
@@ -7,7 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||
flutter_local_authentication
|
||||
flutter_secure_storage_linux
|
||||
gtk
|
||||
screen_retriever
|
||||
screen_retriever_linux
|
||||
sentry_flutter
|
||||
sodium_libs
|
||||
sqlite3_flutter_libs
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release version="4.4.3" date="2025-06-21" />
|
||||
<release version="4.4.2" date="2025-06-21" />
|
||||
<release version="4.4.0" date="2025-05-31" />
|
||||
<release version="4.3.8" date="2025-05-20" />
|
||||
<release version="4.2.4" date="2025-01-11" />
|
||||
|
||||
@@ -8,6 +8,7 @@ import Foundation
|
||||
import app_links
|
||||
import connectivity_plus
|
||||
import device_info_plus
|
||||
import file_picker
|
||||
import file_saver
|
||||
import flutter_inappwebview_macos
|
||||
import flutter_local_authentication
|
||||
@@ -16,12 +17,12 @@ import flutter_secure_storage_macos
|
||||
import local_auth_darwin
|
||||
import package_info_plus
|
||||
import path_provider_foundation
|
||||
import screen_retriever
|
||||
import screen_retriever_macos
|
||||
import sentry_flutter
|
||||
import share_plus
|
||||
import shared_preferences_foundation
|
||||
import sodium_libs
|
||||
import sqflite
|
||||
import sqflite_darwin
|
||||
import sqlite3_flutter_libs
|
||||
import tray_manager
|
||||
import url_launcher_macos
|
||||
@@ -31,15 +32,16 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin"))
|
||||
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
|
||||
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
|
||||
FileSaverPlugin.register(with: registry.registrar(forPlugin: "FileSaverPlugin"))
|
||||
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
|
||||
FlutterLocalAuthenticationPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalAuthenticationPlugin"))
|
||||
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
||||
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
||||
FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin"))
|
||||
LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin"))
|
||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin"))
|
||||
ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin"))
|
||||
SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
|
||||
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
|
||||
@@ -2,13 +2,14 @@ PODS:
|
||||
- app_links (1.0.0):
|
||||
- FlutterMacOS
|
||||
- connectivity_plus (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- cupertino_http (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- device_info_plus (0.0.1):
|
||||
- FlutterMacOS
|
||||
- file_picker (0.0.1):
|
||||
- FlutterMacOS
|
||||
- file_saver (0.0.1):
|
||||
- FlutterMacOS
|
||||
- flutter_inappwebview_macos (0.0.1):
|
||||
@@ -18,7 +19,7 @@ PODS:
|
||||
- FlutterMacOS
|
||||
- flutter_local_notifications (0.0.1):
|
||||
- FlutterMacOS
|
||||
- flutter_secure_storage_macos (6.1.1):
|
||||
- flutter_secure_storage_macos (6.1.3):
|
||||
- FlutterMacOS
|
||||
- FlutterMacOS (1.0.0)
|
||||
- local_auth_darwin (0.0.1):
|
||||
@@ -32,7 +33,7 @@ PODS:
|
||||
- path_provider_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- screen_retriever (0.0.1):
|
||||
- screen_retriever_macos (0.0.1):
|
||||
- FlutterMacOS
|
||||
- Sentry/HybridSDK (8.46.0)
|
||||
- sentry_flutter (8.14.2):
|
||||
@@ -46,39 +47,44 @@ PODS:
|
||||
- FlutterMacOS
|
||||
- sodium_libs (2.2.1):
|
||||
- FlutterMacOS
|
||||
- sqflite (0.0.3):
|
||||
- sqflite_darwin (0.0.4):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- "sqlite3 (3.46.1+1)":
|
||||
- "sqlite3/common (= 3.46.1+1)"
|
||||
- "sqlite3/common (3.46.1+1)"
|
||||
- "sqlite3/dbstatvtab (3.46.1+1)":
|
||||
- sqlite3 (3.50.1):
|
||||
- sqlite3/common (= 3.50.1)
|
||||
- sqlite3/common (3.50.1)
|
||||
- sqlite3/dbstatvtab (3.50.1):
|
||||
- sqlite3/common
|
||||
- "sqlite3/fts5 (3.46.1+1)":
|
||||
- sqlite3/fts5 (3.50.1):
|
||||
- sqlite3/common
|
||||
- "sqlite3/perf-threadsafe (3.46.1+1)":
|
||||
- sqlite3/math (3.50.1):
|
||||
- sqlite3/common
|
||||
- "sqlite3/rtree (3.46.1+1)":
|
||||
- sqlite3/perf-threadsafe (3.50.1):
|
||||
- sqlite3/common
|
||||
- sqlite3/rtree (3.50.1):
|
||||
- sqlite3/common
|
||||
- sqlite3_flutter_libs (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- "sqlite3 (~> 3.46.0+1)"
|
||||
- sqlite3 (~> 3.50.1)
|
||||
- sqlite3/dbstatvtab
|
||||
- sqlite3/fts5
|
||||
- sqlite3/math
|
||||
- sqlite3/perf-threadsafe
|
||||
- sqlite3/rtree
|
||||
- tray_manager (0.0.1):
|
||||
- FlutterMacOS
|
||||
- url_launcher_macos (0.0.1):
|
||||
- FlutterMacOS
|
||||
- window_manager (0.2.0):
|
||||
- window_manager (0.5.0):
|
||||
- FlutterMacOS
|
||||
|
||||
DEPENDENCIES:
|
||||
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
|
||||
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
|
||||
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`)
|
||||
- cupertino_http (from `Flutter/ephemeral/.symlinks/plugins/cupertino_http/darwin`)
|
||||
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
|
||||
- file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`)
|
||||
- file_saver (from `Flutter/ephemeral/.symlinks/plugins/file_saver/macos`)
|
||||
- flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`)
|
||||
- flutter_local_authentication (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_authentication/macos`)
|
||||
@@ -89,13 +95,13 @@ DEPENDENCIES:
|
||||
- objective_c (from `Flutter/ephemeral/.symlinks/plugins/objective_c/macos`)
|
||||
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
|
||||
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
||||
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
|
||||
- screen_retriever_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos`)
|
||||
- sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`)
|
||||
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
|
||||
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||
- sodium_libs (from `Flutter/ephemeral/.symlinks/plugins/sodium_libs/macos`)
|
||||
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
|
||||
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`)
|
||||
- sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`)
|
||||
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
||||
- tray_manager (from `Flutter/ephemeral/.symlinks/plugins/tray_manager/macos`)
|
||||
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
||||
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
|
||||
@@ -110,11 +116,13 @@ EXTERNAL SOURCES:
|
||||
app_links:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
|
||||
connectivity_plus:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos
|
||||
cupertino_http:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/cupertino_http/darwin
|
||||
device_info_plus:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
|
||||
file_picker:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos
|
||||
file_saver:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/file_saver/macos
|
||||
flutter_inappwebview_macos:
|
||||
@@ -135,8 +143,8 @@ EXTERNAL SOURCES:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
|
||||
path_provider_foundation:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
||||
screen_retriever:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos
|
||||
screen_retriever_macos:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos
|
||||
sentry_flutter:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos
|
||||
share_plus:
|
||||
@@ -145,10 +153,10 @@ EXTERNAL SOURCES:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
|
||||
sodium_libs:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/sodium_libs/macos
|
||||
sqflite:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
|
||||
sqflite_darwin:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin
|
||||
sqlite3_flutter_libs:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
|
||||
tray_manager:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/tray_manager/macos
|
||||
url_launcher_macos:
|
||||
@@ -157,33 +165,34 @@ EXTERNAL SOURCES:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
app_links: 9028728e32c83a0831d9db8cf91c526d16cc5468
|
||||
connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343
|
||||
app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
|
||||
connectivity_plus: 4adf20a405e25b42b9c9f87feff8f4b6fde18a4e
|
||||
cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c
|
||||
device_info_plus: b0fafc687fb901e2af612763340f1b0d4352f8e5
|
||||
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
|
||||
file_saver: e35bd97de451dde55ff8c38862ed7ad0f3418d0f
|
||||
flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d
|
||||
flutter_local_authentication: 2f9a2682f498abcc12d7e9729b5007a947170fdc
|
||||
flutter_local_notifications: 453432cd6399a07d072885bc7828fb2307868856
|
||||
flutter_secure_storage_macos: b2d62a774c23b060f0b99d0173b0b36abb4a8632
|
||||
flutter_local_notifications: 13862b132e32eb858dea558a86d45d08daeacfe7
|
||||
flutter_secure_storage_macos: 7f45e30f838cf2659862a4e4e3ee1c347c2b3b54
|
||||
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
||||
local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391
|
||||
local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19
|
||||
objective_c: ec13431e45ba099cb734eb2829a5c1cd37986cba
|
||||
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
||||
package_info_plus: a8a591e70e87ce97ce5d21b2594f69cea9e0312f
|
||||
package_info_plus: f0052d280d17aa382b932f399edf32507174e870
|
||||
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
||||
screen_retriever: 4f97c103641aab8ce183fa5af3b87029df167936
|
||||
screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
|
||||
Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854
|
||||
sentry_flutter: 27892878729f42701297c628eb90e7c6529f3684
|
||||
share_plus: 11c7b7fa7020465584eca3ff6392c5bc1e399d6e
|
||||
share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc
|
||||
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
||||
sodium_libs: b9459e5bfc1185349f43472e79fc5d8e526b2bda
|
||||
sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3
|
||||
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
|
||||
sqlite3_flutter_libs: 03311aede9d32fb2d24e32bebb8cd01c3b2e6239
|
||||
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
||||
sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5
|
||||
sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2
|
||||
tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166
|
||||
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
|
||||
window_manager: 1d01fa7ac65a6e6f83b965471b1a7fdd3f06166c
|
||||
window_manager: b729e31d38fb04905235df9ea896128991cad99e
|
||||
|
||||
PODFILE CHECKSUM: 6ff827273ace187339fc5d3684072a26ad85c298
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
name: ente_auth
|
||||
description: ente two-factor authenticator
|
||||
version: 4.4.1+441
|
||||
version: 4.4.3+443
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
@@ -10,11 +10,11 @@ environment:
|
||||
dependencies:
|
||||
adaptive_theme: ^3.1.0 # done
|
||||
app_links: ^6.3.3
|
||||
archive: ^3.3.7
|
||||
archive: ^4.0.7
|
||||
auto_size_text: ^3.0.0
|
||||
base32: ^2.1.3
|
||||
bip39: ^1.0.6 #done
|
||||
bloc: ^8.1.2
|
||||
bloc: ^9.0.0
|
||||
clipboard: ^0.1.3
|
||||
collection: ^1.18.0 # dart
|
||||
confetti: ^0.8.0
|
||||
@@ -22,7 +22,7 @@ dependencies:
|
||||
convert: ^3.1.1
|
||||
device_info_plus: ^9.1.1
|
||||
dio: ^5.8.0+1
|
||||
dotted_border: ^2.0.0+2
|
||||
dotted_border: ^3.1.0
|
||||
dropdown_button2: ^2.3.9
|
||||
email_validator: ^3.0.0
|
||||
ente_crypto_dart:
|
||||
@@ -32,19 +32,19 @@ dependencies:
|
||||
expandable: ^5.0.1
|
||||
expansion_tile_card: ^3.0.0
|
||||
ffi: ^2.1.0
|
||||
figma_squircle: ^0.5.3
|
||||
file_picker: ^8.1.7
|
||||
figma_squircle: ^0.6.3
|
||||
file_picker: ^10.2.0
|
||||
# https://github.com/incrediblezayed/file_saver/issues/86
|
||||
file_saver: ^0.2.11
|
||||
file_saver: ^0.3.0
|
||||
fixnum: ^1.1.0
|
||||
fk_user_agent: ^2.1.0
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_animate: ^4.1.0
|
||||
flutter_bloc: ^8.0.1
|
||||
flutter_bloc: ^9.1.1
|
||||
flutter_context_menu: ^0.2.0
|
||||
flutter_displaymode: ^0.6.0
|
||||
flutter_email_sender: ^6.0.2
|
||||
flutter_email_sender: ^7.0.0
|
||||
# revert to pub.dev when merged
|
||||
# https://github.com/pichillilorenzo/flutter_inappwebview/pull/2548
|
||||
flutter_inappwebview:
|
||||
@@ -57,7 +57,7 @@ dependencies:
|
||||
git:
|
||||
url: https://github.com/eaceto/flutter_local_authentication
|
||||
ref: 1ac346a04592a05fd75acccf2e01fa3c7e955d96
|
||||
flutter_local_notifications: ^17.2.2
|
||||
flutter_local_notifications: ^18.0.1
|
||||
flutter_localizations:
|
||||
sdk: flutter
|
||||
flutter_native_splash: ^2.2.13
|
||||
@@ -87,30 +87,27 @@ dependencies:
|
||||
pinput: ^5.0.0
|
||||
pointycastle: ^3.7.3
|
||||
privacy_screen: ^0.0.6
|
||||
protobuf: ^3.0.0
|
||||
protobuf: ^4.1.0
|
||||
qr_code_scanner: ^1.0.1
|
||||
qr_flutter: ^4.1.0
|
||||
sentry: ^8.14.2
|
||||
sentry_flutter: ^8.14.2
|
||||
share_plus: ^10.0.2
|
||||
share_plus: ^11.0.0
|
||||
shared_preferences: ^2.0.5
|
||||
sqflite:
|
||||
git:
|
||||
url: https://github.com/tekartik/sqflite
|
||||
path: sqflite
|
||||
sqflite: ^2.4.2
|
||||
sqflite_common_ffi: ^2.3.0+4
|
||||
sqlite3: ^2.4.3
|
||||
sqlite3_flutter_libs: ^0.5.24
|
||||
steam_totp: ^0.0.1
|
||||
step_progress_indicator: ^1.0.2
|
||||
styled_text: ^8.1.0
|
||||
tray_manager: ^0.2.1
|
||||
tray_manager: ^0.5.0
|
||||
tuple: ^2.0.0
|
||||
url_launcher: ^6.3.1
|
||||
url_launcher_ios: ^6.3.1
|
||||
uuid: ^4.2.2
|
||||
win32: ^5.1.1
|
||||
window_manager: ^0.4.2
|
||||
window_manager: ^0.5.0
|
||||
xdg_directories: ^1.0.4
|
||||
|
||||
dev_dependencies:
|
||||
@@ -118,7 +115,7 @@ dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
json_serializable: ^6.2.0
|
||||
lints: ^5.0.0
|
||||
lints: ^5.1.1
|
||||
mocktail: ^1.0.3
|
||||
|
||||
# The following section is specific to Flutter.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import "package:ente_auth/l10n/l10n.dart";
|
||||
import "package:ente_auth/l10n/arb/app_localizations.dart";
|
||||
import "package:flutter/material.dart";
|
||||
import "package:flutter_localizations/flutter_localizations.dart";
|
||||
import "package:flutter_test/flutter_test.dart";
|
||||
@@ -8,7 +8,6 @@ extension PumpApp on WidgetTester {
|
||||
return pumpWidget(
|
||||
MaterialApp(
|
||||
localizationsDelegates: const [
|
||||
AppLocalizations.delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <flutter_local_authentication/flutter_local_authentication_plugin_c_api.h>
|
||||
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
||||
#include <local_auth_windows/local_auth_plugin.h>
|
||||
#include <screen_retriever/screen_retriever_plugin.h>
|
||||
#include <screen_retriever_windows/screen_retriever_windows_plugin_c_api.h>
|
||||
#include <sentry_flutter/sentry_flutter_plugin.h>
|
||||
#include <share_plus/share_plus_windows_plugin_c_api.h>
|
||||
#include <sodium_libs/sodium_libs_plugin_c_api.h>
|
||||
@@ -37,8 +37,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
|
||||
LocalAuthPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("LocalAuthPlugin"));
|
||||
ScreenRetrieverPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("ScreenRetrieverPlugin"));
|
||||
ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi"));
|
||||
SentryFlutterPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("SentryFlutterPlugin"));
|
||||
SharePlusWindowsPluginCApiRegisterWithRegistrar(
|
||||
|
||||
@@ -10,7 +10,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||
flutter_local_authentication
|
||||
flutter_secure_storage_windows
|
||||
local_auth_windows
|
||||
screen_retriever
|
||||
screen_retriever_windows
|
||||
sentry_flutter
|
||||
share_plus
|
||||
sodium_libs
|
||||
|
||||
3
mobile/apps/photos/.fvmrc
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"flutter": "3.29.3"
|
||||
}
|
||||
3
mobile/apps/photos/.gitignore
vendored
@@ -43,3 +43,6 @@ fastlane/report.xml
|
||||
|
||||
# Android related
|
||||
android/app/build/
|
||||
|
||||
# FVM Version Cache
|
||||
.fvm/
|
||||
@@ -46,7 +46,7 @@ You can alternatively install the build from PlayStore or F-Droid.
|
||||
|
||||
## 🧑💻 Building from source
|
||||
|
||||
1. [Install Flutter v3.24.3](https://flutter.dev/docs/get-started/install).
|
||||
1. [Install Flutter v3.29.3](https://flutter.dev/docs/get-started/install).
|
||||
|
||||
2. Pull in all submodules with `git submodule update --init --recursive`
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ android {
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
coreLibraryDesugaringEnabled = true
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
@@ -132,7 +133,7 @@ flutter {
|
||||
source = "../.."
|
||||
}
|
||||
|
||||
dependencies {
|
||||
dependencies {
|
||||
implementation 'io.sentry:sentry-android:2.0.0'
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.21'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0'
|
||||
@@ -142,7 +143,7 @@ dependencies {
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
|
||||
|
||||
constraints {
|
||||
implementation("androidx.work:work-runtime:2.8.1") {
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
package io.ente.photos
|
||||
|
||||
import io.flutter.embedding.android.FlutterFragmentActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugins.GeneratedPluginRegistrant
|
||||
|
||||
class MainActivity : FlutterFragmentActivity() {
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
GeneratedPluginRegistrant.registerWith(flutterEngine)
|
||||
}
|
||||
}
|
||||
class MainActivity : FlutterFragmentActivity() {}
|
||||
|
||||
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
|
||||
|
||||
@@ -18,7 +18,7 @@ pluginManagement {
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.1.0" apply false
|
||||
id "com.android.application" version "8.6.0" apply false
|
||||
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
ente is a simple app to backup and share your photos and videos.
|
||||
|
||||
If you've been looking for a privacy-friendly alternative to Google Photos, you've come to the right place. With ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
|
||||
|
||||
We have open-source apps across Android, iOS, web and desktop, and your photos will seamlessly sync between all of them in an end-to-end encrypted (e2ee) manner.
|
||||
|
||||
ente also makes it simple to share your albums with your loved ones, even if they aren't on ente. You can share publicly viewable links, where they can view your album and collaborate by adding photos to it, even without an account or app.
|
||||
|
||||
Your encrypted data is replicated to 3 different locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
|
||||
|
||||
We are here to make the safest photos app ever, come join our journey!
|
||||
|
||||
FEATURES
|
||||
- Original quality backups, because every pixel is important
|
||||
- Family plans, so you can share storage with your family
|
||||
- Collaborative albums, so you can pool together photos after a trip
|
||||
- Shared folders, in case you want your partner to enjoy your "Camera" clicks
|
||||
- Album links, that can be protected with a password
|
||||
- Ability to free up space, by removing files that have been safely backed up
|
||||
- Human support, because you're worth it
|
||||
- Descriptions, so you can caption your memories and find them easily
|
||||
- Image editor, to add finishing touches
|
||||
- Favorite, hide and relive your memories, for they are precious
|
||||
- One-click import from Google, Apple, your hard drive and more
|
||||
- Dark theme, because your photos look good in it
|
||||
- 2FA, 3FA, biometric auth
|
||||
- and a LOT more!
|
||||
|
||||
PERMISSIONS
|
||||
ente requests for certain permissions to serve the purpose of a photo storage provider, which can be reviewed here: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md
|
||||
|
||||
PRICING
|
||||
We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
|
||||
|
||||
SUPPORT
|
||||
We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
|
||||
@@ -0,0 +1 @@
|
||||
ente is an end-to-end encrypted photo storage app
|
||||
@@ -0,0 +1 @@
|
||||
ente - encrypted photo storage
|
||||
33
mobile/apps/photos/fastlane/metadata/ios/ms/description.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
Ente is a simple app to automatically backup and organize your photos and videos.
|
||||
|
||||
If you've been looking for a privacy-friendly alternative to preserve your memories, you've come to the right place. With Ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
|
||||
|
||||
We have apps across all platforms, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner.
|
||||
|
||||
Ente also makes it simple to share your albums with your loved ones. You can either share them directly with other Ente users, end-to-end encrypted; or with publicly viewable links.
|
||||
|
||||
Your encrypted data is stored across multiple locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
|
||||
|
||||
We are here to make the safest photos app ever, come join our journey!
|
||||
|
||||
FEATURES
|
||||
- Original quality backups, because every pixel is important
|
||||
- Family plans, so you can share storage with your family
|
||||
- Shared folders, in case you want your partner to enjoy your "Camera" clicks
|
||||
- Album links, that can be protected with a password and set to expire
|
||||
- Ability to free up space, by removing files that have been safely backed up
|
||||
- Image editor, to add finishing touches
|
||||
- Favorite, hide and relive your memories, for they are precious
|
||||
- One-click import from all major storage providers
|
||||
- Dark theme, because your photos look good in it
|
||||
- 2FA, 3FA, biometric auth
|
||||
- and a LOT more!
|
||||
|
||||
PRICING
|
||||
We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
|
||||
|
||||
SUPPORT
|
||||
We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
|
||||
|
||||
TERMS
|
||||
https://ente.io/terms
|
||||
1
mobile/apps/photos/fastlane/metadata/ios/ms/keywords.txt
Normal file
@@ -0,0 +1 @@
|
||||
photos,photography,family,privacy,cloud,backup,videos,photo,encryption,storage,album,alternative
|
||||
1
mobile/apps/photos/fastlane/metadata/ios/ms/name.txt
Normal file
@@ -0,0 +1 @@
|
||||
Ente Photos
|
||||
1
mobile/apps/photos/fastlane/metadata/ios/ms/subtitle.txt
Normal file
@@ -0,0 +1 @@
|
||||
Encrypted photo storage
|
||||
@@ -1,4 +1,4 @@
|
||||
Ente là một ứng dụng đơn giản để sao lưu và sắp xếp ảnh/video của bạn.
|
||||
Ente là ứng dụng đơn giản tự động sao lưu và sắp xếp ảnh/video của bạn.
|
||||
|
||||
Nếu bạn đang tìm kiếm một giải pháp bảo mật-thân thiện để lưu giữ những kỷ niệm của mình, bạn đã tìm đúng. Ở Ente, chúng tôi lưu trữ mã hóa đầu cuối (e2ee). Điều này nghĩa là chỉ bạn mới có thể xem.
|
||||
|
||||
@@ -8,26 +8,26 @@ Ente cũng giúp bạn dễ dàng chia sẻ album của mình với những ngư
|
||||
|
||||
Dữ liệu mã hóa của bạn được lưu trữ ở nhiều địa điểm khác nhau, bao gồm một hầm trú ẩn hạt nhân ở Paris. Chúng tôi coi trọng sự trường tồn và giúp việc đảm bảo rằng những kỷ niệm của bạn sống lâu hơn bạn trở nên dễ dàng.
|
||||
|
||||
Chúng tôi ở đây để tạo ra ứng dụng ảnh an toàn nhất từ trước đến nay, hãy tham gia hành trình của chúng tôi!
|
||||
Chúng tôi tạo ra ứng dụng ảnh an toàn nhất từ trước đến nay, hãy tham gia hành trình của chúng tôi!
|
||||
|
||||
TÍNH NĂNG
|
||||
- Sao lưu chất lượng gốc, vì mỗi pixel đều quan trọng
|
||||
- Gói gia đình, để bạn có thể chia sẻ dung lượng lưu trữ với gia đình
|
||||
- Gói gia đình, để bạn có thể chia sẻ dung lượng lưu trữ với các thành viên
|
||||
- Thư mục chia sẻ, trong trường hợp bạn muốn đối tác của mình thưởng thức những bức ảnh "Camera" của bạn
|
||||
- Liên kết album, có thể bảo vệ bằng mật khẩu và đặt thời hạn
|
||||
- Khả năng giải phóng dung lượng, bằng cách xóa các tệp đã được sao lưu an toàn
|
||||
- Trình chỉnh sửa ảnh, để thêm những nét hoàn thiện
|
||||
- Thích, ẩn và khôi phục những kỷ niệm của bạn, vì chúng rất quý giá
|
||||
- Một click nhập ngay từ tất cả các nhà cung cấp lưu trữ lớn
|
||||
- Di chuyển ảnh/video từ các dịch vụ lưu trữ khác chỉ với một click
|
||||
- Chủ đề tối, vì ảnh của bạn trông đẹp trong đó
|
||||
- 2FA, 3FA, xác thực sinh trắc học
|
||||
- và còn NHIỀU nữa!
|
||||
- và nhiều hơn thế nữa!
|
||||
|
||||
GIÁ CẢ
|
||||
Chúng tôi không cung cấp vĩnh viễn các gói miễn phí, vì điều quan trọng với chúng tôi là chúng tôi phải duy trì tính bền vững và chịu được thử thách của thời gian. Thay vào đó, chúng tôi cung cấp các gói giá cả phải chăng mà bạn có thể tự do chia sẻ với gia đình mình. Bạn có thể xem thêm thông tin tại ente.io.
|
||||
|
||||
HỖ TRỢ
|
||||
Chúng tôi tự hào cung cấp hỗ trợ người thật. Nếu bạn là khách hàng trả phí của chúng tôi, bạn có thể liên hệ với team@ente.io và đội ngũ của chúng tôi sẽ phản hồi trong vòng 24 giờ.
|
||||
Chúng tôi tự hào với đội hỗ trợ người dùng thật. Nếu bạn là khách hàng trả phí của chúng tôi, bạn có thể liên hệ với team@ente.io và đội ngũ của chúng tôi sẽ phản hồi trong vòng 24 giờ.
|
||||
|
||||
ĐIỀU KHOẢN
|
||||
https://ente.io/terms
|
||||
|
||||