refactor(learn): the editor's general parts move to halkyon_editor (ADR 0033, D37)

Todo stores editor documents too, so the document, the editor, its view,
the format bar, links, the clipboard, scripts and EditorBlocks move, with
their strings and tests, to a shared package on the same appflowy_editor
fork. What is Learn's alone stays in Learn on top of it, and what the
editor took from it directly is inverted: EditorBlocks gains textMarks,
formatActions and onEditorClosed, RichContentEditor a wrapEditor, and an
InsertableBlock's name takes the BuildContext. Learn's screens use
LearnContentEditor and LearnContentView, which add Learn's blocks and the
grammar check. Learn behaves as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-06 21:25:44 +01:00
commit 648dfe4051
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
6 changed files with 1676 additions and 1366 deletions

View file

@ -775,24 +775,9 @@
"composerDiscardConfirm": "Verwerfen",
"composerConflict": "Diese Karteikarte wurde auf zwei Arten zugleich geändert: auf zwei deiner Geräte oder von dir und durch eine Korrektur im Wörterbuch oder eine neue Veröffentlichung dessen, wovon es kopiert ist. Wähle unten für jeden Teil die Version, die du behalten möchtest.",
"composerKeepThis": "Diese behalten",
"formatAlignLeft": "Linksbündig",
"formatAlignCenter": "Zentriert",
"formatAlignRight": "Rechtsbündig",
"formatBold": "Fett",
"formatItalic": "Kursiv",
"formatUnderline": "Unterstrichen",
"formatSuperscript": "Hochgestellt",
"formatSubscript": "Tiefgestellt",
"formatRuby": "Text darüber (Aussprache, Übersetzung)",
"formatRubyFurigana": "Furigana (eine Lesung über dem Text)",
"formatRubyPinyin": "Pinyin (über den Schriftzeichen)",
"formatLink": "Link",
"linkTitle": "Link",
"linkText": "Text",
"linkAddress": "Adresse",
"linkAddressHint": "https://…",
"linkSave": "Speichern",
"linkRemove": "Link entfernen",
"rubyTitle": "Text darüber",
"rubyTitleFurigana": "Furigana",
"rubyTitlePinyin": "Pinyin",
@ -1100,22 +1085,6 @@
"fileNotKept": "Die Datei konnte nicht auf diesem Gerät gespeichert werden.",
"fileRemoveImage": "Bild entfernen",
"fileRemoveSound": "Audio entfernen",
"editorInsert": "Einfügen",
"blockGroupText": "Text",
"blockGroupBlocks": "Blöcke",
"blockGroupMedia": "Medien",
"blockHeading": "Überschrift {level}",
"blockBulletedList": "Aufzählung",
"blockNumberedList": "Nummerierte Liste",
"blockChecklist": "Checkliste",
"blockQuote": "Zitat",
"blockListItem": "Listenpunkt",
"blockChecklistItem": "Aufgabe",
"editorSlashHint": "Tippe / für einen Block oder schreib einfach los",
"blockDivider": "Trennlinie",
"blockTable": "Tabelle",
"blockRemove": "Entfernen",
"blockUnknown": "Dieser Teil braucht eine neuere Version der App.",
"blockCallout": "Hinweisbox",
"blockSpoiler": "Spoiler",
"calloutNote": "Notiz",

View file

@ -885,24 +885,9 @@
"composerDiscardConfirm": "Discard",
"composerConflict": "This flashcard was changed in two ways at once: on two of your devices, or by you and by a correction from the dictionary or a new release of what it was copied from. Choose the version to keep of each part below.",
"composerKeepThis": "Keep this",
"formatAlignLeft": "Align left",
"formatAlignCenter": "Centre",
"formatAlignRight": "Align right",
"formatBold": "Bold",
"formatItalic": "Italic",
"formatUnderline": "Underline",
"formatSuperscript": "Superscript",
"formatSubscript": "Subscript",
"formatRuby": "Text above (a pronunciation, a translation)",
"formatRubyFurigana": "Furigana (a reading above the text)",
"formatRubyPinyin": "Pinyin (above the characters)",
"formatLink": "Link",
"linkTitle": "Link",
"linkText": "Text",
"linkAddress": "Address",
"linkAddressHint": "https://…",
"linkSave": "Save",
"linkRemove": "Remove link",
"rubyTitle": "Text above",
"rubyTitleFurigana": "Furigana",
"rubyTitlePinyin": "Pinyin",
@ -1253,27 +1238,6 @@
"fileNotKept": "The file couldn't be kept on this device.",
"fileRemoveImage": "Remove image",
"fileRemoveSound": "Remove sound",
"editorInsert": "Insert",
"blockGroupText": "Text",
"blockGroupBlocks": "Blocks",
"blockGroupMedia": "Media",
"blockHeading": "Heading {level}",
"@blockHeading": {
"placeholders": {
"level": {"type": "int"}
}
},
"blockBulletedList": "Bulleted list",
"blockNumberedList": "Numbered list",
"blockChecklist": "Checklist",
"blockQuote": "Quote",
"blockListItem": "List item",
"blockChecklistItem": "To-do",
"editorSlashHint": "Type / to insert a block, or just start typing",
"blockDivider": "Divider",
"blockTable": "Table",
"blockRemove": "Remove",
"blockUnknown": "This part needs a newer version of the app.",
"blockCallout": "Callout",
"blockSpoiler": "Spoiler",
"calloutNote": "Note",

View file

@ -3,7 +3,6 @@
"studysetSheetColor": "Color",
"tagSheetColor": "Color",
"formatAlignCenter": "Center",
"homeCustomise": "Customize",
"exploreLicense": "License",
"exploreLicenseChosen": "License: {count}",

View file

@ -4564,54 +4564,6 @@ abstract class AppLocalizations {
/// **'Keep this'**
String get composerKeepThis;
/// No description provided for @formatAlignLeft.
///
/// In en, this message translates to:
/// **'Align left'**
String get formatAlignLeft;
/// No description provided for @formatAlignCenter.
///
/// In en, this message translates to:
/// **'Centre'**
String get formatAlignCenter;
/// No description provided for @formatAlignRight.
///
/// In en, this message translates to:
/// **'Align right'**
String get formatAlignRight;
/// No description provided for @formatBold.
///
/// In en, this message translates to:
/// **'Bold'**
String get formatBold;
/// No description provided for @formatItalic.
///
/// In en, this message translates to:
/// **'Italic'**
String get formatItalic;
/// No description provided for @formatUnderline.
///
/// In en, this message translates to:
/// **'Underline'**
String get formatUnderline;
/// No description provided for @formatSuperscript.
///
/// In en, this message translates to:
/// **'Superscript'**
String get formatSuperscript;
/// No description provided for @formatSubscript.
///
/// In en, this message translates to:
/// **'Subscript'**
String get formatSubscript;
/// No description provided for @formatRuby.
///
/// In en, this message translates to:
@ -4630,48 +4582,6 @@ abstract class AppLocalizations {
/// **'Pinyin (above the characters)'**
String get formatRubyPinyin;
/// No description provided for @formatLink.
///
/// In en, this message translates to:
/// **'Link'**
String get formatLink;
/// No description provided for @linkTitle.
///
/// In en, this message translates to:
/// **'Link'**
String get linkTitle;
/// No description provided for @linkText.
///
/// In en, this message translates to:
/// **'Text'**
String get linkText;
/// No description provided for @linkAddress.
///
/// In en, this message translates to:
/// **'Address'**
String get linkAddress;
/// No description provided for @linkAddressHint.
///
/// In en, this message translates to:
/// **'https://…'**
String get linkAddressHint;
/// No description provided for @linkSave.
///
/// In en, this message translates to:
/// **'Save'**
String get linkSave;
/// No description provided for @linkRemove.
///
/// In en, this message translates to:
/// **'Remove link'**
String get linkRemove;
/// No description provided for @rubyTitle.
///
/// In en, this message translates to:
@ -6478,102 +6388,6 @@ abstract class AppLocalizations {
/// **'Remove sound'**
String get fileRemoveSound;
/// No description provided for @editorInsert.
///
/// In en, this message translates to:
/// **'Insert'**
String get editorInsert;
/// No description provided for @blockGroupText.
///
/// In en, this message translates to:
/// **'Text'**
String get blockGroupText;
/// No description provided for @blockGroupBlocks.
///
/// In en, this message translates to:
/// **'Blocks'**
String get blockGroupBlocks;
/// No description provided for @blockGroupMedia.
///
/// In en, this message translates to:
/// **'Media'**
String get blockGroupMedia;
/// No description provided for @blockHeading.
///
/// In en, this message translates to:
/// **'Heading {level}'**
String blockHeading(int level);
/// No description provided for @blockBulletedList.
///
/// In en, this message translates to:
/// **'Bulleted list'**
String get blockBulletedList;
/// No description provided for @blockNumberedList.
///
/// In en, this message translates to:
/// **'Numbered list'**
String get blockNumberedList;
/// No description provided for @blockChecklist.
///
/// In en, this message translates to:
/// **'Checklist'**
String get blockChecklist;
/// No description provided for @blockQuote.
///
/// In en, this message translates to:
/// **'Quote'**
String get blockQuote;
/// No description provided for @blockListItem.
///
/// In en, this message translates to:
/// **'List item'**
String get blockListItem;
/// No description provided for @blockChecklistItem.
///
/// In en, this message translates to:
/// **'To-do'**
String get blockChecklistItem;
/// No description provided for @editorSlashHint.
///
/// In en, this message translates to:
/// **'Type / to insert a block, or just start typing'**
String get editorSlashHint;
/// No description provided for @blockDivider.
///
/// In en, this message translates to:
/// **'Divider'**
String get blockDivider;
/// No description provided for @blockTable.
///
/// In en, this message translates to:
/// **'Table'**
String get blockTable;
/// No description provided for @blockRemove.
///
/// In en, this message translates to:
/// **'Remove'**
String get blockRemove;
/// No description provided for @blockUnknown.
///
/// In en, this message translates to:
/// **'This part needs a newer version of the app.'**
String get blockUnknown;
/// No description provided for @blockCallout.
///
/// In en, this message translates to:

View file

@ -2837,30 +2837,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get composerKeepThis => 'Diese behalten';
@override
String get formatAlignLeft => 'Linksbündig';
@override
String get formatAlignCenter => 'Zentriert';
@override
String get formatAlignRight => 'Rechtsbündig';
@override
String get formatBold => 'Fett';
@override
String get formatItalic => 'Kursiv';
@override
String get formatUnderline => 'Unterstrichen';
@override
String get formatSuperscript => 'Hochgestellt';
@override
String get formatSubscript => 'Tiefgestellt';
@override
String get formatRuby => 'Text darüber (Aussprache, Übersetzung)';
@ -2870,27 +2846,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get formatRubyPinyin => 'Pinyin (über den Schriftzeichen)';
@override
String get formatLink => 'Link';
@override
String get linkTitle => 'Link';
@override
String get linkText => 'Text';
@override
String get linkAddress => 'Adresse';
@override
String get linkAddressHint => 'https://…';
@override
String get linkSave => 'Speichern';
@override
String get linkRemove => 'Link entfernen';
@override
String get rubyTitle => 'Text darüber';
@ -4045,57 +4000,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get fileRemoveSound => 'Audio entfernen';
@override
String get editorInsert => 'Einfügen';
@override
String get blockGroupText => 'Text';
@override
String get blockGroupBlocks => 'Blöcke';
@override
String get blockGroupMedia => 'Medien';
@override
String blockHeading(int level) {
return 'Überschrift $level';
}
@override
String get blockBulletedList => 'Aufzählung';
@override
String get blockNumberedList => 'Nummerierte Liste';
@override
String get blockChecklist => 'Checkliste';
@override
String get blockQuote => 'Zitat';
@override
String get blockListItem => 'Listenpunkt';
@override
String get blockChecklistItem => 'Aufgabe';
@override
String get editorSlashHint =>
'Tippe / für einen Block oder schreib einfach los';
@override
String get blockDivider => 'Trennlinie';
@override
String get blockTable => 'Tabelle';
@override
String get blockRemove => 'Entfernen';
@override
String get blockUnknown => 'Dieser Teil braucht eine neuere Version der App.';
@override
String get blockCallout => 'Hinweisbox';

View file

@ -2813,30 +2813,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get composerKeepThis => 'Keep this';
@override
String get formatAlignLeft => 'Align left';
@override
String get formatAlignCenter => 'Centre';
@override
String get formatAlignRight => 'Align right';
@override
String get formatBold => 'Bold';
@override
String get formatItalic => 'Italic';
@override
String get formatUnderline => 'Underline';
@override
String get formatSuperscript => 'Superscript';
@override
String get formatSubscript => 'Subscript';
@override
String get formatRuby => 'Text above (a pronunciation, a translation)';
@ -2846,27 +2822,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get formatRubyPinyin => 'Pinyin (above the characters)';
@override
String get formatLink => 'Link';
@override
String get linkTitle => 'Link';
@override
String get linkText => 'Text';
@override
String get linkAddress => 'Address';
@override
String get linkAddressHint => 'https://…';
@override
String get linkSave => 'Save';
@override
String get linkRemove => 'Remove link';
@override
String get rubyTitle => 'Text above';
@ -4009,57 +3964,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get fileRemoveSound => 'Remove sound';
@override
String get editorInsert => 'Insert';
@override
String get blockGroupText => 'Text';
@override
String get blockGroupBlocks => 'Blocks';
@override
String get blockGroupMedia => 'Media';
@override
String blockHeading(int level) {
return 'Heading $level';
}
@override
String get blockBulletedList => 'Bulleted list';
@override
String get blockNumberedList => 'Numbered list';
@override
String get blockChecklist => 'Checklist';
@override
String get blockQuote => 'Quote';
@override
String get blockListItem => 'List item';
@override
String get blockChecklistItem => 'To-do';
@override
String get editorSlashHint =>
'Type / to insert a block, or just start typing';
@override
String get blockDivider => 'Divider';
@override
String get blockTable => 'Table';
@override
String get blockRemove => 'Remove';
@override
String get blockUnknown => 'This part needs a newer version of the app.';
@override
String get blockCallout => 'Callout';
@ -8046,9 +7950,6 @@ class AppLocalizationsEnUs extends AppLocalizationsEn {
@override
String get tagSheetColor => 'Color';
@override
String get formatAlignCenter => 'Center';
@override
String get homeCustomise => 'Customize';