responsive-dialog
diceui-radix/responsive-dialogFreeComponent
diceui/radix publishes no description for this item.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/sadmann7/diceui/HEAD/docs/public/r/styles/radix-nova/responsive-dialog.jsonSource
1"use client";23import * as React from "react";4import { cn } from "@/lib/utils";5import { useAsRef } from "@/registry/bases/radix/hooks/use-as-ref";6import { useIsomorphicLayoutEffect } from "@/registry/bases/radix/hooks/use-isomorphic-layout-effect";7import { useLazyRef } from "@/registry/bases/radix/hooks/use-lazy-ref";8import { useIsMobile } from "@/registry/bases/radix/hooks/use-mobile";9import {10 Dialog,11 DialogClose,12 DialogContent,13 DialogDescription,14 DialogFooter,15 DialogHeader,16 DialogOverlay,17 DialogPortal,18 DialogTitle,19 DialogTrigger,20} from "@/registry/bases/radix/ui/dialog";21import {22 Drawer,23 DrawerClose,24 DrawerContent,25 DrawerDescription,26 DrawerFooter,27 DrawerHeader,28 DrawerOverlay,29 DrawerPortal,30 DrawerTitle,31 DrawerTrigger,32} from "@/registry/bases/radix/ui/drawer";3334const ROOT_NAME = "ResponsiveDialog";3536interface StoreState {37 open: boolean;38 isMobile: boolean;39}4041interface Store {42 subscribe: (callback: () => void) => () => void;43 getState: () => StoreState;44 setState: <K extends keyof StoreState>(key: K, value: StoreState[K]) => void;45 notify: () => void;46}4748const StoreContext = React.createContext<Store | null>(null);4950function useStore<T>(51 selector: (state: StoreState) => T,52 ogStore?: Store | null,53): T {54 const contextStore = React.useContext(StoreContext);55 const store = ogStore ?? contextStore;5657 if (!store) {58 throw new Error(`\`useStore\` must be used within \`${ROOT_NAME}\``);59 }6061 const getSnapshot = React.useCallback(62 () => selector(store.getState()),63 [store, selector],64 );6566 return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);67}6869interface ResponsiveDialogProps extends React.ComponentProps<typeof Dialog> {70 breakpoint?: number;71}7273function ResponsiveDialog({74 breakpoint = 768,75 open: openProp,76 defaultOpen = false,77 onOpenChange: onOpenChangeProp,78 ...props79}: ResponsiveDialogProps) {80 const isMobile = useIsMobile(breakpoint);8182 const listenersRef = useLazyRef(() => new Set<() => void>());83 const stateRef = useLazyRef<StoreState>(() => ({84 open: openProp ?? defaultOpen,85 isMobile,86 }));8788 const onOpenChangeRef = useAsRef(onOpenChangeProp);8990 const store = React.useMemo<Store>(() => {91 return {92 subscribe: (cb) => {93 listenersRef.current.add(cb);94 return () => listenersRef.current.delete(cb);95 },96 getState: () => stateRef.current,97 setState: (key, value) => {98// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from diceui/radix
All 58 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| action-baraction-bar | diceui/radix | Components | Free | 1 dep · 2 files | |
| angle-sliderangle-slider | diceui/radix | Components | Free | 1 dep · 3 files | |
| avatar-groupavatar-group | diceui/radix | Components | Free | 1 dep | |
| badge-overflowbadge-overflow | diceui/radix | Components | Free | 1 dep · 2 files | |
| bannerbanner | diceui/radix | Components | Free | 1 dep | |
| checkbox-groupcheckbox-group | diceui/radix | Components | Free | 1 dep | |
| circular-progresscircular-progress | diceui/radix | Components | Free | 1 dep | |
| client-onlyclient-only | diceui/radix | Components | Free | no deps |
