refactor(theme): the look comes from halkyon_ui
The theme, Noto Sans, the window sizes and the widgets every screen is built of move to halkyon_ui (halkyon_shared), pinned to a signed commit as the sync fork is, so Halkyon's other apps share them. Learn keeps its own colours (the FSRS ratings, a starred star) as LearnColors beside the theme, the CJK fonts with their licences, and its launch screen's word and icon. Nothing on screen changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
642c1c7e9f
commit
f43b92e4db
219 changed files with 451 additions and 4755 deletions
10
AGENTS.md
10
AGENTS.md
File diff suppressed because one or more lines are too long
|
|
@ -1,17 +1,18 @@
|
|||
# Fonts
|
||||
|
||||
The app brings its fonts with it and never fetches any: text looks the same on
|
||||
every device, whatever fonts it has.
|
||||
every device, whatever fonts it has. Noto Sans, its font, comes with halkyon_ui
|
||||
(halkyon_shared), which bundles it with its licence and registers it; the fonts
|
||||
for Japanese, Chinese and Korean are the app's own, here.
|
||||
|
||||
| File | Font | Source | Licence |
|
||||
|---|---|---|---|
|
||||
| `NotoSans-Variable.ttf`, `NotoSans-Italic-Variable.ttf` | Noto Sans (Latin, Greek incl. polytonic, Cyrillic), every weight | [notofonts/latin-greek-cyrillic](https://github.com/notofonts/latin-greek-cyrillic) release NotoSans-v2.015, `unhinted/slim-variable-ttf` | SIL Open Font License 1.1, `OFL-NotoSans.txt` |
|
||||
| `NotoSansJP-Variable.otf`, `NotoSansSC-Variable.otf`, `NotoSansTC-Variable.otf`, `NotoSansKR-Variable.otf` | Noto Sans JP, SC, TC, KR (Japanese, Simplified and Traditional Chinese, Korean), every weight | [notofonts/noto-cjk](https://github.com/notofonts/noto-cjk) `Sans/Variable/OTF/Subset/NotoSans{JP,SC,TC,KR}-VF.otf`, commit f8d157532fbf (2026-10-08) | SIL Open Font License 1.1, `OFL-NotoSansCJK.txt` |
|
||||
|
||||
Noto Sans is the app's font; the CJK fonts fill in the glyphs it lacks, the
|
||||
one matching a studyset's language first, Japanese otherwise
|
||||
(`lib/src/core/theme/app_fonts.dart`): they share most Han characters but draw
|
||||
them differently. Noto Sans JP alone would not do as the app's font: it has
|
||||
one matching a studyset's language first, Japanese otherwise (halkyon_ui's
|
||||
`appFontFallbackFor`, which names them by the families `pubspec.yaml`
|
||||
declares): they share most Han characters but draw them differently. Noto Sans JP alone would not do as the app's font: it has
|
||||
no accented or polytonic Greek. Scripts none of them covers (Arabic, Hebrew,
|
||||
Thai, Devanagari, …) come from the device's own fonts. The files are renamed
|
||||
only; their glyphs are unchanged. The licences are shown in the app's licence
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -1,93 +0,0 @@
|
|||
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
|
@ -2,7 +2,6 @@
|
|||
"@@locale": "de",
|
||||
|
||||
"appTitle": "Halkyon Learn",
|
||||
"launchBrand": "Halkyon",
|
||||
"launchProduct": "Learn",
|
||||
|
||||
"shellTabHome": "Startseite",
|
||||
|
|
@ -50,8 +49,6 @@
|
|||
"studysetSheetDiscardMessage": "Du hast ungespeicherte Änderungen an diesem Lernset. Verwerfen und das Formular schließen?",
|
||||
"studysetSheetDiscardConfirm": "Verwerfen",
|
||||
|
||||
"paletteColorName": "{name, select, carrot{Karotte} cerise{Kirschrot} cobalt{Kobalt} copper{Kupfer} enzian{Enzian} fern{Farn} forest{Wald} ocean{Ozean} olive{Olive} pacific{Pazifik} pickle{Essiggurke} pine{Kiefer} pink{Rosa} plum{Pflaume} purple{Lila} reef{Riff} sahara{Sahara} slateblue{Schieferblau} soil{Erde} strawberry{Erdbeere} other{{name}}}",
|
||||
"colorPickerLabel": "Farbe: {color}",
|
||||
|
||||
"studysetCountFlashcards": "{count, plural, =1{1 Karteikarte} other{{count} Karteikarten}}",
|
||||
"studysetCountNotes": "{count, plural, =1{1 Notiz} other{{count} Notizen}}",
|
||||
|
|
@ -446,7 +443,6 @@
|
|||
"languageChineseSimplified": "Chinesisch (vereinfacht)",
|
||||
"languageChineseTraditional": "Chinesisch (traditionell)",
|
||||
"fieldRequired": "Pflichtfeld",
|
||||
"fieldRequiredHelper": "Pflichtfeld",
|
||||
|
||||
"exploreTitle": "Entdecken",
|
||||
"exploreEmpty": "Lernsets, die andere teilen, erscheinen hier.",
|
||||
|
|
@ -1090,9 +1086,6 @@
|
|||
"studySortOldestFirst": "Älteste zuerst",
|
||||
"studySortRandom": "Zufällig",
|
||||
"studySortNewestFirst": "Neueste zuerst",
|
||||
"studyFewer": "Verringern",
|
||||
"studyMore": "Erhöhen",
|
||||
"countStepperType": "Zahl eingeben",
|
||||
"studyLimitNewPerDay": "Neue Karten pro Tag begrenzen",
|
||||
"studyLimitReviewsPerDay": "Wiederholungen pro Tag begrenzen",
|
||||
|
||||
|
|
@ -1190,7 +1183,6 @@
|
|||
"commonCancel": "Abbrechen",
|
||||
"commonSave": "Speichern",
|
||||
"commonClose": "Schließen",
|
||||
"commonUndo": "Rückgängig",
|
||||
"moreInfo": "Weitere Informationen",
|
||||
"moreInfoCreated": "Erstellt",
|
||||
"moreInfoModified": "Zuletzt geändert",
|
||||
|
|
@ -1202,8 +1194,6 @@
|
|||
"moreInfoReviews": "Wiederholungen",
|
||||
"moreInfoReviewCount": "Anzahl Wiederholungen",
|
||||
"moreInfoLastReviewed": "Zuletzt wiederholt",
|
||||
"moreInfoCopy": "Kopieren",
|
||||
"copiedToClipboard": "In die Zwischenablage kopiert",
|
||||
"commonTryAgain": "Erneut versuchen",
|
||||
"personDataFailed": "Die Daten dieses Geräts konnten nicht geöffnet werden.",
|
||||
"sessionUnreachable": "Der Server war nicht erreichbar.",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
"@@locale": "en",
|
||||
|
||||
"appTitle": "Halkyon Learn",
|
||||
"launchBrand": "Halkyon",
|
||||
"launchProduct": "Learn",
|
||||
"@appTitle": {"description": "The app's name, e.g. in the window title and the rail's logo."},
|
||||
|
||||
|
|
@ -65,10 +64,6 @@
|
|||
"studysetSheetDiscardMessage": "You have unsaved changes to this studyset. Discard them and close the form?",
|
||||
"studysetSheetDiscardConfirm": "Discard",
|
||||
|
||||
"paletteColorName": "{name, select, carrot{Carrot} cerise{Cerise} cobalt{Cobalt} copper{Copper} enzian{Enzian} fern{Fern} forest{Forest} ocean{Ocean} olive{Olive} pacific{Pacific} pickle{Pickle} pine{Pine} pink{Pink} plum{Plum} purple{Purple} reef{Reef} sahara{Sahara} slateblue{Slate blue} soil{Soil} strawberry{Strawberry} other{{name}}}",
|
||||
"@paletteColorName": {"description": "A colour of the palette content can take, by its stored name.", "placeholders": {"name": {"type": "String"}}},
|
||||
"colorPickerLabel": "Colour: {color}",
|
||||
"@colorPickerLabel": {"placeholders": {"color": {"type": "String"}}},
|
||||
|
||||
"studysetCountFlashcards": "{count, plural, =1{1 flashcard} other{{count} flashcards}}",
|
||||
"@studysetCountFlashcards": {"placeholders": {"count": {"type": "int"}}},
|
||||
|
|
@ -505,7 +500,6 @@
|
|||
"languageChineseSimplified": "Chinese (Simplified)",
|
||||
"languageChineseTraditional": "Chinese (Traditional)",
|
||||
"fieldRequired": "required",
|
||||
"fieldRequiredHelper": "Required",
|
||||
|
||||
"exploreTitle": "Explore",
|
||||
"exploreEmpty": "Studysets that others share will appear here.",
|
||||
|
|
@ -1240,9 +1234,6 @@
|
|||
"studySortOldestFirst": "Oldest first",
|
||||
"studySortRandom": "Random",
|
||||
"studySortNewestFirst": "Newest first",
|
||||
"studyFewer": "Decrease",
|
||||
"studyMore": "Increase",
|
||||
"countStepperType": "Type a number",
|
||||
"studyLimitNewPerDay": "Limit new cards per day",
|
||||
"studyLimitReviewsPerDay": "Limit reviews per day",
|
||||
|
||||
|
|
@ -1350,7 +1341,6 @@
|
|||
"commonCancel": "Cancel",
|
||||
"commonSave": "Save",
|
||||
"commonClose": "Close",
|
||||
"commonUndo": "Undo",
|
||||
"moreInfo": "More info",
|
||||
"moreInfoCreated": "Created",
|
||||
"moreInfoModified": "Last modified",
|
||||
|
|
@ -1362,8 +1352,6 @@
|
|||
"moreInfoReviews": "Reviews",
|
||||
"moreInfoReviewCount": "Review count",
|
||||
"moreInfoLastReviewed": "Last reviewed",
|
||||
"moreInfoCopy": "Copy",
|
||||
"copiedToClipboard": "Copied to clipboard",
|
||||
"commonTryAgain": "Try again",
|
||||
"personDataFailed": "Couldn't open this device's data.",
|
||||
"sessionUnreachable": "Couldn't reach the server.",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
"@@locale": "en_US",
|
||||
|
||||
"studysetSheetColor": "Color",
|
||||
"colorPickerLabel": "Color: {color}",
|
||||
"tagSheetColor": "Color",
|
||||
"formatAlignCenter": "Center",
|
||||
"homeCustomise": "Customize",
|
||||
|
|
|
|||
|
|
@ -106,12 +106,6 @@ abstract class AppLocalizations {
|
|||
/// **'Halkyon Learn'**
|
||||
String get appTitle;
|
||||
|
||||
/// No description provided for @launchBrand.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Halkyon'**
|
||||
String get launchBrand;
|
||||
|
||||
/// No description provided for @launchProduct.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -352,18 +346,6 @@ abstract class AppLocalizations {
|
|||
/// **'Discard'**
|
||||
String get studysetSheetDiscardConfirm;
|
||||
|
||||
/// A colour of the palette content can take, by its stored name.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{name, select, carrot{Carrot} cerise{Cerise} cobalt{Cobalt} copper{Copper} enzian{Enzian} fern{Fern} forest{Forest} ocean{Ocean} olive{Olive} pacific{Pacific} pickle{Pickle} pine{Pine} pink{Pink} plum{Plum} purple{Purple} reef{Reef} sahara{Sahara} slateblue{Slate blue} soil{Soil} strawberry{Strawberry} other{{name}}}'**
|
||||
String paletteColorName(String name);
|
||||
|
||||
/// No description provided for @colorPickerLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Colour: {color}'**
|
||||
String colorPickerLabel(String color);
|
||||
|
||||
/// No description provided for @studysetCountFlashcards.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -2710,12 +2692,6 @@ abstract class AppLocalizations {
|
|||
/// **'required'**
|
||||
String get fieldRequired;
|
||||
|
||||
/// No description provided for @fieldRequiredHelper.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Required'**
|
||||
String get fieldRequiredHelper;
|
||||
|
||||
/// No description provided for @exploreTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -6430,24 +6406,6 @@ abstract class AppLocalizations {
|
|||
/// **'Newest first'**
|
||||
String get studySortNewestFirst;
|
||||
|
||||
/// No description provided for @studyFewer.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Decrease'**
|
||||
String get studyFewer;
|
||||
|
||||
/// No description provided for @studyMore.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Increase'**
|
||||
String get studyMore;
|
||||
|
||||
/// No description provided for @countStepperType.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Type a number'**
|
||||
String get countStepperType;
|
||||
|
||||
/// No description provided for @studyLimitNewPerDay.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -7006,12 +6964,6 @@ abstract class AppLocalizations {
|
|||
/// **'Close'**
|
||||
String get commonClose;
|
||||
|
||||
/// No description provided for @commonUndo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Undo'**
|
||||
String get commonUndo;
|
||||
|
||||
/// No description provided for @moreInfo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -7078,18 +7030,6 @@ abstract class AppLocalizations {
|
|||
/// **'Last reviewed'**
|
||||
String get moreInfoLastReviewed;
|
||||
|
||||
/// No description provided for @moreInfoCopy.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Copy'**
|
||||
String get moreInfoCopy;
|
||||
|
||||
/// No description provided for @copiedToClipboard.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Copied to clipboard'**
|
||||
String get copiedToClipboard;
|
||||
|
||||
/// No description provided for @commonTryAgain.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -12,9 +12,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get appTitle => 'Halkyon Learn';
|
||||
|
||||
@override
|
||||
String get launchBrand => 'Halkyon';
|
||||
|
||||
@override
|
||||
String get launchProduct => 'Learn';
|
||||
|
||||
|
|
@ -153,42 +150,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get studysetSheetDiscardConfirm => 'Verwerfen';
|
||||
|
||||
@override
|
||||
String paletteColorName(String name) {
|
||||
String _temp0 = intl.Intl.selectLogic(
|
||||
name,
|
||||
{
|
||||
'carrot': 'Karotte',
|
||||
'cerise': 'Kirschrot',
|
||||
'cobalt': 'Kobalt',
|
||||
'copper': 'Kupfer',
|
||||
'enzian': 'Enzian',
|
||||
'fern': 'Farn',
|
||||
'forest': 'Wald',
|
||||
'ocean': 'Ozean',
|
||||
'olive': 'Olive',
|
||||
'pacific': 'Pazifik',
|
||||
'pickle': 'Essiggurke',
|
||||
'pine': 'Kiefer',
|
||||
'pink': 'Rosa',
|
||||
'plum': 'Pflaume',
|
||||
'purple': 'Lila',
|
||||
'reef': 'Riff',
|
||||
'sahara': 'Sahara',
|
||||
'slateblue': 'Schieferblau',
|
||||
'soil': 'Erde',
|
||||
'strawberry': 'Erdbeere',
|
||||
'other': '$name',
|
||||
},
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String colorPickerLabel(String color) {
|
||||
return 'Farbe: $color';
|
||||
}
|
||||
|
||||
@override
|
||||
String studysetCountFlashcards(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
|
|
@ -1672,9 +1633,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get fieldRequired => 'Pflichtfeld';
|
||||
|
||||
@override
|
||||
String get fieldRequiredHelper => 'Pflichtfeld';
|
||||
|
||||
@override
|
||||
String get exploreTitle => 'Entdecken';
|
||||
|
||||
|
|
@ -4029,15 +3987,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get studySortNewestFirst => 'Neueste zuerst';
|
||||
|
||||
@override
|
||||
String get studyFewer => 'Verringern';
|
||||
|
||||
@override
|
||||
String get studyMore => 'Erhöhen';
|
||||
|
||||
@override
|
||||
String get countStepperType => 'Zahl eingeben';
|
||||
|
||||
@override
|
||||
String get studyLimitNewPerDay => 'Neue Karten pro Tag begrenzen';
|
||||
|
||||
|
|
@ -4387,9 +4336,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get commonClose => 'Schließen';
|
||||
|
||||
@override
|
||||
String get commonUndo => 'Rückgängig';
|
||||
|
||||
@override
|
||||
String get moreInfo => 'Weitere Informationen';
|
||||
|
||||
|
|
@ -4423,12 +4369,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get moreInfoLastReviewed => 'Zuletzt wiederholt';
|
||||
|
||||
@override
|
||||
String get moreInfoCopy => 'Kopieren';
|
||||
|
||||
@override
|
||||
String get copiedToClipboard => 'In die Zwischenablage kopiert';
|
||||
|
||||
@override
|
||||
String get commonTryAgain => 'Erneut versuchen';
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get appTitle => 'Halkyon Learn';
|
||||
|
||||
@override
|
||||
String get launchBrand => 'Halkyon';
|
||||
|
||||
@override
|
||||
String get launchProduct => 'Learn';
|
||||
|
||||
|
|
@ -151,42 +148,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get studysetSheetDiscardConfirm => 'Discard';
|
||||
|
||||
@override
|
||||
String paletteColorName(String name) {
|
||||
String _temp0 = intl.Intl.selectLogic(
|
||||
name,
|
||||
{
|
||||
'carrot': 'Carrot',
|
||||
'cerise': 'Cerise',
|
||||
'cobalt': 'Cobalt',
|
||||
'copper': 'Copper',
|
||||
'enzian': 'Enzian',
|
||||
'fern': 'Fern',
|
||||
'forest': 'Forest',
|
||||
'ocean': 'Ocean',
|
||||
'olive': 'Olive',
|
||||
'pacific': 'Pacific',
|
||||
'pickle': 'Pickle',
|
||||
'pine': 'Pine',
|
||||
'pink': 'Pink',
|
||||
'plum': 'Plum',
|
||||
'purple': 'Purple',
|
||||
'reef': 'Reef',
|
||||
'sahara': 'Sahara',
|
||||
'slateblue': 'Slate blue',
|
||||
'soil': 'Soil',
|
||||
'strawberry': 'Strawberry',
|
||||
'other': '$name',
|
||||
},
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String colorPickerLabel(String color) {
|
||||
return 'Colour: $color';
|
||||
}
|
||||
|
||||
@override
|
||||
String studysetCountFlashcards(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
|
|
@ -1657,9 +1618,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get fieldRequired => 'required';
|
||||
|
||||
@override
|
||||
String get fieldRequiredHelper => 'Required';
|
||||
|
||||
@override
|
||||
String get exploreTitle => 'Explore';
|
||||
|
||||
|
|
@ -3997,15 +3955,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get studySortNewestFirst => 'Newest first';
|
||||
|
||||
@override
|
||||
String get studyFewer => 'Decrease';
|
||||
|
||||
@override
|
||||
String get studyMore => 'Increase';
|
||||
|
||||
@override
|
||||
String get countStepperType => 'Type a number';
|
||||
|
||||
@override
|
||||
String get studyLimitNewPerDay => 'Limit new cards per day';
|
||||
|
||||
|
|
@ -4350,9 +4299,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get commonClose => 'Close';
|
||||
|
||||
@override
|
||||
String get commonUndo => 'Undo';
|
||||
|
||||
@override
|
||||
String get moreInfo => 'More info';
|
||||
|
||||
|
|
@ -4386,12 +4332,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get moreInfoLastReviewed => 'Last reviewed';
|
||||
|
||||
@override
|
||||
String get moreInfoCopy => 'Copy';
|
||||
|
||||
@override
|
||||
String get copiedToClipboard => 'Copied to clipboard';
|
||||
|
||||
@override
|
||||
String get commonTryAgain => 'Try again';
|
||||
|
||||
|
|
@ -7826,11 +7766,6 @@ class AppLocalizationsEnUs extends AppLocalizationsEn {
|
|||
@override
|
||||
String get studysetSheetColor => 'Color';
|
||||
|
||||
@override
|
||||
String colorPickerLabel(String color) {
|
||||
return 'Color: $color';
|
||||
}
|
||||
|
||||
@override
|
||||
String get studysetSheetLicense => 'License';
|
||||
|
||||
|
|
|
|||
|
|
@ -10,12 +10,13 @@ import 'package:halkyon_learn_flutter/src/core/instance/instance.dart';
|
|||
import 'package:halkyon_learn_flutter/src/core/instance/instance_checker.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_choice.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_store.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/app_fonts.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/cjk_fonts.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/auth/widget/session_gate.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/dictionary/data/mecab_license.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/geo_map/data/cldr_license.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/instance/data/flag_icons_license.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/kanji/data/kanjivg_license.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:serverpod_flutter/serverpod_flutter.dart';
|
||||
|
|
@ -23,7 +24,8 @@ import 'package:serverpod_flutter/serverpod_flutter.dart';
|
|||
Future<void> main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
Bloc.observer = const AppBlocObserver();
|
||||
registerAppFontLicenses();
|
||||
registerFontLicenses();
|
||||
registerCjkFontLicenses();
|
||||
registerKanjiVgLicense();
|
||||
registerFlagIconsLicense();
|
||||
registerCldrLicense();
|
||||
|
|
|
|||
|
|
@ -5,11 +5,6 @@ import 'package:halkyon_learn_flutter/src/core/dependencies/person_scope.dart';
|
|||
import 'package:halkyon_learn_flutter/src/core/router/app_shell.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/router/tab_visibility.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/brand.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/palette_color.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/found_by_id.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/screen_tint.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/tinted_frame.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/assistant/widget/connect_claude_screen.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/auth/widget/profile_screen.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/card/bloc/card_composer_bloc.dart';
|
||||
|
|
@ -44,6 +39,7 @@ import 'package:halkyon_learn_flutter/src/feature/studyset/widget/library_screen
|
|||
import 'package:halkyon_learn_flutter/src/feature/studyset/widget/studyset_language_scope.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/studyset/widget/studyset_screen.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/tag/bloc/jellyfin_tags_bloc.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
/// The router of one person's app: the four tabs in a shell, each with its own
|
||||
|
|
@ -406,7 +402,7 @@ Widget _studysetScreen(
|
|||
StudysetScreen(studyset: studyset, all: all, importOnOpen: importOnOpen),
|
||||
wayBack: (
|
||||
label: AppLocalizations.of(context).studysetBackToLibrary,
|
||||
location: RoutePaths.library,
|
||||
onPressed: () => context.go(RoutePaths.library),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
@ -417,7 +413,7 @@ Widget _inStudyset(
|
|||
BuildContext context,
|
||||
String id,
|
||||
Widget Function(Studyset studyset, List<Studyset> all) builder, {
|
||||
({String label, String location})? wayBack,
|
||||
({String label, VoidCallback onPressed})? wayBack,
|
||||
}) => FoundById<Studyset>(
|
||||
id: id,
|
||||
items: PersonScope.of(context).studysets.watchAll,
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ import 'package:halkyon_learn_flutter/src/core/instance/instance_checker.dart';
|
|||
import 'package:halkyon_learn_flutter/src/core/instance/instance_choice.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_scope.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/l10n/app_languages.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/app_theme.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/launch_screen.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/learn_theme.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/app_launch_screen.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/instance/widget/first_start_screen.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ class _InstanceGateState() extends State<InstanceGate> {
|
|||
),
|
||||
),
|
||||
// Opening, or closing the one before.
|
||||
_ => _PlainApp(look: _look, home: const LaunchScreen()),
|
||||
_ => _PlainApp(look: _look, home: const AppLaunchScreen()),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
@ -163,8 +163,8 @@ class const _PlainApp({
|
|||
@override
|
||||
Widget build(BuildContext context) => MaterialApp(
|
||||
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
||||
theme: appTheme(Brightness.light),
|
||||
darkTheme: appTheme(Brightness.dark),
|
||||
theme: learnTheme(Brightness.light),
|
||||
darkTheme: learnTheme(Brightness.dark),
|
||||
themeMode: look.themeMode,
|
||||
locale: look.locale,
|
||||
localeListResolutionCallback: resolveAppLocale,
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@ import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
|||
import 'package:halkyon_learn_flutter/src/core/l10n/app_languages.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/sync/bloc/sync_status_bloc.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/app_theme.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/keyboard_back_on_resume.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/learn_theme.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/auth/bloc/session_bloc.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/auth/model/auth_status.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/feedback/bloc/inbox_count_bloc.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/pomodoro/bloc/pomodoro_bloc.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/pomodoro/widget/pomodoro_presenter.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/study/widget/study_button_block.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
/// The blocks of the person's editors: the core's and the features'.
|
||||
|
|
@ -65,8 +65,8 @@ class _PersonAppState() extends State<PersonApp> {
|
|||
final settings = context.watch<DeviceSettingsBloc>().state;
|
||||
return MaterialApp.router(
|
||||
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
||||
theme: appTheme(Brightness.light),
|
||||
darkTheme: appTheme(Brightness.dark),
|
||||
theme: learnTheme(Brightness.light),
|
||||
darkTheme: learnTheme(Brightness.dark),
|
||||
themeMode: settings.themeMode,
|
||||
locale: settings.locale,
|
||||
localeListResolutionCallback: resolveAppLocale,
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@ import 'package:halkyon_learn_flutter/src/core/citation/model/citation.dart';
|
|||
import 'package:halkyon_learn_flutter/src/core/citation/model/source.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/citation/widget/source_sheet.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/citation/widget/source_view.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/adaptive_sheet.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/undo_snack_bar.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,7 @@
|
|||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/citation/model/source.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/video/youtube_videos.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/adaptive_sheet.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/confirm_dialog.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/field_label.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/text_limits.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import 'dart:async';
|
|||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/dependencies/dependencies_scope.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/dependencies/person_dependencies.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/launch_screen.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/app_launch_screen.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/auth/model/auth_status.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ class _PersonScopeState() extends State<PersonScope> {
|
|||
),
|
||||
),
|
||||
),
|
||||
_ => const LaunchScreen(),
|
||||
_ => const AppLaunchScreen(),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/adaptive_sheet.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
/// Lets the person choose one of [blocks] to insert, listed by their
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/content/content_blocks.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/theme/theme_extras.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/widget/text_limits.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue