From 693935588ef5b43022ff346eddf622cc4d66a68f Mon Sep 17 00:00:00 2001
From: seonghobae <8172694+seonghobae@users.noreply.github.com>
Date: Thu, 16 Jul 2026 13:59:58 +0000
Subject: [PATCH 1/2] =?UTF-8?q?feat(ui):=20=EC=8A=A4=EC=BD=94=EC=96=B4=20?=
=?UTF-8?q?=EB=B7=B0=EC=96=B4=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B2=84?=
=?UTF-8?q?=ED=8A=BC=20=ED=88=B4=ED=8C=81=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?=
=?UTF-8?q?=20=EC=A0=91=EA=B7=BC=EC=84=B1=20=EA=B0=9C=EC=84=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/desktop/src/features/score/ScoreView.tsx | 1 +
.../src/features/score/ScoreViewer.test.tsx | 8 ++++----
apps/desktop/src/features/score/ScoreViewer.tsx | 14 ++++++++++----
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/apps/desktop/src/features/score/ScoreView.tsx b/apps/desktop/src/features/score/ScoreView.tsx
index 72732450..729f6056 100644
--- a/apps/desktop/src/features/score/ScoreView.tsx
+++ b/apps/desktop/src/features/score/ScoreView.tsx
@@ -197,6 +197,7 @@ export function ScoreView({ song, projectId, onSongUpdate }: ScoreViewProps) {
size="icon"
onClick={projectId ? () => void handleRemove(projectId, attachment) : undefined}
disabled={!projectId}
+ title={`${t("scoreRemove")}: ${attachment.fileName}`}
aria-label={`${t("scoreRemove")}: ${attachment.fileName}`}
className="size-10 border-rose-300/25 text-rose-200 hover:bg-rose-400/10"
>
diff --git a/apps/desktop/src/features/score/ScoreViewer.test.tsx b/apps/desktop/src/features/score/ScoreViewer.test.tsx
index 3ac2dd60..acd19f65 100644
--- a/apps/desktop/src/features/score/ScoreViewer.test.tsx
+++ b/apps/desktop/src/features/score/ScoreViewer.test.tsx
@@ -120,8 +120,8 @@ describe("ScoreViewer", () => {
expect(page.render).toHaveBeenCalled();
});
expect(page.getViewport).toHaveBeenCalledWith({ scale: 1 });
- expect(screen.getByRole("button", { name: "Previous page" })).toBeDisabled();
- expect(screen.getByRole("button", { name: "Next page" })).toBeEnabled();
+ expect(screen.getByRole("button", { name: "Previous page" })).toHaveAttribute("aria-disabled", "true");
+ expect(screen.getByRole("button", { name: "Next page" })).toHaveAttribute("aria-disabled", "false");
});
it("shows the file name when provided", async () => {
@@ -174,14 +174,14 @@ describe("ScoreViewer", () => {
expect(await screen.findByText("Page 1 of 3")).toBeInTheDocument();
const previousButton = screen.getByRole("button", { name: "Previous page" });
const nextButton = screen.getByRole("button", { name: "Next page" });
- expect(previousButton).toBeDisabled();
+ expect(previousButton).toHaveAttribute("aria-disabled", "true");
fireEvent.click(nextButton);
expect(screen.getByText("Page 2 of 3")).toBeInTheDocument();
fireEvent.click(nextButton);
expect(screen.getByText("Page 3 of 3")).toBeInTheDocument();
- expect(nextButton).toBeDisabled();
+ expect(nextButton).toHaveAttribute("aria-disabled", "true");
await waitFor(() => {
expect(doc.getPage).toHaveBeenCalledWith(3);
diff --git a/apps/desktop/src/features/score/ScoreViewer.tsx b/apps/desktop/src/features/score/ScoreViewer.tsx
index 82692469..abd518f2 100644
--- a/apps/desktop/src/features/score/ScoreViewer.tsx
+++ b/apps/desktop/src/features/score/ScoreViewer.tsx
@@ -257,6 +257,7 @@ export function ScoreViewer({ data, fileName, onStatusChange }: ScoreViewerProps
variant="outline"
size="icon-lg"
className="size-12"
+ title={t("scoreViewerZoomOut")}
aria-label={t("scoreViewerZoomOut")}
onClick={zoomOut}
>
@@ -266,6 +267,7 @@ export function ScoreViewer({ data, fileName, onStatusChange }: ScoreViewerProps
variant="outline"
size="icon-lg"
className="size-12"
+ title={t("scoreViewerZoomIn")}
aria-label={t("scoreViewerZoomIn")}
onClick={zoomIn}
>
@@ -291,9 +293,11 @@ export function ScoreViewer({ data, fileName, onStatusChange }: ScoreViewerProps
variant="outline"
size="icon-lg"
className="size-14"
+ title={t("scoreViewerPrevPage")}
aria-label={t("scoreViewerPrevPage")}
- disabled={pageNumber <= 1}
- onClick={goToPreviousPage}
+ aria-disabled={pageNumber <= 1}
+ tabIndex={0}
+ onClick={pageNumber <= 1 ? undefined : goToPreviousPage}
>
@@ -304,9 +308,11 @@ export function ScoreViewer({ data, fileName, onStatusChange }: ScoreViewerProps
variant="outline"
size="icon-lg"
className="size-14"
+ title={t("scoreViewerNextPage")}
aria-label={t("scoreViewerNextPage")}
- disabled={pageNumber >= pageCount}
- onClick={goToNextPage}
+ aria-disabled={pageNumber >= pageCount}
+ tabIndex={0}
+ onClick={pageNumber >= pageCount ? undefined : goToNextPage}
>
From 42fb0699c8665edd76f6301bfe81b393a754beee Mon Sep 17 00:00:00 2001
From: seonghobae <8172694+seonghobae@users.noreply.github.com>
Date: Thu, 16 Jul 2026 14:16:46 +0000
Subject: [PATCH 2/2] =?UTF-8?q?feat(ui):=20=EC=8A=A4=EC=BD=94=EC=96=B4=20?=
=?UTF-8?q?=EB=B7=B0=EC=96=B4=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B2=84?=
=?UTF-8?q?=ED=8A=BC=20=ED=88=B4=ED=8C=81=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?=
=?UTF-8?q?=20=EC=A0=91=EA=B7=BC=EC=84=B1=20=EA=B0=9C=EC=84=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit