From 90dcac5b9baee821df5b52ea54ae205711e3b2f0 Mon Sep 17 00:00:00 2001 From: 6-keem <6ukeem@gmail.com> Date: Fri, 14 Nov 2025 00:28:50 +0900 Subject: [PATCH] fix: detect parent size using `ResizeObserver` --- .../components/PlayerPopoverTrigger.tsx | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/player/components/PlayerPopoverTrigger.tsx b/src/player/components/PlayerPopoverTrigger.tsx index 3e0eab3..d2bc3d9 100644 --- a/src/player/components/PlayerPopoverTrigger.tsx +++ b/src/player/components/PlayerPopoverTrigger.tsx @@ -1,3 +1,4 @@ +import { useEffect, useRef, useState } from 'react'; import { PopoverTrigger } from '@/components/ui/popover'; import icon from '@/assets/icon.png'; import { BorderTrail } from '@/components/ui/border-trail'; @@ -8,18 +9,38 @@ interface PlayerPopoverTriggerProps { } export default function PlayerPopoverTrigger({ onClick, isPlaying }: PlayerPopoverTriggerProps) { + const containerRef = useRef(null); + const [parentWidth, setParentWidth] = useState(0); + + useEffect(() => { + const root = containerRef.current?.getRootNode() as ShadowRoot | Document | null; + const host = (root instanceof ShadowRoot ? root.host : null) as HTMLElement | null; + + if (!host) return console.warn('dotbugi-player host not found'); + + const observer = new ResizeObserver((entries) => { + const entry = entries[0]; + if (entry) setParentWidth(entry.contentRect.width); + }); + + observer.observe(host); + return () => observer.disconnect(); + }, []); + + const isCompact = parentWidth < 190; + return (
  • - 돋부기 아이콘 + 돋부기 아이콘
    -
    돋부기 🔎
    + {!isCompact &&
    돋부기 🔎
    }