diff --git a/fluxer_app/src/features/i18n/locales/ar/messages.po b/fluxer_app/src/features/i18n/locales/ar/messages.po index ca867a22b..6ae20e774 100644 --- a/fluxer_app/src/features/i18n/locales/ar/messages.po +++ b/fluxer_app/src/features/i18n/locales/ar/messages.po @@ -13253,6 +13253,11 @@ msgstr "اسحب لتغيير موضع أيقونة مجموعتك واستخد msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "اسحب لتغيير موضع خلفية دعوتك واستخدم عجلة التمرير أو إصبعين للتكبير والتصغير. الحد الأدنى الموصى به للحجم هو {minimumWidth}×{minimumHeight} بكسل (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "ارسم شارة الرسائل غير المقروءة على زر شريط المهام لـ {productName} باللون الرمادي الداكن بدلاً من الأحمر." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "استخدم الرموز التعبيرية والملصقات المخ msgid "Use custom image" msgstr "استخدام صورة مخصصة" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "استخدام شارة شريط المهام الداكنة" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json index aff07b47c..45d10462f 100644 --- a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json +++ b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json @@ -1657,6 +1657,7 @@ "Use animated emojis in messages", "Use channel default", "Use custom emojis and stickers in any community", + "Use dark taskbar badge", "Use direct input device access", "Use emoji from other communities in this channel.", "Use passkeys for two-factor authentication?", diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index b1a47f474..02a2e6af3 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -13253,6 +13253,11 @@ msgstr "Плъзни, за да преместиш иконата на груп msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Плъзни, за да преместиш фона на поканата си, и използвай колелцето на мишката или щипка, за да мащабираш. Препоръчителният минимален размер е {minimumWidth}×{minimumHeight} пиксела (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Показвай значката за непрочетени съобщения на бутона на лентата на задачите на {productName} в тъмносиво вместо в червено." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Използвай персонализирани емотикони и msgid "Use custom image" msgstr "Използване на персонализирано изображение" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Използвай тъмна значка на лентата на задачите" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index 7e871cdec..a6470205d 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -13253,6 +13253,11 @@ msgstr "Přetažením změňte polohu ikony skupiny. Kolečkem myši nebo gestem msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Přetažením změňte polohu pozadí pozvánky. Kolečkem myši nebo gestem dvěma prsty upravte přiblížení. Doporučené minimální rozměry jsou {minimumWidth} × {minimumHeight} pixelů (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Zobrazit odznak nepřečtených zpráv na tlačítku {productName} na hlavním panelu tmavě šedě místo červeně." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Používejte vlastní emotikony a nálepky v jakékoli komunitě" msgid "Use custom image" msgstr "Použít vlastní obrázek" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Použít tmavý odznak na hlavním panelu" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index b4d7208b4..d2c58296b 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -13253,6 +13253,11 @@ msgstr "Træk for at flytte dit gruppeikon, og brug musehjulet eller knib med to msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Træk for at flytte din invitationsbaggrund, og brug musehjulet eller knib med to fingre for at zoome. Den anbefalede minimumsstørrelse er {minimumWidth}×{minimumHeight} pixels (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Tegn den ulæste badge på {productName}-knappen i proceslinjen i mørkegrå i stedet for rød." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Brug brugerdefinerede emojis og klistermærker i enhver community" msgid "Use custom image" msgstr "Brug et tilpasset billede" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Brug mørkt proceslinjebadge" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index ad8ce6938..92c2110df 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -13253,6 +13253,11 @@ msgstr "Ziehe, um dein Gruppensymbol neu zu positionieren, und verwende das Maus msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Ziehe, um den Hintergrund deiner Einladung neu zu positionieren, und verwende das Mausrad oder die Pinch-Geste zum Zoomen. Die empfohlene Mindestgröße beträgt {minimumWidth}×{minimumHeight} Pixel (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Zeigt das Ungelesen-Abzeichen auf der {productName}-Taskleistenschaltfläche in Dunkelgrau statt Rot an." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Benutze benutzerdefinierte Emojis und Sticker in jeder Community" msgid "Use custom image" msgstr "Eigenes Bild verwenden" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Dunkle Taskleisten-Badge verwenden" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index bf82489b1..d7b16441f 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -13253,6 +13253,11 @@ msgstr "Σύρετε για να αλλάξετε τη θέση του εικο msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Σύρετε για να αλλάξετε τη θέση της εικόνας φόντου της πρόσκλησής σας και χρησιμοποιήστε τον τροχό κύλισης ή τσιμπήστε για μεγέθυνση. Το προτεινόμενο ελάχιστο μέγεθος είναι {minimumWidth}×{minimumHeight} pixel (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Σχεδίασε την ένδειξη μη αναγνωσμένων μηνυμάτων στο κουμπί της γραμμής εργασιών του {productName} σε σκούρο γκρι αντί για κόκκινο." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Χρησιμοποιήστε προσαρμοσμένα emoji και α msgid "Use custom image" msgstr "Χρήση προσαρμοσμένης εικόνας" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Χρησιμοποίησε σκούρο σήμα γραμμής εργασιών" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/en-GB/messages.po b/fluxer_app/src/features/i18n/locales/en-GB/messages.po index fc6a0d89c..ef37373e8 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -13253,6 +13253,11 @@ msgstr "Drag to reposition your group icon and use the scroll wheel or pinch to msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Draw the unread badge on the {productName} taskbar button in dark grey instead of red." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Use custom emojis and stickers in any community" msgid "Use custom image" msgstr "Use custom image" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Use dark taskbar badge" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/en-US/messages.po b/fluxer_app/src/features/i18n/locales/en-US/messages.po index 0e39df2f1..feff673c4 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -13253,6 +13253,11 @@ msgstr "Drag to reposition your group icon and use the scroll wheel or pinch to msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Use custom emojis and stickers in any community" msgid "Use custom image" msgstr "Use custom image" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Use dark taskbar badge" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/es-419/messages.po b/fluxer_app/src/features/i18n/locales/es-419/messages.po index 4d25c7194..ee47eedd4 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -13253,6 +13253,11 @@ msgstr "Arrastra para reposicionar el ícono de tu grupo y usa la rueda de despl msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Arrastra para reubicar el fondo de tu invitación y usa la rueda de desplazamiento o pellizca para hacer zoom. El tamaño mínimo recomendado es de {minimumWidth}×{minimumHeight} píxeles (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Dibuja la insignia de no leído en el botón de la barra de tareas de {productName} en gris oscuro en lugar de rojo." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Usa emojis y stickers personalizados en cualquier comunidad" msgid "Use custom image" msgstr "Usar imagen personalizada" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Usar insignia oscura en la barra de tareas" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/es-ES/messages.po b/fluxer_app/src/features/i18n/locales/es-ES/messages.po index 060a0976f..203a879e9 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -13253,6 +13253,11 @@ msgstr "Arrastra para cambiar la posición del icono de tu grupo y usa la rueda msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Arrastra para cambiar la posición de tu fondo de invitación y usa la rueda de desplazamiento o pellizca para hacer zoom. El tamaño mínimo recomendado es de {minimumWidth}×{minimumHeight} píxeles (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Dibuja la insignia de no leídos en el botón de la barra de tareas de {productName} en gris oscuro en lugar de rojo." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Usa emojis y pegatinas personalizados en cualquier comunidad" msgid "Use custom image" msgstr "Usar imagen personalizada" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Usar insignia oscura en la barra de tareas" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index 268421dbb..7f0b5e1db 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -13253,6 +13253,11 @@ msgstr "Siirrä ryhmäkuvaketta vetämällä ja zoomaa vierityspyörällä tai n msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Siirrä kutsun taustakuvaa vetämällä ja zoomaa vierityspyörällä tai nipistämällä. Suositeltu vähimmäiskoko on {minimumWidth}×{minimumHeight} pikseliä (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Piirrä lukemattomien viestien merkki {productName} -tehtäväpalkin kuvakkeeseen tummanharmaana punaisen sijaan." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Käytä mukautettuja emojeita ja tarroja missä tahansa yhteisössä" msgid "Use custom image" msgstr "Käytä omaa kuvaa" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Käytä tummaa tehtäväpalkin merkkiä" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index 8c5be7138..37ccf8af4 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -13253,6 +13253,11 @@ msgstr "Faites glisser pour repositionner l'icône de votre groupe et utilisez l msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Faites glisser pour repositionner l'arrière-plan de votre invitation et utilisez la molette de défilement ou le pincement pour zoomer. La taille minimale recommandée est de {minimumWidth}×{minimumHeight} pixels (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Dessiner le badge des messages non lus sur le bouton de la barre des tâches de {productName} en gris foncé au lieu de rouge." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Utilisez des emojis et des autocollants personnalisés dans n'importe qu msgid "Use custom image" msgstr "Utiliser une image personnalisée" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Utiliser l'icône sombre de la barre des tâches" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index a94e0727b..16fa10609 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -13253,6 +13253,11 @@ msgstr "גרור כדי למקם מחדש את אייקון הקבוצה שלך msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "גרור כדי למקם מחדש את רקע ההזמנה שלך והשתמש בגלגלת הגלילה או בצביטה כדי להתקרב או להתרחק. הגודל המינימלי המומלץ הוא {minimumWidth}×{minimumHeight} פיקסלים (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "הצג את התגית של הודעות שלא נקראו על לחצן שורת המשימות של {productName} באפור כהה במקום באדום." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "השתמש באימוג'י ומדבקות מותאמים אישית בכ msgid "Use custom image" msgstr "שימוש בתמונה מותאמת אישית" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "השתמש בסמל שורת המשימות כהה" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index 8c318cce3..1cd08e7a8 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -13253,6 +13253,11 @@ msgstr "अपने ग्रुप आइकॉन की जगह बदल msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "अपने इनवाइट बैकग्राउंड की जगह बदलने के लिए खींचें और ज़ूम करने के लिए स्क्रॉल व्हील या पिंच का इस्तेमाल करें। सुझाया गया न्यूनतम साइज़ {minimumWidth}×{minimumHeight} पिक्सल (16:9) है।" +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "{productName} टास्कबार बटन पर लाल रंग के बजाय गहरे ग्रे रंग में अनरीड बैज दिखाएँ।" + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "किसी भी समुदाय में कस्टम इम msgid "Use custom image" msgstr "कस्टम इमेज का इस्तेमाल करें" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "डार्क टास्कबार बैज का उपयोग करें" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index fe37e5e30..441edd442 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -13253,6 +13253,11 @@ msgstr "Povucite za premještanje ikone grupe i koristite kotačić miša ili pr msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Povucite za premještanje pozadine pozivnice i koristite kotačić miša ili prste za zumiranje. Preporučena minimalna veličina je {minimumWidth}×{minimumHeight} piksela (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Nacrtaj značku nepročitanog na gumbu {productName} na programskoj traci tamno sivom umjesto crvenom." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Upotrijebi prilagođene emotikone i naljepnice u bilo kojoj zajednici" msgid "Use custom image" msgstr "Koristi prilagođenu sliku" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Upotrebljavaj tamnu značku na programskoj traci" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index ac81f5857..c4c8ed688 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -13253,6 +13253,11 @@ msgstr "Húzd a csoportikon áthelyezéséhez, és használd a görgőt vagy a c msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Húzd a meghívó hátterét az áthelyezéshez, és használd a görgőt vagy a csippentést a nagyításhoz. Az ajánlott minimális méret {minimumWidth}×{minimumHeight} képpont (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Rajzolja a nem olvasott jelvényt a(z) {productName} tálca gombjára sötétszürke színnel, a piros helyett." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Használj egyéni emojikat és matricákat bármelyik közösségben" msgid "Use custom image" msgstr "Egyéni kép használata" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Sötét tálca ikonjelzés használata" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index dd2258946..8499de0d9 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -13253,6 +13253,11 @@ msgstr "Seret untuk mengubah posisi ikon grupmu dan gunakan roda gulir atau cubi msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Seret untuk mengubah posisi latar belakang undanganmu dan gunakan roda gulir atau cubit untuk memperbesar. Ukuran minimum yang disarankan adalah {minimumWidth}×{minimumHeight} piksel (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Tampilkan lencana belum dibaca pada tombol taskbar {productName} dalam warna abu-abu gelap alih-alih merah." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Gunakan emoji dan stiker kustom di komunitas mana pun" msgid "Use custom image" msgstr "Gunakan gambar khusus" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Gunakan lencana bilah tugas gelap" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index 342fc3b6a..f7b2903a1 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -13253,6 +13253,11 @@ msgstr "Trascina per riposizionare l’icona del gruppo e usa la rotellina o il msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Trascina per riposizionare lo sfondo del tuo invito e usa la rotellina o il gesto a due dita per regolare lo zoom. La dimensione minima consigliata è {minimumWidth} × {minimumHeight} pixel (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Mostra il badge delle notifiche non lette sul pulsante della barra delle applicazioni di {productName} in grigio scuro anziché rosso." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Usa emoji e sticker personalizzati in qualsiasi community" msgid "Use custom image" msgstr "Usa immagine personalizzata" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Usa badge scuro sulla barra delle applicazioni" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index 3f3b2efe2..e53a23fea 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -13253,6 +13253,11 @@ msgstr "グループアイコンをドラッグして位置を調整し、スク msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "招待背景をドラッグして位置を調整し、スクロールホイールまたはピンチでズームします。推奨される最小サイズは{minimumWidth}×{minimumHeight}ピクセル(16:9)です。" +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "{productName} のタスクバーボタンの未読バッジを赤ではなくダークグレーで表示します。" + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "コミュニティでカスタム絵文字やスタンプを使おう" msgid "Use custom image" msgstr "カスタム画像を使用" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "タスクバーのバッジをダークグレーにする" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index c89395a0a..85ae64cba 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -13253,6 +13253,11 @@ msgstr "그룹 아이콘을 드래그하여 위치를 조정하고 스크롤 휠 msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "초대 배경을 드래그하여 위치를 조정하고 스크롤 휠 또는 핀치로 확대/축소하세요. 권장 최소 크기는 {minimumWidth}×{minimumHeight}픽셀(16:9)입니다." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Windows의 {productName} 작업 표시줄 버튼에 읽지 않은 배지를 빨간색 대신 어두운 회색으로 표시합니다." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "커뮤니티에서 나만의 이모티콘과 스티커를 사용하세 msgid "Use custom image" msgstr "맞춤 이미지 사용" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "다크 작업 표시줄 배지 사용" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index a4f76ca7b..e7e74ce1b 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -13253,6 +13253,11 @@ msgstr "Vilkite, kad pakeistumėte grupės piktogramos padėtį, ir priartinkite msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Vilkite, kad pakeistumėte kvietimo fono padėtį, ir priartinkite pelės ratuku arba suglausdami pirštus. Rekomenduojamas minimalus dydis yra {minimumWidth}×{minimumHeight} pikselių (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Rodyti neskaitytų pranešimų ženklelį ant {productName} užduočių juostos mygtuko tamsiai pilkos spalvos vietoj raudonos." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37183,6 +37188,11 @@ msgstr "Naudokite pasirinktines jaustukus ir lipdukus bet kurioje bendruomenėje msgid "Use custom image" msgstr "Naudoti pasirinktinį paveikslėlį" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Naudoti tamsų piktogramos atžymą" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 31c031b9f..ba08eb0ac 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -13253,6 +13253,11 @@ msgstr "Sleep om je groepspictogram te verplaatsen en gebruik het scrollwiel of msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Sleep om je uitnodigingsachtergrond te verplaatsen en gebruik het scrollwiel of een knijpbeweging om te zoomen. De aanbevolen minimale grootte is {minimumWidth}×{minimumHeight} pixels (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Teken de ongelezen badge op de {productName}-taakbalkknop in donkergrijs in plaats van rood." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Gebruik aangepaste emoji's en stickers in elke community" msgid "Use custom image" msgstr "Aangepaste afbeelding gebruiken" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Gebruik donkere taakbalkbadge" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index 6b4584a1b..332978dc0 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -13253,6 +13253,11 @@ msgstr "Dra for å flytte gruppeikonet og bruk rullehjulet eller klyp for å zoo msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Dra for å flytte invitasjonsbakgrunnen og bruk rullehjulet eller klyp for å zoome. Anbefalt minimumsstørrelse er {minimumWidth}×{minimumHeight} piksler (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Tegn ulest-merket på {productName}-knappen i oppgavelinjen i mørk grå i stedet for rød." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Bruk egendefinerte emojier og klistremerker i ethvert fellesskap" msgid "Use custom image" msgstr "Bruk egendefinert bilde" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Bruk mørk oppgavelinjeknapp-merke" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index 311264c08..faaa0e49d 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -13253,6 +13253,11 @@ msgstr "Przeciągnij, aby zmienić położenie ikony grupy, i użyj kółka prze msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Przeciągnij, aby zmienić położenie tła zaproszenia, i użyj kółka przewijania lub gestu szczypania, aby powiększyć. Zalecany minimalny rozmiar to {minimumWidth}×{minimumHeight} pikseli (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Wyświetlaj nieprzeczytane powiadomienia na przycisku paska zadań {productName} w kolorze ciemnoszarym zamiast czerwonym." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Używaj niestandardowych emotikonów i naklejek w każdej społeczności msgid "Use custom image" msgstr "Użyj własnego obrazu" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Używaj ciemnego odznaki na pasku zadań" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po index 73796fa8a..ab6980c68 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -13253,6 +13253,11 @@ msgstr "Arraste para reposicionar o ícone do seu grupo e use a roda de rolagem msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Arraste para reposicionar o plano de fundo do seu convite e use a roda de rolagem ou o movimento de pinça para aplicar zoom. O tamanho mínimo recomendado é de {minimumWidth}×{minimumHeight} pixels (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Desenhar o selo de não lidas no botão da barra de tarefas do {productName} em cinza escuro em vez de vermelho." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Use emojis e stickers personalizados em qualquer comunidade" msgid "Use custom image" msgstr "Usar imagem personalizada" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Usar ícone escuro na barra de tarefas" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index a9c566af8..4180a1ad3 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -13253,6 +13253,11 @@ msgstr "Trage pentru a repoziționa pictograma grupului și folosește rotița d msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Trage pentru a repoziționa fundalul invitației și folosește rotița de derulare sau gestul de ciupire pentru a mări. Dimensiunea minimă recomandată este de {minimumWidth}×{minimumHeight} pixeli (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Afișează insigna cu mesaje necitite pe butonul din bara de activități {productName} în gri închis, în loc de roșu." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Folosește emojiuri și stickere personalizate în orice comunitate" msgid "Use custom image" msgstr "Folosește o imagine personalizată" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Folosește insigna întunecată pentru bara de activități" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index c6cd87a13..d23589400 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -13253,6 +13253,11 @@ msgstr "Перетащите, чтобы изменить положение з msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Перетащите, чтобы изменить положение фона приглашения, и используйте колесико прокрутки или жест масштабирования. Рекомендуемый минимальный размер: {minimumWidth}×{minimumHeight} пикселей (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Отображать значок непрочитанных сообщений на кнопке панели задач {productName} темно-серым вместо красного." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Используйте пользовательские эмодзи и msgid "Use custom image" msgstr "Использовать свое изображение" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Использовать тёмный значок на панели задач" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po index 7f687b13e..f9beab46f 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -13253,6 +13253,11 @@ msgstr "Dra för att flytta gruppikonen och använd skrollhjulet eller nyp för msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Dra för att flytta din inbjudningsbakgrund och använd skrollhjulet eller nyp för att zooma. Den rekommenderade minimistorleken är {minimumWidth}×{minimumHeight} pixlar (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Visa olästa-indikatorn på {productName}-aktivitetsfältknappen i mörkgrått istället för rött." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Använd egna emojis och klistermärken i alla communities" msgid "Use custom image" msgstr "Använd egen bild" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Använd mörk olästa-indikator i aktivitetsfältet" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index 21cf72b2b..4554a9310 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -13253,6 +13253,11 @@ msgstr "ลากเพื่อปรับตำแหน่งไอคอน msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "ลากเพื่อปรับตำแหน่งพื้นหลังคำเชิญของคุณ และใช้ล้อเลื่อนเมาส์หรือบีบนิ้วเพื่อซูม ขนาดขั้นต่ำที่แนะนำคือ {minimumWidth}×{minimumHeight} พิกเซล (16:9)" +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "แสดงป้ายกำกับข้อความที่ยังไม่ได้อ่านบนปุ่มแถบงานของ {productName} เป็นสีเทาเข้มแทนสีแดง" + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "ใช้ อิโมจิและสติกเกอร์แบ msgid "Use custom image" msgstr "ใช้รูปภาพที่กำหนดเอง" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "ใช้ไอคอนแจ้งเตือนแถบงานสีเข้ม" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index e4fa92665..3003a0923 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -13253,6 +13253,11 @@ msgstr "Grup simgenizi yeniden konumlandırmak için sürükleyin ve yakınlaşt msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Davet arka planınızı yeniden konumlandırmak için sürükleyin ve yakınlaştırmak için kaydırma tekerleğini veya kıstırma hareketini kullanın. Önerilen minimum boyut {minimumWidth}×{minimumHeight} pikseldir (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "{productName} görev çubuğu düğmesindeki okunmamış rozeti kırmızı yerine koyu gri renkte göster." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Herhangi bir toplulukta özel emojiler ve çıkartmalar kullanın" msgid "Use custom image" msgstr "Özel görsel kullan" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Koyu görev çubuğu rozetini kullan" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index 0429df972..3dde7b8b5 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -13253,6 +13253,11 @@ msgstr "Перетягніть, щоб змінити положення зна msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Перетягніть, щоб змінити положення фону запрошення, і скористайтеся коліщатком прокрутки або жестом зведення/розведення пальців для масштабування. Рекомендований мінімальний розмір: {minimumWidth}×{minimumHeight} пікселів (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Відображати значок непрочитаних повідомлень на кнопці панелі завдань {productName} темно-сірим замість червоного." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Використовуйте власні емоджі та стікер msgid "Use custom image" msgstr "Використати власне зображення" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Використовувати темну позначку на панелі завдань" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index 0fb7512a9..47d31e5e5 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -13253,6 +13253,11 @@ msgstr "Kéo để định vị lại biểu tượng nhóm của bạn và dùn msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "Kéo để định vị lại ảnh nền lời mời và dùng con lăn chuột hoặc chụm để thu phóng. Kích thước tối thiểu được đề xuất là {minimumWidth}×{minimumHeight} pixel (16:9)." +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "Hiển thị huy hiệu chưa đọc trên nút thanh tác vụ {productName} màu xám đậm thay vì màu đỏ." + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "Sử dụng biểu tượng cảm xúc và nhãn dán tùy chỉnh trong msgid "Use custom image" msgstr "Dùng ảnh tùy chỉnh" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "Sử dụng huy hiệu thanh tác vụ màu tối" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po index 18435c70c..511e47bf7 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -13253,6 +13253,11 @@ msgstr "拖动可调整群聊图标位置,滚动鼠标滚轮或双指开合可 msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "拖动可调整邀请背景位置,滚动鼠标滚轮或双指开合可缩放。建议的最小尺寸为 {minimumWidth}×{minimumHeight} 像素(16:9)。" +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "在 {productName} 任务栏按钮上绘制未读徽章,颜色为深灰色而非红色。" + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "在任何社群中使用自定义表情符号和贴纸" msgid "Use custom image" msgstr "使用自定义图片" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "使用深色任务栏徽章" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po index 145268238..a19c8ee2e 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -13253,6 +13253,11 @@ msgstr "拖曳以重新調整群組圖示的位置,並使用滾輪或雙指縮 msgid "Drag to reposition your invite background and use the scroll wheel or pinch to zoom. The recommended minimum size is {minimumWidth}×{minimumHeight} pixels (16:9)." msgstr "拖曳以重新調整邀請背景位置,並使用滾輪或雙指縮放。建議的最小尺寸為 {minimumWidth}×{minimumHeight} 像素 (16:9)。" +#. Desktop setting description under the dark taskbar badge toggle on Windows. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Draw the unread badge on the {productName} taskbar button in dark gray instead of red." +msgstr "在 Windows 上,將 {productName} 工作列按鈕上的未讀徽章繪製成深灰色,而非紅色。" + #. Description text in the theme studio assets section. #: src/features/theme_studio/sections/AssetsSection.tsx msgid "Drop images, fonts, or other files here to use them inside your custom CSS." @@ -37182,6 +37187,11 @@ msgstr "在任何社群中使用自訂表情符號和貼圖" msgid "Use custom image" msgstr "使用自訂圖片" +#. Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray. +#: src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +msgid "Use dark taskbar badge" +msgstr "使用深色工作列徽章" + #. Short label in the theme tab content. Keep it concise. #: src/features/user/components/modals/tabs/appearance_tab/theme/ThemeTabContent.tsx msgid "Use dark theme" diff --git a/fluxer_app/src/features/user/components/modals/tabs/DesktopSettingsTab.tsx b/fluxer_app/src/features/user/components/modals/tabs/DesktopSettingsTab.tsx index b963501dc..a2652b00e 100644 --- a/fluxer_app/src/features/user/components/modals/tabs/DesktopSettingsTab.tsx +++ b/fluxer_app/src/features/user/components/modals/tabs/DesktopSettingsTab.tsx @@ -20,7 +20,13 @@ import { relaunchDesktopApp, setDesktopWindowBehaviorSettings, } from '@app/features/ui/utils/DesktopWindowBehaviorUtils'; -import {getNativePlatformSync, isDesktop, isNativeLinux, isNativeMacOS} from '@app/features/ui/utils/NativeUtils'; +import { + getNativePlatformSync, + isDesktop, + isNativeLinux, + isNativeMacOS, + isNativeWindows, +} from '@app/features/ui/utils/NativeUtils'; import { LATER_DESCRIPTOR, LAUNCH_AT_LOGIN_DESCRIPTOR as LAUNCH_PRODUCT_AT_LOGIN_DESCRIPTOR, @@ -51,6 +57,17 @@ const USE_COLORED_TRAY_ICON_DESCRIPTION_DESCRIPTOR = msg({ comment: 'Desktop setting description under the colored tray icon toggle on Windows and Linux.', }); +const USE_DARK_TASKBAR_BADGE_DESCRIPTOR = msg({ + message: 'Use dark taskbar badge', + comment: + 'Desktop setting toggle label on Windows. Switches the unread badge drawn over the taskbar button from red to dark gray.', +}); + +const USE_DARK_TASKBAR_BADGE_DESCRIPTION_DESCRIPTOR = msg({ + message: 'Draw the unread badge on the {productName} taskbar button in dark gray instead of red.', + comment: 'Desktop setting description under the dark taskbar badge toggle on Windows.', +}); + const DesktopSettingsTab: React.FC = observer(() => { const {i18n} = useLingui(); const cachedAutostart = getCachedAutostartStatus(); @@ -65,6 +82,7 @@ const DesktopSettingsTab: React.FC = observer(() => { const platform = getNativePlatformSync(); const isMac = isNativeMacOS(platform); const isLinux = isNativeLinux(platform); + const isWindows = isNativeWindows(platform); useLayoutEffect(() => { let mounted = true; const initDesktopSettings = async () => { @@ -211,6 +229,18 @@ const DesktopSettingsTab: React.FC = observer(() => { data-flx="user.desktop-settings-tab.switch.colored-tray-icon-change" /> )} + {isWindows && desktopWindowBehavior.darkTaskbarBadge !== undefined && ( + handleDesktopWindowBehaviorChange({darkTaskbarBadge: value})} + data-flx="user.desktop-settings-tab.switch.dark-taskbar-badge-change" + /> + )} Minimize to menu bar : Minimize to tray} value={desktopWindowBehavior.minimizeToTray} diff --git a/fluxer_app/src/types/electron.d.ts b/fluxer_app/src/types/electron.d.ts index b8a4b58cc..2f65cc792 100644 --- a/fluxer_app/src/types/electron.d.ts +++ b/fluxer_app/src/types/electron.d.ts @@ -100,6 +100,7 @@ export interface DesktopInfo { export interface DesktopWindowBehaviorSettings { showTrayIcon: boolean; coloredTrayIcon?: boolean; + darkTaskbarBadge?: boolean; minimizeToTray: boolean; closeToTray: boolean; startMinimized?: boolean; diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-1.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-1.ico index 0e713c3ad..077396b7b 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-1.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-1.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-10.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-10.ico index 68dfee3e8..0d8e01f57 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-10.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-10.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-11.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-11.ico index 20f89f6ab..2f58e70fe 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-11.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-11.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-2.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-2.ico index 454254f87..435411d22 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-2.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-2.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-3.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-3.ico index e7b46decb..9f0381c23 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-3.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-3.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-4.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-4.ico index 038d9c9a8..bd134c501 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-4.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-4.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-5.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-5.ico index f7dcba3a8..11c9653a6 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-5.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-5.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-6.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-6.ico index 956d582bc..4f07880f2 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-6.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-6.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-7.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-7.ico index 0bfc15d1e..77e4acf69 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-7.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-7.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-8.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-8.ico index 7d356f605..df8e198e9 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-8.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-8.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-9.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-9.ico index 34149cbc2..5cb8d9b1e 100644 Binary files a/fluxer_desktop/build_resources/icons-canary/badges/badge-9.ico and b/fluxer_desktop/build_resources/icons-canary/badges/badge-9.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-1.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-1.ico new file mode 100644 index 000000000..6b39e30a1 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-1.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-10.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-10.ico new file mode 100644 index 000000000..926b20534 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-10.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-11.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-11.ico new file mode 100644 index 000000000..b56954ba8 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-11.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-2.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-2.ico new file mode 100644 index 000000000..1e122faed Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-2.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-3.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-3.ico new file mode 100644 index 000000000..881dde482 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-3.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-4.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-4.ico new file mode 100644 index 000000000..5ae060d48 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-4.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-5.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-5.ico new file mode 100644 index 000000000..3fb21c2c0 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-5.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-6.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-6.ico new file mode 100644 index 000000000..216faf7cc Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-6.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-7.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-7.ico new file mode 100644 index 000000000..607248765 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-7.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-8.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-8.ico new file mode 100644 index 000000000..5faa3919c Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-8.ico differ diff --git a/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-9.ico b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-9.ico new file mode 100644 index 000000000..aef49581e Binary files /dev/null and b/fluxer_desktop/build_resources/icons-canary/badges/badge-dark-9.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-1.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-1.ico index 0e713c3ad..077396b7b 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-1.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-1.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-10.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-10.ico index 68dfee3e8..0d8e01f57 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-10.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-10.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-11.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-11.ico index 20f89f6ab..2f58e70fe 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-11.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-11.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-2.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-2.ico index 454254f87..435411d22 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-2.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-2.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-3.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-3.ico index e7b46decb..9f0381c23 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-3.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-3.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-4.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-4.ico index 038d9c9a8..bd134c501 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-4.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-4.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-5.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-5.ico index f7dcba3a8..11c9653a6 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-5.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-5.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-6.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-6.ico index 956d582bc..4f07880f2 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-6.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-6.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-7.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-7.ico index 0bfc15d1e..77e4acf69 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-7.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-7.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-8.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-8.ico index 7d356f605..df8e198e9 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-8.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-8.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-9.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-9.ico index 34149cbc2..5cb8d9b1e 100644 Binary files a/fluxer_desktop/build_resources/icons-development/badges/badge-9.ico and b/fluxer_desktop/build_resources/icons-development/badges/badge-9.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-1.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-1.ico new file mode 100644 index 000000000..6b39e30a1 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-1.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-10.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-10.ico new file mode 100644 index 000000000..926b20534 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-10.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-11.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-11.ico new file mode 100644 index 000000000..b56954ba8 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-11.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-2.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-2.ico new file mode 100644 index 000000000..1e122faed Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-2.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-3.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-3.ico new file mode 100644 index 000000000..881dde482 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-3.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-4.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-4.ico new file mode 100644 index 000000000..5ae060d48 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-4.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-5.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-5.ico new file mode 100644 index 000000000..3fb21c2c0 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-5.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-6.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-6.ico new file mode 100644 index 000000000..216faf7cc Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-6.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-7.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-7.ico new file mode 100644 index 000000000..607248765 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-7.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-8.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-8.ico new file mode 100644 index 000000000..5faa3919c Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-8.ico differ diff --git a/fluxer_desktop/build_resources/icons-development/badges/badge-dark-9.ico b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-9.ico new file mode 100644 index 000000000..aef49581e Binary files /dev/null and b/fluxer_desktop/build_resources/icons-development/badges/badge-dark-9.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-1.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-1.ico index 0e713c3ad..077396b7b 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-1.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-1.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-10.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-10.ico index 68dfee3e8..0d8e01f57 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-10.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-10.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-11.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-11.ico index 20f89f6ab..2f58e70fe 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-11.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-11.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-2.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-2.ico index 454254f87..435411d22 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-2.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-2.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-3.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-3.ico index e7b46decb..9f0381c23 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-3.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-3.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-4.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-4.ico index 038d9c9a8..bd134c501 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-4.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-4.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-5.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-5.ico index f7dcba3a8..11c9653a6 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-5.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-5.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-6.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-6.ico index 956d582bc..4f07880f2 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-6.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-6.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-7.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-7.ico index 0bfc15d1e..77e4acf69 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-7.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-7.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-8.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-8.ico index 7d356f605..df8e198e9 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-8.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-8.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-9.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-9.ico index 34149cbc2..5cb8d9b1e 100644 Binary files a/fluxer_desktop/build_resources/icons-stable/badges/badge-9.ico and b/fluxer_desktop/build_resources/icons-stable/badges/badge-9.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-1.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-1.ico new file mode 100644 index 000000000..6b39e30a1 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-1.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-10.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-10.ico new file mode 100644 index 000000000..926b20534 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-10.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-11.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-11.ico new file mode 100644 index 000000000..b56954ba8 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-11.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-2.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-2.ico new file mode 100644 index 000000000..1e122faed Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-2.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-3.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-3.ico new file mode 100644 index 000000000..881dde482 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-3.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-4.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-4.ico new file mode 100644 index 000000000..5ae060d48 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-4.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-5.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-5.ico new file mode 100644 index 000000000..3fb21c2c0 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-5.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-6.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-6.ico new file mode 100644 index 000000000..216faf7cc Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-6.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-7.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-7.ico new file mode 100644 index 000000000..607248765 Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-7.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-8.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-8.ico new file mode 100644 index 000000000..5faa3919c Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-8.ico differ diff --git a/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-9.ico b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-9.ico new file mode 100644 index 000000000..aef49581e Binary files /dev/null and b/fluxer_desktop/build_resources/icons-stable/badges/badge-dark-9.ico differ diff --git a/fluxer_desktop/package.json b/fluxer_desktop/package.json index f67c3ff0f..95c357c5c 100644 --- a/fluxer_desktop/package.json +++ b/fluxer_desktop/package.json @@ -10,6 +10,7 @@ "main": "dist/main/index.js", "scripts": { "build": "node scripts/build.mjs", + "generate:windows-badges": "electron scripts/generate-windows-badges.mjs", "set-channel": "../tools/ci/run.sh build-desktop --step set_build_channel", "test": "pnpm test:main", "test:main": "pnpm set-channel && node --test 'src/main/*.test.mjs' 'src/preload/*.test.mjs' 'src/common/*.test.mjs'", diff --git a/fluxer_desktop/scripts/generate-windows-badges.mjs b/fluxer_desktop/scripts/generate-windows-badges.mjs new file mode 100644 index 000000000..38f662a7b --- /dev/null +++ b/fluxer_desktop/scripts/generate-windows-badges.mjs @@ -0,0 +1,201 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as zlib from 'node:zlib'; +import {app, BrowserWindow} from 'electron'; + +const ROOT_DIR = path.resolve(import.meta.dirname, '..'); +const BUILD_RESOURCES_DIR = path.join(ROOT_DIR, 'build_resources'); +const FONT_FILE = path.join(ROOT_DIR, '..', 'packages', 'fonts', 'files', 'FluxerSans', 'FluxerSans-SemiBold.woff2'); +const ICON_DIRECTORIES = Object.freeze(['icons-stable', 'icons-canary', 'icons-development']); +const FRAME_SIZES = Object.freeze([16, 20, 24, 32, 40, 48]); +const SUPERSAMPLE = 8; +const BADGE_COUNT = 11; +const DOT_INDEX = 11; +const CIRCLE_DIAMETER_RATIO = 0.875; +const DIGIT_HEIGHT_RATIO = 0.49; +const WIDE_LABEL_MAX_WIDTH_RATIO = 0.7; +const DOT_DIAMETER_RATIO = 0.375; +const GLYPH_COLOR = '#ffffff'; +const VARIANTS = Object.freeze([ + {prefix: 'badge', fill: '#f35a5a'}, + {prefix: 'badge-dark', fill: '#26252d'}, +]); + +function labelFor(index) { + if (index === DOT_INDEX) return null; + if (index === BADGE_COUNT - 1) return '9+'; + return String(index); +} + +function renderInPage(options) { + return document.fonts.load(`600 100px BadgeFont`).then(() => { + const results = []; + for (const job of options.jobs) { + const size = job.size * options.supersample; + const canvas = document.createElement('canvas'); + canvas.width = size; + canvas.height = size; + const context = canvas.getContext('2d', {willReadFrequently: true}); + context.fillStyle = job.fill; + context.beginPath(); + context.arc(size / 2, size / 2, (size * options.circleDiameterRatio) / 2, 0, Math.PI * 2); + context.fill(); + context.fillStyle = options.glyphColor; + if (job.label === null) { + context.beginPath(); + context.arc(size / 2, size / 2, (size * options.dotDiameterRatio) / 2, 0, Math.PI * 2); + context.fill(); + } else { + context.font = '600 100px BadgeFont'; + const reference = context.measureText('8'); + const referenceHeight = reference.actualBoundingBoxAscent + reference.actualBoundingBoxDescent; + let fontSize = (100 * size * options.digitHeightRatio) / referenceHeight; + context.font = `600 ${fontSize}px BadgeFont`; + let metrics = context.measureText(job.label); + let width = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight; + const maxWidth = size * options.wideLabelMaxWidthRatio; + if (width > maxWidth) { + fontSize *= maxWidth / width; + context.font = `600 ${fontSize}px BadgeFont`; + metrics = context.measureText(job.label); + width = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight; + } + const height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent; + const x = (size - width) / 2 + metrics.actualBoundingBoxLeft; + const y = (size - height) / 2 + metrics.actualBoundingBoxAscent; + context.fillText(job.label, x, y); + } + results.push(Array.from(context.getImageData(0, 0, size, size).data)); + } + return results; + }); +} + +function downsample(rgba, size, factor) { + const source = size * factor; + const output = Buffer.alloc(size * size * 4); + const samples = factor * factor; + for (let y = 0; y < size; y++) { + for (let x = 0; x < size; x++) { + let red = 0; + let green = 0; + let blue = 0; + let alpha = 0; + for (let sy = 0; sy < factor; sy++) { + for (let sx = 0; sx < factor; sx++) { + const offset = ((y * factor + sy) * source + (x * factor + sx)) * 4; + const weight = rgba[offset + 3]; + red += rgba[offset] * weight; + green += rgba[offset + 1] * weight; + blue += rgba[offset + 2] * weight; + alpha += weight; + } + } + const target = (y * size + x) * 4; + if (alpha === 0) continue; + output[target] = Math.round(red / alpha); + output[target + 1] = Math.round(green / alpha); + output[target + 2] = Math.round(blue / alpha); + output[target + 3] = Math.round(alpha / samples); + } + } + return output; +} + +function pngChunk(type, data) { + const chunk = Buffer.alloc(12 + data.length); + chunk.writeUInt32BE(data.length, 0); + chunk.write(type, 4, 'latin1'); + data.copy(chunk, 8); + chunk.writeUInt32BE(zlib.crc32(chunk.subarray(4, 8 + data.length)), 8 + data.length); + return chunk; +} + +function encodePng(rgba, size) { + const header = Buffer.alloc(13); + header.writeUInt32BE(size, 0); + header.writeUInt32BE(size, 4); + header.writeUInt8(8, 8); + header.writeUInt8(6, 9); + const rows = Buffer.alloc(size * (size * 4 + 1)); + for (let y = 0; y < size; y++) { + rgba.copy(rows, y * (size * 4 + 1) + 1, y * size * 4, (y + 1) * size * 4); + } + return Buffer.concat([ + Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]), + pngChunk('IHDR', header), + pngChunk('IDAT', zlib.deflateSync(rows, {level: 9})), + pngChunk('IEND', Buffer.alloc(0)), + ]); +} + +function encodeIcon(frames) { + const header = Buffer.alloc(6 + frames.length * 16); + header.writeUInt16LE(0, 0); + header.writeUInt16LE(1, 2); + header.writeUInt16LE(frames.length, 4); + let offset = header.length; + frames.forEach(({size, data}, index) => { + const entry = 6 + index * 16; + header.writeUInt8(size, entry); + header.writeUInt8(size, entry + 1); + header.writeUInt16LE(1, entry + 4); + header.writeUInt16LE(32, entry + 6); + header.writeUInt32LE(data.length, entry + 8); + header.writeUInt32LE(offset, entry + 12); + offset += data.length; + }); + return Buffer.concat([header, ...frames.map(({data}) => data)]); +} + +async function generate() { + const font = fs.readFileSync(FONT_FILE).toString('base64'); + const window = new BrowserWindow({show: false, webPreferences: {offscreen: true}}); + const html = ``; + await window.loadURL(`data:text/html;charset=utf-8,${encodeURIComponent(html)}`); + const jobs = VARIANTS.flatMap((variant) => + Array.from({length: BADGE_COUNT}, (_, offset) => offset + 1).flatMap((index) => + FRAME_SIZES.map((size) => ({variant: variant.prefix, index, size, fill: variant.fill, label: labelFor(index)})), + ), + ); + const options = { + jobs: jobs.map(({size, fill, label}) => ({size, fill, label})), + supersample: SUPERSAMPLE, + circleDiameterRatio: CIRCLE_DIAMETER_RATIO, + digitHeightRatio: DIGIT_HEIGHT_RATIO, + wideLabelMaxWidthRatio: WIDE_LABEL_MAX_WIDTH_RATIO, + dotDiameterRatio: DOT_DIAMETER_RATIO, + glyphColor: GLYPH_COLOR, + }; + const rendered = await window.webContents.executeJavaScript( + `(${renderInPage.toString()})(${JSON.stringify(options)})`, + ); + window.destroy(); + const icons = new Map(); + jobs.forEach((job, position) => { + const name = `${job.variant}-${job.index}.ico`; + const frames = icons.get(name) ?? []; + const pixels = downsample(rendered[position], job.size, SUPERSAMPLE); + frames.push({size: job.size, data: encodePng(pixels, job.size)}); + icons.set(name, frames); + }); + for (const directory of ICON_DIRECTORIES) { + const target = path.join(BUILD_RESOURCES_DIR, directory, 'badges'); + fs.mkdirSync(target, {recursive: true}); + for (const [name, frames] of icons) { + fs.writeFileSync(path.join(target, name), encodeIcon(frames)); + } + } + console.log(`Wrote ${icons.size} badge icons to ${ICON_DIRECTORIES.length} channel directories`); +} + +app + .whenReady() + .then(generate) + .then(() => app.exit(0)) + .catch((error) => { + console.error(error); + app.exit(1); + }); diff --git a/fluxer_desktop/src/common/DesktopConfig.ts b/fluxer_desktop/src/common/DesktopConfig.ts index 5af592b22..0d62c19eb 100644 --- a/fluxer_desktop/src/common/DesktopConfig.ts +++ b/fluxer_desktop/src/common/DesktopConfig.ts @@ -58,6 +58,7 @@ export type ChromiumSwitchesSetting = ReadonlyArray | Record { + test('defaults to the red badge for existing and new configs', () => { + loadSettings(undefined); + assert.equal(getDesktopWindowBehaviorSettings().darkTaskbarBadge, false); + loadSettings({showTrayIcon: true, coloredTrayIcon: true}); + assert.equal(getDesktopWindowBehaviorSettings().darkTaskbarBadge, false); + }); + + test('drops values that are not booleans', () => { + for (const value of ['true', 1, null, {}]) { + loadSettings({darkTaskbarBadge: value}); + assert.equal(getDesktopWindowBehaviorSettings().darkTaskbarBadge, false, String(value)); + } + }); + + test('persists and reloads the choice without touching the tray settings', () => { + const userDataPath = loadSettings({showTrayIcon: false, coloredTrayIcon: true}); + assert.equal(setDesktopWindowBehaviorSettings({darkTaskbarBadge: true}).darkTaskbarBadge, true); + assert.equal(readPersisted(userDataPath).darkTaskbarBadge, true); + loadDesktopConfig(userDataPath); + const settings = getDesktopWindowBehaviorSettings(); + assert.equal(settings.darkTaskbarBadge, true); + assert.equal(settings.showTrayIcon, false); + assert.equal(settings.coloredTrayIcon, true); + }); +}); diff --git a/fluxer_desktop/src/main/IpcHandlers.ts b/fluxer_desktop/src/main/IpcHandlers.ts index 4caa958da..189c8a6d8 100644 --- a/fluxer_desktop/src/main/IpcHandlers.ts +++ b/fluxer_desktop/src/main/IpcHandlers.ts @@ -97,7 +97,7 @@ import { showWindow, THEME_STUDIO_POPOUT_KEY, } from '@electron/main/Window'; -import {setWindowsBadgeOverlay} from '@electron/main/WindowsBadge'; +import {refreshWindowsBadgeOverlay, setWindowsBadgeOverlay} from '@electron/main/WindowsBadge'; import { DESKTOP_MODULE_CHANNELS, DESKTOP_UPDATE_CHANNELS, @@ -126,6 +126,9 @@ function normalizeDesktopWindowBehaviorUpdate(value: unknown): Partial { const nextSettings = setDesktopWindowBehaviorSettings(normalizeDesktopWindowBehaviorUpdate(settings)); applyDesktopWindowBehaviorSettings(); + refreshWindowsBadgeOverlay(getMainWindow()); if (!nextSettings.showTrayIcon) { const mainWindow = getMainWindow(); if (mainWindow && !mainWindow.isDestroyed() && !mainWindow.isVisible()) { diff --git a/fluxer_desktop/src/main/WindowsBadge.test.mjs b/fluxer_desktop/src/main/WindowsBadge.test.mjs new file mode 100644 index 000000000..60e8cff3a --- /dev/null +++ b/fluxer_desktop/src/main/WindowsBadge.test.mjs @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import {describe, test} from 'node:test'; +import {fileURLToPath} from 'node:url'; +import {installElectronStub, installTestModuleStub} from './LocalAppTestSupport.test.mjs'; + +const BUILD_RESOURCES = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', '..', 'build_resources'); +const CHANNEL_ICON_DIRECTORIES = ['icons-stable', 'icons-canary', 'icons-development']; +const BADGE_NAMES = Array.from({length: 11}, (_, offset) => [ + `badge-${offset + 1}.ico`, + `badge-dark-${offset + 1}.ico`, +]).flat(); + +const resourcesPath = fs.mkdtempSync(path.join(os.tmpdir(), 'fluxer-desktop-windows-badge-test-')); +fs.mkdirSync(path.join(resourcesPath, 'badges')); +for (const name of BADGE_NAMES) { + fs.copyFileSync(path.join(BUILD_RESOURCES, 'icons-stable', 'badges', name), path.join(resourcesPath, 'badges', name)); +} +Object.defineProperty(process, 'resourcesPath', {value: resourcesPath, configurable: true}); +Object.defineProperty(process, 'platform', {value: 'win32', configurable: true}); + +const settings = {darkTaskbarBadge: false}; +globalThis.__fluxerDesktopWindowsBadgeTestSettings__ = settings; + +installTestModuleStub( + '@electron/common/DesktopConfig', + 'export const getDesktopWindowBehaviorSettings = () => ({...globalThis.__fluxerDesktopWindowsBadgeTestSettings__});', +); + +const display = {scaleFactor: 1}; + +installElectronStub({ + nativeImage: { + createFromBuffer: (png) => ({png, isEmpty: () => false}), + }, + screen: { + getDisplayMatching: () => display, + }, +}); + +const {pickBadgeFrameSize, readIconPngFrames, refreshWindowsBadgeOverlay, setWindowsBadgeOverlay} = await import( + './WindowsBadge.ts' +); + +const framesByName = new Map( + BADGE_NAMES.map((name) => [name, readIconPngFrames(fs.readFileSync(path.join(resourcesPath, 'badges', name)))]), +); + +function frameOf(png) { + for (const [name, frames] of framesByName) { + for (const [size, frame] of frames) { + if (frame === png || frame.equals(png)) return `${name}@${size}`; + } + } + return null; +} + +function createWindow() { + return { + overlays: [], + isDestroyed: () => false, + getBounds: () => ({x: 0, y: 0, width: 800, height: 600}), + setOverlayIcon(icon, description) { + this.overlays.push({name: icon ? frameOf(icon.png) : null, description}); + }, + }; +} + +function readIconFrames(file) { + const data = fs.readFileSync(file); + assert.equal(data.readUInt16LE(2), 1); + return Array.from({length: data.readUInt16LE(4)}, (_, index) => { + const entry = 6 + index * 16; + const offset = data.readUInt32LE(entry + 12); + return { + size: data[entry], + bitsPerPixel: data.readUInt16LE(entry + 6), + png: data.subarray(offset, offset + 4).toString('latin1') === '\x89PNG', + }; + }); +} + +describe('windows taskbar badge overlay', () => { + test('redraws in the chosen color as soon as the setting changes', () => { + const win = createWindow(); + refreshWindowsBadgeOverlay(win); + assert.equal(win.overlays.length, 0, 'nothing to refresh before the first count'); + + setWindowsBadgeOverlay(win, 3); + assert.equal(win.overlays.at(-1).name, 'badge-3.ico@16'); + assert.match(win.overlays.at(-1).description, /3/); + setWindowsBadgeOverlay(win, 3); + assert.equal(win.overlays.length, 1); + + settings.darkTaskbarBadge = true; + refreshWindowsBadgeOverlay(win); + assert.equal(win.overlays.at(-1).name, 'badge-dark-3.ico@16'); + setWindowsBadgeOverlay(win, 3); + assert.equal(win.overlays.length, 2, 'the same dark icon is not set twice'); + + settings.darkTaskbarBadge = false; + setWindowsBadgeOverlay(win, 3); + assert.equal(win.overlays.length, 3, 'a color switch alone redraws the same count'); + assert.equal(win.overlays.at(-1).name, 'badge-3.ico@16'); + + settings.darkTaskbarBadge = true; + setWindowsBadgeOverlay(win, 25); + assert.equal(win.overlays.at(-1).name, 'badge-dark-10.ico@16'); + setWindowsBadgeOverlay(win, -1); + assert.equal(win.overlays.at(-1).name, 'badge-dark-11.ico@16'); + + display.scaleFactor = 1.5; + refreshWindowsBadgeOverlay(win); + assert.equal(win.overlays.at(-1).name, 'badge-dark-11.ico@24', 'the frame follows the display scale'); + display.scaleFactor = 1; + + setWindowsBadgeOverlay(win, 0); + assert.equal(win.overlays.at(-1).name, null); + assert.equal(win.overlays.at(-1).description, 'No Notifications'); + }); +}); + +describe('badge frame selection', () => { + test('uses the exact frame for each display scale and never upscales when one exists', () => { + const sizes = [16, 20, 24, 32, 40, 48]; + assert.equal(pickBadgeFrameSize(sizes, 1), 16); + assert.equal(pickBadgeFrameSize(sizes, 1.25), 20); + assert.equal(pickBadgeFrameSize(sizes, 1.5), 24); + assert.equal(pickBadgeFrameSize(sizes, 1.75), 32); + assert.equal(pickBadgeFrameSize(sizes, 2), 32); + assert.equal(pickBadgeFrameSize(sizes, 3), 48); + assert.equal(pickBadgeFrameSize(sizes, 4), 48); + assert.equal(pickBadgeFrameSize([], 1), null); + }); + + test('ignores frames that are not PNG and malformed icon data', () => { + assert.equal(readIconPngFrames(Buffer.alloc(0)).size, 0); + assert.equal(readIconPngFrames(Buffer.from([0, 0, 2, 0, 1, 0])).size, 0); + const truncated = fs.readFileSync(path.join(resourcesPath, 'badges', 'badge-3.ico')).subarray(0, 200); + assert.ok(readIconPngFrames(truncated).size < 6); + }); +}); + +describe('bundled taskbar badge icons', () => { + test('every channel ships the same red and dark PNG badges for every display scale', () => { + const [reference, ...others] = CHANNEL_ICON_DIRECTORIES.map((directory) => + path.join(BUILD_RESOURCES, directory, 'badges'), + ); + for (const name of BADGE_NAMES) { + const frames = readIconFrames(path.join(reference, name)); + assert.deepEqual( + frames.map(({size, bitsPerPixel, png}) => [size, bitsPerPixel, png]), + [16, 20, 24, 32, 40, 48].map((size) => [size, 32, true]), + name, + ); + for (const directory of others) { + assert.ok( + fs.readFileSync(path.join(directory, name)).equals(fs.readFileSync(path.join(reference, name))), + name, + ); + } + } + }); +}); diff --git a/fluxer_desktop/src/main/WindowsBadge.ts b/fluxer_desktop/src/main/WindowsBadge.ts index 9e343dadd..f10e3ed08 100644 --- a/fluxer_desktop/src/main/WindowsBadge.ts +++ b/fluxer_desktop/src/main/WindowsBadge.ts @@ -2,14 +2,25 @@ import fs from 'node:fs'; import path from 'node:path'; +import {getDesktopWindowBehaviorSettings} from '@electron/common/DesktopConfig'; import {describeUnreadBadge, UNREAD_BADGE_DOT} from '@electron/main/UnreadBadge'; import type {BrowserWindow, NativeImage} from 'electron'; -import {nativeImage} from 'electron'; +import {nativeImage, screen} from 'electron'; -const badgeIcons: Array = []; +const BADGE_COUNT = 11; +const OVERLAY_BASE_SIZE = 16; +const ICON_DIRECTORY_ENTRY_BYTES = 16; +const ICON_HEADER_BYTES = 6; +const PNG_SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47]); + +type BadgeFrames = ReadonlyMap; + +const badgeFrames: Array = []; +const darkBadgeFrames: Array = []; +const badgeImages = new Map(); let hasInit = false; -let lastIndex: number | null = null; +let lastIcon: NativeImage | null = null; let lastDescription: string | null = null; let lastCount: number | null = null; @@ -17,23 +28,73 @@ function isSupported(): boolean { return process.platform === 'win32'; } +export function readIconPngFrames(data: Buffer): BadgeFrames { + const frames = new Map(); + if (data.length < ICON_HEADER_BYTES || data.readUInt16LE(2) !== 1) return frames; + const count = data.readUInt16LE(4); + for (let index = 0; index < count; index++) { + const entry = ICON_HEADER_BYTES + index * ICON_DIRECTORY_ENTRY_BYTES; + if (entry + ICON_DIRECTORY_ENTRY_BYTES > data.length) break; + const size = data[entry] || 256; + const length = data.readUInt32LE(entry + 8); + const offset = data.readUInt32LE(entry + 12); + const frame = data.subarray(offset, offset + length); + if (frame.length === length && frame.subarray(0, PNG_SIGNATURE.length).equals(PNG_SIGNATURE)) { + frames.set(size, frame); + } + } + return frames; +} + +export function pickBadgeFrameSize(sizes: Iterable, scaleFactor: number): number | null { + const target = Math.round(OVERLAY_BASE_SIZE * scaleFactor); + const sorted = [...sizes].sort((left, right) => left - right); + return sorted.find((size) => size >= target) ?? sorted.at(-1) ?? null; +} + +function loadBadgeFrames(badgeDir: string, name: string): BadgeFrames | null { + try { + const frames = readIconPngFrames(fs.readFileSync(path.join(badgeDir, name))); + return frames.size > 0 ? frames : null; + } catch { + return null; + } +} + function ensureInitialized(): void { if (hasInit || !isSupported()) { return; } hasInit = true; const badgeDir = path.join(process.resourcesPath, 'badges'); - for (let i = 1; i <= 11; i++) { - const iconPath = path.join(badgeDir, `badge-${i}.ico`); - if (!fs.existsSync(iconPath)) { - badgeIcons.push(null); - continue; - } - const icon = nativeImage.createFromPath(iconPath); - badgeIcons.push(icon.isEmpty() ? null : icon); + for (let i = 1; i <= BADGE_COUNT; i++) { + badgeFrames.push(loadBadgeFrames(badgeDir, `badge-${i}.ico`)); + darkBadgeFrames.push(loadBadgeFrames(badgeDir, `badge-dark-${i}.ico`)); } } +function windowScaleFactor(win: BrowserWindow): number { + try { + return screen.getDisplayMatching(win.getBounds()).scaleFactor; + } catch { + return 1; + } +} + +function getBadgeIcon(index: number, scaleFactor: number): NativeImage | null { + const frames = (getDesktopWindowBehaviorSettings().darkTaskbarBadge ? darkBadgeFrames : badgeFrames)[index]; + if (!frames) return null; + const size = pickBadgeFrameSize(frames.keys(), scaleFactor); + const png = size == null ? undefined : frames.get(size); + if (!png) return null; + let image = badgeImages.get(png); + if (!image) { + image = nativeImage.createFromBuffer(png, {scaleFactor: 1}); + badgeImages.set(png, image); + } + return image.isEmpty() ? null : image; +} + function getOverlayIconData(count: number): { index: number | null; description: string; @@ -56,14 +117,10 @@ function applyOverlay(win: BrowserWindow | null, count: number, force: boolean): return; } const {index, description} = getOverlayIconData(count); - if (force || lastIndex !== index || lastDescription !== description) { - if (index == null) { - win.setOverlayIcon(null, description); - } else { - const icon = badgeIcons[index]; - win.setOverlayIcon(icon ?? null, description); - } - lastIndex = index; + const icon = index == null ? null : getBadgeIcon(index, windowScaleFactor(win)); + if (force || lastIcon !== icon || lastDescription !== description) { + win.setOverlayIcon(icon, description); + lastIcon = icon; lastDescription = description; } lastCount = count; diff --git a/knip.json b/knip.json index 01ba72c80..f0de0d202 100644 --- a/knip.json +++ b/knip.json @@ -55,7 +55,8 @@ "src/preload/LegacyHarvestPreload.ts", "src/main/**/*.test.{ts,mjs}", "native/*/index.{js,d.ts}", - "native/*/loader-diagnostics.cjs" + "native/*/loader-diagnostics.cjs", + "scripts/generate-windows-badges.mjs" ], "project": ["src/**/*.{ts,tsx,mjs,js}", "scripts/**/*.mjs", "native/**/*.{js,mjs,cjs,d.ts}"], "ignoreBinaries": ["reg.exe", "update-desktop-database", "xdg-mime"],