From 2f5c51c1ca5e9726a590211416796a772beb9511 Mon Sep 17 00:00:00 2001
From: ShittyKopper <shittykopper@w.on-t.work>
Date: Mon, 27 Nov 2023 22:12:20 +0300
Subject: [PATCH 1/6] fix: don't load text of empty draft

this fixes a small ux quirk where blanking a reply and cancelling it
results in an empty reply next time you try to reply to that note, accidentally
un-tagging everyone
---
 packages/frontend/src/components/MkPostForm.vue | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index c9784fc40f..a209128d55 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -923,12 +923,19 @@ onMounted(() => {
 		if (!props.instant && !props.mention && !props.specified && !props.mock) {
 			const draft = JSON.parse(miLocalStorage.getItem('drafts') ?? '{}')[draftKey.value];
 			if (draft) {
-				text.value = draft.data.text;
+				if (typeof draft.data.text === 'string' && draft.data.text.trim()) {
+					text.value = draft.data.text;
+				}
+
+				if (typeof draft.data.cw === 'string' && draft.data.cw.trim()) {
+					cw.value = draft.data.cw;
+				}
+
 				useCw.value = draft.data.useCw;
-				cw.value = draft.data.cw;
 				visibility.value = draft.data.visibility;
 				localOnly.value = draft.data.localOnly;
 				files.value = (draft.data.files || []).filter(draftFile => draftFile);
+
 				if (draft.data.poll) {
 					poll.value = draft.data.poll;
 				}

From 62a5793e7104b1806a7b7ebe270632af1a4cd9c0 Mon Sep 17 00:00:00 2001
From: ShittyKopper <shittykopper@w.on-t.work>
Date: Mon, 27 Nov 2023 23:55:43 +0300
Subject: [PATCH 2/6] fix: don't show filename as alt text

---
 packages/frontend/src/components/MkMediaBanner.vue | 2 +-
 packages/frontend/src/components/MkMediaImage.vue  | 8 ++++----
 packages/frontend/src/components/MkMediaList.vue   | 4 ++--
 packages/frontend/src/components/MkMediaVideo.vue  | 2 +-
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/frontend/src/components/MkMediaBanner.vue b/packages/frontend/src/components/MkMediaBanner.vue
index 4594c8a1db..7b0387cefe 100644
--- a/packages/frontend/src/components/MkMediaBanner.vue
+++ b/packages/frontend/src/components/MkMediaBanner.vue
@@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 		<audio
 			ref="audioEl"
 			:src="media.url"
-			:title="media.name"
+			:title="media.comment ?? undefined"
 			controls
 			preload="metadata"
 		/>
diff --git a/packages/frontend/src/components/MkMediaImage.vue b/packages/frontend/src/components/MkMediaImage.vue
index 0040f00dc2..ef57cea32a 100644
--- a/packages/frontend/src/components/MkMediaImage.vue
+++ b/packages/frontend/src/components/MkMediaImage.vue
@@ -8,10 +8,10 @@ SPDX-License-Identifier: AGPL-3.0-only
 	<component
 		:is="disableImageLink ? 'div' : 'a'"
 		v-bind="disableImageLink ? {
-			title: image.name,
+			title: image.comment,
 			class: $style.imageContainer,
 		} : {
-			title: image.name,
+			title: image.comment,
 			class: $style.imageContainer,
 			href: image.url,
 			style: 'cursor: zoom-in;'
@@ -22,8 +22,8 @@ SPDX-License-Identifier: AGPL-3.0-only
 			:src="(defaultStore.state.dataSaver.media && hide) ? null : url"
 			:forceBlurhash="hide"
 			:cover="hide || cover"
-			:alt="image.comment || image.name"
-			:title="image.comment || image.name"
+			:alt="image.comment"
+			:title="image.comment"
 			:width="image.properties.width"
 			:height="image.properties.height"
 			:style="hide ? 'filter: brightness(0.7);' : null"
diff --git a/packages/frontend/src/components/MkMediaList.vue b/packages/frontend/src/components/MkMediaList.vue
index 46e32ef2d8..ff227b0ef9 100644
--- a/packages/frontend/src/components/MkMediaList.vue
+++ b/packages/frontend/src/components/MkMediaList.vue
@@ -156,8 +156,8 @@ onMounted(() => {
 			[itemData.w, itemData.h] = [itemData.h, itemData.w];
 		}
 		itemData.msrc = file.thumbnailUrl;
-		itemData.alt = file.comment ?? file.name;
-		itemData.comment = file.comment ?? file.name;
+		itemData.alt = file.comment ?? undefined;
+		itemData.comment = file.comment;
 		itemData.thumbCropped = true;
 	});
 
diff --git a/packages/frontend/src/components/MkMediaVideo.vue b/packages/frontend/src/components/MkMediaVideo.vue
index 4f8560f0f1..a1950b110a 100644
--- a/packages/frontend/src/components/MkMediaVideo.vue
+++ b/packages/frontend/src/components/MkMediaVideo.vue
@@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 		ref="videoEl"
 		:class="$style.video"
 		:poster="video.thumbnailUrl"
-		:title="video.comment"
+		:title="video.comment ?? undefined"
 		:alt="video.comment"
 		preload="none"
 		controls

From 32318bbbfa1e67913100c3d03a3ee64393831d50 Mon Sep 17 00:00:00 2001
From: ShittyKopper <shittykopper@w.on-t.work>
Date: Sat, 23 Dec 2023 15:20:51 +0300
Subject: [PATCH 3/6] fix: un-hardcode more border radius values

all of these are blind find and replace, no clue if they end up breaking
anything
---
 packages/frontend/src/components/MkChannelPreview.vue         | 2 +-
 packages/frontend/src/components/MkCode.core.vue              | 2 +-
 packages/frontend/src/components/MkCode.vue                   | 4 ++--
 packages/frontend/src/components/MkCodeEditor.vue             | 4 ++--
 packages/frontend/src/components/MkEmojiPicker.section.vue    | 4 ++--
 packages/frontend/src/components/MkPostForm.vue               | 2 +-
 .../src/components/global/MkMisskeyFlavoredMarkdown.ts        | 2 +-
 .../src/pages/settings/avatar-decoration.decoration.vue       | 2 +-
 packages/frontend/src/pages/settings/emoji-picker.vue         | 4 ++--
 packages/frontend/src/pages/user/raw.vue                      | 2 +-
 10 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/packages/frontend/src/components/MkChannelPreview.vue b/packages/frontend/src/components/MkChannelPreview.vue
index 96590a469b..f870b0eef1 100644
--- a/packages/frontend/src/components/MkChannelPreview.vue
+++ b/packages/frontend/src/components/MkChannelPreview.vue
@@ -198,7 +198,7 @@ const bannerStyle = computed(() => {
 	transform: translate(25%, -25%);
 	background-color: var(--accent);
 	border: solid var(--bg) 4px;
-	border-radius: 100%;
+	border-radius: var(--radius-full);
 	width: 1.5rem;
 	height: 1.5rem;
 	aspect-ratio: 1 / 1;
diff --git a/packages/frontend/src/components/MkCode.core.vue b/packages/frontend/src/components/MkCode.core.vue
index 19418cd4da..579c72b186 100644
--- a/packages/frontend/src/components/MkCode.core.vue
+++ b/packages/frontend/src/components/MkCode.core.vue
@@ -62,7 +62,7 @@ watch(() => props.lang, (to) => {
 	padding: 1em;
 	margin: .5em 0;
 	overflow: auto;
-	border-radius: 8px;
+	border-radius: var(--radius-sm);
 
 	& pre,
 	& code {
diff --git a/packages/frontend/src/components/MkCode.vue b/packages/frontend/src/components/MkCode.vue
index 2c016e4d7c..7346d5782b 100644
--- a/packages/frontend/src/components/MkCode.vue
+++ b/packages/frontend/src/components/MkCode.vue
@@ -56,7 +56,7 @@ const XCode = defineAsyncComponent(() => import('@/components/MkCode.core.vue'))
 	padding: 1em;
 	margin: .5em 0;
 	overflow: auto;
-	border-radius: 8px;
+	border-radius: var(--radius-sm);
 }
 
 .codeBlockFallbackCode {
@@ -74,7 +74,7 @@ const XCode = defineAsyncComponent(() => import('@/components/MkCode.core.vue'))
 	cursor: pointer;
 
 	box-sizing: border-box;
-	border-radius: 8px;
+	border-radius: var(--radius-sm);
 	padding: 24px;
 	margin-top: 4px;
 	color: #D4D4D4;
diff --git a/packages/frontend/src/components/MkCodeEditor.vue b/packages/frontend/src/components/MkCodeEditor.vue
index c9bcc71196..c1aaa7f1ff 100644
--- a/packages/frontend/src/components/MkCodeEditor.vue
+++ b/packages/frontend/src/components/MkCodeEditor.vue
@@ -161,7 +161,7 @@ watch(v, newValue => {
 	overflow-y: hidden;
 	box-sizing: border-box;
 	margin: 0;
-	border-radius: 6px;
+	border-radius: var(--radius-sm);
 	padding: 0;
 	color: var(--fg);
 	border: solid 1px var(--panel);
@@ -202,7 +202,7 @@ watch(v, newValue => {
 	caret-color: rgb(225, 228, 232);
 	background-color: transparent;
 	border: 0;
-	border-radius: 6px;
+	border-radius: var(--radius-sm);
 	outline: 0;
 	min-width: calc(100% - 24px);
 	height: 100%;
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.vue b/packages/frontend/src/components/MkEmojiPicker.section.vue
index 49c146b68d..ea9d7a0d26 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.vue
+++ b/packages/frontend/src/components/MkEmojiPicker.section.vue
@@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 <template>
 <!-- このコンポーネントの要素のclassは親から利用されるのでむやみに弄らないこと -->
 <!-- フォルダの中にはカスタム絵文字だけ(Unicode絵文字もこっち) -->
-<section v-if="!hasChildSection" v-panel style="border-radius: 6px; border-bottom: 0.5px solid var(--divider);">
+<section v-if="!hasChildSection" v-panel style="border-radius: var(--radius-sm); border-bottom: 0.5px solid var(--divider);">
 	<header class="_acrylic" @click="shown = !shown">
 		<i class="toggle ti-fw" :class="shown ? 'ph-caret-down ph-bold ph-lg' : 'ph-caret-up ph-bold ph-lg'"></i> <slot></slot> (<i class="ph-bold ph-lg"></i>:{{ emojis.length }})
 	</header>
@@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 	</div>
 </section>
 <!-- フォルダの中にはカスタム絵文字やフォルダがある -->
-<section v-else v-panel style="border-radius: 6px; border-bottom: 0.5px solid var(--divider);">
+<section v-else v-panel style="border-radius: var(--radius-sm); border-bottom: 0.5px solid var(--divider);">
 	<header class="_acrylic" @click="shown = !shown">
 		<i class="toggle ti-fw" :class="shown ? 'ph-caret-down ph-bold ph-lg' : 'ph-caret-up ph-bold ph-lg'"></i> <slot></slot> (<i class="ph-folder ph-bold ph-lg"></i>:{{ customEmojiTree.length }} <i class="ti ti-icons ti-fw"></i>:{{ emojis.length }})
 	</header>
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index a209128d55..b26ce2932a 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -1059,7 +1059,7 @@ defineExpose({
 	left: 12px;
 	width: 5px;
 	height: 100% ;
-	border-radius: 999px;
+	border-radius: var(--radius-ellipse);
 	pointer-events: none;
 }
 
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
index 83b7ef2e78..4c6034c901 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
@@ -277,7 +277,7 @@ export default function(props: MfmProps) {
 						const child = token.children[0];
 						const unixtime = parseInt(child.type === 'text' ? child.props.text : '');
 						return h('span', {
-							style: 'display: inline-block; font-size: 90%; border: solid 1px var(--divider); border-radius: 999px; padding: 4px 10px 4px 6px;',
+							style: 'display: inline-block; font-size: 90%; border: solid 1px var(--divider); border-radius: var(--radius-ellipse); padding: 4px 10px 4px 6px;',
 						}, [
 							h('i', {
 								class: 'ph-clock ph-bold ph-lg',
diff --git a/packages/frontend/src/pages/settings/avatar-decoration.decoration.vue b/packages/frontend/src/pages/settings/avatar-decoration.decoration.vue
index 9c95b5547e..fcd74002f2 100644
--- a/packages/frontend/src/pages/settings/avatar-decoration.decoration.vue
+++ b/packages/frontend/src/pages/settings/avatar-decoration.decoration.vue
@@ -42,7 +42,7 @@ const emit = defineEmits<{
 	cursor: pointer;
 	padding: 16px 16px 28px 16px;
 	border: solid 2px var(--divider);
-	border-radius: 8px;
+	border-radius: var(--radius-sm);
 	text-align: center;
 	font-size: 90%;
 	overflow: clip;
diff --git a/packages/frontend/src/pages/settings/emoji-picker.vue b/packages/frontend/src/pages/settings/emoji-picker.vue
index 61f3332122..1a07790e75 100644
--- a/packages/frontend/src/pages/settings/emoji-picker.vue
+++ b/packages/frontend/src/pages/settings/emoji-picker.vue
@@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 
 		<div class="_gaps">
 			<div>
-				<div v-panel style="border-radius: 6px;">
+				<div v-panel style="border-radius: var(--radius-sm);">
 					<Sortable
 						v-model="pinnedEmojisForReaction"
 						:class="$style.emojis"
@@ -52,7 +52,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 
 		<div class="_gaps">
 			<div>
-				<div v-panel style="border-radius: 6px;">
+				<div v-panel style="border-radius: var(--radius-sm);">
 					<Sortable
 						v-model="pinnedEmojis"
 						:class="$style.emojis"
diff --git a/packages/frontend/src/pages/user/raw.vue b/packages/frontend/src/pages/user/raw.vue
index 0c0bfc29ca..ebe40d5860 100644
--- a/packages/frontend/src/pages/user/raw.vue
+++ b/packages/frontend/src/pages/user/raw.vue
@@ -107,7 +107,7 @@ const suspended = computed(() => props.user.isSuspended ?? false);
 	> .moderator {
 		display: inline-block;
 		border: solid 1px;
-		border-radius: 6px;
+		border-radius: var(--radius-sm);
 		padding: 2px 6px;
 		font-size: 85%;
 	}

From aafdcccd247fd5fdef5b14fae033e87bf058aec5 Mon Sep 17 00:00:00 2001
From: ShittyKopper <shittykopper@w.on-t.work>
Date: Tue, 26 Dec 2023 21:56:34 +0300
Subject: [PATCH 4/6] fix: note history not working

---
 packages/frontend/src/components/SkOldNoteWindow.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/src/components/SkOldNoteWindow.vue b/packages/frontend/src/components/SkOldNoteWindow.vue
index 237032c9d5..f8de28e346 100644
--- a/packages/frontend/src/components/SkOldNoteWindow.vue
+++ b/packages/frontend/src/components/SkOldNoteWindow.vue
@@ -132,7 +132,7 @@ const isRenote = (
 );
 
 const el = shallowRef<HTMLElement>();
-let appearNote = computed(() => isRenote ? note.value.renote as Misskey.entities.Note : note);
+let appearNote = computed(() => isRenote ? note.value.renote as Misskey.entities.Note : note.value);
 const renoteUrl = appearNote.value.renote ? appearNote.value.renote.url : null;
 const renoteUri = appearNote.value.renote ? appearNote.value.renote.uri : null;
 

From 6242f371114ad691041676613845754d110143a0 Mon Sep 17 00:00:00 2001
From: ShittyKopper <shittykopper@w.on-t.work>
Date: Tue, 26 Dec 2023 21:40:49 +0300
Subject: [PATCH 5/6] Partial Revert "fix: fix: notification count position"

Firefox now implements :has. There is no reason for this workaround

This partially reverts commit 4f0bc185af86096c1337d35119e6444253b69682.
---
 packages/frontend/src/ui/_common_/navbar.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/src/ui/_common_/navbar.vue b/packages/frontend/src/ui/_common_/navbar.vue
index 184d32edd7..20d4564770 100644
--- a/packages/frontend/src/ui/_common_/navbar.vue
+++ b/packages/frontend/src/ui/_common_/navbar.vue
@@ -29,7 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 					v-on="navbarItemDef[item].action ? { click: navbarItemDef[item].action } : {}"
 				>
 					<i class="ti-fw" :class="[$style.itemIcon, navbarItemDef[item].icon]"></i><span :class="$style.itemText">{{ navbarItemDef[item].title }}</span>
-					<span v-if="navbarItemDef[item].indicated" :class="[$style.itemIndicator, { [$style.hasItemIndicateValueIcon]: navbarItemDef[item].indicateValue }]">
+					<span v-if="navbarItemDef[item].indicated" :class="$style.itemIndicator">
 						<span v-if="navbarItemDef[item].indicateValue" class="_indicateCounter" :class="$style.itemIndicateValueIcon">{{ navbarItemDef[item].indicateValue }}</span>
 						<i v-else class="_indicatorCircle"></i>
 					</span>
@@ -315,7 +315,7 @@ function more(ev: MouseEvent) {
 		font-size: 8px;
 		animation: blink 1s infinite;
 
-		&.hasItemIndicateValueIcon {
+		&:has(.itemIndicateValueIcon) {
 			animation: none;
 			left: auto;
 			right: 40px;

From 5d746d4ee5fca16392ef8b61d0277bc16af540b4 Mon Sep 17 00:00:00 2001
From: ShittyKopper <shittykopper@w.on-t.work>
Date: Wed, 27 Dec 2023 13:19:29 +0300
Subject: [PATCH 6/6] fix: hide photoswipe alt text when its empty

---
 packages/frontend/src/components/MkMediaList.vue | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/packages/frontend/src/components/MkMediaList.vue b/packages/frontend/src/components/MkMediaList.vue
index ff227b0ef9..8f73018734 100644
--- a/packages/frontend/src/components/MkMediaList.vue
+++ b/packages/frontend/src/components/MkMediaList.vue
@@ -172,6 +172,12 @@ onMounted(() => {
 				el.appendChild(textBox);
 
 				pwsp.on('change', (a) => {
+					if (pwsp.currSlide?.data.comment) {
+						textBox.style.display = '';
+					} else {
+						textBox.style.display = 'none';
+					}
+
 					textBox.textContent = pwsp.currSlide.data.comment;
 				});
 			},