hiraki 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/drawer-context.ts","../src/hooks/use-controllable-state.ts","../src/hooks/use-snap-points.ts","../src/engine/pointer-tracker.ts","../src/engine/physics.ts","../src/engine/gesture-engine.ts","../src/utils/focus-trap.ts","../src/utils/scroll-lock.ts","../src/utils/dom.ts","../src/animations/presets.ts","../src/animations/transitions.ts","../src/utils/css-properties.ts","../src/animations/micro-interactions.ts","../src/components/root.tsx","../src/components/trigger.tsx","../src/components/portal.tsx","../src/components/overlay.tsx","../src/variants/variant-config.ts","../src/components/content.tsx","../src/components/handle.tsx","../src/components/title.tsx","../src/components/description.tsx","../src/components/close.tsx","../src/components/snap-indicator.tsx","../src/components/scroll-area.tsx","../src/index.ts"],"names":["useCallback","rubberBand","useState","useRef","useMemo","Trigger","jsx","composeEventHandlers","useEffect","forwardRef","Overlay","Content","Handle","isHorizontal","Title","Description","Close","SnapIndicator","ScrollArea"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\nimport { createContext, useContext, type RefObject, type MutableRefObject } from 'react'\nimport type { Direction, Variant, SnapPointResolved } from '../types'\n\nexport interface DrawerGestureHandlers {\n onPointerDown: (e: React.PointerEvent) => void\n onPointerMove: (e: React.PointerEvent) => void\n onPointerUp: (e: React.PointerEvent) => void\n onPointerCancel: (e: React.PointerEvent) => void\n}\n\nexport interface DrawerContextValue {\n open: boolean\n mounted: boolean\n openDrawer: () => void\n closeDrawer: () => void\n forceClose: () => void\n direction: Direction\n variant: Variant\n modal: boolean\n dismissible: boolean\n isDraggingRef: MutableRefObject<boolean>\n translateRef: MutableRefObject<number>\n maxTranslateRef: MutableRefObject<number>\n dragProgressRef: MutableRefObject<number>\n resolvedSnapPoints: SnapPointResolved[]\n activeSnapIndex: number\n contentRef: RefObject<HTMLDivElement | null>\n overlayRef: RefObject<HTMLDivElement | null>\n triggerRef: RefObject<HTMLButtonElement | null>\n titleId: string\n descriptionId: string\n gestureHandlers: DrawerGestureHandlers\n onNestedOpenChange?: (open: boolean) => void\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null)\n\nexport { DrawerContext }\n\nexport function useDrawerContext(): DrawerContextValue {\n const ctx = useContext(DrawerContext)\n if (!ctx) {\n throw new Error('Drawer compound components must be used within <Drawer.Root>')\n }\n return ctx\n}\n","import { useState, useCallback, useRef } from 'react'\n\ninterface UseControllableStateOptions<T> {\n controlled?: T\n defaultValue: T\n onChange?: (value: T) => void\n}\n\nexport function useControllableState<T>({\n controlled,\n defaultValue,\n onChange,\n}: UseControllableStateOptions<T>): [T, (value: T | ((prev: T) => T)) => void] {\n const [uncontrolled, setUncontrolled] = useState<T>(defaultValue)\n const isControlled = controlled !== undefined\n const value = isControlled ? controlled : uncontrolled\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n const setValue = useCallback(\n (next: T | ((prev: T) => T)) => {\n const nextValue = typeof next === 'function' ? (next as (prev: T) => T)(value) : next\n if (!isControlled) setUncontrolled(nextValue)\n onChangeRef.current?.(nextValue)\n },\n [isControlled, value],\n )\n\n return [value, setValue]\n}\n","import { useMemo, useCallback } from 'react'\nimport type { SnapPoint, SnapPointResolved } from '../types'\nimport type { SnapPointEntry } from '../engine/physics'\nimport { useControllableState } from './use-controllable-state'\n\ninterface UseSnapPointsOptions {\n snapPoints: readonly SnapPoint[]\n viewportSize: number\n contentSize?: number\n activeSnapPoint?: number\n onSnapPointChange?: (index: number) => void\n}\n\nfunction resolveSnapPoint(snap: SnapPoint, viewportSize: number, contentSize?: number): number {\n if (snap === 'content') return Math.min(contentSize ?? viewportSize, viewportSize)\n if (typeof snap === 'number') return Math.min(Math.max(snap, 0), viewportSize)\n const percent = parseFloat(snap) / 100\n return Math.round(viewportSize * percent)\n}\n\nexport interface UseSnapPointsReturn {\n resolvedSnapPoints: SnapPointResolved[]\n snapEntries: SnapPointEntry[]\n activeSnapIndex: number\n setActiveSnapIndex: (index: number) => void\n activeSnapPx: number\n translateForSnap: (index: number, maxTranslate: number) => number\n}\n\nexport function useSnapPoints({\n snapPoints,\n viewportSize,\n contentSize,\n activeSnapPoint,\n onSnapPointChange,\n}: UseSnapPointsOptions): UseSnapPointsReturn {\n const [rawActiveSnapIndex, setRawActiveSnapIndex] = useControllableState({\n controlled: activeSnapPoint,\n defaultValue: snapPoints.length > 0 ? snapPoints.length - 1 : 0,\n onChange: onSnapPointChange,\n })\n\n const resolvedSnapPoints = useMemo<SnapPointResolved[]>(() => {\n if (snapPoints.length === 0) return [{ value: viewportSize }]\n return snapPoints.map((sp) => ({\n value: resolveSnapPoint(sp, viewportSize, contentSize),\n label: typeof sp === 'string' ? sp : undefined,\n }))\n }, [snapPoints, viewportSize, contentSize])\n\n const snapEntries = useMemo<SnapPointEntry[]>(\n () => resolvedSnapPoints.map((sp, i) => ({ value: sp.value, index: i })),\n [resolvedSnapPoints],\n )\n\n const maxIndex = Math.max(resolvedSnapPoints.length - 1, 0)\n const activeSnapIndex = Math.min(Math.max(rawActiveSnapIndex, 0), maxIndex)\n const setActiveSnapIndex = useCallback(\n (index: number) => {\n setRawActiveSnapIndex(Math.min(Math.max(index, 0), maxIndex))\n },\n [maxIndex, setRawActiveSnapIndex],\n )\n\n const activeSnapPx = resolvedSnapPoints[activeSnapIndex]?.value ?? viewportSize\n\n const translateForSnap = useCallback(\n (index: number, maxTranslate: number): number => {\n const clampedIndex = Math.min(Math.max(index, 0), maxIndex)\n const snapPx = resolvedSnapPoints[clampedIndex]?.value ?? 0\n return Math.max(0, maxTranslate - snapPx)\n },\n [maxIndex, resolvedSnapPoints],\n )\n\n return { resolvedSnapPoints, snapEntries, activeSnapIndex, setActiveSnapIndex, activeSnapPx, translateForSnap }\n}\n","export interface PointerState {\n startX: number\n startY: number\n currentX: number\n currentY: number\n deltaX: number\n deltaY: number\n velocityX: number\n velocityY: number\n dominantAxis: 'x' | 'y' | null\n isActive: boolean\n pointerId: number | null\n timestamp: number\n startTimestamp: number\n}\n\nexport interface PointerTrackerOptions {\n smoothingFactor?: number\n axisLockThreshold?: number\n}\n\nconst DEFAULT_SMOOTHING = 0.3\nconst DEFAULT_AXIS_LOCK = 8\n\nexport function createPointerTracker(options: PointerTrackerOptions = {}) {\n const smoothingFactor = options.smoothingFactor ?? DEFAULT_SMOOTHING\n const axisLockThreshold = options.axisLockThreshold ?? DEFAULT_AXIS_LOCK\n\n let state: PointerState = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n deltaX: 0,\n deltaY: 0,\n velocityX: 0,\n velocityY: 0,\n dominantAxis: null,\n isActive: false,\n pointerId: null,\n timestamp: 0,\n startTimestamp: 0,\n }\n\n let lastX = 0\n let lastY = 0\n let lastTimestamp = 0\n\n function onPointerDown(event: PointerEvent): boolean {\n if (state.isActive) return false\n state = {\n startX: event.clientX,\n startY: event.clientY,\n currentX: event.clientX,\n currentY: event.clientY,\n deltaX: 0,\n deltaY: 0,\n velocityX: 0,\n velocityY: 0,\n dominantAxis: null,\n isActive: true,\n pointerId: event.pointerId,\n timestamp: event.timeStamp,\n startTimestamp: event.timeStamp,\n }\n lastX = event.clientX\n lastY = event.clientY\n lastTimestamp = event.timeStamp\n return true\n }\n\n function onPointerMove(event: PointerEvent): boolean {\n if (!state.isActive || state.pointerId !== event.pointerId) return false\n const dt = event.timeStamp - lastTimestamp\n const rawVx = dt > 0 ? (event.clientX - lastX) / dt : 0\n const rawVy = dt > 0 ? (event.clientY - lastY) / dt : 0\n const vx = smoothingFactor * rawVx + (1 - smoothingFactor) * state.velocityX\n const vy = smoothingFactor * rawVy + (1 - smoothingFactor) * state.velocityY\n const deltaX = event.clientX - state.startX\n const deltaY = event.clientY - state.startY\n let dominantAxis = state.dominantAxis\n if (dominantAxis === null) {\n const absX = Math.abs(deltaX)\n const absY = Math.abs(deltaY)\n if (Math.max(absX, absY) >= axisLockThreshold) {\n dominantAxis = absX > absY ? 'x' : 'y'\n }\n }\n state = {\n ...state,\n currentX: event.clientX,\n currentY: event.clientY,\n deltaX,\n deltaY,\n velocityX: vx,\n velocityY: vy,\n dominantAxis,\n timestamp: event.timeStamp,\n }\n lastX = event.clientX\n lastY = event.clientY\n lastTimestamp = event.timeStamp\n return true\n }\n\n function onPointerUp(event: PointerEvent): boolean {\n if (!state.isActive || state.pointerId !== event.pointerId) return false\n state = { ...state, isActive: false }\n return true\n }\n\n function getState(): Readonly<PointerState> {\n return state\n }\n\n function reset() {\n state = { ...state, isActive: false, pointerId: null, dominantAxis: null, velocityX: 0, velocityY: 0 }\n }\n\n return { onPointerDown, onPointerMove, onPointerUp, getState, reset }\n}\n\nexport type PointerTracker = ReturnType<typeof createPointerTracker>\n","export function rubberBand(value: number, min: number, max: number, factor = 0.55): number {\n if (value >= min && value <= max) return value\n const distance = value < min ? min - value : value - max\n const sign = value < min ? -1 : 1\n const dampened = factor * Math.log(1 + distance)\n return (value < min ? min : max) + sign * dampened\n}\n\nexport function dampen(value: number, factor = 0.5): number {\n return value * factor\n}\n\nexport function decayPosition(position: number, velocity: number, deceleration = 0.003): number {\n if (Math.abs(velocity) < 0.01) return position\n return position + (velocity * Math.abs(velocity)) / (2 * deceleration)\n}\n\nexport function project(velocity: number, deceleration = 0.003): number {\n return (velocity * Math.abs(velocity)) / (2 * deceleration)\n}\n\nexport interface SnapPointEntry {\n value: number\n index: number\n}\n\nexport function findNearestSnapPoint(\n currentPx: number,\n velocityPxMs: number,\n snapPoints: SnapPointEntry[],\n inertia = true,\n): number {\n if (snapPoints.length === 0) return 0\n // velocityPxMs is already in px/sec (gesture-engine converts from px/ms)\n // decayPosition expects a velocity that produces reasonable projections\n const projected = inertia ? decayPosition(currentPx, velocityPxMs) : currentPx\n let nearestIndex = 0\n let nearestDist = Infinity\n for (const { value, index } of snapPoints) {\n const dist = Math.abs(projected - value)\n if (dist < nearestDist) {\n nearestDist = dist\n nearestIndex = index\n }\n }\n return nearestIndex\n}\n\nexport function springEasing(stiffness = 0.5): string {\n const c1 = 0.32 + stiffness * 0.1\n const c2 = 0.08 + stiffness * 0.05\n return `cubic-bezier(${c1}, ${c2}, 0.38, 1.1)`\n}\n\nexport function naturalDuration(\n distancePx: number,\n velocityPxMs: number,\n baseDuration = 400,\n): number {\n const absVelocity = Math.abs(velocityPxMs)\n if (absVelocity < 0.001) return baseDuration\n const velocityDuration = distancePx / absVelocity\n return Math.min(Math.max(velocityDuration, 120), baseDuration)\n}\n","import type { Direction } from '../types'\nimport { createPointerTracker } from './pointer-tracker'\nimport { rubberBand, findNearestSnapPoint, type SnapPointEntry } from './physics'\n\nexport interface GestureEngineOptions {\n direction: Direction\n snapPoints: SnapPointEntry[]\n maxTranslate: number\n activeSnapIndex: number\n closeThreshold: number\n rubberBandEnabled: boolean\n inertia: boolean\n onDragStart?: (translateValue: number) => void\n onDrag?: (translateValue: number) => void\n onDragEnd?: (result: DragEndResult) => void\n}\n\nexport interface DragEndResult {\n translateValue: number\n velocityPxMs: number\n targetSnapIndex: number\n shouldClose: boolean\n}\n\nexport function isHorizontal(direction: Direction): boolean {\n return direction === 'left' || direction === 'right'\n}\n\nfunction getDirectionSign(direction: Direction): number {\n return direction === 'top' || direction === 'left' ? -1 : 1\n}\n\nexport function shouldDrag(\n target: EventTarget | null,\n direction: Direction,\n): boolean {\n if (!(target instanceof Element)) return true\n const horizontal = isHorizontal(direction)\n const scrollParent = getScrollParent(target, horizontal)\n if (!scrollParent) return true\n const { scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth } = scrollParent\n if (horizontal) {\n return direction === 'right' ? scrollLeft <= 0 : scrollLeft + clientWidth >= scrollWidth - 1\n }\n return direction === 'bottom' ? scrollTop <= 0 : scrollTop + clientHeight >= scrollHeight - 1\n}\n\nfunction getScrollParent(el: Element, horizontal: boolean): Element | null {\n let current: Element | null = el\n while (current) {\n if (current === document.body || current === document.documentElement) {\n return null\n }\n const style = window.getComputedStyle(current)\n const overflow = horizontal\n ? `${style.overflowX} ${style.overflow}`\n : `${style.overflowY} ${style.overflow}`\n if (/auto|scroll/.test(overflow)) {\n const hasScroll = horizontal\n ? current.scrollWidth > current.clientWidth\n : current.scrollHeight > current.clientHeight\n if (hasScroll) return current\n }\n current = current.parentElement\n }\n return null\n}\n\nexport function createGestureEngine(options: GestureEngineOptions) {\n let opts = { ...options }\n const tracker = createPointerTracker()\n let isDragging = false\n let dragStartTranslate = 0\n let translateValue = 0\n let capturedElement: Element | null = null\n\n function update(newOpts: Partial<GestureEngineOptions>) {\n opts = { ...opts, ...newOpts }\n }\n\n function getDelta(): number {\n const state = tracker.getState()\n const delta = isHorizontal(opts.direction) ? state.deltaX : state.deltaY\n return delta * getDirectionSign(opts.direction)\n }\n\n function getVelocity(): number {\n const state = tracker.getState()\n const velocity = isHorizontal(opts.direction) ? state.velocityX : state.velocityY\n return velocity * getDirectionSign(opts.direction)\n }\n\n function clampWithRubberBand(raw: number): number {\n const min = 0\n const max = opts.maxTranslate\n if (raw >= min && raw <= max) return raw\n if (!opts.rubberBandEnabled) return Math.min(Math.max(raw, min), max)\n return rubberBand(raw, min, max)\n }\n\n function onPointerDown(event: PointerEvent): boolean {\n const started = tracker.onPointerDown(event)\n if (!started) return false\n dragStartTranslate = translateValue\n capturedElement = event.target as Element\n return true\n }\n\n function onPointerMove(event: PointerEvent): boolean {\n if (!tracker.getState().isActive) return false\n tracker.onPointerMove(event)\n const state = tracker.getState()\n if (!isDragging) {\n if (state.dominantAxis === null) return false\n const horizontal = isHorizontal(opts.direction)\n const correctAxis = horizontal ? state.dominantAxis === 'x' : state.dominantAxis === 'y'\n if (!correctAxis) {\n tracker.reset()\n return false\n }\n if (!shouldDrag(capturedElement, opts.direction)) {\n tracker.reset()\n return false\n }\n isDragging = true\n opts.onDragStart?.(translateValue)\n }\n translateValue = clampWithRubberBand(dragStartTranslate + getDelta())\n opts.onDrag?.(translateValue)\n return true\n }\n\n function onPointerUp(event: PointerEvent): boolean {\n const wasActive = tracker.getState().isActive\n tracker.onPointerUp(event)\n if (!wasActive || !isDragging) {\n isDragging = false\n return false\n }\n isDragging = false\n const velocityPxMs = getVelocity() * 1000\n const snapVelocityPxMs = -velocityPxMs\n const closeThresholdPx = opts.closeThreshold * opts.maxTranslate\n const shouldClose = translateValue > closeThresholdPx\n let targetSnapIndex: number\n if (shouldClose) {\n targetSnapIndex = -1\n } else {\n targetSnapIndex = findNearestSnapPoint(\n opts.maxTranslate - translateValue,\n snapVelocityPxMs,\n opts.snapPoints,\n opts.inertia,\n )\n }\n opts.onDragEnd?.({ translateValue, velocityPxMs, targetSnapIndex, shouldClose })\n return true\n }\n\n function setTranslate(value: number) {\n translateValue = value\n }\n\n function getIsDragging() {\n return isDragging\n }\n\n function getTranslate() {\n return translateValue\n }\n\n return { update, onPointerDown, onPointerMove, onPointerUp, setTranslate, getIsDragging, getTranslate }\n}\n\nexport type GestureEngine = ReturnType<typeof createGestureEngine>\n","const FOCUSABLE_SELECTORS = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n 'details > summary',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n].join(', ')\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS)).filter((el) => {\n const style = window.getComputedStyle(el)\n return style.visibility !== 'hidden' && style.display !== 'none'\n })\n}\n\nexport interface FocusTrap {\n activate: () => void\n deactivate: () => void\n updateContainer: (container: HTMLElement) => void\n}\n\nexport function createFocusTrap(initialContainer: HTMLElement): FocusTrap {\n let container = initialContainer\n let active = false\n let previouslyFocused: HTMLElement | null = null\n\n function handleKeyDown(event: KeyboardEvent) {\n if (!active || event.key !== 'Tab') return\n const focusable = getFocusableElements(container)\n if (focusable.length === 0) {\n event.preventDefault()\n return\n }\n const firstEl = focusable[0]\n const lastEl = focusable[focusable.length - 1]\n if (event.shiftKey) {\n if (document.activeElement === firstEl) {\n event.preventDefault()\n lastEl?.focus()\n }\n } else {\n if (document.activeElement === lastEl) {\n event.preventDefault()\n firstEl?.focus()\n }\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (!active) return\n const relatedTarget = event.relatedTarget as Node | null\n if (relatedTarget && !container.contains(relatedTarget)) {\n getFocusableElements(container)[0]?.focus()\n }\n }\n\n function activate() {\n if (active) return\n active = true\n previouslyFocused = document.activeElement as HTMLElement | null\n getFocusableElements(container)[0]?.focus()\n document.addEventListener('keydown', handleKeyDown)\n container.addEventListener('focusout', handleFocusOut)\n }\n\n function deactivate() {\n if (!active) return\n active = false\n document.removeEventListener('keydown', handleKeyDown)\n container.removeEventListener('focusout', handleFocusOut)\n if (previouslyFocused && typeof previouslyFocused.focus === 'function') {\n previouslyFocused.focus()\n }\n previouslyFocused = null\n }\n\n function updateContainer(newContainer: HTMLElement) {\n if (active) {\n container.removeEventListener('focusout', handleFocusOut)\n container = newContainer\n container.addEventListener('focusout', handleFocusOut)\n } else {\n container = newContainer\n }\n }\n\n return { activate, deactivate, updateContainer }\n}\n","let lockCount = 0\nlet savedScrollY = 0\nlet savedScrollbarWidth = 0\nlet originalStyles: {\n overflow: string\n paddingRight: string\n position: string\n top: string\n width: string\n} | null = null\n\nfunction getScrollbarWidth(): number {\n if (typeof document === 'undefined') return 0\n const outer = document.createElement('div')\n outer.style.cssText = 'visibility:hidden;overflow:scroll;position:absolute;top:-9999px;width:50px'\n document.body.appendChild(outer)\n const inner = document.createElement('div')\n outer.appendChild(inner)\n const width = outer.offsetWidth - inner.offsetWidth\n document.body.removeChild(outer)\n return width\n}\n\nexport function lockScroll(): void {\n if (typeof document === 'undefined') return\n lockCount++\n if (lockCount > 1) return\n savedScrollY = window.scrollY\n savedScrollbarWidth = getScrollbarWidth()\n const body = document.body\n originalStyles = {\n overflow: body.style.overflow,\n paddingRight: body.style.paddingRight,\n position: body.style.position,\n top: body.style.top,\n width: body.style.width,\n }\n const isIOS = /iPhone|iPad|iPod/.test(navigator.userAgent)\n if (isIOS) {\n body.style.position = 'fixed'\n body.style.top = `-${savedScrollY}px`\n body.style.width = '100%'\n } else {\n body.style.overflow = 'hidden'\n }\n if (savedScrollbarWidth > 0) {\n body.style.paddingRight = `${savedScrollbarWidth}px`\n document.documentElement.style.setProperty('--hiraki-scrollbar-width', `${savedScrollbarWidth}px`)\n }\n}\n\nexport function unlockScroll(): void {\n if (typeof document === 'undefined') return\n lockCount = Math.max(0, lockCount - 1)\n if (lockCount > 0 || !originalStyles) return\n const body = document.body\n body.style.overflow = originalStyles.overflow\n body.style.paddingRight = originalStyles.paddingRight\n body.style.position = originalStyles.position\n body.style.top = originalStyles.top\n body.style.width = originalStyles.width\n document.documentElement.style.removeProperty('--hiraki-scrollbar-width')\n const isIOS = /iPhone|iPad|iPod/.test(navigator.userAgent)\n if (isIOS) window.scrollTo(0, savedScrollY)\n originalStyles = null\n}\n","import type { MutableRefObject, Ref } from 'react'\n\nexport function getScrollParent(el: Element | null): Element {\n if (!el) return document.body\n const style = window.getComputedStyle(el)\n const overflow = `${style.overflow} ${style.overflowY} ${style.overflowX}`\n if (/auto|scroll/.test(overflow)) {\n const hasScroll = el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth\n if (hasScroll) return el\n }\n return getScrollParent(el.parentElement)\n}\n\nexport function isScrollable(el: Element): boolean {\n const style = window.getComputedStyle(el)\n const overflow = `${style.overflow} ${style.overflowY} ${style.overflowX}`\n if (!/auto|scroll/.test(overflow)) return false\n return el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth\n}\n\ntype PossibleRef<T> = Ref<T> | undefined | null\n\nexport function composeRefs<T>(...refs: PossibleRef<T>[]): (node: T) => void {\n return (node: T) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref !== null && ref !== undefined) {\n ;(ref as MutableRefObject<T>).current = node\n }\n }\n }\n}\n\nexport function composeEventHandlers<E>(\n originalHandler?: (event: E) => void,\n ourHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {},\n): (event: E) => void {\n return function handleEvent(event: E) {\n originalHandler?.(event)\n if (\n !checkForDefaultPrevented ||\n !(event as Event & { defaultPrevented?: boolean }).defaultPrevented\n ) {\n ourHandler?.(event)\n }\n }\n}\n\nlet idCounter = 0\nexport function generateId(prefix = 'hiraki'): string {\n return `${prefix}-${++idCounter}`\n}\n","import type { Direction } from '../types'\n\nexport type AnimationPreset = 'slide' | 'spring' | 'scale' | 'morph'\n\nexport interface TransitionConfig {\n duration: number\n easing: string\n property: string\n}\n\nconst SPRING_EASING = 'cubic-bezier(0.32, 0.08, 0.38, 1.1)'\nconst EASE_OUT = 'cubic-bezier(0.16, 1, 0.3, 1)'\nconst EASE_IN_OUT = 'cubic-bezier(0.4, 0, 0.2, 1)'\n\nexport function getTransform(direction: Direction, value: number): string {\n switch (direction) {\n case 'top':\n return `translate3d(0, ${-value}px, 0)`\n case 'left':\n return `translate3d(${-value}px, 0, 0)`\n case 'right':\n return `translate3d(${value}px, 0, 0)`\n default:\n return `translate3d(0, ${value}px, 0)`\n }\n}\n\nexport function getEnterTransition(preset: AnimationPreset, duration = 350): TransitionConfig {\n switch (preset) {\n case 'spring':\n return { duration, easing: SPRING_EASING, property: 'transform' }\n case 'scale':\n return { duration, easing: EASE_OUT, property: 'transform, opacity' }\n case 'morph':\n return { duration, easing: EASE_OUT, property: 'transform, border-radius, width, height' }\n default:\n return { duration, easing: EASE_OUT, property: 'transform' }\n }\n}\n\nexport function getExitTransition(preset: AnimationPreset, duration = 300): TransitionConfig {\n switch (preset) {\n case 'spring':\n return { duration, easing: EASE_IN_OUT, property: 'transform' }\n case 'scale':\n return { duration, easing: EASE_IN_OUT, property: 'transform, opacity' }\n case 'morph':\n return { duration, easing: EASE_IN_OUT, property: 'transform, border-radius, width, height' }\n default:\n return { duration, easing: EASE_IN_OUT, property: 'transform' }\n }\n}\n\nexport function getSnapTransition(velocityPxMs: number, distancePx: number): TransitionConfig {\n const absVelocity = Math.abs(velocityPxMs)\n const duration =\n absVelocity > 0.5\n ? Math.max(120, Math.min(250, distancePx / absVelocity))\n : 250\n return { duration, easing: EASE_OUT, property: 'transform' }\n}\n\nexport function applyTransition(el: HTMLElement, config: TransitionConfig): void {\n el.style.transition = `${config.property} ${config.duration}ms ${config.easing}`\n}\n\nexport function removeTransition(el: HTMLElement): void {\n el.style.transition = 'none'\n}\n\nexport function prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n","import {\n applyTransition,\n removeTransition,\n prefersReducedMotion,\n getEnterTransition,\n getExitTransition,\n getSnapTransition,\n type AnimationPreset,\n} from './presets'\n\nexport function applyDragTransition(el: HTMLElement | null): void {\n if (!el) return\n removeTransition(el)\n}\n\nexport function applySnapTransition(\n el: HTMLElement | null,\n velocityPxMs: number,\n distancePx: number,\n): void {\n if (!el) return\n if (prefersReducedMotion()) {\n applyTransition(el, { duration: 0, easing: 'linear', property: 'transform' })\n return\n }\n applyTransition(el, getSnapTransition(velocityPxMs, distancePx))\n}\n\nexport function applyEnterTransition(\n el: HTMLElement | null,\n preset: AnimationPreset = 'slide',\n duration?: number,\n): void {\n if (!el) return\n if (prefersReducedMotion()) {\n applyTransition(el, { duration: 0, easing: 'linear', property: 'transform' })\n return\n }\n applyTransition(el, getEnterTransition(preset, duration))\n}\n\nexport function applyExitTransition(\n el: HTMLElement | null,\n preset: AnimationPreset = 'slide',\n duration?: number,\n): void {\n if (!el) return\n if (prefersReducedMotion()) {\n applyTransition(el, { duration: 0, easing: 'linear', property: 'transform' })\n return\n }\n applyTransition(el, getExitTransition(preset, duration))\n}\n","export function setCSSProperties(\n el: HTMLElement | null,\n props: Record<string, string | number>,\n): void {\n if (!el) return\n for (const [key, value] of Object.entries(props)) {\n const cssProp = key.startsWith('--') ? key : `--hiraki-${key}`\n el.style.setProperty(cssProp, String(value))\n }\n}\n\nexport function removeCSSProperties(el: HTMLElement | null, keys: string[]): void {\n if (!el) return\n for (const key of keys) {\n const cssProp = key.startsWith('--') ? key : `--hiraki-${key}`\n el.style.removeProperty(cssProp)\n }\n}\n\nexport function calcOverlayOpacity(progress: number, maxOpacity = 0.5): number {\n return Math.min(Math.max(progress, 0), 1) * maxOpacity\n}\n\nexport function calcBackgroundScale(progress: number, minScale = 0.96): number {\n return minScale + (1 - minScale) * (1 - Math.min(Math.max(progress, 0), 1))\n}\n","import { calcOverlayOpacity, calcBackgroundScale } from '../utils/css-properties'\n\nexport function updateOverlayProgress(overlayEl: HTMLElement | null, progress: number): void {\n if (!overlayEl) return\n overlayEl.style.opacity = String(calcOverlayOpacity(progress))\n}\n\nexport function updateBackgroundScale(backgroundEl: HTMLElement | null, progress: number): void {\n if (!backgroundEl) return\n backgroundEl.style.transform = `scale(${calcBackgroundScale(progress)})`\n backgroundEl.style.borderRadius = `${progress * 12}px`\n}\n\nexport function updateDragProgress(contentEl: HTMLElement | null, progress: number): void {\n if (!contentEl) return\n contentEl.style.setProperty('--hiraki-drag-progress', String(progress))\n}\n","'use client'\n\nimport {\n useRef,\n useState,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n type ReactNode,\n} from 'react'\nimport type { DrawerRootProps, Direction } from '../types'\nimport { DrawerContext, type DrawerContextValue, type DrawerGestureHandlers } from '../context/drawer-context'\nimport { useControllableState } from '../hooks/use-controllable-state'\nimport { useSnapPoints } from '../hooks/use-snap-points'\nimport { createGestureEngine } from '../engine/gesture-engine'\nimport { createFocusTrap } from '../utils/focus-trap'\nimport { lockScroll, unlockScroll } from '../utils/scroll-lock'\nimport { generateId } from '../utils/dom'\nimport { applyEnterTransition, applyExitTransition, applySnapTransition, applyDragTransition } from '../animations/transitions'\nimport { updateOverlayProgress, updateBackgroundScale, updateDragProgress } from '../animations/micro-interactions'\nimport { getTransform } from '../animations/presets'\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\nconst EXIT_DURATION = 300\nconst INTERACTIVE_SELECTOR = [\n 'button',\n 'a[href]',\n 'input',\n 'select',\n 'textarea',\n 'summary',\n '[role=\"button\"]',\n '[contenteditable=\"true\"]',\n '[data-hiraki-close]',\n '[data-hiraki-trigger]',\n].join(', ')\n\nfunction getViewportSize(direction: Direction): number {\n if (typeof window === 'undefined') return 600\n return direction === 'left' || direction === 'right' ? window.innerWidth : window.innerHeight\n}\n\nfunction measureElementExtent(element: HTMLDivElement, direction: Direction): number {\n return direction === 'left' || direction === 'right'\n ? element.offsetWidth\n : element.offsetHeight\n}\n\nfunction measureContentExtent(element: HTMLDivElement, direction: Direction): number {\n return direction === 'left' || direction === 'right'\n ? element.scrollWidth\n : element.scrollHeight\n}\n\nfunction shouldIgnoreGestureTarget(target: EventTarget | null, container: Element): boolean {\n if (!(target instanceof Element)) return false\n if (target.closest('[data-hiraki-handle]')) return false\n\n const interactiveTarget = target.closest(INTERACTIVE_SELECTOR)\n return interactiveTarget !== null && container.contains(interactiveTarget)\n}\n\nexport interface DrawerRootInternalProps extends DrawerRootProps {\n children: ReactNode\n}\n\nexport function Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n direction = 'bottom',\n variant = 'default',\n modal = true,\n dismissible = true,\n snapPoints: snapPointsProp = [],\n activeSnapPoint: controlledSnap,\n onSnapPointChange,\n closeThreshold = 0.5,\n rubberBand = true,\n inertia = true,\n shouldScaleBackground = false,\n onDragStart,\n onDrag,\n onDragEnd,\n}: DrawerRootInternalProps) {\n const [open, setOpen] = useControllableState({\n controlled: controlledOpen,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const [mounted, setMounted] = useState(false)\n const [contentSize, setContentSize] = useState(0)\n\n const contentRef = useRef<HTMLDivElement | null>(null)\n const overlayRef = useRef<HTMLDivElement | null>(null)\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n\n const translateRef = useRef(0)\n const maxTranslateRef = useRef(0)\n const isDraggingRef = useRef(false)\n const dragProgressRef = useRef(0)\n const isEnteringRef = useRef(false)\n\n const titleId = useMemo(() => generateId('hiraki-title'), [])\n const descriptionId = useMemo(() => generateId('hiraki-desc'), [])\n\n const [viewportSize, setViewportSize] = useState(() => getViewportSize(direction))\n\n useIsomorphicLayoutEffect(() => {\n const update = () => setViewportSize(getViewportSize(direction))\n update()\n window.addEventListener('resize', update)\n return () => window.removeEventListener('resize', update)\n }, [direction])\n\n const {\n resolvedSnapPoints,\n snapEntries,\n activeSnapIndex,\n setActiveSnapIndex,\n translateForSnap,\n } = useSnapPoints({\n snapPoints: snapPointsProp,\n viewportSize,\n contentSize,\n activeSnapPoint: controlledSnap,\n onSnapPointChange,\n })\n\n function applyTranslate(value: number) {\n translateRef.current = value\n if (contentRef.current) {\n contentRef.current.style.transform = getTransform(direction, value)\n }\n }\n\n function applyProgress(value: number) {\n dragProgressRef.current = value\n updateOverlayProgress(overlayRef.current, value)\n updateDragProgress(contentRef.current, value)\n if (shouldScaleBackground) {\n const bgEl = document.querySelector<HTMLElement>('[data-hiraki-background]')\n updateBackgroundScale(bgEl, value)\n }\n }\n\n const stableRefs = useRef({ onDragStart, onDrag, onDragEnd, direction, shouldScaleBackground })\n stableRefs.current = { onDragStart, onDrag, onDragEnd, direction, shouldScaleBackground }\n\n const engineRef = useRef<ReturnType<typeof createGestureEngine> | null>(null)\n\n const getEngine = useCallback(() => {\n if (!engineRef.current) {\n engineRef.current = createGestureEngine({\n direction,\n snapPoints: snapEntries,\n maxTranslate: maxTranslateRef.current,\n activeSnapIndex,\n closeThreshold,\n rubberBandEnabled: rubberBand,\n inertia,\n onDragStart: undefined,\n onDrag: undefined,\n onDragEnd: undefined,\n })\n }\n return engineRef.current\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const updateMeasuredSizes = useCallback(() => {\n const element = contentRef.current\n if (!element) return 0\n\n const nextMaxTranslate = measureElementExtent(element, direction)\n const nextContentSize = measureContentExtent(element, direction)\n\n maxTranslateRef.current = nextMaxTranslate\n getEngine().update({ maxTranslate: nextMaxTranslate })\n setContentSize((prev) => (prev === nextContentSize ? prev : nextContentSize))\n\n return nextMaxTranslate\n }, [direction, getEngine])\n\n const triggerClose = useCallback(() => {\n const mt = maxTranslateRef.current\n if (contentRef.current) applyExitTransition(contentRef.current)\n applyTranslate(mt)\n getEngine().setTranslate(mt)\n applyProgress(0)\n setTimeout(() => {\n setOpen(false)\n setMounted(false)\n }, EXIT_DURATION)\n }, [getEngine, setOpen]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const engine = getEngine()\n engine.update({\n direction,\n snapPoints: snapEntries,\n maxTranslate: maxTranslateRef.current,\n activeSnapIndex,\n closeThreshold,\n rubberBandEnabled: rubberBand,\n inertia,\n onDragStart: (tv) => {\n isDraggingRef.current = true\n if (contentRef.current) {\n applyDragTransition(contentRef.current)\n contentRef.current.dataset['hirakiDragging'] = 'true'\n }\n stableRefs.current.onDragStart?.({\n velocity: 0,\n direction: stableRefs.current.direction,\n translateValue: tv,\n })\n },\n onDrag: (tv) => {\n applyTranslate(tv)\n const mt = maxTranslateRef.current\n const progress = mt > 0 ? Math.max(0, 1 - tv / mt) : 0\n applyProgress(progress)\n stableRefs.current.onDrag?.({\n velocity: 0,\n direction: stableRefs.current.direction,\n translateValue: tv,\n })\n },\n onDragEnd: (result) => {\n isDraggingRef.current = false\n if (contentRef.current) {\n contentRef.current.dataset['hirakiDragging'] = 'false'\n }\n if (result.shouldClose) {\n triggerClose()\n } else {\n const snapPx = resolvedSnapPoints[result.targetSnapIndex]?.value ?? 0\n const mt = maxTranslateRef.current\n const targetTranslate = Math.max(0, mt - snapPx)\n const dist = Math.abs(result.translateValue - targetTranslate)\n if (contentRef.current) applySnapTransition(contentRef.current, result.velocityPxMs / 1000, dist)\n applyTranslate(targetTranslate)\n getEngine().setTranslate(targetTranslate)\n const progress = mt > 0 ? Math.max(0, 1 - targetTranslate / mt) : 0\n applyProgress(progress)\n setActiveSnapIndex(result.targetSnapIndex)\n stableRefs.current.onDragEnd?.({\n velocity: result.velocityPxMs,\n direction: stableRefs.current.direction,\n translateValue: result.translateValue,\n })\n }\n },\n })\n }, [direction, snapEntries, activeSnapIndex, closeThreshold, rubberBand, inertia]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (open) setMounted(true)\n }, [open])\n\n useIsomorphicLayoutEffect(() => {\n if (!mounted || !contentRef.current) return\n\n const element = contentRef.current\n updateMeasuredSizes()\n\n if (typeof ResizeObserver === 'undefined') return\n\n const observer = new ResizeObserver(() => {\n updateMeasuredSizes()\n })\n\n observer.observe(element)\n return () => observer.disconnect()\n }, [mounted, updateMeasuredSizes])\n\n useIsomorphicLayoutEffect(() => {\n if (!mounted || !open || !contentRef.current) return\n const mt = updateMeasuredSizes()\n if (mt === 0) return\n\n isEnteringRef.current = true\n applyTranslate(mt)\n getEngine().setTranslate(mt)\n\n let firstFrame = 0\n let secondFrame = 0\n firstFrame = requestAnimationFrame(() => {\n secondFrame = requestAnimationFrame(() => {\n if (!contentRef.current) return\n const targetTranslate = translateForSnap(activeSnapIndex, mt)\n const progress = mt > 0 ? Math.max(0, 1 - targetTranslate / mt) : 0\n applyEnterTransition(contentRef.current)\n applyTranslate(targetTranslate)\n getEngine().setTranslate(targetTranslate)\n applyProgress(progress)\n isEnteringRef.current = false\n })\n })\n\n return () => {\n cancelAnimationFrame(firstFrame)\n cancelAnimationFrame(secondFrame)\n isEnteringRef.current = false\n }\n }, [mounted, open, updateMeasuredSizes]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useIsomorphicLayoutEffect(() => {\n if (!mounted || !open || !contentRef.current) return\n if (isDraggingRef.current || isEnteringRef.current) return\n\n const mt = updateMeasuredSizes()\n if (mt === 0) return\n\n const targetTranslate = translateForSnap(activeSnapIndex, mt)\n const distance = Math.abs(translateRef.current - targetTranslate)\n const progress = mt > 0 ? Math.max(0, 1 - targetTranslate / mt) : 0\n\n if (distance > 0.5) {\n applySnapTransition(contentRef.current, 0, distance)\n applyTranslate(targetTranslate)\n }\n\n getEngine().setTranslate(targetTranslate)\n applyProgress(progress)\n }, [activeSnapIndex, contentSize, mounted, open, translateForSnap, updateMeasuredSizes, viewportSize]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (!open || !contentRef.current) return\n const trap = createFocusTrap(contentRef.current)\n const timeout = setTimeout(() => trap.activate(), 100)\n return () => {\n clearTimeout(timeout)\n trap.deactivate()\n }\n }, [open])\n\n useEffect(() => {\n if (!open || !modal) return\n lockScroll()\n return () => unlockScroll()\n }, [open, modal])\n\n useEffect(() => {\n if (!open) return\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && dismissible) triggerClose()\n }\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [open, dismissible, triggerClose])\n\n const openDrawer = useCallback(() => {\n setMounted(true)\n setOpen(true)\n }, [setOpen])\n\n // forceClose always animates, used by the Close button\n const forceClose = useCallback(() => {\n triggerClose()\n }, [triggerClose])\n\n // closeDrawer is gated by dismissible, used by overlay click / Escape\n const closeDrawer = useCallback(() => {\n if (dismissible) triggerClose()\n }, [dismissible, triggerClose])\n\n const gestureHandlers: DrawerGestureHandlers = useMemo(\n () => ({\n onPointerDown: (e: React.PointerEvent) => {\n if (shouldIgnoreGestureTarget(e.target, e.currentTarget)) return\n const engine = getEngine()\n engine.onPointerDown(e.nativeEvent)\n },\n onPointerMove: (e: React.PointerEvent) => {\n const engine = getEngine()\n const handled = engine.onPointerMove(e.nativeEvent)\n if (handled && engine.getIsDragging() && !e.currentTarget.hasPointerCapture(e.pointerId)) {\n e.currentTarget.setPointerCapture(e.pointerId)\n }\n },\n onPointerUp: (e: React.PointerEvent) => {\n getEngine().onPointerUp(e.nativeEvent)\n if (e.currentTarget.hasPointerCapture(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId)\n }\n },\n onPointerCancel: (e: React.PointerEvent) => {\n getEngine().onPointerUp(e.nativeEvent)\n if (e.currentTarget.hasPointerCapture(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId)\n }\n },\n }),\n [getEngine],\n )\n\n const contextValue: DrawerContextValue = {\n open,\n mounted,\n openDrawer,\n closeDrawer,\n forceClose,\n direction,\n variant,\n modal,\n dismissible,\n isDraggingRef,\n translateRef,\n maxTranslateRef,\n dragProgressRef,\n resolvedSnapPoints,\n activeSnapIndex,\n contentRef,\n overlayRef,\n triggerRef,\n titleId,\n descriptionId,\n gestureHandlers,\n }\n\n return <DrawerContext.Provider value={contextValue}>{children}</DrawerContext.Provider>\n}\n\nRoot.displayName = 'Drawer.Root'\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerTriggerProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\nimport { composeRefs } from '../utils/dom'\n\nexport const Trigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n function Trigger({ children, onClick, asChild: _asChild, ...props }, ref) {\n const { openDrawer, triggerRef } = useDrawerContext()\n\n return (\n <button\n ref={composeRefs(triggerRef, ref)}\n type=\"button\"\n data-hiraki-trigger=\"\"\n onClick={composeEventHandlers(onClick, openDrawer)}\n {...props}\n >\n {children}\n </button>\n )\n },\n)\n\nTrigger.displayName = 'Drawer.Trigger'\n\nfunction composeEventHandlers<E>(\n original?: (e: E) => void,\n ours?: (e: E) => void,\n): (e: E) => void {\n return (e: E) => {\n original?.(e)\n if (!(e as Event & { defaultPrevented?: boolean }).defaultPrevented) ours?.(e)\n }\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport type { DrawerPortalProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\n\nexport function Portal({ children, container }: DrawerPortalProps) {\n const { mounted } = useDrawerContext()\n const [hydrated, setHydrated] = useState(false)\n\n useEffect(() => {\n setHydrated(true)\n }, [])\n\n if (!hydrated || !mounted) return null\n\n return createPortal(children, container ?? document.body)\n}\n\nPortal.displayName = 'Drawer.Portal'\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerOverlayProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\nimport { composeRefs, composeEventHandlers } from '../utils/dom'\n\nexport const Overlay = forwardRef<HTMLDivElement, DrawerOverlayProps>(\n function Overlay({ onClick, style, ...props }, ref) {\n const { overlayRef, closeDrawer, dismissible } = useDrawerContext()\n\n return (\n <div\n ref={composeRefs(overlayRef, ref)}\n data-hiraki-overlay=\"\"\n aria-hidden=\"true\"\n onClick={composeEventHandlers(onClick, () => {\n if (dismissible) closeDrawer()\n })}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n opacity: 0,\n zIndex: 'var(--hiraki-overlay-z, 49)' as string,\n ...style,\n }}\n {...props}\n />\n )\n },\n)\n\nOverlay.displayName = 'Drawer.Overlay'\n","import type { Variant, Direction } from '../types'\n\nexport interface VariantConfig {\n /** CSS class to apply to content element */\n contentClass?: string\n /** Whether to show handle by default */\n showHandle?: boolean\n /** Inset margin from screen edge in px */\n margin?: number\n /** Border radius override */\n borderRadius?: number\n /** Whether the drawer fills the perpendicular axis */\n fullWidth?: boolean\n /** Whether to use morph animation */\n morph?: boolean\n /** Whether this registers with a parent drawer */\n nested?: boolean\n /** Stack offset multiplier */\n stackOffset?: number\n}\n\nconst VARIANT_CONFIGS: Record<Variant, VariantConfig> = {\n default: {\n showHandle: true,\n borderRadius: 16,\n fullWidth: true,\n },\n floating: {\n showHandle: true,\n margin: 12,\n borderRadius: 16,\n fullWidth: false,\n },\n sheet: {\n showHandle: true,\n borderRadius: 0,\n fullWidth: true,\n },\n fullscreen: {\n showHandle: false,\n borderRadius: 0,\n fullWidth: true,\n morph: true,\n },\n nested: {\n showHandle: true,\n borderRadius: 16,\n fullWidth: true,\n nested: true,\n },\n stack: {\n showHandle: true,\n borderRadius: 16,\n fullWidth: true,\n stackOffset: 8,\n },\n}\n\nexport function getVariantConfig(variant: Variant): VariantConfig {\n return VARIANT_CONFIGS[variant]\n}\n\nexport function getContentStyle(\n variant: Variant,\n direction: Direction,\n): React.CSSProperties {\n const config = getVariantConfig(variant)\n const style: React.CSSProperties = {}\n\n if (config.margin) {\n switch (direction) {\n case 'bottom':\n style.left = config.margin\n style.right = config.margin\n style.bottom = config.margin\n break\n case 'top':\n style.left = config.margin\n style.right = config.margin\n style.top = config.margin\n break\n case 'left':\n style.top = config.margin\n style.bottom = config.margin\n style.left = config.margin\n break\n case 'right':\n style.top = config.margin\n style.bottom = config.margin\n style.right = config.margin\n break\n }\n }\n\n if (config.borderRadius != null && config.borderRadius > 0) {\n const r = `var(--hiraki-radius, ${config.borderRadius}px)`\n if (config.margin) {\n style.borderRadius = r\n } else {\n switch (direction) {\n case 'bottom':\n style.borderTopLeftRadius = r\n style.borderTopRightRadius = r\n break\n case 'top':\n style.borderBottomLeftRadius = r\n style.borderBottomRightRadius = r\n break\n case 'left':\n style.borderTopRightRadius = r\n style.borderBottomRightRadius = r\n break\n case 'right':\n style.borderTopLeftRadius = r\n style.borderBottomLeftRadius = r\n break\n }\n }\n }\n\n return style\n}\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerContentProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\nimport { composeRefs } from '../utils/dom'\nimport { getContentStyle } from '../variants/variant-config'\n\nfunction getPositionStyle(direction: string): React.CSSProperties {\n switch (direction) {\n case 'top':\n return { top: 0, left: 0, right: 0 }\n case 'left':\n return { left: 0, top: 0, bottom: 0 }\n case 'right':\n return { right: 0, top: 0, bottom: 0 }\n default:\n return { bottom: 0, left: 0, right: 0 }\n }\n}\n\nexport const Content = forwardRef<HTMLDivElement, DrawerContentProps>(\n function Content({ children, style, ...props }, ref) {\n const {\n contentRef,\n direction,\n variant,\n open,\n titleId,\n descriptionId,\n gestureHandlers,\n } = useDrawerContext()\n\n return (\n <div\n ref={composeRefs(contentRef, ref)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n data-hiraki-content=\"\"\n data-hiraki-direction={direction}\n data-hiraki-variant={variant}\n data-hiraki-open={open ? 'true' : 'false'}\n data-hiraki-dragging=\"false\"\n data-state={open ? 'open' : 'closed'}\n style={{\n position: 'fixed',\n zIndex: 'var(--hiraki-content-z, 50)' as string,\n willChange: 'transform',\n touchAction: 'none',\n ...getPositionStyle(direction),\n ...getContentStyle(variant, direction),\n ...style,\n }}\n {...gestureHandlers}\n {...props}\n >\n {children}\n </div>\n )\n },\n)\n\nContent.displayName = 'Drawer.Content'\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerHandleProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\n\nexport const Handle = forwardRef<HTMLDivElement, DrawerHandleProps>(\n function Handle(\n {\n handleOnly: _handleOnly = false,\n visible = true,\n style,\n ...props\n },\n ref,\n ) {\n const { direction } = useDrawerContext()\n const isHorizontal = direction === 'left' || direction === 'right'\n\n if (!visible) return null\n\n return (\n <div\n ref={ref}\n data-hiraki-handle=\"\"\n aria-hidden=\"true\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: isHorizontal ? 20 : '100%',\n height: isHorizontal ? 52 : 20,\n margin: isHorizontal ? '0 8px' : '0',\n flexShrink: 0,\n cursor: isHorizontal ? 'ew-resize' : 'ns-resize',\n touchAction: 'none',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n ...style,\n }}\n {...props}\n >\n <span\n style={{\n width: isHorizontal ? 5 : 44,\n height: isHorizontal ? 44 : 5,\n borderRadius: 9999,\n backgroundColor: 'var(--hiraki-handle-bg, rgba(120, 120, 128, 0.42))',\n boxShadow: 'var(--hiraki-handle-shadow, inset 0 1px 0 rgba(255, 255, 255, 0.22))',\n pointerEvents: 'none',\n }}\n />\n </div>\n )\n },\n)\n\nHandle.displayName = 'Drawer.Handle'\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerTitleProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\n\nexport const Title = forwardRef<HTMLHeadingElement, DrawerTitleProps>(\n function Title({ children, ...props }, ref) {\n const { titleId } = useDrawerContext()\n\n return (\n <h2 ref={ref} id={titleId} data-hiraki-title=\"\" {...props}>\n {children}\n </h2>\n )\n },\n)\n\nTitle.displayName = 'Drawer.Title'\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerDescriptionProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\n\nexport const Description = forwardRef<HTMLParagraphElement, DrawerDescriptionProps>(\n function Description({ children, ...props }, ref) {\n const { descriptionId } = useDrawerContext()\n\n return (\n <p ref={ref} id={descriptionId} data-hiraki-description=\"\" {...props}>\n {children}\n </p>\n )\n },\n)\n\nDescription.displayName = 'Drawer.Description'\n","'use client'\n\nimport { forwardRef, cloneElement, isValidElement, type ReactElement } from 'react'\nimport type { DrawerCloseProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\n\nexport const Close = forwardRef<HTMLButtonElement, DrawerCloseProps>(\n function Close({ children, onClick, asChild = false, ...props }, ref) {\n const { forceClose } = useDrawerContext()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n forceClose()\n }\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>\n return cloneElement(child, {\n ...props,\n ref,\n 'data-hiraki-close': '',\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n if (typeof child.props.onClick === 'function') child.props.onClick(e)\n handleClick(e)\n },\n })\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-hiraki-close=\"\"\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n )\n },\n)\n\nClose.displayName = 'Drawer.Close'\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerSnapIndicatorProps } from '../types'\nimport { useDrawerContext } from '../context/drawer-context'\n\nexport const SnapIndicator = forwardRef<HTMLDivElement, DrawerSnapIndicatorProps>(\n function SnapIndicator({ style, ...props }, ref) {\n const { resolvedSnapPoints, activeSnapIndex, direction } = useDrawerContext()\n const isHorizontal = direction === 'left' || direction === 'right'\n\n return (\n <div\n ref={ref}\n data-hiraki-snap-indicator=\"\"\n aria-hidden=\"true\"\n style={{\n display: 'flex',\n gap: 4,\n flexDirection: isHorizontal ? 'column' : 'row',\n justifyContent: 'center',\n ...style,\n }}\n {...props}\n >\n {resolvedSnapPoints.map((_, i) => (\n <div\n key={i}\n data-active={i === activeSnapIndex ? 'true' : 'false'}\n style={{\n width: 6,\n height: 6,\n borderRadius: '50%',\n backgroundColor:\n i === activeSnapIndex\n ? 'var(--hiraki-snap-active, currentColor)'\n : 'var(--hiraki-snap-inactive, rgba(120, 120, 128, 0.32))',\n transition: 'background-color 200ms ease',\n }}\n />\n ))}\n </div>\n )\n },\n)\n\nSnapIndicator.displayName = 'Drawer.SnapIndicator'\n","'use client'\n\nimport { forwardRef } from 'react'\nimport type { DrawerScrollAreaProps } from '../types'\n\nexport const ScrollArea = forwardRef<HTMLDivElement, DrawerScrollAreaProps>(\n function ScrollArea({ children, style, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-hiraki-scroll-area=\"\"\n style={{\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n WebkitOverflowScrolling: 'touch',\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n )\n },\n)\n\nScrollArea.displayName = 'Drawer.ScrollArea'\n","import { Root } from './components/root'\nimport { Trigger } from './components/trigger'\nimport { Portal } from './components/portal'\nimport { Overlay } from './components/overlay'\nimport { Content } from './components/content'\nimport { Handle } from './components/handle'\nimport { Title } from './components/title'\nimport { Description } from './components/description'\nimport { Close } from './components/close'\nimport { SnapIndicator } from './components/snap-indicator'\nimport { ScrollArea } from './components/scroll-area'\n\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Handle,\n Title,\n Description,\n Close,\n SnapIndicator,\n ScrollArea,\n}\n\nexport type {\n Direction,\n Variant,\n SnapPoint,\n SnapPointResolved,\n GestureCallbackData,\n DrawerRootProps,\n DrawerContentProps,\n DrawerOverlayProps,\n DrawerHandleProps,\n DrawerTriggerProps,\n DrawerCloseProps,\n DrawerTitleProps,\n DrawerDescriptionProps,\n DrawerPortalProps,\n DrawerScrollAreaProps,\n DrawerSnapIndicatorProps,\n} from './types'\n"]}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "hiraki",
3
+ "version": "0.0.1",
4
+ "description": "Zero-dependency React drawer component library — all 4 directions, velocity-aware gestures, snap points",
5
+ "keywords": ["react", "drawer", "bottom-sheet", "gesture", "animation", "accessible"],
6
+ "license": "MIT",
7
+ "author": "Ozer Gokalp Sezer",
8
+ "homepage": "https://hiraki.ozergklp.com",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/ddoemonn/hiraki"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/ddoemonn/hiraki/issues"
15
+ },
16
+ "sideEffects": false,
17
+ "type": "module",
18
+ "main": "./dist/index.cjs",
19
+ "module": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "import": {
24
+ "types": "./dist/index.d.ts",
25
+ "default": "./dist/index.js"
26
+ },
27
+ "require": {
28
+ "types": "./dist/index.d.cts",
29
+ "default": "./dist/index.cjs"
30
+ }
31
+ },
32
+ "./styles.css": "./dist/styles.css"
33
+ },
34
+ "files": [
35
+ "dist"
36
+ ],
37
+ "scripts": {
38
+ "build": "tsup",
39
+ "dev": "tsup --watch",
40
+ "lint": "eslint src --ext .ts,.tsx",
41
+ "typecheck": "tsc --noEmit",
42
+ "test": "vitest run",
43
+ "test:watch": "vitest"
44
+ },
45
+ "peerDependencies": {
46
+ "react": ">=18.0.0",
47
+ "react-dom": ">=18.0.0"
48
+ },
49
+ "peerDependenciesMeta": {
50
+ "react-dom": {
51
+ "optional": false
52
+ }
53
+ },
54
+ "devDependencies": {
55
+ "@testing-library/jest-dom": "^6.4.8",
56
+ "@testing-library/react": "^16.0.0",
57
+ "@testing-library/user-event": "^14.5.2",
58
+ "@types/react": "^18.3.3",
59
+ "@types/react-dom": "^18.3.0",
60
+ "jsdom": "^24.1.1",
61
+ "react": "^18.3.1",
62
+ "react-dom": "^18.3.1",
63
+ "tsup": "^8.2.4",
64
+ "typescript": "^5.5.4",
65
+ "vitest": "^2.0.5"
66
+ }
67
+ }