From a9edd8fbb81b5d579677253d7e271cbbbcfcdd1f Mon Sep 17 00:00:00 2001 From: khannurien Date: Sat, 19 Sep 2026 21:06:21 +0000 Subject: [PATCH] =?UTF-8?q?v3:=20invite=20panel=20reworked=20=E2=80=94=20"?= =?UTF-8?q?+=20Invite=20someone"=20toggles=20a=20panel=20sized=20to=20the?= =?UTF-8?q?=20action=20row,=20easing=20in=20like=20the=20inline=20editors:?= =?UTF-8?q?=20link=20field=20fused=20with=20a=20full-width=20Copy,=20singl?= =?UTF-8?q?e-use/7-day=20hint,=20no=20longer=20clipped=20or=20faded=20on?= =?UTF-8?q?=20mobile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- src/App.css | 102 ++++--- src/locales/en.js | 2 +- src/locales/en.po | 483 ++++++++++++++++---------------- src/locales/fr.js | 2 +- src/locales/fr.po | 483 ++++++++++++++++---------------- src/pages/UserPublicProfile.tsx | 117 +++++--- 6 files changed, 645 insertions(+), 544 deletions(-) diff --git a/src/App.css b/src/App.css index f3d8500e..6c7e63fc 100644 --- a/src/App.css +++ b/src/App.css @@ -2337,19 +2337,24 @@ body.has-player .chat-fab { color: var(--color-accent); } +/* Grid sized by the button row; the invite panel below only fills that + width (width: 0 + min-width: 100% keeps it out of the sizing). */ .profile-own-actions { + display: grid; + width: fit-content; + max-width: 100%; + gap: 0.5rem; + margin-top: 0.5rem; +} +.profile-own-actions-row { display: flex; flex-wrap: wrap; gap: 0.5rem; - margin-top: 0.5rem; align-items: center; } .profile-own-actions .btn-border { margin-top: 0; } -.invite-generate { - display: contents; -} .invite-btn { padding: 0.3rem 0.9rem; @@ -2358,51 +2363,80 @@ body.has-player .chat-fab { background: transparent; color: var(--color-accent); font-size: var(--text-sm); + font-family: inherit; cursor: pointer; transition: background var(--dur-base), color var(--dur-base); } -.invite-btn:hover { +.invite-btn:hover:not(:disabled), +.invite-btn[aria-expanded="true"] { background: var(--color-accent); color: var(--color-on-accent); } +.invite-btn:disabled { + cursor: progress; +} -.invite-result { +/* Raised above the info column's narrow-viewport overflow fade + (.profile-info::after) so the Copy button isn't washed out. */ +.invite-panel { + position: relative; + z-index: 1; + width: 0; + min-width: 100%; + box-sizing: border-box; +} +.invite-panel:not(.invite-panel--error) { display: flex; - align-items: center; - gap: 0.5rem; - max-width: 480px; -} -.invite-url { - font-size: var(--text-xs); - font-family: var(--font-mono, monospace); - color: var(--color-text-muted); - flex: 1; - min-width: 0; - overflow-x: auto; - white-space: nowrap; + flex-direction: column; + padding: 0.5rem; background: var(--color-surface); - border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md); - padding: 0.35rem 0.6rem; } -/* Always-visible copy target. Sits first so it's the obvious tap. */ -.invite-copy-btn { - order: -1; - flex-shrink: 0; - padding: 0.2rem 0.65rem; - border: 1px solid var(--color-border-subtle); - border-radius: var(--radius-sm); - background: transparent; - color: var(--color-text); +.invite-panel-hint { + margin-top: 0.4rem; font-size: var(--text-xs); - cursor: pointer; - white-space: nowrap; - transition: background var(--dur-fast); + color: var(--color-text-muted); + text-align: center; } -.invite-copy-btn:hover { + +/* Link field and Copy button fused into one control. */ +.invite-url { + min-width: 0; + padding: 0.35rem 0.6rem; + border: 1.5px solid var(--color-border); + border-bottom: none; + border-radius: var(--radius-md) var(--radius-md) 0 0; + background: var(--color-surface-sunken); + color: var(--color-text); + font-family: inherit; + font-size: var(--text-sm); + text-overflow: ellipsis; +} +.invite-url:focus { + outline: none; + border-color: var(--color-accent); +} +.invite-copy-btn { + padding: 0.35rem 0.9rem; + border: 1.5px solid var(--color-accent); + border-radius: 0 0 var(--radius-md) var(--radius-md); background: var(--color-accent); color: var(--color-on-accent); - border-color: var(--color-accent); + font-family: inherit; + font-size: var(--text-sm); + font-weight: 600; + cursor: pointer; + transition: background var(--dur-fast), border-color var(--dur-fast); +} +.invite-copy-btn:hover { + background: var(--color-accent-hover); + border-color: var(--color-accent-hover); +} +.invite-copy-btn--done, +.invite-copy-btn--done:hover { + background: var(--color-success-bg); + border-color: var(--color-success); + color: var(--color-success); } /* ── Profile sub-pages (dumps / upvoted / playlists) ── */ diff --git a/src/locales/en.js b/src/locales/en.js index 4bca3aa1..08eb41b5 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-K9EZb\":[\"Add email…\"],\"-OxI15\":[\"Followed playlists\"],\"-Ya-b9\":[\"Failed to save\"],\"-siMqD\":[\"Journal\"],\"1CalO6\":[\"Style\"],\"1HfJWf\":[\"Search dumps, users, playlists…\"],\"1cbYY_\":[\"Upvoted (\",[\"0\"],[\"1\"],\")\"],\"1njn7W\":[\"Light\"],\"1utXA6\":[\"Dumps\"],\"26iNma\":[\"Post comment\"],\"2DoBvq\":[\"Feeds\"],\"2Hlmdt\":[\"Write a reply…\"],\"2_DHgA\":[\"URL slug\"],\"2nrsEn\":[\"deleted message\"],\"2ygf_L\":[\"← Back\"],\"3KKSM4\":[\"private\"],\"3QuNUr\":[\"Several people are typing…\"],\"3SEwY1\":[\"Delete category \\\"\",[\"0\"],\"\\\"? This cannot be undone.\"],\"3yfh3D\":[\"<0>\",[\"0\"],\" followed your playlist <1>\",[\"1\"],\"\"],\"49voTZ\":[[\"label\"],\" (\",[\"count\"],\")\"],\"4B6w_o\":[\"Dumped!\"],\"4GKuCs\":[\"Login failed\"],\"4HH9iB\":[\"Not following anyone yet.\"],\"4OjqAQ\":[\"Keep editing\"],\"4RtQ1k\":[\"Unfollow \",[\"targetUsername\"]],\"4c-qBx\":[\"Your password has been changed. You can now log in.\"],\"4yj9xV\":[\"Live updates are temporarily disconnected. Trying to reconnect…\"],\"5KHDCi\":[[\"0\"],\" and \",[\"1\"],\" are typing…\"],\"5TviPn\":[\"Cancel search\"],\"5cC8f2\":[\"Edited \",[\"0\"]],\"5oD9f_\":[\"Earlier\"],\"6Qly-0\":[\"a comment\"],\"6YE0P6\":[\"Editing \",[\"0\"]],\"6YtxFj\":[\"Name\"],\"6gRgw8\":[\"Retry\"],\"7PHCIN\":[\"Cancel removal\"],\"7PzzBU\":[\"User\"],\"7d1a0d\":[\"Public\"],\"7sNhEz\":[\"Username\"],\"8F1i42\":[\"Page not found\"],\"8Ug9jB\":[\"Related\"],\"8ZsakT\":[\"Password\"],\"92o1-U\":[\"Failed to delete\"],\"9BruTc\":[\"Why?\"],\"9l4qcT\":[\"Drop a replacement here\"],\"9uI_rE\":[\"Undo\"],\"9xDZu_\":[\"Could not load.\"],\"A0y396\":[\"+ Invite someone\"],\"A1taO8\":[\"Search\"],\"AEfu-D\":[\"In collections\"],\"AHZflp\":[\"Chat\"],\"AQbgNR\":[\"Follow \",[\"targetUsername\"]],\"AS7WoE\":[\"Start fresh\"],\"ATGYL1\":[\"Email address\"],\"AZctoV\":[[\"0\",\"plural\",{\"one\":[\"#\",\" comment\"],\"other\":[\"#\",\" comments\"]}]],\"Ade-6d\":[\"Live updates unavailable.\"],\"AeXO77\":[\"Account\"],\"AnRu_j\":[\"Cancel reply\"],\"BlpJ2G\":[\"Picked up where you left off.\"],\"CI50ct\":[\"Upvoted\"],\"C_qQE4\":[\"Already dumped by \",[\"0\"],\" \",[\"1\"]],\"Cj24wt\":[\"Registering…\"],\"D8DRYV\":[\"Delete this message?\"],\"DPfwMq\":[\"Done\"],\"DdeHXH\":[\"Delete this dump? This cannot be undone.\"],\"Dp1JhP\":[\"<0>\",[\"0\"],\" upvoted <1>\",[\"1\"],\"\"],\"ECiS12\":[\"View dump →\"],\"ED8n0z\":[\"the chat\"],\"Evcm2Z\":[\"Close without posting? The attached file won't be kept — everything you typed will.\"],\"ExR0Fr\":[\"URL is required.\"],\"F5Js1v\":[\"Unfollow playlist\"],\"FgAxTj\":[\"Log out\"],\"Fxf4jq\":[\"Description (optional)\"],\"GCWCCo\":[\"Close player\"],\"GDvlUT\":[\"Role\"],\"GLukaH\":[\"Moderator\"],\"GNSsCc\":[\"Failed to create playlist\"],\"GQ38dl\":[\"Chat (\",[\"unreadChatCount\"],\" unread)\"],\"GY6uSc\":[\"Next →\"],\"GbqhrN\":[[\"0\"],\"–\",[\"1\"],\" characters: letters, numbers, or underscores\"],\"GptGxg\":[\"Change password\"],\"H4MGkI\":[\"Expand player\"],\"H4o4sk\":[\"No one yet.\"],\"H8pzW-\":[\"Failed to update avatar\"],\"HTLDA4\":[\"Loading more…\"],\"I-x669\":[\"Invitees\"],\"IO9KL_\":[\"Next track\"],\"IZX7TO\":[\"Failed to generate invite\"],\"IagCbF\":[\"URL\"],\"ImOQa9\":[\"Reply\"],\"JJ-Bhk\":[\"Your email address\"],\"JRQitQ\":[\"Confirm new password\"],\"JXr41k\":[\"<0>\",[\"0\"],\" commented on <1>\",[\"1\"],\"\"],\"Jd58Fo\":[\"Hot\"],\"Jf0PuK\":[\"Go to login\"],\"JlFcis\":[\"Send\"],\"K7tIrx\":[\"Category\"],\"KDGWg5\":[\"Remove from playlist\"],\"KKZxBU\":[\"Uploading \",[\"0\"],\"%\"],\"K_F6pa\":[\"Saving…\"],\"L-rMC9\":[\"Reset to default\"],\"LLyMkV\":[\"Followed (\",[\"0\"],[\"1\"],\")\"],\"MHrjPM\":[\"Title\"],\"MKEPCY\":[\"Follow\"],\"MTb2Ot\":[\"No messages yet. Say hello!\"],\"Mj6oCJ\":[[\"0\"],\" is typing…\"],\"N40H-G\":[\"All\"],\"N6j2JH\":[\"Edit \",[\"0\"]],\"NUrY9o\":[\"Categories\"],\"Oprv1v\":[\"Password (min. \",[\"0\"],\" characters)\"],\"Oz0N9s\":[\"new\"],\"PUe8Yk\":[\"Collapse player\"],\"PiH3UR\":[\"Copied!\"],\"Pn2B7_\":[\"Current password\"],\"Pwqkdw\":[\"Loading…\"],\"Q6n4F4\":[\"Refresh metadata\"],\"QGaQRo\":[\"Failed to update role\"],\"QKsaQr\":[\"or <0>browse files\"],\"QLtPBd\":[\"No dumps in this playlist yet.\"],\"R9Khdg\":[\"Auto\"],\"RCcPrX\":[\"Delete this playlist? This cannot be undone.\"],\"RTksSy\":[\"<0>\",[\"0\"],\" started following you\"],\"RaKjrM\":[\"Failed to save edit\"],\"RcUHRT\":[\"Followed\"],\"RfwZxd\":[\"Reset password\"],\"Rrp6-J\":[\"Log in to like\"],\"RvVJBH\":[\"Refreshing stream…\"],\"SBTElJ\":[\"Searching…\"],\"Sad2tK\":[\"Sending…\"],\"So7gCD\":[\"Paste a link…\"],\"StovX6\":[\"This page does not exist.\"],\"Sxm8rQ\":[\"Users\"],\"T9bjWt\":[\"<0>\",[\"0\"],\" was added to <1>\",[\"1\"],\"\"],\"TM1ZbA\":[\"Playlists (\",[\"0\"],[\"1\"],\")\"],\"TN382O\":[\"Invalid link\"],\"Tv9vbB\":[\"Follow playlist\"],\"Tz0i8g\":[\"Settings\"],\"U3pytU\":[\"Admin\"],\"UNMVei\":[\"Forgot password?\"],\"UOZith\":[\"Failed to post\"],\"URAieT\":[\"Log in to vote\"],\"VCoEm-\":[\"Back to login\"],\"VKsaTi\":[\"Replying to\"],\"V_e7nf\":[\"Set new password\"],\"VnNJbN\":[\"From playlists\"],\"VskHIx\":[\"Delete category\"],\"VyTYmS\":[\"Change avatar\"],\"W9FRBT\":[\"Like\"],\"WE_r9K\":[\"Failed to create category\"],\"WfffrI\":[\"slug\"],\"WhimMi\":[\"Reset failed\"],\"WpXcBJ\":[\"Nothing here yet.\"],\"XJVYo8\":[\"Why & where\"],\"XJy2oN\":[\"Logging in…\"],\"Xan6QP\":[\"New dump\"],\"XgRtUf\":[\"Could not change password\"],\"Xi0Mn4\":[\"← Back to profile\"],\"XnL-Eu\":[\"No users match \\\"\",[\"q\"],\"\\\".\"],\"Xs2Lez\":[\"This reset link is missing or malformed.\"],\"YK1Dhc\":[\"a post\"],\"YcjhhX\":[\"User management\"],\"Ye9RMF\":[\"<0>\",[\"0\"],\" liked your comment on <1>\",[\"1\"],\"\"],\"YpkCca\":[\"No followed playlists yet.\"],\"ZBdbv9\":[\"Edit title\"],\"ZCpU0u\":[\"No playlists match \\\"\",[\"q\"],\"\\\".\"],\"ZmD2o6\":[\"Create & Add\"],\"_3O5R_\":[\"Request failed\"],\"_DwR-n\":[\"Creating…\"],\"_R_sGB\":[\"Password changed successfully.\"],\"_aept4\":[\"Post reply\"],\"_nT6AE\":[\"New password\"],\"_t4W-i\":[\"From people\"],\"aAIQg2\":[\"Appearance\"],\"aDvLhk\":[\"Add a comment…\"],\"b3Thhd\":[\"Upload failed\"],\"b8XMJ8\":[[\"visibleCount\",\"plural\",{\"one\":[\"#\",\" comment\"],\"other\":[\"#\",\" comments\"]}]],\"bQhwn-\":[\"Loading playlist…\"],\"cILfnJ\":[\"Remove file\"],\"cYP9Sb\":[\"+ Playlist\"],\"cbeBbZ\":[\"At least \",[\"0\"],\" characters\"],\"cnGeoo\":[\"Delete\"],\"d8DZWS\":[\"Open search\"],\"dAs22m\":[\"Replace file\"],\"dEgA5A\":[\"Cancel\"],\"dMizp8\":[\"New playlist\"],\"dqwCfR\":[\"Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later.\"],\"eFSqvc\":[\"Failed to post reply\"],\"eOfXq3\":[\"Title is required.\"],\"ePK91l\":[\"Edit\"],\"eaUTwS\":[\"Send reset link\"],\"ecUA8p\":[\"Today\"],\"ef9nPf\":[\"Loading dump…\"],\"eloqXQ\":[\"You can post it anyway.\"],\"en9o7K\":[\"Failed to post comment\"],\"etFQQS\":[\"What makes it worth it?\"],\"fC6mXb\":[\"Upvote\"],\"fI-mNw\":[\"Playlists\"],\"f_akpP\":[\"Max 50 MB\"],\"fgLNSM\":[\"Register\"],\"gANddk\":[\"Uploading…\"],\"gGx5tM\":[\"Editing\"],\"gIQQwD\":[\"Failed to load\"],\"gL9KKi\":[\"Who can see it\"],\"gLfZlz\":[\"Add to playlist\"],\"gjJ-sb\":[\"Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects.\"],\"goWEhR\":[\"Previous track\"],\"hBuUKa\":[\"Change password…\"],\"hD7w09\":[\"You've reached the end.\"],\"hJSliC\":[\"<0>\",[\"0\"],\" posted <1>\",[\"1\"],\"\"],\"hT8hgO\":[\"Reset to the suggested title\"],\"hYgDIe\":[\"Create\"],\"he3ygx\":[\"Copy\"],\"hpCc_Z\":[\"Close anyway\"],\"i7K_Te\":[\"Who am I?\"],\"iDNBZe\":[\"Notifications\"],\"iWpEwy\":[\"Go home\"],\"ipYn7W\":[\"If that address is registered you'll receive a reset link shortly.\"],\"isRobC\":[\"New\"],\"jbernk\":[\"Loading profile…\"],\"joEmfT\":[\"Server unreachable\"],\"jrZTZl\":[\"No dumps yet. Be the first!\"],\"k112DD\":[\"Load older messages\"],\"k36iJ-\":[\"Failed to save category\"],\"kLttbL\":[\"Registration failed\"],\"lUDifl\":[\"Created (\",[\"0\"],[\"1\"],\")\"],\"lUanmi\":[\"You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content.\"],\"lY5h1V\":[[\"0\",\"plural\",{\"one\":[\"#\",\" dump\"],\"other\":[\"#\",\" dumps\"]}]],\"lcfvr_\":[\"Delete this comment?\"],\"lpIMne\":[\"Passwords do not match\"],\"mb_Wju\":[\"Drop a file here, or paste one\"],\"mt6O6E\":[\"This is a mirage.\"],\"nbm5sI\":[\"No dumps match \\\"\",[\"q\"],\"\\\".\"],\"nrjqON\":[\"Checking invite…\"],\"nwtY4N\":[\"Something went wrong\"],\"nx4kaN\":[\"Could not save\"],\"oTYvvN\":[[\"0\",\"plural\",{\"one\":[\"and \",\"#\",\" earlier dump\"],\"other\":[\"and \",\"#\",\" earlier dumps\"]}]],\"ogtYkT\":[\"Password updated\"],\"pCpd9p\":[\"<0>\",[\"0\"],\" mentioned you in <1>\",[\"where\"],\"\"],\"pSheLH\":[\"No invitees yet.\"],\"pvnfJD\":[\"Dark\"],\"qIMfNQ\":[\"Delete playlist\"],\"qbDAcy\":[\"Dump it\"],\"qgx_78\":[\"Follow some public playlists to see their dumps here.\"],\"qvFa8r\":[\"public\"],\"qvz_Pp\":[\"Dump\"],\"rCbqPX\":[\"This invite link is missing, expired, or already used.\"],\"rDMzDU\":[\"Type a message…\"],\"rg9pXu\":[\"Search failed\"],\"rtpJqV\":[\"Dumps (\",[\"0\"],[\"1\"],\")\"],\"sEXJPi\":[\"Link or file\"],\"sGeXL3\":[\"Thumbnail\"],\"sQia9P\":[\"Log in\"],\"sTiqbm\":[\"invited by\"],\"sdP5Aa\":[\"[deleted]\"],\"shHs8T\":[\"Enter a query to search.\"],\"smeBfS\":[\"Invalid invite\"],\"tfDRzk\":[\"Save\"],\"tvmuQ0\":[\"Color scheme\"],\"u1lDX2\":[\"Fetching preview…\"],\"uD0qXQ\":[\"Drop a file here\"],\"uMGUnV\":[\"No playlists yet.\"],\"ub1EEL\":[\"edited \",[\"0\"]],\"uomLas\":[\"Add category\"],\"vJBF1r\":[\"Posting…\"],\"vLhLLO\":[\"Notifications (\",[\"unreadNotificationCount\"],\" unread)\"],\"vQMkHu\":[\"Remove vote\"],\"vuosjb\":[\"User menu\"],\"wbXKOv\":[\"File too large (max 50 MB).\"],\"wckWOP\":[\"Manage\"],\"wixIgH\":[\"Already have an account? <0>Log in\"],\"x6tjuK\":[\"Default tab\"],\"xEWkgZ\":[\"← Back to all dumps\"],\"xPHtx0\":[\"Submit search\"],\"xVuNgt\":[\"+ New playlist\"],\"xc9O_u\":[\"Delete dump\"],\"y6sq5j\":[\"Following\"],\"y7oaHj\":[\"Playlist title\"],\"yA_6BX\":[\"View all →\"],\"yBBtRm\":[\"Follow some users to see their dumps here.\"],\"yQ2kGp\":[\"Load more\"],\"y_0uwd\":[\"Yesterday\"],\"yz7wBu\":[\"Close\"],\"yzF66j\":[\"Link\"],\"z0ROB3\":[\"Remove like\"],\"z1uNN0\":[\"No emoji found.\"],\"zVuxvN\":[\"Refreshing…\"],\"zwBp5t\":[\"Private\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-K9EZb\":[\"Add email…\"],\"-OxI15\":[\"Followed playlists\"],\"-Ya-b9\":[\"Failed to save\"],\"-siMqD\":[\"Journal\"],\"1CalO6\":[\"Style\"],\"1HfJWf\":[\"Search dumps, users, playlists…\"],\"1cbYY_\":[\"Upvoted (\",[\"0\"],[\"1\"],\")\"],\"1njn7W\":[\"Light\"],\"1utXA6\":[\"Dumps\"],\"26iNma\":[\"Post comment\"],\"2DoBvq\":[\"Feeds\"],\"2Hlmdt\":[\"Write a reply…\"],\"2_DHgA\":[\"URL slug\"],\"2nrsEn\":[\"deleted message\"],\"2ygf_L\":[\"← Back\"],\"3KKSM4\":[\"private\"],\"3QuNUr\":[\"Several people are typing…\"],\"3SEwY1\":[\"Delete category \\\"\",[\"0\"],\"\\\"? This cannot be undone.\"],\"3yfh3D\":[\"<0>\",[\"0\"],\" followed your playlist <1>\",[\"1\"],\"\"],\"49voTZ\":[[\"label\"],\" (\",[\"count\"],\")\"],\"4B6w_o\":[\"Dumped!\"],\"4GKuCs\":[\"Login failed\"],\"4HH9iB\":[\"Not following anyone yet.\"],\"4OjqAQ\":[\"Keep editing\"],\"4RtQ1k\":[\"Unfollow \",[\"targetUsername\"]],\"4c-qBx\":[\"Your password has been changed. You can now log in.\"],\"4yj9xV\":[\"Live updates are temporarily disconnected. Trying to reconnect…\"],\"5KHDCi\":[[\"0\"],\" and \",[\"1\"],\" are typing…\"],\"5TviPn\":[\"Cancel search\"],\"5cC8f2\":[\"Edited \",[\"0\"]],\"5oD9f_\":[\"Earlier\"],\"6Qly-0\":[\"a comment\"],\"6YE0P6\":[\"Editing \",[\"0\"]],\"6YtxFj\":[\"Name\"],\"6gRgw8\":[\"Retry\"],\"7PHCIN\":[\"Cancel removal\"],\"7PzzBU\":[\"User\"],\"7d1a0d\":[\"Public\"],\"7sNhEz\":[\"Username\"],\"8F1i42\":[\"Page not found\"],\"8Ug9jB\":[\"Related\"],\"8ZsakT\":[\"Password\"],\"92o1-U\":[\"Failed to delete\"],\"9BruTc\":[\"Why?\"],\"9l4qcT\":[\"Drop a replacement here\"],\"9uI_rE\":[\"Undo\"],\"9xDZu_\":[\"Could not load.\"],\"A0y396\":[\"+ Invite someone\"],\"A1taO8\":[\"Search\"],\"AEfu-D\":[\"In collections\"],\"AHZflp\":[\"Chat\"],\"AQbgNR\":[\"Follow \",[\"targetUsername\"]],\"AS7WoE\":[\"Start fresh\"],\"ATGYL1\":[\"Email address\"],\"AZctoV\":[[\"0\",\"plural\",{\"one\":[\"#\",\" comment\"],\"other\":[\"#\",\" comments\"]}]],\"Ade-6d\":[\"Live updates unavailable.\"],\"AeXO77\":[\"Account\"],\"AnRu_j\":[\"Cancel reply\"],\"BlpJ2G\":[\"Picked up where you left off.\"],\"CI50ct\":[\"Upvoted\"],\"C_qQE4\":[\"Already dumped by \",[\"0\"],\" \",[\"1\"]],\"Cj24wt\":[\"Registering…\"],\"D8DRYV\":[\"Delete this message?\"],\"DPfwMq\":[\"Done\"],\"DdeHXH\":[\"Delete this dump? This cannot be undone.\"],\"Dp1JhP\":[\"<0>\",[\"0\"],\" upvoted <1>\",[\"1\"],\"\"],\"ECiS12\":[\"View dump →\"],\"ED8n0z\":[\"the chat\"],\"Evcm2Z\":[\"Close without posting? The attached file won't be kept — everything you typed will.\"],\"ExR0Fr\":[\"URL is required.\"],\"F5Js1v\":[\"Unfollow playlist\"],\"FgAxTj\":[\"Log out\"],\"Fxf4jq\":[\"Description (optional)\"],\"GCWCCo\":[\"Close player\"],\"GDvlUT\":[\"Role\"],\"GLukaH\":[\"Moderator\"],\"GNSsCc\":[\"Failed to create playlist\"],\"GQ38dl\":[\"Chat (\",[\"unreadChatCount\"],\" unread)\"],\"GY6uSc\":[\"Next →\"],\"GbqhrN\":[[\"0\"],\"–\",[\"1\"],\" characters: letters, numbers, or underscores\"],\"GptGxg\":[\"Change password\"],\"H4MGkI\":[\"Expand player\"],\"H4o4sk\":[\"No one yet.\"],\"H8pzW-\":[\"Failed to update avatar\"],\"HTLDA4\":[\"Loading more…\"],\"I-x669\":[\"Invitees\"],\"IO9KL_\":[\"Next track\"],\"IZX7TO\":[\"Failed to generate invite\"],\"IagCbF\":[\"URL\"],\"ImOQa9\":[\"Reply\"],\"JJ-Bhk\":[\"Your email address\"],\"JRQitQ\":[\"Confirm new password\"],\"JXr41k\":[\"<0>\",[\"0\"],\" commented on <1>\",[\"1\"],\"\"],\"Jd58Fo\":[\"Hot\"],\"Jf0PuK\":[\"Go to login\"],\"JlFcis\":[\"Send\"],\"K7tIrx\":[\"Category\"],\"KDGWg5\":[\"Remove from playlist\"],\"KKZxBU\":[\"Uploading \",[\"0\"],\"%\"],\"K_F6pa\":[\"Saving…\"],\"L-rMC9\":[\"Reset to default\"],\"LLyMkV\":[\"Followed (\",[\"0\"],[\"1\"],\")\"],\"MHrjPM\":[\"Title\"],\"MKEPCY\":[\"Follow\"],\"MTb2Ot\":[\"No messages yet. Say hello!\"],\"Mj6oCJ\":[[\"0\"],\" is typing…\"],\"N40H-G\":[\"All\"],\"N6j2JH\":[\"Edit \",[\"0\"]],\"NUrY9o\":[\"Categories\"],\"Oprv1v\":[\"Password (min. \",[\"0\"],\" characters)\"],\"Oz0N9s\":[\"new\"],\"PUe8Yk\":[\"Collapse player\"],\"PiH3UR\":[\"Copied!\"],\"Pn2B7_\":[\"Current password\"],\"Pwqkdw\":[\"Loading…\"],\"Q6n4F4\":[\"Refresh metadata\"],\"QGaQRo\":[\"Failed to update role\"],\"QKsaQr\":[\"or <0>browse files\"],\"QLtPBd\":[\"No dumps in this playlist yet.\"],\"R9Khdg\":[\"Auto\"],\"RCcPrX\":[\"Delete this playlist? This cannot be undone.\"],\"RTksSy\":[\"<0>\",[\"0\"],\" started following you\"],\"RaKjrM\":[\"Failed to save edit\"],\"RcUHRT\":[\"Followed\"],\"RfwZxd\":[\"Reset password\"],\"Rrp6-J\":[\"Log in to like\"],\"RvVJBH\":[\"Refreshing stream…\"],\"SBTElJ\":[\"Searching…\"],\"Sad2tK\":[\"Sending…\"],\"So7gCD\":[\"Paste a link…\"],\"StovX6\":[\"This page does not exist.\"],\"Sxm8rQ\":[\"Users\"],\"T9bjWt\":[\"<0>\",[\"0\"],\" was added to <1>\",[\"1\"],\"\"],\"TM1ZbA\":[\"Playlists (\",[\"0\"],[\"1\"],\")\"],\"TN382O\":[\"Invalid link\"],\"Tv9vbB\":[\"Follow playlist\"],\"Tz0i8g\":[\"Settings\"],\"U3pytU\":[\"Admin\"],\"UNMVei\":[\"Forgot password?\"],\"UOZith\":[\"Failed to post\"],\"URAieT\":[\"Log in to vote\"],\"VCoEm-\":[\"Back to login\"],\"VKsaTi\":[\"Replying to\"],\"V_e7nf\":[\"Set new password\"],\"VnNJbN\":[\"From playlists\"],\"VskHIx\":[\"Delete category\"],\"VyTYmS\":[\"Change avatar\"],\"W9FRBT\":[\"Like\"],\"WE_r9K\":[\"Failed to create category\"],\"WfffrI\":[\"slug\"],\"WhimMi\":[\"Reset failed\"],\"WpXcBJ\":[\"Nothing here yet.\"],\"XJVYo8\":[\"Why & where\"],\"XJy2oN\":[\"Logging in…\"],\"Xan6QP\":[\"New dump\"],\"XgRtUf\":[\"Could not change password\"],\"Xi0Mn4\":[\"← Back to profile\"],\"XnL-Eu\":[\"No users match \\\"\",[\"q\"],\"\\\".\"],\"Xs2Lez\":[\"This reset link is missing or malformed.\"],\"YK1Dhc\":[\"a post\"],\"YcjhhX\":[\"User management\"],\"Ye9RMF\":[\"<0>\",[\"0\"],\" liked your comment on <1>\",[\"1\"],\"\"],\"YpkCca\":[\"No followed playlists yet.\"],\"ZBdbv9\":[\"Edit title\"],\"ZCpU0u\":[\"No playlists match \\\"\",[\"q\"],\"\\\".\"],\"ZmD2o6\":[\"Create & Add\"],\"_3O5R_\":[\"Request failed\"],\"_DwR-n\":[\"Creating…\"],\"_R_sGB\":[\"Password changed successfully.\"],\"_aept4\":[\"Post reply\"],\"_nT6AE\":[\"New password\"],\"_t4W-i\":[\"From people\"],\"aAIQg2\":[\"Appearance\"],\"aDvLhk\":[\"Add a comment…\"],\"b3Thhd\":[\"Upload failed\"],\"b8XMJ8\":[[\"visibleCount\",\"plural\",{\"one\":[\"#\",\" comment\"],\"other\":[\"#\",\" comments\"]}]],\"bQhwn-\":[\"Loading playlist…\"],\"cILfnJ\":[\"Remove file\"],\"cYP9Sb\":[\"+ Playlist\"],\"cbeBbZ\":[\"At least \",[\"0\"],\" characters\"],\"cnGeoo\":[\"Delete\"],\"d8DZWS\":[\"Open search\"],\"dAs22m\":[\"Replace file\"],\"dEgA5A\":[\"Cancel\"],\"dMizp8\":[\"New playlist\"],\"dqwCfR\":[\"Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later.\"],\"eFSqvc\":[\"Failed to post reply\"],\"eOfXq3\":[\"Title is required.\"],\"ePK91l\":[\"Edit\"],\"eaUTwS\":[\"Send reset link\"],\"ecUA8p\":[\"Today\"],\"ef9nPf\":[\"Loading dump…\"],\"eloqXQ\":[\"You can post it anyway.\"],\"en9o7K\":[\"Failed to post comment\"],\"etFQQS\":[\"What makes it worth it?\"],\"fC6mXb\":[\"Upvote\"],\"fI-mNw\":[\"Playlists\"],\"f_akpP\":[\"Max 50 MB\"],\"fgLNSM\":[\"Register\"],\"gANddk\":[\"Uploading…\"],\"gGx5tM\":[\"Editing\"],\"gIQQwD\":[\"Failed to load\"],\"gL9KKi\":[\"Who can see it\"],\"gLfZlz\":[\"Add to playlist\"],\"gjJ-sb\":[\"Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects.\"],\"goWEhR\":[\"Previous track\"],\"hBuUKa\":[\"Change password…\"],\"hD7w09\":[\"You've reached the end.\"],\"hJSliC\":[\"<0>\",[\"0\"],\" posted <1>\",[\"1\"],\"\"],\"hT8hgO\":[\"Reset to the suggested title\"],\"hYgDIe\":[\"Create\"],\"he3ygx\":[\"Copy\"],\"hpCc_Z\":[\"Close anyway\"],\"i7K_Te\":[\"Who am I?\"],\"iDNBZe\":[\"Notifications\"],\"iWpEwy\":[\"Go home\"],\"ipYn7W\":[\"If that address is registered you'll receive a reset link shortly.\"],\"isRobC\":[\"New\"],\"jbernk\":[\"Loading profile…\"],\"joEmfT\":[\"Server unreachable\"],\"jrZTZl\":[\"No dumps yet. Be the first!\"],\"k112DD\":[\"Load older messages\"],\"k36iJ-\":[\"Failed to save category\"],\"kLttbL\":[\"Registration failed\"],\"lUDifl\":[\"Created (\",[\"0\"],[\"1\"],\")\"],\"lUanmi\":[\"You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content.\"],\"lY5h1V\":[[\"0\",\"plural\",{\"one\":[\"#\",\" dump\"],\"other\":[\"#\",\" dumps\"]}]],\"lcfvr_\":[\"Delete this comment?\"],\"lpIMne\":[\"Passwords do not match\"],\"mb_Wju\":[\"Drop a file here, or paste one\"],\"mt6O6E\":[\"This is a mirage.\"],\"nbm5sI\":[\"No dumps match \\\"\",[\"q\"],\"\\\".\"],\"nrjqON\":[\"Checking invite…\"],\"nwtY4N\":[\"Something went wrong\"],\"nx4kaN\":[\"Could not save\"],\"oTYvvN\":[[\"0\",\"plural\",{\"one\":[\"and \",\"#\",\" earlier dump\"],\"other\":[\"and \",\"#\",\" earlier dumps\"]}]],\"ogtYkT\":[\"Password updated\"],\"pCpd9p\":[\"<0>\",[\"0\"],\" mentioned you in <1>\",[\"where\"],\"\"],\"pSheLH\":[\"No invitees yet.\"],\"pvnfJD\":[\"Dark\"],\"qIMfNQ\":[\"Delete playlist\"],\"qbDAcy\":[\"Dump it\"],\"qgx_78\":[\"Follow some public playlists to see their dumps here.\"],\"qsqt0w\":[\"Invite link\"],\"qvFa8r\":[\"public\"],\"qvz_Pp\":[\"Dump\"],\"rCbqPX\":[\"This invite link is missing, expired, or already used.\"],\"rDMzDU\":[\"Type a message…\"],\"rg9pXu\":[\"Search failed\"],\"rtpJqV\":[\"Dumps (\",[\"0\"],[\"1\"],\")\"],\"sEXJPi\":[\"Link or file\"],\"sGeXL3\":[\"Thumbnail\"],\"sQia9P\":[\"Log in\"],\"sTiqbm\":[\"invited by\"],\"sdP5Aa\":[\"[deleted]\"],\"sgX7B-\":[\"Single use, valid for 7 days.\"],\"shHs8T\":[\"Enter a query to search.\"],\"smeBfS\":[\"Invalid invite\"],\"tfDRzk\":[\"Save\"],\"tvmuQ0\":[\"Color scheme\"],\"u1lDX2\":[\"Fetching preview…\"],\"uD0qXQ\":[\"Drop a file here\"],\"uMGUnV\":[\"No playlists yet.\"],\"ub1EEL\":[\"edited \",[\"0\"]],\"uomLas\":[\"Add category\"],\"vJBF1r\":[\"Posting…\"],\"vLhLLO\":[\"Notifications (\",[\"unreadNotificationCount\"],\" unread)\"],\"vQMkHu\":[\"Remove vote\"],\"vuosjb\":[\"User menu\"],\"wbXKOv\":[\"File too large (max 50 MB).\"],\"wckWOP\":[\"Manage\"],\"wixIgH\":[\"Already have an account? <0>Log in\"],\"x6tjuK\":[\"Default tab\"],\"xEWkgZ\":[\"← Back to all dumps\"],\"xPHtx0\":[\"Submit search\"],\"xVuNgt\":[\"+ New playlist\"],\"xc9O_u\":[\"Delete dump\"],\"y6sq5j\":[\"Following\"],\"y7oaHj\":[\"Playlist title\"],\"yA_6BX\":[\"View all →\"],\"yBBtRm\":[\"Follow some users to see their dumps here.\"],\"yQ2kGp\":[\"Load more\"],\"y_0uwd\":[\"Yesterday\"],\"yz7wBu\":[\"Close\"],\"yzF66j\":[\"Link\"],\"z0ROB3\":[\"Remove like\"],\"z1uNN0\":[\"No emoji found.\"],\"zVuxvN\":[\"Refreshing…\"],\"zwBp5t\":[\"Private\"]}")}; \ No newline at end of file diff --git a/src/locales/en.po b/src/locales/en.po index c2ccb431..25e2a452 100644 --- a/src/locales/en.po +++ b/src/locales/en.po @@ -13,7 +13,7 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: src/components/CommentThread.tsx:256 +#: src/components/CommentThread.tsx:265 msgid "[deleted]" msgstr "[deleted]" @@ -33,14 +33,14 @@ msgstr "{0, plural, one {# dump} other {# dumps}}" msgid "{0, plural, one {and # earlier dump} other {and # earlier dumps}}" msgstr "{0, plural, one {and # earlier dump} other {and # earlier dumps}}" -#. placeholder {0}: names[0] -#. placeholder {1}: names[1] -#: src/components/ChatModal.tsx:531 +#. placeholder {0}: typingNames[0] +#. placeholder {1}: typingNames[1] +#: src/components/ChatModal.tsx:534 msgid "{0} and {1} are typing…" msgstr "{0} and {1} are typing…" -#. placeholder {0}: names[0] -#: src/components/ChatModal.tsx:530 +#. placeholder {0}: typingNames[0] +#: src/components/ChatModal.tsx:532 msgid "{0} is typing…" msgstr "{0} is typing…" @@ -54,18 +54,18 @@ msgstr "{0}–{1} characters: letters, numbers, or underscores" msgid "{label} ({count})" msgstr "{label} ({count})" -#: src/components/CommentThread.tsx:455 +#: src/components/CommentThread.tsx:470 msgid "{visibleCount, plural, one {# comment} other {# comments}}" msgstr "{visibleCount, plural, one {# comment} other {# comments}}" -#: src/components/DumpCreateModal.tsx:935 -#: src/pages/PlaylistDetail.tsx:570 -#: src/pages/UserPublicProfile.tsx:749 +#: src/components/DumpCreateModal.tsx:936 +#: src/pages/PlaylistDetail.tsx:572 +#: src/pages/UserPublicProfile.tsx:798 msgid "← Back" msgstr "← Back" -#: src/pages/Dump.tsx:292 -#: src/pages/Dump.tsx:522 +#: src/pages/Dump.tsx:294 +#: src/pages/Dump.tsx:524 #: src/pages/DumpEdit.tsx:187 msgid "← Back to all dumps" msgstr "← Back to all dumps" @@ -76,15 +76,15 @@ msgstr "← Back to all dumps" msgid "← Back to profile" msgstr "← Back to profile" -#: src/pages/UserPublicProfile.tsx:115 +#: src/pages/UserPublicProfile.tsx:134 msgid "+ Invite someone" msgstr "+ Invite someone" -#: src/components/PlaylistMembershipPanel.tsx:80 +#: src/components/PlaylistMembershipPanel.tsx:81 msgid "+ New playlist" msgstr "+ New playlist" -#: src/pages/Dump.tsx:363 +#: src/pages/Dump.tsx:365 msgid "+ Playlist" msgstr "+ Playlist" @@ -142,11 +142,11 @@ msgstr "a comment" msgid "a post" msgstr "a post" -#: src/pages/UserPublicProfile.tsx:1131 +#: src/pages/UserPublicProfile.tsx:1179 msgid "Account" msgstr "Account" -#: src/components/CommentThread.tsx:475 +#: src/components/CommentThread.tsx:490 msgid "Add a comment…" msgstr "Add a comment…" @@ -155,21 +155,21 @@ msgstr "Add a comment…" msgid "Add category" msgstr "Add category" -#: src/pages/UserPublicProfile.tsx:827 +#: src/pages/UserPublicProfile.tsx:876 msgid "Add email…" msgstr "Add email…" #: src/components/AddToPlaylistModal.tsx:64 -#: src/components/DumpCreateModal.tsx:659 +#: src/components/DumpCreateModal.tsx:660 msgid "Add to playlist" msgstr "Add to playlist" -#: src/pages/UserPublicProfile.tsx:1549 +#: src/pages/UserPublicProfile.tsx:1604 msgid "Admin" msgstr "Admin" -#: src/components/CategorySwitcher.tsx:79 -#: src/components/CategorySwitcher.tsx:82 +#: src/components/CategorySwitcher.tsx:80 +#: src/components/CategorySwitcher.tsx:83 msgid "All" msgstr "All" @@ -183,7 +183,7 @@ msgstr "Already dumped by {0} {1}" msgid "Already have an account? <0>Log in" msgstr "Already have an account? <0>Log in" -#: src/pages/UserPublicProfile.tsx:1150 +#: src/pages/UserPublicProfile.tsx:1198 msgid "Appearance" msgstr "Appearance" @@ -194,7 +194,7 @@ msgstr "Appearance" msgid "At least {0} characters" msgstr "At least {0} characters" -#: src/pages/UserPublicProfile.tsx:1198 +#: src/pages/UserPublicProfile.tsx:1253 msgid "Auto" msgstr "Auto" @@ -210,25 +210,25 @@ msgstr "Can't connect to the live updates server. Upvotes and notifications may #: src/components/CategoryManager.tsx:210 #: src/components/CategoryManager.tsx:211 -#: src/components/ChatModal.tsx:229 -#: src/components/CommentThread.tsx:124 +#: src/components/ChatModal.tsx:231 +#: src/components/CommentThread.tsx:127 #: src/components/ConfirmModal.tsx:32 -#: src/components/DumpCreateModal.tsx:945 +#: src/components/DumpCreateModal.tsx:946 #: src/components/form/FormActions.tsx:32 -#: src/pages/Dump.tsx:404 -#: src/pages/DumpEdit.tsx:469 -#: src/pages/PlaylistDetail.tsx:920 -#: src/pages/UserPublicProfile.tsx:1674 -#: src/pages/UserPublicProfile.tsx:1744 +#: src/pages/Dump.tsx:406 +#: src/pages/DumpEdit.tsx:470 +#: src/pages/PlaylistDetail.tsx:923 +#: src/pages/UserPublicProfile.tsx:1733 +#: src/pages/UserPublicProfile.tsx:1806 msgid "Cancel" msgstr "Cancel" -#: src/pages/PlaylistDetail.tsx:745 +#: src/pages/PlaylistDetail.tsx:747 msgid "Cancel removal" msgstr "Cancel removal" -#: src/components/ChatModal.tsx:622 -#: src/components/ChatModal.tsx:623 +#: src/components/ChatModal.tsx:624 +#: src/components/ChatModal.tsx:625 msgid "Cancel reply" msgstr "Cancel reply" @@ -237,15 +237,15 @@ msgid "Cancel search" msgstr "Cancel search" #: src/components/CategorySelect.tsx:22 -#: src/pages/UserPublicProfile.tsx:1281 +#: src/pages/UserPublicProfile.tsx:1336 msgid "Categories" msgstr "Categories" -#: src/components/CategorySwitcher.tsx:102 +#: src/components/CategorySwitcher.tsx:103 msgid "Category" msgstr "Category" -#: src/pages/UserPublicProfile.tsx:776 +#: src/pages/UserPublicProfile.tsx:825 msgid "Change avatar" msgstr "Change avatar" @@ -254,14 +254,14 @@ msgstr "Change avatar" msgid "Change password" msgstr "Change password" -#: src/pages/UserPublicProfile.tsx:1143 +#: src/pages/UserPublicProfile.tsx:1191 msgid "Change password…" msgstr "Change password…" #: src/components/ChatButton.tsx:17 #: src/components/ChatFab.tsx:49 #: src/components/ChatFab.tsx:50 -#: src/components/ChatModal.tsx:536 +#: src/components/ChatModal.tsx:538 msgid "Chat" msgstr "Chat" @@ -279,7 +279,7 @@ msgstr "Checking invite…" msgid "Close" msgstr "Close" -#: src/components/DumpCreateModal.tsx:690 +#: src/components/DumpCreateModal.tsx:691 msgid "Close anyway" msgstr "Close anyway" @@ -287,7 +287,7 @@ msgstr "Close anyway" msgid "Close player" msgstr "Close player" -#: src/components/DumpCreateModal.tsx:680 +#: src/components/DumpCreateModal.tsx:681 msgid "Close without posting? The attached file won't be kept — everything you typed will." msgstr "Close without posting? The attached file won't be kept — everything you typed will." @@ -295,7 +295,7 @@ msgstr "Close without posting? The attached file won't be kept — everything yo msgid "Collapse player" msgstr "Collapse player" -#: src/pages/UserPublicProfile.tsx:1190 +#: src/pages/UserPublicProfile.tsx:1245 msgid "Color scheme" msgstr "Color scheme" @@ -304,11 +304,11 @@ msgstr "Color scheme" msgid "Confirm new password" msgstr "Confirm new password" -#: src/pages/UserPublicProfile.tsx:106 +#: src/pages/UserPublicProfile.tsx:159 msgid "Copied!" msgstr "Copied!" -#: src/pages/UserPublicProfile.tsx:106 +#: src/pages/UserPublicProfile.tsx:159 msgid "Copy" msgstr "Copy" @@ -320,19 +320,19 @@ msgstr "Could not change password" msgid "Could not load." msgstr "Could not load." -#: src/pages/DumpEdit.tsx:370 +#: src/pages/DumpEdit.tsx:371 msgid "Could not save" msgstr "Could not save" -#: src/components/DumpCreateModal.tsx:802 +#: src/components/DumpCreateModal.tsx:803 msgid "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later." msgstr "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later." -#: src/components/PlaylistCreateForm.tsx:87 +#: src/components/PlaylistCreateForm.tsx:91 msgid "Create" msgstr "Create" -#: src/components/PlaylistCreateForm.tsx:87 +#: src/components/PlaylistCreateForm.tsx:91 msgid "Create & Add" msgstr "Create & Add" @@ -342,7 +342,7 @@ msgstr "Create & Add" msgid "Created ({0}{1})" msgstr "Created ({0}{1})" -#: src/components/PlaylistCreateForm.tsx:86 +#: src/components/PlaylistCreateForm.tsx:90 msgid "Creating…" msgstr "Creating…" @@ -350,23 +350,23 @@ msgstr "Creating…" msgid "Current password" msgstr "Current password" -#: src/pages/UserPublicProfile.tsx:1212 +#: src/pages/UserPublicProfile.tsx:1267 msgid "Dark" msgstr "Dark" -#: src/pages/UserPublicProfile.tsx:1225 +#: src/pages/UserPublicProfile.tsx:1280 msgid "Default tab" msgstr "Default tab" #: src/components/CategoryManager.tsx:221 #: src/components/CategoryManager.tsx:222 -#: src/components/ChatModal.tsx:183 -#: src/components/ChatModal.tsx:184 -#: src/components/ChatModal.tsx:239 -#: src/components/CommentThread.tsx:376 -#: src/components/CommentThread.tsx:382 +#: src/components/ChatModal.tsx:185 +#: src/components/ChatModal.tsx:186 +#: src/components/ChatModal.tsx:241 +#: src/components/CommentThread.tsx:390 +#: src/components/CommentThread.tsx:396 #: src/components/ConfirmModal.tsx:16 -#: src/pages/PlaylistDetail.tsx:916 +#: src/pages/PlaylistDetail.tsx:919 msgid "Delete" msgstr "Delete" @@ -380,17 +380,17 @@ msgid "Delete category \"{0}\"? This cannot be undone." msgstr "Delete category \"{0}\"? This cannot be undone." #: src/pages/DumpEdit.tsx:264 -#: src/pages/DumpEdit.tsx:465 +#: src/pages/DumpEdit.tsx:466 msgid "Delete dump" msgstr "Delete dump" #: src/components/PlaylistCard.tsx:109 -#: src/pages/PlaylistDetail.tsx:758 +#: src/pages/PlaylistDetail.tsx:760 #: src/pages/UserPlaylists.tsx:468 msgid "Delete playlist" msgstr "Delete playlist" -#: src/components/CommentThread.tsx:381 +#: src/components/CommentThread.tsx:395 msgid "Delete this comment?" msgstr "Delete this comment?" @@ -398,25 +398,25 @@ msgstr "Delete this comment?" msgid "Delete this dump? This cannot be undone." msgstr "Delete this dump? This cannot be undone." -#: src/components/ChatModal.tsx:238 +#: src/components/ChatModal.tsx:240 msgid "Delete this message?" msgstr "Delete this message?" -#: src/pages/PlaylistDetail.tsx:757 +#: src/pages/PlaylistDetail.tsx:759 #: src/pages/UserPlaylists.tsx:467 msgid "Delete this playlist? This cannot be undone." msgstr "Delete this playlist? This cannot be undone." -#: src/components/ChatModal.tsx:129 +#: src/components/ChatModal.tsx:131 msgid "deleted message" msgstr "deleted message" -#: src/components/PlaylistCreateForm.tsx:78 -#: src/pages/PlaylistDetail.tsx:877 +#: src/components/PlaylistCreateForm.tsx:82 +#: src/pages/PlaylistDetail.tsx:880 msgid "Description (optional)" msgstr "Description (optional)" -#: src/components/DumpCreateModal.tsx:741 +#: src/components/DumpCreateModal.tsx:742 msgid "Done" msgstr "Done" @@ -424,11 +424,11 @@ msgstr "Done" msgid "Drop a file here" msgstr "Drop a file here" -#: src/components/DumpCreateModal.tsx:847 +#: src/components/DumpCreateModal.tsx:848 msgid "Drop a file here, or paste one" msgstr "Drop a file here, or paste one" -#: src/pages/DumpEdit.tsx:437 +#: src/pages/DumpEdit.tsx:438 msgid "Drop a replacement here" msgstr "Drop a replacement here" @@ -436,23 +436,23 @@ msgstr "Drop a replacement here" msgid "Dump" msgstr "Dump" -#: src/components/DumpCreateModal.tsx:958 +#: src/components/DumpCreateModal.tsx:959 msgid "Dump it" msgstr "Dump it" -#: src/components/DumpCreateModal.tsx:718 +#: src/components/DumpCreateModal.tsx:719 msgid "Dumped!" msgstr "Dumped!" #: src/pages/Search.tsx:174 #: src/pages/UserDumps.tsx:80 -#: src/pages/UserPublicProfile.tsx:900 +#: src/pages/UserPublicProfile.tsx:948 msgid "Dumps" msgstr "Dumps" #. placeholder {0}: dumps.items.length #. placeholder {1}: dumps.hasMore ? "+" : "" -#: src/pages/UserPublicProfile.tsx:920 +#: src/pages/UserPublicProfile.tsx:968 msgid "Dumps ({0}{1})" msgstr "Dumps ({0}{1})" @@ -460,11 +460,11 @@ msgstr "Dumps ({0}{1})" msgid "Earlier" msgstr "Earlier" -#: src/components/ChatModal.tsx:172 -#: src/components/ChatModal.tsx:173 -#: src/components/CommentThread.tsx:367 -#: src/pages/Dump.tsx:518 -#: src/pages/PlaylistDetail.tsx:625 +#: src/components/ChatModal.tsx:174 +#: src/components/ChatModal.tsx:175 +#: src/components/CommentThread.tsx:381 +#: src/pages/Dump.tsx:520 +#: src/pages/PlaylistDetail.tsx:627 msgid "Edit" msgstr "Edit" @@ -480,20 +480,20 @@ msgstr "Edit title" #. placeholder {0}: relativeTime(comment.updatedAt) #. placeholder {0}: relativeTime(dump.updatedAt) #. placeholder {0}: relativeTime(message.updatedAt) -#: src/components/ChatModal.tsx:152 -#: src/components/CommentThread.tsx:317 -#: src/pages/Dump.tsx:457 -#: src/pages/PlaylistDetail.tsx:664 +#: src/components/ChatModal.tsx:154 +#: src/components/CommentThread.tsx:330 +#: src/pages/Dump.tsx:459 +#: src/pages/PlaylistDetail.tsx:666 msgid "edited {0}" msgstr "edited {0}" #. placeholder {0}: comment.updatedAt.toLocaleString() #. placeholder {0}: dump.updatedAt.toLocaleString() #. placeholder {0}: message.updatedAt.toLocaleString() -#: src/components/ChatModal.tsx:150 -#: src/components/CommentThread.tsx:315 -#: src/pages/Dump.tsx:455 -#: src/pages/PlaylistDetail.tsx:661 +#: src/components/ChatModal.tsx:152 +#: src/components/CommentThread.tsx:328 +#: src/pages/Dump.tsx:457 +#: src/pages/PlaylistDetail.tsx:663 msgid "Edited {0}" msgstr "Edited {0}" @@ -522,7 +522,7 @@ msgstr "Expand player" msgid "Failed to create category" msgstr "Failed to create category" -#: src/components/PlaylistCreateForm.tsx:84 +#: src/components/PlaylistCreateForm.tsx:88 msgid "Failed to create playlist" msgstr "Failed to create playlist" @@ -530,9 +530,9 @@ msgstr "Failed to create playlist" msgid "Failed to delete" msgstr "Failed to delete" -#: src/pages/UserPublicProfile.tsx:87 -#: src/pages/UserPublicProfile.tsx:90 -#: src/pages/UserPublicProfile.tsx:118 +#: src/pages/UserPublicProfile.tsx:104 +#: src/pages/UserPublicProfile.tsx:107 +#: src/pages/UserPublicProfile.tsx:168 msgid "Failed to generate invite" msgstr "Failed to generate invite" @@ -541,27 +541,27 @@ msgstr "Failed to generate invite" #: src/pages/index/JournalFeed.tsx:33 #: src/pages/index/NewFeed.tsx:36 #: src/pages/Notifications.tsx:374 -#: src/pages/UserPublicProfile.tsx:1022 -#: src/pages/UserPublicProfile.tsx:1064 -#: src/pages/UserPublicProfile.tsx:1109 +#: src/pages/UserPublicProfile.tsx:1070 +#: src/pages/UserPublicProfile.tsx:1112 +#: src/pages/UserPublicProfile.tsx:1157 msgid "Failed to load" msgstr "Failed to load" -#: src/components/DumpCreateModal.tsx:750 +#: src/components/DumpCreateModal.tsx:751 msgid "Failed to post" msgstr "Failed to post" -#: src/components/CommentThread.tsx:474 +#: src/components/CommentThread.tsx:489 msgid "Failed to post comment" msgstr "Failed to post comment" -#: src/components/CommentThread.tsx:397 +#: src/components/CommentThread.tsx:411 msgid "Failed to post reply" msgstr "Failed to post reply" -#: src/pages/PlaylistDetail.tsx:908 -#: src/pages/UserPublicProfile.tsx:1677 -#: src/pages/UserPublicProfile.tsx:1746 +#: src/pages/PlaylistDetail.tsx:911 +#: src/pages/UserPublicProfile.tsx:1736 +#: src/pages/UserPublicProfile.tsx:1808 msgid "Failed to save" msgstr "Failed to save" @@ -569,27 +569,27 @@ msgstr "Failed to save" msgid "Failed to save category" msgstr "Failed to save category" -#: src/components/CommentThread.tsx:330 +#: src/components/CommentThread.tsx:343 msgid "Failed to save edit" msgstr "Failed to save edit" -#: src/pages/UserPublicProfile.tsx:836 +#: src/pages/UserPublicProfile.tsx:885 msgid "Failed to update avatar" msgstr "Failed to update avatar" -#: src/pages/UserPublicProfile.tsx:1615 +#: src/pages/UserPublicProfile.tsx:1674 msgid "Failed to update role" msgstr "Failed to update role" -#: src/pages/UserPublicProfile.tsx:1220 +#: src/pages/UserPublicProfile.tsx:1275 msgid "Feeds" msgstr "Feeds" -#: src/components/DumpCreateModal.tsx:789 +#: src/components/DumpCreateModal.tsx:790 msgid "Fetching preview…" msgstr "Fetching preview…" -#: src/components/DumpCreateModal.tsx:571 +#: src/components/DumpCreateModal.tsx:572 msgid "File too large (max 50 MB)." msgstr "File too large (max 50 MB)." @@ -615,8 +615,8 @@ msgid "Follow some users to see their dumps here." msgstr "Follow some users to see their dumps here." #: src/components/FeedTabBar.tsx:34 -#: src/pages/UserPublicProfile.tsx:902 -#: src/pages/UserPublicProfile.tsx:1254 +#: src/pages/UserPublicProfile.tsx:950 +#: src/pages/UserPublicProfile.tsx:1309 msgid "Followed" msgstr "Followed" @@ -626,17 +626,17 @@ msgstr "Followed" msgid "Followed ({0}{1})" msgstr "Followed ({0}{1})" -#: src/pages/UserPublicProfile.tsx:1053 +#: src/pages/UserPublicProfile.tsx:1101 msgid "Followed playlists" msgstr "Followed playlists" #: src/components/FollowButton.tsx:37 #: src/components/FollowButton.tsx:64 -#: src/pages/UserPublicProfile.tsx:1011 +#: src/pages/UserPublicProfile.tsx:1059 msgid "Following" msgstr "Following" -#: src/pages/UserLogin.tsx:89 +#: src/pages/UserLogin.tsx:91 msgid "Forgot password?" msgstr "Forgot password?" @@ -657,15 +657,15 @@ msgid "Go to login" msgstr "Go to login" #: src/components/FeedTabBar.tsx:30 -#: src/pages/UserPublicProfile.tsx:1233 +#: src/pages/UserPublicProfile.tsx:1288 msgid "Hot" msgstr "Hot" -#: src/pages/UserLogin.tsx:120 +#: src/pages/UserLogin.tsx:122 msgid "If that address is registered you'll receive a reset link shortly." msgstr "If that address is registered you'll receive a reset link shortly." -#: src/pages/Dump.tsx:552 +#: src/pages/Dump.tsx:554 msgid "In collections" msgstr "In collections" @@ -677,25 +677,30 @@ msgstr "Invalid invite" msgid "Invalid link" msgstr "Invalid link" -#: src/pages/UserPublicProfile.tsx:798 +#: src/pages/UserPublicProfile.tsx:142 +#: src/pages/UserPublicProfile.tsx:149 +msgid "Invite link" +msgstr "Invite link" + +#: src/pages/UserPublicProfile.tsx:847 msgid "invited by" msgstr "invited by" -#: src/pages/UserPublicProfile.tsx:903 -#: src/pages/UserPublicProfile.tsx:1098 +#: src/pages/UserPublicProfile.tsx:951 +#: src/pages/UserPublicProfile.tsx:1146 msgid "Invitees" msgstr "Invitees" #: src/components/FeedTabBar.tsx:32 -#: src/pages/UserPublicProfile.tsx:1247 +#: src/pages/UserPublicProfile.tsx:1302 msgid "Journal" msgstr "Journal" -#: src/components/DumpCreateModal.tsx:687 +#: src/components/DumpCreateModal.tsx:688 msgid "Keep editing" msgstr "Keep editing" -#: src/pages/UserPublicProfile.tsx:1205 +#: src/pages/UserPublicProfile.tsx:1260 msgid "Light" msgstr "Light" @@ -703,7 +708,7 @@ msgstr "Light" msgid "Like" msgstr "Like" -#: src/components/DumpCreateModal.tsx:764 +#: src/components/DumpCreateModal.tsx:765 msgid "Link" msgstr "Link" @@ -715,7 +720,7 @@ msgstr "Link or file" msgid "Live updates are temporarily disconnected. Trying to reconnect…" msgstr "Live updates are temporarily disconnected. Trying to reconnect…" -#: src/components/AppHeader.tsx:132 +#: src/components/AppHeader.tsx:141 msgid "Live updates unavailable." msgstr "Live updates unavailable." @@ -724,11 +729,11 @@ msgstr "Live updates unavailable." msgid "Load more" msgstr "Load more" -#: src/components/ChatModal.tsx:549 +#: src/components/ChatModal.tsx:551 msgid "Load older messages" msgstr "Load older messages" -#: src/pages/Dump.tsx:268 +#: src/pages/Dump.tsx:270 #: src/pages/DumpEdit.tsx:163 msgid "Loading dump…" msgstr "Loading dump…" @@ -745,18 +750,18 @@ msgstr "Loading dump…" msgid "Loading more…" msgstr "Loading more…" -#: src/pages/PlaylistDetail.tsx:554 +#: src/pages/PlaylistDetail.tsx:556 msgid "Loading playlist…" msgstr "Loading playlist…" -#: src/pages/UserPublicProfile.tsx:732 +#: src/pages/UserPublicProfile.tsx:781 msgid "Loading profile…" msgstr "Loading profile…" #: src/components/CategoryManager.tsx:52 -#: src/components/ChatModal.tsx:548 +#: src/components/ChatModal.tsx:550 #: src/components/PlaylistMembershipPanel.tsx:28 -#: src/components/TextEditor.tsx:289 +#: src/components/TextEditor.tsx:311 #: src/components/UserListPopover.tsx:192 #: src/components/UserListPopover.tsx:230 #: src/pages/index/FollowedFeed.tsx:78 @@ -767,17 +772,17 @@ msgstr "Loading profile…" #: src/pages/Notifications.tsx:446 #: src/pages/UserDumps.tsx:54 #: src/pages/UserPlaylists.tsx:345 -#: src/pages/UserPublicProfile.tsx:1016 -#: src/pages/UserPublicProfile.tsx:1058 -#: src/pages/UserPublicProfile.tsx:1103 +#: src/pages/UserPublicProfile.tsx:1064 +#: src/pages/UserPublicProfile.tsx:1106 +#: src/pages/UserPublicProfile.tsx:1151 #: src/pages/UserUpvoted.tsx:125 msgid "Loading…" msgstr "Loading…" #: src/components/AppHeader.tsx:113 -#: src/pages/UserLogin.tsx:34 -#: src/pages/UserLogin.tsx:59 -#: src/pages/UserLogin.tsx:78 +#: src/pages/UserLogin.tsx:35 +#: src/pages/UserLogin.tsx:61 +#: src/pages/UserLogin.tsx:80 msgid "Log in" msgstr "Log in" @@ -789,20 +794,20 @@ msgstr "Log in to like" msgid "Log in to vote" msgstr "Log in to vote" -#: src/pages/UserPublicProfile.tsx:753 -#: src/pages/UserPublicProfile.tsx:850 +#: src/pages/UserPublicProfile.tsx:802 +#: src/pages/UserPublicProfile.tsx:898 msgid "Log out" msgstr "Log out" -#: src/pages/UserLogin.tsx:77 +#: src/pages/UserLogin.tsx:79 msgid "Logging in…" msgstr "Logging in…" -#: src/pages/UserLogin.tsx:64 +#: src/pages/UserLogin.tsx:66 msgid "Login failed" msgstr "Login failed" -#: src/pages/UserPublicProfile.tsx:908 +#: src/pages/UserPublicProfile.tsx:956 msgid "Manage" msgstr "Manage" @@ -810,7 +815,7 @@ msgstr "Manage" msgid "Max 50 MB" msgstr "Max 50 MB" -#: src/pages/UserPublicProfile.tsx:1548 +#: src/pages/UserPublicProfile.tsx:1603 msgid "Moderator" msgstr "Moderator" @@ -824,15 +829,15 @@ msgid "new" msgstr "new" #: src/components/FeedTabBar.tsx:31 -#: src/pages/UserPublicProfile.tsx:1240 +#: src/pages/UserPublicProfile.tsx:1295 msgid "New" msgstr "New" -#: src/components/DumpCreateModal.tsx:659 +#: src/components/DumpCreateModal.tsx:660 #: src/components/DumpFab.tsx:65 #: src/components/DumpFab.tsx:66 #: src/pages/UserDumps.tsx:88 -#: src/pages/UserPublicProfile.tsx:1327 +#: src/pages/UserPublicProfile.tsx:1382 msgid "New dump" msgstr "New dump" @@ -846,7 +851,7 @@ msgstr "New password" msgid "New playlist" msgstr "New playlist" -#: src/components/DumpCreateModal.tsx:957 +#: src/components/DumpCreateModal.tsx:958 msgid "Next →" msgstr "Next →" @@ -854,7 +859,7 @@ msgstr "Next →" msgid "Next track" msgstr "Next track" -#: src/pages/PlaylistDetail.tsx:680 +#: src/pages/PlaylistDetail.tsx:682 msgid "No dumps in this playlist yet." msgstr "No dumps in this playlist yet." @@ -868,20 +873,20 @@ msgstr "No dumps match \"{q}\"." msgid "No dumps yet. Be the first!" msgstr "No dumps yet. Be the first!" -#: src/components/TextEditor.tsx:292 +#: src/components/TextEditor.tsx:314 msgid "No emoji found." msgstr "No emoji found." #: src/pages/UserPlaylists.tsx:442 -#: src/pages/UserPublicProfile.tsx:1071 +#: src/pages/UserPublicProfile.tsx:1119 msgid "No followed playlists yet." msgstr "No followed playlists yet." -#: src/pages/UserPublicProfile.tsx:1116 +#: src/pages/UserPublicProfile.tsx:1164 msgid "No invitees yet." msgstr "No invitees yet." -#: src/components/ChatModal.tsx:556 +#: src/components/ChatModal.tsx:558 msgid "No messages yet. Say hello!" msgstr "No messages yet. Say hello!" @@ -895,7 +900,7 @@ msgstr "No playlists match \"{q}\"." #: src/components/PlaylistMembershipPanel.tsx:34 #: src/pages/UserPlaylists.tsx:400 -#: src/pages/UserPublicProfile.tsx:982 +#: src/pages/UserPublicProfile.tsx:1030 msgid "No playlists yet." msgstr "No playlists yet." @@ -903,14 +908,14 @@ msgstr "No playlists yet." msgid "No users match \"{q}\"." msgstr "No users match \"{q}\"." -#: src/pages/UserPublicProfile.tsx:1029 +#: src/pages/UserPublicProfile.tsx:1077 msgid "Not following anyone yet." msgstr "Not following anyone yet." #: src/pages/Notifications.tsx:381 #: src/pages/UserDumps.tsx:99 -#: src/pages/UserPublicProfile.tsx:1338 -#: src/pages/UserPublicProfile.tsx:1460 +#: src/pages/UserPublicProfile.tsx:1393 +#: src/pages/UserPublicProfile.tsx:1515 #: src/pages/UserUpvoted.tsx:159 msgid "Nothing here yet." msgstr "Nothing here yet." @@ -925,7 +930,7 @@ msgstr "Notifications" msgid "Notifications ({unreadNotificationCount} unread)" msgstr "Notifications ({unreadNotificationCount} unread)" -#: src/components/SearchBar.tsx:84 +#: src/components/SearchBar.tsx:96 msgid "Open search" msgstr "Open search" @@ -937,8 +942,8 @@ msgstr "or <0>browse files" msgid "Page not found" msgstr "Page not found" -#: src/pages/UserLogin.tsx:74 -#: src/pages/UserPublicProfile.tsx:1136 +#: src/pages/UserLogin.tsx:76 +#: src/pages/UserPublicProfile.tsx:1184 msgid "Password" msgstr "Password" @@ -960,15 +965,15 @@ msgstr "Password updated" msgid "Passwords do not match" msgstr "Passwords do not match" -#: src/components/DumpCreateModal.tsx:782 +#: src/components/DumpCreateModal.tsx:783 msgid "Paste a link…" msgstr "Paste a link…" -#: src/components/DumpCreateModal.tsx:699 +#: src/components/DumpCreateModal.tsx:700 msgid "Picked up where you left off." msgstr "Picked up where you left off." -#: src/pages/PlaylistDetail.tsx:863 +#: src/pages/PlaylistDetail.tsx:866 msgid "Playlist title" msgstr "Playlist title" @@ -977,27 +982,27 @@ msgstr "Playlist title" #: src/components/UserMenu.tsx:62 #: src/pages/Search.tsx:177 #: src/pages/UserPlaylists.tsx:371 -#: src/pages/UserPublicProfile.tsx:901 +#: src/pages/UserPublicProfile.tsx:949 msgid "Playlists" msgstr "Playlists" #. placeholder {0}: playlists.items.length #. placeholder {1}: playlists.hasMore ? "+" : "" -#: src/pages/UserPublicProfile.tsx:951 +#: src/pages/UserPublicProfile.tsx:999 msgid "Playlists ({0}{1})" msgstr "Playlists ({0}{1})" -#: src/components/CommentThread.tsx:472 +#: src/components/CommentThread.tsx:487 msgid "Post comment" msgstr "Post comment" -#: src/components/CommentThread.tsx:395 +#: src/components/CommentThread.tsx:409 msgid "Post reply" msgstr "Post reply" -#: src/components/CommentThread.tsx:396 -#: src/components/CommentThread.tsx:473 -#: src/components/DumpCreateModal.tsx:951 +#: src/components/CommentThread.tsx:410 +#: src/components/CommentThread.tsx:488 +#: src/components/DumpCreateModal.tsx:952 msgid "Posting…" msgstr "Posting…" @@ -1009,23 +1014,23 @@ msgstr "Previous track" #: src/components/JournalCard.tsx:123 #: src/components/PlaylistCard.tsx:73 #: src/components/PlaylistMembershipPanel.tsx:55 -#: src/pages/Dump.tsx:463 -#: src/pages/PlaylistDetail.tsx:644 +#: src/pages/Dump.tsx:465 +#: src/pages/PlaylistDetail.tsx:646 msgid "private" msgstr "private" #: src/components/form/SegmentedField.tsx:81 -#: src/pages/PlaylistDetail.tsx:902 +#: src/pages/PlaylistDetail.tsx:905 msgid "Private" msgstr "Private" #: src/components/PlaylistCard.tsx:72 -#: src/pages/PlaylistDetail.tsx:643 +#: src/pages/PlaylistDetail.tsx:645 msgid "public" msgstr "public" #: src/components/form/SegmentedField.tsx:80 -#: src/pages/PlaylistDetail.tsx:895 +#: src/pages/PlaylistDetail.tsx:898 msgid "Public" msgstr "Public" @@ -1055,7 +1060,7 @@ msgstr "Registering…" msgid "Registration failed" msgstr "Registration failed" -#: src/pages/Dump.tsx:530 +#: src/pages/Dump.tsx:532 msgid "Related" msgstr "Related" @@ -1063,7 +1068,7 @@ msgstr "Related" msgid "Remove file" msgstr "Remove file" -#: src/pages/PlaylistDetail.tsx:735 +#: src/pages/PlaylistDetail.tsx:737 msgid "Remove from playlist" msgstr "Remove from playlist" @@ -1075,21 +1080,21 @@ msgstr "Remove like" msgid "Remove vote" msgstr "Remove vote" -#: src/pages/DumpEdit.tsx:429 +#: src/pages/DumpEdit.tsx:430 msgid "Replace file" msgstr "Replace file" -#: src/components/ChatModal.tsx:162 -#: src/components/ChatModal.tsx:163 -#: src/components/CommentThread.tsx:355 +#: src/components/ChatModal.tsx:164 +#: src/components/ChatModal.tsx:165 +#: src/components/CommentThread.tsx:369 msgid "Reply" msgstr "Reply" -#: src/components/ChatModal.tsx:612 +#: src/components/ChatModal.tsx:614 msgid "Replying to" msgstr "Replying to" -#: src/pages/UserLogin.tsx:132 +#: src/pages/UserLogin.tsx:134 msgid "Request failed" msgstr "Request failed" @@ -1101,8 +1106,8 @@ msgstr "Reset failed" msgid "Reset password" msgstr "Reset password" -#: src/pages/DumpEdit.tsx:390 -#: src/pages/DumpEdit.tsx:408 +#: src/pages/DumpEdit.tsx:391 +#: src/pages/DumpEdit.tsx:409 msgid "Reset to default" msgstr "Reset to default" @@ -1111,42 +1116,42 @@ msgstr "Reset to default" msgid "Reset to the suggested title" msgstr "Reset to the suggested title" -#: src/pages/Dump.tsx:285 +#: src/pages/Dump.tsx:287 #: src/pages/DumpEdit.tsx:180 msgid "Retry" msgstr "Retry" -#: src/pages/UserPublicProfile.tsx:1599 +#: src/pages/UserPublicProfile.tsx:1658 msgid "Role" msgstr "Role" -#: src/components/ChatModal.tsx:222 -#: src/components/CommentThread.tsx:328 -#: src/pages/Dump.tsx:396 -#: src/pages/DumpEdit.tsx:472 -#: src/pages/PlaylistDetail.tsx:927 -#: src/pages/UserPublicProfile.tsx:1666 -#: src/pages/UserPublicProfile.tsx:1736 +#: src/components/ChatModal.tsx:224 +#: src/components/CommentThread.tsx:341 +#: src/pages/Dump.tsx:398 +#: src/pages/DumpEdit.tsx:473 +#: src/pages/PlaylistDetail.tsx:930 +#: src/pages/UserPublicProfile.tsx:1725 +#: src/pages/UserPublicProfile.tsx:1798 msgid "Save" msgstr "Save" #: src/components/ChangePasswordModal.tsx:100 -#: src/components/CommentThread.tsx:329 -#: src/pages/Dump.tsx:395 -#: src/pages/PlaylistDetail.tsx:923 +#: src/components/CommentThread.tsx:342 +#: src/pages/Dump.tsx:397 +#: src/pages/PlaylistDetail.tsx:926 #: src/pages/ResetPassword.tsx:126 -#: src/pages/UserPublicProfile.tsx:1663 -#: src/pages/UserPublicProfile.tsx:1733 +#: src/pages/UserPublicProfile.tsx:1722 +#: src/pages/UserPublicProfile.tsx:1795 msgid "Saving…" msgstr "Saving…" #: src/components/AppHeader.tsx:66 -#: src/components/SearchBar.tsx:78 +#: src/components/SearchBar.tsx:90 #: src/pages/Search.tsx:50 msgid "Search" msgstr "Search" -#: src/components/SearchBar.tsx:74 +#: src/components/SearchBar.tsx:86 msgid "Search dumps, users, playlists…" msgstr "Search dumps, users, playlists…" @@ -1158,15 +1163,15 @@ msgstr "Search failed" msgid "Searching…" msgstr "Searching…" -#: src/components/ChatModal.tsx:658 +#: src/components/ChatModal.tsx:660 msgid "Send" msgstr "Send" -#: src/pages/UserLogin.tsx:141 +#: src/pages/UserLogin.tsx:143 msgid "Send reset link" msgstr "Send reset link" -#: src/pages/UserLogin.tsx:140 +#: src/pages/UserLogin.tsx:142 msgid "Sending…" msgstr "Sending…" @@ -1179,14 +1184,18 @@ msgstr "Server unreachable" msgid "Set new password" msgstr "Set new password" -#: src/pages/UserPublicProfile.tsx:905 +#: src/pages/UserPublicProfile.tsx:953 msgid "Settings" msgstr "Settings" -#: src/components/ChatModal.tsx:532 +#: src/components/ChatModal.tsx:535 msgid "Several people are typing…" msgstr "Several people are typing…" +#: src/pages/UserPublicProfile.tsx:162 +msgid "Single use, valid for 7 days." +msgstr "Single use, valid for 7 days." + #: src/components/CategoryManager.tsx:191 msgid "slug" msgstr "slug" @@ -1196,15 +1205,15 @@ msgstr "slug" msgid "Something went wrong" msgstr "Something went wrong" -#: src/components/DumpCreateModal.tsx:706 +#: src/components/DumpCreateModal.tsx:707 msgid "Start fresh" msgstr "Start fresh" -#: src/pages/UserPublicProfile.tsx:1155 +#: src/pages/UserPublicProfile.tsx:1203 msgid "Style" msgstr "Style" -#: src/components/SearchBar.tsx:84 +#: src/components/SearchBar.tsx:96 msgid "Submit search" msgstr "Submit search" @@ -1216,7 +1225,7 @@ msgstr "the chat" msgid "This invite link is missing, expired, or already used." msgstr "This invite link is missing, expired, or already used." -#: src/pages/UserLogin.tsx:96 +#: src/pages/UserLogin.tsx:98 msgid "This is a mirage." msgstr "This is a mirage." @@ -1228,30 +1237,30 @@ msgstr "This page does not exist." msgid "This reset link is missing or malformed." msgstr "This reset link is missing or malformed." -#: src/pages/DumpEdit.tsx:374 +#: src/pages/DumpEdit.tsx:375 msgid "Thumbnail" msgstr "Thumbnail" #: src/components/DumpCreateModal.tsx:174 -#: src/components/PlaylistCreateForm.tsx:70 -#: src/pages/DumpEdit.tsx:398 +#: src/components/PlaylistCreateForm.tsx:74 +#: src/pages/DumpEdit.tsx:399 msgid "Title" msgstr "Title" -#: src/components/DumpCreateModal.tsx:569 +#: src/components/DumpCreateModal.tsx:570 msgid "Title is required." msgstr "Title is required." -#: src/components/ChatModal.tsx:262 +#: src/components/ChatModal.tsx:264 #: src/pages/Notifications.tsx:397 msgid "Today" msgstr "Today" -#: src/components/ChatModal.tsx:635 +#: src/components/ChatModal.tsx:637 msgid "Type a message…" msgstr "Type a message…" -#: src/pages/PlaylistDetail.tsx:747 +#: src/pages/PlaylistDetail.tsx:749 msgid "Undo" msgstr "Undo" @@ -1263,16 +1272,16 @@ msgstr "Unfollow {targetUsername}" msgid "Unfollow playlist" msgstr "Unfollow playlist" -#: src/pages/UserPublicProfile.tsx:697 +#: src/pages/UserPublicProfile.tsx:748 msgid "Upload failed" msgstr "Upload failed" #. placeholder {0}: Math.round((uploadProgress ?? 0) * 100) -#: src/components/DumpCreateModal.tsx:642 +#: src/components/DumpCreateModal.tsx:643 msgid "Uploading {0}%" msgstr "Uploading {0}%" -#: src/components/DumpCreateModal.tsx:954 +#: src/components/DumpCreateModal.tsx:955 msgid "Uploading…" msgstr "Uploading…" @@ -1286,15 +1295,15 @@ msgstr "Upvoted" #. placeholder {0}: votes.items.length #. placeholder {1}: votes.hasMore ? "+" : "" -#: src/pages/UserPublicProfile.tsx:931 +#: src/pages/UserPublicProfile.tsx:979 msgid "Upvoted ({0}{1})" msgstr "Upvoted ({0}{1})" -#: src/pages/DumpEdit.tsx:421 +#: src/pages/DumpEdit.tsx:422 msgid "URL" msgstr "URL" -#: src/components/DumpCreateModal.tsx:553 +#: src/components/DumpCreateModal.tsx:554 msgid "URL is required." msgstr "URL is required." @@ -1302,11 +1311,11 @@ msgstr "URL is required." msgid "URL slug" msgstr "URL slug" -#: src/pages/UserPublicProfile.tsx:1547 +#: src/pages/UserPublicProfile.tsx:1602 msgid "User" msgstr "User" -#: src/pages/UserPublicProfile.tsx:1266 +#: src/pages/UserPublicProfile.tsx:1321 msgid "User management" msgstr "User management" @@ -1314,7 +1323,7 @@ msgstr "User management" msgid "User menu" msgstr "User menu" -#: src/pages/UserLogin.tsx:67 +#: src/pages/UserLogin.tsx:69 #: src/pages/UserRegister.tsx:116 msgid "Username" msgstr "Username" @@ -1323,29 +1332,29 @@ msgstr "Username" msgid "Users" msgstr "Users" -#: src/pages/UserPublicProfile.tsx:1001 -#: src/pages/UserPublicProfile.tsx:1044 -#: src/pages/UserPublicProfile.tsx:1086 -#: src/pages/UserPublicProfile.tsx:1359 -#: src/pages/UserPublicProfile.tsx:1490 +#: src/pages/UserPublicProfile.tsx:1049 +#: src/pages/UserPublicProfile.tsx:1092 +#: src/pages/UserPublicProfile.tsx:1134 +#: src/pages/UserPublicProfile.tsx:1414 +#: src/pages/UserPublicProfile.tsx:1545 msgid "View all →" msgstr "View all →" -#: src/components/DumpCreateModal.tsx:720 +#: src/components/DumpCreateModal.tsx:721 msgid "View dump →" msgstr "View dump →" -#: src/components/DumpCreateModal.tsx:904 -#: src/pages/DumpEdit.tsx:446 +#: src/components/DumpCreateModal.tsx:905 +#: src/pages/DumpEdit.tsx:447 msgid "What makes it worth it?" msgstr "What makes it worth it?" -#: src/pages/UserPublicProfile.tsx:885 -#: src/pages/UserPublicProfile.tsx:1725 +#: src/pages/UserPublicProfile.tsx:933 +#: src/pages/UserPublicProfile.tsx:1787 msgid "Who am I?" msgstr "Who am I?" -#: src/components/DumpCreateModal.tsx:920 +#: src/components/DumpCreateModal.tsx:921 msgid "Who can see it" msgstr "Who can see it" @@ -1353,16 +1362,16 @@ msgstr "Who can see it" msgid "Why & where" msgstr "Why & where" -#: src/components/DumpCreateModal.tsx:903 -#: src/pages/DumpEdit.tsx:445 +#: src/components/DumpCreateModal.tsx:904 +#: src/pages/DumpEdit.tsx:446 msgid "Why?" msgstr "Why?" -#: src/components/CommentThread.tsx:398 +#: src/components/CommentThread.tsx:413 msgid "Write a reply…" msgstr "Write a reply…" -#: src/components/ChatModal.tsx:265 +#: src/components/ChatModal.tsx:267 #: src/pages/Notifications.tsx:399 msgid "Yesterday" msgstr "Yesterday" @@ -1387,7 +1396,7 @@ msgstr "You'll be notified when someone follows your playlists, upvotes your dum msgid "You've reached the end." msgstr "You've reached the end." -#: src/pages/UserLogin.tsx:136 +#: src/pages/UserLogin.tsx:138 msgid "Your email address" msgstr "Your email address" diff --git a/src/locales/fr.js b/src/locales/fr.js index 05bec9f7..73bb8f2a 100644 --- a/src/locales/fr.js +++ b/src/locales/fr.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-K9EZb\":[\"Ajouter un e-mail…\"],\"-OxI15\":[\"Collections suivies\"],\"-Ya-b9\":[\"Enregistrement échoué\"],\"-siMqD\":[\"Journal\"],\"1CalO6\":[\"Style\"],\"1HfJWf\":[\"Rechercher des recos, utilisateurs, collections…\"],\"1cbYY_\":[\"Votés (\",[\"0\"],[\"1\"],\")\"],\"1njn7W\":[\"Clair\"],\"1utXA6\":[\"Recos\"],\"26iNma\":[\"Publier le commentaire\"],\"2DoBvq\":[\"Flux\"],\"2Hlmdt\":[\"Écrire une réponse…\"],\"2_DHgA\":[\"Identifiant d’URL\"],\"2nrsEn\":[\"message supprimé\"],\"2ygf_L\":[\"← Retour\"],\"3KKSM4\":[\"privé\"],\"3QuNUr\":[\"Plusieurs personnes écrivent…\"],\"3SEwY1\":[\"Supprimer la catégorie \\\"\",[\"0\"],\"\\\" ? Cette action est irréversible.\"],\"3yfh3D\":[\"<0>\",[\"0\"],\" a suivi votre collection <1>\",[\"1\"],\"\"],\"49voTZ\":[[\"label\"],\" (\",[\"count\"],\")\"],\"4B6w_o\":[\"Recommandé !\"],\"4GKuCs\":[\"Connexion échouée\"],\"4HH9iB\":[\"Aucun abonnement pour le moment.\"],\"4OjqAQ\":[\"Continuer l'édition\"],\"4RtQ1k\":[\"Ne plus suivre \",[\"targetUsername\"]],\"4c-qBx\":[\"Votre mot de passe a été modifié. Vous pouvez maintenant vous connecter.\"],\"4yj9xV\":[\"Les mises à jour en direct sont temporairement interrompues. Tentative de reconnexion…\"],\"5KHDCi\":[[\"0\"],\" et \",[\"1\"],\" sont en train d'écrire…\"],\"5TviPn\":[\"Annuler la recherche\"],\"5cC8f2\":[\"Modifié le \",[\"0\"]],\"5oD9f_\":[\"Plus tôt\"],\"6Qly-0\":[\"un commentaire\"],\"6YE0P6\":[\"Édition de \",[\"0\"]],\"6YtxFj\":[\"Nom\"],\"6gRgw8\":[\"Réessayer\"],\"7PHCIN\":[\"Annuler la suppression\"],\"7PzzBU\":[\"Utilisateur\"],\"7d1a0d\":[\"Public\"],\"7sNhEz\":[\"Nom d'utilisateur\"],\"8F1i42\":[\"Page introuvable\"],\"8Ug9jB\":[\"Connexe\"],\"8ZsakT\":[\"Mot de passe\"],\"92o1-U\":[\"Suppression échouée\"],\"9BruTc\":[\"Pourquoi ?\"],\"9l4qcT\":[\"Déposez un fichier de remplacement ici\"],\"9uI_rE\":[\"Annuler\"],\"9xDZu_\":[\"Impossible de charger.\"],\"A0y396\":[\"+ Inviter quelqu'un\"],\"A1taO8\":[\"Rechercher\"],\"AEfu-D\":[\"Dans les collections\"],\"AHZflp\":[\"Tribune\"],\"AQbgNR\":[\"Suivre \",[\"targetUsername\"]],\"AS7WoE\":[\"Repartir de zéro\"],\"ATGYL1\":[\"Adresse e-mail\"],\"AZctoV\":[[\"0\",\"plural\",{\"one\":[\"#\",\" commentaire\"],\"other\":[\"#\",\" commentaires\"]}]],\"Ade-6d\":[\"Mises à jour en direct indisponibles.\"],\"AeXO77\":[\"Compte\"],\"AnRu_j\":[\"Annuler la réponse\"],\"BlpJ2G\":[\"Reprise de votre brouillon.\"],\"CI50ct\":[\"Voté\"],\"C_qQE4\":[\"Déjà recommandé par \",[\"0\"],\" \",[\"1\"]],\"Cj24wt\":[\"Inscription…\"],\"D8DRYV\":[\"Supprimer ce message ?\"],\"DPfwMq\":[\"Terminé\"],\"DdeHXH\":[\"Supprimer cette reco ? Cette action est irréversible.\"],\"Dp1JhP\":[\"<0>\",[\"0\"],\" a voté pour <1>\",[\"1\"],\"\"],\"ECiS12\":[\"Voir la reco →\"],\"ED8n0z\":[\"la tribune\"],\"Evcm2Z\":[\"Fermer sans publier ? Le fichier joint sera perdu — ce que vous avez écrit sera conservé.\"],\"ExR0Fr\":[\"L'URL est obligatoire.\"],\"F5Js1v\":[\"Ne plus suivre la collection\"],\"FgAxTj\":[\"Se déconnecter\"],\"Fxf4jq\":[\"Description (facultatif)\"],\"GCWCCo\":[\"Fermer le lecteur\"],\"GDvlUT\":[\"Rôle\"],\"GLukaH\":[\"Modérateur\"],\"GNSsCc\":[\"Impossible de créer la collection\"],\"GQ38dl\":[[\"unreadChatCount\"],\" messages non lus\"],\"GY6uSc\":[\"Suivant →\"],\"GbqhrN\":[[\"0\"],\"–\",[\"1\"],\" caractères : lettres, chiffres ou tirets bas\"],\"GptGxg\":[\"Changer le mot de passe\"],\"H4MGkI\":[\"Agrandir le lecteur\"],\"H4o4sk\":[\"Personne pour le moment.\"],\"H8pzW-\":[\"Impossible de mettre à jour l'avatar\"],\"HTLDA4\":[\"Chargement…\"],\"I-x669\":[\"Invités\"],\"IO9KL_\":[\"Piste suivante\"],\"IZX7TO\":[\"Impossible de générer une invitation\"],\"IagCbF\":[\"URL\"],\"ImOQa9\":[\"Répondre\"],\"JJ-Bhk\":[\"Votre adresse e-mail\"],\"JRQitQ\":[\"Confirmer le nouveau mot de passe\"],\"JXr41k\":[\"<0>\",[\"0\"],\" a commenté sur <1>\",[\"1\"],\"\"],\"Jd58Fo\":[\"Tendances\"],\"Jf0PuK\":[\"Aller à la connexion\"],\"JlFcis\":[\"Envoyer\"],\"K7tIrx\":[\"Catégorie\"],\"KDGWg5\":[\"Retirer de la collection\"],\"KKZxBU\":[\"Envoi \",[\"0\"],\" %\"],\"K_F6pa\":[\"Enregistrement…\"],\"L-rMC9\":[\"Réinitialiser par défaut\"],\"LLyMkV\":[\"Suivies (\",[\"0\"],[\"1\"],\")\"],\"MHrjPM\":[\"Titre\"],\"MKEPCY\":[\"Suivre\"],\"MTb2Ot\":[\"Aucun message pour l'instant. Dites bonjour !\"],\"Mj6oCJ\":[[\"0\"],\" est en train d'écrire…\"],\"N40H-G\":[\"Tout\"],\"N6j2JH\":[\"Modifier \",[\"0\"]],\"NUrY9o\":[\"Catégories\"],\"Oprv1v\":[\"Mot de passe (min. \",[\"0\"],\" caractères)\"],\"Oz0N9s\":[\"nouveau\"],\"PUe8Yk\":[\"Réduire le lecteur\"],\"PiH3UR\":[\"Copié !\"],\"Pn2B7_\":[\"Mot de passe actuel\"],\"Pwqkdw\":[\"Chargement…\"],\"Q6n4F4\":[\"Actualiser les métadonnées\"],\"QGaQRo\":[\"Erreur lors de la mise à jour du rôle\"],\"QKsaQr\":[\"ou <0>parcourir les fichiers\"],\"QLtPBd\":[\"Aucune reco dans cette collection pour l'instant.\"],\"R9Khdg\":[\"Auto\"],\"RCcPrX\":[\"Supprimer cette collection ? Cette action est irréversible.\"],\"RTksSy\":[\"<0>\",[\"0\"],\" a commencé à vous suivre\"],\"RaKjrM\":[\"Impossible d'enregistrer la modification\"],\"RcUHRT\":[\"Suivi\"],\"RfwZxd\":[\"Réinitialiser le mot de passe\"],\"Rrp6-J\":[\"Se connecter pour aimer\"],\"RvVJBH\":[\"Actualisation du flux…\"],\"SBTElJ\":[\"Recherche…\"],\"Sad2tK\":[\"Envoi…\"],\"So7gCD\":[\"Collez un lien…\"],\"StovX6\":[\"Rien à voir, circulez.\"],\"Sxm8rQ\":[\"Utilisateurs\"],\"T9bjWt\":[\"<0>\",[\"0\"],\" a été ajouté à <1>\",[\"1\"],\"\"],\"TM1ZbA\":[\"Collections (\",[\"0\"],[\"1\"],\")\"],\"TN382O\":[\"Lien invalide\"],\"Tv9vbB\":[\"Suivre la collection\"],\"Tz0i8g\":[\"Paramètres\"],\"U3pytU\":[\"Administrateur\"],\"UNMVei\":[\"Mot de passe oublié ?\"],\"UOZith\":[\"Publication échouée\"],\"URAieT\":[\"Se connecter pour voter\"],\"VCoEm-\":[\"Retour à la connexion\"],\"VKsaTi\":[\"En réponse à\"],\"V_e7nf\":[\"Définir un nouveau mot de passe\"],\"VnNJbN\":[\"De collections\"],\"VskHIx\":[\"Supprimer la catégorie\"],\"VyTYmS\":[\"Changer l'avatar\"],\"W9FRBT\":[\"Aimer\"],\"WE_r9K\":[\"Échec de la création de la catégorie\"],\"WfffrI\":[\"identifiant\"],\"WhimMi\":[\"Échec de la réinitialisation\"],\"WpXcBJ\":[\"Rien ici pour l'instant.\"],\"XJVYo8\":[\"Pourquoi & où\"],\"XJy2oN\":[\"Connexion…\"],\"Xan6QP\":[\"Nouvelle reco\"],\"XgRtUf\":[\"Impossible de changer le mot de passe\"],\"Xi0Mn4\":[\"← Retour au profil\"],\"XnL-Eu\":[\"Aucun utilisateur ne correspond à « \",[\"q\"],\" ».\"],\"Xs2Lez\":[\"Ce lien de réinitialisation est absent ou malformé.\"],\"YK1Dhc\":[\"une publication\"],\"YcjhhX\":[\"Gestion utilisateur\"],\"Ye9RMF\":[\"<0>\",[\"0\"],\" a aimé votre commentaire sur <1>\",[\"1\"],\"\"],\"YpkCca\":[\"Pas encore de collections suivies.\"],\"ZBdbv9\":[\"Modifier le titre\"],\"ZCpU0u\":[\"Aucune collection ne correspond à « \",[\"q\"],\" ».\"],\"ZmD2o6\":[\"Créer et ajouter\"],\"_3O5R_\":[\"Échec de la demande\"],\"_DwR-n\":[\"Création…\"],\"_R_sGB\":[\"Mot de passe modifié avec succès.\"],\"_aept4\":[\"Publier la réponse\"],\"_nT6AE\":[\"Nouveau mot de passe\"],\"_t4W-i\":[\"De personnes\"],\"aAIQg2\":[\"Apparence\"],\"aDvLhk\":[\"Ajouter un commentaire…\"],\"b3Thhd\":[\"Envoi échoué\"],\"b8XMJ8\":[[\"visibleCount\",\"plural\",{\"one\":[\"#\",\" commentaire\"],\"other\":[\"#\",\" commentaires\"]}]],\"bQhwn-\":[\"Chargement de la collection…\"],\"cILfnJ\":[\"Supprimer le fichier\"],\"cYP9Sb\":[\"+ Collection\"],\"cbeBbZ\":[\"Au moins \",[\"0\"],\" caractères\"],\"cnGeoo\":[\"Supprimer\"],\"d8DZWS\":[\"Ouvrir la recherche\"],\"dAs22m\":[\"Remplacer le fichier\"],\"dEgA5A\":[\"Annuler\"],\"dMizp8\":[\"Nouvelle collection\"],\"dqwCfR\":[\"Impossible de charger un aperçu pour ce lien — vérifiez-le, ou publiez-le tel quel et actualisez l'aperçu plus tard.\"],\"eFSqvc\":[\"Impossible de publier la réponse\"],\"eOfXq3\":[\"Un titre est requis.\"],\"ePK91l\":[\"Modifier\"],\"eaUTwS\":[\"Envoyer le lien de réinitialisation\"],\"ecUA8p\":[\"Aujourd'hui\"],\"ef9nPf\":[\"Chargement de la reco…\"],\"eloqXQ\":[\"Vous pouvez la publier quand même.\"],\"en9o7K\":[\"Impossible de publier le commentaire\"],\"etFQQS\":[\"Pourquoi on en voudrait ?\"],\"fC6mXb\":[\"Voter\"],\"fI-mNw\":[\"Collections\"],\"f_akpP\":[\"Max 50 Mo\"],\"fgLNSM\":[\"S'inscrire\"],\"gANddk\":[\"Envoi…\"],\"gGx5tM\":[\"Modification\"],\"gIQQwD\":[\"Chargement échoué\"],\"gL9KKi\":[\"Qui peut la voir\"],\"gLfZlz\":[\"Ajouter à la collection\"],\"gjJ-sb\":[\"Impossible de se connecter au serveur de mises à jour en direct. Les votes et les notifications pourraient ne pas se synchroniser avant la reconnexion.\"],\"goWEhR\":[\"Piste précédente\"],\"hBuUKa\":[\"Changer le mot de passe…\"],\"hD7w09\":[\"Vous avez tout lu, tout vu, tout bu.\"],\"hJSliC\":[\"<0>\",[\"0\"],\" a publié <1>\",[\"1\"],\"\"],\"hT8hgO\":[\"Rétablir le titre suggéré\"],\"hYgDIe\":[\"Créer\"],\"he3ygx\":[\"Copier\"],\"hpCc_Z\":[\"Fermer quand même\"],\"i7K_Te\":[\"Qui suis-je ?\"],\"iDNBZe\":[\"Notifications\"],\"iWpEwy\":[\"Accueil\"],\"ipYn7W\":[\"Si cette adresse est enregistrée, vous recevrez un lien de réinitialisation sous peu.\"],\"isRobC\":[\"Nouveau\"],\"jbernk\":[\"Chargement du profil…\"],\"joEmfT\":[\"Serveur inaccessible\"],\"jrZTZl\":[\"Pas encore de recos. Soyez le premier !\"],\"k112DD\":[\"Charger les messages plus anciens\"],\"k36iJ-\":[\"Échec de l’enregistrement de la catégorie\"],\"kLttbL\":[\"Inscription échouée\"],\"lUDifl\":[\"Créées (\",[\"0\"],[\"1\"],\")\"],\"lUanmi\":[\"Vous serez notifié lorsque quelqu'un suit vos collections, vote pour vos recos ou publie du nouveau contenu.\"],\"lY5h1V\":[[\"0\",\"plural\",{\"one\":[\"#\",\" reco\"],\"other\":[\"#\",\" recos\"]}]],\"lcfvr_\":[\"Supprimer ce commentaire ?\"],\"lpIMne\":[\"Les mots de passe ne correspondent pas\"],\"mb_Wju\":[\"Déposez un fichier ici, ou collez-en un\"],\"mt6O6E\":[\"C'est un mirage.\"],\"nbm5sI\":[\"Aucune reco ne correspond à « \",[\"q\"],\" ».\"],\"nrjqON\":[\"Vérification de l'invitation…\"],\"nwtY4N\":[\"Une erreur est survenue\"],\"nx4kaN\":[\"Sauvegarde impossible\"],\"oTYvvN\":[[\"0\",\"plural\",{\"one\":[\"et \",\"#\",\" reco plus ancienne\"],\"other\":[\"et \",\"#\",\" recos plus anciennes\"]}]],\"ogtYkT\":[\"Mot de passe mis à jour\"],\"pCpd9p\":[\"<0>\",[\"0\"],\" vous a mentionné dans <1>\",[\"where\"],\"\"],\"pSheLH\":[\"Aucun invité pour le moment.\"],\"pvnfJD\":[\"Sombre\"],\"qIMfNQ\":[\"Supprimer la collection\"],\"qbDAcy\":[\"Recommander\"],\"qgx_78\":[\"Suivez des collections publiques pour voir leurs recos ici.\"],\"qvFa8r\":[\"public\"],\"qvz_Pp\":[\"Reco\"],\"rCbqPX\":[\"Ce lien d'invitation est manquant, expiré ou déjà utilisé.\"],\"rDMzDU\":[\"Écrivez un message…\"],\"rg9pXu\":[\"Recherche échouée\"],\"rtpJqV\":[\"Recos (\",[\"0\"],[\"1\"],\")\"],\"sEXJPi\":[\"Lien ou fichier\"],\"sGeXL3\":[\"Miniature\"],\"sQia9P\":[\"Se connecter\"],\"sTiqbm\":[\"invité par\"],\"sdP5Aa\":[\"[supprimé]\"],\"shHs8T\":[\"Saisissez une recherche.\"],\"smeBfS\":[\"Invitation invalide\"],\"tfDRzk\":[\"Enregistrer\"],\"tvmuQ0\":[\"Thème de couleur\"],\"u1lDX2\":[\"Récupération de l'aperçu…\"],\"uD0qXQ\":[\"Déposez un fichier ici\"],\"uMGUnV\":[\"Pas encore de collections.\"],\"ub1EEL\":[\"modifié \",[\"0\"]],\"uomLas\":[\"Ajouter une catégorie\"],\"vJBF1r\":[\"Publication…\"],\"vLhLLO\":[\"Notifications (\",[\"unreadNotificationCount\"],\" non lues)\"],\"vQMkHu\":[\"Retirer le vote\"],\"vuosjb\":[\"Menu utilisateur\"],\"wbXKOv\":[\"Fichier trop volumineux (max 50 Mo).\"],\"wckWOP\":[\"Administration\"],\"wixIgH\":[\"Vous avez déjà un compte ? <0>Se connecter\"],\"x6tjuK\":[\"Onglet par défaut\"],\"xEWkgZ\":[\"← Retour à toutes les recos\"],\"xPHtx0\":[\"Lancer la recherche\"],\"xVuNgt\":[\"+ Nouvelle collection\"],\"xc9O_u\":[\"Supprimer la reco\"],\"y6sq5j\":[\"Abonné\"],\"y7oaHj\":[\"Titre de la collection\"],\"yA_6BX\":[\"Tout voir →\"],\"yBBtRm\":[\"Suivez des utilisateurs pour voir leurs recos ici.\"],\"yQ2kGp\":[\"Charger plus\"],\"y_0uwd\":[\"Hier\"],\"yz7wBu\":[\"Fermer\"],\"yzF66j\":[\"Lien\"],\"z0ROB3\":[\"Retirer le j'aime\"],\"z1uNN0\":[\"Aucun emoji trouvé.\"],\"zVuxvN\":[\"Actualisation…\"],\"zwBp5t\":[\"Privé\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-K9EZb\":[\"Ajouter un e-mail…\"],\"-OxI15\":[\"Collections suivies\"],\"-Ya-b9\":[\"Enregistrement échoué\"],\"-siMqD\":[\"Journal\"],\"1CalO6\":[\"Style\"],\"1HfJWf\":[\"Rechercher des recos, utilisateurs, collections…\"],\"1cbYY_\":[\"Votés (\",[\"0\"],[\"1\"],\")\"],\"1njn7W\":[\"Clair\"],\"1utXA6\":[\"Recos\"],\"26iNma\":[\"Publier le commentaire\"],\"2DoBvq\":[\"Flux\"],\"2Hlmdt\":[\"Écrire une réponse…\"],\"2_DHgA\":[\"Identifiant d’URL\"],\"2nrsEn\":[\"message supprimé\"],\"2ygf_L\":[\"← Retour\"],\"3KKSM4\":[\"privé\"],\"3QuNUr\":[\"Plusieurs personnes écrivent…\"],\"3SEwY1\":[\"Supprimer la catégorie \\\"\",[\"0\"],\"\\\" ? Cette action est irréversible.\"],\"3yfh3D\":[\"<0>\",[\"0\"],\" a suivi votre collection <1>\",[\"1\"],\"\"],\"49voTZ\":[[\"label\"],\" (\",[\"count\"],\")\"],\"4B6w_o\":[\"Recommandé !\"],\"4GKuCs\":[\"Connexion échouée\"],\"4HH9iB\":[\"Aucun abonnement pour le moment.\"],\"4OjqAQ\":[\"Continuer l'édition\"],\"4RtQ1k\":[\"Ne plus suivre \",[\"targetUsername\"]],\"4c-qBx\":[\"Votre mot de passe a été modifié. Vous pouvez maintenant vous connecter.\"],\"4yj9xV\":[\"Les mises à jour en direct sont temporairement interrompues. Tentative de reconnexion…\"],\"5KHDCi\":[[\"0\"],\" et \",[\"1\"],\" sont en train d'écrire…\"],\"5TviPn\":[\"Annuler la recherche\"],\"5cC8f2\":[\"Modifié le \",[\"0\"]],\"5oD9f_\":[\"Plus tôt\"],\"6Qly-0\":[\"un commentaire\"],\"6YE0P6\":[\"Édition de \",[\"0\"]],\"6YtxFj\":[\"Nom\"],\"6gRgw8\":[\"Réessayer\"],\"7PHCIN\":[\"Annuler la suppression\"],\"7PzzBU\":[\"Utilisateur\"],\"7d1a0d\":[\"Public\"],\"7sNhEz\":[\"Nom d'utilisateur\"],\"8F1i42\":[\"Page introuvable\"],\"8Ug9jB\":[\"Connexe\"],\"8ZsakT\":[\"Mot de passe\"],\"92o1-U\":[\"Suppression échouée\"],\"9BruTc\":[\"Pourquoi ?\"],\"9l4qcT\":[\"Déposez un fichier de remplacement ici\"],\"9uI_rE\":[\"Annuler\"],\"9xDZu_\":[\"Impossible de charger.\"],\"A0y396\":[\"+ Inviter quelqu'un\"],\"A1taO8\":[\"Rechercher\"],\"AEfu-D\":[\"Dans les collections\"],\"AHZflp\":[\"Tribune\"],\"AQbgNR\":[\"Suivre \",[\"targetUsername\"]],\"AS7WoE\":[\"Repartir de zéro\"],\"ATGYL1\":[\"Adresse e-mail\"],\"AZctoV\":[[\"0\",\"plural\",{\"one\":[\"#\",\" commentaire\"],\"other\":[\"#\",\" commentaires\"]}]],\"Ade-6d\":[\"Mises à jour en direct indisponibles.\"],\"AeXO77\":[\"Compte\"],\"AnRu_j\":[\"Annuler la réponse\"],\"BlpJ2G\":[\"Reprise de votre brouillon.\"],\"CI50ct\":[\"Voté\"],\"C_qQE4\":[\"Déjà recommandé par \",[\"0\"],\" \",[\"1\"]],\"Cj24wt\":[\"Inscription…\"],\"D8DRYV\":[\"Supprimer ce message ?\"],\"DPfwMq\":[\"Terminé\"],\"DdeHXH\":[\"Supprimer cette reco ? Cette action est irréversible.\"],\"Dp1JhP\":[\"<0>\",[\"0\"],\" a voté pour <1>\",[\"1\"],\"\"],\"ECiS12\":[\"Voir la reco →\"],\"ED8n0z\":[\"la tribune\"],\"Evcm2Z\":[\"Fermer sans publier ? Le fichier joint sera perdu — ce que vous avez écrit sera conservé.\"],\"ExR0Fr\":[\"L'URL est obligatoire.\"],\"F5Js1v\":[\"Ne plus suivre la collection\"],\"FgAxTj\":[\"Se déconnecter\"],\"Fxf4jq\":[\"Description (facultatif)\"],\"GCWCCo\":[\"Fermer le lecteur\"],\"GDvlUT\":[\"Rôle\"],\"GLukaH\":[\"Modérateur\"],\"GNSsCc\":[\"Impossible de créer la collection\"],\"GQ38dl\":[[\"unreadChatCount\"],\" messages non lus\"],\"GY6uSc\":[\"Suivant →\"],\"GbqhrN\":[[\"0\"],\"–\",[\"1\"],\" caractères : lettres, chiffres ou tirets bas\"],\"GptGxg\":[\"Changer le mot de passe\"],\"H4MGkI\":[\"Agrandir le lecteur\"],\"H4o4sk\":[\"Personne pour le moment.\"],\"H8pzW-\":[\"Impossible de mettre à jour l'avatar\"],\"HTLDA4\":[\"Chargement…\"],\"I-x669\":[\"Invités\"],\"IO9KL_\":[\"Piste suivante\"],\"IZX7TO\":[\"Impossible de générer une invitation\"],\"IagCbF\":[\"URL\"],\"ImOQa9\":[\"Répondre\"],\"JJ-Bhk\":[\"Votre adresse e-mail\"],\"JRQitQ\":[\"Confirmer le nouveau mot de passe\"],\"JXr41k\":[\"<0>\",[\"0\"],\" a commenté sur <1>\",[\"1\"],\"\"],\"Jd58Fo\":[\"Tendances\"],\"Jf0PuK\":[\"Aller à la connexion\"],\"JlFcis\":[\"Envoyer\"],\"K7tIrx\":[\"Catégorie\"],\"KDGWg5\":[\"Retirer de la collection\"],\"KKZxBU\":[\"Envoi \",[\"0\"],\" %\"],\"K_F6pa\":[\"Enregistrement…\"],\"L-rMC9\":[\"Réinitialiser par défaut\"],\"LLyMkV\":[\"Suivies (\",[\"0\"],[\"1\"],\")\"],\"MHrjPM\":[\"Titre\"],\"MKEPCY\":[\"Suivre\"],\"MTb2Ot\":[\"Aucun message pour l'instant. Dites bonjour !\"],\"Mj6oCJ\":[[\"0\"],\" est en train d'écrire…\"],\"N40H-G\":[\"Tout\"],\"N6j2JH\":[\"Modifier \",[\"0\"]],\"NUrY9o\":[\"Catégories\"],\"Oprv1v\":[\"Mot de passe (min. \",[\"0\"],\" caractères)\"],\"Oz0N9s\":[\"nouveau\"],\"PUe8Yk\":[\"Réduire le lecteur\"],\"PiH3UR\":[\"Copié !\"],\"Pn2B7_\":[\"Mot de passe actuel\"],\"Pwqkdw\":[\"Chargement…\"],\"Q6n4F4\":[\"Actualiser les métadonnées\"],\"QGaQRo\":[\"Erreur lors de la mise à jour du rôle\"],\"QKsaQr\":[\"ou <0>parcourir les fichiers\"],\"QLtPBd\":[\"Aucune reco dans cette collection pour l'instant.\"],\"R9Khdg\":[\"Auto\"],\"RCcPrX\":[\"Supprimer cette collection ? Cette action est irréversible.\"],\"RTksSy\":[\"<0>\",[\"0\"],\" a commencé à vous suivre\"],\"RaKjrM\":[\"Impossible d'enregistrer la modification\"],\"RcUHRT\":[\"Suivi\"],\"RfwZxd\":[\"Réinitialiser le mot de passe\"],\"Rrp6-J\":[\"Se connecter pour aimer\"],\"RvVJBH\":[\"Actualisation du flux…\"],\"SBTElJ\":[\"Recherche…\"],\"Sad2tK\":[\"Envoi…\"],\"So7gCD\":[\"Collez un lien…\"],\"StovX6\":[\"Rien à voir, circulez.\"],\"Sxm8rQ\":[\"Utilisateurs\"],\"T9bjWt\":[\"<0>\",[\"0\"],\" a été ajouté à <1>\",[\"1\"],\"\"],\"TM1ZbA\":[\"Collections (\",[\"0\"],[\"1\"],\")\"],\"TN382O\":[\"Lien invalide\"],\"Tv9vbB\":[\"Suivre la collection\"],\"Tz0i8g\":[\"Paramètres\"],\"U3pytU\":[\"Administrateur\"],\"UNMVei\":[\"Mot de passe oublié ?\"],\"UOZith\":[\"Publication échouée\"],\"URAieT\":[\"Se connecter pour voter\"],\"VCoEm-\":[\"Retour à la connexion\"],\"VKsaTi\":[\"En réponse à\"],\"V_e7nf\":[\"Définir un nouveau mot de passe\"],\"VnNJbN\":[\"De collections\"],\"VskHIx\":[\"Supprimer la catégorie\"],\"VyTYmS\":[\"Changer l'avatar\"],\"W9FRBT\":[\"Aimer\"],\"WE_r9K\":[\"Échec de la création de la catégorie\"],\"WfffrI\":[\"identifiant\"],\"WhimMi\":[\"Échec de la réinitialisation\"],\"WpXcBJ\":[\"Rien ici pour l'instant.\"],\"XJVYo8\":[\"Pourquoi & où\"],\"XJy2oN\":[\"Connexion…\"],\"Xan6QP\":[\"Nouvelle reco\"],\"XgRtUf\":[\"Impossible de changer le mot de passe\"],\"Xi0Mn4\":[\"← Retour au profil\"],\"XnL-Eu\":[\"Aucun utilisateur ne correspond à « \",[\"q\"],\" ».\"],\"Xs2Lez\":[\"Ce lien de réinitialisation est absent ou malformé.\"],\"YK1Dhc\":[\"une publication\"],\"YcjhhX\":[\"Gestion utilisateur\"],\"Ye9RMF\":[\"<0>\",[\"0\"],\" a aimé votre commentaire sur <1>\",[\"1\"],\"\"],\"YpkCca\":[\"Pas encore de collections suivies.\"],\"ZBdbv9\":[\"Modifier le titre\"],\"ZCpU0u\":[\"Aucune collection ne correspond à « \",[\"q\"],\" ».\"],\"ZmD2o6\":[\"Créer et ajouter\"],\"_3O5R_\":[\"Échec de la demande\"],\"_DwR-n\":[\"Création…\"],\"_R_sGB\":[\"Mot de passe modifié avec succès.\"],\"_aept4\":[\"Publier la réponse\"],\"_nT6AE\":[\"Nouveau mot de passe\"],\"_t4W-i\":[\"De personnes\"],\"aAIQg2\":[\"Apparence\"],\"aDvLhk\":[\"Ajouter un commentaire…\"],\"b3Thhd\":[\"Envoi échoué\"],\"b8XMJ8\":[[\"visibleCount\",\"plural\",{\"one\":[\"#\",\" commentaire\"],\"other\":[\"#\",\" commentaires\"]}]],\"bQhwn-\":[\"Chargement de la collection…\"],\"cILfnJ\":[\"Supprimer le fichier\"],\"cYP9Sb\":[\"+ Collection\"],\"cbeBbZ\":[\"Au moins \",[\"0\"],\" caractères\"],\"cnGeoo\":[\"Supprimer\"],\"d8DZWS\":[\"Ouvrir la recherche\"],\"dAs22m\":[\"Remplacer le fichier\"],\"dEgA5A\":[\"Annuler\"],\"dMizp8\":[\"Nouvelle collection\"],\"dqwCfR\":[\"Impossible de charger un aperçu pour ce lien — vérifiez-le, ou publiez-le tel quel et actualisez l'aperçu plus tard.\"],\"eFSqvc\":[\"Impossible de publier la réponse\"],\"eOfXq3\":[\"Un titre est requis.\"],\"ePK91l\":[\"Modifier\"],\"eaUTwS\":[\"Envoyer le lien de réinitialisation\"],\"ecUA8p\":[\"Aujourd'hui\"],\"ef9nPf\":[\"Chargement de la reco…\"],\"eloqXQ\":[\"Vous pouvez la publier quand même.\"],\"en9o7K\":[\"Impossible de publier le commentaire\"],\"etFQQS\":[\"Pourquoi on en voudrait ?\"],\"fC6mXb\":[\"Voter\"],\"fI-mNw\":[\"Collections\"],\"f_akpP\":[\"Max 50 Mo\"],\"fgLNSM\":[\"S'inscrire\"],\"gANddk\":[\"Envoi…\"],\"gGx5tM\":[\"Modification\"],\"gIQQwD\":[\"Chargement échoué\"],\"gL9KKi\":[\"Qui peut la voir\"],\"gLfZlz\":[\"Ajouter à la collection\"],\"gjJ-sb\":[\"Impossible de se connecter au serveur de mises à jour en direct. Les votes et les notifications pourraient ne pas se synchroniser avant la reconnexion.\"],\"goWEhR\":[\"Piste précédente\"],\"hBuUKa\":[\"Changer le mot de passe…\"],\"hD7w09\":[\"Vous avez tout lu, tout vu, tout bu.\"],\"hJSliC\":[\"<0>\",[\"0\"],\" a publié <1>\",[\"1\"],\"\"],\"hT8hgO\":[\"Rétablir le titre suggéré\"],\"hYgDIe\":[\"Créer\"],\"he3ygx\":[\"Copier\"],\"hpCc_Z\":[\"Fermer quand même\"],\"i7K_Te\":[\"Qui suis-je ?\"],\"iDNBZe\":[\"Notifications\"],\"iWpEwy\":[\"Accueil\"],\"ipYn7W\":[\"Si cette adresse est enregistrée, vous recevrez un lien de réinitialisation sous peu.\"],\"isRobC\":[\"Nouveau\"],\"jbernk\":[\"Chargement du profil…\"],\"joEmfT\":[\"Serveur inaccessible\"],\"jrZTZl\":[\"Pas encore de recos. Soyez le premier !\"],\"k112DD\":[\"Charger les messages plus anciens\"],\"k36iJ-\":[\"Échec de l’enregistrement de la catégorie\"],\"kLttbL\":[\"Inscription échouée\"],\"lUDifl\":[\"Créées (\",[\"0\"],[\"1\"],\")\"],\"lUanmi\":[\"Vous serez notifié lorsque quelqu'un suit vos collections, vote pour vos recos ou publie du nouveau contenu.\"],\"lY5h1V\":[[\"0\",\"plural\",{\"one\":[\"#\",\" reco\"],\"other\":[\"#\",\" recos\"]}]],\"lcfvr_\":[\"Supprimer ce commentaire ?\"],\"lpIMne\":[\"Les mots de passe ne correspondent pas\"],\"mb_Wju\":[\"Déposez un fichier ici, ou collez-en un\"],\"mt6O6E\":[\"C'est un mirage.\"],\"nbm5sI\":[\"Aucune reco ne correspond à « \",[\"q\"],\" ».\"],\"nrjqON\":[\"Vérification de l'invitation…\"],\"nwtY4N\":[\"Une erreur est survenue\"],\"nx4kaN\":[\"Sauvegarde impossible\"],\"oTYvvN\":[[\"0\",\"plural\",{\"one\":[\"et \",\"#\",\" reco plus ancienne\"],\"other\":[\"et \",\"#\",\" recos plus anciennes\"]}]],\"ogtYkT\":[\"Mot de passe mis à jour\"],\"pCpd9p\":[\"<0>\",[\"0\"],\" vous a mentionné dans <1>\",[\"where\"],\"\"],\"pSheLH\":[\"Aucun invité pour le moment.\"],\"pvnfJD\":[\"Sombre\"],\"qIMfNQ\":[\"Supprimer la collection\"],\"qbDAcy\":[\"Recommander\"],\"qgx_78\":[\"Suivez des collections publiques pour voir leurs recos ici.\"],\"qsqt0w\":[\"Lien d'invitation\"],\"qvFa8r\":[\"public\"],\"qvz_Pp\":[\"Reco\"],\"rCbqPX\":[\"Ce lien d'invitation est manquant, expiré ou déjà utilisé.\"],\"rDMzDU\":[\"Écrivez un message…\"],\"rg9pXu\":[\"Recherche échouée\"],\"rtpJqV\":[\"Recos (\",[\"0\"],[\"1\"],\")\"],\"sEXJPi\":[\"Lien ou fichier\"],\"sGeXL3\":[\"Miniature\"],\"sQia9P\":[\"Se connecter\"],\"sTiqbm\":[\"invité par\"],\"sdP5Aa\":[\"[supprimé]\"],\"sgX7B-\":[\"Usage unique, valable 7 jours.\"],\"shHs8T\":[\"Saisissez une recherche.\"],\"smeBfS\":[\"Invitation invalide\"],\"tfDRzk\":[\"Enregistrer\"],\"tvmuQ0\":[\"Thème de couleur\"],\"u1lDX2\":[\"Récupération de l'aperçu…\"],\"uD0qXQ\":[\"Déposez un fichier ici\"],\"uMGUnV\":[\"Pas encore de collections.\"],\"ub1EEL\":[\"modifié \",[\"0\"]],\"uomLas\":[\"Ajouter une catégorie\"],\"vJBF1r\":[\"Publication…\"],\"vLhLLO\":[\"Notifications (\",[\"unreadNotificationCount\"],\" non lues)\"],\"vQMkHu\":[\"Retirer le vote\"],\"vuosjb\":[\"Menu utilisateur\"],\"wbXKOv\":[\"Fichier trop volumineux (max 50 Mo).\"],\"wckWOP\":[\"Administration\"],\"wixIgH\":[\"Vous avez déjà un compte ? <0>Se connecter\"],\"x6tjuK\":[\"Onglet par défaut\"],\"xEWkgZ\":[\"← Retour à toutes les recos\"],\"xPHtx0\":[\"Lancer la recherche\"],\"xVuNgt\":[\"+ Nouvelle collection\"],\"xc9O_u\":[\"Supprimer la reco\"],\"y6sq5j\":[\"Abonné\"],\"y7oaHj\":[\"Titre de la collection\"],\"yA_6BX\":[\"Tout voir →\"],\"yBBtRm\":[\"Suivez des utilisateurs pour voir leurs recos ici.\"],\"yQ2kGp\":[\"Charger plus\"],\"y_0uwd\":[\"Hier\"],\"yz7wBu\":[\"Fermer\"],\"yzF66j\":[\"Lien\"],\"z0ROB3\":[\"Retirer le j'aime\"],\"z1uNN0\":[\"Aucun emoji trouvé.\"],\"zVuxvN\":[\"Actualisation…\"],\"zwBp5t\":[\"Privé\"]}")}; \ No newline at end of file diff --git a/src/locales/fr.po b/src/locales/fr.po index 3891f625..b2186ac4 100644 --- a/src/locales/fr.po +++ b/src/locales/fr.po @@ -13,7 +13,7 @@ msgstr "" "Last-Translator: \n" "Language-Team: \n" -#: src/components/CommentThread.tsx:256 +#: src/components/CommentThread.tsx:265 msgid "[deleted]" msgstr "[supprimé]" @@ -33,14 +33,14 @@ msgstr "{0, plural, one {# reco} other {# recos}}" msgid "{0, plural, one {and # earlier dump} other {and # earlier dumps}}" msgstr "{0, plural, one {et # reco plus ancienne} other {et # recos plus anciennes}}" -#. placeholder {0}: names[0] -#. placeholder {1}: names[1] -#: src/components/ChatModal.tsx:531 +#. placeholder {0}: typingNames[0] +#. placeholder {1}: typingNames[1] +#: src/components/ChatModal.tsx:534 msgid "{0} and {1} are typing…" msgstr "{0} et {1} sont en train d'écrire…" -#. placeholder {0}: names[0] -#: src/components/ChatModal.tsx:530 +#. placeholder {0}: typingNames[0] +#: src/components/ChatModal.tsx:532 msgid "{0} is typing…" msgstr "{0} est en train d'écrire…" @@ -54,18 +54,18 @@ msgstr "{0}–{1} caractères : lettres, chiffres ou tirets bas" msgid "{label} ({count})" msgstr "{label} ({count})" -#: src/components/CommentThread.tsx:455 +#: src/components/CommentThread.tsx:470 msgid "{visibleCount, plural, one {# comment} other {# comments}}" msgstr "{visibleCount, plural, one {# commentaire} other {# commentaires}}" -#: src/components/DumpCreateModal.tsx:935 -#: src/pages/PlaylistDetail.tsx:570 -#: src/pages/UserPublicProfile.tsx:749 +#: src/components/DumpCreateModal.tsx:936 +#: src/pages/PlaylistDetail.tsx:572 +#: src/pages/UserPublicProfile.tsx:798 msgid "← Back" msgstr "← Retour" -#: src/pages/Dump.tsx:292 -#: src/pages/Dump.tsx:522 +#: src/pages/Dump.tsx:294 +#: src/pages/Dump.tsx:524 #: src/pages/DumpEdit.tsx:187 msgid "← Back to all dumps" msgstr "← Retour à toutes les recos" @@ -76,15 +76,15 @@ msgstr "← Retour à toutes les recos" msgid "← Back to profile" msgstr "← Retour au profil" -#: src/pages/UserPublicProfile.tsx:115 +#: src/pages/UserPublicProfile.tsx:134 msgid "+ Invite someone" msgstr "+ Inviter quelqu'un" -#: src/components/PlaylistMembershipPanel.tsx:80 +#: src/components/PlaylistMembershipPanel.tsx:81 msgid "+ New playlist" msgstr "+ Nouvelle collection" -#: src/pages/Dump.tsx:363 +#: src/pages/Dump.tsx:365 msgid "+ Playlist" msgstr "+ Collection" @@ -142,11 +142,11 @@ msgstr "un commentaire" msgid "a post" msgstr "une publication" -#: src/pages/UserPublicProfile.tsx:1131 +#: src/pages/UserPublicProfile.tsx:1179 msgid "Account" msgstr "Compte" -#: src/components/CommentThread.tsx:475 +#: src/components/CommentThread.tsx:490 msgid "Add a comment…" msgstr "Ajouter un commentaire…" @@ -155,21 +155,21 @@ msgstr "Ajouter un commentaire…" msgid "Add category" msgstr "Ajouter une catégorie" -#: src/pages/UserPublicProfile.tsx:827 +#: src/pages/UserPublicProfile.tsx:876 msgid "Add email…" msgstr "Ajouter un e-mail…" #: src/components/AddToPlaylistModal.tsx:64 -#: src/components/DumpCreateModal.tsx:659 +#: src/components/DumpCreateModal.tsx:660 msgid "Add to playlist" msgstr "Ajouter à la collection" -#: src/pages/UserPublicProfile.tsx:1549 +#: src/pages/UserPublicProfile.tsx:1604 msgid "Admin" msgstr "Administrateur" -#: src/components/CategorySwitcher.tsx:79 -#: src/components/CategorySwitcher.tsx:82 +#: src/components/CategorySwitcher.tsx:80 +#: src/components/CategorySwitcher.tsx:83 msgid "All" msgstr "Tout" @@ -183,7 +183,7 @@ msgstr "Déjà recommandé par {0} {1}" msgid "Already have an account? <0>Log in" msgstr "Vous avez déjà un compte ? <0>Se connecter" -#: src/pages/UserPublicProfile.tsx:1150 +#: src/pages/UserPublicProfile.tsx:1198 msgid "Appearance" msgstr "Apparence" @@ -194,7 +194,7 @@ msgstr "Apparence" msgid "At least {0} characters" msgstr "Au moins {0} caractères" -#: src/pages/UserPublicProfile.tsx:1198 +#: src/pages/UserPublicProfile.tsx:1253 msgid "Auto" msgstr "Auto" @@ -210,25 +210,25 @@ msgstr "Impossible de se connecter au serveur de mises à jour en direct. Les vo #: src/components/CategoryManager.tsx:210 #: src/components/CategoryManager.tsx:211 -#: src/components/ChatModal.tsx:229 -#: src/components/CommentThread.tsx:124 +#: src/components/ChatModal.tsx:231 +#: src/components/CommentThread.tsx:127 #: src/components/ConfirmModal.tsx:32 -#: src/components/DumpCreateModal.tsx:945 +#: src/components/DumpCreateModal.tsx:946 #: src/components/form/FormActions.tsx:32 -#: src/pages/Dump.tsx:404 -#: src/pages/DumpEdit.tsx:469 -#: src/pages/PlaylistDetail.tsx:920 -#: src/pages/UserPublicProfile.tsx:1674 -#: src/pages/UserPublicProfile.tsx:1744 +#: src/pages/Dump.tsx:406 +#: src/pages/DumpEdit.tsx:470 +#: src/pages/PlaylistDetail.tsx:923 +#: src/pages/UserPublicProfile.tsx:1733 +#: src/pages/UserPublicProfile.tsx:1806 msgid "Cancel" msgstr "Annuler" -#: src/pages/PlaylistDetail.tsx:745 +#: src/pages/PlaylistDetail.tsx:747 msgid "Cancel removal" msgstr "Annuler la suppression" -#: src/components/ChatModal.tsx:622 -#: src/components/ChatModal.tsx:623 +#: src/components/ChatModal.tsx:624 +#: src/components/ChatModal.tsx:625 msgid "Cancel reply" msgstr "Annuler la réponse" @@ -237,15 +237,15 @@ msgid "Cancel search" msgstr "Annuler la recherche" #: src/components/CategorySelect.tsx:22 -#: src/pages/UserPublicProfile.tsx:1281 +#: src/pages/UserPublicProfile.tsx:1336 msgid "Categories" msgstr "Catégories" -#: src/components/CategorySwitcher.tsx:102 +#: src/components/CategorySwitcher.tsx:103 msgid "Category" msgstr "Catégorie" -#: src/pages/UserPublicProfile.tsx:776 +#: src/pages/UserPublicProfile.tsx:825 msgid "Change avatar" msgstr "Changer l'avatar" @@ -254,14 +254,14 @@ msgstr "Changer l'avatar" msgid "Change password" msgstr "Changer le mot de passe" -#: src/pages/UserPublicProfile.tsx:1143 +#: src/pages/UserPublicProfile.tsx:1191 msgid "Change password…" msgstr "Changer le mot de passe…" #: src/components/ChatButton.tsx:17 #: src/components/ChatFab.tsx:49 #: src/components/ChatFab.tsx:50 -#: src/components/ChatModal.tsx:536 +#: src/components/ChatModal.tsx:538 msgid "Chat" msgstr "Tribune" @@ -279,7 +279,7 @@ msgstr "Vérification de l'invitation…" msgid "Close" msgstr "Fermer" -#: src/components/DumpCreateModal.tsx:690 +#: src/components/DumpCreateModal.tsx:691 msgid "Close anyway" msgstr "Fermer quand même" @@ -287,7 +287,7 @@ msgstr "Fermer quand même" msgid "Close player" msgstr "Fermer le lecteur" -#: src/components/DumpCreateModal.tsx:680 +#: src/components/DumpCreateModal.tsx:681 msgid "Close without posting? The attached file won't be kept — everything you typed will." msgstr "Fermer sans publier ? Le fichier joint sera perdu — ce que vous avez écrit sera conservé." @@ -295,7 +295,7 @@ msgstr "Fermer sans publier ? Le fichier joint sera perdu — ce que vous avez msgid "Collapse player" msgstr "Réduire le lecteur" -#: src/pages/UserPublicProfile.tsx:1190 +#: src/pages/UserPublicProfile.tsx:1245 msgid "Color scheme" msgstr "Thème de couleur" @@ -304,11 +304,11 @@ msgstr "Thème de couleur" msgid "Confirm new password" msgstr "Confirmer le nouveau mot de passe" -#: src/pages/UserPublicProfile.tsx:106 +#: src/pages/UserPublicProfile.tsx:159 msgid "Copied!" msgstr "Copié !" -#: src/pages/UserPublicProfile.tsx:106 +#: src/pages/UserPublicProfile.tsx:159 msgid "Copy" msgstr "Copier" @@ -320,19 +320,19 @@ msgstr "Impossible de changer le mot de passe" msgid "Could not load." msgstr "Impossible de charger." -#: src/pages/DumpEdit.tsx:370 +#: src/pages/DumpEdit.tsx:371 msgid "Could not save" msgstr "Sauvegarde impossible" -#: src/components/DumpCreateModal.tsx:802 +#: src/components/DumpCreateModal.tsx:803 msgid "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later." msgstr "Impossible de charger un aperçu pour ce lien — vérifiez-le, ou publiez-le tel quel et actualisez l'aperçu plus tard." -#: src/components/PlaylistCreateForm.tsx:87 +#: src/components/PlaylistCreateForm.tsx:91 msgid "Create" msgstr "Créer" -#: src/components/PlaylistCreateForm.tsx:87 +#: src/components/PlaylistCreateForm.tsx:91 msgid "Create & Add" msgstr "Créer et ajouter" @@ -342,7 +342,7 @@ msgstr "Créer et ajouter" msgid "Created ({0}{1})" msgstr "Créées ({0}{1})" -#: src/components/PlaylistCreateForm.tsx:86 +#: src/components/PlaylistCreateForm.tsx:90 msgid "Creating…" msgstr "Création…" @@ -350,23 +350,23 @@ msgstr "Création…" msgid "Current password" msgstr "Mot de passe actuel" -#: src/pages/UserPublicProfile.tsx:1212 +#: src/pages/UserPublicProfile.tsx:1267 msgid "Dark" msgstr "Sombre" -#: src/pages/UserPublicProfile.tsx:1225 +#: src/pages/UserPublicProfile.tsx:1280 msgid "Default tab" msgstr "Onglet par défaut" #: src/components/CategoryManager.tsx:221 #: src/components/CategoryManager.tsx:222 -#: src/components/ChatModal.tsx:183 -#: src/components/ChatModal.tsx:184 -#: src/components/ChatModal.tsx:239 -#: src/components/CommentThread.tsx:376 -#: src/components/CommentThread.tsx:382 +#: src/components/ChatModal.tsx:185 +#: src/components/ChatModal.tsx:186 +#: src/components/ChatModal.tsx:241 +#: src/components/CommentThread.tsx:390 +#: src/components/CommentThread.tsx:396 #: src/components/ConfirmModal.tsx:16 -#: src/pages/PlaylistDetail.tsx:916 +#: src/pages/PlaylistDetail.tsx:919 msgid "Delete" msgstr "Supprimer" @@ -380,17 +380,17 @@ msgid "Delete category \"{0}\"? This cannot be undone." msgstr "Supprimer la catégorie \"{0}\" ? Cette action est irréversible." #: src/pages/DumpEdit.tsx:264 -#: src/pages/DumpEdit.tsx:465 +#: src/pages/DumpEdit.tsx:466 msgid "Delete dump" msgstr "Supprimer la reco" #: src/components/PlaylistCard.tsx:109 -#: src/pages/PlaylistDetail.tsx:758 +#: src/pages/PlaylistDetail.tsx:760 #: src/pages/UserPlaylists.tsx:468 msgid "Delete playlist" msgstr "Supprimer la collection" -#: src/components/CommentThread.tsx:381 +#: src/components/CommentThread.tsx:395 msgid "Delete this comment?" msgstr "Supprimer ce commentaire ?" @@ -398,25 +398,25 @@ msgstr "Supprimer ce commentaire ?" msgid "Delete this dump? This cannot be undone." msgstr "Supprimer cette reco ? Cette action est irréversible." -#: src/components/ChatModal.tsx:238 +#: src/components/ChatModal.tsx:240 msgid "Delete this message?" msgstr "Supprimer ce message ?" -#: src/pages/PlaylistDetail.tsx:757 +#: src/pages/PlaylistDetail.tsx:759 #: src/pages/UserPlaylists.tsx:467 msgid "Delete this playlist? This cannot be undone." msgstr "Supprimer cette collection ? Cette action est irréversible." -#: src/components/ChatModal.tsx:129 +#: src/components/ChatModal.tsx:131 msgid "deleted message" msgstr "message supprimé" -#: src/components/PlaylistCreateForm.tsx:78 -#: src/pages/PlaylistDetail.tsx:877 +#: src/components/PlaylistCreateForm.tsx:82 +#: src/pages/PlaylistDetail.tsx:880 msgid "Description (optional)" msgstr "Description (facultatif)" -#: src/components/DumpCreateModal.tsx:741 +#: src/components/DumpCreateModal.tsx:742 msgid "Done" msgstr "Terminé" @@ -424,11 +424,11 @@ msgstr "Terminé" msgid "Drop a file here" msgstr "Déposez un fichier ici" -#: src/components/DumpCreateModal.tsx:847 +#: src/components/DumpCreateModal.tsx:848 msgid "Drop a file here, or paste one" msgstr "Déposez un fichier ici, ou collez-en un" -#: src/pages/DumpEdit.tsx:437 +#: src/pages/DumpEdit.tsx:438 msgid "Drop a replacement here" msgstr "Déposez un fichier de remplacement ici" @@ -436,23 +436,23 @@ msgstr "Déposez un fichier de remplacement ici" msgid "Dump" msgstr "Reco" -#: src/components/DumpCreateModal.tsx:958 +#: src/components/DumpCreateModal.tsx:959 msgid "Dump it" msgstr "Recommander" -#: src/components/DumpCreateModal.tsx:718 +#: src/components/DumpCreateModal.tsx:719 msgid "Dumped!" msgstr "Recommandé !" #: src/pages/Search.tsx:174 #: src/pages/UserDumps.tsx:80 -#: src/pages/UserPublicProfile.tsx:900 +#: src/pages/UserPublicProfile.tsx:948 msgid "Dumps" msgstr "Recos" #. placeholder {0}: dumps.items.length #. placeholder {1}: dumps.hasMore ? "+" : "" -#: src/pages/UserPublicProfile.tsx:920 +#: src/pages/UserPublicProfile.tsx:968 msgid "Dumps ({0}{1})" msgstr "Recos ({0}{1})" @@ -460,11 +460,11 @@ msgstr "Recos ({0}{1})" msgid "Earlier" msgstr "Plus tôt" -#: src/components/ChatModal.tsx:172 -#: src/components/ChatModal.tsx:173 -#: src/components/CommentThread.tsx:367 -#: src/pages/Dump.tsx:518 -#: src/pages/PlaylistDetail.tsx:625 +#: src/components/ChatModal.tsx:174 +#: src/components/ChatModal.tsx:175 +#: src/components/CommentThread.tsx:381 +#: src/pages/Dump.tsx:520 +#: src/pages/PlaylistDetail.tsx:627 msgid "Edit" msgstr "Modifier" @@ -480,20 +480,20 @@ msgstr "Modifier le titre" #. placeholder {0}: relativeTime(comment.updatedAt) #. placeholder {0}: relativeTime(dump.updatedAt) #. placeholder {0}: relativeTime(message.updatedAt) -#: src/components/ChatModal.tsx:152 -#: src/components/CommentThread.tsx:317 -#: src/pages/Dump.tsx:457 -#: src/pages/PlaylistDetail.tsx:664 +#: src/components/ChatModal.tsx:154 +#: src/components/CommentThread.tsx:330 +#: src/pages/Dump.tsx:459 +#: src/pages/PlaylistDetail.tsx:666 msgid "edited {0}" msgstr "modifié {0}" #. placeholder {0}: comment.updatedAt.toLocaleString() #. placeholder {0}: dump.updatedAt.toLocaleString() #. placeholder {0}: message.updatedAt.toLocaleString() -#: src/components/ChatModal.tsx:150 -#: src/components/CommentThread.tsx:315 -#: src/pages/Dump.tsx:455 -#: src/pages/PlaylistDetail.tsx:661 +#: src/components/ChatModal.tsx:152 +#: src/components/CommentThread.tsx:328 +#: src/pages/Dump.tsx:457 +#: src/pages/PlaylistDetail.tsx:663 msgid "Edited {0}" msgstr "Modifié le {0}" @@ -522,7 +522,7 @@ msgstr "Agrandir le lecteur" msgid "Failed to create category" msgstr "Échec de la création de la catégorie" -#: src/components/PlaylistCreateForm.tsx:84 +#: src/components/PlaylistCreateForm.tsx:88 msgid "Failed to create playlist" msgstr "Impossible de créer la collection" @@ -530,9 +530,9 @@ msgstr "Impossible de créer la collection" msgid "Failed to delete" msgstr "Suppression échouée" -#: src/pages/UserPublicProfile.tsx:87 -#: src/pages/UserPublicProfile.tsx:90 -#: src/pages/UserPublicProfile.tsx:118 +#: src/pages/UserPublicProfile.tsx:104 +#: src/pages/UserPublicProfile.tsx:107 +#: src/pages/UserPublicProfile.tsx:168 msgid "Failed to generate invite" msgstr "Impossible de générer une invitation" @@ -541,27 +541,27 @@ msgstr "Impossible de générer une invitation" #: src/pages/index/JournalFeed.tsx:33 #: src/pages/index/NewFeed.tsx:36 #: src/pages/Notifications.tsx:374 -#: src/pages/UserPublicProfile.tsx:1022 -#: src/pages/UserPublicProfile.tsx:1064 -#: src/pages/UserPublicProfile.tsx:1109 +#: src/pages/UserPublicProfile.tsx:1070 +#: src/pages/UserPublicProfile.tsx:1112 +#: src/pages/UserPublicProfile.tsx:1157 msgid "Failed to load" msgstr "Chargement échoué" -#: src/components/DumpCreateModal.tsx:750 +#: src/components/DumpCreateModal.tsx:751 msgid "Failed to post" msgstr "Publication échouée" -#: src/components/CommentThread.tsx:474 +#: src/components/CommentThread.tsx:489 msgid "Failed to post comment" msgstr "Impossible de publier le commentaire" -#: src/components/CommentThread.tsx:397 +#: src/components/CommentThread.tsx:411 msgid "Failed to post reply" msgstr "Impossible de publier la réponse" -#: src/pages/PlaylistDetail.tsx:908 -#: src/pages/UserPublicProfile.tsx:1677 -#: src/pages/UserPublicProfile.tsx:1746 +#: src/pages/PlaylistDetail.tsx:911 +#: src/pages/UserPublicProfile.tsx:1736 +#: src/pages/UserPublicProfile.tsx:1808 msgid "Failed to save" msgstr "Enregistrement échoué" @@ -569,27 +569,27 @@ msgstr "Enregistrement échoué" msgid "Failed to save category" msgstr "Échec de l’enregistrement de la catégorie" -#: src/components/CommentThread.tsx:330 +#: src/components/CommentThread.tsx:343 msgid "Failed to save edit" msgstr "Impossible d'enregistrer la modification" -#: src/pages/UserPublicProfile.tsx:836 +#: src/pages/UserPublicProfile.tsx:885 msgid "Failed to update avatar" msgstr "Impossible de mettre à jour l'avatar" -#: src/pages/UserPublicProfile.tsx:1615 +#: src/pages/UserPublicProfile.tsx:1674 msgid "Failed to update role" msgstr "Erreur lors de la mise à jour du rôle" -#: src/pages/UserPublicProfile.tsx:1220 +#: src/pages/UserPublicProfile.tsx:1275 msgid "Feeds" msgstr "Flux" -#: src/components/DumpCreateModal.tsx:789 +#: src/components/DumpCreateModal.tsx:790 msgid "Fetching preview…" msgstr "Récupération de l'aperçu…" -#: src/components/DumpCreateModal.tsx:571 +#: src/components/DumpCreateModal.tsx:572 msgid "File too large (max 50 MB)." msgstr "Fichier trop volumineux (max 50 Mo)." @@ -615,8 +615,8 @@ msgid "Follow some users to see their dumps here." msgstr "Suivez des utilisateurs pour voir leurs recos ici." #: src/components/FeedTabBar.tsx:34 -#: src/pages/UserPublicProfile.tsx:902 -#: src/pages/UserPublicProfile.tsx:1254 +#: src/pages/UserPublicProfile.tsx:950 +#: src/pages/UserPublicProfile.tsx:1309 msgid "Followed" msgstr "Suivi" @@ -626,17 +626,17 @@ msgstr "Suivi" msgid "Followed ({0}{1})" msgstr "Suivies ({0}{1})" -#: src/pages/UserPublicProfile.tsx:1053 +#: src/pages/UserPublicProfile.tsx:1101 msgid "Followed playlists" msgstr "Collections suivies" #: src/components/FollowButton.tsx:37 #: src/components/FollowButton.tsx:64 -#: src/pages/UserPublicProfile.tsx:1011 +#: src/pages/UserPublicProfile.tsx:1059 msgid "Following" msgstr "Abonné" -#: src/pages/UserLogin.tsx:89 +#: src/pages/UserLogin.tsx:91 msgid "Forgot password?" msgstr "Mot de passe oublié ?" @@ -657,15 +657,15 @@ msgid "Go to login" msgstr "Aller à la connexion" #: src/components/FeedTabBar.tsx:30 -#: src/pages/UserPublicProfile.tsx:1233 +#: src/pages/UserPublicProfile.tsx:1288 msgid "Hot" msgstr "Tendances" -#: src/pages/UserLogin.tsx:120 +#: src/pages/UserLogin.tsx:122 msgid "If that address is registered you'll receive a reset link shortly." msgstr "Si cette adresse est enregistrée, vous recevrez un lien de réinitialisation sous peu." -#: src/pages/Dump.tsx:552 +#: src/pages/Dump.tsx:554 msgid "In collections" msgstr "Dans les collections" @@ -677,25 +677,30 @@ msgstr "Invitation invalide" msgid "Invalid link" msgstr "Lien invalide" -#: src/pages/UserPublicProfile.tsx:798 +#: src/pages/UserPublicProfile.tsx:142 +#: src/pages/UserPublicProfile.tsx:149 +msgid "Invite link" +msgstr "Lien d'invitation" + +#: src/pages/UserPublicProfile.tsx:847 msgid "invited by" msgstr "invité par" -#: src/pages/UserPublicProfile.tsx:903 -#: src/pages/UserPublicProfile.tsx:1098 +#: src/pages/UserPublicProfile.tsx:951 +#: src/pages/UserPublicProfile.tsx:1146 msgid "Invitees" msgstr "Invités" #: src/components/FeedTabBar.tsx:32 -#: src/pages/UserPublicProfile.tsx:1247 +#: src/pages/UserPublicProfile.tsx:1302 msgid "Journal" msgstr "Journal" -#: src/components/DumpCreateModal.tsx:687 +#: src/components/DumpCreateModal.tsx:688 msgid "Keep editing" msgstr "Continuer l'édition" -#: src/pages/UserPublicProfile.tsx:1205 +#: src/pages/UserPublicProfile.tsx:1260 msgid "Light" msgstr "Clair" @@ -703,7 +708,7 @@ msgstr "Clair" msgid "Like" msgstr "Aimer" -#: src/components/DumpCreateModal.tsx:764 +#: src/components/DumpCreateModal.tsx:765 msgid "Link" msgstr "Lien" @@ -715,7 +720,7 @@ msgstr "Lien ou fichier" msgid "Live updates are temporarily disconnected. Trying to reconnect…" msgstr "Les mises à jour en direct sont temporairement interrompues. Tentative de reconnexion…" -#: src/components/AppHeader.tsx:132 +#: src/components/AppHeader.tsx:141 msgid "Live updates unavailable." msgstr "Mises à jour en direct indisponibles." @@ -724,11 +729,11 @@ msgstr "Mises à jour en direct indisponibles." msgid "Load more" msgstr "Charger plus" -#: src/components/ChatModal.tsx:549 +#: src/components/ChatModal.tsx:551 msgid "Load older messages" msgstr "Charger les messages plus anciens" -#: src/pages/Dump.tsx:268 +#: src/pages/Dump.tsx:270 #: src/pages/DumpEdit.tsx:163 msgid "Loading dump…" msgstr "Chargement de la reco…" @@ -745,18 +750,18 @@ msgstr "Chargement de la reco…" msgid "Loading more…" msgstr "Chargement…" -#: src/pages/PlaylistDetail.tsx:554 +#: src/pages/PlaylistDetail.tsx:556 msgid "Loading playlist…" msgstr "Chargement de la collection…" -#: src/pages/UserPublicProfile.tsx:732 +#: src/pages/UserPublicProfile.tsx:781 msgid "Loading profile…" msgstr "Chargement du profil…" #: src/components/CategoryManager.tsx:52 -#: src/components/ChatModal.tsx:548 +#: src/components/ChatModal.tsx:550 #: src/components/PlaylistMembershipPanel.tsx:28 -#: src/components/TextEditor.tsx:289 +#: src/components/TextEditor.tsx:311 #: src/components/UserListPopover.tsx:192 #: src/components/UserListPopover.tsx:230 #: src/pages/index/FollowedFeed.tsx:78 @@ -767,17 +772,17 @@ msgstr "Chargement du profil…" #: src/pages/Notifications.tsx:446 #: src/pages/UserDumps.tsx:54 #: src/pages/UserPlaylists.tsx:345 -#: src/pages/UserPublicProfile.tsx:1016 -#: src/pages/UserPublicProfile.tsx:1058 -#: src/pages/UserPublicProfile.tsx:1103 +#: src/pages/UserPublicProfile.tsx:1064 +#: src/pages/UserPublicProfile.tsx:1106 +#: src/pages/UserPublicProfile.tsx:1151 #: src/pages/UserUpvoted.tsx:125 msgid "Loading…" msgstr "Chargement…" #: src/components/AppHeader.tsx:113 -#: src/pages/UserLogin.tsx:34 -#: src/pages/UserLogin.tsx:59 -#: src/pages/UserLogin.tsx:78 +#: src/pages/UserLogin.tsx:35 +#: src/pages/UserLogin.tsx:61 +#: src/pages/UserLogin.tsx:80 msgid "Log in" msgstr "Se connecter" @@ -789,20 +794,20 @@ msgstr "Se connecter pour aimer" msgid "Log in to vote" msgstr "Se connecter pour voter" -#: src/pages/UserPublicProfile.tsx:753 -#: src/pages/UserPublicProfile.tsx:850 +#: src/pages/UserPublicProfile.tsx:802 +#: src/pages/UserPublicProfile.tsx:898 msgid "Log out" msgstr "Se déconnecter" -#: src/pages/UserLogin.tsx:77 +#: src/pages/UserLogin.tsx:79 msgid "Logging in…" msgstr "Connexion…" -#: src/pages/UserLogin.tsx:64 +#: src/pages/UserLogin.tsx:66 msgid "Login failed" msgstr "Connexion échouée" -#: src/pages/UserPublicProfile.tsx:908 +#: src/pages/UserPublicProfile.tsx:956 msgid "Manage" msgstr "Administration" @@ -810,7 +815,7 @@ msgstr "Administration" msgid "Max 50 MB" msgstr "Max 50 Mo" -#: src/pages/UserPublicProfile.tsx:1548 +#: src/pages/UserPublicProfile.tsx:1603 msgid "Moderator" msgstr "Modérateur" @@ -824,15 +829,15 @@ msgid "new" msgstr "nouveau" #: src/components/FeedTabBar.tsx:31 -#: src/pages/UserPublicProfile.tsx:1240 +#: src/pages/UserPublicProfile.tsx:1295 msgid "New" msgstr "Nouveau" -#: src/components/DumpCreateModal.tsx:659 +#: src/components/DumpCreateModal.tsx:660 #: src/components/DumpFab.tsx:65 #: src/components/DumpFab.tsx:66 #: src/pages/UserDumps.tsx:88 -#: src/pages/UserPublicProfile.tsx:1327 +#: src/pages/UserPublicProfile.tsx:1382 msgid "New dump" msgstr "Nouvelle reco" @@ -846,7 +851,7 @@ msgstr "Nouveau mot de passe" msgid "New playlist" msgstr "Nouvelle collection" -#: src/components/DumpCreateModal.tsx:957 +#: src/components/DumpCreateModal.tsx:958 msgid "Next →" msgstr "Suivant →" @@ -854,7 +859,7 @@ msgstr "Suivant →" msgid "Next track" msgstr "Piste suivante" -#: src/pages/PlaylistDetail.tsx:680 +#: src/pages/PlaylistDetail.tsx:682 msgid "No dumps in this playlist yet." msgstr "Aucune reco dans cette collection pour l'instant." @@ -868,20 +873,20 @@ msgstr "Aucune reco ne correspond à « {q} »." msgid "No dumps yet. Be the first!" msgstr "Pas encore de recos. Soyez le premier !" -#: src/components/TextEditor.tsx:292 +#: src/components/TextEditor.tsx:314 msgid "No emoji found." msgstr "Aucun emoji trouvé." #: src/pages/UserPlaylists.tsx:442 -#: src/pages/UserPublicProfile.tsx:1071 +#: src/pages/UserPublicProfile.tsx:1119 msgid "No followed playlists yet." msgstr "Pas encore de collections suivies." -#: src/pages/UserPublicProfile.tsx:1116 +#: src/pages/UserPublicProfile.tsx:1164 msgid "No invitees yet." msgstr "Aucun invité pour le moment." -#: src/components/ChatModal.tsx:556 +#: src/components/ChatModal.tsx:558 msgid "No messages yet. Say hello!" msgstr "Aucun message pour l'instant. Dites bonjour !" @@ -895,7 +900,7 @@ msgstr "Aucune collection ne correspond à « {q} »." #: src/components/PlaylistMembershipPanel.tsx:34 #: src/pages/UserPlaylists.tsx:400 -#: src/pages/UserPublicProfile.tsx:982 +#: src/pages/UserPublicProfile.tsx:1030 msgid "No playlists yet." msgstr "Pas encore de collections." @@ -903,14 +908,14 @@ msgstr "Pas encore de collections." msgid "No users match \"{q}\"." msgstr "Aucun utilisateur ne correspond à « {q} »." -#: src/pages/UserPublicProfile.tsx:1029 +#: src/pages/UserPublicProfile.tsx:1077 msgid "Not following anyone yet." msgstr "Aucun abonnement pour le moment." #: src/pages/Notifications.tsx:381 #: src/pages/UserDumps.tsx:99 -#: src/pages/UserPublicProfile.tsx:1338 -#: src/pages/UserPublicProfile.tsx:1460 +#: src/pages/UserPublicProfile.tsx:1393 +#: src/pages/UserPublicProfile.tsx:1515 #: src/pages/UserUpvoted.tsx:159 msgid "Nothing here yet." msgstr "Rien ici pour l'instant." @@ -925,7 +930,7 @@ msgstr "Notifications" msgid "Notifications ({unreadNotificationCount} unread)" msgstr "Notifications ({unreadNotificationCount} non lues)" -#: src/components/SearchBar.tsx:84 +#: src/components/SearchBar.tsx:96 msgid "Open search" msgstr "Ouvrir la recherche" @@ -937,8 +942,8 @@ msgstr "ou <0>parcourir les fichiers" msgid "Page not found" msgstr "Page introuvable" -#: src/pages/UserLogin.tsx:74 -#: src/pages/UserPublicProfile.tsx:1136 +#: src/pages/UserLogin.tsx:76 +#: src/pages/UserPublicProfile.tsx:1184 msgid "Password" msgstr "Mot de passe" @@ -960,15 +965,15 @@ msgstr "Mot de passe mis à jour" msgid "Passwords do not match" msgstr "Les mots de passe ne correspondent pas" -#: src/components/DumpCreateModal.tsx:782 +#: src/components/DumpCreateModal.tsx:783 msgid "Paste a link…" msgstr "Collez un lien…" -#: src/components/DumpCreateModal.tsx:699 +#: src/components/DumpCreateModal.tsx:700 msgid "Picked up where you left off." msgstr "Reprise de votre brouillon." -#: src/pages/PlaylistDetail.tsx:863 +#: src/pages/PlaylistDetail.tsx:866 msgid "Playlist title" msgstr "Titre de la collection" @@ -977,27 +982,27 @@ msgstr "Titre de la collection" #: src/components/UserMenu.tsx:62 #: src/pages/Search.tsx:177 #: src/pages/UserPlaylists.tsx:371 -#: src/pages/UserPublicProfile.tsx:901 +#: src/pages/UserPublicProfile.tsx:949 msgid "Playlists" msgstr "Collections" #. placeholder {0}: playlists.items.length #. placeholder {1}: playlists.hasMore ? "+" : "" -#: src/pages/UserPublicProfile.tsx:951 +#: src/pages/UserPublicProfile.tsx:999 msgid "Playlists ({0}{1})" msgstr "Collections ({0}{1})" -#: src/components/CommentThread.tsx:472 +#: src/components/CommentThread.tsx:487 msgid "Post comment" msgstr "Publier le commentaire" -#: src/components/CommentThread.tsx:395 +#: src/components/CommentThread.tsx:409 msgid "Post reply" msgstr "Publier la réponse" -#: src/components/CommentThread.tsx:396 -#: src/components/CommentThread.tsx:473 -#: src/components/DumpCreateModal.tsx:951 +#: src/components/CommentThread.tsx:410 +#: src/components/CommentThread.tsx:488 +#: src/components/DumpCreateModal.tsx:952 msgid "Posting…" msgstr "Publication…" @@ -1009,23 +1014,23 @@ msgstr "Piste précédente" #: src/components/JournalCard.tsx:123 #: src/components/PlaylistCard.tsx:73 #: src/components/PlaylistMembershipPanel.tsx:55 -#: src/pages/Dump.tsx:463 -#: src/pages/PlaylistDetail.tsx:644 +#: src/pages/Dump.tsx:465 +#: src/pages/PlaylistDetail.tsx:646 msgid "private" msgstr "privé" #: src/components/form/SegmentedField.tsx:81 -#: src/pages/PlaylistDetail.tsx:902 +#: src/pages/PlaylistDetail.tsx:905 msgid "Private" msgstr "Privé" #: src/components/PlaylistCard.tsx:72 -#: src/pages/PlaylistDetail.tsx:643 +#: src/pages/PlaylistDetail.tsx:645 msgid "public" msgstr "public" #: src/components/form/SegmentedField.tsx:80 -#: src/pages/PlaylistDetail.tsx:895 +#: src/pages/PlaylistDetail.tsx:898 msgid "Public" msgstr "Public" @@ -1055,7 +1060,7 @@ msgstr "Inscription…" msgid "Registration failed" msgstr "Inscription échouée" -#: src/pages/Dump.tsx:530 +#: src/pages/Dump.tsx:532 msgid "Related" msgstr "Connexe" @@ -1063,7 +1068,7 @@ msgstr "Connexe" msgid "Remove file" msgstr "Supprimer le fichier" -#: src/pages/PlaylistDetail.tsx:735 +#: src/pages/PlaylistDetail.tsx:737 msgid "Remove from playlist" msgstr "Retirer de la collection" @@ -1075,21 +1080,21 @@ msgstr "Retirer le j'aime" msgid "Remove vote" msgstr "Retirer le vote" -#: src/pages/DumpEdit.tsx:429 +#: src/pages/DumpEdit.tsx:430 msgid "Replace file" msgstr "Remplacer le fichier" -#: src/components/ChatModal.tsx:162 -#: src/components/ChatModal.tsx:163 -#: src/components/CommentThread.tsx:355 +#: src/components/ChatModal.tsx:164 +#: src/components/ChatModal.tsx:165 +#: src/components/CommentThread.tsx:369 msgid "Reply" msgstr "Répondre" -#: src/components/ChatModal.tsx:612 +#: src/components/ChatModal.tsx:614 msgid "Replying to" msgstr "En réponse à" -#: src/pages/UserLogin.tsx:132 +#: src/pages/UserLogin.tsx:134 msgid "Request failed" msgstr "Échec de la demande" @@ -1101,8 +1106,8 @@ msgstr "Échec de la réinitialisation" msgid "Reset password" msgstr "Réinitialiser le mot de passe" -#: src/pages/DumpEdit.tsx:390 -#: src/pages/DumpEdit.tsx:408 +#: src/pages/DumpEdit.tsx:391 +#: src/pages/DumpEdit.tsx:409 msgid "Reset to default" msgstr "Réinitialiser par défaut" @@ -1111,42 +1116,42 @@ msgstr "Réinitialiser par défaut" msgid "Reset to the suggested title" msgstr "Rétablir le titre suggéré" -#: src/pages/Dump.tsx:285 +#: src/pages/Dump.tsx:287 #: src/pages/DumpEdit.tsx:180 msgid "Retry" msgstr "Réessayer" -#: src/pages/UserPublicProfile.tsx:1599 +#: src/pages/UserPublicProfile.tsx:1658 msgid "Role" msgstr "Rôle" -#: src/components/ChatModal.tsx:222 -#: src/components/CommentThread.tsx:328 -#: src/pages/Dump.tsx:396 -#: src/pages/DumpEdit.tsx:472 -#: src/pages/PlaylistDetail.tsx:927 -#: src/pages/UserPublicProfile.tsx:1666 -#: src/pages/UserPublicProfile.tsx:1736 +#: src/components/ChatModal.tsx:224 +#: src/components/CommentThread.tsx:341 +#: src/pages/Dump.tsx:398 +#: src/pages/DumpEdit.tsx:473 +#: src/pages/PlaylistDetail.tsx:930 +#: src/pages/UserPublicProfile.tsx:1725 +#: src/pages/UserPublicProfile.tsx:1798 msgid "Save" msgstr "Enregistrer" #: src/components/ChangePasswordModal.tsx:100 -#: src/components/CommentThread.tsx:329 -#: src/pages/Dump.tsx:395 -#: src/pages/PlaylistDetail.tsx:923 +#: src/components/CommentThread.tsx:342 +#: src/pages/Dump.tsx:397 +#: src/pages/PlaylistDetail.tsx:926 #: src/pages/ResetPassword.tsx:126 -#: src/pages/UserPublicProfile.tsx:1663 -#: src/pages/UserPublicProfile.tsx:1733 +#: src/pages/UserPublicProfile.tsx:1722 +#: src/pages/UserPublicProfile.tsx:1795 msgid "Saving…" msgstr "Enregistrement…" #: src/components/AppHeader.tsx:66 -#: src/components/SearchBar.tsx:78 +#: src/components/SearchBar.tsx:90 #: src/pages/Search.tsx:50 msgid "Search" msgstr "Rechercher" -#: src/components/SearchBar.tsx:74 +#: src/components/SearchBar.tsx:86 msgid "Search dumps, users, playlists…" msgstr "Rechercher des recos, utilisateurs, collections…" @@ -1158,15 +1163,15 @@ msgstr "Recherche échouée" msgid "Searching…" msgstr "Recherche…" -#: src/components/ChatModal.tsx:658 +#: src/components/ChatModal.tsx:660 msgid "Send" msgstr "Envoyer" -#: src/pages/UserLogin.tsx:141 +#: src/pages/UserLogin.tsx:143 msgid "Send reset link" msgstr "Envoyer le lien de réinitialisation" -#: src/pages/UserLogin.tsx:140 +#: src/pages/UserLogin.tsx:142 msgid "Sending…" msgstr "Envoi…" @@ -1179,14 +1184,18 @@ msgstr "Serveur inaccessible" msgid "Set new password" msgstr "Définir un nouveau mot de passe" -#: src/pages/UserPublicProfile.tsx:905 +#: src/pages/UserPublicProfile.tsx:953 msgid "Settings" msgstr "Paramètres" -#: src/components/ChatModal.tsx:532 +#: src/components/ChatModal.tsx:535 msgid "Several people are typing…" msgstr "Plusieurs personnes écrivent…" +#: src/pages/UserPublicProfile.tsx:162 +msgid "Single use, valid for 7 days." +msgstr "Usage unique, valable 7 jours." + #: src/components/CategoryManager.tsx:191 msgid "slug" msgstr "identifiant" @@ -1196,15 +1205,15 @@ msgstr "identifiant" msgid "Something went wrong" msgstr "Une erreur est survenue" -#: src/components/DumpCreateModal.tsx:706 +#: src/components/DumpCreateModal.tsx:707 msgid "Start fresh" msgstr "Repartir de zéro" -#: src/pages/UserPublicProfile.tsx:1155 +#: src/pages/UserPublicProfile.tsx:1203 msgid "Style" msgstr "Style" -#: src/components/SearchBar.tsx:84 +#: src/components/SearchBar.tsx:96 msgid "Submit search" msgstr "Lancer la recherche" @@ -1216,7 +1225,7 @@ msgstr "la tribune" msgid "This invite link is missing, expired, or already used." msgstr "Ce lien d'invitation est manquant, expiré ou déjà utilisé." -#: src/pages/UserLogin.tsx:96 +#: src/pages/UserLogin.tsx:98 msgid "This is a mirage." msgstr "C'est un mirage." @@ -1228,30 +1237,30 @@ msgstr "Rien à voir, circulez." msgid "This reset link is missing or malformed." msgstr "Ce lien de réinitialisation est absent ou malformé." -#: src/pages/DumpEdit.tsx:374 +#: src/pages/DumpEdit.tsx:375 msgid "Thumbnail" msgstr "Miniature" #: src/components/DumpCreateModal.tsx:174 -#: src/components/PlaylistCreateForm.tsx:70 -#: src/pages/DumpEdit.tsx:398 +#: src/components/PlaylistCreateForm.tsx:74 +#: src/pages/DumpEdit.tsx:399 msgid "Title" msgstr "Titre" -#: src/components/DumpCreateModal.tsx:569 +#: src/components/DumpCreateModal.tsx:570 msgid "Title is required." msgstr "Un titre est requis." -#: src/components/ChatModal.tsx:262 +#: src/components/ChatModal.tsx:264 #: src/pages/Notifications.tsx:397 msgid "Today" msgstr "Aujourd'hui" -#: src/components/ChatModal.tsx:635 +#: src/components/ChatModal.tsx:637 msgid "Type a message…" msgstr "Écrivez un message…" -#: src/pages/PlaylistDetail.tsx:747 +#: src/pages/PlaylistDetail.tsx:749 msgid "Undo" msgstr "Annuler" @@ -1263,16 +1272,16 @@ msgstr "Ne plus suivre {targetUsername}" msgid "Unfollow playlist" msgstr "Ne plus suivre la collection" -#: src/pages/UserPublicProfile.tsx:697 +#: src/pages/UserPublicProfile.tsx:748 msgid "Upload failed" msgstr "Envoi échoué" #. placeholder {0}: Math.round((uploadProgress ?? 0) * 100) -#: src/components/DumpCreateModal.tsx:642 +#: src/components/DumpCreateModal.tsx:643 msgid "Uploading {0}%" msgstr "Envoi {0} %" -#: src/components/DumpCreateModal.tsx:954 +#: src/components/DumpCreateModal.tsx:955 msgid "Uploading…" msgstr "Envoi…" @@ -1286,15 +1295,15 @@ msgstr "Voté" #. placeholder {0}: votes.items.length #. placeholder {1}: votes.hasMore ? "+" : "" -#: src/pages/UserPublicProfile.tsx:931 +#: src/pages/UserPublicProfile.tsx:979 msgid "Upvoted ({0}{1})" msgstr "Votés ({0}{1})" -#: src/pages/DumpEdit.tsx:421 +#: src/pages/DumpEdit.tsx:422 msgid "URL" msgstr "URL" -#: src/components/DumpCreateModal.tsx:553 +#: src/components/DumpCreateModal.tsx:554 msgid "URL is required." msgstr "L'URL est obligatoire." @@ -1302,11 +1311,11 @@ msgstr "L'URL est obligatoire." msgid "URL slug" msgstr "Identifiant d’URL" -#: src/pages/UserPublicProfile.tsx:1547 +#: src/pages/UserPublicProfile.tsx:1602 msgid "User" msgstr "Utilisateur" -#: src/pages/UserPublicProfile.tsx:1266 +#: src/pages/UserPublicProfile.tsx:1321 msgid "User management" msgstr "Gestion utilisateur" @@ -1314,7 +1323,7 @@ msgstr "Gestion utilisateur" msgid "User menu" msgstr "Menu utilisateur" -#: src/pages/UserLogin.tsx:67 +#: src/pages/UserLogin.tsx:69 #: src/pages/UserRegister.tsx:116 msgid "Username" msgstr "Nom d'utilisateur" @@ -1323,29 +1332,29 @@ msgstr "Nom d'utilisateur" msgid "Users" msgstr "Utilisateurs" -#: src/pages/UserPublicProfile.tsx:1001 -#: src/pages/UserPublicProfile.tsx:1044 -#: src/pages/UserPublicProfile.tsx:1086 -#: src/pages/UserPublicProfile.tsx:1359 -#: src/pages/UserPublicProfile.tsx:1490 +#: src/pages/UserPublicProfile.tsx:1049 +#: src/pages/UserPublicProfile.tsx:1092 +#: src/pages/UserPublicProfile.tsx:1134 +#: src/pages/UserPublicProfile.tsx:1414 +#: src/pages/UserPublicProfile.tsx:1545 msgid "View all →" msgstr "Tout voir →" -#: src/components/DumpCreateModal.tsx:720 +#: src/components/DumpCreateModal.tsx:721 msgid "View dump →" msgstr "Voir la reco →" -#: src/components/DumpCreateModal.tsx:904 -#: src/pages/DumpEdit.tsx:446 +#: src/components/DumpCreateModal.tsx:905 +#: src/pages/DumpEdit.tsx:447 msgid "What makes it worth it?" msgstr "Pourquoi on en voudrait ?" -#: src/pages/UserPublicProfile.tsx:885 -#: src/pages/UserPublicProfile.tsx:1725 +#: src/pages/UserPublicProfile.tsx:933 +#: src/pages/UserPublicProfile.tsx:1787 msgid "Who am I?" msgstr "Qui suis-je ?" -#: src/components/DumpCreateModal.tsx:920 +#: src/components/DumpCreateModal.tsx:921 msgid "Who can see it" msgstr "Qui peut la voir" @@ -1353,16 +1362,16 @@ msgstr "Qui peut la voir" msgid "Why & where" msgstr "Pourquoi & où" -#: src/components/DumpCreateModal.tsx:903 -#: src/pages/DumpEdit.tsx:445 +#: src/components/DumpCreateModal.tsx:904 +#: src/pages/DumpEdit.tsx:446 msgid "Why?" msgstr "Pourquoi ?" -#: src/components/CommentThread.tsx:398 +#: src/components/CommentThread.tsx:413 msgid "Write a reply…" msgstr "Écrire une réponse…" -#: src/components/ChatModal.tsx:265 +#: src/components/ChatModal.tsx:267 #: src/pages/Notifications.tsx:399 msgid "Yesterday" msgstr "Hier" @@ -1387,7 +1396,7 @@ msgstr "Vous serez notifié lorsque quelqu'un suit vos collections, vote pour vo msgid "You've reached the end." msgstr "Vous avez tout lu, tout vu, tout bu." -#: src/pages/UserLogin.tsx:136 +#: src/pages/UserLogin.tsx:138 msgid "Your email address" msgstr "Votre adresse e-mail" diff --git a/src/pages/UserPublicProfile.tsx b/src/pages/UserPublicProfile.tsx index f44d7b00..b7f3f5b3 100644 --- a/src/pages/UserPublicProfile.tsx +++ b/src/pages/UserPublicProfile.tsx @@ -70,53 +70,103 @@ import { useApiForm, } from "../components/form/index.ts"; -function InviteButton() { +/** + * Own-profile action row: "Invite someone" then `children` (log out). The + * invite button toggles a panel below the row holding a fresh single-use link; + * the panel eases in like the inline editors and takes the row's width. + */ +function ProfileOwnActions({ children }: { children: React.ReactNode }) { const { authFetch } = useAuth(); const [inviteUrl, setInviteUrl] = useState(null); + const [pending, setPending] = useState(false); const [copied, setCopied] = useState(false); const [error, setError] = useState(null); + const ref = useHeightTransition( + (inviteUrl ?? "") + (error ?? ""), + ); - async function generate() { + async function toggle() { + setError(null); + setCopied(false); + if (inviteUrl) { + setInviteUrl(null); + return; + } + setPending(true); try { const res = await authFetch(`${API_URL}/api/invites`, { method: "POST" }); const body = await res.json(); if (body.success) { - const url = - `${globalThis.location.origin}/register?token=${body.data.token}`; - setInviteUrl(url); + setInviteUrl( + `${globalThis.location.origin}/register?token=${body.data.token}`, + ); } else { setError(t`Failed to generate invite`); } } catch { setError(t`Failed to generate invite`); + } finally { + setPending(false); } } async function copy() { if (!inviteUrl) return; - await navigator.clipboard.writeText(inviteUrl); - setCopied(true); - setTimeout(() => setCopied(false), 2000); - } - - if (inviteUrl) { - return ( -
- {inviteUrl} - -
- ); + try { + await navigator.clipboard.writeText(inviteUrl); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } catch { + // Clipboard denied (e.g. insecure context): the field is selectable. + } } return ( -
- +
+
+ + {children} +
+ {inviteUrl && ( +
+ e.currentTarget.select()} + /> + + + Single use, valid for 7 days. + +
+ )} {error && ( - +
+ +
)}
); @@ -233,9 +283,7 @@ export function UserPublicProfile() { // The "manage" tab is an admin/moderation area. On someone else's profile it // holds per-user tools (role management); on your own it holds global tools // (category management, with more to come). - const showManageTab = isOwnProfile - ? canManageCategories - : canManageUsers; + const showManageTab = isOwnProfile ? canManageCategories : canManageUsers; const availableTabs: ProfileTab[] = PROFILE_TABS.filter((t) => { if (t === "settings") return isOwnProfile; if (t === "manage") return showManageTab; @@ -715,9 +763,7 @@ export function UserPublicProfile() { const handleDescSaved = (description: string | undefined) => { setState((s) => - s.status === "loaded" - ? { ...s, user: { ...s.user, description } } - : s + s.status === "loaded" ? { ...s, user: { ...s.user, description } } : s ); setDescEditing(false); }; @@ -847,12 +893,11 @@ export function UserPublicProfile() { /> )} {isOwnProfile && ( -
- + -
+ )}
@@ -1564,7 +1609,11 @@ const ROLE_OPTIONS: { value: Role; label: React.ReactNode }[] = [ function RoleChip({ role }: { role: Role }) { if (role === "user") return null; const label = ROLE_OPTIONS.find((o) => o.value === role)?.label; - return {label}; + return ( + + {label} + + ); } interface RoleSwitcherProps {