5595 make this nicer looking (#5683)

* feat: nicer unsubscribed word card

with a small shimmer animation placeholder, and audio on word click

* create new widget instead of returning widget from function

* translations

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
This commit is contained in:
avashilling 2026-02-12 14:23:26 -05:00 committed by GitHub
parent 499829f2c9
commit b8af6234d5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
58 changed files with 24195 additions and 23793 deletions

View file

@ -1,6 +1,6 @@
{
"@@locale": "ar",
"@@last_modified": "2026-02-10 13:53:31.002179",
"@@last_modified": "2026-02-12 14:19:37.053689",
"about": "حول",
"@about": {
"type": "String",
@ -11605,5 +11605,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "فتح أدوات التعلم",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -4619,7 +4619,7 @@
"playWithAI": "Пакуль гуляйце з ШІ",
"courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!",
"@@locale": "be",
"@@last_modified": "2026-02-10 13:53:21.667046",
"@@last_modified": "2026-02-12 14:19:29.850964",
"@ignore": {
"type": "String",
"placeholders": {}
@ -11274,5 +11274,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Разблакаваць навучальныя інструменты",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:40.219705",
"@@last_modified": "2026-02-12 14:19:44.709318",
"about": "সম্পর্কে",
"@about": {
"type": "String",
@ -11999,5 +11999,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "শিক্ষার সরঞ্জাম আনলক করুন",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -3781,7 +3781,7 @@
"joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།",
"startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།",
"@@locale": "bo",
"@@last_modified": "2026-02-10 13:53:38.366897",
"@@last_modified": "2026-02-12 14:19:42.615076",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -10656,5 +10656,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Unlock learning tools",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:22.589118",
"@@last_modified": "2026-02-12 14:19:31.220078",
"about": "Quant a",
"@about": {
"type": "String",
@ -11415,5 +11415,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Desbloqueja les eines d'aprenentatge",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "cs",
"@@last_modified": "2026-02-10 13:53:19.483948",
"@@last_modified": "2026-02-12 14:19:28.029824",
"about": "O aplikaci",
"@about": {
"type": "String",
@ -11827,5 +11827,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Odemknout nástroje pro učení",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1926,7 +1926,7 @@
"playWithAI": "Leg med AI for nu",
"courseStartDesc": "Pangea Bot er klar til at starte når som helst!\n\n...men læring er bedre med venner!",
"@@locale": "da",
"@@last_modified": "2026-02-10 13:53:00.899227",
"@@last_modified": "2026-02-12 14:19:10.024299",
"@aboutHomeserver": {
"type": "String",
"placeholders": {
@ -12455,5 +12455,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Lås læringsværktøjer op",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -5344,5 +5344,6 @@
"emptyAudioError": "Recording failed. Please check your audio permissions and try again.",
"joinCourseForActivities": "Join a course to try activities.",
"courseDescription": "Courses consist of 3-8 modules each with activities to encourage practicing words in different contexts",
"emailVerificationFailed": "Email verification failed. Please try again."
"emailVerificationFailed": "Email verification failed. Please try again.",
"unlockLearningTools": "Unlock learning tools"
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:46.975646",
"@@last_modified": "2026-02-12 14:19:50.972053",
"about": "Prio",
"@about": {
"type": "String",
@ -12478,5 +12478,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Malfermu lernilojn",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "es",
"@@last_modified": "2026-02-10 13:52:56.442140",
"@@last_modified": "2026-02-12 14:19:07.287744",
"about": "Acerca de",
"@about": {
"type": "String",
@ -8565,5 +8565,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Desbloquear herramientas de aprendizaje",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "et",
"@@last_modified": "2026-02-10 13:53:13.964639",
"@@last_modified": "2026-02-12 14:19:22.749998",
"about": "Rakenduse teave",
"@about": {
"type": "String",
@ -11529,5 +11529,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Avage õppimisvahendid",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "eu",
"@@last_modified": "2026-02-10 13:53:12.038447",
"@@last_modified": "2026-02-12 14:19:20.758329",
"about": "Honi buruz",
"@about": {
"type": "String",
@ -11255,5 +11255,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Ireki ikaskuntza tresnak",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:41.240542",
"@@last_modified": "2026-02-12 14:19:45.762483",
"repeatPassword": "تکرار گذرواژه",
"@repeatPassword": {},
"about": "درباره",
@ -11376,5 +11376,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "ابزارهای یادگیری را باز کنید",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -4604,7 +4604,7 @@
"playWithAI": "Leiki tekoälyn kanssa nyt",
"courseStartDesc": "Pangea Bot on valmis milloin tahansa!\n\n...mutta oppiminen on parempaa ystävien kanssa!",
"@@locale": "fi",
"@@last_modified": "2026-02-10 13:52:59.361015",
"@@last_modified": "2026-02-12 14:19:09.156864",
"@notificationRuleJitsi": {
"type": "String",
"placeholders": {}
@ -11314,5 +11314,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Avaa oppimistyökalut",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -2783,7 +2783,7 @@
"selectAll": "Piliin lahat",
"deselectAll": "Huwag piliin lahat",
"@@locale": "fil",
"@@last_modified": "2026-02-10 13:53:29.059419",
"@@last_modified": "2026-02-12 14:19:35.424642",
"@setCustomPermissionLevel": {
"type": "String",
"placeholders": {}
@ -12370,5 +12370,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "I-unlock ang mga kasangkapan sa pag-aaral",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "fr",
"@@last_modified": "2026-02-10 13:53:52.297946",
"@@last_modified": "2026-02-12 14:19:55.122129",
"about": "À propos",
"@about": {
"type": "String",
@ -11661,5 +11661,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Déverrouiller les outils d'apprentissage",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -4639,7 +4639,7 @@
"playWithAI": "Imir le AI faoi láthair",
"courseStartDesc": "Tá Bot Pangea réidh chun dul am ar bith!\n\n...ach is fearr foghlaim le cairde!",
"@@locale": "ga",
"@@last_modified": "2026-02-10 13:53:51.242401",
"@@last_modified": "2026-02-12 14:19:54.334526",
"@writeAMessageLangCodes": {
"type": "String",
"placeholders": {
@ -11262,5 +11262,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Díghlas na huirlisí foghlama",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "gl",
"@@last_modified": "2026-02-10 13:52:58.030884",
"@@last_modified": "2026-02-12 14:19:08.365623",
"about": "Acerca de",
"@about": {
"type": "String",
@ -11255,5 +11255,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Desbloquear ferramentas de aprendizaxe",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:08.464680",
"@@last_modified": "2026-02-12 14:19:18.118020",
"about": "אודות",
"@about": {
"type": "String",
@ -12438,5 +12438,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "שחרר את כלי הלמידה",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -3999,7 +3999,7 @@
"playWithAI": "अभी के लिए एआई के साथ खेलें",
"courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!",
"@@locale": "hi",
"@@last_modified": "2026-02-10 13:53:45.848899",
"@@last_modified": "2026-02-12 14:19:50.325668",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12002,5 +12002,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "शिक्षण उपकरणों को अनलॉक करें",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "hr",
"@@last_modified": "2026-02-10 13:53:07.552453",
"@@last_modified": "2026-02-12 14:19:16.781492",
"about": "Informacije",
"@about": {
"type": "String",
@ -11748,5 +11748,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Otključaj alate za učenje",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "hu",
"@@last_modified": "2026-02-10 13:53:02.286359",
"@@last_modified": "2026-02-12 14:19:11.401904",
"about": "Névjegy",
"@about": {
"type": "String",
@ -11392,5 +11392,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Tanulási eszközök feloldása",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1954,7 +1954,7 @@
"playWithAI": "Joca con le IA pro ora",
"courseStartDesc": "Pangea Bot es preste a comenzar a qualunque momento!\n\n...ma apprender es melior con amicos!",
"@@locale": "ia",
"@@last_modified": "2026-02-10 13:53:09.931930",
"@@last_modified": "2026-02-12 14:19:18.922556",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12467,5 +12467,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Sblokez les outils d'apprentissage",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:03.640938",
"@@last_modified": "2026-02-12 14:19:12.173785",
"setAsCanonicalAlias": "Atur sebagai alias utama",
"@setAsCanonicalAlias": {
"type": "String",
@ -11361,5 +11361,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Buka alat pembelajaran",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -4000,7 +4000,7 @@
"playWithAI": "Joca con AI pro ora",
"courseStartDesc": "Pangea Bot es preste a partir a qualunque momento!\n\n...ma apprender es melior con amicos!",
"@@locale": "ie",
"@@last_modified": "2026-02-10 13:53:06.527618",
"@@last_modified": "2026-02-12 14:19:15.453228",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12003,5 +12003,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Desbloquear ferramentas de aprendizagem",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:17.480808",
"@@last_modified": "2026-02-12 14:19:26.246745",
"about": "Informazioni",
"@about": {
"type": "String",
@ -11349,5 +11349,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Sblocca gli strumenti di apprendimento",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "ja",
"@@last_modified": "2026-02-10 13:53:45.015756",
"@@last_modified": "2026-02-12 14:19:49.555051",
"about": "このアプリについて",
"@about": {
"type": "String",
@ -12179,5 +12179,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "学習ツールを解除する",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -2590,7 +2590,7 @@
"playWithAI": "ამ დროისთვის ითამაშეთ AI-თან",
"courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!",
"@@locale": "ka",
"@@last_modified": "2026-02-10 13:53:49.330549",
"@@last_modified": "2026-02-12 14:19:52.730489",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12419,5 +12419,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "გახსენი სასწავლო ინსტრუმენტები",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:52:55.047565",
"@@last_modified": "2026-02-12 14:19:06.049539",
"about": "소개",
"@about": {
"type": "String",
@ -11481,5 +11481,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "학습 도구 잠금 해제",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -3857,7 +3857,7 @@
"playWithAI": "Žaiskite su dirbtiniu intelektu dabar",
"courseStartDesc": "Pangea botas pasiruošęs bet kada pradėti!\n\n...bet mokymasis yra geresnis su draugais!",
"@@locale": "lt",
"@@last_modified": "2026-02-10 13:53:34.494196",
"@@last_modified": "2026-02-12 14:19:39.720089",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12194,5 +12194,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Atblokuoti mokymosi įrankius",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -4605,7 +4605,7 @@
"playWithAI": "Tagad spēlējiet ar AI",
"courseStartDesc": "Pangea bots ir gatavs jebkurā laikā!\n\n...bet mācīties ir labāk ar draugiem!",
"@@locale": "lv",
"@@last_modified": "2026-02-10 13:53:30.085081",
"@@last_modified": "2026-02-12 14:19:36.338931",
"analyticsInactiveTitle": "Pieprasījumi neaktīviem lietotājiem nevar tikt nosūtīti",
"analyticsInactiveDesc": "Neaktīvi lietotāji, kuri nav pieteikušies kopš šīs funkcijas ieviešanas, neredzēs jūsu pieprasījumu.\n\nPieprasījuma poga parādīsies, kad viņi atgriezīsies. Jūs varat atkārtoti nosūtīt pieprasījumu vēlāk, noklikšķinot uz pieprasījuma pogas viņu vārdā, kad tā būs pieejama.",
"accessRequestedTitle": "Pieprasījums piekļūt analītikai",
@ -11250,5 +11250,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Atbloķēt mācību rīkus",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:20.558141",
"@@last_modified": "2026-02-12 14:19:29.069491",
"about": "Om",
"@about": {
"type": "String",
@ -11324,5 +11324,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Lås opp læringsverktøy",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:37.543656",
"@@last_modified": "2026-02-12 14:19:41.940922",
"about": "Over ons",
"@about": {
"type": "String",
@ -11255,5 +11255,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Ontgrendel leermiddelen",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "pl",
"@@last_modified": "2026-02-10 13:53:42.262959",
"@@last_modified": "2026-02-12 14:19:46.687042",
"about": "O aplikacji",
"@about": {
"type": "String",
@ -11377,5 +11377,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Odblokuj narzędzia do nauki",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:13.189352",
"@@last_modified": "2026-02-12 14:19:21.495283",
"copiedToClipboard": "Copiada para a área de transferência",
"@copiedToClipboard": {
"type": "String",
@ -12476,5 +12476,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Desbloquear ferramentas de aprendizado",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:10.831147",
"@@last_modified": "2026-02-12 14:19:19.754331",
"about": "Sobre",
"@about": {
"type": "String",
@ -11255,5 +11255,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Desbloquear ferramentas de aprendizado",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -3327,7 +3327,7 @@
"selectAll": "Selecionar tudo",
"deselectAll": "Desmarcar tudo",
"@@locale": "pt_PT",
"@@last_modified": "2026-02-10 13:53:24.861894",
"@@last_modified": "2026-02-12 14:19:32.861651",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12423,5 +12423,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Desbloquear ferramentas de aprendizado",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:04.585768",
"@@last_modified": "2026-02-12 14:19:13.816075",
"about": "Despre",
"@about": {
"type": "String",
@ -12124,5 +12124,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Dezvăluie instrumentele de învățare",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "ru",
"@@last_modified": "2026-02-10 13:53:47.782560",
"@@last_modified": "2026-02-12 14:19:51.968270",
"about": "О проекте",
"@about": {
"type": "String",
@ -11255,5 +11255,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Разблокировать инструменты обучения",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "sk",
"@@last_modified": "2026-02-10 13:53:05.604546",
"@@last_modified": "2026-02-12 14:19:14.622122",
"about": "O aplikácii",
"@about": {
"type": "String",
@ -12473,5 +12473,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Odomknúť nástroje na učenie",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -2460,7 +2460,7 @@
"playWithAI": "Za zdaj igrajte z AI-jem",
"courseStartDesc": "Pangea Bot je pripravljen kadarkoli!\n\n...ampak je bolje učiti se s prijatelji!",
"@@locale": "sl",
"@@last_modified": "2026-02-10 13:53:15.622726",
"@@last_modified": "2026-02-12 14:19:24.467310",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12470,5 +12470,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Odkleni orodja za učenje",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:50.256388",
"@@last_modified": "2026-02-12 14:19:53.531659",
"about": "О програму",
"@about": {
"type": "String",
@ -12485,5 +12485,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Otključajte alate za učenje",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:43.184731",
"@@last_modified": "2026-02-12 14:19:47.603162",
"about": "Om",
"@about": {
"type": "String",
@ -11867,5 +11867,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Lås upp lärandeverktyg",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:36.527545",
"@@last_modified": "2026-02-12 14:19:41.262931",
"acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது",
"@acceptedTheInvitation": {
"type": "String",
@ -11375,5 +11375,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "கற்றல் கருவிகளை திறக்கவும்",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1916,7 +1916,7 @@
"playWithAI": "ఇప్పుడే AI తో ఆడండి",
"courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!",
"@@locale": "te",
"@@last_modified": "2026-02-10 13:53:33.256560",
"@@last_modified": "2026-02-12 14:19:38.869213",
"@setCustomPermissionLevel": {
"type": "String",
"placeholders": {}
@ -12478,5 +12478,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "అభ్యాస సాధనాలను అన్లాక్ చేయండి",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -3999,7 +3999,7 @@
"playWithAI": "เล่นกับ AI ชั่วคราว",
"courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!",
"@@locale": "th",
"@@last_modified": "2026-02-10 13:53:23.735994",
"@@last_modified": "2026-02-12 14:19:32.047326",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12002,5 +12002,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "ปลดล็อกเครื่องมือการเรียนรู้",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "tr",
"@@last_modified": "2026-02-10 13:53:31.845984",
"@@last_modified": "2026-02-12 14:19:37.773936",
"about": "Hakkında",
"@about": {
"type": "String",
@ -11595,5 +11595,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Öğrenme araçlarını aç",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "uk",
"@@last_modified": "2026-02-10 13:53:18.517741",
"@@last_modified": "2026-02-12 14:19:27.246355",
"about": "Про застосунок",
"@about": {
"type": "String",
@ -11255,5 +11255,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Відкрити навчальні інструменти",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -3495,7 +3495,7 @@
"setupChatBackup": "Chat zaxirasini sozlash",
"@setupChatBackup": {},
"@@locale": "uz",
"@@last_modified": "2026-02-10 13:53:28.032062",
"@@last_modified": "2026-02-12 14:19:34.497441",
"noMoreResultsFound": "Boshqa natijalar topilmadi",
"chatSearchedUntil": "Chat {time} gacha qidirildi",
"federationBaseUrl": "Federatsiya Asos URL",
@ -11149,5 +11149,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "O'qish vositalarini ochish",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:35.400314",
"@@last_modified": "2026-02-12 14:19:40.440257",
"about": "Giới thiệu",
"@about": {
"type": "String",
@ -6972,5 +6972,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "Mở khóa công cụ học tập",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1852,7 +1852,7 @@
"selectAll": "全選",
"deselectAll": "取消全選",
"@@locale": "yue",
"@@last_modified": "2026-02-10 13:53:16.454404",
"@@last_modified": "2026-02-12 14:19:25.181672",
"@ignoreUser": {
"type": "String",
"placeholders": {}
@ -12485,5 +12485,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "解鎖學習工具",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "zh",
"@@last_modified": "2026-02-10 13:53:39.188566",
"@@last_modified": "2026-02-12 14:19:43.735980",
"about": "关于",
"@about": {
"type": "String",
@ -11255,5 +11255,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "解锁学习工具",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-02-10 13:53:26.822722",
"@@last_modified": "2026-02-12 14:19:33.575679",
"about": "關於",
"@about": {
"type": "String",
@ -11394,5 +11394,10 @@
"@emailVerificationFailed": {
"type": "String",
"placeholders": {}
},
"unlockLearningTools": "解鎖學習工具",
"@unlockLearningTools": {
"type": "String",
"placeholders": {}
}
}
}

View file

@ -190,11 +190,6 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
/// Update [selectedSpan]
void updateSelectedSpan(PangeaTokenText? selectedSpan) {
if (MatrixState.pangeaController.subscriptionController.isSubscribed ==
false) {
return;
}
if (selectedSpan == _selectedSpan) {
selectModeController.setPlayingToken(selectedToken?.text);
return;
@ -213,7 +208,11 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
morph: selectedToken!.morph.map((k, v) => MapEntry(k.name, v)),
);
}
if (MatrixState.pangeaController.subscriptionController.isSubscribed ==
false) {
setState(() {});
return;
}
if (!mounted) return;
if (selectedToken != null && isNewToken(selectedToken!)) {
final token = selectedToken!;

View file

@ -1,41 +1,173 @@
import 'package:flutter/material.dart';
import 'package:shimmer/shimmer.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/bot/utils/bot_style.dart';
import 'package:fluffychat/pangea/common/widgets/pressable_button.dart';
import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart';
import 'package:fluffychat/widgets/matrix.dart';
class MessageUnsubscribedCard extends StatelessWidget {
const MessageUnsubscribedCard({super.key});
class _ShimmerBox extends StatelessWidget {
final Color baseColor;
final Color highlightColor;
final double width;
final double height;
const _ShimmerBox({
required this.baseColor,
required this.highlightColor,
required this.width,
required this.height,
});
@override
Widget build(BuildContext context) {
return Shimmer.fromColors(
loop: 1,
baseColor: baseColor,
highlightColor: highlightColor,
child: Container(
width: width,
height: height,
decoration: BoxDecoration(
color: baseColor,
borderRadius: BorderRadius.circular(8),
),
),
);
}
}
class MessageUnsubscribedCard extends StatelessWidget {
final PangeaTokenText token;
final VoidCallback? onClose;
const MessageUnsubscribedCard({super.key, required this.token, this.onClose});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final isDarkMode = theme.brightness == Brightness.dark;
final placeholderColor = isDarkMode
? Colors.white.withAlpha(50)
: Colors.black.withAlpha(50);
final primaryColor = theme.colorScheme.primary;
return Container(
constraints: const BoxConstraints(maxWidth: AppConfig.toolbarMinWidth),
padding: const EdgeInsets.all(16),
child: Column(
child: Stack(
children: [
Text(
style: BotStyle.text(context),
L10n.of(context).subscribedToUnlockTools,
textAlign: TextAlign.center,
Positioned(
top: 50.0,
left: 0,
right: 0,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_ShimmerBox(
baseColor: placeholderColor,
highlightColor: primaryColor,
width: 200,
height: 30,
),
const SizedBox(height: 12),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: List.generate(
4,
(index) => Padding(
padding: EdgeInsets.only(left: index == 0 ? 0 : 8),
child: _ShimmerBox(
baseColor: placeholderColor,
highlightColor: primaryColor,
width: 65,
height: 65,
),
),
),
),
const SizedBox(height: 12),
_ShimmerBox(
baseColor: placeholderColor,
highlightColor: primaryColor,
width: 250,
height: 30,
),
],
),
),
const SizedBox(height: 10),
SizedBox(
width: double.infinity,
child: TextButton(
onPressed: () {
MatrixState.pangeaController.subscriptionController.showPaywall(
context,
);
},
style: ButtonStyle(
backgroundColor: WidgetStateProperty.all<Color>(
(Theme.of(context).colorScheme.primary).withAlpha(25),
Column(
children: [
SizedBox(
height: 40.0,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
onClose != null
? IconButton(
color: theme.iconTheme.color,
icon: const Icon(Icons.close),
onPressed: onClose,
)
: const SizedBox(width: 40.0, height: 40.0),
Flexible(
child: Container(
constraints: const BoxConstraints(minHeight: 40.0),
alignment: Alignment.center,
child: SelectableText(
token.content,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28.0,
fontWeight: FontWeight.w600,
height: 1.2,
color: isDarkMode
? AppConfig.yellowLight
: AppConfig.yellowDark,
overflow: TextOverflow.ellipsis,
),
),
),
),
const SizedBox(width: 40.0, height: 40.0),
],
),
),
child: Text(L10n.of(context).getAccess),
),
SizedBox(
width: double.infinity,
height: 170.0,
child: Center(
child: PressableButton(
borderRadius: BorderRadius.circular(36),
color: primaryColor,
onPressed: () {
MatrixState.pangeaController.subscriptionController
.showPaywall(context);
},
builder: (context, depressed, shadowColor) => Container(
padding: const EdgeInsets.symmetric(
horizontal: 24,
vertical: 12,
),
decoration: BoxDecoration(
color: depressed ? shadowColor : primaryColor,
borderRadius: BorderRadius.circular(36),
),
child: Text(
L10n.of(context).unlockLearningTools,
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.w600,
color: isDarkMode ? Colors.black : Colors.white,
),
),
),
),
),
),
],
),
],
),

View file

@ -70,7 +70,7 @@ class WordZoomWidget extends StatelessWidget {
MatrixState.pangeaController.userController.showTranscription;
final Widget content = subscribed != null && !subscribed
? const MessageUnsubscribedCard()
? MessageUnsubscribedCard(token: token, onClose: onClose)
: Stack(
children: [
Container(