entity-react-modals 1.0.0 → 1.1.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/README.md +195 -16
- package/dist/index.cjs +189 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -3
- package/dist/index.d.ts +7 -3
- package/dist/index.js +189 -29
- package/dist/index.js.map +1 -1
- package/dist/styles.css +7 -2
- package/package.json +2 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ModalContext.tsx","../src/Modal.tsx","../src/ModalTrigger.tsx","../src/spring.ts","../src/animate.ts","../src/hooks/useEscapeKey.ts","../src/hooks/useClickOutside.ts","../src/ModalContent.tsx","../src/ModalClose.tsx","../src/ModalHeader.tsx","../src/ModalBody.tsx","../src/ModalFooter.tsx"],"names":["jsx","useCallback","useEffect","useState","useRef"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from 'react';\nimport type { SpringPreset, SpringConfig } from './spring';\n\nexport interface ModalContextValue {\n open: boolean;\n onClose: () => void;\n onOpen: () => void;\n spring?: SpringPreset | SpringConfig;\n backdropColor?: string;\n backdropBlur?: number;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n animationDuration?: number;\n}\n\nexport const ModalContext = createContext<ModalContextValue | null>(null);\n\nexport function useModalContext() {\n const ctx = useContext(ModalContext);\n if (!ctx) throw new Error('Modal compound components must be used within <Modal>');\n return ctx;\n}\n","import { useState, useCallback, type ReactNode } from 'react';\nimport { ModalContext, type ModalContextValue } from './ModalContext';\nimport type { SpringPreset, SpringConfig } from './spring';\n\nexport interface ModalProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n spring?: SpringPreset | SpringConfig;\n backdropColor?: string;\n backdropBlur?: number;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n animationDuration?: number;\n}\n\nexport default function Modal({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n spring,\n backdropColor,\n backdropBlur,\n size,\n animationDuration,\n}: ModalProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const onClose = useCallback(() => {\n if (isControlled) {\n onOpenChange?.(false);\n } else {\n setInternalOpen(false);\n onOpenChange?.(false);\n }\n }, [isControlled, onOpenChange]);\n\n const onOpen = useCallback(() => {\n if (isControlled) {\n onOpenChange?.(true);\n } else {\n setInternalOpen(true);\n onOpenChange?.(true);\n }\n }, [isControlled, onOpenChange]);\n\n const value: ModalContextValue = {\n open,\n onClose,\n onOpen,\n spring,\n backdropColor,\n backdropBlur,\n size,\n animationDuration,\n };\n\n return <ModalContext.Provider value={value}>{children}</ModalContext.Provider>;\n}\n","import { cloneElement, isValidElement, type ReactNode } from 'react';\nimport { useModalContext } from './ModalContext';\n\nexport interface ModalTriggerProps {\n children: ReactNode;\n}\n\nexport default function ModalTrigger({ children }: ModalTriggerProps) {\n const { onOpen } = useModalContext();\n\n if (!isValidElement(children)) {\n return <button onClick={onOpen}>{children}</button>;\n }\n\n return cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n onClick: (e: React.MouseEvent) => {\n onOpen();\n const existing = (children as React.ReactElement<Record<string, unknown>>).props.onClick;\n if (typeof existing === 'function') existing(e);\n },\n });\n}\n","export interface SpringConfig {\n stiffness: number;\n damping: number;\n mass: number;\n}\n\nexport type SpringPreset = 'default' | 'gentle' | 'wobbly' | 'stiff' | 'slow';\n\nconst PRESETS: Record<SpringPreset, SpringConfig> = {\n default: { stiffness: 100, damping: 10, mass: 1 },\n gentle: { stiffness: 100, damping: 20, mass: 1 },\n wobbly: { stiffness: 200, damping: 10, mass: 1 },\n stiff: { stiffness: 400, damping: 30, mass: 1 },\n slow: { stiffness: 50, damping: 20, mass: 1 },\n};\n\nconst VELOCITY_THRESHOLD = 0.001;\nconst DISPLACEMENT_THRESHOLD = 0.001;\nconst MAX_SIMULATION_STEPS = 1200;\nconst FIXED_DT = 1 / 120;\n\nexport function resolveSpringConfig(input?: SpringPreset | Partial<SpringConfig>): SpringConfig {\n if (!input) return PRESETS.default;\n if (typeof input === 'string') return PRESETS[input] ?? PRESETS.default;\n return { ...PRESETS.default, ...input };\n}\n\nfunction isAtRest(value: number, velocity: number, target: number): boolean {\n return (\n Math.abs(velocity) < VELOCITY_THRESHOLD &&\n Math.abs(value - target) < DISPLACEMENT_THRESHOLD\n );\n}\n\nexport interface GenerateOptions {\n maxDuration?: number;\n}\n\nexport function generateSpringKeyframes(\n from: number,\n to: number,\n config: SpringConfig,\n options?: GenerateOptions,\n): { keyframes: number[]; duration: number } {\n const { stiffness, damping, mass } = config;\n const maxSteps = options?.maxDuration\n ? Math.min(MAX_SIMULATION_STEPS, Math.ceil((options.maxDuration / 1000) / FIXED_DT))\n : MAX_SIMULATION_STEPS;\n\n let value = from;\n let velocity = 0;\n const positions: number[] = [from];\n let steps = 0;\n\n while (steps < maxSteps) {\n if (isAtRest(value, velocity, to)) {\n positions.push(to);\n break;\n }\n\n const displacement = value - to;\n const springForce = -stiffness * displacement;\n const dampingForce = -damping * velocity;\n const acceleration = (springForce + dampingForce) / mass;\n\n velocity += acceleration * FIXED_DT;\n value += velocity * FIXED_DT;\n positions.push(value);\n steps++;\n }\n\n if (steps >= maxSteps) {\n positions.push(to);\n }\n\n const duration = steps * FIXED_DT * 1000;\n return { keyframes: positions, duration };\n}\n\nexport interface WAAPIKeyframeOptions {\n maxDuration?: number;\n}\n\nexport function springToWAAPIKeyframes(\n fromValue: number,\n toValue: number,\n property: 'opacity' | 'transform',\n config: SpringConfig,\n options?: WAAPIKeyframeOptions,\n): { keyframes: Keyframe[]; duration: number } {\n const { keyframes: positions, duration } = generateSpringKeyframes(fromValue, toValue, config, options);\n\n const waapiKeyframes: Keyframe[] = positions.map((pos, i) => {\n const offset = i / (positions.length - 1);\n\n if (property === 'opacity') {\n return { opacity: String(pos), offset } as Keyframe;\n }\n\n const scale = 0.95 + 0.05 * pos;\n return {\n transform: `scale(${scale})`,\n opacity: String(pos),\n offset,\n } as Keyframe;\n });\n\n return { keyframes: waapiKeyframes, duration };\n}\n","import { resolveSpringConfig, springToWAAPIKeyframes, type SpringPreset, type SpringConfig } from './spring';\n\nfunction prefersReducedMotion(): boolean {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nexport interface AnimateConfig {\n spring?: SpringPreset | SpringConfig;\n duration?: number;\n}\n\nconst EXIT_MAX_DURATION = 400;\n\nexport function animateIn(\n backdropEl: HTMLElement,\n panelEl: HTMLElement,\n config?: AnimateConfig,\n): Animation[] {\n if (prefersReducedMotion()) {\n backdropEl.style.opacity = '1';\n panelEl.style.opacity = '1';\n panelEl.style.transform = 'scale(1)';\n return [];\n }\n\n const springConfig = resolveSpringConfig(config?.spring);\n\n const { keyframes: backdropKF, duration: backdropDur } = springToWAAPIKeyframes(0, 1, 'opacity', {\n ...springConfig,\n stiffness: springConfig.stiffness * 0.8,\n });\n\n const { keyframes: panelKF, duration: panelDur } = springToWAAPIKeyframes(0, 1, 'transform', springConfig);\n\n const backdropAnim = backdropEl.animate(backdropKF, {\n duration: backdropDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n const panelAnim = panelEl.animate(panelKF, {\n duration: panelDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n return [backdropAnim, panelAnim];\n}\n\nexport function animateOut(\n backdropEl: HTMLElement,\n panelEl: HTMLElement,\n config?: AnimateConfig,\n): Promise<void> {\n if (prefersReducedMotion()) {\n return Promise.resolve();\n }\n\n const springConfig = resolveSpringConfig(config?.spring);\n const exitConfig = {\n stiffness: springConfig.stiffness * 2,\n damping: springConfig.damping * 1.5,\n mass: springConfig.mass,\n };\n\n const { keyframes: backdropKF, duration: backdropDur } = springToWAAPIKeyframes(1, 0, 'opacity', {\n ...exitConfig,\n stiffness: exitConfig.stiffness * 0.8,\n }, { maxDuration: EXIT_MAX_DURATION });\n\n const { keyframes: panelKF, duration: panelDur } = springToWAAPIKeyframes(1, 0, 'transform', exitConfig, {\n maxDuration: EXIT_MAX_DURATION,\n });\n\n const backdropAnim = backdropEl.animate(backdropKF, {\n duration: backdropDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n const panelAnim = panelEl.animate(panelKF, {\n duration: panelDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n return Promise.all([backdropAnim.finished, panelAnim.finished]).then(() => {});\n}\n","import { useEffect } from 'react';\n\nexport function useEscapeKey(enabled: boolean, onEscape: () => void) {\n useEffect(() => {\n if (!enabled) return;\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') onEscape();\n }\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [enabled, onEscape]);\n}\n","import { useEffect, useRef, useCallback } from 'react';\n\nexport function useClickOutside(enabled: boolean, onClick: () => void) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n if (!enabled || !panelRef.current) return;\n if (!panelRef.current.contains(e.target as Node)) {\n onClick();\n }\n },\n [enabled, onClick],\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [enabled, handleClick]);\n\n return panelRef;\n}\n","import { useState, useRef, useCallback, useEffect, type MutableRefObject, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useModalContext } from './ModalContext';\nimport { animateIn, animateOut } from './animate';\nimport { useEscapeKey } from './hooks/useEscapeKey';\nimport { useClickOutside } from './hooks/useClickOutside';\nimport type { SpringPreset, SpringConfig } from './spring';\n\nexport interface ModalContentProps {\n children: ReactNode;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n backdropColor?: string;\n backdropBlur?: number;\n spring?: SpringPreset | SpringConfig;\n animationDuration?: number;\n}\n\nconst SIZE_MAP = {\n sm: '400px',\n md: '560px',\n lg: '720px',\n xl: '900px',\n};\n\nconst SAFETY_UNMOUNT_MS = 600;\n\nexport default function ModalContent({\n children,\n size: sizeProp,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n backdropColor,\n backdropBlur,\n spring,\n animationDuration,\n}: ModalContentProps) {\n const ctx = useModalContext();\n const size = sizeProp ?? ctx.size ?? 'md';\n const resolvedBackdropColor = backdropColor ?? ctx.backdropColor ?? 'rgba(0, 0, 0, 0.6)';\n const resolvedBackdropBlur = backdropBlur ?? ctx.backdropBlur ?? 4;\n const resolvedSpring = spring ?? ctx.spring;\n\n const [render, setRender] = useState(ctx.open);\n\n const backdropRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const animatingRef = useRef(false);\n const prevOpen = useRef(ctx.open);\n const safetyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearSafetyTimer = useCallback(() => {\n if (safetyTimerRef.current !== null) {\n clearTimeout(safetyTimerRef.current);\n safetyTimerRef.current = null;\n }\n }, []);\n\n const handleClose = useCallback(() => {\n if (animatingRef.current) return;\n ctx.onClose();\n }, [ctx]);\n\n useEscapeKey(closeOnEscape && ctx.open, handleClose);\n const clickOutsideRef = useClickOutside(closeOnBackdropClick && ctx.open, handleClose);\n\n useEffect(() => {\n if (ctx.open && !prevOpen.current) {\n clearSafetyTimer();\n setRender(true);\n animatingRef.current = true;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (backdropRef.current && panelRef.current) {\n animateIn(backdropRef.current, panelRef.current, {\n spring: resolvedSpring,\n duration: animationDuration,\n });\n setTimeout(() => {\n animatingRef.current = false;\n }, 500);\n }\n });\n });\n } else if (!ctx.open && prevOpen.current) {\n animatingRef.current = true;\n\n if (backdropRef.current) {\n backdropRef.current.style.pointerEvents = 'none';\n }\n\n const unmount = () => {\n clearSafetyTimer();\n setRender(false);\n animatingRef.current = false;\n };\n\n safetyTimerRef.current = setTimeout(unmount, SAFETY_UNMOUNT_MS);\n\n if (backdropRef.current && panelRef.current) {\n animateOut(backdropRef.current, panelRef.current, {\n spring: resolvedSpring,\n duration: animationDuration,\n }).then(unmount);\n } else {\n unmount();\n }\n }\n prevOpen.current = ctx.open;\n\n return clearSafetyTimer;\n }, [ctx.open, resolvedSpring, animationDuration, clearSafetyTimer]);\n\n if (!render) return null;\n\n const setRefs = (el: HTMLDivElement | null) => {\n clickOutsideRef.current = el;\n (panelRef as MutableRefObject<HTMLDivElement | null>).current = el;\n };\n\n return createPortal(\n <div\n className=\"rm-backdrop\"\n ref={backdropRef}\n style={{\n background: resolvedBackdropColor,\n backdropFilter: `blur(${resolvedBackdropBlur}px)`,\n WebkitBackdropFilter: `blur(${resolvedBackdropBlur}px)`,\n }}\n >\n <div\n ref={setRefs}\n className={`rm-panel rm-panel--${size}`}\n role=\"dialog\"\n aria-modal=\"true\"\n style={{ maxWidth: SIZE_MAP[size] }}\n >\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode } from 'react';\nimport { useModalContext } from './ModalContext';\n\nexport interface ModalCloseProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport default function ModalClose({ children = '×', className }: ModalCloseProps) {\n const { onClose } = useModalContext();\n\n return (\n <button className={`rm-close ${className ?? ''}`} onClick={onClose} aria-label=\"Close\">\n {children}\n </button>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface ModalHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\nexport default function ModalHeader({ children, className }: ModalHeaderProps) {\n return <div className={`rm-header ${className ?? ''}`}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\n\nexport interface ModalBodyProps {\n children: ReactNode;\n className?: string;\n}\n\nexport default function ModalBody({ children, className }: ModalBodyProps) {\n return <div className={`rm-body ${className ?? ''}`}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\n\nexport interface ModalFooterProps {\n children: ReactNode;\n className?: string;\n}\n\nexport default function ModalFooter({ children, className }: ModalFooterProps) {\n return <div className={`rm-footer ${className ?? ''}`}>{children}</div>;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/inject.ts","../src/styles.ts","../src/ModalContext.tsx","../src/Modal.tsx","../src/ModalTrigger.tsx","../src/spring.ts","../src/animate.ts","../src/hooks/useEscapeKey.ts","../src/hooks/useClickOutside.ts","../src/ModalContent.tsx","../src/ModalClose.tsx","../src/ModalHeader.tsx","../src/ModalBody.tsx","../src/ModalFooter.tsx","../src/index.ts"],"names":["jsx","useCallback","useEffect","useState","useRef"],"mappings":"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","file":"index.js","sourcesContent":["const INJECTED = '__ERM_INJECTED__';\n\nexport function injectStyles(css: string) {\n if (typeof document === 'undefined') return;\n if ((window as Record<string, unknown>)[INJECTED]) return;\n (window as Record<string, unknown>)[INJECTED] = true;\n\n const style = document.createElement('style');\n style.textContent = css;\n document.head.appendChild(style);\n}\n","export const styles = `\n:root {\n --rm-backdrop-bg: rgba(0, 0, 0, 0.6);\n --rm-panel-bg: #ffffff;\n --rm-panel-radius: 12px;\n --rm-panel-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);\n --rm-close-color: #3b82f6;\n --rm-close-hover: #2563eb;\n --rm-header-border: #e2e8f0;\n --rm-footer-border: #e2e8f0;\n}\n\n.rm-backdrop {\n position: fixed;\n inset: 0;\n z-index: 9998;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n opacity: 0;\n}\n\n.rm-panel {\n position: relative;\n z-index: 9999;\n background: var(--rm-panel-bg);\n border-radius: var(--rm-panel-radius);\n box-shadow: var(--rm-panel-shadow);\n width: 100%;\n max-height: calc(100vh - 40px);\n opacity: 0;\n transform: scale(0.95);\n display: flex;\n flex-direction: column;\n}\n\n.rm-panel--sm { max-width: 400px; }\n.rm-panel--md { max-width: 560px; }\n.rm-panel--lg { max-width: 720px; }\n.rm-panel--xl { max-width: 900px; }\n\n.rm-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--rm-header-border);\n flex-shrink: 0;\n}\n\n.rm-header h2,\n.rm-header h3 {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n color: #1e293b;\n}\n\n.rm-body {\n padding: 20px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.rm-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--rm-footer-border);\n flex-shrink: 0;\n}\n\n.rm-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--rm-close-color);\n font-size: 1.25rem;\n line-height: 1;\n cursor: pointer;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n\n.rm-close:hover {\n background: rgba(59, 130, 246, 0.1);\n color: var(--rm-close-hover);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .rm-backdrop,\n .rm-panel {\n transition: none !important;\n animation: none !important;\n }\n}\n`;\n","import { createContext, useContext } from 'react';\nimport type { SpringPreset, SpringConfig, AnimationVariant } from './spring';\n\nexport interface ModalContextValue {\n open: boolean;\n onClose: () => void;\n onOpen: () => void;\n spring?: SpringPreset | SpringConfig;\n animation?: AnimationVariant;\n backdropColor?: string;\n backdropBlur?: number;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n animationDuration?: number;\n}\n\nexport const ModalContext = createContext<ModalContextValue | null>(null);\n\nexport function useModalContext() {\n const ctx = useContext(ModalContext);\n if (!ctx) throw new Error('Modal compound components must be used within <Modal>');\n return ctx;\n}\n","import { useState, useCallback, type ReactNode } from 'react';\nimport { ModalContext, type ModalContextValue } from './ModalContext';\nimport type { SpringPreset, SpringConfig, AnimationVariant } from './spring';\n\nexport interface ModalProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n spring?: SpringPreset | SpringConfig;\n animation?: AnimationVariant;\n backdropColor?: string;\n backdropBlur?: number;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n animationDuration?: number;\n}\n\nexport default function Modal({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n spring,\n animation,\n backdropColor,\n backdropBlur,\n size,\n animationDuration,\n}: ModalProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const onClose = useCallback(() => {\n if (isControlled) {\n onOpenChange?.(false);\n } else {\n setInternalOpen(false);\n onOpenChange?.(false);\n }\n }, [isControlled, onOpenChange]);\n\n const onOpen = useCallback(() => {\n if (isControlled) {\n onOpenChange?.(true);\n } else {\n setInternalOpen(true);\n onOpenChange?.(true);\n }\n }, [isControlled, onOpenChange]);\n\n const value: ModalContextValue = {\n open,\n onClose,\n onOpen,\n spring,\n animation,\n backdropColor,\n backdropBlur,\n size,\n animationDuration,\n };\n\n return <ModalContext.Provider value={value}>{children}</ModalContext.Provider>;\n}\n","import { cloneElement, isValidElement, type ReactNode } from 'react';\nimport { useModalContext } from './ModalContext';\n\nexport interface ModalTriggerProps {\n children: ReactNode;\n}\n\nexport default function ModalTrigger({ children }: ModalTriggerProps) {\n const { onOpen } = useModalContext();\n\n if (!isValidElement(children)) {\n return <button onClick={onOpen}>{children}</button>;\n }\n\n return cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n onClick: (e: React.MouseEvent) => {\n onOpen();\n const existing = (children as React.ReactElement<Record<string, unknown>>).props.onClick;\n if (typeof existing === 'function') existing(e);\n },\n });\n}\n","export interface SpringConfig {\n stiffness: number;\n damping: number;\n mass: number;\n}\n\nexport type SpringPreset = 'default' | 'gentle' | 'wobbly' | 'stiff' | 'slow';\n\nexport type AnimationVariant = 'scale' | 'slide-bottom' | 'slide-top' | 'slide-left' | 'slide-right' | 'fade' | 'none';\n\nconst PRESETS: Record<SpringPreset, SpringConfig> = {\n default: { stiffness: 100, damping: 10, mass: 1 },\n gentle: { stiffness: 100, damping: 20, mass: 1 },\n wobbly: { stiffness: 200, damping: 10, mass: 1 },\n stiff: { stiffness: 400, damping: 30, mass: 1 },\n slow: { stiffness: 50, damping: 20, mass: 1 },\n};\n\nconst VELOCITY_THRESHOLD = 0.001;\nconst DISPLACEMENT_THRESHOLD = 0.001;\nconst MAX_SIMULATION_STEPS = 1200;\nconst FIXED_DT = 1 / 120;\n\nexport function resolveSpringConfig(input?: SpringPreset | Partial<SpringConfig>): SpringConfig {\n if (!input) return PRESETS.default;\n if (typeof input === 'string') return PRESETS[input] ?? PRESETS.default;\n return { ...PRESETS.default, ...input };\n}\n\nfunction isAtRest(value: number, velocity: number, target: number): boolean {\n return (\n Math.abs(velocity) < VELOCITY_THRESHOLD &&\n Math.abs(value - target) < DISPLACEMENT_THRESHOLD\n );\n}\n\nexport interface GenerateOptions {\n maxDuration?: number;\n}\n\nexport function generateSpringKeyframes(\n from: number,\n to: number,\n config: SpringConfig,\n options?: GenerateOptions,\n): { keyframes: number[]; duration: number } {\n const { stiffness, damping, mass } = config;\n const maxSteps = options?.maxDuration\n ? Math.min(MAX_SIMULATION_STEPS, Math.ceil((options.maxDuration / 1000) / FIXED_DT))\n : MAX_SIMULATION_STEPS;\n\n let value = from;\n let velocity = 0;\n const positions: number[] = [from];\n let steps = 0;\n\n while (steps < maxSteps) {\n if (isAtRest(value, velocity, to)) {\n positions.push(to);\n break;\n }\n\n const displacement = value - to;\n const springForce = -stiffness * displacement;\n const dampingForce = -damping * velocity;\n const acceleration = (springForce + dampingForce) / mass;\n\n velocity += acceleration * FIXED_DT;\n value += velocity * FIXED_DT;\n positions.push(value);\n steps++;\n }\n\n if (steps >= maxSteps) {\n positions.push(to);\n }\n\n const duration = steps * FIXED_DT * 1000;\n return { keyframes: positions, duration };\n}\n\nexport interface WAAPIKeyframeOptions {\n maxDuration?: number;\n}\n\nfunction buildTransformKeyframes(\n positions: number[],\n variant: AnimationVariant,\n): Keyframe[] {\n return positions.map((pos, i) => {\n const offset = i / (positions.length - 1);\n\n switch (variant) {\n case 'fade':\n return { opacity: String(pos), offset } as Keyframe;\n\n case 'scale':\n return {\n transform: `scale(${0.95 + 0.05 * pos})`,\n opacity: String(pos),\n offset,\n } as Keyframe;\n\n case 'slide-bottom':\n return {\n transform: `translateY(${(1 - pos) * 100}%)`,\n opacity: String(pos),\n offset,\n } as Keyframe;\n\n case 'slide-top':\n return {\n transform: `translateY(${(pos - 1) * 100}%)`,\n opacity: String(pos),\n offset,\n } as Keyframe;\n\n case 'slide-left':\n return {\n transform: `translateX(${(pos - 1) * 100}%)`,\n opacity: String(pos),\n offset,\n } as Keyframe;\n\n case 'slide-right':\n return {\n transform: `translateX(${(1 - pos) * 100}%)`,\n opacity: String(pos),\n offset,\n } as Keyframe;\n\n default:\n return { opacity: String(pos), offset } as Keyframe;\n }\n });\n}\n\nexport function springToWAAPIKeyframes(\n fromValue: number,\n toValue: number,\n property: 'opacity' | 'transform',\n config: SpringConfig,\n options?: WAAPIKeyframeOptions & { variant?: AnimationVariant },\n): { keyframes: Keyframe[]; duration: number } {\n const { keyframes: positions, duration } = generateSpringKeyframes(fromValue, toValue, config, options);\n\n if (property === 'opacity') {\n const keyframes = positions.map((pos, i) => ({\n opacity: String(pos),\n offset: i / (positions.length - 1),\n })) as Keyframe[];\n return { keyframes, duration };\n }\n\n const variant = options?.variant ?? 'scale';\n return { keyframes: buildTransformKeyframes(positions, variant), duration };\n}\n","import { resolveSpringConfig, springToWAAPIKeyframes, type SpringPreset, type SpringConfig, type AnimationVariant } from './spring';\n\nfunction prefersReducedMotion(): boolean {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nexport interface AnimateConfig {\n spring?: SpringPreset | SpringConfig;\n duration?: number;\n animation?: AnimationVariant;\n}\n\nconst EXIT_MAX_DURATION = 400;\n\nexport function animateIn(\n backdropEl: HTMLElement,\n panelEl: HTMLElement,\n config?: AnimateConfig,\n): Animation[] {\n const variant = config?.animation ?? 'scale';\n\n if (prefersReducedMotion() || variant === 'none') {\n backdropEl.style.opacity = '1';\n panelEl.style.opacity = '1';\n panelEl.style.transform = 'none';\n return [];\n }\n\n const springConfig = resolveSpringConfig(config?.spring);\n\n const { keyframes: backdropKF, duration: backdropDur } = springToWAAPIKeyframes(0, 1, 'opacity', {\n ...springConfig,\n stiffness: springConfig.stiffness * 0.8,\n });\n\n const { keyframes: panelKF, duration: panelDur } = springToWAAPIKeyframes(0, 1, 'transform', springConfig, { variant });\n\n const backdropAnim = backdropEl.animate(backdropKF, {\n duration: backdropDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n const panelAnim = panelEl.animate(panelKF, {\n duration: panelDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n return [backdropAnim, panelAnim];\n}\n\nexport function animateOut(\n backdropEl: HTMLElement,\n panelEl: HTMLElement,\n config?: AnimateConfig,\n): Promise<void> {\n const variant = config?.animation ?? 'scale';\n\n if (prefersReducedMotion() || variant === 'none') {\n return Promise.resolve();\n }\n\n const springConfig = resolveSpringConfig(config?.spring);\n const exitConfig = {\n stiffness: springConfig.stiffness * 2,\n damping: springConfig.damping * 1.5,\n mass: springConfig.mass,\n };\n\n const { keyframes: backdropKF, duration: backdropDur } = springToWAAPIKeyframes(1, 0, 'opacity', {\n ...exitConfig,\n stiffness: exitConfig.stiffness * 0.8,\n }, { maxDuration: EXIT_MAX_DURATION });\n\n const { keyframes: panelKF, duration: panelDur } = springToWAAPIKeyframes(1, 0, 'transform', exitConfig, {\n maxDuration: EXIT_MAX_DURATION,\n variant,\n });\n\n const backdropAnim = backdropEl.animate(backdropKF, {\n duration: backdropDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n const panelAnim = panelEl.animate(panelKF, {\n duration: panelDur,\n easing: 'linear',\n fill: 'forwards',\n });\n\n return Promise.all([backdropAnim.finished, panelAnim.finished]).then(() => {});\n}\n","import { useEffect } from 'react';\n\nexport function useEscapeKey(enabled: boolean, onEscape: () => void) {\n useEffect(() => {\n if (!enabled) return;\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') onEscape();\n }\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [enabled, onEscape]);\n}\n","import { useEffect, useRef, useCallback } from 'react';\n\nexport function useClickOutside(enabled: boolean, onClick: () => void) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n if (!enabled || !panelRef.current) return;\n if (!panelRef.current.contains(e.target as Node)) {\n onClick();\n }\n },\n [enabled, onClick],\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [enabled, handleClick]);\n\n return panelRef;\n}\n","import { useState, useRef, useCallback, useEffect, type MutableRefObject, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useModalContext } from './ModalContext';\nimport { animateIn, animateOut } from './animate';\nimport { useEscapeKey } from './hooks/useEscapeKey';\nimport { useClickOutside } from './hooks/useClickOutside';\nimport type { SpringPreset, SpringConfig, AnimationVariant } from './spring';\n\nexport interface ModalContentProps {\n children: ReactNode;\n className?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n animation?: AnimationVariant;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n backdropColor?: string;\n backdropBlur?: number;\n spring?: SpringPreset | SpringConfig;\n animationDuration?: number;\n}\n\nconst SAFETY_UNMOUNT_MS = 600;\n\nexport default function ModalContent({\n children,\n className,\n size: sizeProp,\n animation: animationProp,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n backdropColor,\n backdropBlur,\n spring,\n animationDuration,\n}: ModalContentProps) {\n const ctx = useModalContext();\n const size = sizeProp ?? ctx.size ?? 'md';\n const resolvedAnimation = animationProp ?? ctx.animation ?? 'scale';\n const resolvedBackdropColor = backdropColor ?? ctx.backdropColor ?? 'rgba(0, 0, 0, 0.6)';\n const resolvedBackdropBlur = backdropBlur ?? ctx.backdropBlur ?? 4;\n const resolvedSpring = spring ?? ctx.spring;\n\n const [render, setRender] = useState(ctx.open);\n\n const backdropRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const animatingRef = useRef(false);\n const prevOpen = useRef(ctx.open);\n const safetyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearSafetyTimer = useCallback(() => {\n if (safetyTimerRef.current !== null) {\n clearTimeout(safetyTimerRef.current);\n safetyTimerRef.current = null;\n }\n }, []);\n\n const handleClose = useCallback(() => {\n if (animatingRef.current) return;\n ctx.onClose();\n }, [ctx]);\n\n useEscapeKey(closeOnEscape && ctx.open, handleClose);\n const clickOutsideRef = useClickOutside(closeOnBackdropClick && ctx.open, handleClose);\n\n useEffect(() => {\n if (ctx.open && !prevOpen.current) {\n clearSafetyTimer();\n setRender(true);\n animatingRef.current = true;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (backdropRef.current && panelRef.current) {\n animateIn(backdropRef.current, panelRef.current, {\n spring: resolvedSpring,\n animation: resolvedAnimation,\n duration: animationDuration,\n });\n setTimeout(() => {\n animatingRef.current = false;\n }, 500);\n }\n });\n });\n } else if (!ctx.open && prevOpen.current) {\n animatingRef.current = true;\n\n if (backdropRef.current) {\n backdropRef.current.style.pointerEvents = 'none';\n }\n\n const unmount = () => {\n clearSafetyTimer();\n setRender(false);\n animatingRef.current = false;\n };\n\n safetyTimerRef.current = setTimeout(unmount, SAFETY_UNMOUNT_MS);\n\n if (backdropRef.current && panelRef.current) {\n animateOut(backdropRef.current, panelRef.current, {\n spring: resolvedSpring,\n animation: resolvedAnimation,\n duration: animationDuration,\n }).then(unmount);\n } else {\n unmount();\n }\n }\n prevOpen.current = ctx.open;\n\n return clearSafetyTimer;\n }, [ctx.open, resolvedSpring, resolvedAnimation, animationDuration, clearSafetyTimer]);\n\n if (!render) return null;\n\n const setRefs = (el: HTMLDivElement | null) => {\n clickOutsideRef.current = el;\n (panelRef as MutableRefObject<HTMLDivElement | null>).current = el;\n };\n\n return createPortal(\n <div\n className=\"rm-backdrop\"\n ref={backdropRef}\n style={{\n background: resolvedBackdropColor,\n backdropFilter: `blur(${resolvedBackdropBlur}px)`,\n WebkitBackdropFilter: `blur(${resolvedBackdropBlur}px)`,\n }}\n >\n <div\n ref={setRefs}\n className={`rm-panel rm-panel--${size}${className ? ` ${className}` : ''}`}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode } from 'react';\nimport { useModalContext } from './ModalContext';\n\nexport interface ModalCloseProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport default function ModalClose({ children = '×', className }: ModalCloseProps) {\n const { onClose } = useModalContext();\n\n return (\n <button className={`rm-close ${className ?? ''}`} onClick={onClose} aria-label=\"Close\">\n {children}\n </button>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface ModalHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\nexport default function ModalHeader({ children, className }: ModalHeaderProps) {\n return <div className={`rm-header ${className ?? ''}`}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\n\nexport interface ModalBodyProps {\n children: ReactNode;\n className?: string;\n}\n\nexport default function ModalBody({ children, className }: ModalBodyProps) {\n return <div className={`rm-body ${className ?? ''}`}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\n\nexport interface ModalFooterProps {\n children: ReactNode;\n className?: string;\n}\n\nexport default function ModalFooter({ children, className }: ModalFooterProps) {\n return <div className={`rm-footer ${className ?? ''}`}>{children}</div>;\n}\n","import { injectStyles } from './inject';\nimport { styles } from './styles';\n\ninjectStyles(styles);\n\nexport { default as Modal } from './Modal';\nexport { default as ModalTrigger } from './ModalTrigger';\nexport { default as ModalContent } from './ModalContent';\nexport { default as ModalClose } from './ModalClose';\nexport { default as ModalHeader } from './ModalHeader';\nexport { default as ModalBody } from './ModalBody';\nexport { default as ModalFooter } from './ModalFooter';\n\nexport type { ModalProps } from './Modal';\nexport type { ModalTriggerProps } from './ModalTrigger';\nexport type { ModalContentProps } from './ModalContent';\nexport type { ModalCloseProps } from './ModalClose';\nexport type { ModalHeaderProps } from './ModalHeader';\nexport type { ModalBodyProps } from './ModalBody';\nexport type { ModalFooterProps } from './ModalFooter';\n\nexport type { SpringConfig, SpringPreset, AnimationVariant } from './spring';\n"]}
|
package/dist/styles.css
CHANGED
|
@@ -27,9 +27,11 @@
|
|
|
27
27
|
border-radius: var(--rm-panel-radius);
|
|
28
28
|
box-shadow: var(--rm-panel-shadow);
|
|
29
29
|
width: 100%;
|
|
30
|
+
max-height: calc(100vh - 40px);
|
|
30
31
|
opacity: 0;
|
|
31
32
|
transform: scale(0.95);
|
|
32
|
-
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
.rm-panel--sm { max-width: 400px; }
|
|
@@ -43,6 +45,7 @@
|
|
|
43
45
|
justify-content: space-between;
|
|
44
46
|
padding: 16px 20px;
|
|
45
47
|
border-bottom: 1px solid var(--rm-header-border);
|
|
48
|
+
flex-shrink: 0;
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
.rm-header h2,
|
|
@@ -56,7 +59,8 @@
|
|
|
56
59
|
.rm-body {
|
|
57
60
|
padding: 20px;
|
|
58
61
|
overflow-y: auto;
|
|
59
|
-
|
|
62
|
+
flex: 1;
|
|
63
|
+
min-height: 0;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
66
|
.rm-footer {
|
|
@@ -66,6 +70,7 @@
|
|
|
66
70
|
gap: 8px;
|
|
67
71
|
padding: 16px 20px;
|
|
68
72
|
border-top: 1px solid var(--rm-footer-border);
|
|
73
|
+
flex-shrink: 0;
|
|
69
74
|
}
|
|
70
75
|
|
|
71
76
|
.rm-close {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "entity-react-modals",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Zero-dependency React modal library with spring physics animations via WAAPI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -19,9 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"./styles.css": "./dist/styles.css"
|
|
21
21
|
},
|
|
22
|
-
"sideEffects":
|
|
23
|
-
"*.css"
|
|
24
|
-
],
|
|
22
|
+
"sideEffects": false,
|
|
25
23
|
"files": [
|
|
26
24
|
"dist"
|
|
27
25
|
],
|