side-dialog
shuip/side-dialogFreeComponent
shuip publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by shuip on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://shuip.plvo.dev/r/side-dialog.jsonSource
1'use client';23import { XIcon } from 'lucide-react';4import * as React from 'react';5import { createPortal } from 'react-dom';6import { cn } from '@/lib/utils';78type SideDialogPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right';9type SideDialogSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';1011export interface SideDialogProps {12 open?: boolean;13 onOpenChange?: (open: boolean) => void;14 position?: SideDialogPosition;15 size?: SideDialogSize;16 children?: React.ReactNode;17}1819export interface SideDialogTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {20 asChild?: boolean;21 children: React.ReactNode;22}2324export interface SideDialogContentProps extends React.HTMLAttributes<HTMLDivElement> {25 showCloseButton?: boolean;26 children: React.ReactNode;27}2829export interface SideDialogHeaderProps extends React.HTMLAttributes<HTMLDivElement> {30 children: React.ReactNode;31}3233export interface SideDialogTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {34 children: React.ReactNode;35}3637export interface SideDialogDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {38 children: React.ReactNode;39}4041export interface SideDialogFooterProps extends React.HTMLAttributes<HTMLDivElement> {42 children: React.ReactNode;43}4445export interface SideDialogCloseProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {46 asChild?: boolean;47 children?: React.ReactNode;48}4950export interface SideDialogBodyProps extends React.HTMLAttributes<HTMLDivElement> {51 children: React.ReactNode;52}5354// Context for managing dialog state55const SideDialogContext = React.createContext<{56 open: boolean;57 onOpenChange: (open: boolean) => void;58 position: SideDialogPosition;59 size: SideDialogSize;60}>({61 open: false,62 onOpenChange: () => {},63 position: 'bottom-right',64 size: 'sm',65});6667export function SideDialog({68 open: controlledOpen,69 onOpenChange: controlledOnOpenChange,70 position = 'bottom-right',71 size = 'sm',72 children,73}: SideDialogProps) {74 // Internal state for uncontrolled mode75 const [internalOpen, setInternalOpen] = React.useState(false);7677 // Use controlled props if provided, otherwise use internal state78 const open = controlledOpen !== undefined ? controlledOpen : internalOpen;79 const onOpenChange = controlledOnOpenChange !== undefined ? controlledOnOpenChange : setInternalOpen;8081 const contextValue = React.useMemo(82 () => ({83 open,84 onOpenChange,85 position,86 size,87// … truncated
What it pulls in
npm packages
Files it writes
More from shuip
All 52 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| confirmation-dialogconfirmation-dialog | shuip | Components | Free | 1 dep | |
| copy-buttoncopy-button | shuip | Components | Free | 3 deps | |
| hover-revealhover-reveal | shuip | Components | Free | 1 dep | |
| rhf-address-fieldrhf-address-field | shuip | Components | Free | 5 deps · 2 files | |
| rhf-autocomplete-fieldrhf-autocomplete-field | shuip | Components | Free | 4 deps | |
| rhf-checkbox-fieldrhf-checkbox-field | shuip | Components | Free | 3 deps | |
| rhf-combobox-fieldrhf-combobox-field | shuip | Components | Free | 5 deps | |
| rhf-date-fieldrhf-date-field | shuip | Components | Free | 6 deps |
