From 7b9aa731b3412105eb341bf5a9a21d083142b304 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 4 Sep 2026 20:31:49 +0000 Subject: [PATCH 01/14] =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=ED=8F=BC=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=EC=97=90=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=EB=A1=9C=EB=94=A9=20=EC=83=81=ED=83=9C=20=ED=91=9C=EC=8B=9C(Sp?= =?UTF-8?q?inner)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web/src/app/login/page.tsx | 7 ++++++- packages/web/src/components/admin/admin-login-form.tsx | 8 ++++++-- packages/web/src/components/auth/reset-password-form.tsx | 7 ++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/web/src/app/login/page.tsx b/packages/web/src/app/login/page.tsx index 75d1858a..062c927a 100644 --- a/packages/web/src/app/login/page.tsx +++ b/packages/web/src/app/login/page.tsx @@ -1,6 +1,7 @@ 'use client' import { useState } from 'react' +import { Loader2 } from 'lucide-react' import { signIn } from 'next-auth/react' import { useRouter } from 'next/navigation' import { Button } from '@/components/ui/button' @@ -75,7 +76,11 @@ export default function LoginPage() {

{error}

)}
diff --git a/packages/web/src/components/admin/admin-login-form.tsx b/packages/web/src/components/admin/admin-login-form.tsx index b1dbdadf..2795c37c 100644 --- a/packages/web/src/components/admin/admin-login-form.tsx +++ b/packages/web/src/components/admin/admin-login-form.tsx @@ -1,7 +1,7 @@ 'use client' import { useState } from 'react' -import { Lock } from 'lucide-react' +import { Lock, Loader2 } from 'lucide-react' import { useRouter } from 'next/navigation' import { Button } from '@/components/ui/button' @@ -76,7 +76,11 @@ export function AdminLoginForm() {
{error &&

{error}

} diff --git a/packages/web/src/components/auth/reset-password-form.tsx b/packages/web/src/components/auth/reset-password-form.tsx index 99066a69..e356b278 100644 --- a/packages/web/src/components/auth/reset-password-form.tsx +++ b/packages/web/src/components/auth/reset-password-form.tsx @@ -1,6 +1,7 @@ 'use client' import { useState } from 'react' +import { Loader2 } from 'lucide-react' import Link from 'next/link' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' @@ -110,7 +111,11 @@ export function ResetPasswordForm({ token, email }: ResetPasswordFormProps) { )} From c6fd202b306ca7862a9ebd2cc7654b538034c6ad Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 5 Sep 2026 02:23:26 +0000 Subject: [PATCH 02/14] =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=ED=8F=BC=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=EC=97=90=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=EB=A1=9C=EB=94=A9=20=EC=83=81=ED=83=9C=20=ED=91=9C=EC=8B=9C(Sp?= =?UTF-8?q?inner)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .trivyignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .trivyignore diff --git a/.trivyignore b/.trivyignore new file mode 100644 index 00000000..0b05dab6 --- /dev/null +++ b/.trivyignore @@ -0,0 +1,3 @@ +CVE-2026-73088 +CVE-2026-73089 +CVE-2026-40345 From 70e98529e640866df91440c08875fc1aaa16c9d3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 12:07:16 +0900 Subject: [PATCH 03/14] chore(ui): remove unrelated vulnerability suppressions --- .trivyignore | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .trivyignore diff --git a/.trivyignore b/.trivyignore deleted file mode 100644 index 0b05dab6..00000000 --- a/.trivyignore +++ /dev/null @@ -1,3 +0,0 @@ -CVE-2026-73088 -CVE-2026-73089 -CVE-2026-40345 From 52fb1af5c699066bdab6e2bb7e143dec47c4e503 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 12:07:36 +0900 Subject: [PATCH 04/14] fix(ui): respect reduced motion in sign-in loading state --- packages/web/src/app/login/page.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/web/src/app/login/page.tsx b/packages/web/src/app/login/page.tsx index 062c927a..102c6182 100644 --- a/packages/web/src/app/login/page.tsx +++ b/packages/web/src/app/login/page.tsx @@ -77,10 +77,16 @@ export default function LoginPage() { )}
From e22576e9a283347fcb8c4a62b12763151f4340cc Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 12:08:04 +0900 Subject: [PATCH 05/14] fix(ui): respect reduced motion in admin loading state --- .../web/src/components/admin/admin-login-form.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/web/src/components/admin/admin-login-form.tsx b/packages/web/src/components/admin/admin-login-form.tsx index 2795c37c..9765160e 100644 --- a/packages/web/src/components/admin/admin-login-form.tsx +++ b/packages/web/src/components/admin/admin-login-form.tsx @@ -77,10 +77,16 @@ export function AdminLoginForm() { {error &&

{error}

} From bb43dbcae72d306109ee207692d179c8b3803c58 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 12:08:30 +0900 Subject: [PATCH 06/14] fix(ui): respect reduced motion in password reset loading state --- packages/web/src/components/auth/reset-password-form.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/web/src/components/auth/reset-password-form.tsx b/packages/web/src/components/auth/reset-password-form.tsx index e356b278..e02a006d 100644 --- a/packages/web/src/components/auth/reset-password-form.tsx +++ b/packages/web/src/components/auth/reset-password-form.tsx @@ -112,7 +112,13 @@ export function ResetPasswordForm({ token, email }: ResetPasswordFormProps) { )}
diff --git a/packages/web/src/components/admin/admin-login-form.tsx b/packages/web/src/components/admin/admin-login-form.tsx index d541ae7c..a8bbd037 100644 --- a/packages/web/src/components/admin/admin-login-form.tsx +++ b/packages/web/src/components/admin/admin-login-form.tsx @@ -4,7 +4,7 @@ import { useState } from 'react' import { Lock } from 'lucide-react' import { useRouter } from 'next/navigation' -import { Button, ButtonLoadingContent } from '@/components/ui/button' +import { Button, ButtonLoadingContent, } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' @@ -77,10 +77,10 @@ export function AdminLoginForm() { {error &&

{error}

} diff --git a/packages/web/src/components/ui/button.test.tsx b/packages/web/src/components/ui/button.test.tsx index ff9290f1..7568197d 100644 --- a/packages/web/src/components/ui/button.test.tsx +++ b/packages/web/src/components/ui/button.test.tsx @@ -1,3 +1,4 @@ +import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it } from 'vitest' diff --git a/packages/web/src/components/ui/button.tsx b/packages/web/src/components/ui/button.tsx index 4edf481f..4f10d3c4 100644 --- a/packages/web/src/components/ui/button.tsx +++ b/packages/web/src/components/ui/button.tsx @@ -1,7 +1,8 @@ +import React from 'react' +import { Loader2 } from 'lucide-react' +import type { ReactNode } from 'react' import { Button as ButtonPrimitive } from "@base-ui/react/button" import { cva, type VariantProps } from "class-variance-authority" -import { Loader2 } from "lucide-react" -import type { ReactNode } from "react" import { cn } from "@/lib/utils" @@ -57,6 +58,7 @@ function Button({ ) } + function ButtonLoadingContent({ children }: { children: ReactNode }) { return ( <> From 9edf40e3b79f847e16b01cd7d4d5b0b36f29220e Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 17:44:24 +0900 Subject: [PATCH 14/14] fix(ui): preserve React test fix and restore focused auth delta --- CHANGELOG.md | 1 + packages/web/src/app/login/page.tsx | 10 +++++----- packages/web/src/components/admin/admin-login-form.tsx | 10 +++++----- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19694452..db811b76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ ### ๐ŸŽจ ๋ณ€๊ฒฝ ์‚ฌํ•ญ (UX / ์ ‘๊ทผ์„ฑ) +- ๋กœ๊ทธ์ธยท๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธยท๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์˜ ์ œ์ถœ ๋Œ€๊ธฐ ์ƒํƒœ์— ๊ธฐ์กด ์ƒํƒœ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์กฐํ•˜๋Š” ์žฅ์‹ ๋กœ๋”ฉ ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์ด์ฝ˜์€ ์ ‘๊ทผ์„ฑ ํŠธ๋ฆฌ์—์„œ ์ˆจ๊ธฐ๊ณ , ์šด์˜์ฒด์ œ์˜ reduced-motion ์„ ํ˜ธ๊ฐ€ ์ผœ์ง„ ๊ฒฝ์šฐ ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. - ์„ธ์…˜ ํ™œ๋™ ๋ฆฌ๋ณธ์€ ์‹œ๊ฐ์ ์œผ๋กœ ํ˜„์žฌ์ธ ์ด๋ฒคํŠธ๋ฅผ ํ† ๊ธ€ ๋ฒ„ํŠผ์œผ๋กœ ์˜ค์ธ์‹œํ‚ค์ง€ ์•Š๊ณ  `aria-current`๋กœ ๋…ธ์ถœํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ๋œ ๋„๊ตฌ ์‹คํ–‰์€ `Expand โ€ฆ group` ๋‹ค์Œ ํ–‰๋™๊ณผ ํฌํ•จ ์ด๋ฒคํŠธ ์ˆ˜๋ฅผ ๋ช…ํ™•ํžˆ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. - ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝยท์‚ญ์ œ ๋ฒ„ํŠผ๊ณผ ํ…์ŠคํŠธ๊ฐ€ ์ด๋ฆ„์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฒ„ํŠผ์˜ ์žฅ์‹ ์•„์ด์ฝ˜์„ ์ ‘๊ทผ์„ฑ ํŠธ๋ฆฌ์—์„œ ์ˆจ๊ธฐ๊ณ , ๋ฒ„ํŠผ์˜ ๊ธฐ์กด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์ด ์œ ์ง€๋˜๋Š”์ง€ ๋ Œ๋”๋ง ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋กœ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. - ์›น ๋Œ€์‹œ๋ณด๋“œ์˜ ๊ฐ์ข… ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ(`org-sidebar.tsx`, `org-header.tsx`, `no-organization-state.tsx`)์— ์Šคํฌ๋ฆฐ ๋ฆฌ๋”์šฉ `aria-label="Log out of your account"` (๋˜๋Š” `Sign out of your account`) ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ ‘๊ทผ์„ฑ์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. diff --git a/packages/web/src/app/login/page.tsx b/packages/web/src/app/login/page.tsx index 0fa43262..1f5e011b 100644 --- a/packages/web/src/app/login/page.tsx +++ b/packages/web/src/app/login/page.tsx @@ -3,7 +3,7 @@ import { useState } from 'react' import { signIn } from 'next-auth/react' import { useRouter } from 'next/navigation' -import { Button, ButtonLoadingContent, } from '@/components/ui/button' +import { Button, ButtonLoadingContent } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' @@ -76,10 +76,10 @@ export default function LoginPage() { )}
diff --git a/packages/web/src/components/admin/admin-login-form.tsx b/packages/web/src/components/admin/admin-login-form.tsx index a8bbd037..d541ae7c 100644 --- a/packages/web/src/components/admin/admin-login-form.tsx +++ b/packages/web/src/components/admin/admin-login-form.tsx @@ -4,7 +4,7 @@ import { useState } from 'react' import { Lock } from 'lucide-react' import { useRouter } from 'next/navigation' -import { Button, ButtonLoadingContent, } from '@/components/ui/button' +import { Button, ButtonLoadingContent } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' @@ -77,10 +77,10 @@ export function AdminLoginForm() { {error &&

{error}

}