detached 1680028

feat(desktop): use authentic AIM 5.x and Windows XP icons, tone down chat room header

commit
168002889ca57fefc23d9e4f354a6ef445665537
author
Kit · · 2026-09-27 13:17 UTC
parent
d7110ac
signature
SSH UnverifiedSHA256:H91DFuEG4jpk5edzLA4aUKkpv4zv9Q339ipRmkph6Tk The key is unknown
34 files · +68 -73
M src/lib/components/chat-room.svelte +6 -5
@@ -1079,7 +1079,7 @@
10791079 {/snippet}
10801080
10811081 <div class="room-header">
1082- <img src="/aim/chat-room.svg" alt="" width="16" height="16" />
1082+ <img src="/aim/chat-room-16.png" alt="" width="16" height="16" />
10831083 <span class="room-name">{roomName}</span>
10841084 {#if roomTopic}
10851085 <span class="room-topic">— {roomTopic}</span>
@@ -1484,8 +1484,9 @@
14841484 gap: 6px;
14851485 padding: 3px 6px;
14861486 margin-bottom: 4px;
1487- background: linear-gradient(180deg, #fff3a6 0%, #f6c700 100%);
1488- border: 1px solid #c99a00;
1487+ background: #ece9d8;
1488+ border-bottom: 1px solid #aca899;
1489+ color: #333;
14891490 font-family: Tahoma, 'Pixelated MS Sans Serif', sans-serif;
14901491 font-size: 11px;
14911492 flex: 0 0 auto;
@@ -1497,7 +1498,7 @@
14971498 }
14981499
14991500 .room-topic {
1500- color: #5a4a00;
1501+ color: #666;
15011502 overflow: hidden;
15021503 text-overflow: ellipsis;
15031504 white-space: nowrap;
@@ -1507,7 +1508,7 @@
15071508
15081509 .room-count {
15091510 margin-left: auto;
1510- color: #5a4a00;
1511+ color: #666;
15111512 white-space: nowrap;
15121513 }
15131514
@@ -1079,7 +1079,7 @@
1079 {/snippet}1079 {/snippet}
1080 1080
1081 <div class="room-header">1081 <div class="room-header">
1082- <img src="/aim/chat-room.svg" alt="" width="16" height="16" />1082+ <img src="/aim/chat-room-16.png" alt="" width="16" height="16" />
1083 <span class="room-name">{roomName}</span>1083 <span class="room-name">{roomName}</span>
1084 {#if roomTopic}1084 {#if roomTopic}
1085 <span class="room-topic">— {roomTopic}</span>1085 <span class="room-topic">— {roomTopic}</span>
@@ -1484,8 +1484,9 @@
1484 gap: 6px;1484 gap: 6px;
1485 padding: 3px 6px;1485 padding: 3px 6px;
1486 margin-bottom: 4px;1486 margin-bottom: 4px;
1487- background: linear-gradient(180deg, #fff3a6 0%, #f6c700 100%);1487+ background: #ece9d8;
1488- border: 1px solid #c99a00;1488+ border-bottom: 1px solid #aca899;
1489+ color: #333;
1489 font-family: Tahoma, 'Pixelated MS Sans Serif', sans-serif;1490 font-family: Tahoma, 'Pixelated MS Sans Serif', sans-serif;
1490 font-size: 11px;1491 font-size: 11px;
1491 flex: 0 0 auto;1492 flex: 0 0 auto;
@@ -1497,7 +1498,7 @@
1497 }1498 }
1498 1499
1499 .room-topic {1500 .room-topic {
1500- color: #5a4a00;1501+ color: #666;
1501 overflow: hidden;1502 overflow: hidden;
1502 text-overflow: ellipsis;1503 text-overflow: ellipsis;
1503 white-space: nowrap;1504 white-space: nowrap;
@@ -1507,7 +1508,7 @@
1507 1508
1508 .room-count {1509 .room-count {
1509 margin-left: auto;1510 margin-left: auto;
1510- color: #5a4a00;1511+ color: #666;
1511 white-space: nowrap;1512 white-space: nowrap;
1512 }1513 }
1513 1514
M src/lib/components/desktop-icons.svelte +4 -4
@@ -24,26 +24,26 @@
2424 {
2525 id: 'general',
2626 label: 'Salon General',
27- icon: '/aim/chat-room.svg',
27+ icon: '/aim/chat-room-48.png',
2828 action: () => desktop.openChatRoom(null, 'General')
2929 },
3030 {
3131 id: 'away',
3232 label: 'Message d’absence',
33- icon: '/aim/away.svg',
33+ icon: '/aim/xp-note-48.png',
3434 action: () => desktop.openAway(),
3535 hidden: !currentUser
3636 },
3737 {
3838 id: 'prefs',
3939 label: 'Préférences',
40- icon: '/aim/prefs.svg',
40+ icon: '/aim/xp-control-panel-48.png',
4141 action: () => desktop.openPreferences()
4242 },
4343 {
4444 id: 'about',
4545 label: 'Aide',
46- icon: '/aim/help.svg',
46+ icon: '/aim/xp-help-48.png',
4747 action: () => desktop.openAbout()
4848 }
4949 ]);
@@ -24,26 +24,26 @@
24 {24 {
25 id: 'general',25 id: 'general',
26 label: 'Salon General',26 label: 'Salon General',
27- icon: '/aim/chat-room.svg',27+ icon: '/aim/chat-room-48.png',
28 action: () => desktop.openChatRoom(null, 'General')28 action: () => desktop.openChatRoom(null, 'General')
29 },29 },
30 {30 {
31 id: 'away',31 id: 'away',
32 label: 'Message d’absence',32 label: 'Message d’absence',
33- icon: '/aim/away.svg',33+ icon: '/aim/xp-note-48.png',
34 action: () => desktop.openAway(),34 action: () => desktop.openAway(),
35 hidden: !currentUser35 hidden: !currentUser
36 },36 },
37 {37 {
38 id: 'prefs',38 id: 'prefs',
39 label: 'Préférences',39 label: 'Préférences',
40- icon: '/aim/prefs.svg',40+ icon: '/aim/xp-control-panel-48.png',
41 action: () => desktop.openPreferences()41 action: () => desktop.openPreferences()
42 },42 },
43 {43 {
44 id: 'about',44 id: 'about',
45 label: 'Aide',45 label: 'Aide',
46- icon: '/aim/help.svg',46+ icon: '/aim/xp-help-48.png',
47 action: () => desktop.openAbout()47 action: () => desktop.openAbout()
48 }48 }
49 ]);49 ]);
M src/lib/components/desktop/buddy-list.svelte +17 -11
@@ -228,7 +228,12 @@
228228 >
229229 <img src={`/aim/status-${buddy.status}.svg`} alt="" width="12" height="12" />
230230 <span class="truncate">{buddy.nickname}{buddy.status === 'idle' ? ' (Inactif)' : ''}</span>
231- {#if buddy.status === 'away'}<img src="/aim/away.svg" alt="" width="12" height="12" />{/if}
231+ {#if buddy.status === 'away'}<img
232+ src="/aim/xp-note-16.png"
233+ alt=""
234+ width="12"
235+ height="12"
236+ />{/if}
232237 </button>
233238 {#if editMode}<button
234239 class="remove"
@@ -311,7 +316,8 @@
311316 </div>
312317 <div class="identity-text">
313318 <strong
314- ><img src="/aim/running-man-16.png" alt="" width="16" height="16" /> {me.nickname}</strong
319+ ><img src="/aim/running-man-16.png" alt="" width="16" height="16" />
320+ {me.nickname}</strong
315321 ><span title={meQuery?.data?.awayMessage ?? ''}
316322 >{meQuery?.data?.status === 'away'
317323 ? `Absent${meQuery.data.awayMessage ? ` : ${meQuery.data.awayMessage}` : ''}`
@@ -366,7 +372,7 @@
366372 {#if !collapsed.has('Salons')}{#each [...(roomsQuery?.data ?? [])].sort((a, b) => Number(b.isDefault) - Number(a.isDefault) || a.name.localeCompare(b.name)) as room (room.id)}<button
367373 class="list-entry"
368374 onclick={() => desktop.openChatRoom(room.id, room.name)}
369- ><img src="/aim/chat-room.svg" alt="" width="12" height="12" />
375+ ><img src="/aim/chat-room-16.png" alt="" width="12" height="12" />
370376 <span class="truncate">{room.name}</span></button
371377 >{/each}{/if}
372378 <button
@@ -385,7 +391,7 @@
385391 otherUserId: room.other!.id,
386392 otherNickname: room.other!.nickname
387393 })}
388- ><img src="/aim/im.svg" alt="" width="12" height="12" />
394+ ><img src="/aim/running-man-16.png" alt="" width="12" height="12" />
389395 <span class="truncate"
390396 >{room.other.nickname}{room.unreadCount ? ` (${room.unreadCount})` : ''}</span
391397 ></button
@@ -427,23 +433,23 @@
427433 {#if error}<p class="error" role="alert">{error}</p>{/if}
428434 <div class="toolbar">
429435 <button disabled={!me} onclick={() => openPanel('im')}
430- ><img src="/aim/im.svg" alt="" />IM</button
436+ ><img src="/aim/running-man-48.png" alt="" />IM</button
431437 >
432438 <button disabled={!me} onclick={() => desktop.openNewRoom()}
433- ><img src="/aim/chat-room.svg" alt="" />Chat</button
439+ ><img src="/aim/chat-room-48.png" alt="" />Chat</button
434440 >
435441 <button
436442 disabled={!selectedBuddy}
437443 onclick={() => {
438444 if (selectedBuddy)
439445 desktop.openProfile({ userId: selectedBuddy.id, nickname: selectedBuddy.nickname });
440- }}><img src="/aim/info.svg" alt="" />Infos</button
446+ }}><img src="/aim/profile-48.png" alt="" />Infos</button
441447 >
442448 <button disabled={!me} onclick={() => desktop.openAway()}
443- ><img src="/aim/away.svg" alt="" />Absent</button
449+ ><img src="/aim/xp-note-48.png" alt="" />Absent</button
444450 >
445451 <button disabled={!me} onclick={() => openPanel('add')}
446- ><img src="/aim/door-open.svg" alt="" />Ajouter</button
452+ ><img src="/aim/add-buddy-48.png" alt="" />Ajouter</button
447453 >
448454 </div>
449455 </div>
@@ -644,8 +650,8 @@
644650 font: inherit;
645651 }
646652 .toolbar img {
647- width: 20px;
648- height: 20px;
653+ width: 24px;
654+ height: 24px;
649655 }
650656 .menus {
651657 display: flex;
@@ -228,7 +228,12 @@
228 >228 >
229 <img src={`/aim/status-${buddy.status}.svg`} alt="" width="12" height="12" />229 <img src={`/aim/status-${buddy.status}.svg`} alt="" width="12" height="12" />
230 <span class="truncate">{buddy.nickname}{buddy.status === 'idle' ? ' (Inactif)' : ''}</span>230 <span class="truncate">{buddy.nickname}{buddy.status === 'idle' ? ' (Inactif)' : ''}</span>
231- {#if buddy.status === 'away'}<img src="/aim/away.svg" alt="" width="12" height="12" />{/if}231+ {#if buddy.status === 'away'}<img
232+ src="/aim/xp-note-16.png"
233+ alt=""
234+ width="12"
235+ height="12"
236+ />{/if}
232 </button>237 </button>
233 {#if editMode}<button238 {#if editMode}<button
234 class="remove"239 class="remove"
@@ -311,7 +316,8 @@
311 </div>316 </div>
312 <div class="identity-text">317 <div class="identity-text">
313 <strong318 <strong
314- ><img src="/aim/running-man-16.png" alt="" width="16" height="16" /> {me.nickname}</strong319+ ><img src="/aim/running-man-16.png" alt="" width="16" height="16" />
320+ {me.nickname}</strong
315 ><span title={meQuery?.data?.awayMessage ?? ''}321 ><span title={meQuery?.data?.awayMessage ?? ''}
316 >{meQuery?.data?.status === 'away'322 >{meQuery?.data?.status === 'away'
317 ? `Absent${meQuery.data.awayMessage ? ` : ${meQuery.data.awayMessage}` : ''}`323 ? `Absent${meQuery.data.awayMessage ? ` : ${meQuery.data.awayMessage}` : ''}`
@@ -366,7 +372,7 @@
366 {#if !collapsed.has('Salons')}{#each [...(roomsQuery?.data ?? [])].sort((a, b) => Number(b.isDefault) - Number(a.isDefault) || a.name.localeCompare(b.name)) as room (room.id)}<button372 {#if !collapsed.has('Salons')}{#each [...(roomsQuery?.data ?? [])].sort((a, b) => Number(b.isDefault) - Number(a.isDefault) || a.name.localeCompare(b.name)) as room (room.id)}<button
367 class="list-entry"373 class="list-entry"
368 onclick={() => desktop.openChatRoom(room.id, room.name)}374 onclick={() => desktop.openChatRoom(room.id, room.name)}
369- ><img src="/aim/chat-room.svg" alt="" width="12" height="12" />375+ ><img src="/aim/chat-room-16.png" alt="" width="12" height="12" />
370 <span class="truncate">{room.name}</span></button376 <span class="truncate">{room.name}</span></button
371 >{/each}{/if}377 >{/each}{/if}
372 <button378 <button
@@ -385,7 +391,7 @@
385 otherUserId: room.other!.id,391 otherUserId: room.other!.id,
386 otherNickname: room.other!.nickname392 otherNickname: room.other!.nickname
387 })}393 })}
388- ><img src="/aim/im.svg" alt="" width="12" height="12" />394+ ><img src="/aim/running-man-16.png" alt="" width="12" height="12" />
389 <span class="truncate"395 <span class="truncate"
390 >{room.other.nickname}{room.unreadCount ? ` (${room.unreadCount})` : ''}</span396 >{room.other.nickname}{room.unreadCount ? ` (${room.unreadCount})` : ''}</span
391 ></button397 ></button
@@ -427,23 +433,23 @@
427 {#if error}<p class="error" role="alert">{error}</p>{/if}433 {#if error}<p class="error" role="alert">{error}</p>{/if}
428 <div class="toolbar">434 <div class="toolbar">
429 <button disabled={!me} onclick={() => openPanel('im')}435 <button disabled={!me} onclick={() => openPanel('im')}
430- ><img src="/aim/im.svg" alt="" />IM</button436+ ><img src="/aim/running-man-48.png" alt="" />IM</button
431 >437 >
432 <button disabled={!me} onclick={() => desktop.openNewRoom()}438 <button disabled={!me} onclick={() => desktop.openNewRoom()}
433- ><img src="/aim/chat-room.svg" alt="" />Chat</button439+ ><img src="/aim/chat-room-48.png" alt="" />Chat</button
434 >440 >
435 <button441 <button
436 disabled={!selectedBuddy}442 disabled={!selectedBuddy}
437 onclick={() => {443 onclick={() => {
438 if (selectedBuddy)444 if (selectedBuddy)
439 desktop.openProfile({ userId: selectedBuddy.id, nickname: selectedBuddy.nickname });445 desktop.openProfile({ userId: selectedBuddy.id, nickname: selectedBuddy.nickname });
440- }}><img src="/aim/info.svg" alt="" />Infos</button446+ }}><img src="/aim/profile-48.png" alt="" />Infos</button
441 >447 >
442 <button disabled={!me} onclick={() => desktop.openAway()}448 <button disabled={!me} onclick={() => desktop.openAway()}
443- ><img src="/aim/away.svg" alt="" />Absent</button449+ ><img src="/aim/xp-note-48.png" alt="" />Absent</button
444 >450 >
445 <button disabled={!me} onclick={() => openPanel('add')}451 <button disabled={!me} onclick={() => openPanel('add')}
446- ><img src="/aim/door-open.svg" alt="" />Ajouter</button452+ ><img src="/aim/add-buddy-48.png" alt="" />Ajouter</button
447 >453 >
448 </div>454 </div>
449 </div>455 </div>
@@ -644,8 +650,8 @@
644 font: inherit;650 font: inherit;
645 }651 }
646 .toolbar img {652 .toolbar img {
647- width: 20px;653+ width: 24px;
648- height: 20px;654+ height: 24px;
649 }655 }
650 .menus {656 .menus {
651 display: flex;657 display: flex;
M src/lib/components/desktop/sign-on-window.svelte +21 -13
@@ -181,10 +181,13 @@
181181 >
182182 <div class="signon">
183183 <div class="banner">
184- <img src="/aim/running-man-48.png" alt="" width="40" height="40" />
184+ <img src="/aim/running-man-48.png" alt="" width="44" height="44" />
185185 <div class="brand">
186- <div class="brand-title">PDR AIM</div>
187- <div class="brand-sub">Instant Messenger</div>
186+ <div class="brand-aol">
187+ <img src="/aim/aol-logo-16.png" alt="" width="14" height="14" /> PDR
188+ </div>
189+ <div class="brand-title">Instant</div>
190+ <div class="brand-title">Messenger</div>
188191 </div>
189192 </div>
190193
@@ -309,22 +312,27 @@
309312 .banner {
310313 display: flex;
311314 align-items: center;
312- gap: 10px;
313- padding: 8px 10px;
314- background: linear-gradient(180deg, #fff3a6 0%, #f6c700 100%);
315- border: 1px solid #c99a00;
315+ gap: 12px;
316+ padding: 10px 12px;
317+ background: #1b2a9a;
318+ border: 1px solid #0f1a66;
319+ color: #fff;
316320 }
317321
318- .brand-title {
322+ .brand-aol {
323+ display: flex;
324+ align-items: center;
325+ gap: 4px;
319326 font-weight: bold;
320- font-size: 18px;
321- color: #1b1b1b;
327+ font-size: 12px;
322328 letter-spacing: 1px;
323329 }
324330
325- .brand-sub {
326- font-size: 10px;
327- color: #5a4a00;
331+ .brand-title {
332+ font-style: italic;
333+ font-size: 17px;
334+ line-height: 1;
335+ color: #fff;
328336 }
329337
330338 .tabs {
@@ -181,10 +181,13 @@
181 >181 >
182 <div class="signon">182 <div class="signon">
183 <div class="banner">183 <div class="banner">
184- <img src="/aim/running-man-48.png" alt="" width="40" height="40" />184+ <img src="/aim/running-man-48.png" alt="" width="44" height="44" />
185 <div class="brand">185 <div class="brand">
186- <div class="brand-title">PDR AIM</div>186+ <div class="brand-aol">
187- <div class="brand-sub">Instant Messenger</div>187+ <img src="/aim/aol-logo-16.png" alt="" width="14" height="14" /> PDR
188+ </div>
189+ <div class="brand-title">Instant</div>
190+ <div class="brand-title">Messenger</div>
188 </div>191 </div>
189 </div>192 </div>
190 193
@@ -309,22 +312,27 @@
309 .banner {312 .banner {
310 display: flex;313 display: flex;
311 align-items: center;314 align-items: center;
312- gap: 10px;315+ gap: 12px;
313- padding: 8px 10px;316+ padding: 10px 12px;
314- background: linear-gradient(180deg, #fff3a6 0%, #f6c700 100%);317+ background: #1b2a9a;
315- border: 1px solid #c99a00;318+ border: 1px solid #0f1a66;
319+ color: #fff;
316 }320 }
317 321
318- .brand-title {322+ .brand-aol {
323+ display: flex;
324+ align-items: center;
325+ gap: 4px;
319 font-weight: bold;326 font-weight: bold;
320- font-size: 18px;327+ font-size: 12px;
321- color: #1b1b1b;
322 letter-spacing: 1px;328 letter-spacing: 1px;
323 }329 }
324 330
325- .brand-sub {331+ .brand-title {
326- font-size: 10px;332+ font-style: italic;
327- color: #5a4a00;333+ font-size: 17px;
334+ line-height: 1;
335+ color: #fff;
328 }336 }
329 337
330 .tabs {338 .tabs {
M src/lib/components/desktop/taskbar.svelte +13 -1
@@ -108,7 +108,14 @@
108108 unlockAudio();
109109 soundOn = !soundsEnabled();
110110 setSoundsEnabled(soundOn);
111- }}><span aria-hidden="true">{soundOn ? '🔊' : '🔇'}</span></button
111+ }}
112+ ><img
113+ src={soundOn ? '/aim/xp-volume-16.png' : '/aim/xp-volume-muted-16.png'}
114+ alt=""
115+ width="16"
116+ height="16"
117+ class:muted={!soundOn}
118+ /></button
112119 >
113120 <img
114121 src="/aim/running-man-16.png"
@@ -258,6 +265,11 @@
258265 border-left: 1px solid #78baff;
259266 white-space: nowrap;
260267 }
268+ .tray-button img.muted {
269+ opacity: 0.45;
270+ filter: grayscale(1);
271+ }
272+
261273 .tray-button {
262274 min-width: 0;
263275 padding: 0;
@@ -108,7 +108,14 @@
108 unlockAudio();108 unlockAudio();
109 soundOn = !soundsEnabled();109 soundOn = !soundsEnabled();
110 setSoundsEnabled(soundOn);110 setSoundsEnabled(soundOn);
111- }}><span aria-hidden="true">{soundOn ? '🔊' : '🔇'}</span></button111+ }}
112+ ><img
113+ src={soundOn ? '/aim/xp-volume-16.png' : '/aim/xp-volume-muted-16.png'}
114+ alt=""
115+ width="16"
116+ height="16"
117+ class:muted={!soundOn}
118+ /></button
112 >119 >
113 <img120 <img
114 src="/aim/running-man-16.png"121 src="/aim/running-man-16.png"
@@ -258,6 +265,11 @@
258 border-left: 1px solid #78baff;265 border-left: 1px solid #78baff;
259 white-space: nowrap;266 white-space: nowrap;
260 }267 }
268+ .tray-button img.muted {
269+ opacity: 0.45;
270+ filter: grayscale(1);
271+ }
272+
261 .tray-button {273 .tray-button {
262 min-width: 0;274 min-width: 0;
263 padding: 0;275 padding: 0;
M src/lib/states/desktop.svelte.ts +7 -7
@@ -153,7 +153,7 @@ class DesktopState {
153153 id: roomId ? `room-${roomId}` : 'room-default',
154154 kind: 'chat-room',
155155 title: `Salon : ${roomName}`,
156- icon: '/aim/chat-room.svg',
156+ icon: '/aim/chat-room-16.png',
157157 props: props as unknown as Record<string, unknown>
158158 });
159159 }
@@ -163,7 +163,7 @@ class DesktopState {
163163 id: `im-${props.roomId}`,
164164 kind: 'im',
165165 title: `${props.otherNickname} - Message instantané`,
166- icon: '/aim/im.svg',
166+ icon: '/aim/running-man-16.png',
167167 props: props as unknown as Record<string, unknown>
168168 });
169169 }
@@ -183,7 +183,7 @@ class DesktopState {
183183 id: `profile-${props.userId}`,
184184 kind: 'profile',
185185 title: `Infos sur ${props.nickname}`,
186- icon: '/aim/info.svg',
186+ icon: '/aim/xp-info-16.png',
187187 props: props as unknown as Record<string, unknown>
188188 });
189189 }
@@ -193,7 +193,7 @@ class DesktopState {
193193 id: 'away',
194194 kind: 'away',
195195 title: 'Message d’absence',
196- icon: '/aim/away.svg',
196+ icon: '/aim/xp-note-16.png',
197197 props: {}
198198 });
199199 }
@@ -203,7 +203,7 @@ class DesktopState {
203203 id: 'new-room',
204204 kind: 'new-room',
205205 title: 'Nouveau salon',
206- icon: '/aim/chat-room.svg',
206+ icon: '/aim/chat-room-16.png',
207207 props: {}
208208 });
209209 }
@@ -213,7 +213,7 @@ class DesktopState {
213213 id: 'preferences',
214214 kind: 'preferences',
215215 title: 'Préférences',
216- icon: '/aim/prefs.svg',
216+ icon: '/aim/xp-control-panel-16.png',
217217 props: {}
218218 });
219219 }
@@ -223,7 +223,7 @@ class DesktopState {
223223 id: 'about',
224224 kind: 'about',
225225 title: 'À propos de PDR AIM',
226- icon: '/aim/help.svg',
226+ icon: '/aim/xp-help-16.png',
227227 props: {}
228228 });
229229 }
@@ -153,7 +153,7 @@ class DesktopState {
153 id: roomId ? `room-${roomId}` : 'room-default',153 id: roomId ? `room-${roomId}` : 'room-default',
154 kind: 'chat-room',154 kind: 'chat-room',
155 title: `Salon : ${roomName}`,155 title: `Salon : ${roomName}`,
156- icon: '/aim/chat-room.svg',156+ icon: '/aim/chat-room-16.png',
157 props: props as unknown as Record<string, unknown>157 props: props as unknown as Record<string, unknown>
158 });158 });
159 }159 }
@@ -163,7 +163,7 @@ class DesktopState {
163 id: `im-${props.roomId}`,163 id: `im-${props.roomId}`,
164 kind: 'im',164 kind: 'im',
165 title: `${props.otherNickname} - Message instantané`,165 title: `${props.otherNickname} - Message instantané`,
166- icon: '/aim/im.svg',166+ icon: '/aim/running-man-16.png',
167 props: props as unknown as Record<string, unknown>167 props: props as unknown as Record<string, unknown>
168 });168 });
169 }169 }
@@ -183,7 +183,7 @@ class DesktopState {
183 id: `profile-${props.userId}`,183 id: `profile-${props.userId}`,
184 kind: 'profile',184 kind: 'profile',
185 title: `Infos sur ${props.nickname}`,185 title: `Infos sur ${props.nickname}`,
186- icon: '/aim/info.svg',186+ icon: '/aim/xp-info-16.png',
187 props: props as unknown as Record<string, unknown>187 props: props as unknown as Record<string, unknown>
188 });188 });
189 }189 }
@@ -193,7 +193,7 @@ class DesktopState {
193 id: 'away',193 id: 'away',
194 kind: 'away',194 kind: 'away',
195 title: 'Message d’absence',195 title: 'Message d’absence',
196- icon: '/aim/away.svg',196+ icon: '/aim/xp-note-16.png',
197 props: {}197 props: {}
198 });198 });
199 }199 }
@@ -203,7 +203,7 @@ class DesktopState {
203 id: 'new-room',203 id: 'new-room',
204 kind: 'new-room',204 kind: 'new-room',
205 title: 'Nouveau salon',205 title: 'Nouveau salon',
206- icon: '/aim/chat-room.svg',206+ icon: '/aim/chat-room-16.png',
207 props: {}207 props: {}
208 });208 });
209 }209 }
@@ -213,7 +213,7 @@ class DesktopState {
213 id: 'preferences',213 id: 'preferences',
214 kind: 'preferences',214 kind: 'preferences',
215 title: 'Préférences',215 title: 'Préférences',
216- icon: '/aim/prefs.svg',216+ icon: '/aim/xp-control-panel-16.png',
217 props: {}217 props: {}
218 });218 });
219 }219 }
@@ -223,7 +223,7 @@ class DesktopState {
223 id: 'about',223 id: 'about',
224 kind: 'about',224 kind: 'about',
225 title: 'À propos de PDR AIM',225 title: 'À propos de PDR AIM',
226- icon: '/aim/help.svg',226+ icon: '/aim/xp-help-16.png',
227 props: {}227 props: {}
228 });228 });
229 }229 }
A static/aim/add-buddy-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/add-buddy-48.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/aim-help.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/aim-setup.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/aim-signon.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/aol-logo-16.png +0 -0 binary file: no text diff

binary file: no text diff

D static/aim/away.svg +0 -4
@@ -1,4 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <rect x="1" y="3" width="14" height="10" fill="#fff8c4" stroke="#b58b00"/>
3- <path d="M3 6h10M3 8.5h7M3 11h5" stroke="#b58b00" stroke-width="1"/>
4-</svg>
@@ -1,4 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <rect x="1" y="3" width="14" height="10" fill="#fff8c4" stroke="#b58b00"/>
3- <path d="M3 6h10M3 8.5h7M3 11h5" stroke="#b58b00" stroke-width="1"/>
4-</svg>
A static/aim/chat-room-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/chat-room-48.png +0 -0 binary file: no text diff

binary file: no text diff

D static/aim/chat-room.svg +0 -6
@@ -1,6 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <circle cx="5" cy="5" r="2.5" fill="#f6c700" stroke="#8a6d00"/>
3- <circle cx="11" cy="5" r="2.5" fill="#f6c700" stroke="#8a6d00"/>
4- <path d="M1 14c0-3 2-5 4-5s4 2 4 5z" fill="#3b7ddd"/>
5- <path d="M7 14c0-3 2-5 4-5s4 2 4 5z" fill="#e0512f"/>
6-</svg>
@@ -1,6 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <circle cx="5" cy="5" r="2.5" fill="#f6c700" stroke="#8a6d00"/>
3- <circle cx="11" cy="5" r="2.5" fill="#f6c700" stroke="#8a6d00"/>
4- <path d="M1 14c0-3 2-5 4-5s4 2 4 5z" fill="#3b7ddd"/>
5- <path d="M7 14c0-3 2-5 4-5s4 2 4 5z" fill="#e0512f"/>
6-</svg>
D static/aim/help.svg +0 -5
@@ -1,5 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2- <defs><radialGradient id="b" cx="0.35" cy="0.3" r="0.8"><stop offset="0" stop-color="#8fc2ff"/><stop offset="1" stop-color="#1d4fa8"/></radialGradient></defs>
3- <circle cx="16" cy="16" r="14" fill="url(#b)" stroke="#0f3d9a" stroke-width="1.2"/>
4- <text x="16" y="23" text-anchor="middle" font-family="Tahoma,Arial,sans-serif" font-weight="bold" font-size="20" fill="#fff">?</text>
5-</svg>
@@ -1,5 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2- <defs><radialGradient id="b" cx="0.35" cy="0.3" r="0.8"><stop offset="0" stop-color="#8fc2ff"/><stop offset="1" stop-color="#1d4fa8"/></radialGradient></defs>
3- <circle cx="16" cy="16" r="14" fill="url(#b)" stroke="#0f3d9a" stroke-width="1.2"/>
4- <text x="16" y="23" text-anchor="middle" font-family="Tahoma,Arial,sans-serif" font-weight="bold" font-size="20" fill="#fff">?</text>
5-</svg>
D static/aim/im.svg +0 -5
@@ -1,5 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <path d="M1 2h14v9H6l-3 3v-3H1z" fill="#fff" stroke="#1d4fa8"/>
3- <rect x="3" y="4" width="10" height="1.5" fill="#1d4fa8"/>
4- <rect x="3" y="7" width="7" height="1.5" fill="#1d4fa8"/>
5-</svg>
@@ -1,5 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <path d="M1 2h14v9H6l-3 3v-3H1z" fill="#fff" stroke="#1d4fa8"/>
3- <rect x="3" y="4" width="10" height="1.5" fill="#1d4fa8"/>
4- <rect x="3" y="7" width="7" height="1.5" fill="#1d4fa8"/>
5-</svg>
D static/aim/info.svg +0 -5
@@ -1,5 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <circle cx="8" cy="8" r="7" fill="#3b7ddd" stroke="#1d4fa8"/>
3- <rect x="7" y="7" width="2" height="5" fill="#fff"/>
4- <circle cx="8" cy="4.5" r="1.2" fill="#fff"/>
5-</svg>
@@ -1,5 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2- <circle cx="8" cy="8" r="7" fill="#3b7ddd" stroke="#1d4fa8"/>
3- <rect x="7" y="7" width="2" height="5" fill="#fff"/>
4- <circle cx="8" cy="4.5" r="1.2" fill="#fff"/>
5-</svg>
D static/aim/prefs.svg +0 -7
@@ -1,7 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2- <defs><linearGradient id="g" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#e8e8e8"/><stop offset="1" stop-color="#8d8d8d"/></linearGradient></defs>
3- <g transform="translate(16 16)" fill="url(#g)" stroke="#3a3a3a" stroke-width="1.2">
4- <path d="M-3 -14h6l1 3.5 3 1.3 3.2-1.8 4.2 4.2-1.8 3.2 1.3 3 3.5 1v6l-3.5 1-1.3 3 1.8 3.2-4.2 4.2-3.2-1.8-3 1.3-1 3.5h-6l-1-3.5-3-1.3-3.2 1.8-4.2-4.2 1.8-3.2-1.3-3-3.5-1v-6l3.5-1 1.3-3-1.8-3.2 4.2-4.2 3.2 1.8 3-1.3z"/>
5- <circle r="4.5" fill="#3b7ddd"/>
6- </g>
7-</svg>
@@ -1,7 +0,0 @@
1-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2- <defs><linearGradient id="g" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#e8e8e8"/><stop offset="1" stop-color="#8d8d8d"/></linearGradient></defs>
3- <g transform="translate(16 16)" fill="url(#g)" stroke="#3a3a3a" stroke-width="1.2">
4- <path d="M-3 -14h6l1 3.5 3 1.3 3.2-1.8 4.2 4.2-1.8 3.2 1.3 3 3.5 1v6l-3.5 1-1.3 3 1.8 3.2-4.2 4.2-3.2-1.8-3 1.3-1 3.5h-6l-1-3.5-3-1.3-3.2 1.8-4.2-4.2 1.8-3.2-1.3-3-3.5-1v-6l3.5-1 1.3-3-1.8-3.2 4.2-4.2 3.2 1.8 3-1.3z"/>
5- <circle r="4.5" fill="#3b7ddd"/>
6- </g>
7-</svg>
A static/aim/profile-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/profile-48.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-control-panel-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-control-panel-48.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-help-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-help-48.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-info-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-info-48.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-note-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-note-48.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-volume-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-volume-48.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-volume-muted-16.png +0 -0 binary file: no text diff

binary file: no text diff

A static/aim/xp-volume-muted-48.png +0 -0 binary file: no text diff

binary file: no text diff

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 3

Tags 8

↑↓ moveenter openesc close