Browse Source

fix emoji picker scrollbar

imwald
Silberengel 3 weeks ago
parent
commit
408e61ee53
  1. 3
      src/components/EmojiPickerDialog/index.tsx
  2. 4
      src/components/GifPicker/index.tsx
  3. 3
      src/components/NoteStats/LikeButton.tsx
  4. 13
      src/components/ui/drawer.tsx

3
src/components/EmojiPickerDialog/index.tsx

@ -24,9 +24,10 @@ export default function EmojiPickerDialog({
if (isSmallScreen) { if (isSmallScreen) {
return ( return (
<Drawer open={open} onOpenChange={setOpen}> <Drawer open={open} onOpenChange={setOpen} handleOnly>
<DrawerTrigger asChild>{children}</DrawerTrigger> <DrawerTrigger asChild>{children}</DrawerTrigger>
<DrawerContent <DrawerContent
dragHandle="vaul"
portalContainer={portalContainer} portalContainer={portalContainer}
className="max-h-[min(88dvh,calc(100dvh-5rem))] px-2" className="max-h-[min(88dvh,calc(100dvh-5rem))] px-2"
onPointerDownOutside={(e) => { onPointerDownOutside={(e) => {

4
src/components/GifPicker/index.tsx

@ -538,9 +538,9 @@ export default function GifPicker({
if (isSmallScreen) { if (isSmallScreen) {
return ( return (
<Drawer open={open} onOpenChange={setOpen}> <Drawer open={open} onOpenChange={setOpen} handleOnly>
<DrawerTrigger asChild>{children}</DrawerTrigger> <DrawerTrigger asChild>{children}</DrawerTrigger>
<DrawerContent portalContainer={portalContainer}> <DrawerContent dragHandle="vaul" portalContainer={portalContainer}>
<DrawerHeader className="sr-only"> <DrawerHeader className="sr-only">
<DrawerTitle>{t('Choose a GIF')}</DrawerTitle> <DrawerTitle>{t('Choose a GIF')}</DrawerTitle>
</DrawerHeader> </DrawerHeader>

3
src/components/NoteStats/LikeButton.tsx

@ -276,8 +276,9 @@ export default function LikeButton({ event, hideCount = false }: { event: Event;
return ( return (
<> <>
{trigger} {trigger}
<Drawer open={isEmojiReactionsOpen} onOpenChange={setIsEmojiReactionsOpen}> <Drawer handleOnly open={isEmojiReactionsOpen} onOpenChange={setIsEmojiReactionsOpen}>
<DrawerContent <DrawerContent
dragHandle="vaul"
onPointerDownOutside={(e) => { onPointerDownOutside={(e) => {
const t = e.target as HTMLElement | null const t = e.target as HTMLElement | null
if (t?.closest?.('[data-vaul-overlay]')) return if (t?.closest?.('[data-vaul-overlay]')) return

13
src/components/ui/drawer.tsx

@ -72,8 +72,13 @@ const DrawerContent = React.forwardRef<
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & { React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & {
hideOverlay?: boolean hideOverlay?: boolean
portalContainer?: HTMLElement | null portalContainer?: HTMLElement | null
/**
* `vaul` use Vauls real handle (`data-vaul-handle`). Pair with `handleOnly` on `Drawer` so
* scrolling inner content (e.g. emoji grid) does not drag the sheet.
*/
dragHandle?: 'decorative' | 'vaul'
} }
>(({ className, children, hideOverlay = false, portalContainer, ...props }, ref) => ( >(({ className, children, hideOverlay = false, portalContainer, dragHandle = 'decorative', ...props }, ref) => (
<DrawerPortal container={portalContainer}> <DrawerPortal container={portalContainer}>
{!hideOverlay && <DrawerOverlay />} {!hideOverlay && <DrawerOverlay />}
<DrawerPrimitive.Content <DrawerPrimitive.Content
@ -88,7 +93,11 @@ const DrawerContent = React.forwardRef<
onOpenAutoFocus={(e) => e.preventDefault()} onOpenAutoFocus={(e) => e.preventDefault()}
{...props} {...props}
> >
<div className="mx-auto mt-4 pb-2 mb-2 h-2 w-[100px] rounded-full bg-muted" /> {dragHandle === 'vaul' ? (
<DrawerPrimitive.Handle className="mx-auto mt-4 mb-2" />
) : (
<div className="mx-auto mt-4 pb-2 mb-2 h-2 w-[100px] rounded-full bg-muted" />
)}
{children} {children}
</DrawerPrimitive.Content> </DrawerPrimitive.Content>
</DrawerPortal> </DrawerPortal>

Loading…
Cancel
Save