From e5467e0e1516784452e04cf65629690192db029c Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sun, 13 Sep 2026 20:49:01 +0000 Subject: [PATCH 01/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. --- .jules/palette.md | 4 ++++ .../com/clearfolio/viewer/controller/ViewerUiController.java | 5 ++++- .../clearfolio/viewer/controller/ViewerUiControllerTest.java | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.jules/palette.md b/.jules/palette.md index a34ea59b2..6e42fb6c4 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -13,3 +13,7 @@ ## 2026-07-13 - Async Table Actions UX **Learning:** Adding explicit loading and disabled states to table action buttons that invoke asynchronous processes helps prevent redundant API calls and visually assures the user that their request is being handled. **Action:** Consistently apply `disabled` state and `Loading...` text changes to inline table action buttons linked to async workflows, and carefully preserve underlying DOM structures with `Array.from(btn.childNodes)` during the loading cycle to avoid rendering regressions. + +## 2026-09-13 - 파일 μ—…λ‘œλ“œ 폼 ν•„μˆ˜ ν•­λͺ© μ‹œκ°μ  ν‘œμ‹œ +**Learning:** `display: grid` λ ˆμ΄μ•„μ›ƒ λ‚΄λΆ€μ—μ„œ ν•„μˆ˜ ν•­λͺ© ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν•  λ•Œ μ€„λ°”κΏˆμ„ λ°©μ§€ν•˜λ €λ©΄ ν…μŠ€νŠΈμ™€ ν‘œμ‹œμžλ₯Ό ``으둜 감싸야 ν•˜λ©°, μ‹œκ°μ μΈ ν‘œμ‹œλŠ” 슀크린 리더가 μ€‘λ³΅μœΌλ‘œ 읽지 μ•Šλ„λ‘ `aria-hidden="true"`λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. +**Action:** 항상 ν•„μˆ˜ ν•­λͺ© ν‘œμ‹œμ— `aria-hidden="true"`λ₯Ό μΆ”κ°€ν•˜κ³  κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ˜ 영ν–₯을 κ³ λ €ν•΄ μš”μ†Œ ꡬ쑰λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. diff --git a/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java b/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java index 3e5ee0710..86a13440b 100644 --- a/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java +++ b/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java @@ -185,7 +185,10 @@ private static String demoShellHtml() {
- +
diff --git a/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java b/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java index fa2dcfcac..974cd858e 100644 --- a/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java +++ b/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java @@ -40,6 +40,7 @@ void homeReturnsBuyerDemoUploadShell() { assertTrue(body.contains("Document intake")); assertTrue(body.contains("id=\"upload-form\"")); assertTrue(body.contains("name=\"file\"")); + assertTrue(body.contains("aria-hidden=\"true\">*")); assertTrue(body.contains("id=\"session-history\"")); assertTrue(body.contains("id=\"job-detail\"")); assertTrue(body.contains("id=\"retry-job-btn\"")); From 769ee7f0e17ef96245a68846c378295e6282faf6 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Mon, 14 Sep 2026 03:23:35 +0000 Subject: [PATCH 02/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From 9f83f7afae68211fd0bf203169aa8061806713de Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Mon, 14 Sep 2026 11:43:45 +0000 Subject: [PATCH 03/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From d22d04b736a36ecafb8b85c317a5045731e8b1c9 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Tue, 15 Sep 2026 02:33:47 +0000 Subject: [PATCH 04/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From b438df07c8a3ab52d84e4262f2cf8596681548db Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:07:32 +0000 Subject: [PATCH 05/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From 963cf2595d649ab23c8807e762c173f32f0e3881 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:19:08 +0000 Subject: [PATCH 06/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From 9d5a1ec3aa482430b82c3d9db185943b90b7b5ad Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Wed, 16 Sep 2026 19:09:05 +0000 Subject: [PATCH 07/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From c769aa5370b08bb30dbdfa85a7eb987f5938c16c Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Thu, 17 Sep 2026 05:09:53 +0000 Subject: [PATCH 08/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From 353a416f5769179710006bc345daf19f6dfdb90b Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Thu, 17 Sep 2026 17:15:41 +0000 Subject: [PATCH 09/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From 91f622f4b81f2f90130fb1d76553b0c63d2659f9 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 18 Sep 2026 04:09:14 +0000 Subject: [PATCH 10/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From 8abecdaf239d9af127b964d8d27c5dd1e9e939a1 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 18 Sep 2026 16:45:35 +0000 Subject: [PATCH 11/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From a5b831198a8dcbb097fc7703009083b537b5c94c Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 19 Sep 2026 13:24:15 +0000 Subject: [PATCH 12/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. From 256d015dff09db0f63f3829257dc86a421c992b8 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 19 Sep 2026 19:58:33 +0000 Subject: [PATCH 13/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: PR #598에 μ˜ν•΄ λŒ€μ²΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: μ—†μŒ. β™Ώ μ ‘κ·Όμ„±: μ—†μŒ. --- .jules/palette.md | 4 ---- .../com/clearfolio/viewer/controller/ViewerUiController.java | 5 +---- .../clearfolio/viewer/controller/ViewerUiControllerTest.java | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/.jules/palette.md b/.jules/palette.md index 6e42fb6c4..a34ea59b2 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -13,7 +13,3 @@ ## 2026-07-13 - Async Table Actions UX **Learning:** Adding explicit loading and disabled states to table action buttons that invoke asynchronous processes helps prevent redundant API calls and visually assures the user that their request is being handled. **Action:** Consistently apply `disabled` state and `Loading...` text changes to inline table action buttons linked to async workflows, and carefully preserve underlying DOM structures with `Array.from(btn.childNodes)` during the loading cycle to avoid rendering regressions. - -## 2026-09-13 - 파일 μ—…λ‘œλ“œ 폼 ν•„μˆ˜ ν•­λͺ© μ‹œκ°μ  ν‘œμ‹œ -**Learning:** `display: grid` λ ˆμ΄μ•„μ›ƒ λ‚΄λΆ€μ—μ„œ ν•„μˆ˜ ν•­λͺ© ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν•  λ•Œ μ€„λ°”κΏˆμ„ λ°©μ§€ν•˜λ €λ©΄ ν…μŠ€νŠΈμ™€ ν‘œμ‹œμžλ₯Ό ``으둜 감싸야 ν•˜λ©°, μ‹œκ°μ μΈ ν‘œμ‹œλŠ” 슀크린 리더가 μ€‘λ³΅μœΌλ‘œ 읽지 μ•Šλ„λ‘ `aria-hidden="true"`λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. -**Action:** 항상 ν•„μˆ˜ ν•­λͺ© ν‘œμ‹œμ— `aria-hidden="true"`λ₯Ό μΆ”κ°€ν•˜κ³  κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ˜ 영ν–₯을 κ³ λ €ν•΄ μš”μ†Œ ꡬ쑰λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. diff --git a/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java b/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java index 86a13440b..3e5ee0710 100644 --- a/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java +++ b/src/main/java/com/clearfolio/viewer/controller/ViewerUiController.java @@ -185,10 +185,7 @@ private static String demoShellHtml() {
- +
diff --git a/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java b/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java index 974cd858e..fa2dcfcac 100644 --- a/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java +++ b/src/test/java/com/clearfolio/viewer/controller/ViewerUiControllerTest.java @@ -40,7 +40,6 @@ void homeReturnsBuyerDemoUploadShell() { assertTrue(body.contains("Document intake")); assertTrue(body.contains("id=\"upload-form\"")); assertTrue(body.contains("name=\"file\"")); - assertTrue(body.contains("aria-hidden=\"true\">*")); assertTrue(body.contains("id=\"session-history\"")); assertTrue(body.contains("id=\"job-detail\"")); assertTrue(body.contains("id=\"retry-job-btn\"")); From 06d9cc8717aeb81923acb2b8fcf1bca2c64b2ed2 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Mon, 21 Sep 2026 02:59:23 +0000 Subject: [PATCH 14/14] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=8F=BC=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=ED=95=AD=EB=AA=A9=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91?= =?UTF-8?q?=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 πŸ’‘ λ³€κ²½ 사항: 파일 μ—…λ‘œλ“œ 폼의 'Document' 라벨에 ν•„μˆ˜ ν•­λͺ©μž„을 λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°μ  ν‘œμ‹œμž(*)λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 ν•΄κ²°λœ 문제: 파일 μž…λ ₯ ν•„λ“œλŠ” ν•„μˆ˜ ν•­λͺ©μ΄μ§€λ§Œ, μ‹œκ°μ μΈ μ•ˆλ‚΄κ°€ λΆ€μ‘±ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. β™Ώ μ ‘κ·Όμ„±: 슀크린 리더 μ‚¬μš©μžκ°€ ν•„μˆ˜ ν•­λͺ©μž„을 μ€‘λ³΅μœΌλ‘œ μ•ˆλ‚΄λ°›μ§€ μ•Šλ„λ‘ μ‹œκ°μ  ν‘œμ‹œμžμ— `aria-hidden="true"` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ ν‘œμ‹œμžκ°€ μ€„λ°”κΏˆλ˜μ§€ μ•Šλ„λ‘ `` 래퍼λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.