From 5f91e6fdf022b89e749cdacba4f3cc83c8ffb90a Mon Sep 17 00:00:00 2001 From: Euigyom Kim Date: Thu, 29 Jan 2026 09:24:42 +0900 Subject: [PATCH 1/2] refactor: tighten modal state and emoji overlay --- src/App.tsx | 11 +- src/infra/UnifiedApiClient.ts | 13 +- src/ui/components/ComposeBox.tsx | 390 ++++++++++++++++--------------- src/ui/styles/components.css | 2 + 4 files changed, 208 insertions(+), 208 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index d2f9246..523e57c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -135,6 +135,7 @@ export const App = () => { ); const [replyTarget, setReplyTarget] = useState(null); const [selectedStatus, setSelectedStatus] = useState(null); + const [selectedStatusThreadAccount, setSelectedStatusThreadAccount] = useState(null); const [selectedTimelineStatus, setSelectedTimelineStatus] = useState(null); const [profileTargets, setProfileTargets] = useState([]); const [statusModalZIndex, setStatusModalZIndex] = useState(null); @@ -891,8 +892,7 @@ export const App = () => { const handleStatusClick = (status: Status, columnAccount: Account | null) => { setSelectedStatus(status); setStatusModalZIndex(nextModalZIndexRef.current++); - // Status에 columnAccount 정보를 임시 저장 - (status as any).__columnAccount = columnAccount; + setSelectedStatusThreadAccount(columnAccount); }; const handleProfileOpen = useCallback((target: Status, columnAccount: Account | null) => { @@ -915,6 +915,7 @@ export const App = () => { const handleCloseStatusModal = () => { setSelectedStatus(null); setStatusModalZIndex(null); + setSelectedStatusThreadAccount(null); }; const handleReaction = useCallback( @@ -1052,7 +1053,7 @@ export const App = () => {
- Deck logo + Deck 로고
-
- ) : null} - {account && emojiCategories.length === 0 ? ( -

사용할 수 있는 이모지가 없습니다.

- ) : null} - {account && emojiCategories.length > 0 ? ( - <> - {hasEmojiSearch ? ( -
-
- 검색 결과 - {emojiSearchResults.length} -
- {emojiSearchResults.length > 0 ? ( -
- {emojiSearchResults.map((emoji) => ( - - ))} + <> + + ) : null} {isSubmitting ? ( diff --git a/src/ui/styles/components.css b/src/ui/styles/components.css index b336506..37360b3 100644 --- a/src/ui/styles/components.css +++ b/src/ui/styles/components.css @@ -921,6 +921,8 @@ } .compose-emoji-panel { + position: relative; + z-index: 20; margin-top: 12px; border: 1px solid var(--color-emoji-panel-border); border-radius: 12px; From 1680cde30311ddf84951a98d024603332d685e54 Mon Sep 17 00:00:00 2001 From: Euigyom Kim Date: Thu, 29 Jan 2026 09:31:14 +0900 Subject: [PATCH 2/2] fix: enable menu navigation from shortcut open --- src/ui/components/TimelineSection.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/ui/components/TimelineSection.tsx b/src/ui/components/TimelineSection.tsx index 417fada..a2f114b 100644 --- a/src/ui/components/TimelineSection.tsx +++ b/src/ui/components/TimelineSection.tsx @@ -739,6 +739,20 @@ export const TimelineSection = ({ ] ); + useEffect(() => { + if (!timelineMenuOpen && !notificationsOpen && !menuOpen) { + return; + } + const onKeyDown = (event: KeyboardEvent) => { + const handled = handleTimelineShortcuts(event); + if (handled) { + event.stopPropagation(); + } + }; + window.addEventListener("keydown", onKeyDown, { capture: true }); + return () => window.removeEventListener("keydown", onKeyDown, { capture: true }); + }, [handleTimelineShortcuts, menuOpen, notificationsOpen, timelineMenuOpen]); + useEffect(() => { registerTimelineShortcutHandler(section.id, handleTimelineShortcuts); return () => registerTimelineShortcutHandler(section.id, null);