@avenue-ticketing/ui 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react/avatar.d.ts +42 -0
- package/dist/react/avatar.js +159 -0
- package/dist/react/avatar.js.map +1 -0
- package/dist/react/badge.d.ts +12 -0
- package/dist/react/badge.js +35 -1
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button.d.ts +1 -1
- package/dist/react/button.js +3 -3
- package/dist/react/button.js.map +1 -1
- package/dist/react/calendar.d.ts +13 -0
- package/dist/react/calendar.js +4639 -0
- package/dist/react/calendar.js.map +1 -0
- package/dist/react/card.d.ts +11 -0
- package/dist/react/card.js +113 -0
- package/dist/react/card.js.map +1 -0
- package/dist/react/checkbox.d.ts +11 -0
- package/dist/react/checkbox.js +131 -0
- package/dist/react/checkbox.js.map +1 -0
- package/dist/react/datetime-picker.d.ts +21 -0
- package/dist/react/datetime-picker.js +6124 -0
- package/dist/react/datetime-picker.js.map +1 -0
- package/dist/react/dialog.js +1 -1
- package/dist/react/dialog.js.map +1 -1
- package/dist/react/dropdown.d.ts +26 -9
- package/dist/react/dropdown.js +194 -96
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/input.d.ts +7 -0
- package/dist/react/input.js +15 -2
- package/dist/react/input.js.map +1 -1
- package/dist/react/pagination.d.ts +28 -0
- package/dist/react/pagination.js +262 -0
- package/dist/react/pagination.js.map +1 -0
- package/dist/react/popover.d.ts +76 -0
- package/dist/react/popover.js +564 -0
- package/dist/react/popover.js.map +1 -0
- package/dist/react/scroll-header.js +13 -1
- package/dist/react/scroll-header.js.map +1 -1
- package/dist/react/scroll-wheel.d.ts +45 -0
- package/dist/react/scroll-wheel.js +557 -0
- package/dist/react/scroll-wheel.js.map +1 -0
- package/dist/react/select.d.ts +62 -0
- package/dist/react/select.js +889 -0
- package/dist/react/select.js.map +1 -0
- package/dist/react/sheet.js +1 -1
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/switch.d.ts +38 -0
- package/dist/react/switch.js +117 -0
- package/dist/react/switch.js.map +1 -0
- package/dist/react/table-pagination.d.ts +15 -0
- package/dist/react/table-pagination.js +1153 -0
- package/dist/react/table-pagination.js.map +1 -0
- package/dist/react/table-view/column-menu.d.ts +15 -0
- package/dist/react/table-view/column-menu.js +918 -0
- package/dist/react/table-view/column-menu.js.map +1 -0
- package/dist/react/table-view/index.d.ts +70 -0
- package/dist/react/table-view/index.js +2155 -0
- package/dist/react/table-view/index.js.map +1 -0
- package/dist/react/table.d.ts +86 -0
- package/dist/react/table.js +414 -0
- package/dist/react/table.js.map +1 -0
- package/dist/react/tabs.d.ts +9 -3
- package/dist/react/tabs.js +204 -48
- package/dist/react/tabs.js.map +1 -1
- package/dist/react/textarea.d.ts +6 -0
- package/dist/react/textarea.js +33 -0
- package/dist/react/textarea.js.map +1 -0
- package/dist/react/time-picker.d.ts +22 -0
- package/dist/react/time-picker.js +856 -0
- package/dist/react/time-picker.js.map +1 -0
- package/dist/react/tooltip.d.ts +45 -0
- package/dist/react/tooltip.js +540 -0
- package/dist/react/tooltip.js.map +1 -0
- package/package.json +1 -1
package/dist/react/dialog.js
CHANGED
|
@@ -380,7 +380,7 @@ var DialogFooter = ({ className, fixed, ...props }) => {
|
|
|
380
380
|
{
|
|
381
381
|
className: cn(
|
|
382
382
|
"flex flex-col-reverse p-6 sm:flex-row sm:justify-end sm:space-x-2",
|
|
383
|
-
fixed && "bg-background border-primary/10 sticky bottom-0 z-10 border-t",
|
|
383
|
+
fixed && "bg-background border-primary/10 sticky bottom-0 z-10 border-t pb-[max(1.5rem,env(safe-area-inset-bottom))]",
|
|
384
384
|
className
|
|
385
385
|
),
|
|
386
386
|
...props
|
package/dist/react/dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/dialog.tsx"],"names":[],"mappings":"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","file":"dialog.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\n\n/** Used for slide / bottom-sheet motion — duration + entry/exit easing (see `slideMotionEasing`). */\nconst DIALOG_MOTION_MS = 200;\nconst DIALOG_ENTRY_MOTION_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst DIALOG_EXIT_MOTION_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\n\n/** matches `SHEET_MOBILE_MAX_WIDTH_PX` in sheet.tsx */\nconst DIALOG_MOBILE_BOTTOM_SHEET_MAX_PX = 1024;\n\nconst DIALOG_Z_BASE = 50;\nconst DIALOG_Z_STEP = 10;\n\nlet dialogBodyScrollLockCount = 0;\nconst dialogEscapeClosers: Array<() => void> = [];\n\nfunction dialogEscapeOnKeydown(e: KeyboardEvent) {\n if (e.key !== \"Escape\") return;\n const top = dialogEscapeClosers[dialogEscapeClosers.length - 1];\n if (!top) return;\n e.preventDefault();\n top();\n}\n\nfunction dialogPushEscapeCloser(closer: () => void) {\n dialogEscapeClosers.push(closer);\n if (dialogEscapeClosers.length === 1) {\n window.addEventListener(\"keydown\", dialogEscapeOnKeydown, true);\n }\n}\n\nfunction dialogPopEscapeCloser(closer: () => void) {\n const i = dialogEscapeClosers.lastIndexOf(closer);\n if (i >= 0) dialogEscapeClosers.splice(i, 1);\n if (dialogEscapeClosers.length === 0) {\n window.removeEventListener(\"keydown\", dialogEscapeOnKeydown, true);\n }\n}\n\ntype DialogSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nfunction useDialogMobileBottomSheetViewport() {\n const query = `(max-width: ${DIALOG_MOBILE_BOTTOM_SHEET_MAX_PX}px)`;\n return useSyncExternalStore(\n (onChange) => {\n const mq = window.matchMedia(query);\n mq.addEventListener(\"change\", onChange);\n return () => mq.removeEventListener(\"change\", onChange);\n },\n () => window.matchMedia(query).matches,\n () => false,\n );\n}\n\n/**\n * Slide distance for `slideEntrance`, scaled to `size` (full keeps 120px like a\n * mobile sheet; smaller presets use shorter travel so the motion matches width).\n */\nconst SLIDE_ENTRANCE_OFFSET_PX: Record<DialogSize, number> = {\n sm: 16,\n md: 16,\n lg: 16,\n xl: 16,\n full: 120,\n};\n\nconst SIZE_CLASSES: Record<Exclude<DialogSize, \"full\">, string> = {\n sm: \"sm:max-w-sm\",\n md: \"sm:max-w-md\",\n lg: \"sm:max-w-lg\",\n xl: \"sm:max-w-xl\",\n};\n\nconst SIZE_CLASSES_LG_ONLY: Record<Exclude<DialogSize, \"full\">, string> = {\n sm: \"lg:max-w-sm\",\n md: \"lg:max-w-md\",\n lg: \"lg:max-w-lg\",\n xl: \"lg:max-w-xl\",\n};\n\n/** Same pattern as `useSheetRenderLifecycle` in sheet.tsx (portal + enter/exit timing). */\nfunction useDialogRenderLifecycle(open: boolean, panelCloseMs: number) {\n const [shouldRender, setShouldRender] = useState(open);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n } else {\n setIsAnimating(false);\n const timer = setTimeout(() => setShouldRender(false), panelCloseMs);\n return () => clearTimeout(timer);\n }\n }, [open, panelCloseMs]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\n\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsAnimating(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }, [shouldRender, open]);\n\n return { shouldRender, isAnimating };\n}\n\n//////////////////////////////////////////////// Context\n\ntype DialogContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n /** nesting depth for z-index (1 = outermost dialog in tree) */\n depth: number;\n};\n\nconst DialogContext = React.createContext<DialogContextValue | undefined>(\n undefined,\n);\n\nfunction useDialog() {\n const context = React.useContext(DialogContext);\n if (!context) {\n throw new Error(\"Dialog components must be used within a <Dialog />\");\n }\n return context;\n}\n\n//////////////////////////////////////////////// Main\n\ninterface DialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const Dialog: React.FC<DialogProps> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n}) => {\n const parentCtx = React.useContext(DialogContext);\n const parentDepth = parentCtx?.depth ?? 0;\n const depth = parentDepth + 1;\n\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setInternalOpen(value);\n }\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n const contextValue = useMemo<DialogContextValue>(\n () => ({ open, setOpen, depth }),\n [open, setOpen, depth],\n );\n\n return (\n <DialogContext.Provider value={contextValue}>\n {children}\n </DialogContext.Provider>\n );\n};\n\nexport const DialogTrigger: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = useDialog();\n\n const handleClick = () => setOpen(true);\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n }>;\n return React.cloneElement(child, {\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n handleClick();\n },\n });\n }\n\n return (\n <button type=\"button\" onClick={handleClick}>\n {children}\n </button>\n );\n};\n\nexport const DialogClose: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = useDialog();\n\n const handleClick = () => setOpen(false);\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n }>;\n return React.cloneElement(child, {\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n handleClick();\n },\n });\n }\n\n return (\n <button type=\"button\" onClick={handleClick}>\n {children}\n </button>\n );\n};\n\n//////////////////////////////////////////////// Close\n\nexport interface DialogCloseButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * Default dismiss control for {@link DialogContent}. Includes absolute top-right\n * placement; pass `className` to adjust or replace positioning.\n * When `onClick` is omitted, closes via the surrounding `Dialog` context (`setOpen(false)`).\n */\nexport const DialogCloseButton = React.forwardRef<\n HTMLButtonElement,\n DialogCloseButtonProps\n>(({ className, type = \"button\", onClick, ...props }, ref) => {\n const { setOpen } = useDialog();\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (onClick == null) {\n setOpen(false);\n }\n },\n [onClick, setOpen],\n );\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n \"z-100 flex size-12 cursor-pointer items-center justify-center rounded-full transition-all hover:bg-secondary-background active:scale-[0.96]\",\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n});\nDialogCloseButton.displayName = \"DialogCloseButton\";\n\n//////////////////////////////////////////////// Content\n\ninterface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n duration?: number;\n closeOnOverlayClick?: boolean;\n showClose?: boolean;\n /**\n * When `true` (default), viewports ≤1024px use a bottom-anchored panel and\n * slide-up motion (same breakpoint as {@link SheetContent}). Wider viewports\n * keep the centered dialog. Set `false` to always use the centered dialog.\n */\n mobileBottomSheet?: boolean;\n /**\n * When `true`, panel uses translateY + opacity with fixed timing and separate\n * entry/exit curves (works with any `size`). Default `false` uses scale + fade.\n * Ignored when `mobileBottomSheet` applies on a narrow viewport.\n */\n slideEntrance?: boolean;\n /** Override slide distance (px); default follows `size` via `SLIDE_ENTRANCE_OFFSET_PX`. */\n slideEntranceOffsetPx?: number;\n}\n\nexport const DialogContent: React.FC<DialogContentProps> = ({\n children,\n size = \"md\",\n className,\n duration = 200,\n closeOnOverlayClick = true,\n showClose = true,\n mobileBottomSheet = true,\n slideEntrance = false,\n slideEntranceOffsetPx: slideEntranceOffsetPxProp,\n ...rest\n}) => {\n const { open, setOpen, depth } = useDialog();\n\n const isNarrowViewport = useDialogMobileBottomSheetViewport();\n\n const useMobileBottomSheet = useMemo(\n () => mobileBottomSheet !== false && isNarrowViewport,\n [mobileBottomSheet, isNarrowViewport],\n );\n\n const useMobileBottomSheetChrome = useMemo(\n () => mobileBottomSheet !== false && size !== \"full\",\n [mobileBottomSheet, size],\n );\n\n const slideOffsetPx = useMemo(\n () => slideEntranceOffsetPxProp ?? SLIDE_ENTRANCE_OFFSET_PX[size],\n [slideEntranceOffsetPxProp, size],\n );\n\n const useBottomSheetMotion = useMobileBottomSheet;\n const useDesktopSlideEntrance = slideEntrance && !useBottomSheetMotion;\n\n const panelCloseMs = useMemo(\n () =>\n useBottomSheetMotion\n ? DIALOG_MOTION_MS\n : slideEntrance\n ? DIALOG_MOTION_MS\n : duration,\n [useBottomSheetMotion, slideEntrance, duration],\n );\n\n const { shouldRender, isAnimating } = useDialogRenderLifecycle(\n open,\n panelCloseMs,\n );\n\n const slideMotionEasing = useMemo(\n () => (open ? DIALOG_ENTRY_MOTION_EASING : DIALOG_EXIT_MOTION_EASING),\n [open],\n );\n\n const portalZIndex = useMemo(\n () => DIALOG_Z_BASE + (depth - 1) * DIALOG_Z_STEP,\n [depth],\n );\n\n const handleOverlayClick = useCallback(() => {\n if (closeOnOverlayClick) setOpen(false);\n }, [closeOnOverlayClick, setOpen]);\n\n useEffect(() => {\n if (!open || typeof document === \"undefined\") return;\n\n const closer = () => setOpen(false);\n dialogPushEscapeCloser(closer);\n\n dialogBodyScrollLockCount += 1;\n if (dialogBodyScrollLockCount === 1) {\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n dialogPopEscapeCloser(closer);\n dialogBodyScrollLockCount -= 1;\n if (dialogBodyScrollLockCount <= 0) {\n dialogBodyScrollLockCount = 0;\n document.body.style.overflow = \"\";\n }\n };\n }, [open, setOpen]);\n\n const rootClassName = useMemo(\n () =>\n cn(\n \"fixed inset-0 flex\",\n size === \"full\"\n ? \"h-dvh w-full flex-col p-0\"\n : mobileBottomSheet !== false\n ? \"max-lg:items-end max-lg:justify-center max-lg:p-0 lg:items-center lg:justify-center lg:p-4\"\n : \"items-center justify-center p-4\",\n ),\n [size, mobileBottomSheet],\n );\n\n const rootStyle = useMemo(\n (): React.CSSProperties => ({ zIndex: portalZIndex }),\n [portalZIndex],\n );\n\n const overlayClassName = useMemo(\n () =>\n cn(\n \"fixed inset-0 bg-black/40 dark:bg-black/60\",\n !useBottomSheetMotion &&\n !slideEntrance &&\n \"transition-opacity ease-in-out\",\n isAnimating ? \"opacity-100\" : \"opacity-0\",\n ),\n [useBottomSheetMotion, slideEntrance, isAnimating],\n );\n\n const overlayStyle = useMemo((): React.CSSProperties => {\n const style: React.CSSProperties = {\n transitionDuration: `${panelCloseMs}ms`,\n };\n if (useBottomSheetMotion || slideEntrance) {\n style.transitionProperty = \"opacity\";\n style.transitionTimingFunction = slideMotionEasing;\n }\n return style;\n }, [panelCloseMs, useBottomSheetMotion, slideEntrance, slideMotionEasing]);\n\n const panelClassName = useMemo(() => {\n const sizeKey = size === \"full\" ? null : size;\n return cn(\n \"bg-background relative z-10 w-full overflow-hidden shadow-2xl\",\n size === \"full\"\n ? \"flex min-h-0 flex-1 flex-col max-w-none rounded-none\"\n : cn(\n \"border-primary/10 border\",\n useMobileBottomSheetChrome\n ? \"max-lg:max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] max-lg:rounded-t-2xl max-lg:rounded-b-none max-lg:border-x-0 max-lg:border-b-0 max-lg:border-t max-lg:border-primary/10 lg:rounded-2xl\"\n : \"rounded-2xl\",\n sizeKey &&\n (useMobileBottomSheetChrome\n ? SIZE_CLASSES_LG_ONLY[sizeKey]\n : SIZE_CLASSES[sizeKey]),\n ),\n !useBottomSheetMotion &&\n !useDesktopSlideEntrance &&\n cn(\n \"transition-all ease-in-out\",\n isAnimating ? \"scale-100 opacity-100\" : \"scale-95 opacity-0\",\n ),\n className,\n );\n }, [\n size,\n useMobileBottomSheetChrome,\n useBottomSheetMotion,\n useDesktopSlideEntrance,\n isAnimating,\n className,\n ]);\n\n const panelStyle = useMemo((): React.CSSProperties => {\n const base = { ...rest.style };\n if (useBottomSheetMotion) {\n return {\n ...base,\n transform: isAnimating ? \"translateY(0)\" : \"translateY(100%)\",\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${DIALOG_MOTION_MS}ms`,\n transitionTimingFunction: slideMotionEasing,\n };\n }\n if (useDesktopSlideEntrance) {\n return {\n ...base,\n transform: isAnimating\n ? \"translateY(0)\"\n : `translateY(${slideOffsetPx}px)`,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${DIALOG_MOTION_MS}ms`,\n transitionTimingFunction: slideMotionEasing,\n };\n }\n return {\n ...base,\n transitionDuration: `${duration}ms`,\n };\n }, [\n rest.style,\n useBottomSheetMotion,\n useDesktopSlideEntrance,\n isAnimating,\n slideOffsetPx,\n slideMotionEasing,\n duration,\n ]);\n\n if (!shouldRender) return null;\n\n return createPortal(\n <div className={rootClassName} style={rootStyle}>\n <div\n className={overlayClassName}\n style={overlayStyle}\n onClick={handleOverlayClick}\n />\n\n <div {...rest} className={panelClassName} style={panelStyle}>\n {children}\n\n {showClose && (\n <DialogCloseButton\n className={cn(\"absolute top-4 right-4 md:top-4 md:right-4\")}\n />\n )}\n </div>\n </div>,\n document.body,\n );\n};\n\nexport const DialogHeader: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => {\n return (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 p-6 text-center sm:text-left\",\n fixed && \"bg-background border-primary/10 sticky top-0 z-10 border-b\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogFooter: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => {\n return (\n <div\n className={cn(\n \"flex flex-col-reverse p-6 sm:flex-row sm:justify-end sm:space-x-2\",\n fixed &&\n \"bg-background border-primary/10 sticky bottom-0 z-10 border-t\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogTitle: React.FC<\n React.HTMLAttributes<HTMLHeadingElement>\n> = ({ className, ...props }) => {\n return (\n <h3\n className={cn(\n \"text-primary text-xl leading-none font-semibold\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogDescription: React.FC<\n React.HTMLAttributes<HTMLParagraphElement>\n> = ({ className, ...props }) => {\n return (\n <p className={cn(\"text-muted-foreground text-sm\", className)} {...props} />\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/dialog.tsx"],"names":[],"mappings":"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","file":"dialog.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\n\n/** Used for slide / bottom-sheet motion — duration + entry/exit easing (see `slideMotionEasing`). */\nconst DIALOG_MOTION_MS = 200;\nconst DIALOG_ENTRY_MOTION_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst DIALOG_EXIT_MOTION_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\n\n/** matches `SHEET_MOBILE_MAX_WIDTH_PX` in sheet.tsx */\nconst DIALOG_MOBILE_BOTTOM_SHEET_MAX_PX = 1024;\n\nconst DIALOG_Z_BASE = 50;\nconst DIALOG_Z_STEP = 10;\n\nlet dialogBodyScrollLockCount = 0;\nconst dialogEscapeClosers: Array<() => void> = [];\n\nfunction dialogEscapeOnKeydown(e: KeyboardEvent) {\n if (e.key !== \"Escape\") return;\n const top = dialogEscapeClosers[dialogEscapeClosers.length - 1];\n if (!top) return;\n e.preventDefault();\n top();\n}\n\nfunction dialogPushEscapeCloser(closer: () => void) {\n dialogEscapeClosers.push(closer);\n if (dialogEscapeClosers.length === 1) {\n window.addEventListener(\"keydown\", dialogEscapeOnKeydown, true);\n }\n}\n\nfunction dialogPopEscapeCloser(closer: () => void) {\n const i = dialogEscapeClosers.lastIndexOf(closer);\n if (i >= 0) dialogEscapeClosers.splice(i, 1);\n if (dialogEscapeClosers.length === 0) {\n window.removeEventListener(\"keydown\", dialogEscapeOnKeydown, true);\n }\n}\n\ntype DialogSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nfunction useDialogMobileBottomSheetViewport() {\n const query = `(max-width: ${DIALOG_MOBILE_BOTTOM_SHEET_MAX_PX}px)`;\n return useSyncExternalStore(\n (onChange) => {\n const mq = window.matchMedia(query);\n mq.addEventListener(\"change\", onChange);\n return () => mq.removeEventListener(\"change\", onChange);\n },\n () => window.matchMedia(query).matches,\n () => false,\n );\n}\n\n/**\n * Slide distance for `slideEntrance`, scaled to `size` (full keeps 120px like a\n * mobile sheet; smaller presets use shorter travel so the motion matches width).\n */\nconst SLIDE_ENTRANCE_OFFSET_PX: Record<DialogSize, number> = {\n sm: 16,\n md: 16,\n lg: 16,\n xl: 16,\n full: 120,\n};\n\nconst SIZE_CLASSES: Record<Exclude<DialogSize, \"full\">, string> = {\n sm: \"sm:max-w-sm\",\n md: \"sm:max-w-md\",\n lg: \"sm:max-w-lg\",\n xl: \"sm:max-w-xl\",\n};\n\nconst SIZE_CLASSES_LG_ONLY: Record<Exclude<DialogSize, \"full\">, string> = {\n sm: \"lg:max-w-sm\",\n md: \"lg:max-w-md\",\n lg: \"lg:max-w-lg\",\n xl: \"lg:max-w-xl\",\n};\n\n/** Same pattern as `useSheetRenderLifecycle` in sheet.tsx (portal + enter/exit timing). */\nfunction useDialogRenderLifecycle(open: boolean, panelCloseMs: number) {\n const [shouldRender, setShouldRender] = useState(open);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n } else {\n setIsAnimating(false);\n const timer = setTimeout(() => setShouldRender(false), panelCloseMs);\n return () => clearTimeout(timer);\n }\n }, [open, panelCloseMs]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\n\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsAnimating(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }, [shouldRender, open]);\n\n return { shouldRender, isAnimating };\n}\n\n//////////////////////////////////////////////// Context\n\ntype DialogContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n /** nesting depth for z-index (1 = outermost dialog in tree) */\n depth: number;\n};\n\nconst DialogContext = React.createContext<DialogContextValue | undefined>(\n undefined,\n);\n\nfunction useDialog() {\n const context = React.useContext(DialogContext);\n if (!context) {\n throw new Error(\"Dialog components must be used within a <Dialog />\");\n }\n return context;\n}\n\n//////////////////////////////////////////////// Main\n\ninterface DialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const Dialog: React.FC<DialogProps> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n}) => {\n const parentCtx = React.useContext(DialogContext);\n const parentDepth = parentCtx?.depth ?? 0;\n const depth = parentDepth + 1;\n\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setInternalOpen(value);\n }\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n const contextValue = useMemo<DialogContextValue>(\n () => ({ open, setOpen, depth }),\n [open, setOpen, depth],\n );\n\n return (\n <DialogContext.Provider value={contextValue}>\n {children}\n </DialogContext.Provider>\n );\n};\n\nexport const DialogTrigger: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = useDialog();\n\n const handleClick = () => setOpen(true);\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n }>;\n return React.cloneElement(child, {\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n handleClick();\n },\n });\n }\n\n return (\n <button type=\"button\" onClick={handleClick}>\n {children}\n </button>\n );\n};\n\nexport const DialogClose: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = useDialog();\n\n const handleClick = () => setOpen(false);\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n }>;\n return React.cloneElement(child, {\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n handleClick();\n },\n });\n }\n\n return (\n <button type=\"button\" onClick={handleClick}>\n {children}\n </button>\n );\n};\n\n//////////////////////////////////////////////// Close\n\nexport interface DialogCloseButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * Default dismiss control for {@link DialogContent}. Includes absolute top-right\n * placement; pass `className` to adjust or replace positioning.\n * When `onClick` is omitted, closes via the surrounding `Dialog` context (`setOpen(false)`).\n */\nexport const DialogCloseButton = React.forwardRef<\n HTMLButtonElement,\n DialogCloseButtonProps\n>(({ className, type = \"button\", onClick, ...props }, ref) => {\n const { setOpen } = useDialog();\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (onClick == null) {\n setOpen(false);\n }\n },\n [onClick, setOpen],\n );\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n \"z-100 flex size-12 cursor-pointer items-center justify-center rounded-full transition-all hover:bg-secondary-background active:scale-[0.96]\",\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n});\nDialogCloseButton.displayName = \"DialogCloseButton\";\n\n//////////////////////////////////////////////// Content\n\ninterface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n duration?: number;\n closeOnOverlayClick?: boolean;\n showClose?: boolean;\n /**\n * When `true` (default), viewports ≤1024px use a bottom-anchored panel and\n * slide-up motion (same breakpoint as {@link SheetContent}). Wider viewports\n * keep the centered dialog. Set `false` to always use the centered dialog.\n */\n mobileBottomSheet?: boolean;\n /**\n * When `true`, panel uses translateY + opacity with fixed timing and separate\n * entry/exit curves (works with any `size`). Default `false` uses scale + fade.\n * Ignored when `mobileBottomSheet` applies on a narrow viewport.\n */\n slideEntrance?: boolean;\n /** Override slide distance (px); default follows `size` via `SLIDE_ENTRANCE_OFFSET_PX`. */\n slideEntranceOffsetPx?: number;\n}\n\nexport const DialogContent: React.FC<DialogContentProps> = ({\n children,\n size = \"md\",\n className,\n duration = 200,\n closeOnOverlayClick = true,\n showClose = true,\n mobileBottomSheet = true,\n slideEntrance = false,\n slideEntranceOffsetPx: slideEntranceOffsetPxProp,\n ...rest\n}) => {\n const { open, setOpen, depth } = useDialog();\n\n const isNarrowViewport = useDialogMobileBottomSheetViewport();\n\n const useMobileBottomSheet = useMemo(\n () => mobileBottomSheet !== false && isNarrowViewport,\n [mobileBottomSheet, isNarrowViewport],\n );\n\n const useMobileBottomSheetChrome = useMemo(\n () => mobileBottomSheet !== false && size !== \"full\",\n [mobileBottomSheet, size],\n );\n\n const slideOffsetPx = useMemo(\n () => slideEntranceOffsetPxProp ?? SLIDE_ENTRANCE_OFFSET_PX[size],\n [slideEntranceOffsetPxProp, size],\n );\n\n const useBottomSheetMotion = useMobileBottomSheet;\n const useDesktopSlideEntrance = slideEntrance && !useBottomSheetMotion;\n\n const panelCloseMs = useMemo(\n () =>\n useBottomSheetMotion\n ? DIALOG_MOTION_MS\n : slideEntrance\n ? DIALOG_MOTION_MS\n : duration,\n [useBottomSheetMotion, slideEntrance, duration],\n );\n\n const { shouldRender, isAnimating } = useDialogRenderLifecycle(\n open,\n panelCloseMs,\n );\n\n const slideMotionEasing = useMemo(\n () => (open ? DIALOG_ENTRY_MOTION_EASING : DIALOG_EXIT_MOTION_EASING),\n [open],\n );\n\n const portalZIndex = useMemo(\n () => DIALOG_Z_BASE + (depth - 1) * DIALOG_Z_STEP,\n [depth],\n );\n\n const handleOverlayClick = useCallback(() => {\n if (closeOnOverlayClick) setOpen(false);\n }, [closeOnOverlayClick, setOpen]);\n\n useEffect(() => {\n if (!open || typeof document === \"undefined\") return;\n\n const closer = () => setOpen(false);\n dialogPushEscapeCloser(closer);\n\n dialogBodyScrollLockCount += 1;\n if (dialogBodyScrollLockCount === 1) {\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n dialogPopEscapeCloser(closer);\n dialogBodyScrollLockCount -= 1;\n if (dialogBodyScrollLockCount <= 0) {\n dialogBodyScrollLockCount = 0;\n document.body.style.overflow = \"\";\n }\n };\n }, [open, setOpen]);\n\n const rootClassName = useMemo(\n () =>\n cn(\n \"fixed inset-0 flex\",\n size === \"full\"\n ? \"h-dvh w-full flex-col p-0\"\n : mobileBottomSheet !== false\n ? \"max-lg:items-end max-lg:justify-center max-lg:p-0 lg:items-center lg:justify-center lg:p-4\"\n : \"items-center justify-center p-4\",\n ),\n [size, mobileBottomSheet],\n );\n\n const rootStyle = useMemo(\n (): React.CSSProperties => ({ zIndex: portalZIndex }),\n [portalZIndex],\n );\n\n const overlayClassName = useMemo(\n () =>\n cn(\n \"fixed inset-0 bg-black/40 dark:bg-black/60\",\n !useBottomSheetMotion && !slideEntrance && \"transition-opacity ease-in-out\",\n isAnimating ? \"opacity-100\" : \"opacity-0\",\n ),\n [useBottomSheetMotion, slideEntrance, isAnimating],\n );\n\n const overlayStyle = useMemo((): React.CSSProperties => {\n const style: React.CSSProperties = {\n transitionDuration: `${panelCloseMs}ms`,\n };\n if (useBottomSheetMotion || slideEntrance) {\n style.transitionProperty = \"opacity\";\n style.transitionTimingFunction = slideMotionEasing;\n }\n return style;\n }, [panelCloseMs, useBottomSheetMotion, slideEntrance, slideMotionEasing]);\n\n const panelClassName = useMemo(() => {\n const sizeKey = size === \"full\" ? null : size;\n return cn(\n \"bg-background relative z-10 w-full overflow-hidden shadow-2xl\",\n size === \"full\"\n ? \"flex min-h-0 flex-1 flex-col max-w-none rounded-none\"\n : cn(\n \"border-primary/10 border\",\n useMobileBottomSheetChrome\n ? \"max-lg:max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] max-lg:rounded-t-2xl max-lg:rounded-b-none max-lg:border-x-0 max-lg:border-b-0 max-lg:border-t max-lg:border-primary/10 lg:rounded-2xl\"\n : \"rounded-2xl\",\n sizeKey &&\n (useMobileBottomSheetChrome\n ? SIZE_CLASSES_LG_ONLY[sizeKey]\n : SIZE_CLASSES[sizeKey]),\n ),\n !useBottomSheetMotion &&\n !useDesktopSlideEntrance &&\n cn(\n \"transition-all ease-in-out\",\n isAnimating ? \"scale-100 opacity-100\" : \"scale-95 opacity-0\",\n ),\n className,\n );\n }, [\n size,\n useMobileBottomSheetChrome,\n useBottomSheetMotion,\n useDesktopSlideEntrance,\n isAnimating,\n className,\n ]);\n\n const panelStyle = useMemo((): React.CSSProperties => {\n const base = { ...rest.style };\n if (useBottomSheetMotion) {\n return {\n ...base,\n transform: isAnimating ? \"translateY(0)\" : \"translateY(100%)\",\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${DIALOG_MOTION_MS}ms`,\n transitionTimingFunction: slideMotionEasing,\n };\n }\n if (useDesktopSlideEntrance) {\n return {\n ...base,\n transform: isAnimating\n ? \"translateY(0)\"\n : `translateY(${slideOffsetPx}px)`,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${DIALOG_MOTION_MS}ms`,\n transitionTimingFunction: slideMotionEasing,\n };\n }\n return {\n ...base,\n transitionDuration: `${duration}ms`,\n };\n }, [\n rest.style,\n useBottomSheetMotion,\n useDesktopSlideEntrance,\n isAnimating,\n slideOffsetPx,\n slideMotionEasing,\n duration,\n ]);\n\n if (!shouldRender) return null;\n\n return createPortal(\n <div className={rootClassName} style={rootStyle}>\n <div\n className={overlayClassName}\n style={overlayStyle}\n onClick={handleOverlayClick}\n />\n\n <div {...rest} className={panelClassName} style={panelStyle}>\n {children}\n\n {showClose && (\n <DialogCloseButton\n className={cn(\"absolute top-4 right-4 md:top-4 md:right-4\")}\n />\n )}\n </div>\n </div>,\n document.body,\n );\n};\n\nexport const DialogHeader: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => {\n return (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 p-6 text-center sm:text-left\",\n fixed && \"bg-background border-primary/10 sticky top-0 z-10 border-b\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogFooter: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => {\n return (\n <div\n className={cn(\n \"flex flex-col-reverse p-6 sm:flex-row sm:justify-end sm:space-x-2\",\n fixed &&\n \"bg-background border-primary/10 sticky bottom-0 z-10 border-t pb-[max(1.5rem,env(safe-area-inset-bottom))]\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogTitle: React.FC<\n React.HTMLAttributes<HTMLHeadingElement>\n> = ({ className, ...props }) => {\n return (\n <h3\n className={cn(\n \"text-primary text-xl leading-none font-semibold\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogDescription: React.FC<\n React.HTMLAttributes<HTMLParagraphElement>\n> = ({ className, ...props }) => {\n return (\n <p className={cn(\"text-muted-foreground text-sm\", className)} {...props} />\n );\n};\n"]}
|
package/dist/react/dropdown.d.ts
CHANGED
|
@@ -3,6 +3,25 @@ import React__default from 'react';
|
|
|
3
3
|
import { ChevronDown } from 'lucide-react';
|
|
4
4
|
import { ButtonProps } from './button.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Narrow-viewport (≤1024px) bottom-sheet options for {@link DropdownContent}
|
|
8
|
+
* and {@link DropdownSubContent}. `className` merges onto the same panel as
|
|
9
|
+
* `DropdownContent`’s root `className` (after base sheet styles); use it for
|
|
10
|
+
* overrides such as `max-h-[…]`.
|
|
11
|
+
*/
|
|
12
|
+
interface DropdownMobileSheetOptions {
|
|
13
|
+
/** When `false`, keep the floating menu on narrow viewports. Default `true`. */
|
|
14
|
+
sheet?: boolean;
|
|
15
|
+
/** Optional header title on the same row as the close control. */
|
|
16
|
+
title?: string;
|
|
17
|
+
/** Extra classes on the sheet panel (merged after base sheet styles, before root `className`). */
|
|
18
|
+
className?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Extra classes on the scrollable body below the header (merged after the
|
|
21
|
+
* default `pb-20` and safe-area bottom padding).
|
|
22
|
+
*/
|
|
23
|
+
contentClassName?: string;
|
|
24
|
+
}
|
|
6
25
|
type Side = "top" | "bottom" | "left" | "right";
|
|
7
26
|
type Align = "start" | "center" | "end";
|
|
8
27
|
interface DropdownProps {
|
|
@@ -41,12 +60,11 @@ interface DropdownContentProps extends React__default.HTMLAttributes<HTMLDivElem
|
|
|
41
60
|
/** Loop keyboard focus at list boundaries */
|
|
42
61
|
loop?: boolean;
|
|
43
62
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
63
|
+
* Mobile (≤1024px) bottom-sheet configuration (`sheet`, `title`, panel
|
|
64
|
+
* `className`, optional scroll body `contentClassName` after default `pb-20`
|
|
65
|
+
* + safe area).
|
|
46
66
|
*/
|
|
47
|
-
|
|
48
|
-
/** Title shown in the mobile sheet header (optional) */
|
|
49
|
-
mobileTitle?: string;
|
|
67
|
+
mobileOptions?: DropdownMobileSheetOptions;
|
|
50
68
|
/**
|
|
51
69
|
* Mobile bottom sheet only. When `true` (default), panel motion matches Dialog
|
|
52
70
|
* `slideEntrance`: `translateY(slideEntranceOffsetPx)` + opacity, with the same
|
|
@@ -98,12 +116,11 @@ declare const DropdownSubTrigger: React__default.FC<React__default.HTMLAttribute
|
|
|
98
116
|
declare const DropdownSubContent: React__default.FC<React__default.HTMLAttributes<HTMLDivElement> & {
|
|
99
117
|
duration?: number;
|
|
100
118
|
viewportPadding?: number;
|
|
101
|
-
/** Same
|
|
102
|
-
|
|
103
|
-
mobileTitle?: string;
|
|
119
|
+
/** Same meaning as {@link DropdownContent}. */
|
|
120
|
+
mobileOptions?: DropdownMobileSheetOptions;
|
|
104
121
|
/** Same as {@link DropdownContent} slideEntrance; default true. */
|
|
105
122
|
slideEntrance?: boolean;
|
|
106
123
|
slideEntranceOffsetPx?: number;
|
|
107
124
|
}>;
|
|
108
125
|
|
|
109
|
-
export { Dropdown, DropdownCheckboxItem, DropdownChevron, DropdownContent, DropdownItem, DropdownLabel, DropdownMobileClose, type DropdownMobileCloseProps, DropdownRadioGroup, DropdownRadioItem, DropdownSeparator, DropdownSub, DropdownSubContent, DropdownSubTrigger, DropdownTrigger, type DropdownTriggerProps };
|
|
126
|
+
export { Dropdown, DropdownCheckboxItem, DropdownChevron, DropdownContent, DropdownItem, DropdownLabel, DropdownMobileClose, type DropdownMobileCloseProps, type DropdownMobileSheetOptions, DropdownRadioGroup, DropdownRadioItem, DropdownSeparator, DropdownSub, DropdownSubContent, DropdownSubTrigger, DropdownTrigger, type DropdownTriggerProps };
|