v3: fixed search in prod, lots of UI fixes across the app
All checks were successful
Build and Publish Docker Image / build-and-push (push) Successful in 46s

This commit is contained in:
khannurien
2026-04-09 21:54:07 +00:00
parent ed7695663e
commit 9c889a9531
18 changed files with 459 additions and 334 deletions

View File

@@ -6,5 +6,6 @@ await extract(config, {
verbose: false,
watch: false,
files: [],
clean: true,
workersOptions: { poolSize: 0 },
});

View File

@@ -99,21 +99,25 @@
}
.dump-header-block {
display: grid;
grid-template-columns: auto 1fr;
column-gap: 1rem;
row-gap: 0.3rem;
display: flex;
align-items: center;
gap: 1rem;
}
.dump-title,
.dump-op {
grid-column: 2;
.dump-header-left {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
flex-shrink: 0;
}
.dump-header-block .vote-btn,
.dump-header-block .btn-add-playlist {
justify-self: center;
.dump-header-right {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 0.3rem;
}
.dump-title {
@@ -1019,6 +1023,18 @@ body.has-player .fab-new {
display: block;
}
@media (max-width: 512px) {
.rich-content-card {
flex-direction: column;
}
.rich-content-thumbnail {
width: 100%;
min-width: 0;
max-height: 180px;
}
}
.rich-content-body {
display: flex;
flex-direction: column;
@@ -1033,7 +1049,7 @@ body.has-player .fab-new {
.rich-content-badge {
display: inline-block;
background: var(--color-youtube);
color: var(--color-on-accent);
color: var(--color-text);
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.04em;
@@ -1272,9 +1288,9 @@ body.has-player .fab-new {
gap: 1.5rem;
}
.profile-tabs {
.profile-tabs-scroller {
margin-top: 0.5rem;
padding-bottom: 0.75rem;
padding-bottom: 0.5rem;
border-bottom: 2px solid var(--color-border);
}
@@ -1592,6 +1608,7 @@ body.has-player .fab-new {
display: flex;
align-items: center;
gap: 0.75rem;
flex-wrap: wrap;
}
.profile-subpage-title {
@@ -1694,8 +1711,9 @@ body.has-player .fab-new {
}
.app-header-status {
margin: 1rem auto 0 auto;
margin: 1rem auto 0;
max-width: 860px;
width: calc(100% - 2rem);
padding: 0.75rem 1rem;
border: none;
border-radius: 10px;
@@ -2240,7 +2258,7 @@ body.has-player .fab-new {
.btn-danger {
background: var(--color-danger-bg);
color: var(--color-on-accent);
color: var(--color-text);
border: none;
}
@@ -2317,7 +2335,11 @@ body.has-player .fab-new {
align-items: center;
margin-top: 0.5rem;
gap: 0.75rem;
padding: 0.6rem 1.25rem 0;
padding: 0.6rem 1.25rem 0.4rem;
max-width: 860px;
width: 100%;
box-sizing: border-box;
align-self: center;
}
@media (min-width: 860px) {
@@ -2326,11 +2348,50 @@ body.has-player .fab-new {
}
}
/* ── Feed sort buttons ── */
/* ── Feed sort scroller + buttons ── */
/* Wrapper: constrains width, clips scroll overflow, and carries the gradient hint */
.feed-sort-scroller {
position: relative;
min-width: 0;
overflow: hidden;
}
/* Right-edge gradient: absolutely positioned over the scroll container,
always at the viewport-right edge regardless of scroll position */
.feed-sort-scroller::after {
content: '';
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 2rem;
background: linear-gradient(to right, transparent, var(--color-bg));
pointer-events: none;
}
/* In the app header the tabs never overflow — suppress the gradient there */
.app-header .feed-sort-scroller::after {
display: none;
}
/* In the index below-header the scroller should fill the available row width */
.index-below-header .feed-sort-scroller {
flex: 1;
}
.feed-sort {
display: flex;
align-items: center;
gap: 0.4rem;
overflow-x: auto;
scrollbar-width: none;
padding-bottom: 0.3rem;
min-width: 0;
}
.feed-sort::-webkit-scrollbar {
display: none;
}
.feed-sort-btn {
@@ -2345,6 +2406,8 @@ body.has-player .fab-new {
letter-spacing: 0.04em;
text-transform: uppercase;
transition: border-color 0.15s, background 0.15s, color 0.15s;
white-space: nowrap;
flex-shrink: 0;
}
.feed-sort-btn.active {
@@ -2433,6 +2496,64 @@ body.has-player .fab-new {
cursor: pointer;
}
/* Desktop: wrapper is transparent — preview and vote become direct flex items of dump-card-inner */
.dump-card-left {
display: contents;
}
/* With display:contents, all three are siblings in dump-card-inner's flex context.
DOM order is: preview, vote, body — use order to restore: preview, body, vote. */
.dump-card-body {
order: 1;
margin-left: 0.25rem; /* total gap to preview = container gap (0.75) + this = 1rem */
}
.dump-card-vote {
order: 2;
}
@media (max-width: 512px) {
.dump-card-inner,
.playlist-card-inner {
gap: 0.5rem;
padding: 0.6rem 0.75rem;
}
/* Reset flex order and margin — narrow mode uses dump-card-left as a real flex container */
.dump-card-body,
.dump-card-vote {
order: 0;
}
/* Left column: preview + vote stacked with fixed gap, independent of body height */
.dump-card-left {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 0.5rem;
flex-shrink: 0;
}
.dump-card-body {
align-self: center;
}
.dump-card-meta {
flex-direction: column;
gap: 0.1rem;
}
.dump-card-comment {
display: none;
}
.playlist-card-description {
display: none;
}
}
/* ── Shared card preview thumbnail ── */
.dump-card-preview,
.playlist-card-preview {
@@ -2492,6 +2613,7 @@ body.has-player .fab-new {
display: flex;
flex-direction: column;
gap: 0.2rem;
margin-left: 0.25rem;
}
/* ── Shared card title link ── */
@@ -2580,11 +2702,35 @@ body.has-player .fab-new {
gap: 0.6rem;
}
@media (max-width: 512px) {
.playlist-card-meta {
flex-direction: column;
align-items: flex-start;
gap: 0.1rem;
}
}
.dump-card-vote {
flex-shrink: 0;
align-self: center;
}
@media (max-width: 512px) {
.index-below-header .index-presence {
display: none;
}
}
@media (max-width: 512px) {
.app-header-brand-name {
display: none;
}
.btn-new-label {
display: none;
}
}
/* ── Playlist card image thumbnail ── */
.playlist-card-img {
width: 100%;
@@ -2888,6 +3034,14 @@ body.has-player .fab-new {
font-size: 0.82rem;
opacity: 0.6;
}
@media (max-width: 512px) {
.playlist-detail-meta {
flex-direction: column;
align-items: flex-start;
gap: 0.1rem;
}
}
.playlist-detail-owner {
color: inherit;
text-decoration: none;
@@ -2898,7 +3052,7 @@ body.has-player .fab-new {
opacity: 1;
}
/* ── Playlist header inline edit ── */
.playlist-detail-content {
flex: 1;
min-width: 0;
@@ -4315,6 +4469,22 @@ body.has-player .fab-new {
display: contents;
}
@media (max-width: 512px) {
.profile-appearance-grid {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 1rem;
}
.profile-appearance-row {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 0.3rem;
}
}
.profile-appearance-label {
font-size: 0.85rem;
font-weight: 600;

View File

@@ -29,8 +29,8 @@ export function AppHeader(
className={`app-header${centerSlot ? " app-header--has-center" : ""}`}
>
<Link to="/?tab=hot" className="app-header-brand">
🚚 {document.querySelector<HTMLMetaElement>('meta[name="site-name"]')
?.content ?? "gerbeur"}
🚚<span className="app-header-brand-name">{" "}{document.querySelector<HTMLMetaElement>('meta[name="site-name"]')
?.content ?? "gerbeur"}</span>
</Link>
{centerSlot && <div className="app-header-center">{centerSlot}</div>}
@@ -68,7 +68,7 @@ export function AppHeader(
disabled={disableNew}
title={disableNew ? t`Server unreachable` : undefined}
>
<Trans>+ New</Trans>
+<span className="btn-new-label"><Trans> Dump</Trans></span>
</button>
</>
)

View File

@@ -40,6 +40,7 @@ export function DumpCard(
className="dump-card-inner"
onClick={handleNavigate}
>
<div className="dump-card-left">
<div
className="dump-card-preview"
onClick={dump.richContent ? (e) => e.stopPropagation() : undefined}
@@ -51,6 +52,18 @@ export function DumpCard(
: <span className="dump-card-preview-icon">🔗</span>}
</div>
<div className="dump-card-vote" onClick={(e) => e.stopPropagation()}>
<VoteButton
dumpId={dump.id}
count={voteCount}
voted={voted}
disabled={!canVote}
onCast={castVote}
onRemove={removeVote}
/>
</div>
</div>
<div className="dump-card-body">
<Link
to={dumpUrl(dump)}
@@ -94,16 +107,6 @@ export function DumpCard(
</div>
</div>
<div className="dump-card-vote" onClick={(e) => e.stopPropagation()}>
<VoteButton
dumpId={dump.id}
count={voteCount}
voted={voted}
disabled={!canVote}
onCast={castVote}
onRemove={removeVote}
/>
</div>
</div>
</li>
);

View File

@@ -373,14 +373,14 @@ export function DumpCreateModal(
<div className="form-group">
<label htmlFor="dc-comment">
<Trans>Why are you dumping this?</Trans>
<Trans>Why?</Trans>
</label>
<TextEditor
id="dc-comment"
value={comment}
onChange={setComment}
disabled={submitting}
placeholder={t`Tell the community what makes this worth their time...`}
placeholder={t`What makes it worth it?`}
rows={3}
maxLength={VALIDATION.DUMP_COMMENT_MAX}
/>

View File

@@ -16,6 +16,7 @@ export function FeedTabBar() {
}
return (
<div className="feed-sort-scroller">
<div className="feed-sort">
<button
type="button"
@@ -48,5 +49,6 @@ export function FeedTabBar() {
</button>
)}
</div>
</div>
);
}

View File

@@ -27,7 +27,7 @@ export function NewPlaylistForm(
className={toggleClassName}
onClick={() => setOpen(true)}
>
{toggleLabel ?? <Trans>+ New playlist</Trans>}
{toggleLabel ?? <>+<span className="btn-new-label"><Trans> New playlist</Trans></span></>}
</button>
{open && (

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -13,12 +13,29 @@ msgstr ""
"Language-Team: \n"
"Plural-Forms: \n"
#: src/components/AppHeader.tsx:71
msgid " Dump"
msgstr " Dump"
#: src/components/AppHeader.tsx:71
msgid " New"
msgstr " New"
#: src/pages/UserDumps.tsx:114
#: src/pages/UserPublicProfile.tsx:1332
msgid " New dump"
msgstr " New dump"
#: src/components/NewPlaylistForm.tsx:30
msgid " New playlist"
msgstr " New playlist"
#: src/components/CommentThread.tsx:176
msgid "[deleted]"
msgstr "[deleted]"
#. placeholder {0}: dump.commentCount
#: src/components/DumpCard.tsx:82
#: src/components/DumpCard.tsx:95
msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# comment} other {# comments}}"
@@ -59,7 +76,7 @@ msgid "← Back"
msgstr "← Back"
#: src/pages/Dump.tsx:218
#: src/pages/Dump.tsx:321
#: src/pages/Dump.tsx:325
#: src/pages/DumpEdit.tsx:170
msgid "← Back to all dumps"
msgstr "← Back to all dumps"
@@ -74,16 +91,15 @@ msgstr "← Back to profile"
msgid "+ Invite someone"
msgstr "+ Invite someone"
#: src/components/AppHeader.tsx:70
#: src/components/AppHeader.tsx:71
msgid "+ New"
msgstr "+ New"
#: src/pages/UserDumps.tsx:114
#: src/pages/UserPublicProfile.tsx:1330
#: src/pages/UserPublicProfile.tsx:1332
msgid "+ New dump"
msgstr "+ New dump"
#: src/components/NewPlaylistForm.tsx:30
#: src/components/PlaylistMembershipPanel.tsx:80
msgid "+ New playlist"
msgstr "+ New playlist"
@@ -94,53 +110,53 @@ msgstr "+ Playlist"
#. placeholder {0}: d.commenterUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:171
#: src/pages/Notifications.tsx:179
msgid "<0>{0}</0> commented on <1>{1}</1>"
msgstr "<0>{0}</0> commented on <1>{1}</1>"
#. placeholder {0}: d.followerUsername
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:131
#: src/pages/Notifications.tsx:139
msgid "<0>{0}</0> followed your playlist <1>{1}</1>"
msgstr "<0>{0}</0> followed your playlist <1>{1}</1>"
#. placeholder {0}: d.mentionerUsername
#: src/pages/Notifications.tsx:183
#: src/pages/Notifications.tsx:191
msgid "<0>{0}</0> mentioned you in <1>{where}</1>"
msgstr "<0>{0}</0> mentioned you in <1>{where}</1>"
#. placeholder {0}: d.dumperUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:141
#: src/pages/Notifications.tsx:149
msgid "<0>{0}</0> posted <1>{1}</1>"
msgstr "<0>{0}</0> posted <1>{1}</1>"
#. placeholder {0}: d.followerUsername
#: src/pages/Notifications.tsx:122
#: src/pages/Notifications.tsx:130
msgid "<0>{0}</0> started following you"
msgstr "<0>{0}</0> started following you"
#. placeholder {0}: d.voterUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:161
#: src/pages/Notifications.tsx:169
msgid "<0>{0}</0> upvoted <1>{1}</1>"
msgstr "<0>{0}</0> upvoted <1>{1}</1>"
#. placeholder {0}: d.dumpTitle
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:151
#: src/pages/Notifications.tsx:159
msgid "<0>{0}</0> was added to <1>{1}</1>"
msgstr "<0>{0}</0> was added to <1>{1}</1>"
#: src/pages/Notifications.tsx:181
#: src/pages/Notifications.tsx:189
msgid "a comment"
msgstr "a comment"
#: src/pages/Notifications.tsx:181
#: src/pages/Notifications.tsx:189
msgid "a post"
msgstr "a post"
#: src/pages/UserPublicProfile.tsx:1215
#: src/pages/UserPublicProfile.tsx:1217
msgid "Account"
msgstr "Account"
@@ -161,10 +177,6 @@ msgstr "Add email…"
msgid "Add to playlist"
msgstr "Add to playlist"
#: api/auth:
#~ msgid "Admin access required"
#~ msgstr "Admin access required"
#: src/pages/UserDumps.tsx:114
msgid "All {0, plural, one {# dump} other {# dumps}} loaded."
msgstr "All {0, plural, one {# dump} other {# dumps}} loaded."
@@ -177,7 +189,7 @@ msgstr "All {0, plural, one {# upvoted dump} other {# upvoted dumps}} loaded."
msgid "Already have an account? <0>Log in</0>"
msgstr "Already have an account? <0>Log in</0>"
#: src/pages/UserPublicProfile.tsx:1234
#: src/pages/UserPublicProfile.tsx:1236
msgid "Appearance"
msgstr "Appearance"
@@ -187,7 +199,7 @@ msgstr "Appearance"
msgid "At least {0} characters"
msgstr "At least {0} characters"
#: src/pages/UserPublicProfile.tsx:1268
#: src/pages/UserPublicProfile.tsx:1270
msgid "Auto"
msgstr "Auto"
@@ -219,10 +231,6 @@ msgstr "Cancel"
msgid "Cancel removal"
msgstr "Cancel removal"
#: api/comments:
#~ msgid "Cannot edit a deleted comment"
#~ msgstr "Cannot edit a deleted comment"
#: src/pages/UserPublicProfile.tsx:772
msgid "Change avatar"
msgstr "Change avatar"
@@ -232,7 +240,7 @@ msgstr "Change avatar"
msgid "Change password"
msgstr "Change password"
#: src/pages/UserPublicProfile.tsx:1227
#: src/pages/UserPublicProfile.tsx:1229
msgid "Change password…"
msgstr "Change password…"
@@ -245,14 +253,10 @@ msgstr "Checking invite…"
msgid "Close"
msgstr "Close"
#: src/pages/UserPublicProfile.tsx:1260
#: src/pages/UserPublicProfile.tsx:1262
msgid "Color scheme"
msgstr "Color scheme"
#: api/comments:
#~ msgid "Comment not found"
#~ msgstr "Comment not found"
#: src/components/ChangePasswordModal.tsx:136
#: src/pages/ResetPassword.tsx:132
msgid "Confirm new password"
@@ -303,7 +307,7 @@ msgstr "Creating…"
msgid "Current password"
msgstr "Current password"
#: src/pages/UserPublicProfile.tsx:1282
#: src/pages/UserPublicProfile.tsx:1284
msgid "Dark"
msgstr "Dark"
@@ -359,32 +363,28 @@ msgstr "Drop a replacement here"
msgid "Dump it"
msgstr "Dump it"
#: api/dumps:
#~ msgid "Dump not found"
#~ msgstr "Dump not found"
#: src/components/DumpCreateModal.tsx:438
msgid "Dumped!"
msgstr "Dumped!"
#: src/pages/Search.tsx:172
#: src/pages/UserDumps.tsx:107
#: src/pages/UserPublicProfile.tsx:967
#: src/pages/UserPublicProfile.tsx:968
msgid "Dumps"
msgstr "Dumps"
#. placeholder {0}: dumps.items.length
#. placeholder {1}: dumps.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:1004
#: src/pages/UserPublicProfile.tsx:1006
msgid "Dumps ({0}{1})"
msgstr "Dumps ({0}{1})"
#: src/pages/Notifications.tsx:360
#: src/pages/Notifications.tsx:368
msgid "Earlier"
msgstr "Earlier"
#: src/components/CommentThread.tsx:310
#: src/pages/Dump.tsx:317
#: src/pages/Dump.tsx:321
#: src/pages/PlaylistDetail.tsx:706
msgid "Edit"
msgstr "Edit"
@@ -393,7 +393,7 @@ msgstr "Edit"
#. placeholder {0}: relativeTime(dump.updatedAt)
#. placeholder {0}: relativeTime(playlist.updatedAt)
#: src/components/CommentThread.tsx:237
#: src/pages/Dump.tsx:278
#: src/pages/Dump.tsx:281
#: src/pages/PlaylistDetail.tsx:779
msgid "edited {0}"
msgstr "edited {0}"
@@ -402,7 +402,7 @@ msgstr "edited {0}"
#. placeholder {0}: dump.updatedAt.toLocaleString()
#. placeholder {0}: playlist.updatedAt.toLocaleString()
#: src/components/CommentThread.tsx:235
#: src/pages/Dump.tsx:276
#: src/pages/Dump.tsx:279
#: src/pages/PlaylistDetail.tsx:776
msgid "Edited {0}"
msgstr "Edited {0}"
@@ -438,10 +438,10 @@ msgstr "Failed to generate invite"
#: src/pages/index/HotFeed.tsx:36
#: src/pages/index/JournalFeed.tsx:48
#: src/pages/index/NewFeed.tsx:36
#: src/pages/Notifications.tsx:334
#: src/pages/UserPublicProfile.tsx:1106
#: src/pages/UserPublicProfile.tsx:1148
#: src/pages/UserPublicProfile.tsx:1193
#: src/pages/Notifications.tsx:342
#: src/pages/UserPublicProfile.tsx:1108
#: src/pages/UserPublicProfile.tsx:1150
#: src/pages/UserPublicProfile.tsx:1195
msgid "Failed to load"
msgstr "Failed to load"
@@ -486,18 +486,6 @@ msgstr "Fetching…"
msgid "File"
msgstr "File"
#: api/avatars:
#~ msgid "File content is not a recognised image (JPEG, PNG, GIF, WebP)"
#~ msgstr "File content is not a recognised image (JPEG, PNG, GIF, WebP)"
#: api/avatars:
#~ msgid "File too large (max 5 MB)"
#~ msgstr "File too large (max 5 MB)"
#: api/dumps:
#~ msgid "File too large (max 50 MB)"
#~ msgstr "File too large (max 50 MB)"
#: src/components/DumpCreateModal.tsx:202
msgid "File too large (max 50 MB)."
msgstr "File too large (max 50 MB)."
@@ -523,8 +511,8 @@ msgstr "Follow some public playlists to see their dumps here."
msgid "Follow some users to see their dumps here."
msgstr "Follow some users to see their dumps here."
#: src/components/FeedTabBar.tsx:47
#: src/pages/UserPublicProfile.tsx:981
#: src/components/FeedTabBar.tsx:48
#: src/pages/UserPublicProfile.tsx:982
msgid "Followed"
msgstr "Followed"
@@ -534,20 +522,16 @@ msgstr "Followed"
msgid "Followed ({0}{1})"
msgstr "Followed ({0}{1})"
#: src/pages/UserPublicProfile.tsx:1137
#: src/pages/UserPublicProfile.tsx:1139
msgid "Followed playlists"
msgstr "Followed playlists"
#: src/components/FollowButton.tsx:37
#: src/components/FollowButton.tsx:64
#: src/pages/UserPublicProfile.tsx:1095
#: src/pages/UserPublicProfile.tsx:1097
msgid "Following"
msgstr "Following"
#: api/playlists:
#~ msgid "Forbidden"
#~ msgstr "Forbidden"
#: src/pages/UserLogin.tsx:131
msgid "Forgot password?"
msgstr "Forgot password?"
@@ -564,7 +548,7 @@ msgstr "From playlists"
msgid "Go to login"
msgstr "Go to login"
#: src/components/FeedTabBar.tsx:25
#: src/components/FeedTabBar.tsx:26
msgid "Hot"
msgstr "Hot"
@@ -572,10 +556,6 @@ msgstr "Hot"
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."
#: api/auth:
#~ msgid "Invalid email address"
#~ msgstr "Invalid email address"
#: src/pages/UserRegister.tsx:106
msgid "Invalid invite"
msgstr "Invalid invite"
@@ -584,33 +564,16 @@ msgstr "Invalid invite"
msgid "Invalid link"
msgstr "Invalid link"
#: api/invites:
#~ msgid "Invalid or expired invite"
#~ msgstr "Invalid or expired invite"
#: api/dumps:
#~ msgid "Invalid URL"
#~ msgstr "Invalid URL"
#. Backend error strings (manually maintained)
#: api/auth:
#~ msgid "Invalid username or password"
#~ msgstr "Invalid username or password"
#: api/invites:
#~ msgid "Invite already used"
#~ msgstr "Invite already used"
#: src/pages/UserPublicProfile.tsx:790
msgid "invited by"
msgstr "invited by"
#: src/pages/UserPublicProfile.tsx:988
#: src/pages/UserPublicProfile.tsx:1182
#: src/pages/UserPublicProfile.tsx:989
#: src/pages/UserPublicProfile.tsx:1184
msgid "Invitees"
msgstr "Invitees"
#: src/components/FeedTabBar.tsx:39
#: src/components/FeedTabBar.tsx:40
msgid "Journal"
msgstr "Journal"
@@ -618,7 +581,7 @@ msgstr "Journal"
msgid "just now"
msgstr "just now"
#: src/pages/UserPublicProfile.tsx:1275
#: src/pages/UserPublicProfile.tsx:1277
msgid "Light"
msgstr "Light"
@@ -626,11 +589,11 @@ msgstr "Light"
msgid "Live updates are temporarily disconnected. Trying to reconnect…"
msgstr "Live updates are temporarily disconnected. Trying to reconnect…"
#: src/components/AppHeader.tsx:87
#: src/components/AppHeader.tsx:88
msgid "Live updates unavailable."
msgstr "Live updates unavailable."
#: src/pages/Notifications.tsx:407
#: src/pages/Notifications.tsx:415
msgid "Load more"
msgstr "Load more"
@@ -665,18 +628,18 @@ msgstr "Loading profile…"
#: src/pages/index/HotFeed.tsx:32
#: src/pages/index/JournalFeed.tsx:44
#: src/pages/index/NewFeed.tsx:32
#: src/pages/Notifications.tsx:330
#: src/pages/Notifications.tsx:406
#: src/pages/Notifications.tsx:338
#: src/pages/Notifications.tsx:414
#: src/pages/UserDumps.tsx:51
#: src/pages/UserPlaylists.tsx:342
#: src/pages/UserPublicProfile.tsx:1100
#: src/pages/UserPublicProfile.tsx:1142
#: src/pages/UserPublicProfile.tsx:1187
#: src/pages/UserPublicProfile.tsx:1102
#: src/pages/UserPublicProfile.tsx:1144
#: src/pages/UserPublicProfile.tsx:1189
#: src/pages/UserUpvoted.tsx:123
msgid "Loading…"
msgstr "Loading…"
#: src/components/AppHeader.tsx:77
#: src/components/AppHeader.tsx:78
#: src/pages/UserLogin.tsx:87
#: src/pages/UserLogin.tsx:117
msgid "Log in"
@@ -699,11 +662,11 @@ msgstr "Login failed"
msgid "Max 50 MB"
msgstr "Max 50 MB"
#: src/pages/Notifications.tsx:323
#: src/pages/Notifications.tsx:331
msgid "new"
msgstr "new"
#: src/components/FeedTabBar.tsx:32
#: src/components/FeedTabBar.tsx:33
msgid "New"
msgstr "New"
@@ -739,11 +702,11 @@ msgid "No emoji found."
msgstr "No emoji found."
#: src/pages/UserPlaylists.tsx:439
#: src/pages/UserPublicProfile.tsx:1155
#: src/pages/UserPublicProfile.tsx:1157
msgid "No followed playlists yet."
msgstr "No followed playlists yet."
#: src/pages/UserPublicProfile.tsx:1200
#: src/pages/UserPublicProfile.tsx:1202
msgid "No invitees yet."
msgstr "No invitees yet."
@@ -753,7 +716,7 @@ msgstr "No playlists match \"{q}\"."
#: src/components/PlaylistMembershipPanel.tsx:34
#: src/pages/UserPlaylists.tsx:397
#: src/pages/UserPublicProfile.tsx:1066
#: src/pages/UserPublicProfile.tsx:1068
msgid "No playlists yet."
msgstr "No playlists yet."
@@ -761,24 +724,20 @@ msgstr "No playlists yet."
msgid "No users match \"{q}\"."
msgstr "No users match \"{q}\"."
#: api/auth:
#~ msgid "Not authenticated"
#~ msgstr "Not authenticated"
#: src/pages/UserPublicProfile.tsx:1113
#: src/pages/UserPublicProfile.tsx:1115
msgid "Not following anyone yet."
msgstr "Not following anyone yet."
#: src/pages/Notifications.tsx:341
#: src/pages/Notifications.tsx:349
#: src/pages/UserDumps.tsx:123
#: src/pages/UserPublicProfile.tsx:1340
#: src/pages/UserPublicProfile.tsx:1463
#: src/pages/UserPublicProfile.tsx:1342
#: src/pages/UserPublicProfile.tsx:1465
#: src/pages/UserUpvoted.tsx:195
msgid "Nothing here yet."
msgstr "Nothing here yet."
#: src/components/NotificationBell.tsx:42
#: src/pages/Notifications.tsx:319
#: src/pages/Notifications.tsx:327
msgid "Notifications"
msgstr "Notifications"
@@ -795,7 +754,7 @@ msgid "or <0>browse files</0>"
msgstr "or <0>browse files</0>"
#: src/pages/UserLogin.tsx:106
#: src/pages/UserPublicProfile.tsx:1220
#: src/pages/UserPublicProfile.tsx:1222
msgid "Password"
msgstr "Password"
@@ -808,14 +767,6 @@ msgstr "Password (min. {0} characters)"
msgid "Password changed successfully."
msgstr "Password changed successfully."
#: api/auth:
#~ msgid "Password must be at least 8 characters"
#~ msgstr "Password must be at least 8 characters"
#: api/auth:
#~ msgid "Password must be at most 128 characters"
#~ msgstr "Password must be at most 128 characters"
#: src/pages/ResetPassword.tsx:56
msgid "Password updated"
msgstr "Password updated"
@@ -825,21 +776,17 @@ msgstr "Password updated"
msgid "Passwords do not match"
msgstr "Passwords do not match"
#: api/playlists:
#~ msgid "Playlist not found"
#~ msgstr "Playlist not found"
#: src/components/AppHeader.tsx:53
#: src/components/AppHeader.tsx:54
#: src/components/UserMenu.tsx:62
#: src/pages/Search.tsx:175
#: src/pages/UserPlaylists.tsx:368
#: src/pages/UserPublicProfile.tsx:974
#: src/pages/UserPublicProfile.tsx:975
msgid "Playlists"
msgstr "Playlists"
#. placeholder {0}: playlists.items.length
#. placeholder {1}: playlists.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:1035
#: src/pages/UserPublicProfile.tsx:1037
msgid "Playlists ({0}{1})"
msgstr "Playlists ({0}{1})"
@@ -860,10 +807,10 @@ msgstr "Post reply"
msgid "Posting…"
msgstr "Posting…"
#: src/components/DumpCard.tsx:91
#: src/components/DumpCard.tsx:104
#: src/components/PlaylistCard.tsx:73
#: src/components/PlaylistMembershipPanel.tsx:55
#: src/pages/Dump.tsx:284
#: src/pages/Dump.tsx:287
#: src/pages/PlaylistDetail.tsx:759
msgid "private"
msgstr "private"
@@ -978,7 +925,7 @@ msgstr "Send reset link"
msgid "Sending…"
msgstr "Sending…"
#: src/components/AppHeader.tsx:68
#: src/components/AppHeader.tsx:69
msgid "Server unreachable"
msgstr "Server unreachable"
@@ -987,7 +934,7 @@ msgstr "Server unreachable"
msgid "Set new password"
msgstr "Set new password"
#: src/pages/UserPublicProfile.tsx:996
#: src/pages/UserPublicProfile.tsx:997
msgid "Settings"
msgstr "Settings"
@@ -995,7 +942,7 @@ msgstr "Settings"
msgid "Something went wrong"
msgstr "Something went wrong"
#: src/pages/UserPublicProfile.tsx:1239
#: src/pages/UserPublicProfile.tsx:1241
msgid "Style"
msgstr "Style"
@@ -1003,15 +950,6 @@ msgstr "Style"
msgid "Submit search"
msgstr "Submit search"
#: src/pages/UserPublicProfile.tsx:899
msgid "Tell people about yourself…"
msgstr "Tell people about yourself…"
#: src/components/DumpCreateModal.tsx:383
#: src/pages/DumpEdit.tsx:266
msgid "Tell the community what makes this worth their time..."
msgstr "Tell the community what makes this worth their time..."
#: src/pages/UserRegister.tsx:107
msgid "This invite link is missing, expired, or already used."
msgstr "This invite link is missing, expired, or already used."
@@ -1028,7 +966,7 @@ msgstr "This reset link is missing or malformed."
msgid "Title"
msgstr "Title"
#: src/pages/Notifications.tsx:357
#: src/pages/Notifications.tsx:365
msgid "Today"
msgstr "Today"
@@ -1036,10 +974,6 @@ msgstr "Today"
msgid "Undo"
msgstr "Undo"
#: api/generic:
#~ msgid "Unexpected server error"
#~ msgstr "Unexpected server error"
#: src/components/FollowButton.tsx:34
msgid "Unfollow {targetUsername}"
msgstr "Unfollow {targetUsername}"
@@ -1067,7 +1001,7 @@ msgstr "Upvoted"
#. placeholder {0}: votes.items.length
#. placeholder {1}: votes.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:1015
#: src/pages/UserPublicProfile.tsx:1017
msgid "Upvoted ({0}{1})"
msgstr "Upvoted ({0}{1})"
@@ -1089,23 +1023,15 @@ msgstr "User menu"
msgid "Username"
msgstr "Username"
#: api/auth:
#~ msgid "Username already exists"
#~ msgstr "Username already exists"
#: api/auth:
#~ msgid "Username must be 132 characters and contain only letters, numbers, or underscores"
#~ msgstr "Username must be 132 characters and contain only letters, numbers, or underscores"
#: src/pages/Search.tsx:174
msgid "Users"
msgstr "Users"
#: src/pages/UserPublicProfile.tsx:1085
#: src/pages/UserPublicProfile.tsx:1128
#: src/pages/UserPublicProfile.tsx:1170
#: src/pages/UserPublicProfile.tsx:1361
#: src/pages/UserPublicProfile.tsx:1493
#: src/pages/UserPublicProfile.tsx:1087
#: src/pages/UserPublicProfile.tsx:1130
#: src/pages/UserPublicProfile.tsx:1172
#: src/pages/UserPublicProfile.tsx:1363
#: src/pages/UserPublicProfile.tsx:1495
msgid "View all →"
msgstr "View all →"
@@ -1113,20 +1039,29 @@ msgstr "View all →"
msgid "View dump →"
msgstr "View dump →"
#: src/components/DumpCreateModal.tsx:383
#: src/pages/DumpEdit.tsx:266
msgid "What makes it worth it?"
msgstr "What makes it worth it?"
#: src/pages/UserPublicProfile.tsx:899
msgid "Who am I?"
msgstr "Who am I?"
#: src/components/DumpCreateModal.tsx:376
#: src/pages/DumpEdit.tsx:260
msgid "Why are you dumping this?"
msgstr "Why are you dumping this?"
msgid "Why?"
msgstr "Why?"
#: src/components/CommentThread.tsx:342
msgid "Write a reply…"
msgstr "Write a reply…"
#: src/pages/Notifications.tsx:359
#: src/pages/Notifications.tsx:367
msgid "Yesterday"
msgstr "Yesterday"
#: src/pages/Notifications.tsx:344
#: src/pages/Notifications.tsx:352
msgid "You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content."
msgstr "You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content."

File diff suppressed because one or more lines are too long

View File

@@ -13,12 +13,25 @@ msgstr ""
"Last-Translator: \n"
"Language-Team: \n"
#: src/components/AppHeader.tsx:71
msgid " Dump"
msgstr " Reco"
#: src/pages/UserDumps.tsx:114
#: src/pages/UserPublicProfile.tsx:1332
msgid " New dump"
msgstr " Nouvelle reco"
#: src/components/NewPlaylistForm.tsx:30
msgid " New playlist"
msgstr " Nouvelle collection"
#: src/components/CommentThread.tsx:176
msgid "[deleted]"
msgstr "[supprimé]"
#. placeholder {0}: dump.commentCount
#: src/components/DumpCard.tsx:82
#: src/components/DumpCard.tsx:95
msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# commentaire} other {# commentaires}}"
@@ -59,7 +72,7 @@ msgid "← Back"
msgstr "← Retour"
#: src/pages/Dump.tsx:218
#: src/pages/Dump.tsx:321
#: src/pages/Dump.tsx:325
#: src/pages/DumpEdit.tsx:170
msgid "← Back to all dumps"
msgstr "← Retour à toutes les recos"
@@ -74,16 +87,15 @@ msgstr "← Retour au profil"
msgid "+ Invite someone"
msgstr "+ Inviter quelqu'un"
#: src/components/AppHeader.tsx:70
#: src/components/AppHeader.tsx:71
msgid "+ New"
msgstr "+ Nouveau"
#: src/pages/UserDumps.tsx:114
#: src/pages/UserPublicProfile.tsx:1330
#: src/pages/UserPublicProfile.tsx:1332
msgid "+ New dump"
msgstr "+ Nouvelle reco"
#: src/components/NewPlaylistForm.tsx:30
#: src/components/PlaylistMembershipPanel.tsx:80
msgid "+ New playlist"
msgstr "+ Nouvelle collection"
@@ -94,53 +106,53 @@ msgstr "+ Collection"
#. placeholder {0}: d.commenterUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:171
#: src/pages/Notifications.tsx:179
msgid "<0>{0}</0> commented on <1>{1}</1>"
msgstr ""
msgstr "<0>{0}</0> a commenté sur <1>{1}</1>"
#. placeholder {0}: d.followerUsername
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:131
#: src/pages/Notifications.tsx:139
msgid "<0>{0}</0> followed your playlist <1>{1}</1>"
msgstr "<0>{0}</0> a suivi votre collection <1>{1}</1>"
#. placeholder {0}: d.mentionerUsername
#: src/pages/Notifications.tsx:183
#: src/pages/Notifications.tsx:191
msgid "<0>{0}</0> mentioned you in <1>{where}</1>"
msgstr "<0>{0}</0> vous a mentionné dans <1>{where}</1>"
#. placeholder {0}: d.dumperUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:141
#: src/pages/Notifications.tsx:149
msgid "<0>{0}</0> posted <1>{1}</1>"
msgstr "<0>{0}</0> a publié <1>{1}</1>"
#. placeholder {0}: d.followerUsername
#: src/pages/Notifications.tsx:122
#: src/pages/Notifications.tsx:130
msgid "<0>{0}</0> started following you"
msgstr "<0>{0}</0> a commencé à vous suivre"
#. placeholder {0}: d.voterUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:161
#: src/pages/Notifications.tsx:169
msgid "<0>{0}</0> upvoted <1>{1}</1>"
msgstr "<0>{0}</0> a voté pour <1>{1}</1>"
#. placeholder {0}: d.dumpTitle
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:151
#: src/pages/Notifications.tsx:159
msgid "<0>{0}</0> was added to <1>{1}</1>"
msgstr "<0>{0}</0> a été ajouté à <1>{1}</1>"
#: src/pages/Notifications.tsx:181
#: src/pages/Notifications.tsx:189
msgid "a comment"
msgstr "un commentaire"
#: src/pages/Notifications.tsx:181
#: src/pages/Notifications.tsx:189
msgid "a post"
msgstr "une publication"
#: src/pages/UserPublicProfile.tsx:1215
#: src/pages/UserPublicProfile.tsx:1217
msgid "Account"
msgstr "Compte"
@@ -173,7 +185,7 @@ msgstr "Toutes les {0, plural, one {# reco votée} other {# recos votées}} char
msgid "Already have an account? <0>Log in</0>"
msgstr "Vous avez déjà un compte ? <0>Se connecter</0>"
#: src/pages/UserPublicProfile.tsx:1234
#: src/pages/UserPublicProfile.tsx:1236
msgid "Appearance"
msgstr "Apparence"
@@ -183,7 +195,7 @@ msgstr "Apparence"
msgid "At least {0} characters"
msgstr "Au moins {0} caractères"
#: src/pages/UserPublicProfile.tsx:1268
#: src/pages/UserPublicProfile.tsx:1270
msgid "Auto"
msgstr "Auto"
@@ -224,7 +236,7 @@ msgstr "Changer l'avatar"
msgid "Change password"
msgstr "Changer le mot de passe"
#: src/pages/UserPublicProfile.tsx:1227
#: src/pages/UserPublicProfile.tsx:1229
msgid "Change password…"
msgstr "Changer le mot de passe…"
@@ -237,7 +249,7 @@ msgstr "Vérification de l'invitation…"
msgid "Close"
msgstr "Fermer"
#: src/pages/UserPublicProfile.tsx:1260
#: src/pages/UserPublicProfile.tsx:1262
msgid "Color scheme"
msgstr "Thème de couleur"
@@ -291,7 +303,7 @@ msgstr "Création…"
msgid "Current password"
msgstr "Mot de passe actuel"
#: src/pages/UserPublicProfile.tsx:1282
#: src/pages/UserPublicProfile.tsx:1284
msgid "Dark"
msgstr "Sombre"
@@ -353,22 +365,22 @@ msgstr "Recommandé !"
#: src/pages/Search.tsx:172
#: src/pages/UserDumps.tsx:107
#: src/pages/UserPublicProfile.tsx:967
#: src/pages/UserPublicProfile.tsx:968
msgid "Dumps"
msgstr "Recos"
#. placeholder {0}: dumps.items.length
#. placeholder {1}: dumps.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:1004
#: src/pages/UserPublicProfile.tsx:1006
msgid "Dumps ({0}{1})"
msgstr "Recos ({0}{1})"
#: src/pages/Notifications.tsx:360
#: src/pages/Notifications.tsx:368
msgid "Earlier"
msgstr "Plus tôt"
#: src/components/CommentThread.tsx:310
#: src/pages/Dump.tsx:317
#: src/pages/Dump.tsx:321
#: src/pages/PlaylistDetail.tsx:706
msgid "Edit"
msgstr "Modifier"
@@ -377,7 +389,7 @@ msgstr "Modifier"
#. placeholder {0}: relativeTime(dump.updatedAt)
#. placeholder {0}: relativeTime(playlist.updatedAt)
#: src/components/CommentThread.tsx:237
#: src/pages/Dump.tsx:278
#: src/pages/Dump.tsx:281
#: src/pages/PlaylistDetail.tsx:779
msgid "edited {0}"
msgstr "modifié {0}"
@@ -386,7 +398,7 @@ msgstr "modifié {0}"
#. placeholder {0}: dump.updatedAt.toLocaleString()
#. placeholder {0}: playlist.updatedAt.toLocaleString()
#: src/components/CommentThread.tsx:235
#: src/pages/Dump.tsx:276
#: src/pages/Dump.tsx:279
#: src/pages/PlaylistDetail.tsx:776
msgid "Edited {0}"
msgstr "Modifié le {0}"
@@ -422,10 +434,10 @@ msgstr "Impossible de générer une invitation"
#: src/pages/index/HotFeed.tsx:36
#: src/pages/index/JournalFeed.tsx:48
#: src/pages/index/NewFeed.tsx:36
#: src/pages/Notifications.tsx:334
#: src/pages/UserPublicProfile.tsx:1106
#: src/pages/UserPublicProfile.tsx:1148
#: src/pages/UserPublicProfile.tsx:1193
#: src/pages/Notifications.tsx:342
#: src/pages/UserPublicProfile.tsx:1108
#: src/pages/UserPublicProfile.tsx:1150
#: src/pages/UserPublicProfile.tsx:1195
msgid "Failed to load"
msgstr "Chargement échoué"
@@ -495,8 +507,8 @@ msgstr "Suivez des collections publiques pour voir leurs recos ici."
msgid "Follow some users to see their dumps here."
msgstr "Suivez des utilisateurs pour voir leurs recos ici."
#: src/components/FeedTabBar.tsx:47
#: src/pages/UserPublicProfile.tsx:981
#: src/components/FeedTabBar.tsx:48
#: src/pages/UserPublicProfile.tsx:982
msgid "Followed"
msgstr "Suivi"
@@ -506,13 +518,13 @@ msgstr "Suivi"
msgid "Followed ({0}{1})"
msgstr "Suivies ({0}{1})"
#: src/pages/UserPublicProfile.tsx:1137
#: src/pages/UserPublicProfile.tsx:1139
msgid "Followed playlists"
msgstr "Collections suivies"
#: src/components/FollowButton.tsx:37
#: src/components/FollowButton.tsx:64
#: src/pages/UserPublicProfile.tsx:1095
#: src/pages/UserPublicProfile.tsx:1097
msgid "Following"
msgstr "Abonné"
@@ -532,7 +544,7 @@ msgstr "De collections"
msgid "Go to login"
msgstr "Aller à la connexion"
#: src/components/FeedTabBar.tsx:25
#: src/components/FeedTabBar.tsx:26
msgid "Hot"
msgstr "Tendances"
@@ -552,12 +564,12 @@ msgstr "Lien invalide"
msgid "invited by"
msgstr "invité par"
#: src/pages/UserPublicProfile.tsx:988
#: src/pages/UserPublicProfile.tsx:1182
#: src/pages/UserPublicProfile.tsx:989
#: src/pages/UserPublicProfile.tsx:1184
msgid "Invitees"
msgstr "Invités"
#: src/components/FeedTabBar.tsx:39
#: src/components/FeedTabBar.tsx:40
msgid "Journal"
msgstr "Journal"
@@ -565,7 +577,7 @@ msgstr "Journal"
msgid "just now"
msgstr "à l'instant"
#: src/pages/UserPublicProfile.tsx:1275
#: src/pages/UserPublicProfile.tsx:1277
msgid "Light"
msgstr "Clair"
@@ -573,11 +585,11 @@ msgstr "Clair"
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:87
#: src/components/AppHeader.tsx:88
msgid "Live updates unavailable."
msgstr "Mises à jour en direct indisponibles."
#: src/pages/Notifications.tsx:407
#: src/pages/Notifications.tsx:415
msgid "Load more"
msgstr "Charger plus"
@@ -612,18 +624,18 @@ msgstr "Chargement du profil…"
#: src/pages/index/HotFeed.tsx:32
#: src/pages/index/JournalFeed.tsx:44
#: src/pages/index/NewFeed.tsx:32
#: src/pages/Notifications.tsx:330
#: src/pages/Notifications.tsx:406
#: src/pages/Notifications.tsx:338
#: src/pages/Notifications.tsx:414
#: src/pages/UserDumps.tsx:51
#: src/pages/UserPlaylists.tsx:342
#: src/pages/UserPublicProfile.tsx:1100
#: src/pages/UserPublicProfile.tsx:1142
#: src/pages/UserPublicProfile.tsx:1187
#: src/pages/UserPublicProfile.tsx:1102
#: src/pages/UserPublicProfile.tsx:1144
#: src/pages/UserPublicProfile.tsx:1189
#: src/pages/UserUpvoted.tsx:123
msgid "Loading…"
msgstr "Chargement…"
#: src/components/AppHeader.tsx:77
#: src/components/AppHeader.tsx:78
#: src/pages/UserLogin.tsx:87
#: src/pages/UserLogin.tsx:117
msgid "Log in"
@@ -646,11 +658,11 @@ msgstr "Connexion échouée"
msgid "Max 50 MB"
msgstr "Max 50 Mo"
#: src/pages/Notifications.tsx:323
#: src/pages/Notifications.tsx:331
msgid "new"
msgstr "nouveau"
#: src/components/FeedTabBar.tsx:32
#: src/components/FeedTabBar.tsx:33
msgid "New"
msgstr "Nouveau"
@@ -686,11 +698,11 @@ msgid "No emoji found."
msgstr "Aucun emoji trouvé."
#: src/pages/UserPlaylists.tsx:439
#: src/pages/UserPublicProfile.tsx:1155
#: src/pages/UserPublicProfile.tsx:1157
msgid "No followed playlists yet."
msgstr "Pas encore de collections suivies."
#: src/pages/UserPublicProfile.tsx:1200
#: src/pages/UserPublicProfile.tsx:1202
msgid "No invitees yet."
msgstr "Aucun invité pour le moment."
@@ -700,7 +712,7 @@ msgstr "Aucune collection ne correspond à « {q} »."
#: src/components/PlaylistMembershipPanel.tsx:34
#: src/pages/UserPlaylists.tsx:397
#: src/pages/UserPublicProfile.tsx:1066
#: src/pages/UserPublicProfile.tsx:1068
msgid "No playlists yet."
msgstr "Pas encore de collections."
@@ -708,20 +720,20 @@ msgstr "Pas encore de collections."
msgid "No users match \"{q}\"."
msgstr "Aucun utilisateur ne correspond à « {q} »."
#: src/pages/UserPublicProfile.tsx:1113
#: src/pages/UserPublicProfile.tsx:1115
msgid "Not following anyone yet."
msgstr "Aucun abonnement pour le moment."
#: src/pages/Notifications.tsx:341
#: src/pages/Notifications.tsx:349
#: src/pages/UserDumps.tsx:123
#: src/pages/UserPublicProfile.tsx:1340
#: src/pages/UserPublicProfile.tsx:1463
#: src/pages/UserPublicProfile.tsx:1342
#: src/pages/UserPublicProfile.tsx:1465
#: src/pages/UserUpvoted.tsx:195
msgid "Nothing here yet."
msgstr "Rien ici pour l'instant."
#: src/components/NotificationBell.tsx:42
#: src/pages/Notifications.tsx:319
#: src/pages/Notifications.tsx:327
msgid "Notifications"
msgstr "Notifications"
@@ -738,7 +750,7 @@ msgid "or <0>browse files</0>"
msgstr "ou <0>parcourir les fichiers</0>"
#: src/pages/UserLogin.tsx:106
#: src/pages/UserPublicProfile.tsx:1220
#: src/pages/UserPublicProfile.tsx:1222
msgid "Password"
msgstr "Mot de passe"
@@ -760,17 +772,17 @@ msgstr "Mot de passe mis à jour"
msgid "Passwords do not match"
msgstr "Les mots de passe ne correspondent pas"
#: src/components/AppHeader.tsx:53
#: src/components/AppHeader.tsx:54
#: src/components/UserMenu.tsx:62
#: src/pages/Search.tsx:175
#: src/pages/UserPlaylists.tsx:368
#: src/pages/UserPublicProfile.tsx:974
#: src/pages/UserPublicProfile.tsx:975
msgid "Playlists"
msgstr "Collections"
#. placeholder {0}: playlists.items.length
#. placeholder {1}: playlists.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:1035
#: src/pages/UserPublicProfile.tsx:1037
msgid "Playlists ({0}{1})"
msgstr "Collections ({0}{1})"
@@ -791,10 +803,10 @@ msgstr "Publier la réponse"
msgid "Posting…"
msgstr "Publication…"
#: src/components/DumpCard.tsx:91
#: src/components/DumpCard.tsx:104
#: src/components/PlaylistCard.tsx:73
#: src/components/PlaylistMembershipPanel.tsx:55
#: src/pages/Dump.tsx:284
#: src/pages/Dump.tsx:287
#: src/pages/PlaylistDetail.tsx:759
msgid "private"
msgstr "privé"
@@ -909,7 +921,7 @@ msgstr "Envoyer le lien de réinitialisation"
msgid "Sending…"
msgstr "Envoi…"
#: src/components/AppHeader.tsx:68
#: src/components/AppHeader.tsx:69
msgid "Server unreachable"
msgstr "Serveur inaccessible"
@@ -918,7 +930,7 @@ msgstr "Serveur inaccessible"
msgid "Set new password"
msgstr "Définir un nouveau mot de passe"
#: src/pages/UserPublicProfile.tsx:996
#: src/pages/UserPublicProfile.tsx:997
msgid "Settings"
msgstr "Paramètres"
@@ -926,7 +938,7 @@ msgstr "Paramètres"
msgid "Something went wrong"
msgstr "Une erreur est survenue"
#: src/pages/UserPublicProfile.tsx:1239
#: src/pages/UserPublicProfile.tsx:1241
msgid "Style"
msgstr "Style"
@@ -934,15 +946,6 @@ msgstr "Style"
msgid "Submit search"
msgstr "Lancer la recherche"
#: src/pages/UserPublicProfile.tsx:899
msgid "Tell people about yourself…"
msgstr "Parlez de vous…"
#: src/components/DumpCreateModal.tsx:383
#: src/pages/DumpEdit.tsx:266
msgid "Tell the community what makes this worth their time..."
msgstr "Dites à la communauté pourquoi ça vaut le coup…"
#: src/pages/UserRegister.tsx:107
msgid "This invite link is missing, expired, or already used."
msgstr "Ce lien d'invitation est manquant, expiré ou déjà utilisé."
@@ -959,7 +962,7 @@ msgstr "Ce lien de réinitialisation est absent ou malformé."
msgid "Title"
msgstr "Titre"
#: src/pages/Notifications.tsx:357
#: src/pages/Notifications.tsx:365
msgid "Today"
msgstr "Aujourd'hui"
@@ -994,7 +997,7 @@ msgstr "Voté"
#. placeholder {0}: votes.items.length
#. placeholder {1}: votes.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:1015
#: src/pages/UserPublicProfile.tsx:1017
msgid "Upvoted ({0}{1})"
msgstr "Votés ({0}{1})"
@@ -1020,11 +1023,11 @@ msgstr "Nom d'utilisateur"
msgid "Users"
msgstr "Utilisateurs"
#: src/pages/UserPublicProfile.tsx:1085
#: src/pages/UserPublicProfile.tsx:1128
#: src/pages/UserPublicProfile.tsx:1170
#: src/pages/UserPublicProfile.tsx:1361
#: src/pages/UserPublicProfile.tsx:1493
#: src/pages/UserPublicProfile.tsx:1087
#: src/pages/UserPublicProfile.tsx:1130
#: src/pages/UserPublicProfile.tsx:1172
#: src/pages/UserPublicProfile.tsx:1363
#: src/pages/UserPublicProfile.tsx:1495
msgid "View all →"
msgstr "Tout voir →"
@@ -1032,20 +1035,29 @@ msgstr "Tout voir →"
msgid "View dump →"
msgstr "Voir la reco →"
#: src/components/DumpCreateModal.tsx:383
#: src/pages/DumpEdit.tsx:266
msgid "What makes it worth it?"
msgstr "Pourquoi on en voudrait ?"
#: src/pages/UserPublicProfile.tsx:899
msgid "Who am I?"
msgstr "Qui suis-je ?"
#: src/components/DumpCreateModal.tsx:376
#: src/pages/DumpEdit.tsx:260
msgid "Why are you dumping this?"
msgstr "Pourquoi recommandez-vous ça ?"
msgid "Why?"
msgstr "Pourquoi ?"
#: src/components/CommentThread.tsx:342
msgid "Write a reply…"
msgstr "Écrire une réponse…"
#: src/pages/Notifications.tsx:359
#: src/pages/Notifications.tsx:367
msgid "Yesterday"
msgstr "Hier"
#: src/pages/Notifications.tsx:344
#: src/pages/Notifications.tsx:352
msgid "You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content."
msgstr "Vous serez notifié lorsque quelqu'un suit vos collections, vote pour vos recos ou publie du nouveau contenu."

View File

@@ -232,6 +232,7 @@ export function Dump() {
{/* Post header */}
<div className="dump-post-header">
<div className="dump-header-block">
<div className="dump-header-left">
<VoteButton
dumpId={dump.id}
count={voteCounts[dump.id] ?? dump.voteCount}
@@ -240,7 +241,6 @@ export function Dump() {
onCast={castVote}
onRemove={removeVote}
/>
<h1 className="dump-title">{dump.title}</h1>
{user && (
<button
type="button"
@@ -250,6 +250,9 @@ export function Dump() {
<Trans>+ Playlist</Trans>
</button>
)}
</div>
<div className="dump-header-right">
<h1 className="dump-title">{dump.title}</h1>
<div className="dump-op">
<Avatar
userId={dump.userId}
@@ -286,6 +289,7 @@ export function Dump() {
)}
</div>
</div>
</div>
{dump.comment && (
<Markdown className="dump-comment">{dump.comment}</Markdown>

View File

@@ -257,13 +257,13 @@ export function DumpEdit() {
<div className="form-group">
<label htmlFor="comment">
<Trans>Why are you dumping this?</Trans>
<Trans>Why?</Trans>
</label>
<TextEditor
id="comment"
value={comment}
onChange={setComment}
placeholder={t`Tell the community what makes this worth their time...`}
placeholder={t`What makes it worth it?`}
rows={3}
maxLength={VALIDATION.DUMP_COMMENT_MAX}
/>

View File

@@ -69,7 +69,7 @@ export function Search() {
abortRef.current = controller;
try {
const url = new URL(SEARCH_URL);
const url = new URL(SEARCH_URL, location.origin);
url.searchParams.set("q", query);
url.searchParams.set("page", String(page));
url.searchParams.set("limit", String(DEFAULT_PAGE_SIZE));

View File

@@ -111,7 +111,7 @@ export function UserDumps() {
className="new-playlist-toggle"
onClick={() => setCreateModalOpen(true)}
>
<Trans>+ New dump</Trans>
+<span className="btn-new-label"><Trans> New dump</Trans></span>
</button>
)}
/>

View File

@@ -896,7 +896,7 @@ export function UserPublicProfile() {
value={descDraft}
onChange={setDescDraft}
onSubmit={handleDescSave}
placeholder={t`Tell people about yourself…`}
placeholder={t`Who am I?`}
autoResize
maxLength={VALIDATION.USER_DESCRIPTION_MAX}
/>
@@ -958,6 +958,7 @@ export function UserPublicProfile() {
</div>
)}
<div className="feed-sort-scroller profile-tabs-scroller">
<div className="profile-tabs feed-sort">
<button
type="button"
@@ -997,6 +998,7 @@ export function UserPublicProfile() {
</button>
)}
</div>
</div>
{tab === "dumps" && (
<div className="profile-columns">
@@ -1327,7 +1329,7 @@ function DumpList(
className="new-playlist-toggle"
onClick={() => setCreateModalOpen(true)}
>
<Trans>+ New dump</Trans>
+<span className="btn-new-label"><Trans> New dump</Trans></span>
</button>
)}
</div>

View File

@@ -173,11 +173,18 @@
[data-style="brutalist"] .btn--ghost,
[data-style="brutalist"] .audio-player-btn,
[data-style="brutalist"] .audio-player-vol-btn,
[data-style="brutalist"] .rich-content-thumbnail-btn {
[data-style="brutalist"] .rich-content-thumbnail-btn,
[data-style="brutalist"] .user-menu-trigger {
border: none;
box-shadow: none;
}
[data-style="brutalist"] .user-menu-trigger:hover:not(:disabled),
[data-style="brutalist"] .user-menu-trigger:active {
transform: none;
box-shadow: none;
}
[data-style="brutalist"] .modal-close-btn:hover,
[data-style="brutalist"] .playlist-remove-btn:hover,
[data-style="brutalist"] .playlist-card-delete-btn:hover,