From 4cc86240757376a1f5893ad3fa52f45ff8826a88 Mon Sep 17 00:00:00 2001 From: qixing-jk Date: Sun, 7 Sep 2025 22:15:12 +0800 Subject: fix(extension): constrain height to prevent viewport overflow (#1580) (#1895) * fix(extension): constrain height to prevent viewport overflow (#1580) Fixes #1580 * refactor(extension): move height control to consumer components Remove default height from base PopoverContent to avoid affecting reusability. Consumers now explicitly set height via `--radix-popover-content-available-height` when needed. * feat(extension): introduce dynamic popover height handling - add new `DynamicPopoverContent` component with adaptive height logic - replace `PopoverContent` with `DynamicPopoverContent` in `ListsSelector` - replace `PopoverContent` with `DynamicPopoverContent` in `TagsSelector` - remove fixed height constraint for shorter content - maintain backward compatibility with `dynamicHeight` prop * feat(extension): improve dynamic popover height handling and styling - set default max-height using CSS variable for consistent initial state - remove redundant else branch in height calculation logic - add overflow-y-auto to enable scrolling when content exceeds available space * feat(extension): replace useEffect with useLayoutEffect for dynamic height The change ensures proper measurement of the popover content height before the browser paints, preventing layout shifts and improving rendering performance. * feat(extension): enhance dynamic height adjustment with debounce & resize handling - add debounce support via custom `useDebounce` hook to optimize performance - implement window resize handler to recalculate height on viewport changes - improve height calculation with buffer zone and fallback mechanisms - refactor code structure with utility functions for better maintainability - update prop documentation and add new `debounceMs` prop - enhance ref handling with merged refs callback - split className into logical groups for better readability - add proper TypeScript types and error handling for height calculations * feat(tags-selector): move create tag option above existing tags (#1840) - add CommandSeparator import - restructure CommandGroup to display create option first - remove redundant CommandGroup wrapper for create option Resolves #1840 --- apps/browser-extension/src/components/ListsSelector.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'apps/browser-extension/src/components/ListsSelector.tsx') diff --git a/apps/browser-extension/src/components/ListsSelector.tsx b/apps/browser-extension/src/components/ListsSelector.tsx index 8f74098f..379338b6 100644 --- a/apps/browser-extension/src/components/ListsSelector.tsx +++ b/apps/browser-extension/src/components/ListsSelector.tsx @@ -19,7 +19,8 @@ import { CommandItem, CommandList, } from "./ui/command"; -import { Popover, PopoverContent, PopoverTrigger } from "./ui/popover"; +import { DynamicPopoverContent } from "./ui/dynamic-popover"; +import { Popover, PopoverTrigger } from "./ui/popover"; export function ListsSelector({ bookmarkId }: { bookmarkId: string }) { const currentlyUpdating = useSet(); @@ -67,7 +68,7 @@ export function ListsSelector({ bookmarkId }: { bookmarkId: string }) { - + @@ -101,7 +102,7 @@ export function ListsSelector({ bookmarkId }: { bookmarkId: string }) { - + ); } -- cgit v1.2.3-70-g09d2