chore: merge main

This commit is contained in:
appflowy 2022-03-01 16:26:09 +08:00
commit d1ce1686a4
26 changed files with 784 additions and 4586 deletions

View File

@ -1,79 +1,83 @@
name: CI
on:
push:
branches: [main]
branches:
- 'main'
pull_request:
branches: [main]
branches:
- 'main'
jobs:
build-macos:
runs-on: macOS-latest
build:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
include:
- os: ubuntu-latest
flutter_profile: development-linux-x86
- os: macos-latest
flutter_profile: development-mac
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
- uses: actions/checkout@v2
- id: rust_toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Checkout Flutter
uses: actions/checkout@v2
- id: flutter
uses: subosito/flutter-action@v2
with:
repository: flutter/flutter
path: flutter
- name: Flutter
working-directory: flutter
run: |
echo "$(pwd)/bin" >> $GITHUB_PATH
export PATH="$PATH:$(pwd)/bin"
flutter channel stable
flutter config --enable-macos-desktop
flutter doctor
- name: Deps
working-directory: frontend
run: |
cargo install --force cargo-make
cargo install --force duckscript_cli
cargo make flowy_dev
echo PATH="$PATH":"$HOME/.pub-cache/bin" >> $GITHUB_PATH
- name: Build
working-directory: frontend
run: cargo make --profile production-mac-x86 appflowy
build-ubuntu:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Packages
channel: 'stable'
cache: true
- name: Cache Cargo
uses: actions/cache@v2
with:
path: |
~/.cargo
key: ${{ runner.os }}-cargo-${{ steps.rust_toolchain.outputs.rustc_hash }}-${{ hashFiles('./frontend/rust-lib/Cargo.toml') }}
- name: Cache Rust
uses: actions/cache@v2
with:
path: |
frontend/rust-lib/target
key: ${{ runner.os }}-rust-${{ steps.rust_toolchain.outputs.rustc_hash }}-${{ hashFiles('./frontend/rust-lib/Cargo.toml') }}
- name: Setup Environment
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub
sudo wget -qO /etc/apt/sources.list.d/dart_stable.list https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list
sudo apt-get update
sudo apt-get install -y dart curl build-essential libsqlite3-dev libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev
- name: Rust
run: |
curl \
--proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
rustup toolchain install stable
rustup default stable
- name: Checkout Flutter
uses: actions/checkout@v2
with:
repository: flutter/flutter
path: flutter
- name: Flutter
working-directory: flutter
run: |
echo "$(pwd)/bin" >> $GITHUB_PATH
export PATH="$PATH:$(pwd)/bin"
flutter channel stable
flutter config --enable-linux-desktop
flutter doctor
elif [ "$RUNNER_OS" == "macOS" ]; then
echo 'do nothing'
fi
shell: bash
- name: Deps
working-directory: frontend
run: |
cargo install --force cargo-make
cargo install --force duckscript_cli
cargo install cargo-make
cargo install duckscript_cli
cargo make flowy_dev
echo PATH="$PATH":"$HOME/.pub-cache/bin" >> $GITHUB_PATH
- name: Config Flutter
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
flutter config --enable-linux-desktop
elif [ "$RUNNER_OS" == "macOS" ]; then
flutter config --enable-macos-desktop
fi
shell: bash
- name: Build
working-directory: frontend
run: cargo make --profile production-linux-x86 appflowy
run: |
cargo make --profile ${{ matrix.flutter_profile }} appflowy-dev

View File

@ -22,7 +22,9 @@ jobs:
with:
toolchain: stable
- name: Deps Flutter
run: flutter packages pub get
run: |
flutter config --enable-linux-desktop
flutter doctor
working-directory: frontend/app_flowy
- name: Deps Rust
working-directory: frontend
@ -34,15 +36,16 @@ jobs:
- name: Code Generation
working-directory: frontend/app_flowy
run: |
flutter packages pub get
flutter packages pub run easy_localization:generate -S ./assets/translations -f keys -O lib/generated -o locale_keys.g.dart
flutter packages pub run build_runner build --delete-conflicting-outputs
- name: Build FlowySDK
working-directory: frontend
run: |
flutter config --enable-linux-desktop
cargo make --profile development-linux-x86 flowy-sdk-dev
- name: Run bloc tests
working-directory: frontend/app_flowy
run: |
flutter pub get
flutter test

View File

@ -29,19 +29,6 @@ You are in charge of your data and customizations.
Please view the [documentation](https://appflowy.gitbook.io/docs/essential-documentation/install-appflowy/installation-methods) for OS specific installation instructions.
You can also try AppFlowy using the docker image:
```
docker run --rm \
-v $HOME/.Xauthority:/root/.Xauthority:rw \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /dev/dri:/dev/dri \
-v /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket \
-v appflowy-data:/home/appflowy \
-e DISPLAY=${DISPLAY} \
appflowyio/appflowy_client:latest
```
## Built With
* [Flutter](https://flutter.dev/)

View File

@ -1,20 +1,24 @@
// module.exports = {extends: ['@commitlint/config-conventional']}
module.exports = {
rules: {
'type-enum': [2, 'always', ['chore', 'ci', 'docs', 'feat', 'fix', 'refactor', 'style', 'test']],
'body-leading-blank': [1, 'always'],
'body-max-line-length': [2, 'always', 100],
'footer-leading-blank': [1, 'always'],
'footer-max-line-length': [2, 'always', 100],
'header-max-length': [2, 'always', 100],
'type-enum': [2, 'always', ['build', 'chore', 'ci', 'docs', 'feat', 'feature', 'fix', 'refactor', 'style', 'test']],
'type-empty': [2, 'never'],
'type-case': [2, 'always', 'lower-case'],
'subject-empty': [2, 'never'],
'subject-case': [
2,
0,
'never',
['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
],
'subject-empty': [2, 'never'],
'type-empty': [2, 'never'],
'type-case': [2, 'always', 'lower-case'],
'body-case': [2, 'never', []]
'body-leading-blank': [2, 'always'],
'body-max-line-length': [2, 'always', 200],
'body-case': [0, 'never', []],
'footer-leading-blank': [1, 'always'],
'footer-max-line-length': [2, 'always', 100]
},
};

View File

@ -0,0 +1,145 @@
{
"appName": "AppFlowy",
"defaultUsername": "Jo",
"welcomeText": "Benvingut a @:appName",
"githubStarText": "Preferit a Github",
"subscribeNewsletterText": "Subscriu-me al butlletí",
"letsGoButtonText": "Endavant",
"title": "Títol",
"signUp": {
"buttonText": "Registra't",
"title": "Registra't a @:appName",
"getStartedText": "Comencem",
"emptyPasswordError": "La contrasenya no pot ser buida",
"repeatPasswordEmptyError": "La contrasenya repetida no pot ser buida",
"unmatchedPasswordError": "Les contrasenyes no concorden",
"alreadyHaveAnAccount": "Ja tens un compte?",
"emailHint": "Correu electrònic",
"passwordHint": "Contrasenya",
"repeatPasswordHint": "Repeteix la contrasenya"
},
"signIn": {
"loginTitle": "Inicia sessió a @:appName",
"loginButtonText": "Inicia sessió",
"buttonText": "Inicia sessió",
"forgotPassword": "Has oblidat la contrasenya?",
"emailHint": "Correu electrònic",
"passwordHint": "Contrasenya",
"dontHaveAnAccount": "No tens un compte?",
"repeatPasswordEmptyError": "La contrasenya repetida no pot ser buida",
"unmatchedPasswordError": "Les contrasenyes no concorden"
},
"workspace": {
"create": "Crear un espai de treball",
"hint": "espai de treball",
"notFoundError": "No s'ha trobat l'espai de treball"
},
"shareAction": {
"buttonText": "Compartir",
"workInProgress": "Pròximament",
"markdown": "Markdown",
"copyLink": "Copiar l'enllaç"
},
"disclosureAction": {
"rename": "Canviar el nom",
"delete": "Eliminar",
"duplicate": "Duplicar"
},
"blankPageTitle": "Pàgina en blanc",
"newPageText": "Nova pàgina",
"trash": {
"text": "Paperera",
"restoreAll": "Recuperar-ho tot",
"deleteAll": "Eliminar-ho tot",
"pageHeader": {
"fileName": "Nom del fitxer",
"lastModified": "Última modificació",
"created": "Creat"
}
},
"deletePagePrompt": {
"text": "Aquest pàgina es troba a la paperera",
"restore": "Recuperar-la",
"deletePermanent": "Elimina-la"
},
"dialogCreatePageNameHint": "Nom de la pàgina",
"questionBubble": {
"whatsNew": "Què hi ha de nou?",
"help": "Ajuda i Suport",
"debug": {
"name": "Informació de depuració",
"success": "S'ha copiat la informació de depuració!",
"fail": "No es pot copiar la informació de depuració"
}
},
"menuAppHeader": {
"addPageTooltip": "Afegeix ràpidament una pàgina dins",
"defaultNewPageName": "Sense títol",
"renameDialog": "Canviar el nom"
},
"toolbar": {
"undo": "Desfer",
"redo": "Refer",
"bold": "Negreta",
"italic": "Cursiva",
"underline": "Text subratllar",
"strike": "Ratllat",
"numList": "Llista numerada",
"bulletList": "Llista de punts",
"checkList": "Llista de comprovació",
"inlineCode": "Inserir codi",
"quote": "Bloc citat",
"header": "Capçalera",
"highlight": "Subratllar"
},
"tooltip": {
"lightMode": "Canviar a mode clar",
"darkMode": "Canviar a mode fosc"
},
"contactsPage": {
"title": "Contactes",
"whatsHappening": "Que passa aquesta setmana?",
"addContact": "Afegir un contacte",
"editContact": "Editar un contacte"
},
"button": {
"OK": "OK",
"Cancel": "Cancel·lar",
"signIn": "Iniciar sessió",
"signOut": "Tancar sessió",
"complete": "Completar",
"save": "Guardar"
},
"label": {
"welcome": "Benvingut!",
"firstName": "Nom",
"middleName": "Segon Nom",
"lastName": "Cognom",
"stepX": "Pas {X}"
},
"oAuth": {
"err": {
"failedTitle": "No s'ha pogut connectar al teu compte.",
"failedMsg": "Assegureu-vos que heu completat el procés d'inici de sessió al vostre navegador."
},
"google": {
"title": "Iniciar sessió amb Google",
"instruction1": "Per importar els vostres contactes de Google, haureu d'autoritzar aquesta aplicació mitjançant el vostre navegador web.",
"instruction2": "Copia aquest codi clicant la icona o seleccionant el text:",
"instruction3": "Navega al següent enllaç amb el teu navegador i insereix el codi anterior:",
"instruction4": "Pressiona el botó d'avall una vegada hagis completat el registre:"
}
},
"settings": {
"title": "Configuració",
"menu": {
"appearance": "Aparença",
"language": "Idioma",
"open": "Obrir la configuració"
},
"appearance": {
"lightLabel": "Mode Clar",
"darkLabel": "Mode Fosc"
}
}
}

View File

@ -0,0 +1,146 @@
{
"appName": "AppFlowy",
"defaultUsername": "Ich",
"welcomeText": "Willkommen bei @:appName",
"githubStarText": "GitHub Star vergeben",
"subscribeNewsletterText": "Abonniere den Newsletter",
"letsGoButtonText": "Los geht's",
"title": "Titel",
"signUp": {
"buttonText": "Registrieren",
"title": "Registriere dich bei @:appName",
"getStartedText": "Erste Schritte",
"emptyPasswordError": "Passwort darf nicht leer sein",
"repeatPasswordEmptyError": "Passwortwiederholung darf nicht leer sein",
"unmatchedPasswordError": "Passwörter stimmen nicht überein",
"alreadyHaveAnAccount": "Bereits registriert?",
"emailHint": "E-Mail",
"passwordHint": "Passwort",
"repeatPasswordHint": "Wiederhole Passwort"
},
"signIn": {
"loginTitle": "Bei @:appName einloggen",
"loginButtonText": "Anmelden",
"buttonText": "Anmelden",
"forgotPassword": "Passwort vergessen?",
"emailHint": "E-Mail",
"passwordHint": "Passwort",
"dontHaveAnAccount": "Du besitzt noch kein Konto?",
"repeatPasswordEmptyError": "Passwortwiederholung darf nicht leer sein",
"unmatchedPasswordError": "Passwörter stimmen nicht überein"
},
"workspace": {
"create": "Arbeitsbereich erstellen",
"hint": "Arbeitsbereich",
"notFoundError": "Arbeitsbereich nicht gefunden"
},
"shareAction": {
"buttonText": "Teilen",
"workInProgress": "Demnächst verfügbar",
"markdown": "Markdown",
"copyLink": "Link kopieren"
},
"disclosureAction": {
"rename": "Umbenennen",
"delete": "Löschen",
"duplicate": "Duplizieren"
},
"blankPageTitle": "Leere Seite",
"newPageText": "Neue Seite",
"trash": {
"text": "Papierkorb",
"restoreAll": "Alles wiederherstellen",
"deleteAll": "Alles löschen",
"pageHeader": {
"fileName": "Dateiname",
"lastModified": "Letzte Änderung",
"created": "Erstellt"
}
},
"deletePagePrompt": {
"text": "Diese Seite ist im Papierkorb",
"restore": "Seite wiederherstellen",
"deletePermanent": "Dauerhaft löschen"
},
"dialogCreatePageNameHint": "Seitenname",
"questionBubble": {
"whatsNew": "Was gibt es Neues?",
"help": "Hilfe & Support",
"debug": {
"name": "Debug-Informationen",
"success": "Debug-Informationen in die Zwischenablage kopiert!",
"fail": "Debug-Informationen können nicht in die Zwischenablage kopiert werden"
}
},
"menuAppHeader": {
"addPageTooltip": "Schnell eine Seite innerhalb hinzufügen",
"defaultNewPageName": "Unbenannt",
"renameDialog": "Umbenennen"
},
"toolbar": {
"undo": "Rückgängig",
"redo": "Wiederherstellen",
"bold": "Fett",
"italic": "Kursiv",
"underline": "Unterstreichen",
"strike": "Durchstreichen",
"numList": "Nummerierte Liste",
"bulletList": "Aufzählung",
"checkList": "Checkliste",
"inlineCode": "Inline-Code",
"quote": "Zitat",
"header": "Überschrift",
"highlight": "Hervorhebung"
},
"tooltip": {
"lightMode": "In den hellen Modus wechseln",
"darkMode": "In den dunklen Modus wechseln"
},
"contactsPage": {
"title": "Kontakte",
"whatsHappening": "Was geschieht diese Woche?",
"addContact": "Kontakt hinzufügen",
"editContact": "Kontakt bearbeiten"
},
"button": {
"OK": "OK",
"Cancel": "Abbrechen",
"signIn": "Anmelden",
"signOut": "Abmelden",
"complete": "Fertig",
"save": "Speichern"
},
"label": {
"welcome": "Willkommen!",
"firstName": "Vorname",
"middleName": "Zweiter Vorname",
"lastName": "Nachname",
"stepX": "Schritt {X}"
},
"oAuth": {
"err": {
"failedTitle": "Keine Verbindung zu Ihrem Konto möglich.",
"failedMsg": "Bitte vergewissern Sie sich, dass Sie den Anmeldevorgang in Ihrem Browser abgeschlossen haben."
},
"google": {
"title": "GOOGLE ANMELDUNG",
"instruction1": "Um Ihre Google-Kontakte zu importieren, müssen Sie diese Anwendung über Ihren Webbrowser autorisieren.",
"instruction2": "Kopieren Sie diesen Code in Ihre Zwischenablage, indem Sie auf das Symbol klicken oder den Text auswählen:",
"instruction3": "Rufen Sie den folgenden Link in Ihrem Webbrowser auf, und geben Sie den obigen Code ein:",
"instruction4": "Klicken Sie unten auf die Schaltfläche, wenn Sie die Anmeldung abgeschlossen haben:"
}
},
"settings": {
"title": "Einstellungen",
"menu": {
"appearance": "Aussehen",
"language": "Sprache",
"open": "Einstellungen öffnen"
},
"appearance": {
"lightLabel": "Heller Modus",
"darkLabel": "Dunkler Modus"
}
}
}

View File

@ -1,75 +1,75 @@
{
"appName": "AppFlowy",
"defaultUsername": "Moi",
"welcomeText": "Bienvenu à @:appName",
"githubStarText": "Favorier sur GitHub",
"welcomeText": "Bienvenue sur @:appName",
"githubStarText": "Favoriser sur GitHub",
"subscribeNewsletterText": "Abonnez-vous à notre courriel",
"letsGoButtonText": "Allons-y",
"title": "Titre",
"signUp": {
"buttonText": "S'abonner",
"title": "S'abonner à @:appName",
"buttonText": "S'inscrire",
"title": "S'inscrire à @:appName",
"getStartedText": "Commencer",
"emptyPasswordError": "Mot de passe ne doit pas être vide",
"emptyPasswordError": "Vous n'avez pas saisi votre mot de passe",
"repeatPasswordEmptyError": "Mot de passe ne doit pas être vide",
"unmatchedPasswordError": "Les mots de pass ne concordent pas",
"unmatchedPasswordError": "Les deux mots de passe ne sont pas identiques",
"alreadyHaveAnAccount": "Avez-vous déjà un compte?",
"emailHint": "courriel",
"passwordHint": "Mot de passe",
"repeatPasswordHint": "Resaisir le mot de passe"
"repeatPasswordHint": "Ressaisir votre mot de passe"
},
"signIn": {
"loginTitle": "Se connecter à @:appName",
"loginTitle": "Connexion à @:appName",
"loginButtonText": "Connexion",
"buttonText": "Connexion",
"buttonText": "Se connecter",
"forgotPassword": "Mot de passe oublié?",
"emailHint": "courriel",
"passwordHint": "Mot de passe",
"dontHaveAnAccount": "Vous n'avez pas de compte?",
"repeatPasswordEmptyError": "Mot de passe ne doit pas être vide",
"unmatchedPasswordError": "Les mots de passe ne concordent pas"
"unmatchedPasswordError": "Les deux mots de passe ne sont pas identiques"
},
"workspace": {
"create": "Créer une espace de travail",
"hint": "espace de travail",
"notFoundError": "Espace de travail non trouvé"
"create": "Créer un espace de travail",
"hint": "Espace de travail",
"notFoundError": "Espace de travail introuvable"
},
"shareAction": {
"buttonText": "Partager",
"workInProgress": "Bientôt disponible",
"markdown": "Markdown",
"copyLink": "Copier le liens"
"copyLink": "Copier le lien"
},
"disclosureAction": {
"rename": "Renommer",
"delete": "Supprimer",
"duplicate": "Dupliquer"
},
"blankPageTitle": "Page vide",
"blankPageTitle": "Page vierge",
"newPageText": "Nouvelle page",
"trash": {
"text": "Poubelle",
"text": "Corbeille",
"restoreAll": "Tout récupérer",
"deleteAll": "Tout supprimer",
"pageHeader": {
"fileName": "Nom de fichier",
"lastModified": "Dernière modification",
"created": "Crée"
"created": "Créé"
}
},
"deletePagePrompt": {
"text": "Cette page est dans la poubelle",
"text": "Cette page est dans la corbeille",
"restore": "Récupérer la page",
"deletePermanent": "Supprimer en permanence"
"deletePermanent": "Supprimer définitivement"
},
"dialogCreatePageNameHint": "Nom de la page",
"questionBubble": {
"whatsNew": "Quoi de neuf?",
"help": "Aide & Support Technique",
"whatsNew": "Nouveautés",
"help": "Aide et Support Technique",
"debug": {
"name": "Info du système",
"name": "Infos du système",
"success": "Info copié!",
"fail": "Incapable de copié l'info"
"fail": "Impossible de copier l'info"
}
},
"menuAppHeader": {
@ -79,67 +79,67 @@
},
"toolbar": {
"undo": "Annuler",
"redo": "Refaire",
"redo": "Rétablir",
"bold": "Gras",
"italic": "Italique",
"underline": "Souligné",
"underline": "Souligner",
"strike": "Barré",
"numList": "Liste numérotée",
"bulletList": "Liste à puces",
"checkList": "Liste de contrôle",
"inlineCode": "Code en ligne",
"quote": "Citation",
"header": "en-tête",
"header": "En-tête",
"highlight": "Surligner"
},
"tooltip": {
"lightMode": "Aller en mode claire",
"darkMode": "Aller en mode foncé"
"lightMode": "Passer en mode clair",
"darkMode": "Passer en mode sombre"
},
"contactsPage": {
"title": "Contacts",
"whatsHappening": "Quoi de neuf?",
"addContact": "Ajouter Contact",
"editContact": "Éditer Contact"
"addContact": "Ajouter un contact",
"editContact": "Modifier le contact"
},
"button": {
"OK": "OK",
"Cancel": "Annuler",
"signIn": "Connecter",
"signOut": "Déconnecter",
"complete": "Complêt",
"signIn": "Se connecter",
"signOut": "Se déconnecter",
"complete": "Achevé",
"save": "Sauvegarder"
},
"label": {
"welcome": "Bienvenu!",
"welcome": "Bienvenue!",
"firstName": "Prénom",
"middleName": "Nom",
"middleName": "Deuxième nom",
"lastName": "Nom de famille",
"stepX": "Étape {X}"
},
"oAuth": {
"err": {
"failedTitle": "Incapable de connecter à votre compte.",
"failedTitle": "Incapable de se connecter à votre compte.",
"failedMsg": "SVP vous assurrez d'avoir complèté le processus d'enregistrement dans votre fureteur."
},
"google": {
"title": "S'identifier avec Google",
"instruction1": "Pour importer vos contacts Google, vous devez autoriser cette application à l'aide de votre navigateur Web.",
"instruction2": "Copiez ce code dans votre presse-papiers en cliquant sur l'icône ou en sélectionnant le texte :",
"instruction3": "Accédez au lien suivant dans votre navigateur Web et saisissez le code ci-dessus :",
"instruction4": "Appuyez sur le bouton ci-dessous lorsque vous avez terminé votre inscription :"
"instruction2": "Copiez ce code dans votre presse-papiers en cliquant sur l'icône ou en sélectionnant le texte:",
"instruction3": "Accédez au lien suivant dans votre navigateur Web et saisissez le code ci-dessus:",
"instruction4": "Appuyez sur le bouton ci-dessous lorsque vous avez terminé votre inscription:"
}
},
"settings": {
"title": "Réglages",
"title": "Paramètres",
"menu": {
"appearance": "Apparence",
"language": "Langue",
"open": "ouvrir les paramètres"
"open": "Ouvrir les paramètres"
},
"appearance": {
"lightLabel": "Mode claire",
"darkLabel": "Mode foncé"
"lightLabel": "Mode clair",
"darkLabel": "Mode sombre"
}
}
}

View File

@ -1,44 +1,44 @@
{
"appName": "AppFlowy",
"defaultUsername": "Moi",
"welcomeText": "Bienvenue à @:appName",
"githubStarText": "Favorier sur GitHub",
"subscribeNewsletterText": "S'inscrire à la Bulletin",
"welcomeText": "Bienvenue sur @:appName",
"githubStarText": "Favoriser sur GitHub",
"subscribeNewsletterText": "S'inscrire à la Newsletter",
"letsGoButtonText": "Allons-y",
"title": "Titre",
"signUp": {
"buttonText": "S'inscrire",
"title": "Inscrivez-vous pour @:appName",
"title": "Inscrivez-vous sur @:appName",
"getStartedText": "Commencer",
"emptyPasswordError": "Mot de passe ne peut pas être vide",
"repeatPasswordEmptyError": "Le mot de passe de répétition ne peut pas être vide",
"unmatchedPasswordError": "Le mot de passe de répétition n'est pas le même que le mot de passe",
"alreadyHaveAnAccount": "Vous avez déjà un compte?",
"emptyPasswordError": "Vous n'avez pas saisi votre mot de passe",
"repeatPasswordEmptyError": "Vous n'avez pas ressaisi votre mot de passe",
"unmatchedPasswordError": "Les deux mots de passe ne sont pas identiques",
"alreadyHaveAnAccount": "Avez-vous déjà un compte ?",
"emailHint": "Email",
"passwordHint": "Mot de passe",
"repeatPasswordHint": "Répéter le mot de passe"
"repeatPasswordHint": "Ressaisir votre mot de passe"
},
"signIn": {
"loginTitle": "Connexion à @:appName",
"loginButtonText": "Connexion",
"buttonText": "Se connecter",
"forgotPassword": "Mot de passe oublié?",
"forgotPassword": "Mot de passe oublié ?",
"emailHint": "Email",
"passwordHint": "Mot de passe",
"dontHaveAnAccount": "Don't have an account?",
"repeatPasswordEmptyError": "Le mot de passe de répétition ne peut pas être vide",
"unmatchedPasswordError": "Le mot de passe de répétition n'est pas le même que le mot de passe"
"dontHaveAnAccount": "Vous n'avez pas encore créé votre compte ?",
"repeatPasswordEmptyError": "Vous n'avez pas ressaisi votre mot de passe",
"unmatchedPasswordError": "Les deux mots de passe ne sont pas identiques"
},
"workspace": {
"create": "Créer un espace de travail",
"hint": "espace de travail",
"notFoundError": "L'espace de travail pas trouvé"
"hint": "Espace de travail",
"notFoundError": "Espace de travail introuvable"
},
"shareAction": {
"buttonText": "Partager",
"workInProgress": "Bientôt disponible",
"markdown": "Markdown",
"copyLink": "Copier Lien"
"copyLink": "Copier le lien"
},
"disclosureAction": {
"rename": "Renommer",
@ -49,16 +49,16 @@
"newPageText": "Nouvelle page",
"trash": {
"text": "Corbeille",
"restoreAll": "Restaurer Tout",
"deleteAll": "Supprimer Tout",
"restoreAll": "Restaurer tout",
"deleteAll": "Supprimer tout",
"pageHeader": {
"fileName": "Nom de fichier",
"lastModified": "Dernière Modification",
"lastModified": "Dernière modification",
"created": "Créé"
}
},
"deletePagePrompt": {
"text": "Cette page est dans la corbeille",
"text": "Cette page a été supprimée, vous pouvez la retrouver dans la corbeille",
"restore": "Restaurer la page",
"deletePermanent": "Supprimer définitivement"
},
@ -68,8 +68,8 @@
"help": "Aide et Support",
"debug": {
"name": "Informations de Débogage",
"success": "Informations de débogage copiées dans le presse-papiers!",
"fail": "Impossible de copier informations de débogage dans le presse-papiers"
"success": "Informations de Débogage copiées dans le presse-papiers!",
"fail": "Impossible de copier les informations de Débogage dans le presse-papiers"
}
},
"menuAppHeader": {
@ -84,34 +84,34 @@
"italic": "Italique",
"underline": "Souligner",
"strike": "Barré",
"numList": "Liste Numérotée",
"bulletList": "Liste à Puces",
"checkList": "Liste de Contrôle",
"inlineCode": "Code en Ligne",
"quote": "Bloc Citation",
"numList": "Liste numérotée",
"bulletList": "Liste à puces",
"checkList": "To-Do List",
"inlineCode": "Code",
"quote": "Bloc de citation",
"header": "En-tête",
"highlight": "Surligner"
},
"tooltip": {
"lightMode": "Passer en Mode Clair",
"darkMode": "Passer en Mode Sombre"
"lightMode": "Passer en mode clair",
"darkMode": "Passer en mode sombre"
},
"contactsPage": {
"title": "Contacts",
"whatsHappening": "Que se passe-t-il cette semaine?",
"whatsHappening": "Que se passe-t-il cette semaine ?",
"addContact": "Ajouter un contact",
"editContact": "Modifier le contact"
},
"button": {
"OK": "OK",
"Cancel": "Annuler",
"signIn": "Se Connecter",
"signOut": "Se Déconnecter",
"complete": "Complêt",
"signIn": "Se connecter",
"signOut": "Se déconnecter",
"complete": "Achevé",
"save": "Enregistrer"
},
"label": {
"welcome": "Bienvenue!",
"welcome": "Bienvenue !",
"firstName": "Prénom",
"middleName": "Deuxième prénom",
"lastName": "Nom",
@ -135,11 +135,11 @@
"menu": {
"appearance": "Apparence",
"language": "Langue",
"open": "Ouvrir les Paramètres"
"open": "Ouvrir les paramètres"
},
"appearance": {
"lightLabel": "Mode Clair",
"darkLabel": "Mode Sombre"
"lightLabel": "Mode clair",
"darkLabel": "Mode sombre"
}
}
}

View File

@ -0,0 +1,145 @@
{
"appName": "AppFlowy",
"defaultUsername": "Én",
"welcomeText": "Üdvözöl az @:appName",
"githubStarText": "GitHub csillagozás",
"subscribeNewsletterText": "Iratkozz fel a hírlevelünkre",
"letsGoButtonText": "Vágjunk bele",
"title": "Cím",
"signUp": {
"buttonText": "Regisztráció",
"title": "Regisztrálj az @:appName -ra",
"getStartedText": "Kezdés",
"emptyPasswordError": "A jelszó nem lehet üres",
"repeatPasswordEmptyError": "A jelszó megerősítése nem lehet üres",
"unmatchedPasswordError": "A jelszavak nem egyeznek",
"alreadyHaveAnAccount": "Rendelkezel már fiókkal?",
"emailHint": "Email",
"passwordHint": "Jelszó",
"repeatPasswordHint": "Jelszó megerősítése"
},
"signIn": {
"loginTitle": "Bejelentkezés az @:appName -ba",
"loginButtonText": "Belépés",
"buttonText": "Bejelentkezés",
"forgotPassword": "Elfelejtett jelszó?",
"emailHint": "Email",
"passwordHint": "Jelszó",
"dontHaveAnAccount": "Még nincs fiókod?",
"repeatPasswordEmptyError": "A jelszó megerősítése nem lehet üres",
"unmatchedPasswordError": "A jelszavak nem egyeznek"
},
"workspace": {
"create": "Új munkaterület létrehozása",
"hint": "munkaterület",
"notFoundError": "munkaterület nem található"
},
"shareAction": {
"buttonText": "Megosztás",
"workInProgress": "Hamarosan érkezik...",
"markdown": "Markdown",
"copyLink": "Link másolása"
},
"disclosureAction": {
"rename": "Átnevezés",
"delete": "Törlés",
"duplicate": "Duplikálás"
},
"blankPageTitle": "Üres oldal",
"newPageText": "Új oldal",
"trash": {
"text": "Kuka",
"restoreAll": "Összes visszaállítása",
"deleteAll": "Összes törlése",
"pageHeader": {
"fileName": "Fájlnév",
"lastModified": "Utoljára módosítva",
"created": "Létrehozva"
}
},
"deletePagePrompt": {
"text": "Ez az oldal a kukában van",
"restore": "Oldal visszaállítása",
"deletePermanent": "Végleges törlés"
},
"dialogCreatePageNameHint": "Oldalnév",
"questionBubble": {
"whatsNew": "Újdonságok",
"help": "Segítség & Támogatás",
"debug": {
"name": "Debug Információ",
"success": "Debug információ a vágólapra másolva",
"fail": "A Debug információ nem másolható a vágólapra"
}
},
"menuAppHeader": {
"addPageTooltip": "Belső oldal hozzáadása",
"defaultNewPageName": "Névtelen",
"renameDialog": "Átnevezés"
},
"toolbar": {
"undo": "Vissza",
"redo": "Előre",
"bold": "Félkövér",
"italic": "Dőlt",
"underline": "Aláhúzott",
"strike": "Áthúzott",
"numList": "Számozott lista",
"bulletList": "Felsorolás",
"checkList": "Ellenőrző lista",
"inlineCode": "Inline kód",
"quote": "Idézet",
"header": "Címsor",
"highlight": "Kiemelés"
},
"tooltip": {
"lightMode": "Világos mód",
"darkMode": "Éjjeli mód"
},
"contactsPage": {
"title": "Kontaktok",
"whatsHappening": "Heti újdonságok",
"addContact": "Új Kontakt",
"editContact": "Kontakt Szerkesztése"
},
"button": {
"OK": "OK",
"Cancel": "Mégse",
"signIn": "Bejelentkezés",
"signOut": "Kijelentkezés",
"complete": "Kész",
"save": "Mentés"
},
"label": {
"welcome": "Üdvözlünk!",
"firstName": "Keresztnév",
"middleName": "Középső név",
"lastName": "Vezetéknév",
"stepX": "{X}. lépés"
},
"oAuth": {
"err": {
"failedTitle": "Sikertelen bejelentkezés.",
"failedMsg": "Kérjük győződj meg róla, hogy elvégezted a bejelentkezési folyamatot a böngésződben"
},
"google": {
"title": "Bejelentkezés Google-al",
"instruction1": "Ahhoz, hogy hozzáférj a Google Kontaktjaidhoz, kérjük hatalmazd fel ezt az alkalmazást a böngésződben.",
"instruction2": "Másold ezt a kódot a vágólapra az ikonra kattintással vagy a szöveg kijelölésével:",
"instruction3": "Nyisd meg ezt a linket a böngésződben, és írjd be a fenti kódot:",
"instruction4": "Nyomd meg az alábbi gombot, ha elvégezted a registrációt:"
}
},
"settings": {
"title": "Beállítások",
"menu": {
"appearance": "Megjelenés",
"language": "Nyelv",
"open": "Beállítások megnyitása"
},
"appearance": {
"lightLabel": "Világos mód",
"darkLabel": "Éjjeli mód"
}
}
}

View File

@ -0,0 +1,146 @@
{
"appName": "AppFlowy",
"defaultUsername": "Me",
"welcomeText": "Bem vindo @:appName",
"githubStarText": "Star on GitHub",
"subscribeNewsletterText": "Se inscreva na Newsletter",
"letsGoButtonText": "Vamos lá",
"title": "Título",
"signUp": {
"buttonText": "Inscreve-se",
"title": "Inscrever-se @:appName",
"getStartedText": "Começar",
"emptyPasswordError": "Senha não pode ser em branco.",
"repeatPasswordEmptyError": "Confirmar a senha não pode ser em branco.",
"unmatchedPasswordError": "As senhas não conferem.",
"alreadyHaveAnAccount": "Já possui uma conta?",
"emailHint": "Email",
"passwordHint": "Senha",
"repeatPasswordHint": "Confirme a senha"
},
"signIn": {
"loginTitle": "Login to @:appName",
"loginButtonText": "Login",
"buttonText": "Entre",
"forgotPassword": "Esqueceu a senha?",
"emailHint": "Email",
"passwordHint": "Senha",
"dontHaveAnAccount": "Não possui uma conta?",
"repeatPasswordEmptyError": "Confirmar a senha não pode ser em branco.",
"unmatchedPasswordError": "As senhas não conferem."
},
"workspace": {
"create": "Crie uma área de trabalho",
"hint": "área de trabalho",
"notFoundError": "Área de trabalho não encontrada"
},
"shareAction": {
"buttonText": "Compartilhar",
"workInProgress": "Em breve",
"markdown": "Markdown",
"copyLink": "Copiar o link"
},
"disclosureAction": {
"rename": "Renomear",
"delete": "Deletar",
"duplicate": "Duplicar"
},
"blankPageTitle": "Página em branco",
"newPageText": "Nova página",
"trash": {
"text": "Lixeira",
"restoreAll": "Restaurar todos",
"deleteAll": "Deletar todos",
"pageHeader": {
"fileName": "Nome do arquivo",
"lastModified": "Última modificação",
"created": "Criado"
}
},
"deletePagePrompt": {
"text": "Está página está na lixeira",
"restore": "Restaurar a oágina",
"deletePermanent": "Deletar permanentemente"
},
"dialogCreatePageNameHint": "Nome da página",
"questionBubble": {
"whatsNew": "O que há de novo?",
"help": "Ajuda & Suporte",
"debug": {
"name": "Informação de debug",
"success": "Copiar informação de debug para o clipboard!",
"fail": "Falha em copiar a informação de debug para o clipboard"
}
},
"menuAppHeader": {
"addPageTooltip": "Adicione uma nova página.",
"defaultNewPageName": "Sem título",
"renameDialog": "Renomear"
},
"toolbar": {
"undo": "Desfazer",
"redo": "Refazer",
"bold": "Negrito",
"italic": "Itálico",
"underline": "Sublinhado",
"strike": "Tachado",
"numList": "Lista numerada",
"bulletList": "Lista com marcadores",
"checkList": "Check List",
"inlineCode": "Embutir código",
"quote": "Citação em bloco",
"header": "Cabeçalho",
"highlight": "Realçar"
},
"tooltip": {
"lightMode": "Mudar para o modo Claro.",
"darkMode": "Mudar para o modo Escuro."
},
"contactsPage": {
"title": "Contatos",
"whatsHappening": "O que está acontecendo essa semana?",
"addContact": "Adicionar um contato",
"editContact": "Editar um contato"
},
"button": {
"OK": "OK",
"Cancel": "Canelar",
"signIn": "Entrar",
"signOut": "Sair",
"complete": "Completar",
"save": "Salvar"
},
"label": {
"welcome": "Bem vindo!",
"firstName": "Primeiro Nome",
"middleName": "Nome do Meio",
"lastName": "Último Nome",
"stepX": "Passo {X}"
},
"oAuth": {
"err": {
"failedTitle": "Erro ao conectar a sua conta.",
"failedMsg": "Verifique se você concluiu o processo de login em seu navegador."
},
"google": {
"title": "GOOGLE SIGN-IN",
"instruction1": "Para importar seus Contatos do Google, você precisará autorizar este aplicativo usando seu navegador web.",
"instruction2": "Copie este código para sua área de transferência clicando no ícone ou selecionando o texto:",
"instruction3": "Navegue até o link a seguir em seu navegador e digite o código acima:",
"instruction4": "Pressione o botão abaixo ao concluir a inscrição:"
}
},
"settings": {
"title": "Configurações",
"menu": {
"appearance": "Aparência",
"language": "Idioma",
"open": "Abrir as Configurações"
},
"appearance": {
"lightLabel": "Modo Claro",
"darkLabel": "Modo Escuro"
}
}
}

View File

@ -29,11 +29,15 @@ class InitAppWidgetTask extends LaunchTask {
EasyLocalization(
supportedLocales: const [
// In alphabetical order
Locale('ca', 'ES'),
Locale('de', 'DE'),
Locale('en'),
Locale('es', 'VE'),
Locale('fr'),
Locale('fr', 'FR'),
Locale('fr', 'CA'),
Locale('hu', 'HU'),
Locale('it', 'IT'),
Locale('pt', 'BR'),
Locale('ru', 'RU'),
Locale('zh', 'CN'),
],

View File

@ -1,890 +0,0 @@
// coverage:ignore-file
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
part of 'welcome_bloc.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
T _$identity<T>(T value) => value;
final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
/// @nodoc
class _$WelcomeEventTearOff {
const _$WelcomeEventTearOff();
Initial initial() {
return const Initial();
}
CreateWorkspace createWorkspace(String name, String desc) {
return CreateWorkspace(
name,
desc,
);
}
OpenWorkspace openWorkspace(Workspace workspace) {
return OpenWorkspace(
workspace,
);
}
WorkspacesReceived workspacesReveived(
Either<List<Workspace>, FlowyError> workspacesOrFail) {
return WorkspacesReceived(
workspacesOrFail,
);
}
}
/// @nodoc
const $WelcomeEvent = _$WelcomeEventTearOff();
/// @nodoc
mixin _$WelcomeEvent {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function(String name, String desc) createWorkspace,
required TResult Function(Workspace workspace) openWorkspace,
required TResult Function(
Either<List<Workspace>, FlowyError> workspacesOrFail)
workspacesReveived,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
required TResult orElse(),
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(Initial value) initial,
required TResult Function(CreateWorkspace value) createWorkspace,
required TResult Function(OpenWorkspace value) openWorkspace,
required TResult Function(WorkspacesReceived value) workspacesReveived,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
required TResult orElse(),
}) =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $WelcomeEventCopyWith<$Res> {
factory $WelcomeEventCopyWith(
WelcomeEvent value, $Res Function(WelcomeEvent) then) =
_$WelcomeEventCopyWithImpl<$Res>;
}
/// @nodoc
class _$WelcomeEventCopyWithImpl<$Res> implements $WelcomeEventCopyWith<$Res> {
_$WelcomeEventCopyWithImpl(this._value, this._then);
final WelcomeEvent _value;
// ignore: unused_field
final $Res Function(WelcomeEvent) _then;
}
/// @nodoc
abstract class $InitialCopyWith<$Res> {
factory $InitialCopyWith(Initial value, $Res Function(Initial) then) =
_$InitialCopyWithImpl<$Res>;
}
/// @nodoc
class _$InitialCopyWithImpl<$Res> extends _$WelcomeEventCopyWithImpl<$Res>
implements $InitialCopyWith<$Res> {
_$InitialCopyWithImpl(Initial _value, $Res Function(Initial) _then)
: super(_value, (v) => _then(v as Initial));
@override
Initial get _value => super._value as Initial;
}
/// @nodoc
class _$Initial implements Initial {
const _$Initial();
@override
String toString() {
return 'WelcomeEvent.initial()';
}
@override
bool operator ==(dynamic other) {
return identical(this, other) || (other is Initial);
}
@override
int get hashCode => runtimeType.hashCode;
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function(String name, String desc) createWorkspace,
required TResult Function(Workspace workspace) openWorkspace,
required TResult Function(
Either<List<Workspace>, FlowyError> workspacesOrFail)
workspacesReveived,
}) {
return initial();
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
}) {
return initial?.call();
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
required TResult orElse(),
}) {
if (initial != null) {
return initial();
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(Initial value) initial,
required TResult Function(CreateWorkspace value) createWorkspace,
required TResult Function(OpenWorkspace value) openWorkspace,
required TResult Function(WorkspacesReceived value) workspacesReveived,
}) {
return initial(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
}) {
return initial?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
required TResult orElse(),
}) {
if (initial != null) {
return initial(this);
}
return orElse();
}
}
abstract class Initial implements WelcomeEvent {
const factory Initial() = _$Initial;
}
/// @nodoc
abstract class $CreateWorkspaceCopyWith<$Res> {
factory $CreateWorkspaceCopyWith(
CreateWorkspace value, $Res Function(CreateWorkspace) then) =
_$CreateWorkspaceCopyWithImpl<$Res>;
$Res call({String name, String desc});
}
/// @nodoc
class _$CreateWorkspaceCopyWithImpl<$Res>
extends _$WelcomeEventCopyWithImpl<$Res>
implements $CreateWorkspaceCopyWith<$Res> {
_$CreateWorkspaceCopyWithImpl(
CreateWorkspace _value, $Res Function(CreateWorkspace) _then)
: super(_value, (v) => _then(v as CreateWorkspace));
@override
CreateWorkspace get _value => super._value as CreateWorkspace;
@override
$Res call({
Object? name = freezed,
Object? desc = freezed,
}) {
return _then(CreateWorkspace(
name == freezed
? _value.name
: name // ignore: cast_nullable_to_non_nullable
as String,
desc == freezed
? _value.desc
: desc // ignore: cast_nullable_to_non_nullable
as String,
));
}
}
/// @nodoc
class _$CreateWorkspace implements CreateWorkspace {
const _$CreateWorkspace(this.name, this.desc);
@override
final String name;
@override
final String desc;
@override
String toString() {
return 'WelcomeEvent.createWorkspace(name: $name, desc: $desc)';
}
@override
bool operator ==(dynamic other) {
return identical(this, other) ||
(other is CreateWorkspace &&
(identical(other.name, name) ||
const DeepCollectionEquality().equals(other.name, name)) &&
(identical(other.desc, desc) ||
const DeepCollectionEquality().equals(other.desc, desc)));
}
@override
int get hashCode =>
runtimeType.hashCode ^
const DeepCollectionEquality().hash(name) ^
const DeepCollectionEquality().hash(desc);
@JsonKey(ignore: true)
@override
$CreateWorkspaceCopyWith<CreateWorkspace> get copyWith =>
_$CreateWorkspaceCopyWithImpl<CreateWorkspace>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function(String name, String desc) createWorkspace,
required TResult Function(Workspace workspace) openWorkspace,
required TResult Function(
Either<List<Workspace>, FlowyError> workspacesOrFail)
workspacesReveived,
}) {
return createWorkspace(name, desc);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
}) {
return createWorkspace?.call(name, desc);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
required TResult orElse(),
}) {
if (createWorkspace != null) {
return createWorkspace(name, desc);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(Initial value) initial,
required TResult Function(CreateWorkspace value) createWorkspace,
required TResult Function(OpenWorkspace value) openWorkspace,
required TResult Function(WorkspacesReceived value) workspacesReveived,
}) {
return createWorkspace(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
}) {
return createWorkspace?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
required TResult orElse(),
}) {
if (createWorkspace != null) {
return createWorkspace(this);
}
return orElse();
}
}
abstract class CreateWorkspace implements WelcomeEvent {
const factory CreateWorkspace(String name, String desc) = _$CreateWorkspace;
String get name => throw _privateConstructorUsedError;
String get desc => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$CreateWorkspaceCopyWith<CreateWorkspace> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $OpenWorkspaceCopyWith<$Res> {
factory $OpenWorkspaceCopyWith(
OpenWorkspace value, $Res Function(OpenWorkspace) then) =
_$OpenWorkspaceCopyWithImpl<$Res>;
$Res call({Workspace workspace});
}
/// @nodoc
class _$OpenWorkspaceCopyWithImpl<$Res> extends _$WelcomeEventCopyWithImpl<$Res>
implements $OpenWorkspaceCopyWith<$Res> {
_$OpenWorkspaceCopyWithImpl(
OpenWorkspace _value, $Res Function(OpenWorkspace) _then)
: super(_value, (v) => _then(v as OpenWorkspace));
@override
OpenWorkspace get _value => super._value as OpenWorkspace;
@override
$Res call({
Object? workspace = freezed,
}) {
return _then(OpenWorkspace(
workspace == freezed
? _value.workspace
: workspace // ignore: cast_nullable_to_non_nullable
as Workspace,
));
}
}
/// @nodoc
class _$OpenWorkspace implements OpenWorkspace {
const _$OpenWorkspace(this.workspace);
@override
final Workspace workspace;
@override
String toString() {
return 'WelcomeEvent.openWorkspace(workspace: $workspace)';
}
@override
bool operator ==(dynamic other) {
return identical(this, other) ||
(other is OpenWorkspace &&
(identical(other.workspace, workspace) ||
const DeepCollectionEquality()
.equals(other.workspace, workspace)));
}
@override
int get hashCode =>
runtimeType.hashCode ^ const DeepCollectionEquality().hash(workspace);
@JsonKey(ignore: true)
@override
$OpenWorkspaceCopyWith<OpenWorkspace> get copyWith =>
_$OpenWorkspaceCopyWithImpl<OpenWorkspace>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function(String name, String desc) createWorkspace,
required TResult Function(Workspace workspace) openWorkspace,
required TResult Function(
Either<List<Workspace>, FlowyError> workspacesOrFail)
workspacesReveived,
}) {
return openWorkspace(workspace);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
}) {
return openWorkspace?.call(workspace);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
required TResult orElse(),
}) {
if (openWorkspace != null) {
return openWorkspace(workspace);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(Initial value) initial,
required TResult Function(CreateWorkspace value) createWorkspace,
required TResult Function(OpenWorkspace value) openWorkspace,
required TResult Function(WorkspacesReceived value) workspacesReveived,
}) {
return openWorkspace(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
}) {
return openWorkspace?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
required TResult orElse(),
}) {
if (openWorkspace != null) {
return openWorkspace(this);
}
return orElse();
}
}
abstract class OpenWorkspace implements WelcomeEvent {
const factory OpenWorkspace(Workspace workspace) = _$OpenWorkspace;
Workspace get workspace => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$OpenWorkspaceCopyWith<OpenWorkspace> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $WorkspacesReceivedCopyWith<$Res> {
factory $WorkspacesReceivedCopyWith(
WorkspacesReceived value, $Res Function(WorkspacesReceived) then) =
_$WorkspacesReceivedCopyWithImpl<$Res>;
$Res call({Either<List<Workspace>, FlowyError> workspacesOrFail});
}
/// @nodoc
class _$WorkspacesReceivedCopyWithImpl<$Res>
extends _$WelcomeEventCopyWithImpl<$Res>
implements $WorkspacesReceivedCopyWith<$Res> {
_$WorkspacesReceivedCopyWithImpl(
WorkspacesReceived _value, $Res Function(WorkspacesReceived) _then)
: super(_value, (v) => _then(v as WorkspacesReceived));
@override
WorkspacesReceived get _value => super._value as WorkspacesReceived;
@override
$Res call({
Object? workspacesOrFail = freezed,
}) {
return _then(WorkspacesReceived(
workspacesOrFail == freezed
? _value.workspacesOrFail
: workspacesOrFail // ignore: cast_nullable_to_non_nullable
as Either<List<Workspace>, FlowyError>,
));
}
}
/// @nodoc
class _$WorkspacesReceived implements WorkspacesReceived {
const _$WorkspacesReceived(this.workspacesOrFail);
@override
final Either<List<Workspace>, FlowyError> workspacesOrFail;
@override
String toString() {
return 'WelcomeEvent.workspacesReveived(workspacesOrFail: $workspacesOrFail)';
}
@override
bool operator ==(dynamic other) {
return identical(this, other) ||
(other is WorkspacesReceived &&
(identical(other.workspacesOrFail, workspacesOrFail) ||
const DeepCollectionEquality()
.equals(other.workspacesOrFail, workspacesOrFail)));
}
@override
int get hashCode =>
runtimeType.hashCode ^
const DeepCollectionEquality().hash(workspacesOrFail);
@JsonKey(ignore: true)
@override
$WorkspacesReceivedCopyWith<WorkspacesReceived> get copyWith =>
_$WorkspacesReceivedCopyWithImpl<WorkspacesReceived>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function(String name, String desc) createWorkspace,
required TResult Function(Workspace workspace) openWorkspace,
required TResult Function(
Either<List<Workspace>, FlowyError> workspacesOrFail)
workspacesReveived,
}) {
return workspacesReveived(workspacesOrFail);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
}) {
return workspacesReveived?.call(workspacesOrFail);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function(String name, String desc)? createWorkspace,
TResult Function(Workspace workspace)? openWorkspace,
TResult Function(Either<List<Workspace>, FlowyError> workspacesOrFail)?
workspacesReveived,
required TResult orElse(),
}) {
if (workspacesReveived != null) {
return workspacesReveived(workspacesOrFail);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(Initial value) initial,
required TResult Function(CreateWorkspace value) createWorkspace,
required TResult Function(OpenWorkspace value) openWorkspace,
required TResult Function(WorkspacesReceived value) workspacesReveived,
}) {
return workspacesReveived(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
}) {
return workspacesReveived?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(Initial value)? initial,
TResult Function(CreateWorkspace value)? createWorkspace,
TResult Function(OpenWorkspace value)? openWorkspace,
TResult Function(WorkspacesReceived value)? workspacesReveived,
required TResult orElse(),
}) {
if (workspacesReveived != null) {
return workspacesReveived(this);
}
return orElse();
}
}
abstract class WorkspacesReceived implements WelcomeEvent {
const factory WorkspacesReceived(
Either<List<Workspace>, FlowyError> workspacesOrFail) =
_$WorkspacesReceived;
Either<List<Workspace>, FlowyError> get workspacesOrFail =>
throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$WorkspacesReceivedCopyWith<WorkspacesReceived> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
class _$WelcomeStateTearOff {
const _$WelcomeStateTearOff();
_WelcomeState call(
{required bool isLoading,
required List<Workspace> workspaces,
required Either<Unit, FlowyError> successOrFailure}) {
return _WelcomeState(
isLoading: isLoading,
workspaces: workspaces,
successOrFailure: successOrFailure,
);
}
}
/// @nodoc
const $WelcomeState = _$WelcomeStateTearOff();
/// @nodoc
mixin _$WelcomeState {
bool get isLoading => throw _privateConstructorUsedError;
List<Workspace> get workspaces => throw _privateConstructorUsedError;
Either<Unit, FlowyError> get successOrFailure =>
throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$WelcomeStateCopyWith<WelcomeState> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $WelcomeStateCopyWith<$Res> {
factory $WelcomeStateCopyWith(
WelcomeState value, $Res Function(WelcomeState) then) =
_$WelcomeStateCopyWithImpl<$Res>;
$Res call(
{bool isLoading,
List<Workspace> workspaces,
Either<Unit, FlowyError> successOrFailure});
}
/// @nodoc
class _$WelcomeStateCopyWithImpl<$Res> implements $WelcomeStateCopyWith<$Res> {
_$WelcomeStateCopyWithImpl(this._value, this._then);
final WelcomeState _value;
// ignore: unused_field
final $Res Function(WelcomeState) _then;
@override
$Res call({
Object? isLoading = freezed,
Object? workspaces = freezed,
Object? successOrFailure = freezed,
}) {
return _then(_value.copyWith(
isLoading: isLoading == freezed
? _value.isLoading
: isLoading // ignore: cast_nullable_to_non_nullable
as bool,
workspaces: workspaces == freezed
? _value.workspaces
: workspaces // ignore: cast_nullable_to_non_nullable
as List<Workspace>,
successOrFailure: successOrFailure == freezed
? _value.successOrFailure
: successOrFailure // ignore: cast_nullable_to_non_nullable
as Either<Unit, FlowyError>,
));
}
}
/// @nodoc
abstract class _$WelcomeStateCopyWith<$Res>
implements $WelcomeStateCopyWith<$Res> {
factory _$WelcomeStateCopyWith(
_WelcomeState value, $Res Function(_WelcomeState) then) =
__$WelcomeStateCopyWithImpl<$Res>;
@override
$Res call(
{bool isLoading,
List<Workspace> workspaces,
Either<Unit, FlowyError> successOrFailure});
}
/// @nodoc
class __$WelcomeStateCopyWithImpl<$Res> extends _$WelcomeStateCopyWithImpl<$Res>
implements _$WelcomeStateCopyWith<$Res> {
__$WelcomeStateCopyWithImpl(
_WelcomeState _value, $Res Function(_WelcomeState) _then)
: super(_value, (v) => _then(v as _WelcomeState));
@override
_WelcomeState get _value => super._value as _WelcomeState;
@override
$Res call({
Object? isLoading = freezed,
Object? workspaces = freezed,
Object? successOrFailure = freezed,
}) {
return _then(_WelcomeState(
isLoading: isLoading == freezed
? _value.isLoading
: isLoading // ignore: cast_nullable_to_non_nullable
as bool,
workspaces: workspaces == freezed
? _value.workspaces
: workspaces // ignore: cast_nullable_to_non_nullable
as List<Workspace>,
successOrFailure: successOrFailure == freezed
? _value.successOrFailure
: successOrFailure // ignore: cast_nullable_to_non_nullable
as Either<Unit, FlowyError>,
));
}
}
/// @nodoc
class _$_WelcomeState implements _WelcomeState {
const _$_WelcomeState(
{required this.isLoading,
required this.workspaces,
required this.successOrFailure});
@override
final bool isLoading;
@override
final List<Workspace> workspaces;
@override
final Either<Unit, FlowyError> successOrFailure;
@override
String toString() {
return 'WelcomeState(isLoading: $isLoading, workspaces: $workspaces, successOrFailure: $successOrFailure)';
}
@override
bool operator ==(dynamic other) {
return identical(this, other) ||
(other is _WelcomeState &&
(identical(other.isLoading, isLoading) ||
const DeepCollectionEquality()
.equals(other.isLoading, isLoading)) &&
(identical(other.workspaces, workspaces) ||
const DeepCollectionEquality()
.equals(other.workspaces, workspaces)) &&
(identical(other.successOrFailure, successOrFailure) ||
const DeepCollectionEquality()
.equals(other.successOrFailure, successOrFailure)));
}
@override
int get hashCode =>
runtimeType.hashCode ^
const DeepCollectionEquality().hash(isLoading) ^
const DeepCollectionEquality().hash(workspaces) ^
const DeepCollectionEquality().hash(successOrFailure);
@JsonKey(ignore: true)
@override
_$WelcomeStateCopyWith<_WelcomeState> get copyWith =>
__$WelcomeStateCopyWithImpl<_WelcomeState>(this, _$identity);
}
abstract class _WelcomeState implements WelcomeState {
const factory _WelcomeState(
{required bool isLoading,
required List<Workspace> workspaces,
required Either<Unit, FlowyError> successOrFailure}) = _$_WelcomeState;
@override
bool get isLoading => throw _privateConstructorUsedError;
@override
List<Workspace> get workspaces => throw _privateConstructorUsedError;
@override
Either<Unit, FlowyError> get successOrFailure =>
throw _privateConstructorUsedError;
@override
@JsonKey(ignore: true)
_$WelcomeStateCopyWith<_WelcomeState> get copyWith =>
throw _privateConstructorUsedError;
}

View File

@ -114,7 +114,7 @@ class _DeltaVisitor implements ast.NodeVisitor {
// TODO(kolja): Determine which behavior we really want here.
// We can either insert an additional newline or just have the
// paragraphs as single lines. Zefyr will by default render two lines
// are different paragraphs so for now we will not add an additonal
// are different paragraphs so for now we will not add an additional
// newline here.
//
// if (previousToplevelElement != null &&

View File

@ -154,7 +154,7 @@ abstract class InlineSyntax {
/// Tries to match at the parser's current position.
///
/// The parser's position can be overriden with [startMatchPos].
/// The parser's position can be overridden with [startMatchPos].
/// Returns whether or not the pattern successfully matched.
bool tryMatch(InlineParser parser, [int? startMatchPos]) {
startMatchPos ??= parser.pos;
@ -609,7 +609,7 @@ class LinkSyntax extends TagSyntax {
//
// Once we have parsed `Text [`, there is one (pending) link in the state
// stack. It is, by default, active. Once we parse the next possible link,
// `[more](links)`, as a real link, we must deactive the pending links (just
// `[more](links)`, as a real link, we must deactivate the pending links (just
// the one, in this case).
var _pendingStatesAreActive = true;
@ -933,7 +933,7 @@ class LinkSyntax extends TagSyntax {
// followed by mystery characters; no longer a link.
return null;
}
// [_parseTitle] made sure the title was follwed by a closing `)`
// [_parseTitle] made sure the title was followed by a closing `)`
// (but it's up to the code here to examine the balance of
// parentheses).
parenCount--;

View File

@ -75,7 +75,7 @@ class HomeMenu extends StatelessWidget {
}
Widget _renderBody(BuildContext context) {
// nested cloumn: https://siddharthmolleti.com/flutter-box-constraints-nested-column-s-row-s-3dfacada7361
// nested column: https://siddharthmolleti.com/flutter-box-constraints-nested-column-s-row-s-3dfacada7361
final theme = context.watch<AppTheme>();
return Container(
color: theme.bg1,

View File

@ -35,7 +35,7 @@ class Config {
/// Can be smaller due to screen size and amount of columns
final double emojiSizeMax;
/// Verical spacing between emojis
/// Vertical spacing between emojis
final double verticalSpacing;
/// Horizontal spacing between emojis
@ -57,7 +57,7 @@ class Config {
/// The color of the category icon when selected
final Color iconColorSelected;
/// The color of the loading indicator during initalization
/// The color of the loading indicator during initialization
final Color progressIndicatorColor;
/// The color of the backspace icon button

View File

@ -40,7 +40,7 @@ enum Category {
/// Travel emojis
TRAVEL,
/// Ojects emojis
/// Objects emojis
OBJECTS,
/// Sumbol emojis
@ -179,7 +179,7 @@ class _EmojiPickerState extends State<EmojiPicker> {
};
}
// Initalize emoji data
// Initialize emoji data
Future<void> _updateEmojis() async {
categoryEmoji.clear();
if (widget.config.showRecentsTab) {

View File

@ -4,7 +4,7 @@ import 'config.dart';
import 'emoji_view_state.dart';
/// Template class for custom implementation
/// Inhert this class to create your own EmojiPicker
/// Inherit this class to create your own EmojiPicker
abstract class EmojiPickerBuilder extends StatefulWidget {
/// Constructor
const EmojiPickerBuilder(this.config, this.state, {Key? key}) : super(key: key);

View File

@ -9,14 +9,27 @@ String languageFromLocale(Locale locale) {
return "简体中文";
// Then in alphabetical order
case "ca":
return "Català";
case "de":
return "Deutsch";
case "es":
return "Español";
case "fr":
return "Français";
switch (locale.countryCode) {
case "CA":
return "Français (CA)";
case "FR":
return "Français (FR)";
default:
return locale.languageCode;
}
case "hu":
return "Magyar";
case "it":
return "Italiano";
case "pt":
return "Português";
case "ru":
return "русский";

View File

@ -18,10 +18,10 @@ abstract class FlowyInfraUIPlatform extends PlatformInterface {
}
Stream<bool> get onKeyboardVisibilityChange {
throw UnimplementedError('`onKeyboardChange` should be overrided by subclass.');
throw UnimplementedError('`onKeyboardChange` should be overridden by subclass.');
}
Future<String?> getPlatformVersion() {
throw UnimplementedError('`getPlatformVersion` should be overrided by subclass.');
throw UnimplementedError('`getPlatformVersion` should be overridden by subclass.');
}
}

View File

@ -37,7 +37,7 @@ enum OverlapBehaviour {
/// Maintain overlay size, which may cover the anchor widget.
none,
/// Resize overlay to avoid overlaping the anchor widget.
/// Resize overlay to avoid overlapping the anchor widget.
stretch,
}

View File

@ -82,7 +82,7 @@
});
// If service worker doesn't succeed in a reasonable amount of time,
// fallback to plaint <script> tag.
// fallback to plain <script> tag.
setTimeout(() => {
if (!scriptLoaded) {
console.warn(

View File

@ -4,11 +4,11 @@
mod errors;
pub use errors::*;
mod user_setting;
pub use user_setting::*;
mod user_profile;
pub use user_profile::*;
mod auth;
pub use auth::*;
mod user_setting;
pub use user_setting::*;