diff --git a/app/soapbox/features/verification/waitlist_page.tsx b/app/soapbox/features/verification/waitlist-page.tsx
similarity index 100%
rename from app/soapbox/features/verification/waitlist_page.tsx
rename to app/soapbox/features/verification/waitlist-page.tsx
diff --git a/app/soapbox/features/video/index.tsx b/app/soapbox/features/video/index.tsx
index 871e80774..f418714bd 100644
--- a/app/soapbox/features/video/index.tsx
+++ b/app/soapbox/features/video/index.tsx
@@ -7,7 +7,7 @@ import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import Blurhash from 'soapbox/components/blurhash';
import Icon from 'soapbox/components/icon';
import { useSettings } from 'soapbox/hooks';
-import { isPanoramic, isPortrait, minimumAspectRatio, maximumAspectRatio } from 'soapbox/utils/media_aspect_ratio';
+import { isPanoramic, isPortrait, minimumAspectRatio, maximumAspectRatio } from 'soapbox/utils/media-aspect-ratio';
import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen';
diff --git a/app/soapbox/is_mobile.ts b/app/soapbox/is-mobile.ts
similarity index 100%
rename from app/soapbox/is_mobile.ts
rename to app/soapbox/is-mobile.ts
diff --git a/app/soapbox/jest/test-helpers.tsx b/app/soapbox/jest/test-helpers.tsx
index 721783879..85e0c5bec 100644
--- a/app/soapbox/jest/test-helpers.tsx
+++ b/app/soapbox/jest/test-helpers.tsx
@@ -11,7 +11,7 @@ import { Action, applyMiddleware, createStore } from 'redux';
import thunk from 'redux-thunk';
import '@testing-library/jest-dom';
-import NotificationsContainer from '../features/ui/containers/notifications_container';
+import NotificationsContainer from '../features/ui/containers/notifications-container';
import { default as rootReducer } from '../reducers';
import type { AnyAction } from 'redux';
diff --git a/app/soapbox/jest/test-setup.ts b/app/soapbox/jest/test-setup.ts
index 0052388b0..c2a226a48 100644
--- a/app/soapbox/jest/test-setup.ts
+++ b/app/soapbox/jest/test-setup.ts
@@ -1,6 +1,6 @@
'use strict';
-import { __clear as clearApiMocks } from '../__mocks__/api';
+import { __clear as clearApiMocks } from '../api/__mocks__';
// API mocking
jest.mock('soapbox/api');
diff --git a/app/soapbox/load_polyfills.ts b/app/soapbox/load-polyfills.ts
similarity index 97%
rename from app/soapbox/load_polyfills.ts
rename to app/soapbox/load-polyfills.ts
index e636098e7..cfd6f741f 100644
--- a/app/soapbox/load_polyfills.ts
+++ b/app/soapbox/load-polyfills.ts
@@ -5,11 +5,11 @@
// it will execute in the same tick of the event loop (i.e. near-instant).
function importBasePolyfills() {
- return import(/* webpackChunkName: "base_polyfills" */ './base_polyfills');
+ return import(/* webpackChunkName: "base_polyfills" */ './base-polyfills');
}
function importExtraPolyfills() {
- return import(/* webpackChunkName: "extra_polyfills" */ './extra_polyfills');
+ return import(/* webpackChunkName: "extra_polyfills" */ './extra-polyfills');
}
function loadPolyfills() {
diff --git a/app/soapbox/locales/ast.json b/app/soapbox/locales/ast.json
index cf907e74d..798f2c98e 100644
--- a/app/soapbox/locales/ast.json
+++ b/app/soapbox/locales/ast.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/bg.json b/app/soapbox/locales/bg.json
index c470f3895..c1851a73e 100644
--- a/app/soapbox/locales/bg.json
+++ b/app/soapbox/locales/bg.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Раздумай",
diff --git a/app/soapbox/locales/br.json b/app/soapbox/locales/br.json
index 4008d5d24..d82a83ae8 100644
--- a/app/soapbox/locales/br.json
+++ b/app/soapbox/locales/br.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/cs.json b/app/soapbox/locales/cs.json
index 8d40c597b..652666a92 100644
--- a/app/soapbox/locales/cs.json
+++ b/app/soapbox/locales/cs.json
@@ -1,141 +1,159 @@
{
- "about.also_available": "Available in:",
- "accordion.collapse": "Složit",
- "accordion.expand": "Rozšířit",
+ "about.also_available": "Dostupné v:",
+ "accordion.collapse": "Sbalit",
+ "accordion.expand": "Rozbalit",
"account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů",
"account.badges.bot": "Robot",
- "account.birthday": "Born {date}",
+ "account.birthday": "Narozen/a dne {date}",
"account.birthday_today": "Birthday is today!",
- "account.block": "Zablokovat uživatele @{name}",
- "account.block_domain": "Skrýt vše z {domain}",
+ "account.block": "Zablokovat @{name}",
+ "account.block_domain": "Zablokovat doménu {domain}",
"account.blocked": "Blokován/a",
- "account.chat": "Chat with @{name}",
- "account.column_settings.description": "These settings apply to all account timelines.",
- "account.column_settings.title": "Acccount timeline settings",
+ "account.chat": "Chatovat s @{name}",
"account.deactivated": "Deaktivován",
"account.direct": "Poslat přímou zprávu uživateli @{name}",
+ "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Upravit profil",
"account.endorse": "Představit na profilu",
+ "account.endorse.success": "You are now featuring @{acct} on your profile",
+ "account.familiar_followers": "Followed by {accounts}",
+ "account.familiar_followers.empty": "No one you know follows {name}.",
+ "account.familiar_followers.more": "{count} {count, plural, one {other} other {others}} you follow",
"account.follow": "Sledovat",
- "account.followers": "Sledující",
+ "account.followers": "Sledujících",
"account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.",
- "account.follows": "Sledovaní",
+ "account.follows": "Sledovaných",
"account.follows.empty": "Tento uživatel ještě nikoho nesleduje.",
"account.follows_you": "Sleduje vás",
- "account.hide_reblogs": "Skrýt boosty od uživatele @{name}",
+ "account.hide_reblogs": "Skrýt boosty od @{name}",
"account.last_status": "Last active",
- "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno {date}",
+ "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno dne {date}",
"account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.",
"account.login": "Přihlásit se",
"account.media": "Média",
- "account.member_since": "Registroval/a se {date}",
+ "account.member_since": "Zaregistrován/a od: {date}",
"account.mention": "Zmínit uživatele",
"account.moved_to": "{name} se přesunul/a na:",
- "account.mute": "Skrýt uživatele @{name}",
+ "account.mute": "Skrýt @{name}",
+ "account.muted": "Skrytý",
"account.never_active": "Never",
"account.posts": "Příspěvky",
"account.posts_with_replies": "Příspěvky a odpovědi",
"account.profile": "Profil",
+ "account.profile_external": "Zobrazit profil na doméně {domain}",
"account.register": "Registrovat se",
"account.remote_follow": "Remote follow",
+ "account.remove_from_followers": "Remove this follower",
"account.report": "Nahlásit uživatele @{name}",
"account.requested": "Čeká na schválení. Kliknutím zrušíte požadavek o sledování",
"account.requested_small": "Čeká na schválení",
- "account.share": "Sdílet profil uživatele @{name}",
- "account.show_reblogs": "Zobrazit boosty od uživatele @{name}",
- "account.subscribe": "Subscribe to notifications from @{name}",
- "account.subscribed": "Subscribed",
+ "account.search": "Hledat příspěvky od @{name}",
+ "account.search_self": "Hledat vlastní příspěvky",
+ "account.share": "Sdílet profil @{name}",
+ "account.show_reblogs": "Zobrazit boosty od @{name}",
+ "account.subscribe": "Odebírat oznámení o nových příspěvcích od @{name}",
+ "account.subscribe.failure": "Při přihlašování odběru došlo k chybě.",
+ "account.subscribe.success": "Přihlásili jste se k odběru oznámení o nových příspěvcích.",
"account.unblock": "Odblokovat uživatele @{name}",
"account.unblock_domain": "Odkrýt doménu {domain}",
"account.unendorse": "Nepředstavit na profilu",
+ "account.unendorse.success": "You are no longer featuring @{acct}",
"account.unfollow": "Přestat sledovat",
"account.unmute": "Odkrýt uživatele @{name}",
- "account.unsubscribe": "Unsubscribe to notifications from @{name}",
- "account.verified": "Verified Account",
- "account.welcome": "Welcome",
- "account_gallery.none": "Žádná média k zobrazení.",
+ "account.unsubscribe": "Odhlásit odběr oznámení o nových příspěvcích od uživatele @{name}",
+ "account.unsubscribe.failure": "Při rušení odběru došlo k chybě.",
+ "account.unsubscribe.success": "Zrušili jste odběr oznámení o nových příspěvcích.",
+ "account.verified": "Ověřený účet",
+ "account_gallery.none": "Nejsou tu žádná média.",
+ "account_moderation_modal.admin_fe": "Otevřít v AdminFE",
+ "account_moderation_modal.fields.account_role": "Role",
+ "account_moderation_modal.fields.badges": "Vlastní role",
+ "account_moderation_modal.fields.deactivate": "Deaktivovat účet",
+ "account_moderation_modal.fields.delete": "Smazat účet",
+ "account_moderation_modal.fields.suggested": "Suggested in people to follow",
+ "account_moderation_modal.fields.verified": "Ověřený účet",
+ "account_moderation_modal.info.id": "ID: {id}",
+ "account_moderation_modal.roles.admin": "Admin",
+ "account_moderation_modal.roles.moderator": "Moderátor",
+ "account_moderation_modal.roles.user": "Uživatel",
+ "account_moderation_modal.title": "Moderace účtu @{acct}",
"account_note.hint": "You can keep notes about this user for yourself (this will not be shared with them):",
"account_note.placeholder": "No comment provided",
- "account_note.save": "Save",
+ "account_note.save": "Uložit",
"account_note.target": "Note for @{target}",
"account_search.placeholder": "Search for an account",
- "account_timeline.column_settings.show_pinned": "Show pinned posts",
- "admin.awaiting_approval.approved_message": "{acct} was approved!",
- "admin.awaiting_approval.empty_message": "There is nobody waiting for approval. When a new user signs up, you can review them here.",
- "admin.awaiting_approval.rejected_message": "{acct} was rejected.",
- "admin.dashboard.registration_mode.approval_hint": "Users can sign up, but their account only gets activated when an admin approves it.",
- "admin.dashboard.registration_mode.approval_label": "Approval Required",
- "admin.dashboard.registration_mode.closed_hint": "Nobody can sign up. You can still invite people.",
- "admin.dashboard.registration_mode.closed_label": "Closed",
- "admin.dashboard.registration_mode.open_hint": "Anyone can join.",
- "admin.dashboard.registration_mode.open_label": "Open",
- "admin.dashboard.registration_mode_label": "Registrations",
- "admin.dashboard.settings_saved": "Settings saved!",
- "admin.dashcounters.domain_count_label": "peers",
- "admin.dashcounters.mau_label": "monthly active users",
- "admin.dashcounters.retention_label": "user retention",
- "admin.dashcounters.status_count_label": "posts",
- "admin.dashcounters.user_count_label": "total users",
+ "actualStatus.edited": "Edited {date}",
+ "actualStatuses.quote_tombstone": "Příspěvek není dostupný.",
+ "admin.awaiting_approval.approved_message": "Účet {acct} byl schválen!",
+ "admin.awaiting_approval.empty_message": "Na schválení nikdo nečeká. Až se nějaký nový uživatel zaregistruje, tady si můžete jeho žádost prohlédnout.",
+ "admin.awaiting_approval.rejected_message": "Účet {acct} byl odmítnut.",
+ "admin.dashboard.registration_mode.approval_hint": "Uživatelé se mohou zaregistrovat, ale jejich účet se aktivuje až když ho schválí administrátor",
+ "admin.dashboard.registration_mode.approval_label": "Pouze po schválení",
+ "admin.dashboard.registration_mode.closed_hint": "Zaregistrovat se nemůže nikdo. Ale vy můžete lidi pozvat.",
+ "admin.dashboard.registration_mode.closed_label": "Zavřená",
+ "admin.dashboard.registration_mode.open_hint": "Zaregistrovat se může kdokoliv.",
+ "admin.dashboard.registration_mode.open_label": "Otevřená",
+ "admin.dashboard.registration_mode_label": "Registrace",
+ "admin.dashboard.settings_saved": "Nastavení uloženo!",
+ "admin.dashcounters.domain_count_label": "propojených domén",
+ "admin.dashcounters.mau_label": "aktivních uživatelů za poslední měsíc",
+ "admin.dashcounters.retention_label": "míra udržení uživatelů",
+ "admin.dashcounters.status_count_label": "příspěvků",
+ "admin.dashcounters.user_count_label": "uživatelů celkem",
"admin.dashwidgets.email_list_header": "Email list",
"admin.dashwidgets.software_header": "Software",
"admin.latest_accounts_panel.more": "Click to see {count} {count, plural, one {account} other {accounts}}",
- "admin.latest_accounts_panel.title": "Latest Accounts",
+ "admin.latest_accounts_panel.title": "Nové účty",
"admin.moderation_log.empty_message": "You have not performed any moderation actions yet. When you do, a history will be shown here.",
"admin.reports.actions.close": "Close",
"admin.reports.actions.view_status": "View post",
- "admin.reports.empty_message": "There are no open reports. If a user gets reported, they will show up here.",
+ "admin.reports.empty_message": "Momentálně není nikdo nahlášený. Až někdo někoho nahlásí, tady to bude vidět.",
"admin.reports.report_closed_message": "Report on @{name} was closed",
"admin.reports.report_title": "Report on {acct}",
- "admin.statuses.actions.delete_status": "Delete post",
+ "admin.statuses.actions.delete_status": "Smazat příspěvek",
"admin.statuses.actions.mark_status_not_sensitive": "Mark post not sensitive",
- "admin.statuses.actions.mark_status_sensitive": "Mark post sensitive",
- "admin.statuses.status_deleted_message": "Post by @{acct} was deleted",
- "admin.statuses.status_marked_message_not_sensitive": "Post by @{acct} was marked not sensitive",
- "admin.statuses.status_marked_message_sensitive": "Post by @{acct} was marked sensitive",
+ "admin.statuses.actions.mark_status_sensitive": "Označit citlivý obsah",
+ "admin.statuses.status_deleted_message": "Příspěvek uživatele @{acct} byl smazán",
+ "admin.statuses.status_marked_message_not_sensitive": "Příspěvek uživatele @{acct} nebyl označen jako citlivý",
+ "admin.statuses.status_marked_message_sensitive": "Příspěvek uživatele @{acct} byl označen jako citlivý",
"admin.user_index.empty": "No users found.",
- "admin.user_index.search_input_placeholder": "Who are you looking for?",
- "admin.users.actions.deactivate_user": "Deactivate @{name}",
- "admin.users.actions.delete_user": "Delete @{name}",
- "admin.users.actions.demote_to_moderator": "Demote @{name} to a moderator",
- "admin.users.actions.demote_to_moderator_message": "@{acct} was demoted to a moderator",
- "admin.users.actions.demote_to_user": "Demote @{name} to a regular user",
- "admin.users.actions.demote_to_user_message": "@{acct} was demoted to a regular user",
- "admin.users.actions.promote_to_admin": "Promote @{name} to an admin",
- "admin.users.actions.promote_to_admin_message": "@{acct} was promoted to an admin",
- "admin.users.actions.promote_to_moderator": "Promote @{name} to a moderator",
- "admin.users.actions.promote_to_moderator_message": "@{acct} was promoted to a moderator",
- "admin.users.actions.remove_donor": "Remove @{name} as a donor",
- "admin.users.actions.set_donor": "Set @{name} as a donor",
- "admin.users.actions.suggest_user": "Suggest @{name}",
- "admin.users.actions.unsuggest_user": "Unsuggest @{name}",
- "admin.users.actions.unverify_user": "Unverify @{name}",
- "admin.users.actions.verify_user": "Verify @{name}",
+ "admin.user_index.search_input_placeholder": "Koho hledáte?",
+ "admin.users.actions.deactivate_user": "Deaktivovat účet @{name}",
+ "admin.users.actions.delete_user": "Smazat účet @{name}",
+ "admin.users.actions.demote_to_moderator_message": "@{acct} je nyní moderátor",
+ "admin.users.actions.demote_to_user_message": "@{acct} je nyní běžný uživatel",
+ "admin.users.actions.promote_to_admin_message": "@{acct} je nyní admin",
+ "admin.users.actions.promote_to_moderator_message": "@{acct} je nyní moderátor",
+ "admin.users.badges_saved_message": "Vlastní role uloženy.",
"admin.users.remove_donor_message": "@{acct} was removed as a donor",
"admin.users.set_donor_message": "@{acct} was set as a donor",
- "admin.users.user_deactivated_message": "@{acct} was deactivated",
- "admin.users.user_deleted_message": "@{acct} was deleted",
+ "admin.users.user_deactivated_message": "Účet @{acct} byl deaktivován",
+ "admin.users.user_deleted_message": "Účet @{acct} byl smazán",
"admin.users.user_suggested_message": "@{acct} was suggested",
"admin.users.user_unsuggested_message": "@{acct} was unsuggested",
"admin.users.user_unverified_message": "@{acct} was unverified",
"admin.users.user_verified_message": "@{acct} was verified",
- "admin_nav.awaiting_approval": "Awaiting Approval",
- "admin_nav.dashboard": "Dashboard",
- "admin_nav.reports": "Reports",
+ "admin_nav.awaiting_approval": "Čeká na schválení",
+ "admin_nav.dashboard": "Ovládací panel",
+ "admin_nav.reports": "Nahlášeno",
+ "age_verification.fail": "You must be {ageMinimum, plural, one {# year} other {# years}} old or older.",
+ "age_verification.header": "Enter your birth date",
"alert.unexpected.body": "We're sorry for the interruption. If the problem persists, please reach out to our support team. You may also try to {clearCookies} (this will log you out).",
"alert.unexpected.browser": "Browser",
"alert.unexpected.clear_cookies": "clear cookies and browser data",
"alert.unexpected.links.help": "Help Center",
"alert.unexpected.links.status": "Status",
"alert.unexpected.links.support": "Support",
- "alert.unexpected.message": "Objevila se neočekávaná chyba.",
+ "alert.unexpected.message": "Došlo k neočekávané chybě.",
"alert.unexpected.return_home": "Return Home",
"alert.unexpected.title": "Jejda!",
- "aliases.account.add": "Create alias",
- "aliases.account_label": "Old account:",
+ "aliases.account.add": "Vytvořit alias",
+ "aliases.account_label": "Starý účet:",
"aliases.aliases_list_delete": "Unlink alias",
- "aliases.search": "Search your old account",
- "aliases.success.add": "Account alias created successfully",
- "aliases.success.remove": "Account alias removed successfully",
+ "aliases.search": "Vyhledejte svůj starý účet",
+ "aliases.success.add": "Alias úspěšně vytvořen",
+ "aliases.success.remove": "Alias úspěšně odebrán",
+ "announcements.title": "Announcements",
"app_create.name_label": "App name",
"app_create.name_placeholder": "e.g. 'Soapbox'",
"app_create.redirect_uri_label": "Redirect URIs",
@@ -149,13 +167,15 @@
"app_create.submit": "Create app",
"app_create.website_label": "Website",
"auth.invalid_credentials": "Wrong username or password",
- "auth.logged_out": "Logged out.",
+ "auth.logged_out": "Odhlásili jste se.",
+ "auth_layout.register": "Create an account",
"backups.actions.create": "Create backup",
"backups.empty_message": "No backups found. {action}",
"backups.empty_message.action": "Create one now?",
"backups.pending": "Pending",
- "beta.also_available": "Available in:",
+ "badge_input.placeholder": "Zadejte roli…",
"birthday_panel.title": "Birthdays",
+ "birthdays_modal.empty": "None of your friends have birthday today.",
"boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
"bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.",
"bundle_column_error.retry": "Zkuste to znovu",
@@ -166,7 +186,7 @@
"card.back.label": "Back",
"chat_box.actions.send": "Poslat",
"chat_box.input.placeholder": "Poslat zprávu…",
- "chat_panels.main_window.empty": "Žádné chaty nenalezeny. Pro začnutí chatu, navštivte nečí profil.",
+ "chat_panels.main_window.empty": "Žádné chaty nenalezeny. Chat můžete začít na něčím profilu.",
"chat_panels.main_window.title": "Chaty",
"chats.actions.delete": "Odstranit zprávu",
"chats.actions.more": "Více",
@@ -176,33 +196,35 @@
"chats.audio_toggle_off": "Audio upozornění vypnuté",
"chats.audio_toggle_on": "Audio upozornění zapnoté",
"chats.dividers.today": "Dnes",
- "chats.search_placeholder": "Start a chat with…",
- "column.admin.awaiting_approval": "Awaiting Approval",
- "column.admin.dashboard": "Dashboard",
+ "chats.search_placeholder": "Chatovat s…",
+ "column.admin.awaiting_approval": "Čeká na schválení",
+ "column.admin.dashboard": "Ovládací panel",
"column.admin.moderation_log": "Moderation Log",
- "column.admin.reports": "Reports",
+ "column.admin.reports": "Nahlášeno",
"column.admin.reports.menu.moderation_log": "Moderation Log",
- "column.admin.users": "Users",
- "column.aliases": "Account aliases",
- "column.aliases.create_error": "Error creating alias",
- "column.aliases.delete": "Delete",
- "column.aliases.delete_error": "Error deleting alias",
- "column.aliases.subheading_add_new": "Add New Alias",
- "column.aliases.subheading_aliases": "Current aliases",
+ "column.admin.users": "Uživatelé",
+ "column.aliases": "Aliasy účtů",
+ "column.aliases.create_error": "Chyba při vytváření aliasu",
+ "column.aliases.delete": "Smazat",
+ "column.aliases.delete_error": "Chyba při mazání aliasu",
+ "column.aliases.subheading_add_new": "Vytvořit nový alias",
+ "column.aliases.subheading_aliases": "Současné aliasy",
"column.app_create": "Create app",
"column.backups": "Backups",
"column.birthdays": "Birthdays",
"column.blocks": "Blokovaní uživatelé",
"column.bookmarks": "Záložky",
"column.chats": "Chaty",
- "column.community": "Místní zeď",
+ "column.community": "Místní časová osa",
"column.crypto_donate": "Donate Cryptocurrency",
"column.developers": "Developers",
+ "column.developers.service_worker": "Service Worker",
"column.direct": "Přímé zprávy",
"column.directory": "Browse profiles",
"column.domain_blocks": "Skryté domény",
- "column.edit_profile": "Editovat profil",
+ "column.edit_profile": "Upravit profil",
"column.export_data": "Export data",
+ "column.familiar_followers": "People you know following {name}",
"column.favourited_statuses": "Liked posts",
"column.favourites": "Likes",
"column.federation_restrictions": "Federation Restrictions",
@@ -213,27 +235,27 @@
"column.filters.delete": "Odstranit",
"column.filters.delete_error": "Chyba při odstraňování filtru",
"column.filters.drop_header": "Zahodit místo schovat",
- "column.filters.drop_hint": "Filtrované příspěvky zmizí navždy, ikdyž filtr později odstraníte",
+ "column.filters.drop_hint": "Filtrované příspěvky zmizí navždy, i když filtr později odstraníte",
"column.filters.expires": "Vypršet po",
"column.filters.expires_hint": "Vyprchávání momentálně není podporováno",
- "column.filters.home_timeline": "Domácí zeď",
+ "column.filters.home_timeline": "Domovská časová osa",
"column.filters.keyword": "Klíčové slovo nebo fráze",
"column.filters.notifications": "Oznámení",
- "column.filters.public_timeline": "Federovaná zeď",
+ "column.filters.public_timeline": "Federovaná časová osa",
"column.filters.subheading_add_new": "Přidat filter",
"column.filters.subheading_filters": "Současné filtry",
"column.filters.whole_word_header": "Celé slovo",
- "column.filters.whole_word_hint": "Pokud je klíčové slovo či fráze pouze alfanumerické, bude aplikováno pouze pokud je kompletně shodné",
+ "column.filters.whole_word_hint": "Pokud se klíčové slovo skládá pouze z písmen a číslic, bude aplikováno pouze pokud je kompletně shodné",
+ "column.filters.whole_word_hint": "Filtr bude aplikován, pokud se hledaný řetězec bude shodovat s celým jedním slovem v příspěvku. Pokud se bude shodovat pouze s částí slova, aplikován nebude. (Klíčové slovo tu musí obsahovat výhradně písmena a číslice.)",
"column.follow_requests": "Požadavky o sledování",
- "column.followers": "Followers",
- "column.following": "Following",
- "column.groups": "Skupiny",
+ "column.followers": "Sledující",
+ "column.following": "Sledovaní",
"column.home": "Domů",
"column.import_data": "Importovat data",
"column.info": "Server information",
"column.lists": "Seznamy",
"column.mentions": "Mentions",
- "column.mfa": "Multi-Faktorová Authentifikace",
+ "column.mfa": "Dvoufaktorové ověření",
"column.mfa_cancel": "Zrušit",
"column.mfa_confirm_button": "Potvrdit",
"column.mfa_disable_button": "Deaktivovat",
@@ -243,24 +265,23 @@
"column.notifications": "Oznámení",
"column.pins": "Pinned posts",
"column.preferences": "Preference",
- "column.public": "Federovaná zeď",
+ "column.public": "Federovaná časová osa",
"column.reactions": "Reactions",
"column.reblogs": "Reposts",
"column.remote": "Federated timeline",
"column.scheduled_statuses": "Scheduled Posts",
"column.search": "Search",
- "column.security": "Security",
"column.settings_store": "Settings store",
"column.soapbox_config": "Soapbox nastavení",
"column.test": "Test timeline",
"column_back_button.label": "Zpět",
"column_forbidden.body": "You do not have permission to access this page.",
"column_forbidden.title": "Forbidden",
- "column_header.show_settings": "Zobrazit nastavení",
- "common.cancel": "Cancel",
- "community.column_settings.media_only": "Pouze média",
- "community.column_settings.title": "Local timeline settings",
+ "common.cancel": "Zrušit",
+ "common.error": "Something isn't right. Try reloading the page.",
+ "compare_history_modal.header": "Edit history",
"compose.character_counter.title": "Used {chars} out of {maxChars} characters",
+ "compose.edit_success": "Your post was edited",
"compose.invalid_schedule": "You must schedule a post at least 5 minutes out.",
"compose.submit_success": "Your post was sent",
"compose_form.direct_message_warning": "Tento příspěvek bude odeslán pouze zmíněným uživatelům.",
@@ -273,45 +294,52 @@
"compose_form.placeholder": "Co se vám honí hlavou?",
"compose_form.poll.add_option": "Přidat volbu",
"compose_form.poll.duration": "Délka ankety",
+ "compose_form.poll.multiselect": "Vícenásobný výběr",
+ "compose_form.poll.multiselect_detail": "Povolit uživatelům výběr více možností",
"compose_form.poll.option_placeholder": "Volba {number}",
- "compose_form.poll.remove_option": "Odstranit tuto volbu",
- "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
- "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
+ "compose_form.poll.remove": "Odstranit anketu",
+ "compose_form.poll.remove_option": "Smazat",
+ "compose_form.poll.switch_to_multiple": "Povolit výběr více možností",
+ "compose_form.poll.switch_to_single": "Povolit pouze jednu možnost",
+ "compose_form.poll_placeholder": "Zadejte téma ankety...",
"compose_form.publish": "Publikovat",
"compose_form.publish_loud": "{publish}!",
+ "compose_form.save_changes": "Save changes",
"compose_form.schedule": "Schedule",
"compose_form.scheduled_statuses.click_here": "Click here",
"compose_form.scheduled_statuses.message": "You have scheduled posts. {click_here} to see them.",
- "compose_form.sensitive.hide": "Označit média jako citlivá",
- "compose_form.sensitive.marked": "Média jsou označena jako citlivá",
- "compose_form.sensitive.unmarked": "Média nejsou označena jako citlivá",
"compose_form.spoiler.marked": "Text je skrytý za varováním",
"compose_form.spoiler.unmarked": "Text není skrytý",
"compose_form.spoiler_placeholder": "Sem napište vaše varování",
+ "compose_form.spoiler_remove": "Odstranit varování",
+ "compose_form.spoiler_title": "Citlivý obsah",
"confirmation_modal.cancel": "Zrušit",
- "confirmations.admin.deactivate_user.confirm": "Deactivate @{name}",
- "confirmations.admin.deactivate_user.heading": "Deactivate @{acct}",
- "confirmations.admin.deactivate_user.message": "You are about to deactivate @{acct}. Deactivating a user is a reversible action.",
- "confirmations.admin.delete_local_user.checkbox": "I understand that I am about to delete a local user.",
- "confirmations.admin.delete_status.confirm": "Delete post",
- "confirmations.admin.delete_status.heading": "Delete post",
- "confirmations.admin.delete_status.message": "You are about to delete a post by @{acct}. This action cannot be undone.",
- "confirmations.admin.delete_user.confirm": "Delete @{name}",
- "confirmations.admin.delete_user.heading": "Delete @{acct}",
- "confirmations.admin.delete_user.message": "You are about to delete @{acct}. THIS IS A DESTRUCTIVE ACTION THAT CANNOT BE UNDONE.",
+ "confirmations.admin.deactivate_user.confirm": "Deaktivovat @{name}",
+ "confirmations.admin.deactivate_user.heading": "Deaktivovat @{acct}",
+ "confirmations.admin.deactivate_user.message": "Chystáte se deaktivovat účet @{acct}. Deaktivaci lze později zrušit.",
+ "confirmations.admin.delete_local_user.checkbox": "Chápu, že vymažu účet lokálního uživatele.",
+ "confirmations.admin.delete_status.confirm": "Smazat příspěvek",
+ "confirmations.admin.delete_status.heading": "Smazat příspěvek",
+ "confirmations.admin.delete_status.message": "Chystáte se smazat příspěvek uživatele @{acct}. Tato akce je nevratná.",
+ "confirmations.admin.delete_user.confirm": "Smazat @{name}",
+ "confirmations.admin.delete_user.heading": "Smazat @{acct}",
+ "confirmations.admin.delete_user.message": "Chastáte se smazat účet @{acct}. TATO AKCE JE DESTRUKTIVNÍ A NEVRATNÁ.",
"confirmations.admin.mark_status_not_sensitive.confirm": "Mark post not sensitive",
"confirmations.admin.mark_status_not_sensitive.heading": "Mark post not sensitive.",
"confirmations.admin.mark_status_not_sensitive.message": "You are about to mark a post by @{acct} not sensitive.",
- "confirmations.admin.mark_status_sensitive.confirm": "Mark post sensitive",
- "confirmations.admin.mark_status_sensitive.heading": "Mark post sensitive",
- "confirmations.admin.mark_status_sensitive.message": "You are about to mark a post by @{acct} sensitive.",
+ "confirmations.admin.mark_status_sensitive.confirm": "Označit za citlivý",
+ "confirmations.admin.mark_status_sensitive.heading": "Označit za citlivý",
+ "confirmations.admin.mark_status_sensitive.message": "Chystáte se označit obsah příspěvku od účtu @{acct} za citlivý.",
"confirmations.admin.reject_user.confirm": "Reject @{name}",
"confirmations.admin.reject_user.heading": "Reject @{acct}",
"confirmations.admin.reject_user.message": "You are about to reject @{acct} registration request. This action cannot be undone.",
- "confirmations.block.block_and_report": "Blokovat a nahlásit",
- "confirmations.block.confirm": "Blokovat",
- "confirmations.block.heading": "Block @{name}",
- "confirmations.block.message": "Jste si jistý/á, že chcete zablokovat uživatele {name}?",
+ "confirmations.block.block_and_report": "Zablokovat a nahlásit",
+ "confirmations.block.confirm": "Zablokovat",
+ "confirmations.block.heading": "Zablokovat uživatele @{name}",
+ "confirmations.block.message": "Jste si jistí, že chcete zablokovat uživatele {name}?",
+ "confirmations.cancel_editing.confirm": "Cancel editing",
+ "confirmations.cancel_editing.heading": "Cancel post editing",
+ "confirmations.cancel_editing.message": "Are you sure you want to cancel editing this post? All changes will be lost.",
"confirmations.delete.confirm": "Smazat",
"confirmations.delete.heading": "Delete post",
"confirmations.delete.message": "Jste si jistý/á, že chcete smazat tento příspěvek?",
@@ -322,33 +350,41 @@
"confirmations.domain_block.heading": "Block {domain}",
"confirmations.domain_block.message": "Jste si opravdu, opravdu jistý/á, že chcete blokovat celou doménu {domain}? Ve většině případů stačí zablokovat nebo skrýt pár konkrétních uživatelů, což se doporučuje. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
"confirmations.mute.confirm": "Skrýt",
- "confirmations.mute.heading": "Mute @{name}",
+ "confirmations.mute.heading": "Skrýt uživatele @{name}",
"confirmations.mute.message": "Jste si jistý/á, že chcete skrýt uživatele {name}?",
"confirmations.redraft.confirm": "Smazat a přepsat",
"confirmations.redraft.heading": "Delete & redraft",
"confirmations.redraft.message": "Jste si jistý/á, že chcete smazat a přepsat tento příspěvek? Oblíbení a boosty budou ztraceny a odpovědi na původní příspěvek budou opuštěny.",
- "confirmations.register.needs_approval": "Your account will be manually approved by an admin. Please be patient while we review your details.",
- "confirmations.register.needs_approval.header": "Approval needed",
- "confirmations.register.needs_confirmation": "Please check your inbox at {email} for confirmation instructions. You will need to verify your email address to continue.",
- "confirmations.register.needs_confirmation.header": "Confirmation needed",
+ "confirmations.register.needs_approval": "Vaši přihlášku musí schválit administrátor. Prosíme o trpělivost.",
+ "confirmations.register.needs_approval.header": "Čeká se na schválení",
+ "confirmations.register.needs_confirmation": "Ověrovací instrukce byly odeslány na vaši e-mailovou adresu ({email}). Nyní musíte svou adresu ověřit.",
+ "confirmations.register.needs_confirmation.header": "Ověřte svou adresu",
+ "confirmations.remove_from_followers.confirm": "Remove",
+ "confirmations.remove_from_followers.message": "Are you sure you want to remove {name} from your followers?",
"confirmations.reply.confirm": "Odpovědět",
"confirmations.reply.message": "Odpovězením nyní přepíšete zprávu, kterou aktuálně píšete. Jste si jistý/á, že chcete pokračovat?",
- "confirmations.scheduled_status_delete.confirm": "Cancel",
- "confirmations.scheduled_status_delete.heading": "Cancel scheduled post",
- "confirmations.scheduled_status_delete.message": "Are you sure you want to cancel this scheduled post?",
+ "confirmations.revoke_session.confirm": "Revoke",
+ "confirmations.revoke_session.heading": "Revoke current session",
+ "confirmations.revoke_session.message": "You are about to revoke your current session. You will be signed out.",
+ "confirmations.scheduled_status_delete.confirm": "Zrušit",
+ "confirmations.scheduled_status_delete.heading": "Zrušit naplánovaný příspěvek",
+ "confirmations.scheduled_status_delete.message": "Určitě chcete tento naplánovaný příspěvěk zrušit?",
"confirmations.unfollow.confirm": "Přestat sledovat",
- "confirmations.unfollow.heading": "Unfollow {name}",
+ "confirmations.unfollow.heading": "Přestat selovat uživatele {name}",
"confirmations.unfollow.message": "jste si jistý/á, že chcete přestat sledovat uživatele {name}?",
"crypto_donate.explanation_box.message": "{siteTitle} accepts cryptocurrency donations. You may send a donation to any of the addresses below. Thank you for your support!",
"crypto_donate.explanation_box.title": "Sending cryptocurrency donations",
"crypto_donate_panel.actions.view": "Click to see {count} {count, plural, one {wallet} other {wallets}}",
"crypto_donate_panel.heading": "Donate Cryptocurrency",
"crypto_donate_panel.intro.message": "{siteTitle} accepts cryptocurrency donations to fund our service. Thank you for your support!",
- "datepicker.hint": "Scheduled to post at…",
- "datepicker.next_month": "Next month",
- "datepicker.next_year": "Next year",
- "datepicker.previous_month": "Previous month",
- "datepicker.previous_year": "Previous year",
+ "datepicker.day": "Day",
+ "datepicker.hint": "Publikovat v tento čas:",
+ "datepicker.month": "Month",
+ "datepicker.next_month": "Další měsíc",
+ "datepicker.next_year": "Další rok",
+ "datepicker.previous_month": "Předchozí měsíc",
+ "datepicker.previous_year": "Předchozí rok",
+ "datepicker.year": "Year",
"developers.challenge.answer_label": "Answer",
"developers.challenge.answer_placeholder": "Your answer",
"developers.challenge.fail": "Wrong answer",
@@ -360,6 +396,7 @@
"developers.navigation.intentional_error_label": "Trigger an error",
"developers.navigation.leave_developers_label": "Leave developers",
"developers.navigation.network_error_label": "Network error",
+ "developers.navigation.service_worker_label": "Service Worker",
"developers.navigation.settings_store_label": "Settings store",
"developers.navigation.test_timeline_label": "Test timeline",
"developers.settings_store.hint": "It is possible to directly edit your user settings here. BE CAREFUL! Editing this section can break your account, and you will only be able to recover through the API.",
@@ -368,56 +405,70 @@
"directory.local": "From {domain} only",
"directory.new_arrivals": "New arrivals",
"directory.recently_active": "Recently active",
+ "edit_email.header": "Change Email",
+ "edit_email.placeholder": "me@example.com",
"edit_federation.followers_only": "Hide posts except to followers",
"edit_federation.force_nsfw": "Force attachments to be marked sensitive",
"edit_federation.media_removal": "Strip media",
"edit_federation.reject": "Reject all activities",
- "edit_federation.save": "Save",
+ "edit_federation.save": "Uložit",
"edit_federation.success": "{host} federation was updated",
"edit_federation.unlisted": "Force posts unlisted",
"edit_password.header": "Change Password",
- "edit_profile.error": "Profile update failed",
+ "edit_profile.error": "Chyba při změně profilu",
"edit_profile.fields.accepts_email_list_label": "Subscribe to newsletter",
"edit_profile.fields.avatar_label": "Avatar",
- "edit_profile.fields.bio_label": "Bio",
- "edit_profile.fields.bio_placeholder": "Tell us about yourself.",
+ "edit_profile.fields.bio_label": "O vás",
+ "edit_profile.fields.bio_placeholder": "Řekněte nám o sobě něco.",
"edit_profile.fields.birthday_label": "Birthday",
"edit_profile.fields.birthday_placeholder": "Your birthday",
- "edit_profile.fields.bot_label": "Toto je účet robot",
+ "edit_profile.fields.bot_label": "Tohle je účet robota",
"edit_profile.fields.discoverable_label": "Allow account discovery",
"edit_profile.fields.display_name_label": "Zobrazované jméno",
- "edit_profile.fields.display_name_placeholder": "Name",
- "edit_profile.fields.header_label": "Hlavička",
- "edit_profile.fields.hide_network_label": "Hide network",
- "edit_profile.fields.location_label": "Location",
- "edit_profile.fields.location_placeholder": "Location",
+ "edit_profile.fields.display_name_placeholder": "Jméno",
+ "edit_profile.fields.header_label": "Záhlaví",
+ "edit_profile.fields.hide_network_label": "Skrýt mou síť",
+ "edit_profile.fields.location_label": "Poloha",
+ "edit_profile.fields.location_placeholder": "Poloha",
"edit_profile.fields.locked_label": "Zamknout účet",
"edit_profile.fields.meta_fields.content_placeholder": "Obsah",
"edit_profile.fields.meta_fields.label_placeholder": "Štítek",
- "edit_profile.fields.stranger_notifications_label": "Block notifications from strangers",
+ "edit_profile.fields.meta_fields_label": "Metadata profilu",
+ "edit_profile.fields.stranger_notifications_label": "Blokovat oznámení od neznámých uživatelů",
"edit_profile.fields.website_label": "Website",
"edit_profile.fields.website_placeholder": "Display a Link",
- "edit_profile.header": "Edit Profile",
+ "edit_profile.header": "Upravit profil",
"edit_profile.hints.accepts_email_list": "Opt-in to news and marketing updates.",
- "edit_profile.hints.avatar": "PNG, GIF nebo JPG. Maximálně 2 MB. Bude zmenšen na 400x400px",
- "edit_profile.hints.bot": "Tento účet provádí automatizované úkony a není aktivně monitorován.",
+ "edit_profile.hints.avatar": "PNG, GIF nebo JPG. Maximálně 2 MB. Bude zmenšen na {size}",
+ "edit_profile.hints.bot": "Tento účet funguje automaticky a není jisté, jestli ho někdo sleduje.",
"edit_profile.hints.discoverable": "Display account in profile directory and allow indexing by external services",
- "edit_profile.hints.header": "PNG, GIF nebo JPG. Maximálně 2 MB. Bude zmenšen na 1500x500px",
- "edit_profile.hints.hide_network": "Who you follow and who follows you will not be shown on your profile",
- "edit_profile.hints.locked": "Požaduje manuální schvalování sledujících.",
- "edit_profile.hints.stranger_notifications": "Only show notifications from people you follow",
+ "edit_profile.hints.header": "PNG, GIF nebo JPG. Maximálně 2 MB. Bude zmenšen na {size}",
+ "edit_profile.hints.hide_network": "Koho sledujete a kdo sleduje vás bude na vašem profilu skryto",
+ "edit_profile.hints.locked": "Žádosti o sledování budete muset ručně schvalovat.",
+ "edit_profile.hints.meta_fields": "Ke svému profilu můžete přidat až {count, plural, one {# položku} few {# položky} other {# položek}}.",
+ "edit_profile.hints.stranger_notifications": "Zobrazovat pouze oznámení od lidí, které sledujete",
"edit_profile.save": "Uložit",
"edit_profile.success": "Profile saved!",
+ "email_confirmation.success": "Your email has been confirmed!",
"email_passthru.confirmed.body": "Close this tab and continue the registration process on the {bold} from which you sent this email confirmation.",
"email_passthru.confirmed.heading": "Email Confirmed!",
+ "email_passthru.fail.expired": "Your email token has expired",
+ "email_passthru.fail.generic": "Unable to confirm your email",
+ "email_passthru.fail.invalid_token": "Your token is invalid",
+ "email_passthru.fail.not_found": "Your email token is invalid.",
"email_passthru.generic_fail.body": "Please request a new email confirmation.",
"email_passthru.generic_fail.heading": "Something Went Wrong",
+ "email_passthru.success": "Your email has been verified!",
"email_passthru.token_expired.body": "Your email token has expired. Please request a new email confirmation from the {bold} from which you sent this email confirmation.",
"email_passthru.token_expired.heading": "Token Expired",
"email_passthru.token_not_found.body": "Your email token was not found. Please request a new email confirmation from the {bold} from which you sent this email confirmation.",
"email_passthru.token_not_found.heading": "Invalid Token",
+ "email_verification.fail": "Failed to request email verification.",
+ "email_verification.header": "Enter your email address",
+ "email_verification.success": "Verification email sent successfully.",
+ "email_verification.taken": "is taken",
+ "email_verifilcation.exists": "This email has already been taken.",
"embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.",
- "embed.preview": "Takhle to bude vypadat:",
"emoji_button.activity": "Aktivita",
"emoji_button.custom": "Vlastní",
"emoji_button.flags": "Vlajky",
@@ -434,34 +485,37 @@
"emoji_button.travel": "Cestování a místa",
"empty_column.account_blocked": "You are blocked by @{accountUsername}.",
"empty_column.account_favourited_statuses": "This user doesn't have any liked posts yet.",
- "empty_column.account_timeline": "Tady nejsou žádné příspěvky!",
+ "empty_column.account_timeline": "Nejsou tu žádné příspěvky!",
"empty_column.account_unavailable": "Profil nedostupný",
- "empty_column.aliases": "You haven't created any account alias yet.",
+ "empty_column.aliases": "Zatím jste žádný alias nevytvořili.",
"empty_column.aliases.suggestions": "There are no account suggestions available for the provided term.",
- "empty_column.blocks": "Ještě jste nezablokoval/a žádného uživatele.",
+ "empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.",
"empty_column.bookmarks": "Nemáte ještě žádné záložky. Když nějaké přidáte, zobrazí se zde.",
- "empty_column.community": "Místní zeď je prázdná. Napište něco veřejně a rozhýbejte to tu!",
+ "empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!",
"empty_column.direct": "Ještě nemáte žádné přímé zprávy. Pokud nějakou pošlete nebo dostanete, zobrazí se zde.",
"empty_column.domain_blocks": "Ještě nejsou žádné skryté domény.",
"empty_column.favourited_statuses": "Ještě nemáte žádné oblíbené příspěvky. Pokud si nějaký oblíbíte, zobrazí se zde.",
"empty_column.favourites": "Tento příspěvek si ještě nikdo neoblíbil. Pokud to někdo udělá, zobrazí se zde.",
"empty_column.filters": "Ještě jste nepřidal žádná filtrovaná slova.",
- "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+ "empty_column.follow_recommendations": "Zřejmě se nám žádná doporučení nepodařilo vygenerovat. Zkuste použít vyhledávání a najít někoho, koho znáte, nebo se podívejte na populární hashtagy.",
"empty_column.follow_requests": "Ještě nemáte žádné požadavky o sledování. Pokud nějaký obdržíte, zobrazí se zde.",
- "empty_column.group": "V této skupině ještě není žádný příspěvěk. Když členové této skupiny publikují příspěvky, objevý se zde.",
"empty_column.hashtag": "Pod tímto hashtagem ještě nic není.",
- "empty_column.home": "Vaše domovská zeď je prázdná! Začněte navštívením {public} nebo použijte hledání a seznamte se s dalšími uživateli.",
- "empty_column.home.local_tab": "Zeď {site_title}",
+ "empty_column.home": "Vaše domovská časová osa je prázdná! Navštivte {public} nebo použijte hledání a seznamte se s dalšími uživateli.",
+ "empty_column.home.local_tab": "Časová osa {site_title}",
+ "empty_column.home.subtitle": "{siteTitle} bude zajímavější až začnete sledovat jiné uživatele.",
+ "empty_column.home.title": "Zatím nikoho nesledujete",
"empty_column.list": "V tomto seznamu ještě nic není. Pokud budou členové tohoto seznamu psát nové příspěvky, objeví se zde.",
"empty_column.lists": "Ještě nemáte žádný seznam. Pokud nějaký vytvoříte, zobrazí se zde.",
- "empty_column.mutes": "Ještě jste neskryl/a žádné uživatele.",
+ "empty_column.mutes": "Ještě jste neskryli žádné uživatele.",
"empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.",
+ "empty_column.notifications_filtered": "Žádná oznámení tohoto typu zatím nemáte.",
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte sledovat uživatele z jiných serverů, aby tu něco přibylo",
"empty_column.remote": "There is nothing here! Manually follow users from {instance} to fill it up.",
"empty_column.scheduled_statuses": "You don't have any scheduled statuses yet. When you add one, it will show up here.",
"empty_column.search.accounts": "There are no people results for \"{term}\"",
"empty_column.search.hashtags": "There are no hashtags results for \"{term}\"",
"empty_column.search.statuses": "There are no posts results for \"{term}\"",
+ "empty_column.test": "The test timeline is empty.",
"export_data.actions.export": "Export",
"export_data.actions.export_blocks": "Export blocks",
"export_data.actions.export_follows": "Export follows",
@@ -484,12 +538,14 @@
"federation_restrictions.explanation_box.message": "Normally servers on the Fediverse can communicate freely. {siteTitle} has imposed restrictions on the following servers.",
"federation_restrictions.explanation_box.title": "Instance-specific policies",
"federation_restrictions.not_disclosed_message": "{siteTitle} does not disclose federation restrictions through the API.",
- "fediverse_tab.explanation_box.dismiss": "Don't show again",
- "fediverse_tab.explanation_box.explanation": "{site_title} je členem Fediverse, sociální sítě složené z tisíce nezávislých serverů. Příspěvky které zde vidíte pochází ze serverů třetí strany. Máte možnost se servery komunikovat či je blokovat. Dávejte si pozor na druhou část jména za druhým @, ta indikuje z jakého serveru uživatel pochází. Aby jste viděly pouze příspěvky z {site_title}, navštivte {local}.",
+ "fediverse_tab.explanation_box.dismiss": "Tuto informaci už neukazovat",
+ "fediverse_tab.explanation_box.explanation": "{site_title} je částí Fediversa, sociální sítě složené z tisíce nezávislých serverů. Příspěvky, které zde vidíte, pocházejí ze serverů třetích stran. Můžete na ně reagovat, či případně celý server zablokovat. Všímejte si části uživatelských jmén za druhým zavináčem, ta indikuje, ze kterého serveru který příspěvek pochází. Pokud chcete vidět pouze příspěvky ze serveru {site_title}, navštivte stránku {local}.",
"fediverse_tab.explanation_box.title": "Co je to Fediverse?",
+ "feed_suggestions.heading": "Suggested Profiles",
+ "feed_suggestions.view_all": "Zobrazit všechny",
"filters.added": "Filter added.",
"filters.context_header": "Filtrovat obsah",
- "filters.context_hint": "Jeden či více kontextů kde bude filtr aktivován",
+ "filters.context_hint": "Kde všude by měl být filtr aktivován",
"filters.filters_list_context_label": "Kontexty filtru:",
"filters.filters_list_delete": "Odstranit",
"filters.filters_list_details_label": "Nastavení filtru:",
@@ -498,56 +554,25 @@
"filters.filters_list_phrase_label": "Klíčové slovo či fráze:",
"filters.filters_list_whole-word": "Celé slovo",
"filters.removed": "Filter deleted.",
- "follow_recommendation.subhead": "Let's get started!",
- "follow_recommendations.done": "Done",
- "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
- "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
+ "followRecommendations.heading": "Suggested Profiles",
"follow_request.authorize": "Autorizovat",
"follow_request.reject": "Odmítnout",
- "forms.copy": "Copy",
- "forms.hide_password": "Hide password",
- "forms.show_password": "Show password",
+ "gdpr.accept": "Accept",
+ "gdpr.learn_more": "Learn more",
+ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.",
+ "gdpr.title": "{siteTitle} uses cookies",
"getting_started.open_source_notice": "{code_name} je otevřený software. Na GitLabu k němu můžete přispět nebo nahlásit chyby: {code_link} (v{code_version}).",
- "group.detail.archived_group": "Archived group",
- "group.members.empty": "Tato skupina nemá členy.",
- "group.removed_accounts.empty": "Tato skupina nemá žádné odstraněné členy.",
- "groups.card.join": "Připojit se",
- "groups.card.members": "Členové",
- "groups.card.roles.admin": "Jsi admin",
- "groups.card.roles.member": "Jsi admin",
- "groups.card.view": "Zobrazit",
- "groups.create": "Vytvořit skupinu",
- "groups.detail.role_admin": "You're an admin",
- "groups.edit": "Edit",
- "groups.form.coverImage": "Nahrát nový banner (nepovinný)",
- "groups.form.coverImageChange": "Banner vybrán",
- "groups.form.create": "Vytvořit skupinu",
- "groups.form.description": "Popis",
- "groups.form.title": "Jméno",
- "groups.form.update": "Upravit skupinu",
- "groups.join": "Join group",
- "groups.leave": "Leave group",
- "groups.removed_accounts": "Odstranit účty",
- "groups.sidebar-panel.item.no_recent_activity": "No recent activity",
- "groups.sidebar-panel.item.view": "new posts",
- "groups.sidebar-panel.show_all": "Show all",
- "groups.sidebar-panel.title": "Groups You're In",
- "groups.tab_admin": "Spravovat",
- "groups.tab_featured": "Featured",
- "groups.tab_member": "Člen",
"hashtag.column_header.tag_mode.all": "a {additional}",
"hashtag.column_header.tag_mode.any": "nebo {additional}",
"hashtag.column_header.tag_mode.none": "bez {additional}",
"header.home.label": "Domů",
- "header.login.forgot_password": "Forgot password?",
+ "header.login.forgot_password": "Zapomněli jste heslo?",
"header.login.label": "Přihlásit se",
- "header.login.password.label": "Password",
- "header.login.username.placeholder": "Email or username",
+ "header.login.password.label": "Heslo",
+ "header.login.username.placeholder": "E-mail nebo uživatelské jméno",
"header.register.label": "Register",
- "home.column_settings.show_direct": "Zobrazit přímé zprávy",
"home.column_settings.show_reblogs": "Zobrazit boosty",
"home.column_settings.show_replies": "Zobrazit odpovědi",
- "home.column_settings.title": "Home settings",
"icon_button.icons": "Icons",
"icon_button.label": "Select icon",
"icon_button.not_found": "No icons!! (╯°□°)╯︵ ┻━┻",
@@ -564,24 +589,12 @@
"import_data.success.blocks": "Blocks imported successfully",
"import_data.success.followers": "Followers imported successfully",
"import_data.success.mutes": "Mutes imported successfully",
+ "input.copy": "Copy",
"input.password.hide_password": "Hide password",
"input.password.show_password": "Show password",
"intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dne} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}",
"intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minuty} other {# minut}}",
- "introduction.federation.action": "Next",
- "introduction.federation.home.headline": "Home",
- "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
- "introduction.interactions.action": "Finish tutorial!",
- "introduction.interactions.favourite.headline": "Favorite",
- "introduction.interactions.favourite.text": "You can save a post for later, and let the author know that you liked it, by favoriting it.",
- "introduction.interactions.reblog.headline": "Repost",
- "introduction.interactions.reblog.text": "You can share other people's posts with your followers by reposting them.",
- "introduction.interactions.reply.headline": "Reply",
- "introduction.interactions.reply.text": "You can reply to other people's and your own posts, which will chain them together in a conversation.",
- "introduction.welcome.action": "Let's go!",
- "introduction.welcome.headline": "First steps",
- "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
"keyboard_shortcuts.back": "k návratu zpět",
"keyboard_shortcuts.blocked": "k otevření seznamu blokovaných uživatelů",
"keyboard_shortcuts.boost": "k boostnutí",
@@ -632,62 +645,78 @@
"loading_indicator.label": "Načítám…",
"login.fields.instance_label": "Instance",
"login.fields.instance_placeholder": "example.com",
- "login.fields.otp_code_hint": "Zadejte kód pro dvoufaktorové ověřování vygenerovaný Vaší mobilní aplikací nebo Váš obnovovací kód",
+ "login.fields.otp_code_hint": "Zadejte kód pro dvoufaktorové ověřování vygenerovaný vaší mobilní aplikací nebo váš obnovovací kód",
"login.fields.otp_code_label": "Kód pro dvoufaktorové ověřování:",
"login.fields.password_placeholder": "Heslo",
- "login.fields.username_label": "Email or username",
+ "login.fields.username_label": "E-mail nebo uživatelské jméno",
"login.log_in": "Přihlásit se",
"login.otp_log_in": "OTP přihlášení",
+ "login.otp_log_in.fail": "Invalid code, please try again.",
"login.reset_password_hint": "Problémy s přihlášením?",
"login.sign_in": "Sign in",
- "media_gallery.toggle_visible": "Přepínat viditelnost",
+ "login_external.errors.instance_fail": "The instance returned an error.",
+ "login_external.errors.network_fail": "Connection failed. Is a browser extension blocking it?",
+ "login_form.header": "Sign In",
"media_panel.empty_message": "No media found.",
"media_panel.title": "Média",
"mfa.confirm.success_message": "MFA confirmed",
"mfa.disable.success_message": "MFA disabled",
+ "mfa.disabled": "Vypnuto",
+ "mfa.enabled": "Zapnuto",
"mfa.mfa_disable_enter_password": "Zadejte svoje součastné heslo pro zrušení dvoufaktorového ověřování:",
- "mfa.mfa_setup.code_hint": "Enter the code from your two-factor app.",
- "mfa.mfa_setup.code_placeholder": "Code",
- "mfa.mfa_setup.password_hint": "Enter your current password to confirm your identity.",
- "mfa.mfa_setup.password_placeholder": "Password",
- "mfa.mfa_setup_scan_description": "Požijte aplikaci pro dvoufaktorové ověřování na oskenování tohoto QR kódu nebo opište do ní tento klíč:",
+ "mfa.mfa_setup.code_hint": "Zadejte kód ze své ověřovací aplikace.",
+ "mfa.mfa_setup.code_placeholder": "Kód",
+ "mfa.mfa_setup.password_hint": "Potvrďte svou identity zadáním svého současného hesla.",
+ "mfa.mfa_setup.password_placeholder": "Heslo",
+ "mfa.mfa_setup_scan_description": "Naskenujte tento QR kód svou ověřovací aplikací nebo do ní opište tento klíč:",
"mfa.mfa_setup_scan_title": "Skenovat",
"mfa.mfa_setup_verify_title": "Ověřit",
- "mfa.otp_enabled_description": "Povolil/a jste dvoufaktorové ověřování skrze OTP.",
+ "mfa.otp_enabled_description": "Povolili jste dvoufaktorové ověřování skrze OTP.",
"mfa.otp_enabled_title": "OTP povoleno",
"mfa.setup_recoverycodes": "Obnovovací kódy",
- "mfa.setup_warning": "Zapiště si tyto kódy nebo si je uložte na bezpečné místo - už je znovu neuvidíte. Pokud ztratíte přístup ke svojí 2FA aplikaci a obnovovacím kódům, ztratíte navždy přístup ke svému účtu.",
+ "mfa.setup_warning": "Tyto kódy si zapiště nebo si je uložte na bezpečné místo - už je znovu neuvidíte. Pokud ztratíte přístup ke své ověřovací aplikaci i k obnovovacím kódům, ztratíte navždy přístup ke svému účtu.",
"migration.fields.acct.label": "Handle of the new account",
"migration.fields.acct.placeholder": "username@domain",
"migration.fields.confirm_password.label": "Current password",
"migration.hint": "This will move your followers to the new account. No other data will be moved. To perform migration, you need to {link} on your new account first.",
+ "migration.hint.cooldown_period": "If you migrate your account, you will not be able to migrate your account for {cooldownPeriod, plural, one {one day} other {the next # days}}.",
"migration.hint.link": "create an account alias",
"migration.move_account.fail": "Account migration failed.",
+ "migration.move_account.fail.cooldown_period": "You have moved your account too recently. Please try again later.",
"migration.move_account.success": "Account successfully moved.",
"migration.submit": "Move followers",
- "missing_description_modal.cancel": "Cancel",
- "missing_description_modal.continue": "Post",
+ "missing_description_modal.cancel": "Zrušit",
+ "missing_description_modal.continue": "Publikovat",
"missing_description_modal.description": "Continue anyway?",
"missing_description_modal.text": "You have not entered a description for all attachments. Continue anyway?",
"missing_indicator.label": "Nenalezeno",
"missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
- "mobile.also_available": "Available in:",
- "morefollows.followers_label": "…and {count} more {count, plural, one {follower} other {followers}} on remote sites.",
- "morefollows.following_label": "…and {count} more {count, plural, one {follow} other {follows}} on remote sites.",
+ "moderation_overlay.contact": "Contact",
+ "moderation_overlay.hide": "Schovat obsah",
+ "moderation_overlay.show": "Ukázat obsah",
+ "moderation_overlay.subtitle": "This Post has been sent to Moderation for review and is only visible to you. If you believe this is an error please contact Support.",
+ "moderation_overlay.title": "Content Under Review",
+ "mute_modal.auto_expire": "Skrýt pouze na určitou dobu",
+ "mute_modal.duration": "Trvání",
"mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?",
+ "navbar.login.action": "Log in",
+ "navbar.login.forgot_password": "Forgot password?",
+ "navbar.login.password.label": "Password",
+ "navbar.login.username.placeholder": "E-mail nebo uživatelské jméno",
"navigation.chats": "Chats",
- "navigation.compose": "Compose",
- "navigation.dashboard": "Dashboard",
+ "navigation.compose": "Nový příspěvek",
+ "navigation.dashboard": "Ovládací panel",
"navigation.developers": "Developers",
"navigation.direct_messages": "Messages",
"navigation.home": "Home",
- "navigation.invites": "Invites",
"navigation.notifications": "Notifications",
"navigation.search": "Search",
+ "navigation_bar.account_aliases": "Aliasy účtů",
"navigation_bar.account_migration": "Move account",
"navigation_bar.blocks": "Blokovaní uživatelé",
"navigation_bar.compose": "Vytvořit nový příspěvek",
"navigation_bar.compose_direct": "Direct message",
+ "navigation_bar.compose_edit": "Edit post",
"navigation_bar.compose_quote": "Quote post",
"navigation_bar.compose_reply": "Reply to post",
"navigation_bar.domain_blocks": "Skryté domény",
@@ -700,139 +729,161 @@
"navigation_bar.logout": "Odhlásit",
"navigation_bar.mutes": "Skrytí uživatelé",
"navigation_bar.preferences": "Předvolby",
- "navigation_bar.profile_directory": "Profile directory",
- "navigation_bar.security": "Zabezpečení",
- "navigation_bar.soapbox_config": "Soapbox nastavení",
- "notification.birthday": "{name} has a birthday today",
- "notification.birthday.more": "{count} more {count, plural, one {friend} other {friends}}",
- "notification.birthday_plural": "{name} and {more} have birthday today",
- "notification.pleroma:chat_mention": "{name} Vám poslal/a zprávu",
+ "navigation_bar.profile_directory": "Adresář profilů",
+ "navigation_bar.soapbox_config": "Nastavení Soapboxu",
"notification.favourite": "{name} si oblíbil/a váš příspěvek",
"notification.follow": "{name} vás začal/a sledovat",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} vás zmínil/a",
+ "notification.mentioned": "{name} mentioned you",
"notification.move": "{name} moved to {targetName}",
- "notification.pleroma:emoji_reaction": "{name} reagoval/a na Váš příspěvek",
+ "notification.name": "{link}{others}",
+ "notification.others": " + {count} {count, plural, one {other} other {others}}",
+ "notification.pleroma:chat_mention": "{name} vám poslal/a zprávu",
+ "notification.pleroma:emoji_reaction": "{name} reagoval/a na váš příspěvek",
"notification.poll": "Anketa, ve které jste hlasoval/a, skončila",
"notification.reblog": "{name} boostnul/a váš příspěvek",
"notification.status": "{name} just posted",
- "notifications.clear": "Vymazat oznámení",
- "notifications.clear_confirmation": "Jste si jistý/á, že chcete trvale vymazat všechna vaše oznámení?",
- "notifications.clear_heading": "Clear notifications",
- "notifications.column_settings.alert": "Desktopová oznámení",
- "notifications.column_settings.birthdays.category": "Birthdays",
- "notifications.column_settings.birthdays.show": "Show birthday reminders",
- "notifications.column_settings.emoji_react": "Emoji reacts:",
- "notifications.column_settings.favourite": "Oblíbení:",
- "notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie",
- "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování",
- "notifications.column_settings.filter_bar.show": "Zobrazit",
- "notifications.column_settings.follow": "Noví sledující:",
- "notifications.column_settings.follow_request": "New follow requests:",
- "notifications.column_settings.mention": "Zmínky:",
- "notifications.column_settings.move": "Moves:",
- "notifications.column_settings.poll": "Výsledky anket:",
- "notifications.column_settings.push": "Push oznámení",
- "notifications.column_settings.reblog": "Boosty:",
- "notifications.column_settings.show": "Zobrazit ve sloupci",
- "notifications.column_settings.sound": "Přehrát zvuk",
- "notifications.column_settings.sounds": "Zvuky",
- "notifications.column_settings.sounds.all_sounds": "Přehrávat zvuk ze všech notifikací",
- "notifications.column_settings.title": "Notification settings",
+ "notification.update": "{name} edited a post you interacted with",
+ "notification.user_approved": "Welcome to {instance}!",
"notifications.filter.all": "Vše",
"notifications.filter.boosts": "Boosty",
"notifications.filter.emoji_reacts": "Emoji reacts",
"notifications.filter.favourites": "Oblíbení",
"notifications.filter.follows": "Sledování",
"notifications.filter.mentions": "Zmínky",
- "notifications.filter.moves": "Moves",
"notifications.filter.polls": "Výsledky anket",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.group": "{count} oznámení",
"notifications.queue_label": "Click to see {count} new {count, plural, one {notification} other {notifications}}",
- "onboarding.avatar.subtitle": "Just have fun with it.",
- "onboarding.avatar.title": "Choose a profile picture",
- "onboarding.display_name.subtitle": "You can always edit this later.",
- "onboarding.display_name.title": "Choose a display name",
- "onboarding.done": "Done",
- "onboarding.finished.message": "We are very excited to welcome you to our community! Tap the button below to get started.",
- "onboarding.finished.title": "Onboarding complete",
- "onboarding.header.subtitle": "This will be shown at the top of your profile.",
- "onboarding.header.title": "Pick a cover image",
- "onboarding.next": "Next",
- "onboarding.note.subtitle": "You can always edit this later.",
- "onboarding.note.title": "Write a short bio",
+ "oauth_consumer.tooltip": "Sign in with {provider}",
+ "oauth_consumers.title": "Other ways to sign in",
+ "onboarding.avatar.subtitle": "Kreativitě se meze nekladou.",
+ "onboarding.avatar.title": "Nastavte si profilový obrázek",
+ "onboarding.display_name.subtitle": "Později ho můžete změnit.",
+ "onboarding.display_name.title": "Nastavte si uživatelské jméno",
+ "onboarding.done": "Hotovo",
+ "onboarding.fediverse.its_you": "Tohle jste vy! Jiní lidí vás mohou sledovat z jiných serverů, stačí jim použít vaši plnou adresu s oběma zavináči.",
+ "onboarding.fediverse.message": "Fediverse je sociální síť složená z tisíců různorodých a nezávisle provozovaných serverů. Můžete sledovat uživatele - a lajkovat, sdílet a odpovídat na příspěvky - z většiny ostatních serverů Fediversa, protože {siteTitle} s nimi dokáže komunikovat.",
+ "onboarding.fediverse.next": "Next",
+ "onboarding.fediverse.other_instances": "Při procházení příspěvků si všímejte plných uživatelských jmen - podle části za druhým zavináčem zjistíte, ze kterého serveru daný příspěvek pochází.",
+ "onboarding.fediverse.title": "{siteTitle} je jen jedna část Fediversa",
+ "onboarding.fediverse.trailer": "Díky své distribuované povaze a tomu, že svůj server může provozovat kdokoliv, je Fediverse odolný a otevřený. Pokud se zaregistrujete k jinému serveru, nebo si spustíte vlastní, můžete nadále interagovat se stejnými lidmi o nepřerušovat své existující sociální vazby.",
+ "onboarding.finished.message": "Vítejte v naší komunitě! Pro začátek stiskněte tlačítko pod tímto textem.",
+ "onboarding.finished.title": "Účet je založen",
+ "onboarding.header.subtitle": "Bude zobrazen na vršku vašeho profilu.",
+ "onboarding.header.title": "Nastavte si obrázek do záhlaví účtu",
+ "onboarding.next": "Další",
+ "onboarding.note.subtitle": "Později to můžete změnit.",
+ "onboarding.note.title": "Napište něco krátkého o sobě",
"onboarding.saving": "Saving…",
- "onboarding.skip": "Skip for now",
- "onboarding.suggestions.subtitle": "Here are a few of the most popular accounts you might like.",
- "onboarding.suggestions.title": "Suggested accounts",
- "onboarding.view_feed": "View Feed",
+ "onboarding.skip": "Prozatím přeskočit",
+ "onboarding.suggestions.subtitle": "Tohle je pár našich populárních účtů, které by se vám mohly líbit.",
+ "onboarding.suggestions.title": "Doporučené účty",
+ "onboarding.view_feed": "Zobrazit časovou osu",
"password_reset.confirmation": "Check your email for confirmation.",
- "password_reset.fields.username_placeholder": "Email or username",
- "password_reset.reset": "Reset password",
+ "password_reset.fields.username_placeholder": "E-mail nebo uživatelské jméno",
+ "password_reset.header": "Resetovat heslo",
+ "password_reset.reset": "Resetovat heslo",
"patron.donate": "Donate",
"patron.title": "Funding Goal",
"pinned_accounts.title": "{name}’s choices",
"pinned_statuses.none": "Žádné připnuté příspěvky.",
+ "poll.choose_multiple": "Choose as many as you'd like.",
"poll.closed": "Uzavřena",
+ "poll.non_anonymous": "Public poll",
+ "poll.non_anonymous.label": "Other instances may display the options you voted for",
"poll.refresh": "Obnovit",
+ "poll.total_people": "{count, plural, one {# person} other {# people}}",
"poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasu} other {# hlasů}}",
"poll.vote": "Hlasovat",
"poll.voted": "You voted for this answer",
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
"poll_button.add_poll": "Přidat anketu",
"poll_button.remove_poll": "Odstranit anketu",
- "pre_header.close": "Close",
"preferences.fields.auto_play_gif_label": "Automaticky přehrávat GIFy",
- "preferences.fields.autoload_more_label": "Automatically load more items when scrolled to the bottom of the page",
- "preferences.fields.autoload_timelines_label": "Automatically load new posts when scrolled to the top of the page",
+ "preferences.fields.auto_play_video_label": "Automaticky přehrávat videa",
+ "preferences.fields.autoload_more_label": "Při dosažení spodku stránky automaticky nahrát další příspěvky",
+ "preferences.fields.autoload_timelines_label": "Při dosažení vršku stránky automaticky nahrát další příspěvky",
"preferences.fields.boost_modal_label": "Zobrazit potvrzovací dialog před boostnutím",
+ "preferences.fields.content_type_label": "Formát příspěvků",
"preferences.fields.delete_modal_label": "Zobrazit potvrzovací dialog před smazáním příspěvku",
- "preferences.fields.display_media.default": "Hide media marked as sensitive",
- "preferences.fields.display_media.hide_all": "Always hide media",
- "preferences.fields.display_media.show_all": "Always show media",
+ "preferences.fields.demetricator_label": "Use Demetricator",
+ "preferences.fields.display_media.default": "Skrývat média označená jako citlivá",
+ "preferences.fields.display_media.hide_all": "Vždy skrývat média",
+ "preferences.fields.display_media.show_all": "Vždy zobrazovat média",
+ "preferences.fields.dyslexic_font_label": "Dyslexic mode",
"preferences.fields.expand_spoilers_label": "Vždy rozbalit příspěvky označené varováním",
"preferences.fields.language_label": "Jazyk",
- "preferences.fields.media_display_label": "Media display",
- "preferences.hints.feed": "In your home feed",
+ "preferences.fields.media_display_label": "Zobrazování médií",
+ "preferences.fields.missing_description_modal_label": "Show confirmation dialog before sending a post without media descriptions",
+ "preferences.fields.privacy_label": "Soukromí příspěvků",
+ "preferences.fields.reduce_motion_label": "Reduce motion in animations",
+ "preferences.fields.system_font_label": "Use system's default font",
+ "preferences.fields.theme": "Styl",
+ "preferences.fields.underline_links_label": "Always underline links in posts",
+ "preferences.fields.unfollow_modal_label": "Show confirmation dialog before unfollowing someone",
+ "preferences.hints.demetricator": "Decrease social media anxiety by hiding all numbers from the site.",
+ "preferences.hints.feed": "Ve vaší časové ose",
+ "preferences.notifications.advanced": "Show all notification categories",
+ "preferences.options.content_type_markdown": "Markdown",
+ "preferences.options.content_type_plaintext": "Prostý text",
+ "preferences.options.privacy_followers_only": "Pouze pro sledující",
+ "preferences.options.privacy_public": "Veřejný",
+ "preferences.options.privacy_unlisted": "Neuvedený",
"privacy.change": "Změnit soukromí příspěvku",
- "privacy.direct.long": "Odeslat pouze zmíněným uživatelům",
+ "privacy.direct.long": "Viditelný pouze pro zmíněné uživatele",
"privacy.direct.short": "Přímý",
- "privacy.private.long": "Odeslat pouze sledujícím",
+ "privacy.private.long": "Viditelný pouze pro sledující",
"privacy.private.short": "Pouze pro sledující",
- "privacy.public.long": "Odeslat na veřejné časové osy",
+ "privacy.public.long": "Viditelný pro všechny",
"privacy.public.short": "Veřejný",
- "privacy.unlisted.long": "Neodeslat na veřejné časové osy",
+ "privacy.unlisted.long": "Nezobrazovat na veřejných časových osách",
"privacy.unlisted.short": "Neuvedený",
"profile_dropdown.add_account": "Add an existing account",
"profile_dropdown.logout": "Log out @{acct}",
- "profile_fields_panel.title": "Profile fields",
- "public.column_settings.title": "Fediverse timeline settings",
+ "profile_dropdown.switch_account": "Switch accounts",
+ "profile_dropdown.theme": "Styl",
+ "profile_fields_panel.title": "Profilové položky",
"reactions.all": "All",
"regeneration_indicator.label": "Načítám…",
"regeneration_indicator.sublabel": "Váš domovský proud se připravuje!",
"register_invite.lead": "Complete the form below to create an account.",
"register_invite.title": "You've been invited to join {siteTitle}!",
- "registration.agreement": "Souhlasím s {tos}.",
- "registration.captcha.hint": "Klikněte na tento obrázek pro vygenerovaní nové captchy",
+ "registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
+ "registration.agreement": "Přečetl/a jsem si {tos} a souhlasím s nimi.",
+ "registration.captcha.hint": "Klikněte na tento obrázek pro vygenerovaní nového obrázku",
+ "registration.captcha.placeholder": "Opište text z obrázku",
"registration.closed_message": "{instance} nepříjmá nové uživatele",
"registration.closed_title": "Registrace uzavřeny",
- "registration.confirmation_modal.close": "Close",
+ "registration.confirmation_modal.close": "Zavřít",
"registration.fields.confirm_placeholder": "Heslo (znovu)",
- "registration.fields.email_placeholder": "Emailová adresa",
+ "registration.fields.email_placeholder": "E-mailová adresa",
"registration.fields.password_placeholder": "Heslo",
- "registration.fields.username_hint": "Pouze písmena, čísla a podtržítka jsou povoleny.",
- "registration.fields.username_placeholder": "Jméno",
- "registration.newsletter": "Subscribe to newsletter.",
- "registration.password_mismatch": "Passwords don't match.",
- "registration.reason": "Proč se chcete připojit?",
- "registration.reason_hint": "Toto nám pomůže posoudit Vaši přihlášku",
+ "registration.fields.username_hint": "Povolena jsou pouze písmena, čísla a podtržítka.",
+ "registration.fields.username_placeholder": "Uživatelské jméno",
+ "registration.header": "Register your account",
+ "registration.newsletter": "Přihlásit se k odběru novinek.",
+ "registration.password_mismatch": "Hesla se neshodují.",
+ "registration.privacy": "Privacy Policy",
+ "registration.reason": "Proč se u nás chcete registrovat?",
+ "registration.reason_hint": "Pomůže nám to posoudit vaši přihlášku",
"registration.sign_up": "Registrovat",
"registration.tos": "Podmínky služby",
- "registration.username_unavailable": "Username is already taken.",
+ "registration.username_unavailable": "Toto uživatelské jméno je už zabrané.",
+ "registration.validation.capital_letter": "1 capital letter",
+ "registration.validation.lowercase_letter": "1 lowercase letter",
+ "registration.validation.minimum_characters": "8 characters",
+ "registrations.create_account": "Create an account",
+ "registrations.error": "Failed to register your account.",
+ "registrations.get_started": "Let's get started!",
+ "registrations.success": "Welcome to {siteTitle}!",
+ "registrations.tagline": "Social Media Without Discrimination",
+ "registrations.unprocessable_entity": "This username has already been taken.",
+ "registrations.username.hint": "May only contain A-Z, 0-9, and underscores",
"relative_time.days": "{number} d",
"relative_time.hours": "{number} h",
- "relative_time.just_now": "teď",
+ "relative_time.just_now": "právě teď",
"relative_time.minutes": "{number} m",
"relative_time.seconds": "{number} s",
"remote_instance.edit_federation": "Edit federation",
@@ -859,121 +910,152 @@
"reply_indicator.cancel": "Zrušit",
"reply_mentions.account.add": "Add to mentions",
"reply_mentions.account.remove": "Remove from mentions",
+ "reply_mentions.more": "{count} more",
+ "reply_mentions.reply": "Replying to {accounts}",
+ "reply_mentions.reply.hoverable": "
Replying to {accounts}",
"reply_mentions.reply_empty": "Replying to post",
"report.block": "Zablokovat {target}",
"report.block_hint": "Chcete zablokovat tento účet?",
+ "report.confirmation.content": "If we find that this account is violating the {link} we will take further action on the matter.",
+ "report.confirmation.title": "Thanks for submitting your report.",
+ "report.done": "Done",
"report.forward": "Přeposlat na {target}",
"report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?",
- "report.hint": "Nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:",
+ "report.next": "Pokračovat",
+ "report.otherActions.addAdditional": "Would you like to add additional statuses to this report?",
+ "report.otherActions.addMore": "Add more",
+ "report.otherActions.furtherActions": "Further actions:",
+ "report.otherActions.hideAdditional": "Hide additional statuses",
+ "report.otherActions.otherStatuses": "Include other statuses?",
"report.placeholder": "Dodatečné komentáře",
+ "report.reason.blankslate": "You have removed all statuses from being selected.",
+ "report.reason.title": "Reason for reporting",
"report.submit": "Odeslat",
"report.target": "Nahlášení uživatele {target}",
+ "reset_password.fail": "Expired token, please try again.",
"reset_password.header": "Set New Password",
+ "save": "Uložit",
"schedule.post_time": "Post Date/Time",
"schedule.remove": "Remove schedule",
- "schedule_button.add_schedule": "Schedule post for later",
- "schedule_button.remove_schedule": "Post immediately",
- "scheduled_status.cancel": "Cancel",
+ "schedule_button.add_schedule": "Naplánovat na později",
+ "schedule_button.remove_schedule": "Publikovat ihned",
+ "scheduled_status.cancel": "Zrušit",
"search.action": "Search for “{query}”",
"search.placeholder": "Hledat",
"search_results.accounts": "Lidé",
+ "search_results.filter_message": "You are searching for posts from @{acct}.",
"search_results.hashtags": "Hashtagy",
"search_results.statuses": "Příspěvky",
- "search_results.top": "Top",
"security.codes.fail": "Selhalo načítání záložních kódů",
"security.confirm.fail": "Špatný kód nebo heslo. Zkuste to znova.",
"security.delete_account.fail": "Smazání účtu selhalo.",
"security.delete_account.success": "Smazání účtu bylo úspěšné.",
"security.disable.fail": "Špatné heslo. Zkuste to znova.",
- "security.disable_mfa": "Vypnout",
"security.fields.email.label": "Emailová addresa",
"security.fields.new_password.label": "Nové heslo",
"security.fields.old_password.label": "Současné heslo",
"security.fields.password.label": "Heslo",
"security.fields.password_confirmation.label": "Nové heslo (znova)",
- "security.headers.delete": "Odstranit účet",
- "security.headers.tokens": "Sessions",
- "security.headers.update_email": "Změnit email",
- "security.headers.update_password": "Změnit heslo",
- "security.mfa": "Set up 2-Factor Auth",
- "security.mfa_enabled": "You have multi-factor authentication set up with OTP.",
- "security.mfa_header": "Authorizační metody",
- "security.mfa_setup_hint": "Configure multi-factor authentication with OTP",
+ "security.headers.delete": "Smazat účet",
+ "security.headers.tokens": "Autorizované aplikace",
"security.qr.fail": "Failed to fetch setup key",
"security.submit": "Uložit změny",
"security.submit.delete": "Smazat účet",
- "security.text.delete": "Pro smazání účtu vložte své heslo a poté klikněte Smazat účet. Tuto akci poté nelze zvrátit. Váš účet bude smazán z tohoto serveru a žádost o smazání bude poslán všem známým serverům. Nelze garantovat, že všechny servery Váš účet smažou.",
- "security.tokens.revoke": "Anulovat",
+ "security.text.delete": "Smazání účtu potvrdíte zadáním svého hesla a kliknutím na Smazat účet. Toto je nevratná akce. Váš účet bude z tohoto serveru vymazán a žádost o smazání bude zaslána i ostatním serverům. Nelze garantovat, že všechny cizí servery data související s vaším účtem skutečně smažou.",
+ "security.text.delete.local": "Smazání účtu potvrdíte zadáním svého hesla a kliknutím na Smazat účet. Toto je nevratná akce.",
+ "security.tokens.revoke": "Odvolat",
"security.update_email.fail": "Změna emailu se nezdařila.",
"security.update_email.success": "Email úspěšně změněn.",
"security.update_password.fail": "Změna hesla se nezdařila.",
"security.update_password.success": "Heslo úspěšně změněno.",
- "settings.change_email": "Change Email",
- "settings.change_password": "Change Password",
- "settings.configure_mfa": "Configure MFA",
- "settings.delete_account": "Delete Account",
- "settings.edit_profile": "Edit Profile",
- "settings.preferences": "Preferences",
- "settings.profile": "Profile",
- "settings.save.success": "Your preferences have been saved!",
- "settings.security": "Security",
- "settings.settings": "Settings",
- "signup_panel.subtitle": "Registrujte se pro diskuzi.",
- "signup_panel.title": "Nový na {site_title}?",
+ "settings.account_migration": "Move Account",
+ "settings.change_email": "Změnit email",
+ "settings.change_password": "Změnit heslo",
+ "settings.configure_mfa": "Nastavit dvoufaktorové ověření",
+ "settings.delete_account": "Smazat účet",
+ "settings.edit_profile": "Upravit profil",
+ "settings.other": "Další možnosti",
+ "settings.preferences": "Předvolby",
+ "settings.profile": "Profil",
+ "settings.save.success": "Vaše předvolby byly uloženy!",
+ "settings.security": "Zabezpečení",
+ "settings.sessions": "Autorizované aplikace",
+ "settings.settings": "Nastavení",
+ "shared.tos": "Podmínky služby",
+ "signup_panel.subtitle": "Zaregistrujte se a zúčastněte se diskuse.",
+ "signup_panel.title": "Jste na serveru {site_title} noví?",
+ "site_preview.preview": "Náhled",
+ "sms_verification.expired": "Your SMS token has expired.",
+ "sms_verification.fail": "Failed to send SMS message to your phone number.",
+ "sms_verification.header": "Enter your phone number",
+ "sms_verification.invalid": "Please enter a valid phone number.",
+ "sms_verification.modal.enter_code": "We sent you a 6-digit code via SMS. Enter it below.",
+ "sms_verification.modal.resend_code": "Resend verification code?",
+ "sms_verification.modal.verify_code": "Verify code",
+ "sms_verification.modal.verify_help_text": "Verify your phone number to start using {instance}.",
+ "sms_verification.modal.verify_number": "Verify phone number",
+ "sms_verification.modal.verify_sms": "Verify SMS",
+ "sms_verification.modal.verify_title": "Verify your phone number",
+ "sms_verification.sent.header": "Verification code",
+ "sms_verification.success": "A verification code has been sent to your phone number.",
"snackbar.view": "View",
- "soapbox_config.authenticated_profile_hint": "Users must be logged-in to view replies and media on user profiles.",
- "soapbox_config.authenticated_profile_label": "Profiles require authentication",
- "soapbox_config.copyright_footer.meta_fields.label_placeholder": "Copyright zápatí",
- "soapbox_config.crypto_address.meta_fields.address_placeholder": "Address",
- "soapbox_config.crypto_address.meta_fields.note_placeholder": "Note (optional)",
- "soapbox_config.crypto_address.meta_fields.ticker_placeholder": "Ticker",
- "soapbox_config.crypto_donate_panel_limit.meta_fields.limit_placeholder": "Number of items to display in the crypto homepage widget",
+ "soapbox_config.authenticated_profile_hint": "Pouze přihlášení uživatelé mohou prohlížet odpovědi a média na uživatelských profilech.",
+ "soapbox_config.authenticated_profile_label": "Profily vyžadují přihlášení",
+ "soapbox_config.copyright_footer.meta_fields.label_placeholder": "Copyright v zápatí",
+ "soapbox_config.crypto_address.meta_fields.address_placeholder": "Adresa",
+ "soapbox_config.crypto_address.meta_fields.note_placeholder": "Poznámka (nepovinná)",
+ "soapbox_config.crypto_address.meta_fields.ticker_placeholder": "Symbol",
+ "soapbox_config.crypto_donate_panel_limit.meta_fields.limit_placeholder": "Počet položek k zobrazení v panelu kryptoměn na domovské obrazovce",
+ "soapbox_config.cta_label": "Zobrazit panely s výzvami k akci i nepřihlášeným uživatelům",
"soapbox_config.custom_css.meta_fields.url_placeholder": "URL",
- "soapbox_config.display_fqn_label": "Display domain (eg @user@domain) for local accounts.",
- "soapbox_config.fields.accent_color_label": "Accent color",
- "soapbox_config.fields.brand_color_label": "Barva značky",
- "soapbox_config.fields.crypto_address.add": "Add new crypto address",
- "soapbox_config.fields.crypto_addresses_label": "Cryptocurrency addresses",
- "soapbox_config.fields.home_footer.add": "Přidat položku do Domácího zápatí",
- "soapbox_config.fields.home_footer_fields_label": "Položky Domácího zápatí",
+ "soapbox_config.display_fqn_label": "Zobrazit doménu (např @uzivatel@domena) u místních účtů.",
+ "soapbox_config.fields.accent_color_label": "Vedlejší barva",
+ "soapbox_config.fields.brand_color_label": "Hlavní barva",
+ "soapbox_config.fields.crypto_addresses_label": "Adresy kryptoměn",
+ "soapbox_config.fields.home_footer_fields_label": "Zápatí časové osy",
"soapbox_config.fields.logo_label": "Logo",
- "soapbox_config.fields.promo_panel.add": "Přidat položku do Promo panelu",
"soapbox_config.fields.promo_panel_fields_label": "Položky Promo panelu",
"soapbox_config.fields.theme_label": "Výchozí motiv",
- "soapbox_config.greentext_label": "Enable greentext support",
- "soapbox_config.hints.crypto_addresses": "Add cryptocurrency addresses so users of your site can donate to you. Order matters, and you must use lowercase ticker values.",
+ "soapbox_config.greentext_label": "Povolit greentext",
+ "soapbox_config.headings.advanced": "Pokročilé",
+ "soapbox_config.headings.cryptocurrency": "Kryptoměny",
+ "soapbox_config.headings.navigation": "Navigace",
+ "soapbox_config.headings.options": "Nastavení",
+ "soapbox_config.headings.theme": "Styl",
+ "soapbox_config.hints.crypto_addresses": "Zadejte adresy kryptoměn, aby vám uživatelé vašeho severu mohli přispívat. Na pořadí záleží a burzovní symboly musejí být malými písmeny.",
"soapbox_config.hints.home_footer_fields": "Můžete mít vlastní odkazy zobrazené v zápatí",
"soapbox_config.hints.logo": "SVG. Maximálně 2 MB. Bude zobrazeno 50 pixelů vysoké se zachovaným poměrem stran",
- "soapbox_config.hints.promo_panel_fields": "Můžete mít vlastní odkazy zobrazené nalevo od zdi.",
- "soapbox_config.hints.promo_panel_icons": "{ link }",
+ "soapbox_config.hints.promo_panel_fields": "Můžete mít vlastní odkazy zobrazené vpravo od časové osy.",
"soapbox_config.hints.promo_panel_icons.link": "Soapbox Icons List",
"soapbox_config.home_footer.meta_fields.label_placeholder": "Štítek",
"soapbox_config.home_footer.meta_fields.url_placeholder": "URL",
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Ikona",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Štítek",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
- "soapbox_config.raw_json_hint": "Upravte data nastavení přímo. Změny udělané přímo do JSON přepíše předchozí formulář. Zmáčkněte Uložit pro aplikaci změn.",
+ "soapbox_config.raw_json_hint": "Upravte data nastavení přímo. Změny v souboru přepíší předchozí formulář. Tlačítkem Uložit změny aplikujete.",
"soapbox_config.raw_json_label": "Pokročilé: Upravit JSON data",
"soapbox_config.save": "Uložit",
- "soapbox_config.saved": "Soapbox config saved!",
- "soapbox_config.single_user_mode_hint": "Front page will redirect to a given user profile.",
- "soapbox_config.single_user_mode_label": "Single user mode",
+ "soapbox_config.saved": "Nastavení Soapboxu uložena!",
+ "soapbox_config.single_user_mode_hint": "Domovská stránka zobrazí zadaný uživatelský profil.",
+ "soapbox_config.single_user_mode_label": "Režim jednoho uživatele",
"soapbox_config.single_user_mode_profile_hint": "@handle",
"soapbox_config.single_user_mode_profile_label": "Main user handle",
- "soapbox_config.verified_can_edit_name_label": "Allow verified users to edit their own display name.",
- "status.actions.more": "More",
- "status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}",
- "status.admin_status": "Otevřít tento příspěvek v moderátorském rozhraní",
- "status.block": "Zablokovat uživatele @{name}",
+ "soapbox_config.verified_can_edit_name_label": "Povolit ověřeným uživatelům měnit jméno svého účtu.",
+ "sponsored.info.message": "{siteTitle} displays ads to help fund our service.",
+ "sponsored.info.title": "Why am I seeing this ad?",
+ "sponsored.subtitle": "Sponsored post",
+ "status.admin_account": "Moderovat uživatele @{name}",
+ "status.admin_status": "Moderovat příspěvek",
"status.bookmark": "Záložka",
"status.bookmarked": "Bookmark added.",
"status.cancel_reblog_private": "Zrušit boost",
"status.cannot_reblog": "Tento příspěvek nemůže být boostnutý",
- "status.chat": "Chat with @{name}",
+ "status.chat": "Chatovat s @{name}",
"status.copy": "Kopírovat odkaz příspěvku",
"status.delete": "Smazat",
"status.detailed_status": "Detailní zobrazení konverzace",
"status.direct": "Poslat přímou zprávu uživateli @{name}",
+ "status.edit": "Edit",
"status.embed": "Vložit na web",
"status.favourite": "Oblíbit",
"status.filtered": "Filtrováno",
@@ -981,7 +1063,6 @@
"status.media_hidden": "Média skryta",
"status.mention": "Zmínit uživatele @{name}",
"status.more": "Více",
- "status.mute": "Skrýt uživatele @{name}",
"status.mute_conversation": "Skrýt konverzaci",
"status.open": "Otevřít tento příspěvek",
"status.pin": "Připnout na profil",
@@ -994,7 +1075,6 @@
"status.reactions.like": "Like",
"status.reactions.open_mouth": "Wow",
"status.reactions.weary": "Weary",
- "status.reactions_expand": "Select emoji",
"status.read_more": "Číst více",
"status.reblog": "Boostnout",
"status.reblog_private": "Boostnout původnímu publiku",
@@ -1007,34 +1087,52 @@
"status.replyAll": "Odpovědět na vlákno",
"status.report": "Nahlásit uživatele @{name}",
"status.sensitive_warning": "Citlivý obsah",
+ "status.sensitive_warning.subtitle": "Tento obsah nemusí být pro některé osoby vhodný.",
"status.share": "Sdílet",
- "status.show_less": "Zobrazit méně",
"status.show_less_all": "Zobrazit méně pro všechny",
- "status.show_more": "Zobrazit více",
"status.show_more_all": "Zobrazit více pro všechny",
- "status.title": "Post",
+ "status.show_original": "Show original",
+ "status.title": "Příspěvek uživatele @{username}",
"status.title_direct": "Direct message",
+ "status.translate": "Translate",
+ "status.translated_from_with": "Translated from {lang} using {provider}",
"status.unbookmark": "Odstranit záložku",
- "status.unbookmarked": "Bookmark removed.",
+ "status.unbookmarked": "Záložka odstraněna.",
"status.unmute_conversation": "Odkrýt konverzaci",
"status.unpin": "Odepnout z profilu",
"status_list.queue_label": "Klikněte aby pro zobrazení {count} nových {count, plural, one {post} other {posts}}",
- "statuses.quote_tombstone": "Post is unavailable.",
- "statuses.tombstone": "One or more posts are unavailable.",
+ "statuses.quote_tombstone": "Příspěvek není dostupný.",
+ "statuses.tombstone": "Jeden nebo více příspěvků je nedostupných.",
+ "streamfield.add": "Přidat",
+ "streamfield.remove": "Odebrat",
"suggestions.dismiss": "Odmítnout návrh",
+ "sw.restart": "Restart",
+ "sw.state.active": "Active",
+ "sw.state.loading": "Loading…",
+ "sw.state.unavailable": "Unavailable",
+ "sw.state.unknown": "Unknown",
+ "sw.state.waiting": "Waiting",
+ "sw.status": "Status",
+ "sw.update": "Aktualizovat",
+ "sw.update_text": "Je dostupná nová verze.",
+ "sw.url": "Script URL",
"tabs_bar.all": "All",
"tabs_bar.chats": "Chaty",
- "tabs_bar.dashboard": "Dashboard",
+ "tabs_bar.dashboard": "Ovládací panel",
"tabs_bar.fediverse": "Fediverse",
"tabs_bar.home": "Domů",
- "tabs_bar.more": "More",
+ "tabs_bar.more": "Více",
"tabs_bar.notifications": "Oznámení",
- "tabs_bar.post": "Příspěvek",
- "tabs_bar.profile": "Profile",
+ "tabs_bar.profile": "Profil",
"tabs_bar.search": "Hledat",
- "tabs_bar.settings": "Settings",
- "tabs_bar.theme_toggle_dark": "Přepnout na tmavý režim",
- "tabs_bar.theme_toggle_light": "Přepnout na světlý režim",
+ "tabs_bar.settings": "Nastavení",
+ "theme_toggle.dark": "Tmavý",
+ "theme_toggle.light": "Světlý",
+ "theme_toggle.system": "Systémový",
+ "thread_login.login": "Log in",
+ "thread_login.message": "Join {siteTitle} to get the full story and details.",
+ "thread_login.signup": "Sign up",
+ "thread_login.title": "Continue the conversation",
"time_remaining.days": "{number, plural, one {Zbývá # den} few {Zbývají # dny} many {Zbývá # dne} other {Zbývá # dní}}",
"time_remaining.hours": "{number, plural, one {Zbývá # hodina} few {Zbývají # hodiny} many {Zbývá # hodiny} other {Zbývá # hodin}}",
"time_remaining.minutes": "{number, plural, one {Zbývá # minuta} few {Zbývají # minuty} many {Zbývá # minuty} other {Zbývá # minut}}",
@@ -1042,21 +1140,23 @@
"time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekundy} other {Zbývá # sekund}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří",
"trends.title": "Trendy",
+ "trendsPanel.viewAll": "View all",
"ui.beforeunload": "Váš koncept se ztratí, pokud Soapbox opustíte.",
- "unauthorized_modal.text": "Pro toto musíte být přihlášen/a.",
+ "unauthorized_modal.text": "Nejprve se přihlašte.",
"unauthorized_modal.title": "Registrovat se na {site_title}",
"upload_area.title": "Přetažením nahrajete",
"upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.image_size_limit": "Image exceeds the current file size limit ({limit})",
"upload_error.limit": "Byl překročen limit nahraných souborů.",
"upload_error.poll": "Nahrávání souborů není povoleno u anket.",
+ "upload_error.video_duration_limit": "Video exceeds the current duration limit ({limit} seconds)",
"upload_error.video_size_limit": "Video exceeds the current file size limit ({limit})",
"upload_form.description": "Popis pro zrakově postižené",
- "upload_form.preview": "Preview",
+ "upload_form.preview": "Náhled",
"upload_form.undo": "Smazat",
"upload_progress.label": "Nahrávám…",
"video.close": "Zavřít video",
- "video.download": "Download file",
+ "video.download": "Stáhnout soubor",
"video.exit_fullscreen": "Ukončit celou obrazovku",
"video.expand": "Otevřít video",
"video.fullscreen": "Celá obrazovka",
diff --git a/app/soapbox/locales/de.json b/app/soapbox/locales/de.json
index dea27e5af..debb5b07d 100644
--- a/app/soapbox/locales/de.json
+++ b/app/soapbox/locales/de.json
@@ -55,7 +55,7 @@
"account.welcome": "Willkommen",
"account_gallery.none": "Keine Medien vorhanden.",
"account_note.hint": "You can keep notes about this user for yourself (this will not be shared with them):",
- "account_note.placeholder": "No comment provided",
+ "account_note.placeholder": "Kein Kommentar hinterlegt",
"account_note.save": "Speichern",
"account_note.target": "Note for @{target}",
"account_search.placeholder": "Nach einem Account suchen",
@@ -362,12 +362,12 @@
"developers.navigation.network_error_label": "Network error",
"developers.navigation.settings_store_label": "Settings store",
"developers.navigation.test_timeline_label": "Test timeline",
- "developers.settings_store.hint": "It is possible to directly edit your user settings here. BE CAREFUL! Editing this section can break your account, and you will only be able to recover through the API.",
+ "developers.settings_store.hint": "Hier können die Benutzereinstellungen direkt bearbeitet werden. VORSICHT! Die Bearbeitung dieses Abschnitts kann das Konto zerstören - eine Wiederherstellung ist ausschließlich per API möglich",
"direct.search_placeholder": "Nachricht senden an…",
"directory.federated": "From known fediverse",
- "directory.local": "From {domain} only",
+ "directory.local": "Ausschließlich von {domain}",
"directory.new_arrivals": "New arrivals",
- "directory.recently_active": "Recently active",
+ "directory.recently_active": "Zuletzt aktiv",
"edit_federation.followers_only": "Beitrag nur für Follower anzeigen",
"edit_federation.force_nsfw": "Markierung aller Anhänge als heikel erzwingen",
"edit_federation.media_removal": "Alle Medien entfernen",
@@ -375,7 +375,7 @@
"edit_federation.save": "Speichern",
"edit_federation.success": "{host} federation was updated",
"edit_federation.unlisted": "Ungelistete Beiträge erzwingen",
- "edit_password.header": "Change Password",
+ "edit_password.header": "Passwort ändern",
"edit_profile.error": "Profil konnte nicht geändert werden",
"edit_profile.fields.accepts_email_list_label": "Newsletter abonnieren",
"edit_profile.fields.avatar_label": "Profilbild",
@@ -384,24 +384,24 @@
"edit_profile.fields.birthday_label": "Geburtstag",
"edit_profile.fields.birthday_placeholder": "Dein Geburtstag",
"edit_profile.fields.bot_label": "Dieses Konto wird für einen Bot genutzt",
- "edit_profile.fields.discoverable_label": "Allow account discovery",
+ "edit_profile.fields.discoverable_label": "Konto im Instanz-Verzeichnis eintragen",
"edit_profile.fields.display_name_label": "Angezeigter Nutzername",
"edit_profile.fields.display_name_placeholder": "Name",
"edit_profile.fields.header_label": "Profilbanner",
"edit_profile.fields.hide_network_label": "Follower und Nutzer, denen du folgst, nicht öffentlich anzeigen",
- "edit_profile.fields.location_label": "Location",
- "edit_profile.fields.location_placeholder": "Location",
+ "edit_profile.fields.location_label": "Wohnort",
+ "edit_profile.fields.location_placeholder": "Wohnort",
"edit_profile.fields.locked_label": "Profil auf privat stellen",
"edit_profile.fields.meta_fields.content_placeholder": "Content",
"edit_profile.fields.meta_fields.label_placeholder": "Label",
"edit_profile.fields.stranger_notifications_label": "Benachrichtigungen von Fremden blockieren",
"edit_profile.fields.website_label": "Website",
- "edit_profile.fields.website_placeholder": "Display a Link",
- "edit_profile.header": "Edit Profile",
- "edit_profile.hints.accepts_email_list": "Opt-in to news and marketing updates.",
+ "edit_profile.fields.website_placeholder": "Link anzeigen",
+ "edit_profile.header": "Profile bearbeiten",
+ "edit_profile.hints.accepts_email_list": "Status- und Werbenachrichten abonnieren.",
"edit_profile.hints.avatar": "Erlaubte Formate sind PNG, GIF oder JPG. Die Datei darf nicht größer als 2 MB sein. Das Bild wird automatisch auf 400x400px verkleinert.",
- "edit_profile.hints.bot": "This account mainly performs automated actions and might not be monitored",
- "edit_profile.hints.discoverable": "Display account in profile directory and allow indexing by external services",
+ "edit_profile.hints.bot": "Dieses Konto ist ein Bot. Aktivitäten werden möglicherweise nicht moderiert.",
+ "edit_profile.hints.discoverable": "Konto im Verzeichnis listen und Indexierung durch externe Dienste ermöglichen",
"edit_profile.hints.header": "Erlaubte Formate sind PNG, GIF oder JPG. Die Datei darf nicht größer als 2 MB sein. Das Bild wird automatisch auf 1500x500px verkleinert.",
"edit_profile.hints.hide_network": "Deine Follower und wem du folgst wird nicht in deinem Profil angezeit.",
"edit_profile.hints.locked": "Follower müssen einzeln bestätigt werden.",
@@ -409,13 +409,13 @@
"edit_profile.save": "Speichern",
"edit_profile.success": "Profil gespeichert",
"email_passthru.confirmed.body": "Close this tab and continue the registration process on the {bold} from which you sent this email confirmation.",
- "email_passthru.confirmed.heading": "Email Confirmed!",
+ "email_passthru.confirmed.heading": "E-Mail bestätigt!",
"email_passthru.generic_fail.body": "Please request a new email confirmation.",
- "email_passthru.generic_fail.heading": "Something Went Wrong",
- "email_passthru.token_expired.body": "Your email token has expired. Please request a new email confirmation from the {bold} from which you sent this email confirmation.",
- "email_passthru.token_expired.heading": "Token Expired",
- "email_passthru.token_not_found.body": "Your email token was not found. Please request a new email confirmation from the {bold} from which you sent this email confirmation.",
- "email_passthru.token_not_found.heading": "Invalid Token",
+ "email_passthru.generic_fail.heading": "Etwas ging schief",
+ "email_passthru.token_expired.body": "Die Bestätigungsnachricht ist abgelaufen. Bitte eine neue Bestätigung von {bold} beantragen, von wo du diese Nachricht erhalten hast.",
+ "email_passthru.token_expired.heading": "Token abgelaufen",
+ "email_passthru.token_not_found.body": "Bestätigungstoken nicht erkannt. Bitte beantrage ein neues Token von {bold} wo du diese Nachricht her hast.",
+ "email_passthru.token_not_found.heading": "Ungültiges Token",
"embed.instructions": "Du kannst diesen Beitrag auf deiner Webseite einbetten, indem du den folgenden Code einfügst.",
"embed.preview": "Vorschau:",
"emoji_button.activity": "Aktivitäten",
@@ -446,7 +446,7 @@
"empty_column.favourited_statuses": "Du hast noch keine Beiträge favorisiert. Favorisierte Beiträge erscheinen hier.",
"empty_column.favourites": "Diesen Beitrag hat noch niemand favorisiert. Sobald es jemand tut, wird das hier angezeigt.",
"empty_column.filters": "Du hast keine Wörter stummgeschaltet.",
- "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+ "empty_column.follow_recommendations": "Sieht so aus, als gibt es gerade keine Vorschläge für dich. Versuche, über die Suche bekannte Personen zu finden oder schaue dich in aktuellen Hashtags um.",
"empty_column.follow_requests": "Du hast noch keine Folgeanfragen. Sobald du eine erhältst, wird sie hier angezeigt.",
"empty_column.group": "Diese Gruppe hat noch keine Beiträge. Sobald ein Gruppenmitglied einen Beitrag erstellt, wird er hier angezeigt.",
"empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
@@ -459,9 +459,9 @@
"empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen",
"empty_column.remote": "There is nothing here! Manually follow users from {instance} to fill it up.",
"empty_column.scheduled_statuses": "Bisher wurden keine vorbereiteten Beiträge erstellt. Vorbereitete Beiträge werden hier angezeigt.",
- "empty_column.search.accounts": "There are no people results for \"{term}\"",
- "empty_column.search.hashtags": "There are no hashtags results for \"{term}\"",
- "empty_column.search.statuses": "There are no posts results for \"{term}\"",
+ "empty_column.search.accounts": "Es wurden keine Nutzer unter \"{term}\" gefunden",
+ "empty_column.search.hashtags": "Es wurden keine Hashtags unter \"{term}\" gefunden",
+ "empty_column.search.statuses": "Es wurden keine Posts unter \"{term}\" gefunden",
"export_data.actions.export": "Exportieren",
"export_data.actions.export_blocks": "Liste geblockter Nutzer expotieren",
"export_data.actions.export_follows": "Liste der Nutzer, denen du folgst, exportieren",
@@ -481,10 +481,10 @@
"federation_restriction.media_nsfw": "Anhänge als NSFW markiert",
"federation_restriction.partial_media_removal": "Partial media removal",
"federation_restrictions.empty_message": "{siteTitle} has not restricted any instances.",
- "federation_restrictions.explanation_box.message": "Normally servers on the Fediverse can communicate freely. {siteTitle} has imposed restrictions on the following servers.",
+ "federation_restrictions.explanation_box.message": "Üblicherweise föderieren Dienste im Fediverse. {siteTitle} hat die Föderation für die nachfolgenden Instanzen beschränkt.",
"federation_restrictions.explanation_box.title": "Instance-specific policies",
"federation_restrictions.not_disclosed_message": "{siteTitle} does not disclose federation restrictions through the API.",
- "fediverse_tab.explanation_box.dismiss": "Don't show again",
+ "fediverse_tab.explanation_box.dismiss": "Nicht mehr anzeigen",
"fediverse_tab.explanation_box.explanation": "{site_title} ist Teil des Fediverse, einem Sozialen Netzwerk, das aus tausenden unabhängigen Instanzen (aka \"Servern\") besteht. Die Beiträge, die du hier siehst, stammen überwiegend von anderen Servern. Du kannst auf alle Einträge reagieren oder jeden Server blockieren, der dir nicht gefällt. Die Bezeichnung hinter dem zweiten @-Symbol ist der Name des entsprechenden Servers. Um nur Beiträge von {site_title} zu sehen, wähle {local} aus.",
"fediverse_tab.explanation_box.title": "Was ist das Fediverse?",
"filters.added": "Filter hinzugefügt.",
@@ -492,16 +492,16 @@
"filters.context_hint": "One or multiple contexts where the filter should apply",
"filters.filters_list_context_label": "Filter contexts:",
"filters.filters_list_delete": "Löschen",
- "filters.filters_list_details_label": "Filter settings:",
+ "filters.filters_list_details_label": "Filtereinstellungen:",
"filters.filters_list_drop": "Drop",
- "filters.filters_list_hide": "Hide",
+ "filters.filters_list_hide": "Verstecken",
"filters.filters_list_phrase_label": "Stichwort oder Wortfolge:",
"filters.filters_list_whole-word": "Whole word",
"filters.removed": "Filter gelöscht.",
"follow_recommendation.subhead": "Let's get started!",
"follow_recommendations.done": "Done",
"follow_recommendations.heading": "Folge Nutzern, deren Beiträge du sehen möchtest. Hier sind einige Vorschläge:",
- "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
+ "follow_recommendations.lead": "Posts von Usern, denen du folgst, werden in deinem Home-Feed in chronologischer Reihenfolge angezeigt. Los geht's - du kannst anderen später jederzeit wieder entfolgen.",
"follow_request.authorize": "Bestätigen",
"follow_request.reject": "Ablehnen",
"forms.copy": "Kopieren",
@@ -528,7 +528,7 @@
"groups.join": "Gruppe beitreten",
"groups.leave": "Gruppe verlassen",
"groups.removed_accounts": "Entfernte Accounts",
- "groups.sidebar-panel.item.no_recent_activity": "No recent activity",
+ "groups.sidebar-panel.item.no_recent_activity": "Keine kürzliche Aktivität",
"groups.sidebar-panel.item.view": "Neue Beiträge",
"groups.sidebar-panel.show_all": "Alle anzeigen",
"groups.sidebar-panel.title": "Gruppenmitgliedschaften",
@@ -543,7 +543,7 @@
"header.login.label": "Anmelden",
"header.login.password.label": "Password",
"header.login.username.placeholder": "Email oder Nutzername",
- "header.register.label": "Anmelden",
+ "header.register.label": "Registrieren",
"home.column_settings.show_direct": "Direktnachricht anzeigen",
"home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
"home.column_settings.show_replies": "Antworten anzeigen",
@@ -571,10 +571,10 @@
"intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}",
"introduction.federation.action": "Weiter",
"introduction.federation.home.headline": "Home",
- "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
+ "introduction.federation.home.text": "Posts von Konten, denen du folgst, werden in deinem Home-Feed erscheinen. Du kannst jedem auf deiner Instanz folgen!!",
"introduction.interactions.action": "Finish tutorial!",
- "introduction.interactions.favourite.headline": "Favorite",
- "introduction.interactions.favourite.text": "You can save a post for later, and let the author know that you liked it, by favoriting it.",
+ "introduction.interactions.favourite.headline": "Favorisieren",
+ "introduction.interactions.favourite.text": "Du kannst einen Beitrag für später speichern und den Autor wissen lassen, dass er Ihnen gefallen hat, indem du ihm ein Like hinterlässt.",
"introduction.interactions.reblog.headline": "Teilen",
"introduction.interactions.reblog.text": "You can share other people's posts with your followers by reposting them.",
"introduction.interactions.reply.headline": "Antworten",
@@ -633,37 +633,37 @@
"login.fields.instance_label": "Instance",
"login.fields.instance_placeholder": "example.com",
"login.fields.otp_code_hint": "Enter the two-factor code generated by your phone app or use one of your recovery codes",
- "login.fields.otp_code_label": "Two-factor code:",
+ "login.fields.otp_code_label": "Zwei-Faktoren-Code:",
"login.fields.password_placeholder": "Passwort",
- "login.fields.username_label": "Email or username",
+ "login.fields.username_label": "E-Mail oder Nutzername",
"login.log_in": "Anmelden",
"login.otp_log_in": "OTP Login",
"login.reset_password_hint": "Probleme beim Anmelden?",
"login.sign_in": "Sign in",
"media_gallery.toggle_visible": "Sichtbarkeit umschalten",
- "media_panel.empty_message": "No media found.",
+ "media_panel.empty_message": "Keine Medien gefunden.",
"media_panel.title": "Media",
- "mfa.confirm.success_message": "MFA confirmed",
- "mfa.disable.success_message": "MFA disabled",
- "mfa.mfa_disable_enter_password": "Enter your current password to disable two-factor auth:",
- "mfa.mfa_setup.code_hint": "Enter the code from your two-factor app.",
+ "mfa.confirm.success_message": "MFA bestätigt",
+ "mfa.disable.success_message": "MFA abgeschaltet",
+ "mfa.mfa_disable_enter_password": "Aktuelles Passwort eingäben, um Zwei-Faktoren-Authentifizierung zu deaktivieren:",
+ "mfa.mfa_setup.code_hint": "Bitte den Code aus der 2FA-App eingeben.",
"mfa.mfa_setup.code_placeholder": "Code",
- "mfa.mfa_setup.password_hint": "Enter your current password to confirm your identity.",
- "mfa.mfa_setup.password_placeholder": "Password",
- "mfa.mfa_setup_scan_description": "Using your two-factor app, scan this QR code or enter text key:",
+ "mfa.mfa_setup.password_hint": "Aktuelles Passwort zur Bestätigung eingeben.",
+ "mfa.mfa_setup.password_placeholder": "Passwort",
+ "mfa.mfa_setup_scan_description": "Nutze eine 2FA-App, scanne den QR-Code oder gibt diesen Schlüsseltext ein:",
"mfa.mfa_setup_scan_title": "Scan",
- "mfa.mfa_setup_verify_title": "Verify",
- "mfa.otp_enabled_description": "You have enabled two-factor authentication via OTP.",
- "mfa.otp_enabled_title": "OTP Enabled",
- "mfa.setup_recoverycodes": "Recovery codes",
- "mfa.setup_warning": "Write these codes down or save them somewhere secure - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account.",
- "migration.fields.acct.label": "Handle of the new account",
+ "mfa.mfa_setup_verify_title": "Bestätigen",
+ "mfa.otp_enabled_description": "Du hast die Zwei-Faktoren-Authentifizierung per OTP aktiviert.",
+ "mfa.otp_enabled_title": "OTP eingeschaltet",
+ "mfa.setup_recoverycodes": "Sicherungs-Keys",
+ "mfa.setup_warning": "Notiere dir diese Codes an einem sicheren Platz - andernfalls wirst du sie nicht mehr auffinden und aus deinem Konto ausgesperrt.",
+ "migration.fields.acct.label": "Handle des neuen Kontos",
"migration.fields.acct.placeholder": "username@domain",
- "migration.fields.confirm_password.label": "Current password",
- "migration.hint": "This will move your followers to the new account. No other data will be moved. To perform migration, you need to {link} on your new account first.",
- "migration.hint.link": "create an account alias",
- "migration.move_account.fail": "Account migration failed.",
- "migration.move_account.success": "Account successfully moved.",
+ "migration.fields.confirm_password.label": "Aktuelles Passwort",
+ "migration.hint": "Damit werden deine Follower auf dein neues Konto übertragen - weitere Daten werden nicht migriert. Zur Bestätigung ist es nötig, {link} auf deinem neuen Konto zunächst zu bestätigen.",
+ "migration.hint.link": "Neues Alias erstellen",
+ "migration.move_account.fail": "Account-Übertragung fehlgeschlagen.",
+ "migration.move_account.success": "Account-Übertragung fehlgeschlagen.",
"migration.submit": "Move followers",
"missing_description_modal.cancel": "Abbrechen",
"missing_description_modal.continue": "Senden",
@@ -702,8 +702,8 @@
"navigation_bar.preferences": "Einstellungen",
"navigation_bar.profile_directory": "Profilverzeichnis",
"navigation_bar.security": "Sicherheit",
- "navigation_bar.soapbox_config": "Soapbox config",
- "notification.birthday": "{name} has a birthday today",
+ "navigation_bar.soapbox_config": "Soapbox Konfiguration",
+ "notification.birthday": "{name} hat Geburtstag!",
"notification.birthday.more": "{count} more {count, plural, one {friend} other {friends}}",
"notification.birthday_plural": "{name} and {more} have birthday today",
"notification.pleroma:chat_mention": "{name} hat dir eine Nachricht gesendet",
@@ -718,7 +718,7 @@
"notification.status": "{name} just posted",
"notifications.clear": "Benachrichtigungen löschen",
"notifications.clear_confirmation": "Bist du dir sicher, dass du alle Benachrichtigungen löschen möchtest?",
- "notifications.clear_heading": "Clear notifications",
+ "notifications.clear_heading": "Benachrichtigungen löschen",
"notifications.column_settings.alert": "Desktop-Benachrichtigungen",
"notifications.column_settings.birthdays.category": "Geburtstage",
"notifications.column_settings.birthdays.show": "Geburtstagserinnerungen anzeigen",
@@ -786,12 +786,12 @@
"preferences.fields.auto_play_gif_label": "Animierte GIFs automatisch abspielen",
"preferences.fields.autoload_more_label": "Automatically load more items when scrolled to the bottom of the page",
"preferences.fields.autoload_timelines_label": "Automatically load new posts when scrolled to the top of the page",
- "preferences.fields.boost_modal_label": "Show confirmation dialog before reposting",
- "preferences.fields.delete_modal_label": "Show confirmation dialog before deleting a post",
- "preferences.fields.display_media.default": "Hide media marked as sensitive",
- "preferences.fields.display_media.hide_all": "Always hide media",
- "preferences.fields.display_media.show_all": "Always show media",
- "preferences.fields.expand_spoilers_label": "Always expand posts marked with content warnings",
+ "preferences.fields.boost_modal_label": "Bestätigungsdialog öffnen, bevor ein Beitrag geboostet wird",
+ "preferences.fields.delete_modal_label": "Bestätigungsdialog öffnen, bevor ein Beitrag gelöscht wird",
+ "preferences.fields.display_media.default": "Als verstörend gekennzeichnete Medien grundsätzlich anzeigen",
+ "preferences.fields.display_media.hide_all": "Medien grundsätzlich ausblenden",
+ "preferences.fields.display_media.show_all": "Medien grundsätzlich anzeigen",
+ "preferences.fields.expand_spoilers_label": "Als verstörend gekennzeichnete Posts grundsätzlich ausklappen",
"preferences.fields.language_label": "Sprache",
"preferences.fields.media_display_label": "Media display",
"preferences.hints.feed": "In your home feed",
@@ -804,29 +804,29 @@
"privacy.public.short": "Öffentlich",
"privacy.unlisted.long": "Wird in öffentlichen Zeitleisten nicht gezeigt",
"privacy.unlisted.short": "Nicht gelistet",
- "profile_dropdown.add_account": "Add an existing account",
- "profile_dropdown.logout": "Log out @{acct}",
+ "profile_dropdown.add_account": "Bestehendes Konto hinzufügen",
+ "profile_dropdown.logout": "Aus @{acct} abmelden",
"profile_fields_panel.title": "Profile fields",
- "public.column_settings.title": "Fediverse timeline settings",
- "reactions.all": "All",
+ "public.column_settings.title": "Einstellungen der globalen Timeline",
+ "reactions.all": "Alle",
"regeneration_indicator.label": "Laden…",
"regeneration_indicator.sublabel": "Deine Startseite wird gerade vorbereitet!",
- "register_invite.lead": "Complete the form below to create an account.",
- "register_invite.title": "You've been invited to join {siteTitle}!",
+ "register_invite.lead": "Fülle folgendes Formular aus, bevor dein Konto erstellt wird.",
+ "register_invite.title": "Du wurdest zu {siteTitle} eingeladen!",
"registration.agreement": "Ich akzeptiere die {tos}.",
- "registration.captcha.hint": "Click the image to get a new captcha",
- "registration.closed_message": "{instance} is not accepting new members",
- "registration.closed_title": "Registrations Closed",
- "registration.confirmation_modal.close": "Close",
+ "registration.captcha.hint": "Bild anklicken, um neues Captcha zu erhalten",
+ "registration.closed_message": "{instance} nimmt keine neuen Mitglieder auf",
+ "registration.closed_title": "Registrierungen geschlossen",
+ "registration.confirmation_modal.close": "Schließen",
"registration.fields.confirm_placeholder": "Passwort (wiederholen)",
"registration.fields.email_placeholder": "Emailadresse",
"registration.fields.password_placeholder": "Passwort",
"registration.fields.username_hint": "Only letters, numbers, and underscores are allowed.",
- "registration.fields.username_placeholder": "Nutzername",
+ "registration.fields.username_placeholder": "Benutzername",
"registration.newsletter": "Newsletter abonnieren.",
"registration.password_mismatch": "Die eingegebenen Passwörter stimmen nicht überein",
- "registration.reason": "Why do you want to join?",
- "registration.reason_hint": "This will help us review your application",
+ "registration.reason": "Warum möchtest du ein Teil von uns werden?",
+ "registration.reason_hint": "Damit hilfst du uns, über deinen Antrag zu entscheiden",
"registration.sign_up": "Registrieren",
"registration.tos": "Nutzungsbedingungen",
"registration.username_unavailable": "Der gewählte Nutzername ist bereits vorhanden.",
@@ -846,15 +846,15 @@
"remote_interaction.divider": "or",
"remote_interaction.favourite": "Proceed to like",
"remote_interaction.favourite_title": "Like a post remotely",
- "remote_interaction.follow": "Proceed to follow",
+ "remote_interaction.follow": "Fortsetzen, um zu folgen",
"remote_interaction.follow_title": "Follow {user} remotely",
"remote_interaction.poll_vote": "Proceed to vote",
"remote_interaction.poll_vote_title": "Vote in a poll remotely",
- "remote_interaction.reblog": "Proceed to repost",
+ "remote_interaction.reblog": "Boost bestätigen",
"remote_interaction.reblog_title": "Reblog a post remotely",
- "remote_interaction.reply": "Proceed to reply",
+ "remote_interaction.reply": "Antwort bestätigen",
"remote_interaction.reply_title": "Reply to a post remotely",
- "remote_interaction.user_not_found_error": "Couldn't find given user",
+ "remote_interaction.user_not_found_error": "Konto nicht gefunden",
"remote_timeline.filter_message": "You are viewing the timeline of {instance}.",
"reply_indicator.cancel": "Abbrechen",
"reply_mentions.account.add": "Add to mentions",
@@ -873,8 +873,8 @@
"reset_password.header": "Set New Password",
"schedule.post_time": "Post Date/Time",
"schedule.remove": "Remove schedule",
- "schedule_button.add_schedule": "Schedule post for later",
- "schedule_button.remove_schedule": "Post immediately",
+ "schedule_button.add_schedule": "Für späteres Absenden planen",
+ "schedule_button.remove_schedule": "Sofort posten",
"scheduled_status.cancel": "Cancel",
"search.action": "Search for “{query}”",
"search.placeholder": "Suche",
@@ -883,11 +883,11 @@
"search_results.statuses": "Beiträge",
"search_results.top": "Top",
"security.codes.fail": "Failed to fetch backup codes",
- "security.confirm.fail": "Incorrect code or password. Try again.",
+ "security.confirm.fail": "Falscher Code oder falsches Passwort. Bitte erneut versuchen.",
"security.delete_account.fail": "Account deletion failed.",
"security.delete_account.success": "Das Konto wurde erfolgreich gelöscht.",
- "security.disable.fail": "Incorrect password. Try again.",
- "security.disable_mfa": "Disable",
+ "security.disable.fail": "Falsches Passwort. Versuche es erneut.",
+ "security.disable_mfa": "Abschalten",
"security.fields.email.label": "Emailaddresse",
"security.fields.new_password.label": "Neues Passwort",
"security.fields.old_password.label": "Bisheriges Passwort",
@@ -897,33 +897,33 @@
"security.headers.tokens": "Sessions",
"security.headers.update_email": "Email ändern",
"security.headers.update_password": "Passwort ändern",
- "security.mfa": "Set up 2-Factor Auth",
+ "security.mfa": "Zwei-Faktoren-Authentifizierung einstellen",
"security.mfa_enabled": "You have multi-factor authentication set up with OTP.",
- "security.mfa_header": "Authorization Methods",
- "security.mfa_setup_hint": "Configure multi-factor authentication with OTP",
+ "security.mfa_header": "Authentifizierungsmethoden",
+ "security.mfa_setup_hint": "OTP-Zwei-Faktoren-Authentifizierung konfigurieren",
"security.qr.fail": "Failed to fetch setup key",
"security.submit": "Änderungen speichern",
"security.submit.delete": "Konto löschen",
- "security.text.delete": "To delete your account, enter your password then click Delete Account. This is a permanent action that cannot be undone. Your account will be destroyed from this server, and a deletion request will be sent to other servers. It's not guaranteed that all servers will purge your account.",
+ "security.text.delete": "Gib dein Passwort ein, um dein Konto zu löschen. Diese Löschung ist dauerhaft und kann nicht rückgängig gemacht werden. Dein Konto wird von diesem Server aus gelöscht und eine Löschungsanfrage wird an andere Server gesendet. Es ist nicht garantiert, dass alle Instanzen dein Konto löschen..",
"security.tokens.revoke": "Widerrufen",
"security.update_email.fail": "Änderung der Emailadresse fehlgeschlagen.",
"security.update_email.success": "Die neue Emailadresse wurde gespeichert.",
"security.update_password.fail": "Änderung des Passwortes fehlgeschlagen.",
"security.update_password.success": "Das Passwort wurde erfolgreich geändert.",
- "settings.change_email": "Change Email",
- "settings.change_password": "Change Password",
- "settings.configure_mfa": "Configure MFA",
- "settings.delete_account": "Delete Account",
+ "settings.change_email": "E-Mail ändern",
+ "settings.change_password": "Passwort ändern",
+ "settings.configure_mfa": "MFA konfigurieren",
+ "settings.delete_account": "Konto löschen",
"settings.edit_profile": "Edit Profile",
- "settings.preferences": "Preferences",
- "settings.profile": "Profile",
- "settings.save.success": "Your preferences have been saved!",
- "settings.security": "Security",
- "settings.settings": "Settings",
+ "settings.preferences": "Einstellungen",
+ "settings.profile": "Profil",
+ "settings.save.success": "Einstellungen wurden gespeichert!",
+ "settings.security": "Sicherheit",
+ "settings.settings": "Einstellungen",
"signup_panel.subtitle": "Jetzt anmelden, um mitzureden.",
"signup_panel.title": "Neu auf {site_title}?",
- "snackbar.view": "View",
- "soapbox_config.authenticated_profile_hint": "Users must be logged-in to view replies and media on user profiles.",
+ "snackbar.view": "Anzeigen",
+ "soapbox_config.authenticated_profile_hint": "Nur angemeldete Nutzer können Antworten und Medien auf Nutzerprofilen sehen.",
"soapbox_config.authenticated_profile_label": "Profiles require authentication",
"soapbox_config.copyright_footer.meta_fields.label_placeholder": "Copyright footer",
"soapbox_config.crypto_address.meta_fields.address_placeholder": "Address",
@@ -934,21 +934,21 @@
"soapbox_config.display_fqn_label": "Display domain (eg @user@domain) for local accounts.",
"soapbox_config.fields.accent_color_label": "Accent color",
"soapbox_config.fields.brand_color_label": "Brand color",
- "soapbox_config.fields.crypto_address.add": "Add new crypto address",
- "soapbox_config.fields.crypto_addresses_label": "Cryptocurrency addresses",
+ "soapbox_config.fields.crypto_address.add": "Cryptocoin-Adresse hinzufügen",
+ "soapbox_config.fields.crypto_addresses_label": "Cryptocoin-Adresse",
"soapbox_config.fields.home_footer.add": "Add new Home Footer Item",
"soapbox_config.fields.home_footer_fields_label": "Home footer items",
"soapbox_config.fields.logo_label": "Logo",
"soapbox_config.fields.promo_panel.add": "Add new Promo panel item",
"soapbox_config.fields.promo_panel_fields_label": "Promo panel items",
- "soapbox_config.fields.theme_label": "Default theme",
+ "soapbox_config.fields.theme_label": "Standard-Theme",
"soapbox_config.greentext_label": "Enable greentext support",
"soapbox_config.hints.crypto_addresses": "Add cryptocurrency addresses so users of your site can donate to you. Order matters, and you must use lowercase ticker values.",
"soapbox_config.hints.home_footer_fields": "You can have custom defined links displayed on the footer of your static pages",
- "soapbox_config.hints.logo": "SVG. At most 2 MB. Will be displayed to 50px height, maintaining aspect ratio",
+ "soapbox_config.hints.logo": "SVG. Maximal 2 MB. Die Darstellung erfolgt mit 50px Höhe, das Seitenverhältnis wird beibehalten",
"soapbox_config.hints.promo_panel_fields": "You can have custom defined links displayed on the right panel of the timelines page.",
"soapbox_config.hints.promo_panel_icons": "{ link }",
- "soapbox_config.hints.promo_panel_icons.link": "Soapbox Icons List",
+ "soapbox_config.hints.promo_panel_icons.link": "Soapbox Icon-Liste",
"soapbox_config.home_footer.meta_fields.label_placeholder": "Label",
"soapbox_config.home_footer.meta_fields.url_placeholder": "URL",
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
@@ -957,13 +957,13 @@
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Speichern",
- "soapbox_config.saved": "Soapbox config saved!",
- "soapbox_config.single_user_mode_hint": "Front page will redirect to a given user profile.",
+ "soapbox_config.saved": "Soapbox-Konfiruation gespeichert!",
+ "soapbox_config.single_user_mode_hint": "Startseite leitet zum Nutzerprofil weiter.",
"soapbox_config.single_user_mode_label": "Single user mode",
"soapbox_config.single_user_mode_profile_hint": "@handle",
"soapbox_config.single_user_mode_profile_label": "Main user handle",
- "soapbox_config.verified_can_edit_name_label": "Allow verified users to edit their own display name.",
- "status.actions.more": "More",
+ "soapbox_config.verified_can_edit_name_label": "Verifizierten Nutzern die Änderung des Anzeigenamens gestatten.",
+ "status.actions.more": "Weitere Einstellungen",
"status.admin_account": "Öffne Moderationsoberfläche für @{name}",
"status.admin_status": "Öffne Beitrag in der Moderationsoberfläche",
"status.block": "@{name} blockieren",
@@ -989,13 +989,13 @@
"status.pin": "Im Profil anheften",
"status.pinned": "Angehefteter Beitrag",
"status.quote": "Beitrag zitieren",
- "status.reactions.cry": "Sad",
+ "status.reactions.cry": "Traurig",
"status.reactions.empty": "No one has reacted to this post yet. When someone does, they will show up here.",
- "status.reactions.heart": "Love",
+ "status.reactions.heart": "Liebe",
"status.reactions.laughing": "Haha",
"status.reactions.like": "Like",
"status.reactions.open_mouth": "Wow",
- "status.reactions.weary": "Weary",
+ "status.reactions.weary": "Überdrüssig",
"status.reactions_expand": "Emoji auswählen",
"status.read_more": "Mehr lesen",
"status.reblog": "Teilen",
diff --git a/app/soapbox/locales/en.json b/app/soapbox/locales/en.json
index f2eaf32c8..b7c280137 100644
--- a/app/soapbox/locales/en.json
+++ b/app/soapbox/locales/en.json
@@ -790,6 +790,7 @@
"poll_button.remove_poll": "Remove poll",
"pre_header.close": "Close",
"preferences.fields.auto_play_gif_label": "Auto-play animated GIFs",
+ "preferences.fields.auto_play_video_label": "Auto-play videos",
"preferences.fields.autoload_more_label": "Automatically load more items when scrolled to the bottom of the page",
"preferences.fields.autoload_timelines_label": "Automatically load new posts when scrolled to the top of the page",
"preferences.fields.boost_modal_label": "Show confirmation dialog before reposting",
diff --git a/app/soapbox/locales/ga.json b/app/soapbox/locales/ga.json
index 49a8e0491..33a652392 100644
--- a/app/soapbox/locales/ga.json
+++ b/app/soapbox/locales/ga.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/he.json b/app/soapbox/locales/he.json
index 7b20f137a..63b242ee1 100644
--- a/app/soapbox/locales/he.json
+++ b/app/soapbox/locales/he.json
@@ -4,7 +4,7 @@
"accordion.expand": "הרחבה",
"account.add_or_remove_from_list": "הוסף או הסר מהרשימות",
"account.badges.bot": "בוט",
- "account.birthday": "Born {date}",
+ "account.birthday": "נולד ב-{date}",
"account.birthday_today": "Birthday is today!",
"account.block": "חסימת @{name}",
"account.block_domain": "להסתיר הכל מהקהילה {domain}",
@@ -122,11 +122,11 @@
"admin_nav.dashboard": "לוח מחוונים",
"admin_nav.reports": "דיווחים",
"alert.unexpected.body": "We're sorry for the interruption. If the problem persists, please reach out to our support team. You may also try to {clearCookies} (this will log you out).",
- "alert.unexpected.browser": "Browser",
+ "alert.unexpected.browser": "דפדפן",
"alert.unexpected.clear_cookies": "נקה קובצי 'עוגיות' ונתוני דפדפן",
"alert.unexpected.links.help": "Help Center",
- "alert.unexpected.links.status": "Status",
- "alert.unexpected.links.support": "Support",
+ "alert.unexpected.links.status": "סטטוס",
+ "alert.unexpected.links.support": "תמיכה",
"alert.unexpected.message": "אירעה שגיאה בלתי צפויה.",
"alert.unexpected.return_home": "חזור הביתה",
"alert.unexpected.title": "אופס!",
@@ -154,8 +154,8 @@
"backups.empty_message": "לא נמצאו גיבויים. {action}",
"backups.empty_message.action": "האם ליצור אחד עכשיו?",
"backups.pending": "בהמתנה",
- "beta.also_available": "Available in:",
- "birthday_panel.title": "Birthdays",
+ "beta.also_available": "זמין ב:",
+ "birthday_panel.title": "ימי הולדת",
"boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה",
"bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.",
"bundle_column_error.retry": "לנסות שוב",
@@ -257,7 +257,7 @@
"column_forbidden.body": "אין לך הרשאה לגשת לדף זה.",
"column_forbidden.title": "אסור",
"column_header.show_settings": "הצגת העדפות",
- "common.cancel": "Cancel",
+ "common.cancel": "בטל",
"community.column_settings.media_only": "רק מדיה",
"community.column_settings.title": "הגדרות ציר זמן מקומי",
"compose.character_counter.title": "השתמת ב{chars} מתוך {maxChars} תווים",
@@ -345,21 +345,21 @@
"crypto_donate_panel.heading": "תרום מטבעות קריפטו",
"crypto_donate_panel.intro.message": "{siteTitle} מקבל תרומות של מטבעות קריפטוגרפיים כדי לממן את השירות שלנו. תודה על תמיכתך!",
"datepicker.hint": "מתוכנן לפרסם ב...",
- "datepicker.next_month": "Next month",
- "datepicker.next_year": "Next year",
- "datepicker.previous_month": "Previous month",
- "datepicker.previous_year": "Previous year",
- "developers.challenge.answer_label": "Answer",
- "developers.challenge.answer_placeholder": "Your answer",
- "developers.challenge.fail": "Wrong answer",
+ "datepicker.next_month": "חודש הבא",
+ "datepicker.next_year": "שנה הבאה",
+ "datepicker.previous_month": "חודש קודם",
+ "datepicker.previous_year": "שנה קודמת",
+ "developers.challenge.answer_label": "תשובה",
+ "developers.challenge.answer_placeholder": "התשובה שלך",
+ "developers.challenge.fail": "תשובה שגויה",
"developers.challenge.message": "What is the result of calling {function}?",
"developers.challenge.submit": "Become a developer",
- "developers.challenge.success": "You are now a developer",
+ "developers.challenge.success": "אתה עכשיו מפתח",
"developers.leave": "You have left developers",
"developers.navigation.app_create_label": "צור אפליקציה",
"developers.navigation.intentional_error_label": "הפעלת שגיאה",
"developers.navigation.leave_developers_label": "Leave developers",
- "developers.navigation.network_error_label": "Network error",
+ "developers.navigation.network_error_label": "שגיאת רשת",
"developers.navigation.settings_store_label": "Settings store",
"developers.navigation.test_timeline_label": "Test timeline",
"developers.settings_store.hint": "It is possible to directly edit your user settings here. BE CAREFUL! Editing this section can break your account, and you will only be able to recover through the API.",
@@ -375,7 +375,7 @@
"edit_federation.save": "שמור",
"edit_federation.success": "הפדרציה של {host} עודכנה",
"edit_federation.unlisted": "לכפות פוסטים כלא רשומים",
- "edit_password.header": "Change Password",
+ "edit_password.header": "שנה סיסמא",
"edit_profile.error": "עדכון הפרופיל נכשל",
"edit_profile.fields.accepts_email_list_label": "הירשם לעדכונים",
"edit_profile.fields.avatar_label": "אווטאר",
@@ -395,9 +395,9 @@
"edit_profile.fields.meta_fields.content_placeholder": "תוכן",
"edit_profile.fields.meta_fields.label_placeholder": "תווית",
"edit_profile.fields.stranger_notifications_label": "חסום התראות מזרים",
- "edit_profile.fields.website_label": "Website",
+ "edit_profile.fields.website_label": "אתר",
"edit_profile.fields.website_placeholder": "Display a Link",
- "edit_profile.header": "Edit Profile",
+ "edit_profile.header": "ערוך פרופיל",
"edit_profile.hints.accepts_email_list": "הצטרפו לעדכוני חדשות ועדכונים שיווקיים.",
"edit_profile.hints.avatar": "PNG, GIF או JPG. יוקטן ל-{size}",
"edit_profile.hints.bot": "חשבון זה מבצע בעיקר פעולות אוטומטיות וייתכן שלא יהיה פיקוח",
@@ -409,13 +409,13 @@
"edit_profile.save": "שמירה",
"edit_profile.success": "הפרופיל נשמר!",
"email_passthru.confirmed.body": "Close this tab and continue the registration process on the {bold} from which you sent this email confirmation.",
- "email_passthru.confirmed.heading": "Email Confirmed!",
+ "email_passthru.confirmed.heading": "אימייל אומת!",
"email_passthru.generic_fail.body": "Please request a new email confirmation.",
- "email_passthru.generic_fail.heading": "Something Went Wrong",
+ "email_passthru.generic_fail.heading": "משהו השתבש",
"email_passthru.token_expired.body": "Your email token has expired. Please request a new email confirmation from the {bold} from which you sent this email confirmation.",
- "email_passthru.token_expired.heading": "Token Expired",
+ "email_passthru.token_expired.heading": "טוקן פג תוקף",
"email_passthru.token_not_found.body": "Your email token was not found. Please request a new email confirmation from the {bold} from which you sent this email confirmation.",
- "email_passthru.token_not_found.heading": "Invalid Token",
+ "email_passthru.token_not_found.heading": "טוקן לא תקין",
"embed.instructions": "ניתן להטמיע את ההודעה באתרך ע\"י העתקת הקוד שלהלן.",
"embed.preview": "דוגמא כיצד זה יראה:",
"emoji_button.activity": "פעילות",
@@ -564,8 +564,8 @@
"import_data.success.blocks": "חסימות יובאו בהצלחה",
"import_data.success.followers": "מעקבים יובאו בהצלחה",
"import_data.success.mutes": "השתקות יובאו בהצלחה",
- "input.password.hide_password": "Hide password",
- "input.password.show_password": "Show password",
+ "input.password.hide_password": "הסתר סיסמא",
+ "input.password.show_password": "הצג סיסמא",
"intervals.full.days": "{number, plural, one {# יום} other {# ימים}}",
"intervals.full.hours": "{number, plural, one {# שעה} other {# שעות}}",
"intervals.full.minutes": "{number, plural, one {# דקה} other {# דקות}}",
@@ -635,7 +635,7 @@
"login.fields.otp_code_hint": "הזן את קוד שני הגורמים שנוצר על ידי אפליקציות הטלפון שלך או השתמש באחד מקודי השחזור שלך",
"login.fields.otp_code_label": "קוד דו גורמי:",
"login.fields.password_placeholder": "סיסמא",
- "login.fields.username_label": "Email or username",
+ "login.fields.username_label": "שם משתמש או אימייל",
"login.log_in": "התחברות",
"login.otp_log_in": "התחברות OTP",
"login.reset_password_hint": "בעיה בהתחברות?",
@@ -659,12 +659,12 @@
"mfa.setup_warning": "רשום את הקודים האלה או שמור אותם במקום מאובטח - אחרת לא תראה אותם שוב. אם תאבד את הגישה לאפליקציית 2FA ולקודי השחזור שלך תינעל מחוץ לחשבון שלך.",
"migration.fields.acct.label": "Handle of the new account",
"migration.fields.acct.placeholder": "username@domain",
- "migration.fields.confirm_password.label": "Current password",
+ "migration.fields.confirm_password.label": "סיסמא נוכחית",
"migration.hint": "This will move your followers to the new account. No other data will be moved. To perform migration, you need to {link} on your new account first.",
"migration.hint.link": "create an account alias",
- "migration.move_account.fail": "Account migration failed.",
- "migration.move_account.success": "Account successfully moved.",
- "migration.submit": "Move followers",
+ "migration.move_account.fail": "העברת חשבון נכשלה.",
+ "migration.move_account.success": "חשבון הועבר בהצלחה.",
+ "migration.submit": "העבר עוקבים",
"missing_description_modal.cancel": "בטל",
"missing_description_modal.continue": "שלח",
"missing_description_modal.description": "המשך בכל זאת?",
@@ -720,8 +720,8 @@
"notifications.clear_confirmation": "להסיר את כל ההתראות? בטוח?",
"notifications.clear_heading": "Clear notifications",
"notifications.column_settings.alert": "התראות לשולחן העבודה",
- "notifications.column_settings.birthdays.category": "Birthdays",
- "notifications.column_settings.birthdays.show": "Show birthday reminders",
+ "notifications.column_settings.birthdays.category": "ימי הולדת",
+ "notifications.column_settings.birthdays.show": "הראה תזכורות לימי הולדת",
"notifications.column_settings.emoji_react": "הגבות אימוג'י:",
"notifications.column_settings.favourite": "מחובבים:",
"notifications.column_settings.filter_bar.advanced": "הצג את כל הקטגוריות",
@@ -891,7 +891,7 @@
"security.fields.email.label": "אימייל",
"security.fields.new_password.label": "סיסמא חדשה",
"security.fields.old_password.label": "סיסמא נוכחית",
- "security.fields.password.label": "Password",
+ "security.fields.password.label": "סיסמא",
"security.fields.password_confirmation.label": "סיסמא חדשה (שוב)",
"security.headers.delete": "מחק חשבון",
"security.headers.tokens": "הפעלות",
@@ -910,16 +910,16 @@
"security.update_email.success": "האימייל עודכן בהצלחה.",
"security.update_password.fail": "עדכון הסיסמא נכשל.",
"security.update_password.success": "הסיסמה עודכנה בהצלחה.",
- "settings.change_email": "Change Email",
- "settings.change_password": "Change Password",
+ "settings.change_email": "שנה אימייל",
+ "settings.change_password": "שנה סיסמא",
"settings.configure_mfa": "Configure MFA",
- "settings.delete_account": "Delete Account",
- "settings.edit_profile": "Edit Profile",
+ "settings.delete_account": "מחק חשבון",
+ "settings.edit_profile": "ערוך פרופיל",
"settings.preferences": "Preferences",
- "settings.profile": "Profile",
+ "settings.profile": "פרופיל",
"settings.save.success": "Your preferences have been saved!",
"settings.security": "Security",
- "settings.settings": "Settings",
+ "settings.settings": "הגדרות",
"signup_panel.subtitle": "הירשם כעת כדי לדון.",
"signup_panel.title": "חדש ל{site_title}?",
"snackbar.view": "View",
@@ -1029,12 +1029,12 @@
"tabs_bar.dashboard": "לוח מחוונים",
"tabs_bar.fediverse": "פדרציה",
"tabs_bar.home": "בית",
- "tabs_bar.more": "More",
+ "tabs_bar.more": "עוד",
"tabs_bar.notifications": "התראות",
"tabs_bar.post": "פוסט",
- "tabs_bar.profile": "Profile",
+ "tabs_bar.profile": "פרופיל",
"tabs_bar.search": "חיפוש",
- "tabs_bar.settings": "Settings",
+ "tabs_bar.settings": "הגדרות",
"tabs_bar.theme_toggle_dark": "עבור לערכת נושא כהה",
"tabs_bar.theme_toggle_light": "עבור לערכת נושא בהירה",
"time_remaining.days": "{number, plural, one {# יום} other {# ימים}} נותרו",
diff --git a/app/soapbox/locales/hi.json b/app/soapbox/locales/hi.json
index 8c03d6c75..1d771918f 100644
--- a/app/soapbox/locales/hi.json
+++ b/app/soapbox/locales/hi.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/hr.json b/app/soapbox/locales/hr.json
index 35a0d7436..f621b06f1 100644
--- a/app/soapbox/locales/hr.json
+++ b/app/soapbox/locales/hr.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/hy.json b/app/soapbox/locales/hy.json
index 007915b13..6daeac5a4 100644
--- a/app/soapbox/locales/hy.json
+++ b/app/soapbox/locales/hy.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Թթել",
diff --git a/app/soapbox/locales/io.json b/app/soapbox/locales/io.json
index 36a86bc2c..603ec4ec4 100644
--- a/app/soapbox/locales/io.json
+++ b/app/soapbox/locales/io.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Siflar",
diff --git a/app/soapbox/locales/ka.json b/app/soapbox/locales/ka.json
index 448f4cae9..a89db38fb 100644
--- a/app/soapbox/locales/ka.json
+++ b/app/soapbox/locales/ka.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "ტუტი",
diff --git a/app/soapbox/locales/lt.json b/app/soapbox/locales/lt.json
index 9fdc5d331..e5d095712 100644
--- a/app/soapbox/locales/lt.json
+++ b/app/soapbox/locales/lt.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/lv.json b/app/soapbox/locales/lv.json
index d1cb0d41c..9d288dc27 100644
--- a/app/soapbox/locales/lv.json
+++ b/app/soapbox/locales/lv.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publicēt",
diff --git a/app/soapbox/locales/mk.json b/app/soapbox/locales/mk.json
index 01e5ae407..a6a935132 100644
--- a/app/soapbox/locales/mk.json
+++ b/app/soapbox/locales/mk.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/ms.json b/app/soapbox/locales/ms.json
index 790f63a45..83e85993b 100644
--- a/app/soapbox/locales/ms.json
+++ b/app/soapbox/locales/ms.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Publish",
diff --git a/app/soapbox/locales/no.json b/app/soapbox/locales/no.json
index 69979e9ca..e055e3d3a 100644
--- a/app/soapbox/locales/no.json
+++ b/app/soapbox/locales/no.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Tut",
diff --git a/app/soapbox/locales/pl.json b/app/soapbox/locales/pl.json
index 9d4471af2..bc583c96c 100644
--- a/app/soapbox/locales/pl.json
+++ b/app/soapbox/locales/pl.json
@@ -42,6 +42,7 @@
"account.posts": "Wpisy",
"account.posts_with_replies": "Wpisy i odpowiedzi",
"account.profile": "Profil",
+ "account.profile_external": "Wyświetl profil na {domain}",
"account.register": "Rejestracja",
"account.remote_follow": "Obserwuj zdalnie",
"account.remove_from_followers": "Usuń tego obserwującego",
@@ -334,6 +335,8 @@
"compose_form.spoiler.marked": "Tekst jest ukryty za ostrzeżeniem",
"compose_form.spoiler.unmarked": "Tekst nie jest ukryty",
"compose_form.spoiler_placeholder": "Wprowadź swoje ostrzeżenie o zawartości",
+ "compose_form.spoiler_remove": "Usuń zaznaczenie jako wrażliwe",
+ "compose_form.spoiler_title": "Treści wrażliwe",
"confirmation_modal.cancel": "Anuluj",
"confirmation_resend.fields.username_placeholder": "Adres e-mail",
"confirmation_resend.request": "Wyślij ponownie instrukcje potwierdzania",
@@ -386,6 +389,9 @@
"confirmations.remove_from_followers.message": "Czy na pewno chcesz usunąć {name} ze swoich obserwowanych?",
"confirmations.reply.confirm": "Odpowiedz",
"confirmations.reply.message": "W ten sposób utracisz wpis który obecnie tworzysz. Czy na pewno chcesz to zrobić?",
+ "confirmations.revoke_session.confirm": "Unieważnij",
+ "confirmations.revoke_session.heading": "Uniewaznij obecną sesję",
+ "confirmations.revoke_session.message": "Zaraz unieważnisz swoją obecną sesję. Zostaniesz wylogowywany(-a).",
"confirmations.scheduled_status_delete.confirm": "Anuluj",
"confirmations.scheduled_status_delete.heading": "Anuluj zaplanowany wpis",
"confirmations.scheduled_status_delete.message": "Czy na pewno chcesz anulować ten zaplanowany wpis?",
@@ -475,6 +481,7 @@
"email_passthru.fail.expired": "Token z maila wygasł.",
"email_passthru.fail.generic": "Nie udało się potwierdzić adresu e-mail",
"email_passthru.fail.not_found": "Token z maila jest nieprawidłowy.",
+ "email_passthru.fail.invalid_token": "Wprowadzony token jest nieprawidłowy",
"email_passthru.generic_fail.body": "Poproś o nowe potwierdzenie adresu e-mail.",
"email_passthru.generic_fail.heading": "Coś poszło nie tak",
"email_passthru.success": "Twój adres e-mail został zweryfikowany",
@@ -485,6 +492,8 @@
"email_verification.exists": "Ten adres e-mail już jest zajęty",
"email_verification.fail": "Nie udało się zażądać weryfikacji e-mail",
"email_verification.header": "Wprowadź adres e-mail",
+ "email_verification.success": "Pomyślnie wysłano weryfikacyjny e-mail.",
+ "email_verification.taken": "jest zajęty",
"embed.instructions": "Osadź ten wpis na swojej stronie wklejając poniższy kod.",
"embed.preview": "Tak będzie to wyglądać:",
"emoji_button.activity": "Aktywność",
@@ -903,6 +912,7 @@
"poll_button.remove_poll": "Usuń głosowanie",
"pre_header.close": "Zamknij",
"preferences.fields.auto_play_gif_label": "Automatycznie odtwarzaj anonimowe GIF-y",
+ "preferences.fields.auto_play_video_label": "Automatycznie odtwarzaj filmy",
"preferences.fields.autoload_more_label": "Automatycznie ładuj więcej wpisów po przewinięciu na dół strony",
"preferences.fields.autoload_timelines_label": "Automatycznie załaduj nowe wpisy po przewinięciu na szczyt strony",
"preferences.fields.boost_modal_label": "Pokazuj prośbę o potwierdzenie przed podbiciem",
@@ -981,6 +991,7 @@
"registrations.success": "Witamy na {siteTitle}!",
"registrations.tagline": "Media społecznościowe, które nie wykluczają",
"registrations.unprocessable_entity": "Ta nazwa użytkownika jest już zajęta.",
+ "registrations.username.hint": "Może zawierać wyłącznie A-Z, 0-9 i podkreślniki",
"relative_time.days": "{number} dni",
"relative_time.hours": "{number} godz.",
"relative_time.just_now": "teraz",
@@ -1012,6 +1023,7 @@
"reply_mentions.account.remove": "Usuń z wspomnianych",
"reply_mentions.more": "{count} więcej",
"reply_mentions.reply": "
W odpowiedzi do {accounts}",
+ "reply_mentions.reply.hoverable": "
W odpowiedzi do {accounts}",
"reply_mentions.reply_empty": "W odpowiedzi na wpis",
"report.block": "Zablokuj {target}",
"report.block_hint": "Czy chcesz też zablokować to konto?",
@@ -1092,8 +1104,9 @@
"signup_panel.subtitle": "Zarejestruj się, aby przyłączyć się do dyskusji.",
"signup_panel.title": "Nowi na {site_title}?",
"site_preview.preview": "Podgląd",
- "sms_verification.header": "Wprowadź numer telefonu",
+ "sms_verification.expired": "Twój token SMS wygasł.",
"sms_verification.fail": "Nie udało się wysłać kodu weryfikującego na Twój numer telefonu.",
+ "sms_verification.header": "Wprowadź numer telefonu",
"sms_verification.invalid": "Twój token SMS wygasł.",
"sms_verification.modal.enter_code": "Wysłaliśmy Ci 6-cyfrowy kod SMS-em. Wprowadź go poniżej.",
"sms_verification.modal.resend_code": "Wysłać kod weryfikacyjny ponownie?",
@@ -1213,10 +1226,10 @@
"status.show_more": "Rozwiń",
"status.show_more_all": "Rozwiń wszystkie",
"status.show_original": "Pokaż oryginalny wpis",
- "status.title": "Wpis",
+ "status.title": "Wpis @{username}",
"status.title_direct": "Wiadomość bezpośrednia",
- "status.translated_from_with": "Przetłumaczono z {lang} z użyciem {provider}",
"status.translate": "Przetłumacz wpis",
+ "status.translated_from_with": "Przetłumaczono z {lang} z użyciem {provider}",
"status.unbookmark": "Usuń z zakładek",
"status.unbookmarked": "Usunięto z zakładek.",
"status.unmute_conversation": "Cofnij wyciszenie konwersacji",
@@ -1227,8 +1240,16 @@
"streamfield.add": "Dodaj",
"streamfield.remove": "Usuń",
"suggestions.dismiss": "Odrzuć sugestię",
+ "sw.restart": "Restartuj",
+ "sw.state.active": "Aktywny",
+ "sw.state.loading": "Ładowanie…",
+ "sw.state.unavailable": "Niedostępny",
+ "sw.state.unknown": "Nieznany",
+ "sw.state.waiting": "Oczekiwanie",
+ "sw.status": "Stan",
"sw.update": "Aktualizacja",
"sw.update_text": "Dostępna jest aktualizacja.",
+ "sw.url": "Adres URL skryptu",
"tabs_bar.all": "Wszystkie",
"tabs_bar.apps": "Aplikacje",
"tabs_bar.chats": "Rozmowy",
diff --git a/app/soapbox/locales/ro.json b/app/soapbox/locales/ro.json
index 44f37a7d2..8376f6a95 100644
--- a/app/soapbox/locales/ro.json
+++ b/app/soapbox/locales/ro.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Postează",
diff --git a/app/soapbox/locales/sq.json b/app/soapbox/locales/sq.json
index 7100397a0..96587b3ae 100644
--- a/app/soapbox/locales/sq.json
+++ b/app/soapbox/locales/sq.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Mesazh",
diff --git a/app/soapbox/locales/sr-Latn.json b/app/soapbox/locales/sr-Latn.json
index fc494140f..2a1f3339a 100644
--- a/app/soapbox/locales/sr-Latn.json
+++ b/app/soapbox/locales/sr-Latn.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Tutni",
diff --git a/app/soapbox/locales/sr.json b/app/soapbox/locales/sr.json
index 975d58170..b739b3713 100644
--- a/app/soapbox/locales/sr.json
+++ b/app/soapbox/locales/sr.json
@@ -274,7 +274,7 @@
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Remove this choice",
+ "compose_form.poll.remove_option": "Delete",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Труби",
diff --git a/app/soapbox/main.tsx b/app/soapbox/main.tsx
index 84ea3739a..b4a0eeaac 100644
--- a/app/soapbox/main.tsx
+++ b/app/soapbox/main.tsx
@@ -8,7 +8,7 @@ import { defineMessages } from 'react-intl';
import snackbar from 'soapbox/actions/snackbar';
import { setSwUpdating } from 'soapbox/actions/sw';
-import * as BuildConfig from 'soapbox/build_config';
+import * as BuildConfig from 'soapbox/build-config';
import { store } from 'soapbox/store';
import { printConsoleWarning } from 'soapbox/utils/console';
diff --git a/app/soapbox/middleware/sounds.ts b/app/soapbox/middleware/sounds.ts
index 94ba15313..1d600306f 100644
--- a/app/soapbox/middleware/sounds.ts
+++ b/app/soapbox/middleware/sounds.ts
@@ -39,21 +39,21 @@ export default function soundsMiddleware(): ThunkMiddleware {
const soundCache: Record
= {
boop: createAudio([
{
- src: require('../../sounds/boop.ogg'),
+ src: require('../../assets/sounds/boop.ogg'),
type: 'audio/ogg',
},
{
- src: require('../../sounds/boop.mp3'),
+ src: require('../../assets/sounds/boop.mp3'),
type: 'audio/mpeg',
},
]),
chat: createAudio([
{
- src: require('../../sounds/chat.oga'),
+ src: require('../../assets/sounds/chat.oga'),
type: 'audio/ogg',
},
{
- src: require('../../sounds/chat.mp3'),
+ src: require('../../assets/sounds/chat.mp3'),
type: 'audio/mpeg',
},
]),
diff --git a/app/soapbox/monitoring.ts b/app/soapbox/monitoring.ts
index cfa800bde..da9bf46e7 100644
--- a/app/soapbox/monitoring.ts
+++ b/app/soapbox/monitoring.ts
@@ -1,4 +1,4 @@
-import * as BuildConfig from 'soapbox/build_config';
+import * as BuildConfig from 'soapbox/build-config';
import type { CaptureContext } from '@sentry/types';
diff --git a/app/soapbox/normalizers/__tests__/account.test.ts b/app/soapbox/normalizers/__tests__/account.test.ts
index b5f4f5a75..6c2abc2b3 100644
--- a/app/soapbox/normalizers/__tests__/account.test.ts
+++ b/app/soapbox/normalizers/__tests__/account.test.ts
@@ -2,8 +2,8 @@ import { Record as ImmutableRecord, fromJS } from 'immutable';
import { normalizeAccount } from '../account';
-const AVATAR_MISSING = require('images/avatar-missing.png');
-const HEADER_MISSING = require('images/header-missing.png');
+const AVATAR_MISSING = require('assets/images/avatar-missing.png');
+const HEADER_MISSING = require('assets/images/header-missing.png');
describe('normalizeAccount()', () => {
it('adds base fields', () => {
@@ -131,15 +131,13 @@ describe('normalizeAccount()', () => {
it('emojifies display name as `display_name_html`', () => {
const account = require('soapbox/__fixtures__/account-with-emojis.json');
const result = normalizeAccount(account);
- const expected = 'Alex Gleason
';
- expect(result.display_name_html).toBe(expected);
+ expect(result.display_name_html).toContain('emojione');
});
it('emojifies note as `note_emojified`', () => {
const account = require('soapbox/__fixtures__/account-with-emojis.json');
const result = normalizeAccount(account);
- const expected = 'I create Fediverse software that empowers people online. 
I'm vegan btw
Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.';
- expect(result.note_emojified).toBe(expected);
+ expect(result.note_emojified).toContain('emojione');
});
it('unescapes HTML note as `note_plain`', () => {
@@ -154,8 +152,8 @@ describe('normalizeAccount()', () => {
const result = normalizeAccount(account);
const field = result.fields.get(1);
- expect(field?.name_emojified).toBe('Soapbox
');
- expect(field?.value_emojified).toBe('https://soapbox.pub
');
+ expect(field?.name_emojified).toContain('emojione');
+ expect(field?.value_emojified).toContain('emojione');
expect(field?.value_plain).toBe('https://soapbox.pub :soapbox:');
});
diff --git a/app/soapbox/normalizers/__tests__/instance.test.ts b/app/soapbox/normalizers/__tests__/instance.test.ts
index 0df95fcb3..87088b30d 100644
--- a/app/soapbox/normalizers/__tests__/instance.test.ts
+++ b/app/soapbox/normalizers/__tests__/instance.test.ts
@@ -197,7 +197,7 @@ describe('normalizeInstance()', () => {
const instance = require('soapbox/__fixtures__/akkoma-instance.json');
const result = normalizeInstance(instance);
- expect(result.version).toEqual('2.7.2 (compatible; Pleroma 2.4.5+akkoma)');
+ expect(result.version).toEqual('2.7.2 (compatible; Pleroma 2.4.50+akkoma)');
});
});
diff --git a/app/soapbox/normalizers/__tests__/poll.test.ts b/app/soapbox/normalizers/__tests__/poll.test.ts
index b7ba0a46f..d5226e938 100644
--- a/app/soapbox/normalizers/__tests__/poll.test.ts
+++ b/app/soapbox/normalizers/__tests__/poll.test.ts
@@ -38,7 +38,7 @@ describe('normalizePoll()', () => {
// Emojifies poll options
expect(result.options.get(1)?.title_emojified)
- .toEqual('Custom emoji
');
+ .toContain('emojione');
// Parses emojis as Immutable.Record's
expect(ImmutableRecord.isRecord(result.emojis.get(0))).toBe(true);
diff --git a/app/soapbox/normalizers/__tests__/status.test.ts b/app/soapbox/normalizers/__tests__/status.test.ts
index b60373975..5ad29d926 100644
--- a/app/soapbox/normalizers/__tests__/status.test.ts
+++ b/app/soapbox/normalizers/__tests__/status.test.ts
@@ -183,7 +183,7 @@ describe('normalizeStatus()', () => {
// Emojifies poll options
expect(poll.options.get(1)?.title_emojified)
- .toEqual('Custom emoji
');
+ .toContain('emojione');
// Parses emojis as Immutable.Record's
expect(ImmutableRecord.isRecord(poll.emojis.get(0))).toBe(true);
diff --git a/app/soapbox/normalizers/account.ts b/app/soapbox/normalizers/account.ts
index 97c640886..07d3ec1e6 100644
--- a/app/soapbox/normalizers/account.ts
+++ b/app/soapbox/normalizers/account.ts
@@ -98,7 +98,7 @@ const normalizePleromaLegacyFields = (account: ImmutableMap) => {
const normalizeAvatar = (account: ImmutableMap) => {
const avatar = account.get('avatar');
const avatarStatic = account.get('avatar_static');
- const missing = require('images/avatar-missing.png');
+ const missing = require('assets/images/avatar-missing.png');
return account.withMutations(account => {
account.set('avatar', avatar || avatarStatic || missing);
@@ -110,7 +110,7 @@ const normalizeAvatar = (account: ImmutableMap) => {
const normalizeHeader = (account: ImmutableMap) => {
const header = account.get('header');
const headerStatic = account.get('header_static');
- const missing = require('images/header-missing.png');
+ const missing = require('assets/images/header-missing.png');
return account.withMutations(account => {
account.set('header', header || headerStatic || missing);
diff --git a/app/soapbox/normalizers/admin_account.ts b/app/soapbox/normalizers/admin-account.ts
similarity index 100%
rename from app/soapbox/normalizers/admin_account.ts
rename to app/soapbox/normalizers/admin-account.ts
diff --git a/app/soapbox/normalizers/admin_report.ts b/app/soapbox/normalizers/admin-report.ts
similarity index 100%
rename from app/soapbox/normalizers/admin_report.ts
rename to app/soapbox/normalizers/admin-report.ts
diff --git a/app/soapbox/normalizers/announcement_reaction.ts b/app/soapbox/normalizers/announcement-reaction.ts
similarity index 100%
rename from app/soapbox/normalizers/announcement_reaction.ts
rename to app/soapbox/normalizers/announcement-reaction.ts
diff --git a/app/soapbox/normalizers/announcement.ts b/app/soapbox/normalizers/announcement.ts
index 59bc087ae..b7573091c 100644
--- a/app/soapbox/normalizers/announcement.ts
+++ b/app/soapbox/normalizers/announcement.ts
@@ -14,7 +14,7 @@ import emojify from 'soapbox/features/emoji/emoji';
import { normalizeEmoji } from 'soapbox/normalizers/emoji';
import { makeEmojiMap } from 'soapbox/utils/normalizers';
-import { normalizeAnnouncementReaction } from './announcement_reaction';
+import { normalizeAnnouncementReaction } from './announcement-reaction';
import { normalizeMention } from './mention';
import type { AnnouncementReaction, Emoji, Mention } from 'soapbox/types/entities';
diff --git a/app/soapbox/normalizers/chat_message.ts b/app/soapbox/normalizers/chat-message.ts
similarity index 100%
rename from app/soapbox/normalizers/chat_message.ts
rename to app/soapbox/normalizers/chat-message.ts
diff --git a/app/soapbox/normalizers/index.ts b/app/soapbox/normalizers/index.ts
index 9fdc04f68..0d2d1622c 100644
--- a/app/soapbox/normalizers/index.ts
+++ b/app/soapbox/normalizers/index.ts
@@ -1,12 +1,12 @@
export { AccountRecord, FieldRecord, normalizeAccount } from './account';
-export { AdminAccountRecord, normalizeAdminAccount } from './admin_account';
-export { AdminReportRecord, normalizeAdminReport } from './admin_report';
+export { AdminAccountRecord, normalizeAdminAccount } from './admin-account';
+export { AdminReportRecord, normalizeAdminReport } from './admin-report';
export { AnnouncementRecord, normalizeAnnouncement } from './announcement';
-export { AnnouncementReactionRecord, normalizeAnnouncementReaction } from './announcement_reaction';
+export { AnnouncementReactionRecord, normalizeAnnouncementReaction } from './announcement-reaction';
export { AttachmentRecord, normalizeAttachment } from './attachment';
export { CardRecord, normalizeCard } from './card';
export { ChatRecord, normalizeChat } from './chat';
-export { ChatMessageRecord, normalizeChatMessage } from './chat_message';
+export { ChatMessageRecord, normalizeChatMessage } from './chat-message';
export { EmojiRecord, normalizeEmoji } from './emoji';
export { FilterRecord, normalizeFilter } from './filter';
export { HistoryRecord, normalizeHistory } from './history';
@@ -17,8 +17,8 @@ export { NotificationRecord, normalizeNotification } from './notification';
export { PollRecord, PollOptionRecord, normalizePoll } from './poll';
export { RelationshipRecord, normalizeRelationship } from './relationship';
export { StatusRecord, normalizeStatus } from './status';
-export { StatusEditRecord, normalizeStatusEdit } from './status_edit';
+export { StatusEditRecord, normalizeStatusEdit } from './status-edit';
export { TagRecord, normalizeTag } from './tag';
export { AdRecord, normalizeAd } from './soapbox/ad';
-export { SoapboxConfigRecord, normalizeSoapboxConfig } from './soapbox/soapbox_config';
+export { SoapboxConfigRecord, normalizeSoapboxConfig } from './soapbox/soapbox-config';
diff --git a/app/soapbox/normalizers/instance.ts b/app/soapbox/normalizers/instance.ts
index ff55ef4a5..7a33343f7 100644
--- a/app/soapbox/normalizers/instance.ts
+++ b/app/soapbox/normalizers/instance.ts
@@ -103,7 +103,7 @@ const fixAkkoma = (instance: ImmutableMap) => {
const version: string = instance.get('version', '');
if (version.includes('Akkoma')) {
- return instance.set('version', '2.7.2 (compatible; Pleroma 2.4.5+akkoma)');
+ return instance.set('version', '2.7.2 (compatible; Pleroma 2.4.50+akkoma)');
} else {
return instance;
}
diff --git a/app/soapbox/normalizers/soapbox/__tests__/soapbox_config-test.ts b/app/soapbox/normalizers/soapbox/__tests__/soapbox-config.test.ts
similarity index 95%
rename from app/soapbox/normalizers/soapbox/__tests__/soapbox_config-test.ts
rename to app/soapbox/normalizers/soapbox/__tests__/soapbox-config.test.ts
index e48198ecc..9b70eba36 100644
--- a/app/soapbox/normalizers/soapbox/__tests__/soapbox_config-test.ts
+++ b/app/soapbox/normalizers/soapbox/__tests__/soapbox-config.test.ts
@@ -1,6 +1,6 @@
import { Record as ImmutableRecord } from 'immutable';
-import { normalizeSoapboxConfig } from '../soapbox_config';
+import { normalizeSoapboxConfig } from '../soapbox-config';
describe('normalizeSoapboxConfig()', () => {
it('adds base fields', () => {
diff --git a/app/soapbox/normalizers/soapbox/soapbox_config.ts b/app/soapbox/normalizers/soapbox/soapbox-config.ts
similarity index 100%
rename from app/soapbox/normalizers/soapbox/soapbox_config.ts
rename to app/soapbox/normalizers/soapbox/soapbox-config.ts
diff --git a/app/soapbox/normalizers/status_edit.ts b/app/soapbox/normalizers/status-edit.ts
similarity index 100%
rename from app/soapbox/normalizers/status_edit.ts
rename to app/soapbox/normalizers/status-edit.ts
diff --git a/app/soapbox/pages/admin_page.tsx b/app/soapbox/pages/admin-page.tsx
similarity index 88%
rename from app/soapbox/pages/admin_page.tsx
rename to app/soapbox/pages/admin-page.tsx
index 909955abe..eeccc004c 100644
--- a/app/soapbox/pages/admin_page.tsx
+++ b/app/soapbox/pages/admin-page.tsx
@@ -1,12 +1,12 @@
import React from 'react';
import { Layout } from 'soapbox/components/ui';
-import BundleContainer from 'soapbox/features/ui/containers/bundle_container';
+import BundleContainer from 'soapbox/features/ui/containers/bundle-container';
import {
LatestAccountsPanel,
} from 'soapbox/features/ui/util/async-components';
-import LinkFooter from '../features/ui/components/link_footer';
+import LinkFooter from '../features/ui/components/link-footer';
const AdminPage: React.FC = ({ children }) => {
return (
diff --git a/app/soapbox/pages/default_page.tsx b/app/soapbox/pages/default-page.tsx
similarity index 94%
rename from app/soapbox/pages/default_page.tsx
rename to app/soapbox/pages/default-page.tsx
index f6561cbf0..c95ca5bf1 100644
--- a/app/soapbox/pages/default_page.tsx
+++ b/app/soapbox/pages/default-page.tsx
@@ -1,7 +1,7 @@
import React from 'react';
-import LinkFooter from 'soapbox/features/ui/components/link_footer';
-import BundleContainer from 'soapbox/features/ui/containers/bundle_container';
+import LinkFooter from 'soapbox/features/ui/components/link-footer';
+import BundleContainer from 'soapbox/features/ui/containers/bundle-container';
import {
WhoToFollowPanel,
TrendsPanel,
diff --git a/app/soapbox/pages/empty_page.tsx b/app/soapbox/pages/empty-page.tsx
similarity index 100%
rename from app/soapbox/pages/empty_page.tsx
rename to app/soapbox/pages/empty-page.tsx
diff --git a/app/soapbox/pages/home_page.tsx b/app/soapbox/pages/home-page.tsx
similarity index 96%
rename from app/soapbox/pages/home_page.tsx
rename to app/soapbox/pages/home-page.tsx
index 2d73673d7..d3908fd1e 100644
--- a/app/soapbox/pages/home_page.tsx
+++ b/app/soapbox/pages/home-page.tsx
@@ -2,7 +2,7 @@ import React, { useRef } from 'react';
import { Link } from 'react-router-dom';
import FeedCarousel from 'soapbox/features/feed-filtering/feed-carousel';
-import LinkFooter from 'soapbox/features/ui/components/link_footer';
+import LinkFooter from 'soapbox/features/ui/components/link-footer';
import {
WhoToFollowPanel,
TrendsPanel,
@@ -19,7 +19,7 @@ import { useAppSelector, useOwnAccount, useFeatures, useSoapboxConfig } from 'so
import Avatar from '../components/avatar';
import { Card, CardBody, Layout } from '../components/ui';
import ComposeForm from '../features/compose/components/compose-form';
-import BundleContainer from '../features/ui/containers/bundle_container';
+import BundleContainer from '../features/ui/containers/bundle-container';
// import GroupSidebarPanel from '../features/groups/sidebar_panel';
const HomePage: React.FC = ({ children }) => {
diff --git a/app/soapbox/pages/profile_page.tsx b/app/soapbox/pages/profile-page.tsx
similarity index 98%
rename from app/soapbox/pages/profile_page.tsx
rename to app/soapbox/pages/profile-page.tsx
index 1cc5f64fe..95f35bc6a 100644
--- a/app/soapbox/pages/profile_page.tsx
+++ b/app/soapbox/pages/profile-page.tsx
@@ -4,8 +4,8 @@ import { Redirect, useHistory } from 'react-router-dom';
import { Column, Layout, Tabs } from 'soapbox/components/ui';
import Header from 'soapbox/features/account/components/header';
-import LinkFooter from 'soapbox/features/ui/components/link_footer';
-import BundleContainer from 'soapbox/features/ui/containers/bundle_container';
+import LinkFooter from 'soapbox/features/ui/components/link-footer';
+import BundleContainer from 'soapbox/features/ui/containers/bundle-container';
import {
WhoToFollowPanel,
ProfileInfoPanel,
diff --git a/app/soapbox/pages/remote_instance_page.tsx b/app/soapbox/pages/remote-instance-page.tsx
similarity index 94%
rename from app/soapbox/pages/remote_instance_page.tsx
rename to app/soapbox/pages/remote-instance-page.tsx
index e3488908c..92f1eb56a 100644
--- a/app/soapbox/pages/remote_instance_page.tsx
+++ b/app/soapbox/pages/remote-instance-page.tsx
@@ -1,7 +1,7 @@
import React from 'react';
-import LinkFooter from 'soapbox/features/ui/components/link_footer';
-import BundleContainer from 'soapbox/features/ui/containers/bundle_container';
+import LinkFooter from 'soapbox/features/ui/components/link-footer';
+import BundleContainer from 'soapbox/features/ui/containers/bundle-container';
import {
PromoPanel,
InstanceInfoPanel,
diff --git a/app/soapbox/pages/status_page.tsx b/app/soapbox/pages/status-page.tsx
similarity index 91%
rename from app/soapbox/pages/status_page.tsx
rename to app/soapbox/pages/status-page.tsx
index c0c99abd7..feb9de202 100644
--- a/app/soapbox/pages/status_page.tsx
+++ b/app/soapbox/pages/status-page.tsx
@@ -1,6 +1,6 @@
import React from 'react';
-import LinkFooter from 'soapbox/features/ui/components/link_footer';
+import LinkFooter from 'soapbox/features/ui/components/link-footer';
import {
WhoToFollowPanel,
TrendsPanel,
@@ -10,7 +10,7 @@ import {
import { useAppSelector, useFeatures } from 'soapbox/hooks';
import { Layout } from '../components/ui';
-import BundleContainer from '../features/ui/containers/bundle_container';
+import BundleContainer from '../features/ui/containers/bundle-container';
interface IStatusPage {
children: React.ReactNode,
diff --git a/app/soapbox/performance.ts b/app/soapbox/performance.ts
index b524b6e15..36f9948a6 100644
--- a/app/soapbox/performance.ts
+++ b/app/soapbox/performance.ts
@@ -1,6 +1,6 @@
'use strict';
-import * as BuildConfig from 'soapbox/build_config';
+import * as BuildConfig from 'soapbox/build-config';
//
// Tools for performance debugging, only enabled in development mode.
diff --git a/app/soapbox/reducers/__tests__/accounts_counters.test.ts b/app/soapbox/reducers/__tests__/accounts-counters.test.ts
similarity index 97%
rename from app/soapbox/reducers/__tests__/accounts_counters.test.ts
rename to app/soapbox/reducers/__tests__/accounts-counters.test.ts
index 114f28b54..f1259696a 100644
--- a/app/soapbox/reducers/__tests__/accounts_counters.test.ts
+++ b/app/soapbox/reducers/__tests__/accounts-counters.test.ts
@@ -1,6 +1,6 @@
import { Map as ImmutableMap } from 'immutable';
-import reducer from '../accounts_counters';
+import reducer from '../accounts-counters';
// import { ACCOUNT_FOLLOW_SUCCESS, ACCOUNT_UNFOLLOW_SUCCESS } from 'soapbox/actions/accounts';
// import relationship from 'soapbox/__fixtures__/relationship.json';
// import accounts_counter_initial from 'soapbox/__fixtures__/accounts_counter_initial.json';
diff --git a/app/soapbox/reducers/__tests__/custom_emojis.test.ts b/app/soapbox/reducers/__tests__/custom-emojis.test.ts
similarity index 84%
rename from app/soapbox/reducers/__tests__/custom_emojis.test.ts
rename to app/soapbox/reducers/__tests__/custom-emojis.test.ts
index e2991d5fb..294c9c0cf 100644
--- a/app/soapbox/reducers/__tests__/custom_emojis.test.ts
+++ b/app/soapbox/reducers/__tests__/custom-emojis.test.ts
@@ -1,6 +1,6 @@
import { List as ImmutableList } from 'immutable';
-import reducer from '../custom_emojis';
+import reducer from '../custom-emojis';
describe('custom_emojis reducer', () => {
it('should return the initial state', () => {
diff --git a/app/soapbox/reducers/__tests__/domain_lists.test.ts b/app/soapbox/reducers/__tests__/domain-lists.test.ts
similarity index 85%
rename from app/soapbox/reducers/__tests__/domain_lists.test.ts
rename to app/soapbox/reducers/__tests__/domain-lists.test.ts
index 573ec9262..7ba4d32f7 100644
--- a/app/soapbox/reducers/__tests__/domain_lists.test.ts
+++ b/app/soapbox/reducers/__tests__/domain-lists.test.ts
@@ -1,4 +1,4 @@
-import reducer from '../domain_lists';
+import reducer from '../domain-lists';
describe('domain_lists reducer', () => {
it('should return the initial state', () => {
diff --git a/app/soapbox/reducers/__tests__/dropdown_menu.test.ts b/app/soapbox/reducers/__tests__/dropdown-menu.test.ts
similarity index 85%
rename from app/soapbox/reducers/__tests__/dropdown_menu.test.ts
rename to app/soapbox/reducers/__tests__/dropdown-menu.test.ts
index 676af592f..5168d5e73 100644
--- a/app/soapbox/reducers/__tests__/dropdown_menu.test.ts
+++ b/app/soapbox/reducers/__tests__/dropdown-menu.test.ts
@@ -1,4 +1,4 @@
-import reducer from '../dropdown_menu';
+import reducer from '../dropdown-menu';
describe('dropdown_menu reducer', () => {
it('should return the initial state', () => {
diff --git a/app/soapbox/reducers/__tests__/list_adder.test.ts b/app/soapbox/reducers/__tests__/list-adder.test.ts
similarity index 98%
rename from app/soapbox/reducers/__tests__/list_adder.test.ts
rename to app/soapbox/reducers/__tests__/list-adder.test.ts
index 3989cf5e7..f3ede138c 100644
--- a/app/soapbox/reducers/__tests__/list_adder.test.ts
+++ b/app/soapbox/reducers/__tests__/list-adder.test.ts
@@ -2,7 +2,7 @@ import { List as ImmutableList, Record as ImmutableRecord } from 'immutable';
import * as actions from 'soapbox/actions/lists';
-import reducer from '../list_adder';
+import reducer from '../list-adder';
describe('list_adder reducer', () => {
it('should return the initial state', () => {
diff --git a/app/soapbox/reducers/__tests__/push_notifications.test.ts b/app/soapbox/reducers/__tests__/push-notifications.test.ts
similarity index 90%
rename from app/soapbox/reducers/__tests__/push_notifications.test.ts
rename to app/soapbox/reducers/__tests__/push-notifications.test.ts
index 6afcba258..89778cf23 100644
--- a/app/soapbox/reducers/__tests__/push_notifications.test.ts
+++ b/app/soapbox/reducers/__tests__/push-notifications.test.ts
@@ -1,4 +1,4 @@
-import reducer from '../push_notifications';
+import reducer from '../push-notifications';
describe('push_notifications reducer', () => {
it('should return the initial state', () => {
diff --git a/app/soapbox/reducers/__tests__/status_lists.test.ts b/app/soapbox/reducers/__tests__/status-lists.test.ts
similarity index 94%
rename from app/soapbox/reducers/__tests__/status_lists.test.ts
rename to app/soapbox/reducers/__tests__/status-lists.test.ts
index 2333df89a..b01daee09 100644
--- a/app/soapbox/reducers/__tests__/status_lists.test.ts
+++ b/app/soapbox/reducers/__tests__/status-lists.test.ts
@@ -1,4 +1,4 @@
-import reducer from '../status_lists';
+import reducer from '../status-lists';
describe('status_lists reducer', () => {
it('should return the initial state', () => {
diff --git a/app/soapbox/reducers/__tests__/statuses.test.ts b/app/soapbox/reducers/__tests__/statuses.test.ts
index 06d82c871..1db00ec64 100644
--- a/app/soapbox/reducers/__tests__/statuses.test.ts
+++ b/app/soapbox/reducers/__tests__/statuses.test.ts
@@ -118,7 +118,7 @@ describe('statuses reducer', () => {
const status = require('soapbox/__fixtures__/status-custom-emoji.json');
const action = { type: STATUS_IMPORT, status };
- const expected = 'Hello
world
test
';
+ const expected = 'Hello
world
test
';
const result = reducer(undefined, action).getIn(['AGm7uC9DaAIGUa4KYK', 'contentHtml']);
expect(result).toBe(expected);
diff --git a/app/soapbox/reducers/__tests__/user_lists.test.ts b/app/soapbox/reducers/__tests__/user-lists.test.ts
similarity index 95%
rename from app/soapbox/reducers/__tests__/user_lists.test.ts
rename to app/soapbox/reducers/__tests__/user-lists.test.ts
index fa23f845f..396ca7239 100644
--- a/app/soapbox/reducers/__tests__/user_lists.test.ts
+++ b/app/soapbox/reducers/__tests__/user-lists.test.ts
@@ -1,6 +1,6 @@
import { OrderedSet as ImmutableOrderedSet } from 'immutable';
-import reducer from '../user_lists';
+import reducer from '../user-lists';
describe('user_lists reducer', () => {
it('should return the initial state', () => {
diff --git a/app/soapbox/reducers/account_notes.ts b/app/soapbox/reducers/account-notes.ts
similarity index 100%
rename from app/soapbox/reducers/account_notes.ts
rename to app/soapbox/reducers/account-notes.ts
diff --git a/app/soapbox/reducers/accounts_counters.ts b/app/soapbox/reducers/accounts-counters.ts
similarity index 100%
rename from app/soapbox/reducers/accounts_counters.ts
rename to app/soapbox/reducers/accounts-counters.ts
diff --git a/app/soapbox/reducers/accounts_meta.ts b/app/soapbox/reducers/accounts-meta.ts
similarity index 100%
rename from app/soapbox/reducers/accounts_meta.ts
rename to app/soapbox/reducers/accounts-meta.ts
diff --git a/app/soapbox/reducers/admin_log.ts b/app/soapbox/reducers/admin-log.ts
similarity index 100%
rename from app/soapbox/reducers/admin_log.ts
rename to app/soapbox/reducers/admin-log.ts
diff --git a/app/soapbox/reducers/admin.ts b/app/soapbox/reducers/admin.ts
index b51368f46..19a803f16 100644
--- a/app/soapbox/reducers/admin.ts
+++ b/app/soapbox/reducers/admin.ts
@@ -25,7 +25,7 @@ import { normalizeId } from 'soapbox/utils/normalizers';
import type { AnyAction } from 'redux';
import type { APIEntity } from 'soapbox/types/entities';
-import type { Config } from 'soapbox/utils/config_db';
+import type { Config } from 'soapbox/utils/config-db';
const ReducerRecord = ImmutableRecord({
reports: ImmutableMap(),
diff --git a/app/soapbox/reducers/auth.js b/app/soapbox/reducers/auth.js
index 2f0c773cd..bfe6b9249 100644
--- a/app/soapbox/reducers/auth.js
+++ b/app/soapbox/reducers/auth.js
@@ -2,8 +2,8 @@ import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
import trim from 'lodash/trim';
import { MASTODON_PRELOAD_IMPORT } from 'soapbox/actions/preload';
-import { FE_SUBDIRECTORY } from 'soapbox/build_config';
-import KVStore from 'soapbox/storage/kv_store';
+import { FE_SUBDIRECTORY } from 'soapbox/build-config';
+import KVStore from 'soapbox/storage/kv-store';
import { validId, isURL } from 'soapbox/utils/auth';
import {
diff --git a/app/soapbox/reducers/chat_message_lists.ts b/app/soapbox/reducers/chat-message-lists.ts
similarity index 100%
rename from app/soapbox/reducers/chat_message_lists.ts
rename to app/soapbox/reducers/chat-message-lists.ts
diff --git a/app/soapbox/reducers/chat_messages.ts b/app/soapbox/reducers/chat-messages.ts
similarity index 100%
rename from app/soapbox/reducers/chat_messages.ts
rename to app/soapbox/reducers/chat-messages.ts
diff --git a/app/soapbox/reducers/compose.ts b/app/soapbox/reducers/compose.ts
index 3f02f8cac..8e7fe6b0e 100644
--- a/app/soapbox/reducers/compose.ts
+++ b/app/soapbox/reducers/compose.ts
@@ -56,7 +56,7 @@ import { normalizeAttachment } from '../normalizers/attachment';
import { unescapeHTML } from '../utils/html';
import type { AnyAction } from 'redux';
-import type { Emoji } from 'soapbox/components/autosuggest_emoji';
+import type { Emoji } from 'soapbox/components/autosuggest-emoji';
import type {
Account as AccountEntity,
APIEntity,
diff --git a/app/soapbox/reducers/conversations.ts b/app/soapbox/reducers/conversations.ts
index 622d11a23..57c907448 100644
--- a/app/soapbox/reducers/conversations.ts
+++ b/app/soapbox/reducers/conversations.ts
@@ -9,7 +9,7 @@ import {
CONVERSATIONS_UPDATE,
CONVERSATIONS_READ,
} from '../actions/conversations';
-import compareId from '../compare_id';
+import { compareId } from '../utils/comparators';
import type { AnyAction } from 'redux';
import type { APIEntity } from 'soapbox/types/entities';
diff --git a/app/soapbox/reducers/custom_emojis.ts b/app/soapbox/reducers/custom-emojis.ts
similarity index 88%
rename from app/soapbox/reducers/custom_emojis.ts
rename to app/soapbox/reducers/custom-emojis.ts
index 38b54a673..06b6bf79d 100644
--- a/app/soapbox/reducers/custom_emojis.ts
+++ b/app/soapbox/reducers/custom-emojis.ts
@@ -1,9 +1,9 @@
import { List as ImmutableList, Map as ImmutableMap, fromJS } from 'immutable';
-import { emojis as emojiData } from 'soapbox/features/emoji/emoji_mart_data_light';
-import { addCustomToPool } from 'soapbox/features/emoji/emoji_mart_search_light';
+import { emojis as emojiData } from 'soapbox/features/emoji/emoji-mart-data-light';
+import { addCustomToPool } from 'soapbox/features/emoji/emoji-mart-search-light';
-import { CUSTOM_EMOJIS_FETCH_SUCCESS } from '../actions/custom_emojis';
+import { CUSTOM_EMOJIS_FETCH_SUCCESS } from '../actions/custom-emojis';
import { buildCustomEmojis } from '../features/emoji/emoji';
import type { AnyAction } from 'redux';
diff --git a/app/soapbox/reducers/domain_lists.ts b/app/soapbox/reducers/domain-lists.ts
similarity index 96%
rename from app/soapbox/reducers/domain_lists.ts
rename to app/soapbox/reducers/domain-lists.ts
index 78af7f515..30f55aaf8 100644
--- a/app/soapbox/reducers/domain_lists.ts
+++ b/app/soapbox/reducers/domain-lists.ts
@@ -4,7 +4,7 @@ import {
DOMAIN_BLOCKS_FETCH_SUCCESS,
DOMAIN_BLOCKS_EXPAND_SUCCESS,
DOMAIN_UNBLOCK_SUCCESS,
-} from '../actions/domain_blocks';
+} from '../actions/domain-blocks';
import type { AnyAction } from 'redux';
diff --git a/app/soapbox/reducers/dropdown_menu.ts b/app/soapbox/reducers/dropdown-menu.ts
similarity index 94%
rename from app/soapbox/reducers/dropdown_menu.ts
rename to app/soapbox/reducers/dropdown-menu.ts
index 2b5c50252..dd5c70369 100644
--- a/app/soapbox/reducers/dropdown_menu.ts
+++ b/app/soapbox/reducers/dropdown-menu.ts
@@ -3,10 +3,10 @@ import { Record as ImmutableRecord } from 'immutable';
import {
DROPDOWN_MENU_OPEN,
DROPDOWN_MENU_CLOSE,
-} from '../actions/dropdown_menu';
+} from '../actions/dropdown-menu';
import type { AnyAction } from 'redux';
-import type { DropdownPlacement } from 'soapbox/components/dropdown_menu';
+import type { DropdownPlacement } from 'soapbox/components/dropdown-menu';
const ReducerRecord = ImmutableRecord({
openId: null as number | null,
diff --git a/app/soapbox/reducers/index.ts b/app/soapbox/reducers/index.ts
index 8c59c014f..c900be16c 100644
--- a/app/soapbox/reducers/index.ts
+++ b/app/soapbox/reducers/index.ts
@@ -2,33 +2,33 @@ import { Record as ImmutableRecord } from 'immutable';
import { combineReducers } from 'redux-immutable';
import { AUTH_LOGGED_OUT } from 'soapbox/actions/auth';
-import * as BuildConfig from 'soapbox/build_config';
+import * as BuildConfig from 'soapbox/build-config';
-import account_notes from './account_notes';
+import account_notes from './account-notes';
import accounts from './accounts';
-import accounts_counters from './accounts_counters';
-import accounts_meta from './accounts_meta';
+import accounts_counters from './accounts-counters';
+import accounts_meta from './accounts-meta';
import admin from './admin';
-import admin_log from './admin_log';
+import admin_log from './admin-log';
import alerts from './alerts';
import aliases from './aliases';
import announcements from './announcements';
import auth from './auth';
import backups from './backups';
-import chat_message_lists from './chat_message_lists';
-import chat_messages from './chat_messages';
+import chat_message_lists from './chat-message-lists';
+import chat_messages from './chat-messages';
import chats from './chats';
import compose from './compose';
import contexts from './contexts';
import conversations from './conversations';
-import custom_emojis from './custom_emojis';
-import domain_lists from './domain_lists';
-import dropdown_menu from './dropdown_menu';
+import custom_emojis from './custom-emojis';
+import domain_lists from './domain-lists';
+import dropdown_menu from './dropdown-menu';
import filters from './filters';
import history from './history';
import instance from './instance';
-import listAdder from './list_adder';
-import listEditor from './list_editor';
+import listAdder from './list-adder';
+import listEditor from './list-editor';
import lists from './lists';
import me from './me';
import meta from './meta';
@@ -37,27 +37,27 @@ import mutes from './mutes';
import notifications from './notifications';
import onboarding from './onboarding';
import patron from './patron';
-import pending_statuses from './pending_statuses';
+import pending_statuses from './pending-statuses';
import polls from './polls';
-import profile_hover_card from './profile_hover_card';
-import push_notifications from './push_notifications';
+import profile_hover_card from './profile-hover-card';
+import push_notifications from './push-notifications';
import relationships from './relationships';
import reports from './reports';
import rules from './rules';
-import scheduled_statuses from './scheduled_statuses';
+import scheduled_statuses from './scheduled-statuses';
import search from './search';
import security from './security';
import settings from './settings';
import sidebar from './sidebar';
import soapbox from './soapbox';
import status_hover_card from './status-hover-card';
-import status_lists from './status_lists';
+import status_lists from './status-lists';
import statuses from './statuses';
import suggestions from './suggestions';
import timelines from './timelines';
-import trending_statuses from './trending_statuses';
+import trending_statuses from './trending-statuses';
import trends from './trends';
-import user_lists from './user_lists';
+import user_lists from './user-lists';
import verification from './verification';
const reducers = {
diff --git a/app/soapbox/reducers/instance.ts b/app/soapbox/reducers/instance.ts
index 4c1456dc4..1c15891e9 100644
--- a/app/soapbox/reducers/instance.ts
+++ b/app/soapbox/reducers/instance.ts
@@ -3,8 +3,8 @@ import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
import { ADMIN_CONFIG_UPDATE_REQUEST, ADMIN_CONFIG_UPDATE_SUCCESS } from 'soapbox/actions/admin';
import { PLEROMA_PRELOAD_IMPORT } from 'soapbox/actions/preload';
import { normalizeInstance } from 'soapbox/normalizers/instance';
-import KVStore from 'soapbox/storage/kv_store';
-import { ConfigDB } from 'soapbox/utils/config_db';
+import KVStore from 'soapbox/storage/kv-store';
+import { ConfigDB } from 'soapbox/utils/config-db';
import {
rememberInstance,
diff --git a/app/soapbox/reducers/list_adder.ts b/app/soapbox/reducers/list-adder.ts
similarity index 100%
rename from app/soapbox/reducers/list_adder.ts
rename to app/soapbox/reducers/list-adder.ts
diff --git a/app/soapbox/reducers/list_editor.ts b/app/soapbox/reducers/list-editor.ts
similarity index 100%
rename from app/soapbox/reducers/list_editor.ts
rename to app/soapbox/reducers/list-editor.ts
diff --git a/app/soapbox/reducers/notifications.js b/app/soapbox/reducers/notifications.ts
similarity index 64%
rename from app/soapbox/reducers/notifications.js
rename to app/soapbox/reducers/notifications.ts
index 4d5dd9921..24185ee0a 100644
--- a/app/soapbox/reducers/notifications.js
+++ b/app/soapbox/reducers/notifications.ts
@@ -1,4 +1,5 @@
import {
+ Map as ImmutableMap,
Record as ImmutableRecord,
OrderedMap as ImmutableOrderedMap,
fromJS,
@@ -33,40 +34,53 @@ import {
} from '../actions/notifications';
import { TIMELINE_DELETE } from '../actions/timelines';
+import type { AnyAction } from 'redux';
+import type { APIEntity } from 'soapbox/types/entities';
+
+const QueuedNotificationRecord = ImmutableRecord({
+ notification: {} as APIEntity,
+ intlMessages: {} as Record,
+ intlLocale: '',
+});
+
const ReducerRecord = ImmutableRecord({
- items: ImmutableOrderedMap(),
+ items: ImmutableOrderedMap(),
hasMore: true,
top: false,
unread: 0,
isLoading: false,
- queuedNotifications: ImmutableOrderedMap(), //max = MAX_QUEUED_NOTIFICATIONS
+ queuedNotifications: ImmutableOrderedMap(), //max = MAX_QUEUED_NOTIFICATIONS
totalQueuedNotificationsCount: 0, //used for queuedItems overflow for MAX_QUEUED_NOTIFICATIONS+
- lastRead: -1,
+ lastRead: -1 as string | -1,
});
-const parseId = id => parseInt(id, 10);
+type State = ReturnType;
+type NotificationRecord = ReturnType;
+type QueuedNotification = ReturnType;
+
+const parseId = (id: string | number) => parseInt(id as string, 10);
// For sorting the notifications
-const comparator = (a, b) => {
- const parse = m => parseId(m.get('id'));
+const comparator = (a: NotificationRecord, b: NotificationRecord) => {
+ const parse = (m: NotificationRecord) => parseId(m.id);
if (parse(a) < parse(b)) return 1;
if (parse(a) > parse(b)) return -1;
return 0;
};
-const minifyNotification = notification => {
+const minifyNotification = (notification: NotificationRecord) => {
return notification.mergeWith((o, n) => n || o, {
- account: notification.getIn(['account', 'id']),
- target: notification.getIn(['target', 'id']),
- status: notification.getIn(['status', 'id']),
+ account: notification.getIn(['account', 'id']) as string,
+ target: notification.getIn(['target', 'id']) as string,
+ status: notification.getIn(['status', 'id']) as string,
});
};
-const fixNotification = notification => {
+const fixNotification = (notification: APIEntity) => {
return minifyNotification(normalizeNotification(notification));
};
-const isValid = notification => {
+const isValid = (notification: APIEntity) => {
try {
// Ensure the notification is a known type
if (!validType(notification.type)) {
@@ -90,7 +104,7 @@ const isValid = notification => {
};
// Count how many notifications appear after the given ID (for unread count)
-const countFuture = (notifications, lastId) => {
+const countFuture = (notifications: ImmutableOrderedMap, lastId: string | number) => {
return notifications.reduce((acc, notification) => {
if (parseId(notification.get('id')) > parseId(lastId)) {
return acc + 1;
@@ -100,8 +114,8 @@ const countFuture = (notifications, lastId) => {
}, 0);
};
-const importNotification = (state, notification) => {
- const top = state.get('top');
+const importNotification = (state: State, notification: APIEntity) => {
+ const top = state.top;
if (!top) state = state.update('unread', unread => unread + 1);
@@ -114,14 +128,14 @@ const importNotification = (state, notification) => {
});
};
-const processRawNotifications = notifications => (
+export const processRawNotifications = (notifications: APIEntity[]) => (
ImmutableOrderedMap(
notifications
.filter(isValid)
.map(n => [n.id, fixNotification(n)]),
));
-const expandNormalizedNotifications = (state, notifications, next) => {
+const expandNormalizedNotifications = (state: State, notifications: APIEntity[], next: string | null) => {
const items = processRawNotifications(notifications);
return state.withMutations(mutable => {
@@ -132,28 +146,28 @@ const expandNormalizedNotifications = (state, notifications, next) => {
});
};
-const filterNotifications = (state, relationship) => {
- return state.update('items', map => map.filterNot(item => item !== null && item.get('account') === relationship.id));
+const filterNotifications = (state: State, relationship: APIEntity) => {
+ return state.update('items', map => map.filterNot(item => item !== null && item.account === relationship.id));
};
-const filterNotificationIds = (state, accountIds, type) => {
- const helper = list => list.filterNot(item => item !== null && accountIds.includes(item.get('account')) && (type === undefined || type === item.get('type')));
+const filterNotificationIds = (state: State, accountIds: Array, type?: string) => {
+ const helper = (list: ImmutableOrderedMap) => list.filterNot(item => item !== null && accountIds.includes(item.account as string) && (type === undefined || type === item.type));
return state.update('items', helper);
};
-const updateTop = (state, top) => {
+const updateTop = (state: State, top: boolean) => {
if (top) state = state.set('unread', 0);
return state.set('top', top);
};
-const deleteByStatus = (state, statusId) => {
- return state.update('items', map => map.filterNot(item => item !== null && item.get('status') === statusId));
+const deleteByStatus = (state: State, statusId: string) => {
+ return state.update('items', map => map.filterNot(item => item !== null && item.status === statusId));
};
-const updateNotificationsQueue = (state, notification, intlMessages, intlLocale) => {
- const queuedNotifications = state.getIn(['queuedNotifications'], ImmutableOrderedMap());
- const listedNotifications = state.getIn(['items'], ImmutableOrderedMap());
- const totalQueuedNotificationsCount = state.getIn(['totalQueuedNotificationsCount'], 0);
+const updateNotificationsQueue = (state: State, notification: APIEntity, intlMessages: Record, intlLocale: string) => {
+ const queuedNotifications = state.queuedNotifications;
+ const listedNotifications = state.items;
+ const totalQueuedNotificationsCount = state.totalQueuedNotificationsCount;
const alreadyExists = queuedNotifications.has(notification.id) || listedNotifications.has(notification.id);
if (alreadyExists) return state;
@@ -162,25 +176,25 @@ const updateNotificationsQueue = (state, notification, intlMessages, intlLocale)
return state.withMutations(mutable => {
if (totalQueuedNotificationsCount <= MAX_QUEUED_NOTIFICATIONS) {
- mutable.set('queuedNotifications', newQueuedNotifications.set(notification.id, {
+ mutable.set('queuedNotifications', newQueuedNotifications.set(notification.id, QueuedNotificationRecord({
notification,
intlMessages,
intlLocale,
- }));
+ })));
}
mutable.set('totalQueuedNotificationsCount', totalQueuedNotificationsCount + 1);
});
};
-const importMarker = (state, marker) => {
- const lastReadId = marker.getIn(['notifications', 'last_read_id'], -1);
+const importMarker = (state: State, marker: ImmutableMap) => {
+ const lastReadId = marker.getIn(['notifications', 'last_read_id'], -1) as string | -1;
if (!lastReadId) {
return state;
}
return state.withMutations(state => {
- const notifications = state.get('items');
+ const notifications = state.items;
const unread = countFuture(notifications, lastReadId);
state.set('unread', unread);
@@ -188,14 +202,14 @@ const importMarker = (state, marker) => {
});
};
-export default function notifications(state = ReducerRecord(), action) {
+export default function notifications(state: State = ReducerRecord(), action: AnyAction) {
switch (action.type) {
case NOTIFICATIONS_EXPAND_REQUEST:
return state.set('isLoading', true);
case NOTIFICATIONS_EXPAND_FAIL:
return state.set('isLoading', false);
case NOTIFICATIONS_FILTER_SET:
- return state.delete('items').set('hasMore', true);
+ return state.set('items', ImmutableOrderedMap()).set('hasMore', true);
case NOTIFICATIONS_SCROLL_TOP:
return updateTop(state, action.top);
case NOTIFICATIONS_UPDATE:
@@ -217,13 +231,13 @@ export default function notifications(state = ReducerRecord(), action) {
case FOLLOW_REQUEST_REJECT_SUCCESS:
return filterNotificationIds(state, [action.id], 'follow_request');
case NOTIFICATIONS_CLEAR:
- return state.delete('items').set('hasMore', false);
+ return state.set('items', ImmutableOrderedMap()).set('hasMore', false);
case NOTIFICATIONS_MARK_READ_REQUEST:
return state.set('lastRead', action.lastRead);
case MARKER_FETCH_SUCCESS:
case MARKER_SAVE_REQUEST:
case MARKER_SAVE_SUCCESS:
- return importMarker(state, fromJS(action.marker));
+ return importMarker(state, ImmutableMap(fromJS(action.marker)));
case TIMELINE_DELETE:
return deleteByStatus(state, action.id);
default:
diff --git a/app/soapbox/reducers/pending_statuses.ts b/app/soapbox/reducers/pending-statuses.ts
similarity index 100%
rename from app/soapbox/reducers/pending_statuses.ts
rename to app/soapbox/reducers/pending-statuses.ts
diff --git a/app/soapbox/reducers/profile_hover_card.ts b/app/soapbox/reducers/profile-hover-card.ts
similarity index 95%
rename from app/soapbox/reducers/profile_hover_card.ts
rename to app/soapbox/reducers/profile-hover-card.ts
index b07897715..f662a3b99 100644
--- a/app/soapbox/reducers/profile_hover_card.ts
+++ b/app/soapbox/reducers/profile-hover-card.ts
@@ -4,7 +4,7 @@ import {
PROFILE_HOVER_CARD_OPEN,
PROFILE_HOVER_CARD_CLOSE,
PROFILE_HOVER_CARD_UPDATE,
-} from 'soapbox/actions/profile_hover_card';
+} from 'soapbox/actions/profile-hover-card';
import type { AnyAction } from 'redux';
diff --git a/app/soapbox/reducers/push_notifications.ts b/app/soapbox/reducers/push-notifications.ts
similarity index 95%
rename from app/soapbox/reducers/push_notifications.ts
rename to app/soapbox/reducers/push-notifications.ts
index 0448abf08..a2b8ca51f 100644
--- a/app/soapbox/reducers/push_notifications.ts
+++ b/app/soapbox/reducers/push-notifications.ts
@@ -1,6 +1,6 @@
import { Map as ImmutableMap, Record as ImmutableRecord } from 'immutable';
-import { SET_BROWSER_SUPPORT, SET_SUBSCRIPTION, CLEAR_SUBSCRIPTION, SET_ALERTS } from '../actions/push_notifications';
+import { SET_BROWSER_SUPPORT, SET_SUBSCRIPTION, CLEAR_SUBSCRIPTION, SET_ALERTS } from '../actions/push-notifications';
import type { AnyAction } from 'redux';
diff --git a/app/soapbox/reducers/relationships.ts b/app/soapbox/reducers/relationships.ts
index 9aafa5542..47e222260 100644
--- a/app/soapbox/reducers/relationships.ts
+++ b/app/soapbox/reducers/relationships.ts
@@ -26,7 +26,7 @@ import {
import {
DOMAIN_BLOCK_SUCCESS,
DOMAIN_UNBLOCK_SUCCESS,
-} from '../actions/domain_blocks';
+} from '../actions/domain-blocks';
import {
ACCOUNT_IMPORT,
ACCOUNTS_IMPORT,
diff --git a/app/soapbox/reducers/scheduled_statuses.ts b/app/soapbox/reducers/scheduled-statuses.ts
similarity index 97%
rename from app/soapbox/reducers/scheduled_statuses.ts
rename to app/soapbox/reducers/scheduled-statuses.ts
index 13b4a934d..edcc86337 100644
--- a/app/soapbox/reducers/scheduled_statuses.ts
+++ b/app/soapbox/reducers/scheduled-statuses.ts
@@ -5,7 +5,7 @@ import {
SCHEDULED_STATUSES_FETCH_SUCCESS,
SCHEDULED_STATUS_CANCEL_REQUEST,
SCHEDULED_STATUS_CANCEL_SUCCESS,
-} from 'soapbox/actions/scheduled_statuses';
+} from 'soapbox/actions/scheduled-statuses';
import { STATUS_CREATE_SUCCESS } from 'soapbox/actions/statuses';
import type { AnyAction } from 'redux';
diff --git a/app/soapbox/reducers/settings.ts b/app/soapbox/reducers/settings.ts
index ee8ddc558..70a28a478 100644
--- a/app/soapbox/reducers/settings.ts
+++ b/app/soapbox/reducers/settings.ts
@@ -13,7 +13,7 @@ import {
FE_NAME,
} from '../actions/settings';
-import type { Emoji } from 'soapbox/components/autosuggest_emoji';
+import type { Emoji } from 'soapbox/components/autosuggest-emoji';
import type { APIEntity } from 'soapbox/types/entities';
type State = ImmutableMap;
diff --git a/app/soapbox/reducers/soapbox.js b/app/soapbox/reducers/soapbox.js
index 0affe2e36..b959a5596 100644
--- a/app/soapbox/reducers/soapbox.js
+++ b/app/soapbox/reducers/soapbox.js
@@ -1,8 +1,8 @@
import { Map as ImmutableMap, fromJS } from 'immutable';
import { PLEROMA_PRELOAD_IMPORT } from 'soapbox/actions/preload';
-import KVStore from 'soapbox/storage/kv_store';
-import { ConfigDB } from 'soapbox/utils/config_db';
+import KVStore from 'soapbox/storage/kv-store';
+import { ConfigDB } from 'soapbox/utils/config-db';
import { ADMIN_CONFIG_UPDATE_SUCCESS } from '../actions/admin';
import {
diff --git a/app/soapbox/reducers/status_lists.ts b/app/soapbox/reducers/status-lists.ts
similarity index 98%
rename from app/soapbox/reducers/status_lists.ts
rename to app/soapbox/reducers/status-lists.ts
index be87e2910..3a19c5eea 100644
--- a/app/soapbox/reducers/status_lists.ts
+++ b/app/soapbox/reducers/status-lists.ts
@@ -36,7 +36,7 @@ import {
} from '../actions/interactions';
import {
PINNED_STATUSES_FETCH_SUCCESS,
-} from '../actions/pin_statuses';
+} from '../actions/pin-statuses';
import {
SCHEDULED_STATUSES_FETCH_REQUEST,
SCHEDULED_STATUSES_FETCH_SUCCESS,
@@ -46,7 +46,7 @@ import {
SCHEDULED_STATUSES_EXPAND_FAIL,
SCHEDULED_STATUS_CANCEL_REQUEST,
SCHEDULED_STATUS_CANCEL_SUCCESS,
-} from '../actions/scheduled_statuses';
+} from '../actions/scheduled-statuses';
import type { AnyAction } from 'redux';
import type { Status as StatusEntity } from 'soapbox/types/entities';
diff --git a/app/soapbox/reducers/statuses.ts b/app/soapbox/reducers/statuses.ts
index 088191edd..2c19b2511 100644
--- a/app/soapbox/reducers/statuses.ts
+++ b/app/soapbox/reducers/statuses.ts
@@ -3,14 +3,14 @@ import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
import emojify from 'soapbox/features/emoji/emoji';
import { normalizeStatus } from 'soapbox/normalizers';
-import { simulateEmojiReact, simulateUnEmojiReact } from 'soapbox/utils/emoji_reacts';
+import { simulateEmojiReact, simulateUnEmojiReact } from 'soapbox/utils/emoji-reacts';
import { stripCompatibilityFeatures, unescapeHTML } from 'soapbox/utils/html';
import { makeEmojiMap, normalizeId } from 'soapbox/utils/normalizers';
import {
EMOJI_REACT_REQUEST,
UNEMOJI_REACT_REQUEST,
-} from '../actions/emoji_reacts';
+} from '../actions/emoji-reacts';
import { STATUS_IMPORT, STATUSES_IMPORT } from '../actions/importer';
import {
REBLOG_REQUEST,
diff --git a/app/soapbox/reducers/suggestions.ts b/app/soapbox/reducers/suggestions.ts
index 8335ff9ec..e3d72a34c 100644
--- a/app/soapbox/reducers/suggestions.ts
+++ b/app/soapbox/reducers/suggestions.ts
@@ -1,7 +1,7 @@
import { OrderedSet as ImmutableOrderedSet, Record as ImmutableRecord } from 'immutable';
import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'soapbox/actions/accounts';
-import { DOMAIN_BLOCK_SUCCESS } from 'soapbox/actions/domain_blocks';
+import { DOMAIN_BLOCK_SUCCESS } from 'soapbox/actions/domain-blocks';
import {
SUGGESTIONS_FETCH_REQUEST,
SUGGESTIONS_FETCH_SUCCESS,
diff --git a/app/soapbox/reducers/trending_statuses.ts b/app/soapbox/reducers/trending-statuses.ts
similarity index 96%
rename from app/soapbox/reducers/trending_statuses.ts
rename to app/soapbox/reducers/trending-statuses.ts
index c27ab31a0..189f7006d 100644
--- a/app/soapbox/reducers/trending_statuses.ts
+++ b/app/soapbox/reducers/trending-statuses.ts
@@ -3,7 +3,7 @@ import { OrderedSet as ImmutableOrderedSet, Record as ImmutableRecord } from 'im
import {
TRENDING_STATUSES_FETCH_REQUEST,
TRENDING_STATUSES_FETCH_SUCCESS,
-} from 'soapbox/actions/trending_statuses';
+} from 'soapbox/actions/trending-statuses';
import { APIEntity } from 'soapbox/types/entities';
import type { AnyAction } from 'redux';
diff --git a/app/soapbox/reducers/user_lists.ts b/app/soapbox/reducers/user-lists.ts
similarity index 96%
rename from app/soapbox/reducers/user_lists.ts
rename to app/soapbox/reducers/user-lists.ts
index 4c84f1836..7f5ce6716 100644
--- a/app/soapbox/reducers/user_lists.ts
+++ b/app/soapbox/reducers/user-lists.ts
@@ -31,7 +31,7 @@ import {
} from '../actions/directory';
import {
FAMILIAR_FOLLOWERS_FETCH_SUCCESS,
-} from '../actions/familiar_followers';
+} from '../actions/familiar-followers';
import {
REBLOGS_FETCH_SUCCESS,
FAVOURITES_FETCH_SUCCESS,
@@ -97,7 +97,10 @@ const normalizeList = (state: State, path: NestedListPath | ListPath, accounts:
const appendToList = (state: State, path: NestedListPath | ListPath, accounts: APIEntity[], next: string | null) => {
return state.updateIn(path, map => {
- return (map as List).set('next', next).update('items', list => (list as Items).concat(accounts.map(item => item.id)));
+ return (map as List)
+ .set('next', next)
+ .set('isLoading', false)
+ .update('items', list => (list as Items).concat(accounts.map(item => item.id)));
});
};
diff --git a/app/soapbox/selectors/index.ts b/app/soapbox/selectors/index.ts
index 84165fc98..047faefa6 100644
--- a/app/soapbox/selectors/index.ts
+++ b/app/soapbox/selectors/index.ts
@@ -9,7 +9,7 @@ import { createSelector } from 'reselect';
import { getSettings } from 'soapbox/actions/settings';
import { getDomain } from 'soapbox/utils/accounts';
import { validId } from 'soapbox/utils/auth';
-import ConfigDB from 'soapbox/utils/config_db';
+import ConfigDB from 'soapbox/utils/config-db';
import { shouldFilter } from 'soapbox/utils/timelines';
import type { ReducerChat } from 'soapbox/reducers/chats';
diff --git a/app/soapbox/service-worker/entry.ts b/app/soapbox/service-worker/entry.ts
new file mode 100644
index 000000000..3dbfee2ce
--- /dev/null
+++ b/app/soapbox/service-worker/entry.ts
@@ -0,0 +1 @@
+import './web-push-notifications';
diff --git a/app/soapbox/service_worker/web_push_locales.js b/app/soapbox/service-worker/web-push-locales.js
similarity index 100%
rename from app/soapbox/service_worker/web_push_locales.js
rename to app/soapbox/service-worker/web-push-locales.js
diff --git a/app/soapbox/service_worker/web_push_notifications.ts b/app/soapbox/service-worker/web-push-notifications.ts
similarity index 97%
rename from app/soapbox/service_worker/web_push_notifications.ts
rename to app/soapbox/service-worker/web-push-notifications.ts
index fe3d8e652..c1da2b67d 100644
--- a/app/soapbox/service_worker/web_push_notifications.ts
+++ b/app/soapbox/service-worker/web-push-notifications.ts
@@ -2,7 +2,7 @@ import IntlMessageFormat from 'intl-messageformat';
import 'intl-pluralrules';
import unescape from 'lodash/unescape';
-import locales from './web_push_locales';
+import locales from './web-push-locales';
import type {
Account as AccountEntity,
@@ -180,21 +180,21 @@ const handlePush = (event: PushEvent) => {
/** Native action to open a status on the device. */
const actionExpand = (preferred_locale: string) => ({
action: 'expand',
- icon: `/${require('../../images/web-push/web-push-icon_expand.png')}`,
+ icon: `/${require('../../assets/images/web-push/web-push-icon_expand.png')}`,
title: formatMessage('status.show_more', preferred_locale),
});
/** Native action to repost status. */
const actionReblog = (preferred_locale: string) => ({
action: 'reblog',
- icon: `/${require('../../images/web-push/web-push-icon_reblog.png')}`,
+ icon: `/${require('../../assets/images/web-push/web-push-icon_reblog.png')}`,
title: formatMessage('status.reblog', preferred_locale),
});
/** Native action to like status. */
const actionFavourite = (preferred_locale: string) => ({
action: 'favourite',
- icon: `/${require('../../images/web-push/web-push-icon_favourite.png')}`,
+ icon: `/${require('../../assets/images/web-push/web-push-icon_favourite.png')}`,
title: formatMessage('status.favourite', preferred_locale),
});
diff --git a/app/soapbox/service_worker/entry.ts b/app/soapbox/service_worker/entry.ts
deleted file mode 100644
index 364b67066..000000000
--- a/app/soapbox/service_worker/entry.ts
+++ /dev/null
@@ -1 +0,0 @@
-import './web_push_notifications';
diff --git a/app/soapbox/storage/kv_store.ts b/app/soapbox/storage/kv-store.ts
similarity index 100%
rename from app/soapbox/storage/kv_store.ts
rename to app/soapbox/storage/kv-store.ts
diff --git a/app/soapbox/types/soapbox.ts b/app/soapbox/types/soapbox.ts
index 1a37d1a88..3b8b247a6 100644
--- a/app/soapbox/types/soapbox.ts
+++ b/app/soapbox/types/soapbox.ts
@@ -4,7 +4,7 @@ import {
FooterItemRecord,
CryptoAddressRecord,
SoapboxConfigRecord,
-} from 'soapbox/normalizers/soapbox/soapbox_config';
+} from 'soapbox/normalizers/soapbox/soapbox-config';
type Me = string | null | false | undefined;
diff --git a/app/soapbox/__tests__/compare_id.test.ts b/app/soapbox/utils/__tests__/comparators.test.ts
similarity index 76%
rename from app/soapbox/__tests__/compare_id.test.ts
rename to app/soapbox/utils/__tests__/comparators.test.ts
index 583b4a1eb..f1cf72634 100644
--- a/app/soapbox/__tests__/compare_id.test.ts
+++ b/app/soapbox/utils/__tests__/comparators.test.ts
@@ -1,7 +1,7 @@
-import compareId from '../compare_id';
+import { compareId } from '../comparators';
test('compareId', () => {
expect(compareId('3', '3')).toBe(0);
expect(compareId('10', '1')).toBe(1);
expect(compareId('99', '100')).toBe(-1);
-});
+});
\ No newline at end of file
diff --git a/app/soapbox/utils/__tests__/config_db.test.ts b/app/soapbox/utils/__tests__/config-db.test.ts
similarity index 90%
rename from app/soapbox/utils/__tests__/config_db.test.ts
rename to app/soapbox/utils/__tests__/config-db.test.ts
index a83757eb3..8f398ee9a 100644
--- a/app/soapbox/utils/__tests__/config_db.test.ts
+++ b/app/soapbox/utils/__tests__/config-db.test.ts
@@ -2,7 +2,7 @@ import { List as ImmutableList, fromJS } from 'immutable';
import config_db from 'soapbox/__fixtures__/config_db.json';
-import { ConfigDB } from '../config_db';
+import { ConfigDB } from '../config-db';
test('find', () => {
const configs = fromJS(config_db).get('configs');
diff --git a/app/soapbox/utils/__tests__/emoji_reacts.test.ts b/app/soapbox/utils/__tests__/emoji-reacts.test.ts
similarity index 99%
rename from app/soapbox/utils/__tests__/emoji_reacts.test.ts
rename to app/soapbox/utils/__tests__/emoji-reacts.test.ts
index 14832210c..97f8e34db 100644
--- a/app/soapbox/utils/__tests__/emoji_reacts.test.ts
+++ b/app/soapbox/utils/__tests__/emoji-reacts.test.ts
@@ -11,7 +11,7 @@ import {
getReactForStatus,
simulateEmojiReact,
simulateUnEmojiReact,
-} from '../emoji_reacts';
+} from '../emoji-reacts';
const ALLOWED_EMOJI = ImmutableList([
'👍',
diff --git a/app/soapbox/utils/__tests__/media.test.ts b/app/soapbox/utils/__tests__/media.test.ts
new file mode 100644
index 000000000..56a02aebc
--- /dev/null
+++ b/app/soapbox/utils/__tests__/media.test.ts
@@ -0,0 +1,31 @@
+import { addAutoPlay } from '../media';
+
+describe('addAutoPlay()', () => {
+ describe('when the provider is Rumble', () => {
+ it('adds the correct query parameters to the src', () => {
+ const html = '';
+ expect(addAutoPlay(html)).toEqual('');
+ });
+
+ describe('when the iframe src already has params', () => {
+ it('adds the correct query parameters to the src', () => {
+ const html = '';
+ expect(addAutoPlay(html)).toEqual('');
+ });
+ });
+ });
+
+ describe('when the provider is not Rumble', () => {
+ it('adds the correct query parameters to the src', () => {
+ const html = '';
+ expect(addAutoPlay(html)).toEqual('');
+ });
+
+ describe('when the iframe src already has params', () => {
+ it('adds the correct query parameters to the src', () => {
+ const html = '';
+ expect(addAutoPlay(html)).toEqual('');
+ });
+ });
+ });
+});
diff --git a/app/soapbox/compare_id.ts b/app/soapbox/utils/comparators.ts
similarity index 86%
rename from app/soapbox/compare_id.ts
rename to app/soapbox/utils/comparators.ts
index b92a44cf1..14c3ba4df 100644
--- a/app/soapbox/compare_id.ts
+++ b/app/soapbox/utils/comparators.ts
@@ -9,7 +9,7 @@
* - `1`: id1 > id2
* - `-1`: id1 < id2
*/
-export default function compareId(id1: string, id2: string) {
+function compareId(id1: string, id2: string) {
if (id1 === id2) {
return 0;
}
@@ -19,3 +19,5 @@ export default function compareId(id1: string, id2: string) {
return id1.length > id2.length ? 1 : -1;
}
}
+
+export { compareId };
\ No newline at end of file
diff --git a/app/soapbox/utils/config_db.ts b/app/soapbox/utils/config-db.ts
similarity index 100%
rename from app/soapbox/utils/config_db.ts
rename to app/soapbox/utils/config-db.ts
diff --git a/app/soapbox/utils/emoji_reacts.ts b/app/soapbox/utils/emoji-reacts.ts
similarity index 100%
rename from app/soapbox/utils/emoji_reacts.ts
rename to app/soapbox/utils/emoji-reacts.ts
diff --git a/app/soapbox/utils/favicon_service.ts b/app/soapbox/utils/favicon-service.ts
similarity index 100%
rename from app/soapbox/utils/favicon_service.ts
rename to app/soapbox/utils/favicon-service.ts
diff --git a/app/soapbox/utils/features.ts b/app/soapbox/utils/features.ts
index 3cb7e98dc..200cee5f1 100644
--- a/app/soapbox/utils/features.ts
+++ b/app/soapbox/utils/features.ts
@@ -504,7 +504,7 @@ const getInstanceFeatures = (instance: Instance) => {
* @see POST /api/v1/statuses
*/
quotePosts: any([
- v.software === PLEROMA && v.build === SOAPBOX && gte(v.version, '2.4.50'),
+ v.software === PLEROMA && [SOAPBOX, AKKOMA].includes(v.build!) && gte(v.version, '2.4.50'),
instance.feature_quote === true,
]),
diff --git a/app/soapbox/utils/greentext.ts b/app/soapbox/utils/greentext.ts
index eab93b22a..70c5e05d8 100644
--- a/app/soapbox/utils/greentext.ts
+++ b/app/soapbox/utils/greentext.ts
@@ -1,4 +1,4 @@
-import { processHtml } from './tiny_post_html_processor';
+import { processHtml } from './tiny-post-html-processor';
export const addGreentext = (html: string): string => {
// Copied from Pleroma FE
diff --git a/app/soapbox/utils/media_aspect_ratio.ts b/app/soapbox/utils/media-aspect-ratio.ts
similarity index 100%
rename from app/soapbox/utils/media_aspect_ratio.ts
rename to app/soapbox/utils/media-aspect-ratio.ts
diff --git a/app/soapbox/utils/media.ts b/app/soapbox/utils/media.ts
index 7947ef91f..ff0bf502e 100644
--- a/app/soapbox/utils/media.ts
+++ b/app/soapbox/utils/media.ts
@@ -51,4 +51,37 @@ const getVideoDuration = (file: File): Promise => {
return promise;
};
-export { getVideoDuration, formatBytes, truncateFilename };
+const domParser = new DOMParser();
+
+enum VideoProviders {
+ RUMBLE = 'rumble.com'
+}
+
+const addAutoPlay = (html: string): string => {
+ const document = domParser.parseFromString(html, 'text/html').documentElement;
+ const iframe = document.querySelector('iframe');
+
+ if (iframe) {
+ const url = new URL(iframe.src);
+ const provider = new URL(iframe.src).host;
+
+ if (provider === VideoProviders.RUMBLE) {
+ url.searchParams.append('pub', '7a20');
+ url.searchParams.append('autoplay', '2');
+ } else {
+ url.searchParams.append('autoplay', '1');
+ url.searchParams.append('auto_play', '1');
+ iframe.allow = 'autoplay';
+ }
+
+ iframe.src = url.toString();
+
+ // DOM parser creates html/body elements around original HTML fragment,
+ // so we need to get innerHTML out of the body and not the entire document
+ return (document.querySelector('body') as HTMLBodyElement).innerHTML;
+ }
+
+ return html;
+};
+
+export { getVideoDuration, formatBytes, truncateFilename, addAutoPlay };
diff --git a/app/soapbox/utils/resize_image.ts b/app/soapbox/utils/resize-image.ts
similarity index 100%
rename from app/soapbox/utils/resize_image.ts
rename to app/soapbox/utils/resize-image.ts
diff --git a/app/soapbox/utils/rich_content.ts b/app/soapbox/utils/rich-content.ts
similarity index 100%
rename from app/soapbox/utils/rich_content.ts
rename to app/soapbox/utils/rich-content.ts
diff --git a/app/soapbox/utils/soapbox_prop_types.ts b/app/soapbox/utils/soapbox-prop-types.ts
similarity index 100%
rename from app/soapbox/utils/soapbox_prop_types.ts
rename to app/soapbox/utils/soapbox-prop-types.ts
diff --git a/app/soapbox/utils/state.ts b/app/soapbox/utils/state.ts
index 45e849917..c3cfdb570 100644
--- a/app/soapbox/utils/state.ts
+++ b/app/soapbox/utils/state.ts
@@ -4,7 +4,7 @@
*/
import { getSoapboxConfig } from 'soapbox/actions/soapbox';
-import * as BuildConfig from 'soapbox/build_config';
+import * as BuildConfig from 'soapbox/build-config';
import { isPrerendered } from 'soapbox/precheck';
import { isURL } from 'soapbox/utils/auth';
diff --git a/app/soapbox/utils/static.ts b/app/soapbox/utils/static.ts
index 79ba46931..0a8048a32 100644
--- a/app/soapbox/utils/static.ts
+++ b/app/soapbox/utils/static.ts
@@ -5,7 +5,7 @@
import { join } from 'path';
-import * as BuildConfig from 'soapbox/build_config';
+import * as BuildConfig from 'soapbox/build-config';
/** Gets the path to a file with build configuration being considered. */
export const joinPublicPath = (...paths: string[]): string => {
diff --git a/app/soapbox/utils/tiny_post_html_processor.ts b/app/soapbox/utils/tiny-post-html-processor.ts
similarity index 100%
rename from app/soapbox/utils/tiny_post_html_processor.ts
rename to app/soapbox/utils/tiny-post-html-processor.ts
diff --git a/app/styles/about.scss b/app/styles/about.scss
deleted file mode 100644
index 038e34ec8..000000000
--- a/app/styles/about.scss
+++ /dev/null
@@ -1,1064 +0,0 @@
-$maximum-width: 1235px;
-$fluid-breakpoint: $maximum-width + 20px;
-
-@keyframes upAndFadeIn {
- 0% {
- transform: rotate(-15deg) translateX(40%) translateY(20%) scale(1.15);
- }
-
- 100% {
- transform: rotate(-5deg) translateX(40%) translateY(0) scale(1.15);
- }
-}
-
-@keyframes upAndFadeInLeft {
- 0% {
- transform: rotate(30deg) translateX(30%) scale(1.15) translateY(30%);
- }
-
- 100% {
- transform: rotate(15deg) translateX(30%) scale(1.15) translateY(10%);
- }
-}
-
-@keyframes wave {
- 0% {
- transform: rotate(0);
- }
-
- 25% {
- transform: rotate(15deg);
- }
-
- 50% {
- transform: rotate(-10deg);
- }
-
- 75% {
- transform: rotate(15deg);
- }
-
- 100% {
- transform: rotate(0);
- }
-}
-
-.public-layout {
- .app-store-button {
- width: auto;
- height: 80px;
- display: inline-block;
- }
-
- .container {
- width: 100%;
- max-width: 1280px;
-
- @media screen and (max-width: $no-gap-breakpoint) {
- padding: 0;
- }
- }
-
- .content {
- width: 100%;
- display: block;
- margin: 40px 0;
- border-radius: 6px;
-
- @media screen and (max-width: 767px) {
- margin-top: 0;
- }
- }
-
- .header {
- height: 80px;
- display: flex;
- align-items: stretch;
- justify-content: center;
- flex-wrap: nowrap;
- padding: 14px 20px;
- box-sizing: border-box;
- position: relative;
-
- .header-container {
- display: flex;
- width: 1280px;
- align-items: stretch;
- justify-content: center;
- flex-wrap: nowrap;
-
- & > div {
- flex: 1 1 33.3%;
- min-height: 1px;
- }
- }
-
- .nav-left {
- display: flex;
- align-items: center;
- justify-content: flex-start;
- flex-wrap: nowrap;
- }
-
- .nav-center {
- display: flex;
- align-items: stretch;
- justify-content: center;
- flex-wrap: nowrap;
- }
-
- .nav-right {
- display: flex;
- align-items: center;
- justify-content: flex-end;
- flex-wrap: nowrap;
-
- .simple_form.new_user,
- .simple_form--public {
- display: flex;
- flex-direction: row;
- align-items: center;
-
- .fields-group {
- display: flex;
- flex-direction: row;
- margin-bottom: 0;
- position: relative;
-
- p.hint.subtle-hint {
- position: absolute;
- top: 30px;
- left: 160px;
- border-radius: 4px;
- background: var(--foreground-color);
- overflow: hidden;
-
- a {
- padding: 4px;
- background-color: var(--brand-color--med);
- }
- }
-
- .input {
- flex: 1;
- margin-bottom: 0;
- margin-right: 10px;
-
- input {
- min-width: 150px;
- font-size: 14px;
- }
- }
- }
-
- .actions {
- display: flex;
- margin-top: 0;
-
- .button {
- margin-bottom: 0 !important;
- line-height: 38px !important;
- height: 38px !important;
- box-sizing: border-box !important;
- padding: 0 18px !important;
- text-transform: none !important;
- }
- }
- }
- }
-
- .brand {
- display: block;
-
- svg {
- display: block;
- height: 50px;
- width: auto;
- position: relative;
-
- @media screen and (max-width: $no-gap-breakpoint) {
- height: 20px;
- }
- }
- }
-
- .nav-link {
- display: flex;
- align-items: center;
- padding: 12px 22px;
- font-size: 14px;
- font-weight: 600;
- text-decoration: none;
- color: var(--primary-text-color);
- white-space: nowrap;
- text-align: center;
-
- &:hover,
- &:focus,
- &:active {
- text-decoration: underline;
- color: var(--primary-text-color);
- }
-
- &--hollow {
- background-color: var(--brand-color--med);
-
- &:hover,
- &:focus,
- &:active {
- color: var(--brand-color);
- }
- }
-
- @media screen and (max-width: 550px) {
- &.optional {
- display: none;
- }
- }
- }
-
- .nav-button {
- background: var(--brand-color);
- color: #fff;
- margin: 8px;
- margin-left: 0;
- border-radius: 4px;
-
- &:hover,
- &:focus,
- &:active {
- opacity: 0.9;
- color: #fff;
- text-decoration: none;
- }
- }
- }
-
- .faq {
- margin-bottom: 80px;
-
- .subtext {
- a {
- color: $color-4;
- }
- }
-
- .lead {
- font-weight: 600;
- font-size: 32px;
- line-height: 42px;
- margin-bottom: 10px;
- }
-
- .columns {
- display: flex;
- @media screen and (max-width: $fluid-breakpoint) {
- display: block;
- }
-
- .left-column {
- flex: 2;
- padding-right: 20px;
- }
-
- .right-column {
- flex: 4;
-
- span {
- font-style: italic;
- font-weight: 600;
- color: $color-4-dark;
- }
- }
-
- .question {
- font-size: 20px;
- font-weight: 600;
- }
- }
- }
-
- .mobile-page {
- height: 100%;
-
- .rich-formatting,
- .mobile-cta {
- height: 100%;
- }
-
- .rich-formatting {
- padding: 10px 0;
- }
-
- .flexed {
- height: 100%;
- display: flex;
-
- @media screen and (max-width: 768px) {
- flex-direction: column;
- }
-
- p {
- font-size: 20px;
- line-height: 1.4;
- margin-bottom: 40px;
- }
-
- h1 {
- letter-spacing: -0.02em;
- font-size: 80px;
- font-weight: 400;
- line-height: 80px;
- margin: 0 0 20px 0;
- -webkit-tap-highlight-color: lightblue !important;
-
- @media screen and (max-width: 768px) {
- font-size: 60px;
- line-height: 60px;
- }
-
- .alt-gradient {
- font-size: 70px;
- line-height: 70px;
- font-weight: 600;
- background: -webkit-linear-gradient(135deg, $color-9, $color-4-light, $color-2-light);
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
-
- @media screen and (max-width: 768px) {
- font-size: 50px;
- line-height: 50px;
- }
- }
-
- .big {
- color: $color-4-dark;
- display: block;
- font-weight: 200;
- }
- }
-
- .column {
- position: relative;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: flex-start;
- flex: 1;
-
- @media screen and (max-width: 768px) {
- flex: 0;
- width: 100%;
- order: 1;
- }
-
- &:nth-of-type(2) {
- flex-direction: row;
- align-items: center;
-
- @media screen and (max-width: 768px) {
- padding-top: 80px;
- order: 0;
- }
- }
- }
- }
-
- .nested-column {
- flex: 1;
- }
-
- .screenshot-1,
- .screenshot-2 {
- position: relative;
- width: 100%;
- z-index: 10;
- }
-
- .screenshot-1 {
- animation: 1s ease-in upAndFadeIn;
- transform: rotate(-5deg) translateX(40%) scale(1.15);
-
- @media screen and (max-width: 768px) {
- animation: none;
- transform: rotate(-5deg) translateX(20%) scale(1.05);
- }
- }
-
- .screenshot-2 {
- animation: 1s ease-in upAndFadeInLeft;
- transform: rotate(15deg) translateX(30%) scale(1.15) translateY(10%);
- z-index: 9;
-
- @media screen and (max-width: 768px) {
- animation: none;
- transform: rotate(15deg) translateX(-10%) scale(0.9) translateY(5%);
- }
- }
- }
-
- .tips {
- padding: 80px 40px;
- border-radius: 10px;
- margin-bottom: 80px;
-
- @media screen and (max-width: $fluid-breakpoint) {
- padding: 20px;
- }
-
- .app-icon {
- width: 100px;
- border-radius: 16px;
- }
-
- .invite-icon {
- width: 100px;
- }
-
- .small-invite-icon {
- width: 40px;
- }
-
- span {
- font-style: italic;
- font-weight: 600;
- color: $color-4-dark;
- }
-
- .mb-40 {
- margin-bottom: 40px;
- }
-
- .tip {
- font-size: 20px;
- font-weight: 600;
- }
-
- ol {
- padding-left: 10px;
-
- li {
- img {
- width: 30px;
- height: 30px;
- display: inline;
- margin-bottom: -5px;
- }
- }
- }
-
- .columns {
- display: flex;
- @media screen and (max-width: $fluid-breakpoint) {
- display: block;
- }
-
- .left-column {
- display: flex;
- flex-direction: column;
- align-items: center;
- flex: 2;
- padding-right: 20px;
-
- img {
- width: 120px;
- height: 120px;
- }
-
- h2 {
- font-size: 32px;
- margin: 20px 0;
- font-weight: 600;
- color: $color-4;
- text-align: center;
- }
- }
-
- .right-column {
- flex: 4;
- }
- }
- }
-
- .static-pages-header {
- width: 100%;
- padding: 40px 0;
- border-bottom: 1px solid $color-6-dark;
- margin-bottom: 40px;
-
- h1 {
- font-size: 32px;
- font-weight: 600;
- color: $color-3-dark;
- margin-bottom: 10px;
- }
-
- p {
- font-size: 22px;
- }
- }
-
- .static-list-wrapper {
- display: grid;
- grid-template-columns: 1fr 1fr 1fr;
- grid-gap: 20px;
- width: 100%;
- list-style: none;
- padding: 40px 0;
-
- @media screen and (max-width: $fluid-breakpoint) {
- grid-template-columns: 100%;
- }
-
- li {
- .card {
- border-radius: 10px;
- background: linear-gradient(-45deg, $color-3-light, $color-3-dark);
-
- h4 {
- color: white;
- font-size: 24px;
- font-weight: 500;
- margin: 0 0 20px 0;
- }
-
- a {
- color: white;
- }
-
- p {
- color: transparentize($color-6-light, 0.1);
- }
-
- .card-header {
- padding: 20px;
- height: 160px;
- }
-
- .card-footer {
- background: transparentize($color-6-light, 0.9);
- text-align: right;
- border-radius: 0 0 10px 10px;
- padding: 10px 20px;
- }
- }
- }
- }
-}
-
-.container {
- position: relative;
- z-index: 20;
- box-sizing: border-box;
- max-width: $maximum-width;
- margin: 0 auto;
- width: 100%;
- padding: 0 10px;
-}
-
-.rich-formatting {
- @apply text-gray-900 dark:text-gray-100;
- font-family: var(--font-sans-serif), sans-serif;
- font-size: 16px;
- font-weight: 400;
- line-height: 30px;
- padding: 15px 30px;
-
- .text-center {
- text-align: center;
- }
-
- & > :first-child {
- margin-top: 0.5em;
- }
-
- a {
- color: var(--highlight-text-color);
- text-decoration: underline;
- }
-
- p {
- margin: 1em 0;
- }
-
- p,
- li {
- @apply text-gray-900 dark:text-gray-100;
- font-family: var(--font-sans-serif), sans-serif;
- font-size: 16px;
- font-weight: 400;
- line-height: 30px;
-
- a {
- color: var(--highlight-text-color);
- text-decoration: underline;
- }
- }
-
- strong,
- em,
- b {
- font-weight: bold;
- color: var(--primary-text-color);
- }
-
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- @apply text-gray-900 dark:text-gray-100;
- font-family: var(--font-display), sans-serif;
- margin-top: 2em;
- margin-bottom: 1.25em;
- }
-
- hr + {
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- margin-top: 1.25em;
- }
- }
-
- h1 {
- font-size: 26px;
- line-height: 30px;
-
- small {
- font-family: var(--font-sans-serif), sans-serif;
- display: block;
- font-size: 18px;
- font-weight: 400;
- color: var(--primary-text-color);
- }
- }
-
- h2 {
- font-weight: 600;
- font-size: 28px;
- line-height: 32px;
- }
-
- h3 {
- font-size: 18px;
- line-height: 24px;
- }
-
- h4 {
- font-size: 16px;
- line-height: 24px;
- }
-
- h5 {
- font-size: 14px;
- line-height: 24px;
- }
-
- h6 {
- font-size: 12px;
- line-height: 24px;
- }
-
- ul,
- ol {
- padding: 0 0 0 2em;
- margin: 0 0 0.85em;
-
- &[type="a"] {
- list-style-type: lower-alpha;
- }
-
- &[type="i"] {
- list-style-type: lower-roman;
- }
- }
-
- ul {
- list-style: disc;
- }
-
- ol {
- list-style: decimal;
- }
-
- li > ol,
- li > ul {
- margin-top: 6px;
- }
-
- li p {
- margin-top: 0;
- }
-
- hr {
- width: 100%;
- height: 0;
- border: 0;
- border-bottom: 1px solid hsla(var(--background-color_hsl), 0.6);
- margin: 2em 0;
-
- &.spacer {
- height: 1px;
- border: 0;
- }
- }
-
- pre {
- white-space: pre-wrap;
- }
-}
-
-.also-available {
- padding-top: 0;
-
- ul {
- display: inline;
- padding-left: 0;
- list-style: none;
-
- li {
- display: inline;
-
- &::after {
- content: " · ";
- }
- }
-
- li:last-child::after {
- content: "";
- }
- }
-}
-
-.public-layout {
- position: relative;
- background-size: 100% auto;
- background-repeat: no-repeat;
- background-position: 0 -106px;
- min-height: 100vh;
- display: flex;
- flex-direction: column;
-
- @media screen and (max-width: 767px) {
- .wave {
- display: none;
- }
-
- .follow-truth {
- margin-bottom: 20px;
- }
-
- .header {
- .nav-link {
- color: #fff;
-
- &:hover,
- &:focus,
- &:active {
- color: #fff;
- opacity: 0.9;
- }
- }
-
- .nav-button {
- background: var(--accent-color);
- color: #fff;
- transition: 0.2s;
-
- &:hover,
- &:focus,
- &:active {
- background: var(--accent-color--bright);
- }
- }
- }
- }
-}
-
-.app-holder > .public-layout {
- align-items: normal;
-}
-
-.landing {
- height: auto;
- min-height: 80vh;
-
- @media (min-width: 767px) {
- min-height: 550px;
- }
-
- .landing-columns {
- display: flex;
- flex-direction: row;
- padding: 40px 0 20px;
-
- &--left {
- margin-right: 80px;
- }
-
- &--right {
- margin-left: auto;
- width: 395px;
- background-color: var(--foreground-color);
- border-radius: 6px;
- height: 100%;
-
- .simple_form,
- .registrations-closed {
- padding: 20px;
- background-color: var(--brand-color--faint);
- border-radius: inherit;
- }
- }
-
- .registrations-closed {
- display: flex;
- flex-direction: column;
- height: 100%;
- align-items: center;
- justify-content: center;
- text-align: center;
- font-size: 18px;
-
- h2 {
- font-weight: bold;
- font-size: 24px;
- margin-bottom: 10px;
- }
- }
-
- @media (min-width: 767px) and (max-width: 1024px) {
- padding: 40px 20px 20px;
-
- &--left {
- margin-right: 40px;
- }
-
- &--right {
- width: 425px;
- }
- }
-
- @media screen and (max-width: 767px) {
- height: auto;
- padding: 20px 10px 30px;
- flex-direction: column;
- align-items: center;
-
- &--left {
- margin-right: 0;
- }
-
- &--right {
- width: 100%;
- margin-left: 0;
- margin-top: 30px;
- }
- }
- }
-
- &__brand {
- display: flex;
- justify-content: flex-start;
- align-items: center;
- flex-direction: column;
-
- .brand {
- margin-right: auto !important;
- line-height: normal;
- }
-
- img {
- height: 100px;
-
- @media (min-width: 767px) and (max-width: 1024px) {
- height: 60px;
- }
-
- @media screen and (max-width: 767px) {
- display: none;
- }
- }
-
- h1 {
- font-size: 40px;
- }
- }
-
- .directory {
- margin-top: 30px;
- background: transparent;
- box-shadow: none;
- border-radius: 0;
- }
-
- .simple_form .user_agreement .label_input > label {
- @apply text-gray-900 dark:text-gray-100 font-normal;
- }
-
- .simple_form p.lead {
- color: var(--primary-text-color);
- font-size: 15px;
- line-height: 20px;
- font-weight: 400;
- margin-bottom: 25px;
- }
-
- &__grid {
- max-width: 960px;
- margin: 0 auto;
- display: grid;
- grid-template-columns: minmax(0, 50%) minmax(0, 50%);
- grid-gap: 30px;
-
- @media screen and (max-width: 738px) {
- grid-template-columns: minmax(0, 100%);
- grid-gap: 10px;
-
- &__column-login {
- grid-row: 1;
- display: flex;
- flex-direction: column;
- }
-
- &__column-registration {
- grid-row: 2;
- }
-
- .directory {
- margin-top: 10px;
- }
- }
-
- @media screen and (max-width: $no-gap-breakpoint) {
- grid-gap: 0;
- }
- }
-}
-
-.brand {
- position: relative;
- text-decoration: none;
- margin-right: 15px;
-
- h1 {
- color: var(--brand-color);
- }
-}
-
-.brand__tagline {
- @apply text-black dark:text-white;
- display: block;
- width: 470px;
- font-size: 24px;
- line-height: 1.4;
- margin-top: 25px;
- font-weight: 400;
-
- @media (min-width: 767px) and (max-width: 1024px) {
- width: 320px;
- font-size: 20px;
- }
-
- @media screen and (max-width: 767px) {
- width: 100%;
- font-size: 22px;
- margin-top: 0;
- }
-}
-
-@media (min-width: 767px) {
- .hidden-sm {
- display: block;
- }
-
- .visible-sm {
- display: none;
- }
-}
-
-@media screen and (max-width: 767px) {
- .hidden-sm {
- display: none !important;
- }
-
- .visible-sm {
- display: block !important;
- }
-}
-
-.about-page {
- background: var(--brand-color--faint);
- border-radius: inherit;
-}
-
-.public-layout__top {
- position: relative;
- flex: 1;
-
- .header,
- .container {
- position: relative;
- }
-
- .otp-form-overlay__container {
- z-index: 9998;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- display: flex;
- align-items: center;
- justify-content: center;
- background: rgba($base-overlay-background, 0.7);
-
- .otp-form-overlay__form {
- @include standard-panel-shadow;
- border-radius: 10px;
- z-index: 9999;
- margin: 0 auto;
- max-width: 800px;
- position: relative;
- padding: 20px;
- background-color: var(--background-color);
- display: flex;
- flex-direction: column;
-
- .simple_form {
- padding: 30px 50px 50px;
- }
-
- .otp-form-overlay__close {
- align-self: flex-end;
-
- .svg-icon {
- height: 20px;
- width: 20px;
- }
- }
- }
- }
-}
-
-.public-layout__top .wave {
- position: absolute;
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-}
-
-h1.otp-login {
- font-size: 16px;
- line-height: 24px;
- font-weight: 800;
- padding: 10px 0;
-}
diff --git a/app/styles/accounts.scss b/app/styles/accounts.scss
index b0412298b..e4a0833c7 100644
--- a/app/styles/accounts.scss
+++ b/app/styles/accounts.scss
@@ -29,15 +29,6 @@
border-bottom: 1px solid var(--brand-color--med);
}
- &.compact {
- padding: 0;
- border-bottom: 0;
-
- .account__avatar-wrapper {
- margin-left: 0;
- }
- }
-
.account__display-name {
flex: 1 1 auto;
display: block;
@@ -50,13 +41,6 @@
display: flex;
}
}
-
- &__note {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- color: var(--primary-text-color--faint);
- }
}
.account__wrapper {
@@ -69,30 +53,6 @@
margin-right: 12px;
}
-.account__avatar {
- @include avatar-radius;
- position: relative;
- background-color: var(--brand-color--faint);
-
- &-inline {
- display: inline-block;
- vertical-align: middle;
- margin-right: 5px;
- }
-
- &-composite {
- @include avatar-radius;
- overflow: hidden;
-
- & > div {
- @include avatar-radius;
- float: left;
- position: relative;
- box-sizing: border-box;
- }
- }
-}
-
a .account__avatar {
cursor: pointer;
}
@@ -136,16 +96,6 @@ a .account__avatar {
}
}
-.account-authorize {
- padding: 14px 10px;
-
- .detailed-status__display-name {
- display: block;
- margin-bottom: 15px;
- overflow: hidden;
- }
-}
-
.account-authorize__avatar {
float: left;
margin-right: 10px;
@@ -203,23 +153,6 @@ a .account__avatar {
}
}
-.account__section-headline {
- button,
- a {
- flex: none;
- padding: 18px 15px;
- font-size: 16px;
- font-weight: 600;
-
- &.active {
- &::before,
- &::after {
- border-color: transparent transparent var(--foreground-color);
- }
- }
- }
-}
-
.account__moved-note {
padding: 14px 10px;
padding-bottom: 16px;
@@ -247,35 +180,6 @@ a .account__avatar {
left: -26px;
position: absolute;
}
-
- .detailed-status__display-avatar {
- position: relative;
- }
-
- .detailed-status__display-name {
- margin-bottom: 0;
- }
-}
-
-.relationship-tag {
- color: var(--primary-text-color);
- margin-bottom: 4px;
- margin-left: 4px;
- display: block;
- vertical-align: top;
- background-color: var(--background-color);
- text-transform: uppercase;
- font-size: 11px;
- font-weight: 500;
- padding: 4px;
- border-radius: 4px;
- opacity: 0.7;
- white-space: nowrap;
- transition: 0.2s;
-
- &:hover {
- opacity: 1;
- }
}
.account__joined-at {
diff --git a/app/styles/application.scss b/app/styles/application.scss
index 1b70c6982..da62ca314 100644
--- a/app/styles/application.scss
+++ b/app/styles/application.scss
@@ -11,21 +11,16 @@
@import 'themes';
@import 'variables';
@import 'fonts';
-@import 'reset';
@import 'basics';
-@import 'footer';
@import 'accounts';
@import 'boost';
@import 'loading';
@import 'ui';
// @import 'introduction';
-@import 'emoji_picker';
-@import 'about';
+@import 'emoji-picker';
@import 'rtl';
@import 'accessibility';
-@import 'donations';
@import 'dyslexic';
-@import 'demetricator';
@import 'chats';
@import 'navigation';
@import 'placeholder';
@@ -50,33 +45,17 @@
@import 'components/search';
@import 'components/react-toggle';
@import 'components/still-image';
-@import 'components/trends';
-@import 'components/wtf-panel';
-@import 'components/profile-media-panel';
-@import 'components/profile-info-panel';
-@import 'components/setting-toggle';
@import 'components/spoiler-button';
@import 'components/video-player';
@import 'components/audio-player';
-@import 'components/profile_hover_card';
+@import 'components/profile-hover-card';
@import 'components/filters';
@import 'components/snackbar';
-@import 'components/accordion';
-@import 'components/server-info';
@import 'components/admin';
@import 'components/backups';
@import 'components/crypto-donate';
-@import 'components/remote-timeline';
@import 'components/aliases';
@import 'components/icon';
-@import 'components/radio-button';
-@import 'components/directory';
-
-// Holiday
-@import 'holiday/halloween';
-
-// Truth custom styles
-@import 'truth';
@tailwind base;
@tailwind components;
diff --git a/app/styles/chats.scss b/app/styles/chats.scss
index fe3d2182a..7c98b11ff 100644
--- a/app/styles/chats.scss
+++ b/app/styles/chats.scss
@@ -18,10 +18,6 @@
.search--account {
border-top: 1px solid hsla(var(--primary-text-color_hsl), 0.2);
padding: 5px;
-
- input.search__input {
- border-radius: 6px;
- }
}
&__header {
@@ -69,17 +65,6 @@
transform: translateY(2px);
}
}
-
- .icon-with-badge__badge {
- position: static;
- pointer-events: none;
- width: 18px;
- height: 18px;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-right: 7px;
- }
}
&__content {
@@ -238,13 +223,6 @@
}
}
}
-
- .icon-with-badge__badge {
- top: 0;
- right: 0;
- left: auto;
- bottom: auto;
- }
}
.chat-box {
@@ -335,16 +313,6 @@
}
}
-.chatroom__back {
- display: flex;
- align-items: center;
- background: var(--accent-color--faint);
-
- .column-back-button {
- background: transparent;
- }
-}
-
.chat {
&__attachment-icon {
float: right;
diff --git a/app/styles/components/accordion.scss b/app/styles/components/accordion.scss
deleted file mode 100644
index 77c39ae1e..000000000
--- a/app/styles/components/accordion.scss
+++ /dev/null
@@ -1,71 +0,0 @@
-.explanation-box {
- padding: 5px 20px;
-}
-
-.accordion {
- @apply text-black dark:text-white bg-gray-100 dark:bg-gray-900;
- padding: 15px 20px;
- font-size: 14px;
- border-radius: 8px;
- margin: 0;
- position: relative;
-
- &__title {
- font-weight: bold !important;
- font-size: 16px !important;
- background: transparent !important;
- color: var(--primary-text-color) !important;
- padding: 0 !important;
- margin: 0 !important;
- text-transform: none !important;
- text-align: left !important;
- display: flex !important;
- align-items: center;
- border: 0;
- width: 100%;
-
- &::after {
- @apply text-black dark:text-white;
- content: '';
- display: block;
- font-family: 'Font Awesome 5 Free';
- font-weight: 900;
- font-size: 0.8em;
- padding-left: 0.6em;
- margin-left: auto;
- }
- }
-
- &__menu {
- position: absolute;
- top: 17px;
- right: 40px;
- }
-
- &__content {
- height: 0;
- overflow: hidden;
- }
-
- &--expanded &__title {
- margin-bottom: 10px !important;
-
- &::after {
- @apply text-black dark:text-white;
- content: '';
- }
- }
-
- &--expanded &__content {
- height: auto;
- }
-
- a {
- color: var(--brand-color--hicontrast);
- text-decoration: underline;
-
- &:hover {
- text-decoration: none;
- }
- }
-}
diff --git a/app/styles/components/account-header.scss b/app/styles/components/account-header.scss
index a9bdeea05..277f42f18 100644
--- a/app/styles/components/account-header.scss
+++ b/app/styles/components/account-header.scss
@@ -1,43 +1,4 @@
-.account__header__subscribe {
- position: absolute;
- top: 10px;
- right: 10px;
- right: max(10px, env(safe-area-inset-right));
- z-index: 1;
-
- .subscription-button {
- color: var(--primary-text-color);
- margin-bottom: 4px;
- display: flex;
- align-items: center;
- justify-content: center;
- background-color: var(--background-color);
- text-transform: uppercase;
- font-size: 13px;
- font-weight: 500;
- padding: 4px;
- border-radius: 4px;
- opacity: 0.7;
-
- &:active,
- &:focus,
- &:hover {
- opacity: 1;
- }
-
- &:not(.button-active) i.fa {
- margin: 0;
- }
-
- .svg-icon {
- width: 20px;
- height: 20px;
- }
- }
-}
-
.account__header__content {
- color: var(--primary-text-color--faint);
font-size: 14px;
font-weight: 400;
overflow: hidden;
diff --git a/app/styles/components/admin.scss b/app/styles/components/admin.scss
index 6c6fb42fa..302baa4e1 100644
--- a/app/styles/components/admin.scss
+++ b/app/styles/components/admin.scss
@@ -111,17 +111,6 @@
}
}
- &__statuses .accordion {
- padding: 10px;
- margin-bottom: 6px;
-
- &__title {
- font-size: 12px !important;
- font-weight: normal !important;
- margin-bottom: 0 !important;
- }
- }
-
&__status-content {
overflow: hidden;
}
diff --git a/app/styles/components/columns.scss b/app/styles/components/columns.scss
index 5ac761946..a9e32d19e 100644
--- a/app/styles/components/columns.scss
+++ b/app/styles/components/columns.scss
@@ -1,53 +1,3 @@
-.columns-area {
- display: flex;
- flex: 1 1 auto;
- flex-direction: row;
- justify-content: flex-start;
- position: relative;
-
- &__panels {
- display: flex;
- justify-content: center;
- width: 100%;
- height: 100%;
-
- &__pane {
- height: 100%;
- pointer-events: none;
- display: flex;
- justify-content: flex-end;
- padding-top: 15px;
-
- &--start {
- justify-content: flex-start;
- }
-
- &__inner {
- width: 265px;
- pointer-events: auto;
- height: 100%;
- }
- }
-
- &__main {
- display: flex;
- flex-direction: column;
- box-sizing: border-box;
- width: 100%;
- max-width: 600px;
- padding: 0 20px;
-
- @media screen and (max-width: 580px) {
- padding: 0;
- }
-
- @media screen and (min-width: 896px) {
- margin: 0 20px;
- padding: 0;
- }
- }
- }
-}
.column {
width: 350px;
@@ -59,10 +9,6 @@
}
@media screen and (min-width: 631px) {
- .columns-area {
- padding: 0;
- }
-
.column {
flex: 0 0 auto;
padding: 10px;
@@ -77,154 +23,6 @@
padding-right: 10px;
}
}
-
- .columns-area > div {
- .column {
- padding-left: 5px;
- padding-right: 5px;
- }
- }
-}
-
-.columns-area {
- display: block;
- flex-direction: column;
- width: 100%;
- margin: 0 auto;
- padding-top: 15px;
-
- @media screen and (max-width: 580px) {
- padding-top: 0;
- }
-
- .column {
- width: 100%;
- padding: 0;
- }
-
- .search__input {
- line-height: 18px;
- font-size: 16px;
- padding: 15px;
- padding-right: 30px;
- border-radius: 0;
- background-color: var(--foreground-color);
- }
-
- .search__icon .fa {
- top: 15px;
- }
-
- @media (max-width: 580px) {
- .timeline-compose-block {
- border-radius: 0;
- margin-top: 10px;
- }
- }
-
- @media screen and (min-width: 630px) {
- .detailed-status {
- padding: 15px;
-
- .media-gallery,
- .video-player {
- margin-top: 15px;
- }
- }
-
- .compose-form {
- padding: 15px;
- }
-
- .status {
- padding: 15px 15px 15px (48px + 15px * 2);
- min-height: 48px + 2px;
-
- &__avatar {
- left: 15px;
- top: 17px;
- }
-
- &__content {
- padding-top: 5px;
- }
-
- &__prepend {
- margin-left: 48px + 15px * 2;
- padding-top: 15px;
- }
-
- &__prepend-icon-wrapper {
- left: -32px;
- }
-
- .media-gallery,
- .video-player {
- margin-top: 10px;
- }
- }
-
- .account {
- padding: 15px 10px;
- }
-
- .notification {
- &__message {
- margin-left: 48px + 15px * 2;
- padding-top: 15px;
- }
-
- &__favourite-icon-wrapper {
- left: -32px;
- }
-
- .status {
- padding-top: 8px;
- }
-
- .account {
- padding-top: 8px;
- }
-
- .account__avatar-wrapper {
- margin-left: 17px;
- margin-right: 15px;
- }
- }
- }
-}
-
-// This controls where the left column breaks.
-@media screen and (max-width: 600px + (285px * 1) + (10px * 1)) {
- .columns-area__panels__pane--left {
- display: none;
- }
-}
-
-@media screen and (max-width: 600px + (285px * 2) + (10px * 2)) {
- .columns-area__panels__pane--right {
- display: none;
- }
-}
-
-.column-back-button {
- background: var(--accent-color--faint);
- color: var(--highlight-text-color);
- cursor: pointer;
- flex: 0 0 auto;
- font-size: 16px;
- line-height: inherit;
- border: 0;
- text-align: unset;
- padding: 15px;
- margin: 0;
- z-index: 3;
- outline: 0;
-
- &:hover,
- &:focus {
- text-decoration: underline;
- }
}
.column-link {
@@ -289,24 +87,6 @@
cursor: default;
}
-.columns-area .column {
- @include standard-panel;
-
- &--transparent {
- background: transparent;
- border-radius: 0;
- box-shadow: none;
- }
-
- @media screen and (max-width: 580px) {
- border-radius: 0;
-
- .material-status__status {
- border-radius: 0;
- }
- }
-}
-
.column-header__wrapper {
position: relative;
flex: 0 0 auto;
@@ -611,10 +391,6 @@
}
}
-.column-link--transparent .icon-with-badge__badge {
- border-color: var(--background-color);
-}
-
.column__switch .audio-toggle {
position: absolute;
z-index: 4;
@@ -663,83 +439,3 @@
}
}
}
-
-.column-title {
- text-align: center;
- padding: 40px;
-
- .logo {
- fill: var(--primary-text-color);
- width: 50px;
- margin: 0 auto;
- margin-bottom: 40px;
- }
-
- h3 {
- font-size: 24px;
- line-height: 1.5;
- font-weight: 700;
- margin-bottom: 10px;
- }
-
- p {
- font-size: 16px;
- line-height: 24px;
- font-weight: 400;
- color: var(--primary-text-color--faint);
- }
-}
-
-.column-actions {
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 40px;
- padding-top: 40px;
-
- &__background {
- position: absolute;
- left: 0;
- bottom: 0;
- height: 220px;
- width: auto;
- }
-}
-
-.column-list {
- position: relative;
-
- &__empty-message {
- padding: 0 20px;
- }
-}
-
-.follow_subhead {
- margin: 50px 0;
- font-size: 20px;
-}
-
-.column .explanation-box {
- background: var(--foreground-color);
-}
-
-// Pull to refresh
-.columns-area .column {
- .ptr,
- .ptr__children {
- background: var(--foreground-color);
- border-bottom-left-radius: 10px;
- border-bottom-right-radius: 10px;
-
- @media screen and (max-width: 580px) {
- border-radius: 0;
- }
- }
-
- &--transparent {
- .ptr,
- .ptr__children {
- background: transparent;
- }
- }
-}
diff --git a/app/styles/components/compose-form.scss b/app/styles/components/compose-form.scss
index 0d76263d3..d2297db4e 100644
--- a/app/styles/components/compose-form.scss
+++ b/app/styles/components/compose-form.scss
@@ -1,32 +1,4 @@
.compose-form {
- &__sensitive-button {
- padding: 10px;
- padding-top: 0;
- font-size: 14px;
- font-weight: 500;
- &.active { color: var(--highlight-text-color); }
- input[type=checkbox] { display: none; }
-
- .checkbox {
- display: inline-block;
- position: relative;
- border: 1px solid var(--brand-color);
- box-sizing: border-box;
- width: 18px;
- height: 18px;
- flex: 0 0 auto;
- margin-right: 10px;
- top: -1px;
- border-radius: 4px;
- vertical-align: middle;
-
- &.active {
- border-color: var(--highlight-text-color);
- background: var(--highlight-text-color);
- }
- }
- }
-
&__warning {
@apply text-xs mb-2.5 px-2.5 py-2 shadow-md rounded bg-accent-300 text-white;
@@ -135,34 +107,16 @@
position: relative;
&.video {
- background-image: url('../images/video-placeholder.png');
+ background-image: url('../assets/images/video-placeholder.png');
background-size: cover;
}
&.audio {
- background-image: url('../images/audio-placeholder.png');
+ background-image: url('../assets/images/audio-placeholder.png');
background-size: cover;
}
}
} // end .compose-form .compose-form__modifiers
-
- &__publish {
- display: flex;
- justify-content: flex-end;
- min-width: 0;
- flex: 0 0 auto;
-
- .compose-form__publish-button-wrapper {
- overflow: hidden;
- }
- }
-
- &__counter {
- display: flex;
- align-items: center;
- align-self: center;
- margin-left: auto;
- }
} // end .compose-form
.privacy-dropdown__dropdown {
diff --git a/app/styles/components/detailed-status.scss b/app/styles/components/detailed-status.scss
index 287838b2d..257ad8af6 100644
--- a/app/styles/components/detailed-status.scss
+++ b/app/styles/components/detailed-status.scss
@@ -1,96 +1,3 @@
-.detailed-status {
- // padding: 14px 10px;
-
- &--flex {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- align-items: flex-start;
-
- .status__content {
- flex: 100%;
- }
- }
-
- .status__content {
- font-size: 19px;
- line-height: 24px;
-
- .emojione {
- width: 24px;
- height: 24px;
- margin: -1px 0 0;
- }
-
- &--big {
- img.emojione {
- width: 56px;
- height: 56px;
- }
- }
- }
-
- .video-player,
- .audio-player {
- margin-top: 8px;
- }
-}
-
-.detailed-status__timestamp {
- display: flex;
- align-items: center;
-
- .svg-icon {
- width: 20px;
- height: 20px;
-
- svg {
- stroke-width: 1.3px;
- }
- }
-
- .svg-icon {
- margin-right: 5px;
- }
-}
-
-.detailed-status__wrapper {
- position: relative;
-}
-
-.detailed-status__display-name {
- color: var(--primary-text-color--faint);
- display: flex;
- line-height: 24px;
- margin-bottom: 15px;
- overflow: hidden;
-
- strong,
- span {
- text-overflow: ellipsis;
- overflow: hidden;
- }
-
- strong {
- font-size: 16px;
- color: var(--primary-text-color);
- }
-
- span.hover-ref-wrapper {
- display: inline;
- }
-
- .display-name__account {
- display: block;
- margin-top: -5px;
- }
-}
-
-.detailed-status__display-avatar {
- float: left;
- margin-right: 10px;
-}
-
.thread {
@apply bg-white dark:bg-primary-900 p-4 shadow-xl dark:shadow-none sm:p-6 sm:rounded-xl;
diff --git a/app/styles/components/directory.scss b/app/styles/components/directory.scss
deleted file mode 100644
index 7dc8e48cd..000000000
--- a/app/styles/components/directory.scss
+++ /dev/null
@@ -1,179 +0,0 @@
-.directory {
- &__filter-form {
- display: flex;
- gap: 30px;
- background: var(--foreground-color);
-
- &__column {
- padding-bottom: 10px;
- }
-
- .radio-button {
- display: block;
- }
- }
-
- &__list {
- display: grid;
- grid-gap: 10px;
- grid-template-columns: minmax(0, 50%) minmax(0, 50%);
- width: 100%;
- transition: opacity 100ms ease-in;
- box-sizing: border-box;
-
- &.loading {
- opacity: 0.7;
- }
-
- @media screen and (max-width: 630px) {
- grid-template-columns: minmax(0, 100%);
- }
- }
-
- &__card {
- @apply rounded-lg bg-gray-100 dark:bg-primary-800;
- box-sizing: border-box;
- margin-bottom: 0;
- box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1);
- overflow: hidden;
- position: relative;
-
- &__info {
- z-index: 1;
- position: absolute;
- top: 10px;
- left: 10px;
- }
-
- &__action-button {
- z-index: 1;
- position: absolute;
- top: 78px;
- right: 12px;
- }
-
- &__img {
- @apply bg-primary-200 dark:bg-gray-600;
- height: 125px;
- position: relative;
-
- img {
- display: block;
- width: 100%;
- height: 100%;
- margin: 0;
- object-fit: cover;
- }
- }
-
- &__bar {
- @apply bg-primary-200 dark:bg-primary-700;
- display: flex;
- align-items: center;
- padding: 10px;
-
- &__name {
- flex: 1 1 auto;
- display: flex;
- align-items: center;
- text-decoration: none;
- overflow: hidden;
- }
-
- .account__avatar {
- flex: 0 0 auto;
- width: 48px;
- min-width: 48px;
- height: 48px;
- padding-top: 2px;
-
- img {
- width: 100%;
- height: 100%;
- display: block;
- margin: 0;
- border-radius: 4px;
- background: var(--brand-color--faint);
- object-fit: cover;
- }
- }
-
- .display-name {
- margin-left: 15px;
- text-align: left;
-
- strong {
- @apply text-black dark:text-white;
- font-size: 15px;
- font-weight: 500;
- overflow: hidden;
- text-overflow: ellipsis;
- }
-
- span:not(.verified-icon) {
- @apply text-gray-500 dark:text-gray-400;
- display: block;
- font-size: 14px;
- font-weight: 400;
- overflow: hidden;
- text-overflow: ellipsis;
- }
-
- .verified-icon div,
- .verified-icon svg {
- @apply inline;
- }
- }
- }
-
- &__extra {
- background: var(--foreground-color);
- display: flex;
- align-items: center;
- justify-content: center;
-
- .accounts-table__count {
- padding: 15px 0;
- text-align: center;
- font-size: 15px;
- font-weight: 500;
- width: 33.33%;
- flex: 0 0 auto;
-
- small {
- display: block;
- color: var(--primary-text-color--faint);
- font-weight: 400;
- font-size: 14px;
- }
- }
-
- .account__header__content {
- @apply border-b border-solid border-gray-200 dark:border-primary-500;
- box-sizing: border-box;
- padding: 15px 10px;
- width: 100%;
- min-height: 50px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-
- &.empty {
- border-color: transparent;
- }
-
- p {
- display: none;
-
- &:first-child {
- display: inline;
- }
- }
-
- br {
- display: none;
- }
- }
- }
- }
-}
diff --git a/app/styles/components/display-name.scss b/app/styles/components/display-name.scss
index c7976a056..e5625d109 100644
--- a/app/styles/components/display-name.scss
+++ b/app/styles/components/display-name.scss
@@ -1,10 +1,7 @@
-.status__display-name,
-.detailed-status__display-name,
.account__display-name {
text-decoration: none;
}
-.status__display-name,
.account__display-name {
strong {
@apply text-gray-800 dark:text-gray-200;
@@ -17,8 +14,6 @@
}
}
-.status__display-name,
-.detailed-status__display-name,
a.account__display-name {
&:hover strong {
text-decoration: underline;
diff --git a/app/styles/components/emoji-reacts.scss b/app/styles/components/emoji-reacts.scss
index f21bf2fb1..12157969f 100644
--- a/app/styles/components/emoji-reacts.scss
+++ b/app/styles/components/emoji-reacts.scss
@@ -86,11 +86,6 @@
}
}
-.detailed-status__wrapper .emoji-react-selector {
- bottom: 40px;
- right: 10px;
-}
-
.status .emoji-react-selector {
bottom: 100%;
left: -20px;
diff --git a/app/styles/components/media-gallery.scss b/app/styles/components/media-gallery.scss
index e9bb14425..664600893 100644
--- a/app/styles/components/media-gallery.scss
+++ b/app/styles/components/media-gallery.scss
@@ -92,8 +92,7 @@
}
}
-.status__wrapper,
-.detailed-status__wrapper {
+.status__wrapper {
.media-gallery__item-thumbnail.letterboxed {
&,
.still-image {
diff --git a/app/styles/components/modal.scss b/app/styles/components/modal.scss
index 0ac611f91..7c27ad35c 100644
--- a/app/styles/components/modal.scss
+++ b/app/styles/components/modal.scss
@@ -6,18 +6,6 @@
overflow-y: hidden;
}
-.video-modal {
- max-width: 100vw;
- max-height: 100vh;
- position: relative;
-}
-
-.video-modal {
- .video-player video {
- height: auto;
- }
-}
-
.media-modal {
width: 100%;
height: 100%;
@@ -176,7 +164,6 @@
}
}
-.onboarding-modal,
.error-modal {
background: var(--background-color);
color: var(--primary-text-color);
@@ -229,7 +216,6 @@
min-width: 33px;
}
- .onboarding-modal__nav,
.error-modal__nav {
color: var(--highlight-text-color);
border: 0;
@@ -266,12 +252,9 @@
position: relative;
flex-direction: column;
overflow: hidden;
- width: 480px;
- max-width: 90vw;
border-radius: 10px;
border: 1px solid var(--background-color);
color: var(--primary-text-color--faint);
- background: var(--foreground-color);
.status__display-name {
display: block;
diff --git a/app/styles/components/profile_hover_card.scss b/app/styles/components/profile-hover-card.scss
similarity index 100%
rename from app/styles/components/profile_hover_card.scss
rename to app/styles/components/profile-hover-card.scss
diff --git a/app/styles/components/profile-info-panel.scss b/app/styles/components/profile-info-panel.scss
deleted file mode 100644
index 06f338804..000000000
--- a/app/styles/components/profile-info-panel.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-.profile-info-panel-content__deactivated {
- color: var(--primary-text-color--faint);
- display: block;
-}
diff --git a/app/styles/components/profile-media-panel.scss b/app/styles/components/profile-media-panel.scss
deleted file mode 100644
index e9169403c..000000000
--- a/app/styles/components/profile-media-panel.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-.media-panel {
- &__content {
- width: 100%;
- padding: 8px 0;
- }
-
- &__list {
- display: flex;
- flex-wrap: wrap;
- }
-
- &__empty {
- font-size: 14px;
- color: var(--primary-text-color--faint);
- }
-}
diff --git a/app/styles/components/radio-button.scss b/app/styles/components/radio-button.scss
deleted file mode 100644
index 77fb82846..000000000
--- a/app/styles/components/radio-button.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-.radio-button {
- @apply text-black dark:text-white;
- font-size: 14px;
- position: relative;
- display: inline-block;
- padding: 6px 0;
- line-height: 18px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- cursor: pointer;
-
- input[type=radio],
- input[type=checkbox] {
- display: none;
- }
-
- &__input {
- @apply inline-block relative box-border border border-solid border-primary-600;
- width: 18px;
- height: 18px;
- flex: 0 0 auto;
- margin-right: 10px;
- top: -1px;
- border-radius: 50%;
- vertical-align: middle;
-
- &.checked {
- @apply bg-primary-600;
- }
-
- &:active,
- &:focus,
- &:hover {
- @apply border-4;
- }
- }
-}
diff --git a/app/styles/components/remote-timeline.scss b/app/styles/components/remote-timeline.scss
deleted file mode 100644
index c59427a3f..000000000
--- a/app/styles/components/remote-timeline.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-.federation-restriction {
- display: flex;
- padding: 15px 0;
-}
diff --git a/app/styles/components/reply-mentions.scss b/app/styles/components/reply-mentions.scss
index e767e5a03..2a1ec75d7 100644
--- a/app/styles/components/reply-mentions.scss
+++ b/app/styles/components/reply-mentions.scss
@@ -6,8 +6,7 @@
}
}
-.status__wrapper,
-.detailed-status {
+.status__wrapper {
.reply-mentions {
display: block;
diff --git a/app/styles/components/search.scss b/app/styles/components/search.scss
index 7dcf461c1..e8a33a44e 100644
--- a/app/styles/components/search.scss
+++ b/app/styles/components/search.scss
@@ -2,12 +2,6 @@
position: relative;
}
-input.search__input {
- @include search-input;
- display: block;
- padding: 7px 30px 6px 10px;
-}
-
.search__icon {
&::-moz-focus-inner {
border: 0;
@@ -55,52 +49,6 @@ input.search__input {
}
}
-.search-header {
- display: block;
- width: 100%;
-
- &__text-container {
- display: none;
- padding: 25px 0;
- background-color: var(--accent-color--med);
-
- @media (min-width: 896px) {
- display: block;
- }
- }
-
- &__title-text {
- color: var(--primary-text-color);
- font-size: 27px;
- font-weight: bold;
- line-height: 32px;
- overflow: hidden;
- padding-left: 20px;
- text-overflow: ellipsis;
- white-space: nowrap;
- max-width: 1200px;
- margin: 0 auto;
- }
-
- &__type-filters-tabs {
- display: flex;
- width: 100%;
- max-width: 1200px;
- margin: 0 auto;
-
- @media screen and (max-width: 895px) {
- max-width: 580px;
- }
- }
-
- @media (min-width: 896px) and (max-width: 1190px) {
- &__title-text,
- &__type-filters-tabs {
- max-width: 900px;
- }
- }
-}
-
.column {
.search {
padding: 10px 15px;
@@ -108,12 +56,6 @@ input.search__input {
border-bottom: 1px solid hsla(var(--primary-text-color_hsl), 0.2);
}
- input.search__input {
- background-color: var(--background-color);
- border-radius: 8px;
- padding: 12px 36px 12px 16px;
- }
-
.search__icon .svg-icon {
right: 24px;
}
diff --git a/app/styles/components/server-info.scss b/app/styles/components/server-info.scss
deleted file mode 100644
index a24335eef..000000000
--- a/app/styles/components/server-info.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-.columns-area {
- .info_column_area {
- padding: 15px;
-
- .wtf-panel {
- border: 1px solid var(--brand-color--med);
- }
- }
-}
-
-.info__brand {
- .brand h1 {
- @apply text-2xl text-black dark:text-white;
- }
-
- .brand__tagline {
- font-size: 20px;
- line-height: 1.15;
- margin-top: 15px;
- }
-}
diff --git a/app/styles/components/setting-toggle.scss b/app/styles/components/setting-toggle.scss
deleted file mode 100644
index 1acbcfffe..000000000
--- a/app/styles/components/setting-toggle.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.setting-toggle__label {
- color: var(--gray-800);
-}
diff --git a/app/styles/components/sidebar-menu.scss b/app/styles/components/sidebar-menu.scss
index 9c015badb..9d3625863 100644
--- a/app/styles/components/sidebar-menu.scss
+++ b/app/styles/components/sidebar-menu.scss
@@ -16,8 +16,3 @@
transform: translateX(0);
}
}
-
-.sidebar-menu .wtf-panel {
- box-shadow: none !important;
- margin: 0;
-}
diff --git a/app/styles/components/spoiler-button.scss b/app/styles/components/spoiler-button.scss
index 5c6a77ae0..35498bef9 100644
--- a/app/styles/components/spoiler-button.scss
+++ b/app/styles/components/spoiler-button.scss
@@ -6,14 +6,6 @@
position: absolute;
z-index: 40;
- &--minified {
- display: block;
- left: 4px;
- top: 4px;
- width: auto;
- height: auto;
- }
-
&--hidden {
display: none;
}
diff --git a/app/styles/components/status.scss b/app/styles/components/status.scss
index bdbdfa7a4..1b3a0872b 100644
--- a/app/styles/components/status.scss
+++ b/app/styles/components/status.scss
@@ -218,21 +218,6 @@ a.status-card {
}
}
-@media screen and (min-width: 630px) {
- .columns-area .material-status .status {
- padding: 15px;
-
- &__avatar {
- top: 0;
- left: 0;
- }
-
- &__content {
- padding-top: 10px;
- }
- }
-}
-
.attachment-thumbs {
position: relative;
diff --git a/app/styles/components/trends.scss b/app/styles/components/trends.scss
deleted file mode 100644
index 7984aa873..000000000
--- a/app/styles/components/trends.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-.trends {
- &__header {
- color: var(--primary-text-color);
- background: var(--brand-color--faint);
- border-bottom: 1px solid var(--brand-color--med);
- font-weight: 500;
- padding: 15px;
- font-size: 16px;
- cursor: default;
-
- .fa {
- display: inline-block;
- margin-right: 5px;
- }
- }
-
- &__item {
- display: flex;
- align-items: center;
- padding: 15px;
- border-bottom: 1px solid var(--brand-color--med);
-
- &:last-child {
- border-bottom: 0;
- }
-
- &__name {
- flex: 1 1 auto;
- color: var(--primary-text-color);
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- font-size: 13px;
-
- strong {
- font-weight: bold;
- }
-
- a {
- color: var(--primary-text-color--faint);
- text-decoration: none;
- font-size: 14px;
- font-weight: 500;
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-
- &:hover,
- &:focus,
- &:active {
- span {
- text-decoration: underline;
- }
- }
- }
- }
-
- &__current {
- flex: 0 0 auto;
- width: 100px;
- font-size: 24px;
- line-height: 36px;
- font-weight: 500;
- text-align: center;
- color: var(--primary-text-color--faint);
- }
-
- &__sparkline {
- flex: 0 0 auto;
- width: 50px;
-
- path {
- stroke: var(--highlight-text-color) !important;
- }
- }
- }
-}
diff --git a/app/styles/components/video-player.scss b/app/styles/components/video-player.scss
index b4e87e9b6..1a81d167e 100644
--- a/app/styles/components/video-player.scss
+++ b/app/styles/components/video-player.scss
@@ -1,69 +1,3 @@
-.video-error-cover {
- align-items: center;
- background: var(--background-color);
- color: var(--primary-text-color);
- cursor: pointer;
- display: flex;
- flex-direction: column;
- height: 100%;
- justify-content: center;
- position: relative;
- text-align: center;
- z-index: 100;
-}
-
-.status__video-player {
- background: var(--background-color);
- box-sizing: border-box;
- cursor: default; /* May not be needed */
- margin-top: 8px;
- overflow: hidden;
- position: relative;
-}
-
-.status__video-player-video {
- height: 100%;
- object-fit: cover;
- position: relative;
- top: 50%;
- transform: translateY(-50%);
- width: 100%;
- z-index: 1;
-}
-
-.status__video-player-expand,
-.status__video-player-mute {
- color: var(--primary-text-color);
- opacity: 0.8;
- position: absolute;
- right: 4px;
- text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color;
-}
-
-.status__video-player-spoiler {
- display: none;
- color: var(--primary-text-color);
- left: 4px;
- position: absolute;
- text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color;
- top: 4px;
- z-index: 100;
-
- &.status__video-player-spoiler--visible {
- display: block;
- }
-}
-
-.status__video-player-expand {
- bottom: 4px;
- z-index: 100;
-}
-
-.status__video-player-mute {
- top: 4px;
- z-index: 5;
-}
-
.detailed,
.fullscreen {
.video-player__volume__current,
@@ -423,14 +357,3 @@
border: 0;
display: block;
}
-
-.media-spoiler-video-play-icon {
- border-radius: 100px;
- color: var(--primary-text-color--faint);
- font-size: 36px;
- left: 50%;
- padding: 5px;
- position: absolute;
- top: 50%;
- transform: translate(-50%, -50%);
-}
diff --git a/app/styles/components/wtf-panel.scss b/app/styles/components/wtf-panel.scss
deleted file mode 100644
index 2d536e781..000000000
--- a/app/styles/components/wtf-panel.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-.wtf-panel {
- @include standard-panel;
- display: flex;
- width: 100%;
- flex-direction: column;
- height: auto;
- box-sizing: border-box;
-
- @media screen and (max-width: 580px) {
- border-radius: 0;
- }
-
- &:first-child {
- margin-top: 0;
- }
-
- &:not(:last-of-type) {
- margin-bottom: 10px;
- }
-
- .wtf-panel-header {
- display: flex;
- align-items: center;
- margin-bottom: 10px;
- padding: 15px 15px 0;
-
- &__icon {
- margin-right: 10px;
- font-size: 20px;
-
- &.svg-icon {
- width: 20px;
- height: 20px;
- }
- }
-
- &__label {
- flex: 1 1;
- color: var(--primary-text-color);
- font-size: 16px;
- font-weight: bold;
- line-height: 19px;
- }
- }
-
- &__content {
- width: 100%;
- padding-top: 8px;
- }
-
- &__list {
- padding: 0 5px;
- }
-
- &__expand-btn {
- @apply border-gray-300 dark:border-gray-600;
- display: block;
- width: 100%;
- height: 100%;
- max-height: 46px;
- position: relative;
- border-top: 1px solid;
- transition: max-height 150ms ease;
- overflow: hidden;
- opacity: 1;
- text-align: center;
- line-height: 46px;
- font-size: 14px;
- cursor: pointer;
- color: var(--primary-text-color);
- text-decoration: none;
- }
-}
diff --git a/app/styles/demetricator.scss b/app/styles/demetricator.scss
deleted file mode 100644
index 8af4e8ce7..000000000
--- a/app/styles/demetricator.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-body.demetricator {
- .icon-with-badge__badge {
- display: none;
- }
-}
diff --git a/app/styles/donations.scss b/app/styles/donations.scss
deleted file mode 100644
index 121e6fbc3..000000000
--- a/app/styles/donations.scss
+++ /dev/null
@@ -1,113 +0,0 @@
-.sub {
- border: 1px solid hsla(var(--primary-text-color_hsl), 0.5);
- padding: 20px;
- position: relative;
- border-radius: 4px;
-
- &__title {
- text-transform: uppercase;
- font-weight: bold;
- font-size: 1.3rem;
- margin-bottom: 4px;
- }
-
- &__amount {
- font-size: 2rem;
- line-height: normal;
- margin: 4px 0 12px;
- }
-
- &__billing {
- font-size: 14px;
- }
-
- &__button {
- margin-top: 20px;
- }
-
- /* Status indicator */
- &::before {
- content: '';
- display: block;
- position: absolute;
- top: 15px;
- right: 13px;
- border-radius: 100%;
- background-color: transparent;
- height: 13px;
- width: 13px;
- }
-
- &--trialing,
- &--active {
- &::before {
- background-color: #0f0;
- }
- }
-
- &--cancelling::before {
- background-color: #ff0;
- }
-
- &--incomplete,
- &--incomplete_expired,
- &--past_due,
- &--canceled,
- &--unpaid {
- &::before {
- background-color: #f00;
- }
- }
-}
-
-.subs {
- .sub {
- border-radius: 0;
-
- & + .sub {
- border-top: 0;
- }
-
- &:first-child {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- }
-
- &:last-child {
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- }
- }
-}
-
-body.admin {
- .actions {
- margin-top: 40px;
- }
-}
-
-.funding-panel {
- margin-top: 15px;
-
- strong {
- font-weight: bold;
- }
-
- &__ratio {
- font-size: 14px;
- margin-bottom: 8px;
- }
-
- &__description {
- margin-top: 14px;
- font-size: 15px;
- }
-
- .button {
- margin-top: 20px;
- }
-
- &__reached {
- color: var(--brand-color);
- }
-}
diff --git a/app/styles/emoji_picker.scss b/app/styles/emoji-picker.scss
similarity index 100%
rename from app/styles/emoji_picker.scss
rename to app/styles/emoji-picker.scss
diff --git a/app/styles/fonts.scss b/app/styles/fonts.scss
index bd8f1bec5..fbb21c381 100644
--- a/app/styles/fonts.scss
+++ b/app/styles/fonts.scss
@@ -3,26 +3,26 @@
// OpenDyslexic
@font-face {
font-family: 'OpenDyslexic';
- src: url('../fonts/OpenDyslexic/OpenDyslexic-Regular.woff2') format('woff2');
+ src: url('../assets/fonts/OpenDyslexic/OpenDyslexic-Regular.woff2') format('woff2');
}
@font-face {
font-family: 'OpenDyslexic';
font-weight: bold;
- src: url('../fonts/OpenDyslexic/OpenDyslexic-Bold.woff2') format('woff2');
+ src: url('../assets/fonts/OpenDyslexic/OpenDyslexic-Bold.woff2') format('woff2');
}
@font-face {
font-family: 'OpenDyslexic';
font-weight: bold;
font-style: italic;
- src: url('../fonts/OpenDyslexic/OpenDyslexic-Bold-Italic.woff2') format('woff2');
+ src: url('../assets/fonts/OpenDyslexic/OpenDyslexic-Bold-Italic.woff2') format('woff2');
}
@font-face {
font-family: 'OpenDyslexic';
font-style: italic;
- src: url('../fonts/OpenDyslexic/OpenDyslexic-Italic.woff2') format('woff2');
+ src: url('../assets/fonts/OpenDyslexic/OpenDyslexic-Italic.woff2') format('woff2');
}
// TYPEOGRAPHY MIXINS
@@ -62,11 +62,11 @@
// Soapbox icon font
@font-face {
font-family: 'soapbox';
- src: url('../fonts/soapbox/soapbox.eot?pryg6i');
- src: url('../fonts/soapbox/soapbox.eot?pryg6i#iefix') format('embedded-opentype'),
- url('../fonts/soapbox/soapbox.ttf?pryg6i') format('truetype'),
- url('../fonts/soapbox/soapbox.woff?pryg6i') format('woff'),
- url('../fonts/soapbox/soapbox.svg?pryg6i#soapbox') format('svg');
+ src: url('../assets/fonts/soapbox/soapbox.eot?pryg6i');
+ src: url('../assets/fonts/soapbox/soapbox.eot?pryg6i#iefix') format('embedded-opentype'),
+ url('../assets/fonts/soapbox/soapbox.ttf?pryg6i') format('truetype'),
+ url('../assets/fonts/soapbox/soapbox.woff?pryg6i') format('woff'),
+ url('../assets/fonts/soapbox/soapbox.svg?pryg6i#soapbox') format('svg');
font-weight: normal;
font-style: normal;
}
diff --git a/app/styles/footer.scss b/app/styles/footer.scss
deleted file mode 100644
index 835d40061..000000000
--- a/app/styles/footer.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-.public-layout {
- .footer {
- display: flex;
- padding: 40px 0;
- font-size: 12px;
- justify-content: center;
- align-items: center;
- margin-top: auto;
- color: #fff;
- background-color: rgba(0, 0, 0, 0.15);
-
- @media screen and (max-width: 1024px) {
- padding: 40px 20px;
- }
-
- .footer-container {
- display: flex;
- width: 1280px;
- align-items: center;
- padding: 0 20px;
- flex-direction: column-reverse;
- justify-content: center;
- }
-
- h4 {
- text-transform: uppercase;
- font-weight: 700;
- margin-bottom: 8px;
- color: var(--primary-text-color--faint);
- font-size: 1.6rem;
- line-height: 1.5;
-
- a {
- color: inherit;
- text-decoration: none;
- }
- }
-
- .copyright {
- margin: 0 auto auto;
- text-align: center;
-
- span {
- font-size: 1.3rem;
- font-weight: 500;
- line-height: 1.5;
- }
- }
-
- ul {
- display: flex;
- flex-wrap: wrap;
- margin: 0 auto 20px;
-
- li {
- a {
- text-decoration: none;
- color: $color-5-dark;
- font-size: 1.3rem;
- font-weight: 500;
- line-height: 1.5;
- padding: 10px 4px;
- margin-left: 10px;
-
- &:hover,
- &:active,
- &:focus {
- text-decoration: underline;
- }
- }
- }
- }
- }
-}
diff --git a/app/styles/forms.scss b/app/styles/forms.scss
index 50a59a1be..fc4b6a257 100644
--- a/app/styles/forms.scss
+++ b/app/styles/forms.scss
@@ -586,38 +586,6 @@ code {
margin-bottom: 14px;
font-weight: bold;
}
-
- .showable-password {
- position: relative;
-
- input {
- padding-right: 36px;
- }
-
- .icon-button {
- @apply text-black dark:text-white;
- position: absolute;
- top: 0;
- right: 0;
- height: 38px;
- width: 36px;
- padding: 0;
- margin: 0;
- background: transparent;
-
- .svg-icon {
- height: 20px;
- width: 20px;
- }
- }
- }
-}
-
-.block-icon {
- display: block;
- margin: 0 auto;
- margin-bottom: 10px;
- font-size: 24px;
}
.simple_form {
@@ -660,14 +628,6 @@ code {
}
}
-.columns-area {
- form.simple_form--public {
- @include standard-panel;
- margin-top: 20px;
- padding: 60px 30px;
- }
-}
-
.captcha {
background-color: #fff;
border-radius: 4px;
diff --git a/app/styles/holiday/halloween.scss b/app/styles/holiday/halloween.scss
deleted file mode 100644
index 9fcf96ae5..000000000
--- a/app/styles/holiday/halloween.scss
+++ /dev/null
@@ -1,144 +0,0 @@
-.halloween,
-.site-preview.halloween {
- // Set brand color to orange
- --brand-color_h: 29.727272727272727;
- --brand-color_s: 100%;
- --brand-color_l: 43.13725490196079%;
-
- // Stars BG
- background-color: #904700; // Color matches twinkle.svg
- background-image: url('../images/halloween/starfield.png');
- background-size: cover;
- background-attachment: fixed;
- background-position: center;
-
- // Full-screen pseudo-elements to hold BG graphics
- &::before,
- &::after,
- > .app-holder::before,
- > .app-holder::after {
- content: '';
- display: block;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background-size: cover;
- background-position: center;
- width: 100%;
- height: 100%;
- z-index: -100;
- }
-
- // Spiderweb BG
- &::before {
- background-image: url('../images/halloween/spiderweb.svg');
- }
-
- // Twinkle effect by masking with semi-transparent animated circles
- &::after {
- z-index: -101;
- background: transparent url("../images/halloween/twinkle.svg") repeat top center;
- animation: halloween-twinkle 200s linear infinite;
- }
-
- > .app-holder {
- // Vignette
- &::before {
- background-image: radial-gradient(
- circle,
- transparent 0%,
- transparent 60%,
- var(--vignette-color) 100%
- );
- }
-
- // Floating clouds BG
- &::after {
- background: transparent url("../images/halloween/clouds.png") repeat top center;
- animation: halloween-clouds 200s linear infinite;
- }
-
- // Dangling spider
- .ui .page__top::after,
- .ui .page__columns::after {
- content: '';
- display: block;
- width: 100px;
- height: 100px;
- right: 20px;
- background-image: url('../images/halloween/spider.svg');
- background-size: contain;
- background-repeat: no-repeat;
- background-position: top right;
- z-index: -1;
- pointer-events: none;
- }
-
- .ui .page__columns::after {
- position: fixed;
- top: 50px;
- }
-
- .ui .page__top::after {
- position: absolute;
- bottom: -100px;
- }
-
- .ui .page__top + .page__columns::after {
- display: none;
- }
-
- .profile-info-panel {
- color: #fff;
-
- &-content__name h1 {
- span:first-of-type {
- color: hsla(0, 0%, 100%, 0.6);
- }
-
- small {
- color: #fff;
- }
- }
-
- &-content__bio {
- color: #fff;
- }
-
- &-content__bio a,
- &-content__fields a {
- color: hsl(
- var(--brand-color_h),
- var(--brand-color_s),
- calc(var(--brand-color_l) + 8%)
- );
- }
- }
- }
-
- .column-header > button.grouped,
- .column-header > .btn.grouped {
- color: #fff;
-
- &:hover {
- color: #fff;
- }
-
- &::before {
- background-color: var(--brand-color);
- }
- }
-}
-
-// Animations
-@keyframes halloween-twinkle {
- from { background-position: 0 0; }
- to { background-position: -10000px 5000px; }
-}
-
-@keyframes halloween-clouds {
- from { background-position: 0 0; }
- to { background-position: 10000px 0; }
-}
diff --git a/app/styles/placeholder.scss b/app/styles/placeholder.scss
index 72a69c155..709926650 100644
--- a/app/styles/placeholder.scss
+++ b/app/styles/placeholder.scss
@@ -1,4 +1,3 @@
-.placeholder-hashtag,
.media-gallery--placeholder {
position: relative;
@@ -32,11 +31,6 @@
100% { background-position-x: 0; }
}
-.placeholder-hashtag .trends__item__name {
- color: var(--brand-color);
- opacity: 0.1;
-}
-
.chat-list-item--placeholder .chat__last-message {
letter-spacing: -1px;
color: var(--brand-color) !important;
diff --git a/app/styles/reset.scss b/app/styles/reset.scss
deleted file mode 100644
index 2906b3ac2..000000000
--- a/app/styles/reset.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-/* http://meyerweb.com/eric/tools/css/reset/
- v2.0 | 20110126
- License: none (public domain)
-*/
-
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header, hgroup,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
- margin: 0;
- padding: 0;
- border: 0;
- font-size: 100%;
- font: inherit;
- vertical-align: baseline;
-}
-
-/* HTML5 display-role reset for older browsers */
-article, aside, details, figcaption, figure,
-footer, header, hgroup, menu, nav, section {
- display: block;
-}
-
-body {
- line-height: 1;
-}
-
-ol, ul {
- list-style: none;
-}
-
-blockquote, q {
- quotes: none;
-}
-
-blockquote:before, blockquote:after,
-q:before, q:after {
- content: '';
- content: none;
-}
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
\ No newline at end of file
diff --git a/app/styles/rtl.scss b/app/styles/rtl.scss
index 852cf3edd..dc17469e2 100644
--- a/app/styles/rtl.scss
+++ b/app/styles/rtl.scss
@@ -13,11 +13,6 @@ body.rtl {
margin-left: 5px;
}
- .search__input {
- padding-right: 10px;
- padding-left: 30px;
- }
-
.search__icon .fa {
right: auto;
left: 10px;
@@ -69,16 +64,6 @@ body.rtl {
margin-right: 0;
}
- .detailed-status__display-name .display-name {
- text-align: right;
- }
-
- .detailed-status__display-avatar {
- margin-right: 0;
- margin-left: 10px;
- float: right;
- }
-
.fa-ul {
margin-left: 0;
margin-left: 2.14285714em;
@@ -134,13 +119,6 @@ body.rtl {
padding-right: 10px;
}
}
-
- .columns-area > div {
- .column {
- padding-left: 5px;
- padding-right: 5px;
- }
- }
}
.public-layout {
diff --git a/app/styles/truth.scss b/app/styles/truth.scss
deleted file mode 100644
index 5c7e1770f..000000000
--- a/app/styles/truth.scss
+++ /dev/null
@@ -1,339 +0,0 @@
-:root {
- --tmg-green: #008000;
-}
-
-.tabs-bar {
- background: var(--foreground-color);
- border-bottom: 1px solid hsla(var(--primary-text-color_hsl), 0.1);
-}
-
-.tabs-bar__link {
- &--logo {
- padding: 9px 5px;
- align-self: center;
- justify-self: center;
- filter: none;
- }
-
- .svg-icon {
- color: var(--brand-color);
- transition: none;
- }
-
- &:hover .svg-icon {
- color: white;
- }
-}
-
-.tabs-bar .react-toggle-track {
- background-color: var(--brand-color) !important;
-}
-
-.theme-mode-dark .primary-navigation > button::before,
-.theme-mode-dark .primary-navigation > .btn::before {
- background-color: var(--brand-color) !important;
-}
-
-@media screen and (max-width: 450px) {
- .tabs-bar__link--logo {
- margin: 0 auto;
- padding: 12px 5px;
- position: absolute;
- left: 0;
- right: 0;
- text-align: center;
- }
-
- .tabs-bar__split--right {
- margin: 0;
- order: -1;
- }
-}
-
-.account__section-headline .column-header__buttons,
-.account__header__extra__links > div {
- display: none;
-}
-
-.account__header__extra__links {
- justify-content: flex-start;
- border-bottom: 1px solid #ccc;
-
- a {
- display: flex;
- align-items: center;
- }
-
- span:first-of-type {
- margin-right: 5px;
- }
-}
-
-.display-name__name {
- display: inline-flex;
- align-items: center;
-}
-
-// .verified-icon {
-// display: inline-flex;
-// align-items: center;
-// margin: 0 3px;
-// padding-top: 2px;
-
-// svg {
-// width: 18px;
-// height: 18px;
-// }
-// }
-
-.theme-mode-light {
- --background-color_h: 0;
- --background-color_s: 0%;
- --background-color_l: 96%;
-}
-
-.status__action-bar__counter--reblog,
-.detailed-status__button--reblog {
- .icon-button.active {
- color: var(--tmg-green);
-
- .svg-icon svg {
- color: var(--tmg-green);
- }
- }
-}
-
-.status__action-bar__counter--favourite,
-.detailed-status__button--favourite {
- .icon-button.active {
- color: var(--accent-color);
- fill: var(--accent-color);
-
- .svg-icon svg {
- color: var(--accent-color);
- fill: var(--accent-color);
- }
- }
-}
-
-.emoji-react--reblogs {
- .svg-icon {
- color: var(--tmg-green);
- }
-}
-
-.sidebar-menu__close {
- top: 20px;
-}
-
-.primary-navigation__icon {
- stroke: currentColor;
-}
-
-.public-layout {
- background: linear-gradient(135deg, #fff, #f5f5f5);
-
- .header {
- .simple_form {
- button {
- background: $color-6-light;
- color: $color-3;
- font-size: 14px;
- line-height: 14px;
- padding: 10px 15px;
- border: 1px solid $color-3 !important;
-
- &:hover,
- &:active,
- &:focus {
- background: $color-6;
- }
-
- &::selection {
- background-color: transparent;
- color: $color-3;
- }
- }
-
- input[type="text"],
- input[type="password"] {
- padding: 8px 15px;
- font-size: 14px;
- line-height: 14px;
- background: $color-6-light;
- border-color: $color-6-dark;
- }
- }
-
- .nav-right .simple_form.new_user .fields-group p.hint.subtle-hint a {
- background-color: transparent;
- }
- }
-}
-
-.landing {
- .landing-columns--left {
- display: flex;
- align-items: center;
- }
-
- .landing-columns--right {
- display: flex;
- align-items: center;
-
- .simple_form {
- position: relative;
- z-index: 10;
- box-shadow: 0 0 30px 5px rgba(0, 0, 0, 0.05);
- background-color: $color-6-light;
- padding: 40px;
-
- h1 {
- text-align: center;
- font-size: 32px;
- font-weight: 600;
- color: $color-4-dark;
- margin-bottom: 30px;
- }
-
- input[type="text"],
- input[type="password"],
- input[type="email"] {
- padding: 10 15px;
- font-size: 14px;
- line-height: 14px;
- background: $color-6;
- border-color: $color-6-dark;
- margin-bottom: 10px;
- }
-
- button {
- background: $color-2;
- font-size: 16px;
- line-height: 16px;
- padding: 15px;
- border: none;
- border-radius: 8px;
- color: $color-6-light;
-
- &:hover,
- &:active,
- &:focus {
- background: $color-1;
- }
-
- &::selection {
- background-color: transparent;
- color: $color-3;
- }
- }
- }
- }
-}
-
-.public-layout {
- .brand__tagline {
- width: auto;
- max-width: 800px;
- }
-
- .landing__brand {
- align-items: flex-start;
- }
-
- .public-layout__top {
- display: flex;
- flex-direction: column;
-
- .header-container {
- position: relative;
- padding-top: 10px;
- }
-
- .nav-left,
- .nav-right {
- position: relative;
- z-index: 10;
- }
-
- .container {
- display: flex;
- flex: 1;
- }
-
- .landing {
- display: flex;
- flex: 1;
- align-items: center;
- justify-content: space-between;
- }
-
- .landing-columns {
- width: 100%;
-
- .landing-columns--right {
- margin-left: auto;
-
- form {
- margin: 0 auto;
- }
- }
-
- .landing-columns--left {
- position: relative;
- z-index: 10;
- margin-right: 0;
-
- svg {
- width: 700px;
- max-width: 100%;
- fill: $color-3-dark;
-
- .cls-1 {
- opacity: 0.33;
- }
-
- .cls-2 {
- opacity: 0.66;
- }
- }
- }
- }
- }
-
- .footer {
- display: flex;
- padding: 40px 0;
- font-size: 12px;
- justify-content: center;
- align-items: center;
- margin-top: auto;
- color: #fff;
- background-color: transparent;
-
- ul {
- justify-content: center;
- }
-
- .copyright {
- color: $color-5;
- }
- }
-}
-
-.compose-form__publish--direct button {
- background-color: var(--brand-color);
-}
-
-.sub-navigation__cog {
- display: none;
-}
-
-.detailed-status__link {
- pointer-events: none;
-}
-
-// Pull to refresh
-.ptr__pull-down {
- transform: translateY(10px);
-}
diff --git a/app/styles/ui.scss b/app/styles/ui.scss
index e11041089..80884e2b5 100644
--- a/app/styles/ui.scss
+++ b/app/styles/ui.scss
@@ -151,30 +151,6 @@
.ellipsis::after { content: "…"; }
-.timeline-compose-block {
- @include standard-panel;
- display: flex;
- align-items: flex-start;
- padding: 20px;
- margin-bottom: 10px;
-
- .compose-form {
- flex: 1 1;
- padding: 0 0 0 20px !important;
- position: relative;
-
- @media (max-width: 405px) {
- padding: 0 !important;
- }
- }
-
- &__avatar {
- display: block;
- border-radius: 50%;
- @media (max-width: 405px) { display: none; }
- }
-}
-
.no-reduce-motion .spoiler-input {
transition: height 0.4s ease, opacity 0.4s ease;
}
@@ -193,33 +169,6 @@
}
}
-.domain {
- padding: 10px;
- border-bottom: 1px solid var(--brand-color--med);
-
- .domain__domain-name {
- flex: 1 1 auto;
- display: block;
- color: var(--primary-text-color);
- text-decoration: none;
- font-size: 14px;
- font-weight: 500;
- }
-
- &__buttons .svg-icon {
- height: 18px;
- width: 18px;
- }
-}
-
-article:last-child > .domain {
- border-bottom: none;
-}
-
-.domain__wrapper {
- display: flex;
-}
-
.image-loader {
position: relative;
width: 100%;
@@ -232,7 +181,7 @@ article:last-child > .domain {
.image-loader__preview-canvas {
max-width: $media-modal-media-max-width;
max-height: $media-modal-media-max-height;
- background: url('../images/void.png') repeat;
+ background: url('../assets/images/void.png') repeat;
object-fit: contain;
}
@@ -253,7 +202,6 @@ article:last-child > .domain {
.react-swipeable-view-container {
&,
- .columns-area,
.column {
height: 100%;
}
@@ -320,26 +268,6 @@ article:last-child > .domain {
}
}
-.icon-with-badge__badge {
- @include font-size(14);
- @include line-height(14);
- position: absolute;
- box-sizing: border-box;
- left: -10px;
- top: 3px;
- min-width: 16px;
- height: 16px;
- padding: 1px 3px 0;
- border-radius: 8px;
- text-align: center;
- color: #fff;
- background: var(--accent-color);
-
- @media screen and (max-width: 895px) {
- top: 0;
- }
-}
-
.slist {
&--flex {
display: flex;
@@ -522,8 +450,7 @@ article:last-child > .domain {
}
}
-.filter-bar,
-.account__section-headline {
+.filter-bar {
cursor: default;
display: flex;
flex-shrink: 0;
@@ -590,12 +517,6 @@ article:last-child > .domain {
100% { opacity: 1; }
}
-.page__top + .page__columns .columns-area {
- @media screen and (max-width: 580px) {
- padding-top: 10px;
- }
-}
-
.text-muted {
color: var(--gray-500);
}
diff --git a/jest.config.js b/jest.config.js
index 468401c51..396486a39 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -20,9 +20,9 @@ module.exports = {
'app/soapbox/**/*.js',
'app/soapbox/**/*.ts',
'app/soapbox/**/*.tsx',
- '!app/soapbox/features/emoji/emoji_compressed.js',
+ '!app/soapbox/features/emoji/emoji-compressed.js',
'!app/soapbox/locales/locale-data/*.js',
- '!app/soapbox/service_worker/entry.ts',
+ '!app/soapbox/service-worker/entry.ts',
'!app/soapbox/jest/test-setup.ts',
'!app/soapbox/jest/test-helpers.ts',
],
diff --git a/jsdoc.conf.js b/jsdoc.conf.js
index e3d2325a0..ec2335fbe 100644
--- a/jsdoc.conf.js
+++ b/jsdoc.conf.js
@@ -5,7 +5,7 @@ const { join } = require('path');
const {
FE_BUILD_DIR,
FE_SUBDIRECTORY,
-} = require(join(__dirname, 'app', 'soapbox', 'build_config'));
+} = require(join(__dirname, 'app', 'soapbox', 'build-config'));
module.exports = {
plugins: [],
diff --git a/package.json b/package.json
index 576eec262..6faed0629 100644
--- a/package.json
+++ b/package.json
@@ -56,18 +56,19 @@
"@lcdp/offline-plugin": "^5.1.0",
"@metamask/providers": "^9.0.0",
"@popperjs/core": "^2.11.5",
- "@reach/menu-button": "^0.16.2",
- "@reach/popover": "^0.16.2",
- "@reach/portal": "^0.16.2",
- "@reach/rect": "^0.16.0",
- "@reach/tabs": "^0.16.4",
- "@reach/tooltip": "^0.16.2",
+ "@reach/menu-button": "^0.18.0",
+ "@reach/popover": "^0.18.0",
+ "@reach/portal": "^0.18.0",
+ "@reach/rect": "^0.18.0",
+ "@reach/tabs": "^0.18.0",
+ "@reach/tooltip": "^0.18.0",
"@reduxjs/toolkit": "^1.8.1",
"@sentry/browser": "^7.11.1",
"@sentry/react": "^7.11.1",
"@sentry/tracing": "^7.11.1",
- "@tabler/icons": "^1.109.0",
+ "@tabler/icons": "^1.111.0",
"@tailwindcss/forms": "^0.5.3",
+ "@tailwindcss/line-clamp": "^0.4.2",
"@tailwindcss/typography": "^0.5.7",
"@tanstack/react-query": "^4.0.10",
"@testing-library/react": "^12.1.4",
@@ -173,13 +174,13 @@
"react-redux": "^7.2.5",
"react-router-dom": "^5.3.0",
"react-router-scroll-4": "^1.0.0-beta.2",
- "react-simple-pull-to-refresh": "^1.3.0",
+ "react-simple-pull-to-refresh": "^1.3.3",
"react-sparklines": "^1.7.0",
"react-sticky-box": "^1.0.2",
"react-swipeable-views": "^0.14.0",
"react-textarea-autosize": "^8.3.4",
"react-toggle": "^4.1.2",
- "react-virtuoso": "^2.16.2",
+ "react-virtuoso": "^3.1.3",
"redux": "^4.1.1",
"redux-immutable": "^4.0.0",
"redux-thunk": "^2.2.0",
diff --git a/soapbox-screenshot.png b/soapbox-screenshot.png
index 19c19e2c4..61c57bb47 100644
Binary files a/soapbox-screenshot.png and b/soapbox-screenshot.png differ
diff --git a/tailwind.config.js b/tailwind.config.js
index ab0b64525..7d562327b 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -85,6 +85,7 @@ module.exports = {
},
plugins: [
require('@tailwindcss/forms'),
+ require('@tailwindcss/line-clamp'),
require('@tailwindcss/typography'),
],
};
diff --git a/webpack/configuration.ts b/webpack/configuration.ts
index 9596cf8e3..39b8bef8e 100644
--- a/webpack/configuration.ts
+++ b/webpack/configuration.ts
@@ -4,7 +4,7 @@ import { env } from 'process';
const {
FE_SUBDIRECTORY,
FE_BUILD_DIR,
-} = require(join(__dirname, '..', 'app', 'soapbox', 'build_config'));
+} = require(join(__dirname, '..', 'app', 'soapbox', 'build-config'));
const settings = {
source_path: 'app',
diff --git a/webpack/development.ts b/webpack/development.ts
index 1b8593717..57401e7d3 100644
--- a/webpack/development.ts
+++ b/webpack/development.ts
@@ -24,7 +24,7 @@ const DEFAULTS = {
PATRON_URL: 'http://localhost:3037',
};
-const { FE_SUBDIRECTORY } = require(join(__dirname, '..', 'app', 'soapbox', 'build_config'));
+const { FE_SUBDIRECTORY } = require(join(__dirname, '..', 'app', 'soapbox', 'build-config'));
const backendEndpoints = [
'/api',
diff --git a/webpack/production.ts b/webpack/production.ts
index 08bab9732..3d388e106 100644
--- a/webpack/production.ts
+++ b/webpack/production.ts
@@ -12,7 +12,7 @@ import sharedConfig from './shared';
import type { Configuration } from 'webpack';
-const { FE_SUBDIRECTORY } = require(join(__dirname, '..', 'app', 'soapbox', 'build_config'));
+const { FE_SUBDIRECTORY } = require(join(__dirname, '..', 'app', 'soapbox', 'build-config'));
const joinPublicPath = (...paths: string[]) => join(FE_SUBDIRECTORY, ...paths);
const configuration: Configuration = {
@@ -95,7 +95,7 @@ const configuration: Configuration = {
],
ServiceWorker: {
cacheName: 'soapbox',
- entry: join(__dirname, '../app/soapbox/service_worker/entry.ts'),
+ entry: join(__dirname, '../app/soapbox/service-worker/entry.ts'),
events: true,
minify: true,
},
diff --git a/webpack/rules/assets.ts b/webpack/rules/assets.ts
index d8c8e3e18..e9dd0202a 100644
--- a/webpack/rules/assets.ts
+++ b/webpack/rules/assets.ts
@@ -11,7 +11,7 @@ const rules: RuleSetRule[] = [{
test: /\.(png|svg)/,
type: 'asset/resource',
include: [
- resolve('app', 'images'),
+ resolve('app', 'assets', 'images'),
resolve('node_modules', 'emoji-datasource'),
],
generator: {
@@ -21,7 +21,7 @@ const rules: RuleSetRule[] = [{
test: /\.(ttf|eot|svg|woff|woff2)/,
type: 'asset/resource',
include: [
- resolve('app', 'fonts'),
+ resolve('app', 'assets', 'fonts'),
resolve('node_modules', 'fork-awesome'),
resolve('node_modules', 'line-awesome'),
resolve('node_modules', '@fontsource'),
@@ -32,7 +32,7 @@ const rules: RuleSetRule[] = [{
}, {
test: /\.(ogg|oga|mp3)/,
type: 'asset/resource',
- include: resolve('app', 'sounds'),
+ include: resolve('app', 'assets', 'sounds'),
generator: {
filename: 'packs/sounds/[name]-[contenthash:8][ext]',
},
@@ -46,7 +46,7 @@ const rules: RuleSetRule[] = [{
}, {
test: /\.svg$/,
type: 'asset/resource',
- include: resolve('app', 'icons'),
+ include: resolve('app', 'assets', 'icons'),
generator: {
filename: 'packs/icons/[name]-[contenthash:8][ext]',
},
diff --git a/webpack/rules/babel-build-config.ts b/webpack/rules/babel-build-config.ts
index 9e2e4e657..0e1fa0b7c 100644
--- a/webpack/rules/babel-build-config.ts
+++ b/webpack/rules/babel-build-config.ts
@@ -4,11 +4,11 @@ import { env } from '../configuration';
import type { RuleSetRule } from 'webpack';
-// This is a hack, used to force build_config @preval to recompile
+// This is a hack, used to force build-config @preval to recompile
// https://github.com/kentcdodds/babel-plugin-preval/issues/19
const rule: RuleSetRule = {
- test: resolve(__dirname, '../../app/soapbox/build_config.js'),
+ test: resolve(__dirname, '../../app/soapbox/build-config.js'),
use: [
{
loader: 'babel-loader',
diff --git a/webpack/shared.ts b/webpack/shared.ts
index dfcf9b2aa..2f56ccca4 100644
--- a/webpack/shared.ts
+++ b/webpack/shared.ts
@@ -15,7 +15,7 @@ import DeadCodePlugin from 'webpack-deadcode-plugin';
import { env, settings, output } from './configuration';
import rules from './rules';
-const { FE_SUBDIRECTORY, FE_INSTANCE_SOURCE_DIR } = require(join(__dirname, '..', 'app', 'soapbox', 'build_config'));
+const { FE_SUBDIRECTORY, FE_INSTANCE_SOURCE_DIR } = require(join(__dirname, '..', 'app', 'soapbox', 'build-config'));
/** Return file as string, or return empty string. */
const readFile = (filename: string) => {
@@ -114,7 +114,7 @@ const configuration: Configuration = {
'**/__*__/*',
'**/(LICENSE|README|COPYING)(.md|.txt)?',
// This file is imported with @preval
- 'app/soapbox/features/emoji/emoji_map.json',
+ 'app/soapbox/features/emoji/emoji-map.json',
],
}),
// https://github.com/jantimon/html-webpack-plugin#options
diff --git a/yarn.lock b/yarn.lock
index 9c2729f93..a0ef339e9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2048,121 +2048,110 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.1.tgz#728ecd95ab207aab8a9a4e421f0422db329232be"
integrity sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw==
-"@reach/auto-id@0.16.0":
- version "0.16.0"
- resolved "https://registry.yarnpkg.com/@reach/auto-id/-/auto-id-0.16.0.tgz#dfabc3227844e8c04f8e6e45203a8e14a8edbaed"
- integrity sha512-5ssbeP5bCkM39uVsfQCwBBL+KT8YColdnMN5/Eto6Rj7929ql95R3HZUOkKIvj7mgPtEb60BLQxd1P3o6cjbmg==
+"@reach/auto-id@0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/auto-id/-/auto-id-0.18.0.tgz#4b97085cd1cf1360a9bedc6e9c78e97824014f0d"
+ integrity sha512-XwY1IwhM7mkHZFghhjiqjQ6dstbOdpbFLdggeke75u8/8icT8uEHLbovFUgzKjy9qPvYwZIB87rLiR8WdtOXCg==
dependencies:
- "@reach/utils" "0.16.0"
- tslib "^2.3.0"
+ "@reach/utils" "0.18.0"
-"@reach/descendants@0.16.1":
- version "0.16.1"
- resolved "https://registry.yarnpkg.com/@reach/descendants/-/descendants-0.16.1.tgz#fa3d89c0503565369707f32985d87eef61985d9f"
- integrity sha512-3WZgRnD9O4EORKE31rrduJDiPFNMOjUkATx0zl192ZxMq3qITe4tUj70pS5IbJl/+v9zk78JwyQLvA1pL7XAPA==
+"@reach/descendants@0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/descendants/-/descendants-0.18.0.tgz#16fe52a5154da262994b0b8768baff4f670922d1"
+ integrity sha512-GXUxnM6CfrX5URdnipPIl3Tlc6geuz4xb4n61y4tVWXQX1278Ra9Jz9DMRN8x4wheHAysvrYwnR/SzAlxQzwtA==
dependencies:
- "@reach/utils" "0.16.0"
- tslib "^2.3.0"
+ "@reach/utils" "0.18.0"
-"@reach/dropdown@0.16.2":
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/@reach/dropdown/-/dropdown-0.16.2.tgz#4aa7df0f716cb448d01bc020d54df595303d5fa6"
- integrity sha512-l4nNiX6iUpMdHQNbZMhgW5APtw0AUwJuRnkqE93vkjvdtrYl/sNJy1Jr6cGG7TrZIABLSOsfwbXU3C+qwJ3ftQ==
+"@reach/dropdown@0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/dropdown/-/dropdown-0.18.0.tgz#c2e2e99df682f2136558851b80dc05b4f9dd92a5"
+ integrity sha512-LriXdVgxJoUhIQfS2r2DHYv3X6fHyplYxa9FmSwQIMXdESpE/P9Zsb1pVEObcNf3ZQBrl0L1bl/5rk7SpK7qfA==
dependencies:
- "@reach/auto-id" "0.16.0"
- "@reach/descendants" "0.16.1"
- "@reach/popover" "0.16.2"
- "@reach/utils" "0.16.0"
- tslib "^2.3.0"
+ "@reach/auto-id" "0.18.0"
+ "@reach/descendants" "0.18.0"
+ "@reach/polymorphic" "0.18.0"
+ "@reach/popover" "0.18.0"
+ "@reach/utils" "0.18.0"
-"@reach/menu-button@^0.16.2":
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/@reach/menu-button/-/menu-button-0.16.2.tgz#664e33e70de431f88abf1f8537c48b1b6ce87e88"
- integrity sha512-p4n6tFVaJZHJZEznHWy0YH2Xr3I+W7tsQWAT72PqKGT+uryGRdtgEQqi76f/8cRaw/00ueazBk5lwLG7UKGFaA==
+"@reach/menu-button@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/menu-button/-/menu-button-0.18.0.tgz#ae40dc86e47e7f925599ca720e3ba65263cc56f3"
+ integrity sha512-v1lj5rYSpavOKI4ipXj8OfvQmvVNAYXCv+UcltRkjOcWEKWADUUKkGX55wiUhsCsTGCJ7lGYz5LqOZrn3LP6PQ==
dependencies:
- "@reach/dropdown" "0.16.2"
- "@reach/popover" "0.16.2"
- "@reach/utils" "0.16.0"
- prop-types "^15.7.2"
- tiny-warning "^1.0.3"
- tslib "^2.3.0"
+ "@reach/dropdown" "0.18.0"
+ "@reach/polymorphic" "0.18.0"
+ "@reach/popover" "0.18.0"
+ "@reach/utils" "0.18.0"
"@reach/observe-rect@1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.2.0.tgz#d7a6013b8aafcc64c778a0ccb83355a11204d3b2"
integrity sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==
-"@reach/popover@0.16.2", "@reach/popover@^0.16.2":
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/@reach/popover/-/popover-0.16.2.tgz#71d7af3002ca49d791476b22dee1840dd1719c19"
- integrity sha512-IwkRrHM7Vt33BEkSXneovymJv7oIToOfTDwRKpuYEB/BWYMAuNfbsRL7KVe6MjkgchDeQzAk24cYY1ztQj5HQQ==
- dependencies:
- "@reach/portal" "0.16.2"
- "@reach/rect" "0.16.0"
- "@reach/utils" "0.16.0"
- tabbable "^4.0.0"
- tslib "^2.3.0"
+"@reach/polymorphic@0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/polymorphic/-/polymorphic-0.18.0.tgz#2fe42007a774e06cdbc8e13e0d46f2dc30f2f1ed"
+ integrity sha512-N9iAjdMbE//6rryZZxAPLRorzDcGBnluf7YQij6XDLiMtfCj1noa7KyLpEc/5XCIB/EwhX3zCluFAwloBKdblA==
-"@reach/portal@0.16.2", "@reach/portal@^0.16.2":
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.16.2.tgz#ca83696215ee03acc2bb25a5ae5d8793eaaf2f64"
- integrity sha512-9ur/yxNkuVYTIjAcfi46LdKUvH0uYZPfEp4usWcpt6PIp+WDF57F/5deMe/uGi/B/nfDweQu8VVwuMVrCb97JQ==
+"@reach/popover@0.18.0", "@reach/popover@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/popover/-/popover-0.18.0.tgz#1eba3e9ed826ac69dfdf3b01a1dab15ca889b5fc"
+ integrity sha512-mpnWWn4w74L2U7fcneVdA6Fz3yKWNdZIRMoK8s6H7F8U2dLM/qN7AjzjEBqi6LXKb3Uf1ge4KHSbMixW0BygJQ==
dependencies:
- "@reach/utils" "0.16.0"
- tiny-warning "^1.0.3"
- tslib "^2.3.0"
+ "@reach/polymorphic" "0.18.0"
+ "@reach/portal" "0.18.0"
+ "@reach/rect" "0.18.0"
+ "@reach/utils" "0.18.0"
+ tabbable "^5.3.3"
-"@reach/rect@0.16.0", "@reach/rect@^0.16.0":
- version "0.16.0"
- resolved "https://registry.yarnpkg.com/@reach/rect/-/rect-0.16.0.tgz#78cf6acefe2e83d3957fa84f938f6e1fc5700f16"
- integrity sha512-/qO9jQDzpOCdrSxVPR6l674mRHNTqfEjkaxZHluwJ/2qGUtYsA0GSZiF/+wX/yOWeBif1ycxJDa6HusAMJZC5Q==
+"@reach/portal@0.18.0", "@reach/portal@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.18.0.tgz#dd466f5110689d14a0e7491b3aa8a449e8cefb40"
+ integrity sha512-TImozRapd576ofRk30Le2L3lRTFXF1p47B182wnp5eMTdZa74JX138BtNGEPJFOyrMaVmguVF8SSwZ6a0fon1Q==
+ dependencies:
+ "@reach/utils" "0.18.0"
+
+"@reach/rect@0.18.0", "@reach/rect@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/rect/-/rect-0.18.0.tgz#d1dc45adc92f80cc54b64498e19de909ced40722"
+ integrity sha512-Xk8urN4NLn3F70da/DtByMow83qO6DF6vOxpLjuDBqud+kjKgxAU9vZMBSZJyH37+F8mZinRnHyXtlLn5njQOg==
dependencies:
"@reach/observe-rect" "1.2.0"
- "@reach/utils" "0.16.0"
- prop-types "^15.7.2"
- tiny-warning "^1.0.3"
- tslib "^2.3.0"
+ "@reach/utils" "0.18.0"
-"@reach/tabs@^0.16.4":
- version "0.16.4"
- resolved "https://registry.yarnpkg.com/@reach/tabs/-/tabs-0.16.4.tgz#7da85e46f64052bdd1c0f9582f900e379b098ac5"
- integrity sha512-4EK+1U0OoLfg2tJ1BSZf6/tx0hF5vlXKxY7qB//bPWtlIh9Xfp/aSDIdspFf3xS8MjtKeb6IVmo5UAxDMq85ZA==
+"@reach/tabs@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/tabs/-/tabs-0.18.0.tgz#f2e789d445d61a371eace9415841502729d099c9"
+ integrity sha512-gTRJzStWJJtgMhn9FDEmKogAJMcqNaGZx0i1SGoTdVM+D29DBhVeRdO8qEg+I2l2k32DkmuZxG/Mrh+GZTjczQ==
dependencies:
- "@reach/auto-id" "0.16.0"
- "@reach/descendants" "0.16.1"
- "@reach/utils" "0.16.0"
- prop-types "^15.7.2"
- tslib "^2.3.0"
+ "@reach/auto-id" "0.18.0"
+ "@reach/descendants" "0.18.0"
+ "@reach/polymorphic" "0.18.0"
+ "@reach/utils" "0.18.0"
-"@reach/tooltip@^0.16.2":
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/@reach/tooltip/-/tooltip-0.16.2.tgz#8448cee341476e4f795fa7192f7a0864f06b8085"
- integrity sha512-wtJPnbJ6l4pmudMpQHGU9v1NS4ncDgcwRNi9re9KsIdsM525zccZvHQLteBKYiaW4ib7k09t2dbwhyNU9oa0Iw==
+"@reach/tooltip@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/tooltip/-/tooltip-0.18.0.tgz#6d416e77a82543af9a57d122962f9c0294fc2a5f"
+ integrity sha512-yugoTmTjB3qoMk/nUvcnw99MqpyE2TQMOXE29qnQhSqHriRwQhfftjXlTAGTSzsUJmbyms3A/1gQW0X61kjFZw==
dependencies:
- "@reach/auto-id" "0.16.0"
- "@reach/portal" "0.16.2"
- "@reach/rect" "0.16.0"
- "@reach/utils" "0.16.0"
- "@reach/visually-hidden" "0.16.0"
- prop-types "^15.7.2"
- tiny-warning "^1.0.3"
- tslib "^2.3.0"
+ "@reach/auto-id" "0.18.0"
+ "@reach/polymorphic" "0.18.0"
+ "@reach/portal" "0.18.0"
+ "@reach/rect" "0.18.0"
+ "@reach/utils" "0.18.0"
+ "@reach/visually-hidden" "0.18.0"
-"@reach/utils@0.16.0":
- version "0.16.0"
- resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.16.0.tgz#5b0777cf16a7cab1ddd4728d5d02762df0ba84ce"
- integrity sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==
- dependencies:
- tiny-warning "^1.0.3"
- tslib "^2.3.0"
+"@reach/utils@0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.18.0.tgz#4f3cebe093dd436eeaff633809bf0f68f4f9d2ee"
+ integrity sha512-KdVMdpTgDyK8FzdKO9SCpiibuy/kbv3pwgfXshTI6tEcQT1OOwj7BAksnzGC0rPz0UholwC+AgkqEl3EJX3M1A==
-"@reach/visually-hidden@0.16.0":
- version "0.16.0"
- resolved "https://registry.yarnpkg.com/@reach/visually-hidden/-/visually-hidden-0.16.0.tgz#2a5e834af9e93c554065ff8cbb0907fbeb26ad02"
- integrity sha512-IIayZ3jzJtI5KfcfRVtOMFkw2ef/1dMT8D9BUuFcU2ORZAWLNvnzj1oXNoIfABKl5wtsLjY6SGmkYQ+tMPN8TA==
+"@reach/visually-hidden@0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@reach/visually-hidden/-/visually-hidden-0.18.0.tgz#17923c08acc5946624c2836b2b09d359b3aa8c27"
+ integrity sha512-NsJ3oeHJtPc6UOeV6MHMuzQ5sl1ouKhW85i3C0S7VM+klxVlYScBZ2J4UVnWB50A2c+evdVpCnld2YeuyYYwBw==
dependencies:
- prop-types "^15.7.2"
- tslib "^2.3.0"
+ "@reach/polymorphic" "0.18.0"
"@reduxjs/toolkit@^1.8.1":
version "1.8.1"
@@ -2271,10 +2260,10 @@
remark "^13.0.0"
unist-util-find-all-after "^3.0.2"
-"@tabler/icons@^1.109.0":
- version "1.109.0"
- resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-1.109.0.tgz#11626c3fc097f2f70c4c197e4b9909fb05380752"
- integrity sha512-B0YetE4pB6HY2Wa57v/LJ3NgkJzKYPze4U0DurIqPoKSptatKv2ga76FZSkO6EUpkYfHMtGPM6QjpJljfuCmAQ==
+"@tabler/icons@^1.111.0":
+ version "1.111.0"
+ resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-1.111.0.tgz#0538fdd8b5de7072ae60fc5d2f13a9a636d2d0e3"
+ integrity sha512-TZWYiMT5ccqfHxRE0Qtgvl+sGsMbNkrv7cJMt/tm8TN9l/CDXx/o7d8uAwUN+3PAlSFfF5e/rD1bi1WJs2xNIA==
"@tailwindcss/forms@^0.5.3":
version "0.5.3"
@@ -2283,6 +2272,11 @@
dependencies:
mini-svg-data-uri "^1.2.3"
+"@tailwindcss/line-clamp@^0.4.2":
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz#f353c5a8ab2c939c6267ac5b907f012e5ee130f9"
+ integrity sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==
+
"@tailwindcss/typography@^0.5.7":
version "0.5.7"
resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.7.tgz#e0b95bea787ee14c5a34a74fc824e6fe86ea8855"
@@ -10021,10 +10015,10 @@ react-side-effect@^2.1.0:
resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3"
integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==
-react-simple-pull-to-refresh@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/react-simple-pull-to-refresh/-/react-simple-pull-to-refresh-1.3.0.tgz#5f7bcd475ea5c33ecd505d097b14f56c3e5e3ce8"
- integrity sha512-QPFGFsbroh2WoTcLCh3f6peMRfSettYJKCXMS9FNbFav7GWKD2whqACiNLx+Mi+VkP/I+aerB7kEirk+DQx41A==
+react-simple-pull-to-refresh@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/react-simple-pull-to-refresh/-/react-simple-pull-to-refresh-1.3.3.tgz#118afe0d8ba6cade87094786b3889fb2ffd5b9bc"
+ integrity sha512-6qXsa5RtNVmKJhLWvDLIX8UK51HFtCEGjdqQGf+M1Qjrcc4qH4fki97sgVpGEFBRwbY7DiVDA5N5p97kF16DTw==
react-sparklines@^1.7.0:
version "1.7.0"
@@ -10097,10 +10091,10 @@ react-transition-group@^2.2.1:
prop-types "^15.6.2"
react-lifecycles-compat "^3.0.4"
-react-virtuoso@^2.16.2:
- version "2.16.2"
- resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-2.16.2.tgz#f0a290931ee358c40661d751df2d8b9f32496f0a"
- integrity sha512-aH6XpizVYCpIkBm6td1q63Lqeu7KG1iAmpYVnzjThhm5tHEo9FJpeHAU73FJaMplFrfMKBrNfmO7a7jTOeM56g==
+react-virtuoso@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-3.1.3.tgz#db811ff6fdd4749cfe9348f6d0b1333a348e65c4"
+ integrity sha512-sc4WICEZkyT+XdVc7gA/61UT43ZnMSX0ugh+xBG2cX+EDWs31wP1dSKQ2HSQ0YFLhZXRJ+Jqndqa8MTu4NE4CQ==
dependencies:
"@virtuoso.dev/react-urx" "^0.2.12"
"@virtuoso.dev/urx" "^0.2.12"
@@ -11329,10 +11323,10 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-tabbable@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-4.0.0.tgz#5bff1d1135df1482cf0f0206434f15eadbeb9261"
- integrity sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==
+tabbable@^5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf"
+ integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==
table@^6.0.9, table@^6.6.0:
version "6.7.1"
@@ -11608,7 +11602,7 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1:
+tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==