{"version":3,"file":"index.cjs","names":[],"sources":["../src/composition/merge-refs.ts","../src/composition/Slot.tsx","../src/context/sheet-context.ts","../src/components/Backdrop.tsx","../src/components/Close.tsx","../src/accessibility/focus.ts","../src/accessibility/isolation.ts","../src/components/Content.tsx","../src/components/Description.tsx","../src/layout/reconcile-active-snap-point.ts","../src/controller/reducer.ts","../src/controller/invariants.ts","../src/controller/create-controller.ts","../src/hooks/use-reduced-motion.ts","../src/gestures/velocity.ts","../src/gestures/pointer-session.ts","../src/gestures/resistance.ts","../src/gestures/scroll-boundary.ts","../src/layout/select-settle-target.ts","../src/hooks/use-sheet-interactions.ts","../src/layout/observe-layout.ts","../src/layout/resolve-snap-points.ts","../src/hooks/use-sheet-layout.ts","../src/hooks/use-sheet-motion.ts","../node_modules/motion-utils/dist/es/clamp.mjs","../node_modules/motion-utils/dist/es/format-error-message.mjs","../node_modules/motion-utils/dist/es/errors.mjs","../node_modules/motion-utils/dist/es/time-conversion.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs","../node_modules/motion-dom/dist/es/animation/generators/spring.mjs","../src/motion/motion-adapter.ts","../src/components/Root.tsx","../src/components/Title.tsx","../src/components/Trigger.tsx","../src/components/Viewport.tsx","../src/components/Handle.tsx","../src/components/Portal.tsx","../src/components/Sheet.ts","../src/components/BottomSheet.tsx"],"sourcesContent":["import type { Ref, RefCallback } from 'react'\n\ntype RefCleanup = () => void\n\nfunction assignRef<T>(\n  ref: Ref<T> | undefined,\n  value: T | null,\n): RefCleanup | undefined {\n  if (typeof ref === 'function') {\n    const cleanup = ref(value)\n    if (value === null) return undefined\n    return typeof cleanup === 'function' ? cleanup : () => ref(null)\n  }\n  if (ref) {\n    ref.current = value\n    if (value !== null) return () => (ref.current = null)\n  }\n  return undefined\n}\n\nexport function mergeRefs<T>(\n  ...refs: Array<Ref<T> | undefined>\n): RefCallback<T> {\n  return (value) => {\n    const cleanups = refs\n      .map((ref) => assignRef(ref, value))\n      .filter((cleanup): cleanup is RefCleanup => cleanup !== undefined)\n    if (value !== null && cleanups.length > 0)\n      return () => {\n        for (const cleanup of cleanups) cleanup()\n      }\n  }\n}\n","import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport type {\n  CSSProperties,\n  HTMLAttributes,\n  MouseEventHandler,\n  PointerEventHandler,\n  ReactElement,\n  Ref,\n} from 'react'\nimport { mergeRefs } from './merge-refs.js'\n\ninterface SlotChildProps extends HTMLAttributes<HTMLElement> {\n  ref?: Ref<HTMLElement>\n}\n\nexport interface SlotProps extends HTMLAttributes<HTMLElement> {\n  children: ReactElement<SlotChildProps>\n}\n\nexport const Slot = forwardRef<HTMLElement, SlotProps>(function Slot(\n  {\n    children,\n    className,\n    onClick,\n    onPointerCancel,\n    onPointerDown,\n    onPointerMove,\n    onPointerUp,\n    style,\n    ...props\n  },\n  forwardedRef,\n) {\n  const child = Children.only(children)\n  if (!isValidElement<SlotChildProps>(child)) {\n    throw new Error('asChild requires exactly one valid element')\n  }\n\n  const childClick = child.props.onClick as\n    MouseEventHandler<HTMLElement> | undefined\n  const mergedClick: MouseEventHandler<HTMLElement> = (event) => {\n    childClick?.(event)\n    if (!event.defaultPrevented) onClick?.(event)\n  }\n  const mergePointerHandler =\n    (\n      childHandler: PointerEventHandler<HTMLElement> | undefined,\n      slotHandler: PointerEventHandler<HTMLElement> | undefined,\n    ): PointerEventHandler<HTMLElement> =>\n    (event) => {\n      childHandler?.(event)\n      if (!event.defaultPrevented) slotHandler?.(event)\n    }\n  const mergedStyle: CSSProperties = { ...style, ...child.props.style }\n\n  return cloneElement(child, {\n    ...props,\n    ...child.props,\n    className:\n      [className, child.props.className].filter(Boolean).join(' ') || undefined,\n    onClick: mergedClick,\n    onPointerCancel: mergePointerHandler(\n      child.props.onPointerCancel,\n      onPointerCancel,\n    ),\n    onPointerDown: mergePointerHandler(\n      child.props.onPointerDown,\n      onPointerDown,\n    ),\n    onPointerMove: mergePointerHandler(\n      child.props.onPointerMove,\n      onPointerMove,\n    ),\n    onPointerUp: mergePointerHandler(child.props.onPointerUp, onPointerUp),\n    ref: mergeRefs(forwardedRef, child.props.ref),\n    style: mergedStyle,\n  })\n})\n","import { createContext, useContext } from 'react'\nimport type { PointerEventHandler } from 'react'\nimport type { TransitionPhase } from '../controller/types.js'\nimport type { OpenChangeReason } from '../public-types.js'\n\nexport interface SheetContextValue {\n  open: boolean\n  present: boolean\n  transitionPhase: TransitionPhase\n  modal: boolean\n  dismissible: boolean\n  titleId: string | undefined\n  descriptionId: string | undefined\n  requestOpenChange(open: boolean, reason: OpenChangeReason): void\n  registerTitle(id: string): () => void\n  registerDescription(id: string): () => void\n  registerViewport(element: HTMLElement | null): void\n  registerContent(element: HTMLElement | null): void\n  registerBackdrop(element: HTMLElement | null): void\n  interactionHandlers: {\n    onPointerDown: PointerEventHandler<HTMLElement>\n    onPointerMove: PointerEventHandler<HTMLElement>\n    onPointerUp: PointerEventHandler<HTMLElement>\n    onPointerCancel: PointerEventHandler<HTMLElement>\n  }\n  position: number\n  surfaceProgress: number\n  dragging: boolean\n}\n\nexport const SheetContext = createContext<SheetContextValue | null>(null)\n\nexport function useSheetContext(component: string): SheetContextValue {\n  const context = useContext(SheetContext)\n  if (!context) throw new Error(`${component} must be used inside Sheet.Root`)\n  return context\n}\n","import { forwardRef, useMemo } from 'react'\nimport type { HTMLAttributes, MouseEvent, Ref } from 'react'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\nimport { mergeRefs } from '../composition/merge-refs.js'\nimport { useSheetContext } from '../context/sheet-context.js'\n\nexport type SheetBackdropProps = HTMLAttributes<HTMLDivElement> & {\n  asChild?: boolean\n}\n\nexport const Backdrop = forwardRef<HTMLDivElement, SheetBackdropProps>(\n  function Backdrop(\n    { asChild = false, children, className, onClick, ...props },\n    ref,\n  ) {\n    const {\n      dismissible,\n      registerBackdrop,\n      requestOpenChange,\n      transitionPhase,\n    } = useSheetContext('Sheet.Backdrop')\n    const mergedRef = useMemo(\n      () => mergeRefs(registerBackdrop, ref as Ref<HTMLElement>),\n      [ref, registerBackdrop],\n    )\n    const shared = {\n      ...props,\n      className: ['rsbs-backdrop', className].filter(Boolean).join(' '),\n      'data-rsbs-backdrop': '',\n      'data-rsbs-state': transitionPhase,\n      onClick: (event: MouseEvent<HTMLElement>) => {\n        onClick?.(event as MouseEvent<HTMLDivElement>)\n        if (\n          dismissible &&\n          event.target === event.currentTarget &&\n          !event.defaultPrevented\n        )\n          requestOpenChange(false, 'backdrop')\n      },\n    }\n    return asChild ? (\n      <Slot {...shared} ref={mergedRef}>\n        {children as SlotProps['children']}\n      </Slot>\n    ) : (\n      <div {...shared} ref={mergedRef as Ref<HTMLDivElement>}>\n        {children}\n      </div>\n    )\n  },\n)\n","import { forwardRef } from 'react'\nimport type { ButtonHTMLAttributes, MouseEvent, Ref } from 'react'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\nimport { useSheetContext } from '../context/sheet-context.js'\n\nexport type SheetCloseProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n  asChild?: boolean\n}\n\nexport const Close = forwardRef<HTMLButtonElement, SheetCloseProps>(\n  function Close(\n    {\n      asChild = false,\n      children,\n      className,\n      onClick,\n      type = 'button',\n      ...props\n    },\n    ref,\n  ) {\n    const { requestOpenChange } = useSheetContext('Sheet.Close')\n    const shared = {\n      ...props,\n      className: ['rsbs-close', className].filter(Boolean).join(' '),\n      'data-rsbs-close': '',\n      onClick: (event: MouseEvent<HTMLElement>) => {\n        onClick?.(event as MouseEvent<HTMLButtonElement>)\n        if (!event.defaultPrevented) requestOpenChange(false, 'close')\n      },\n    }\n    return asChild ? (\n      <Slot {...shared} ref={ref as Ref<HTMLElement>}>\n        {children as SlotProps['children']}\n      </Slot>\n    ) : (\n      <button {...shared} ref={ref} type={type}>\n        {children}\n      </button>\n    )\n  },\n)\n","const FOCUSABLE = [\n  'a[href]',\n  'button:not([disabled])',\n  'input:not([disabled])',\n  'select:not([disabled])',\n  'textarea:not([disabled])',\n  '[tabindex]:not([tabindex=\"-1\"])',\n].join(',')\n\nfunction focusableElements(container: HTMLElement): HTMLElement[] {\n  return [...container.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n    (element) =>\n      !element.hidden && element.getAttribute('aria-hidden') !== 'true',\n  )\n}\n\nexport function focusInitialElement(container: HTMLElement): void {\n  const autofocus = container.querySelector<HTMLElement>('[autofocus]')\n  const target = autofocus ?? focusableElements(container)[0] ?? container\n  target.focus({ preventScroll: true })\n}\n\nexport function containTabFocus(\n  event: KeyboardEvent,\n  container: HTMLElement,\n): void {\n  if (event.key !== 'Tab') return\n  const focusable = focusableElements(container)\n  if (focusable.length === 0) {\n    event.preventDefault()\n    container.focus({ preventScroll: true })\n    return\n  }\n\n  const first = focusable[0]!\n  const last = focusable[focusable.length - 1]!\n  if (event.shiftKey && document.activeElement === first) {\n    event.preventDefault()\n    last.focus({ preventScroll: true })\n  } else if (!event.shiftKey && document.activeElement === last) {\n    event.preventDefault()\n    first.focus({ preventScroll: true })\n  }\n}\n","interface IsolatedElement {\n  element: HTMLElement\n  ariaHidden: string | null\n  inert: boolean\n}\n\nexport function isolateBackground(content: HTMLElement): () => void {\n  const isolated = new Map<HTMLElement, IsolatedElement>()\n  let pathElement = content\n  let parent = content.parentElement\n\n  while (parent) {\n    for (const element of parent.children) {\n      if (!(element instanceof HTMLElement)) continue\n      if (element === pathElement) continue\n      if (\n        element.hasAttribute('data-rsbs-backdrop') ||\n        element.querySelector('[data-rsbs-backdrop]')\n      ) {\n        continue\n      }\n      if (isolated.has(element)) continue\n\n      isolated.set(element, {\n        element,\n        ariaHidden: element.getAttribute('aria-hidden'),\n        inert: element.inert,\n      })\n      element.setAttribute('aria-hidden', 'true')\n      element.inert = true\n    }\n\n    if (parent === document.body) break\n    pathElement = parent\n    parent = parent.parentElement\n  }\n\n  return () => {\n    for (const { element, ariaHidden, inert } of [\n      ...isolated.values(),\n    ].reverse()) {\n      if (ariaHidden === null) element.removeAttribute('aria-hidden')\n      else element.setAttribute('aria-hidden', ariaHidden)\n      element.inert = inert\n    }\n  }\n}\n","import { forwardRef, useEffect, useRef } from 'react'\nimport type {\n  CSSProperties,\n  HTMLAttributes,\n  PointerEventHandler,\n  Ref,\n} from 'react'\nimport { containTabFocus, focusInitialElement } from '../accessibility/focus.js'\nimport { isolateBackground } from '../accessibility/isolation.js'\nimport { mergeRefs } from '../composition/merge-refs.js'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\nimport { useSheetContext } from '../context/sheet-context.js'\n\nexport type SheetContentProps = HTMLAttributes<HTMLDivElement> & {\n  asChild?: boolean\n}\n\nexport const Content = forwardRef<HTMLDivElement, SheetContentProps>(\n  function Content(\n    {\n      asChild = false,\n      children,\n      className,\n      onPointerCancel,\n      onPointerDown,\n      onPointerMove,\n      onPointerUp,\n      style,\n      ...props\n    },\n    ref,\n  ) {\n    const {\n      descriptionId,\n      dismissible,\n      modal,\n      open,\n      requestOpenChange,\n      registerContent,\n      interactionHandlers,\n      position,\n      surfaceProgress,\n      dragging,\n      titleId,\n      transitionPhase,\n    } = useSheetContext('Sheet.Content')\n    const internalRef = useRef<HTMLElement>(null)\n\n    useEffect(() => {\n      const content = internalRef.current\n      if (!content || !open) return\n      const previouslyFocused =\n        modal && document.activeElement instanceof HTMLElement\n          ? document.activeElement\n          : null\n      const restoreIsolation = modal ? isolateBackground(content) : undefined\n      const onKeyDown = (event: KeyboardEvent) => {\n        if (event.key === 'Escape' && dismissible) {\n          event.preventDefault()\n          requestOpenChange(false, 'escape')\n        } else if (modal) {\n          containTabFocus(event, content)\n        }\n      }\n      const onFocusIn = (event: FocusEvent) => {\n        if (\n          modal &&\n          event.target instanceof Node &&\n          !content.contains(event.target)\n        ) {\n          focusInitialElement(content)\n        }\n      }\n\n      document.addEventListener('keydown', onKeyDown)\n      document.addEventListener('focusin', onFocusIn)\n      if (modal) focusInitialElement(content)\n      return () => {\n        document.removeEventListener('keydown', onKeyDown)\n        document.removeEventListener('focusin', onFocusIn)\n        restoreIsolation?.()\n        previouslyFocused?.focus({ preventScroll: true })\n      }\n    }, [dismissible, modal, open, requestOpenChange])\n\n    useEffect(() => {\n      const content = internalRef.current\n      if (process.env.NODE_ENV === 'production' || !content || !open) return\n      let active = true\n      queueMicrotask(() => {\n        if (\n          active &&\n          content.isConnected &&\n          !content.hasAttribute('aria-label') &&\n          !content.getAttribute('aria-labelledby')\n        ) {\n          console.warn('Sheet.Content requires Sheet.Title or an aria-label.')\n        }\n      })\n      return () => {\n        active = false\n      }\n    }, [open, titleId])\n\n    const classes = ['rsbs-content', className].filter(Boolean).join(' ')\n    const composePointerHandler =\n      (\n        consumer: PointerEventHandler<HTMLElement> | undefined,\n        internal: PointerEventHandler<HTMLElement>,\n      ): PointerEventHandler<HTMLElement> =>\n      (event) => {\n        consumer?.(event)\n        if (!event.defaultPrevented) internal(event)\n      }\n    const positionStyle = {\n      ...style,\n      '--rsbs-position': `${position}px`,\n      '--rsbs-surface-progress': surfaceProgress,\n    } as CSSProperties\n    const shared = {\n      ...props,\n      role: 'dialog',\n      tabIndex: props.tabIndex ?? -1,\n      inert: !open,\n      'aria-modal': modal || undefined,\n      'aria-hidden': !open || undefined,\n      'aria-labelledby': props['aria-label'] ? undefined : titleId,\n      'aria-describedby': descriptionId,\n      className: classes,\n      'data-rsbs-content': '',\n      'data-rsbs-state': transitionPhase,\n      'data-rsbs-dragging': dragging || undefined,\n      onPointerDown: composePointerHandler(\n        onPointerDown,\n        interactionHandlers.onPointerDown,\n      ),\n      onPointerMove: composePointerHandler(\n        onPointerMove,\n        interactionHandlers.onPointerMove,\n      ),\n      onPointerUp: composePointerHandler(\n        onPointerUp,\n        interactionHandlers.onPointerUp,\n      ),\n      onPointerCancel: composePointerHandler(\n        onPointerCancel,\n        interactionHandlers.onPointerCancel,\n      ),\n      style: positionStyle,\n    }\n    return asChild ? (\n      <Slot\n        {...shared}\n        ref={mergeRefs(internalRef, registerContent, ref as Ref<HTMLElement>)}\n      >\n        {children as SlotProps['children']}\n      </Slot>\n    ) : (\n      <div\n        {...shared}\n        ref={mergeRefs(ref, (value) => {\n          internalRef.current = value\n          registerContent(value)\n        })}\n      >\n        {children}\n      </div>\n    )\n  },\n)\n","import { forwardRef, useEffect, useId } from 'react'\nimport type { HTMLAttributes, Ref } from 'react'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\nimport { useSheetContext } from '../context/sheet-context.js'\n\nexport type SheetDescriptionProps = HTMLAttributes<HTMLParagraphElement> & {\n  asChild?: boolean\n}\n\nexport const Description = forwardRef<\n  HTMLParagraphElement,\n  SheetDescriptionProps\n>(function Description(\n  { asChild = false, children, className, id: providedId, ...props },\n  ref,\n) {\n  const generatedId = useId()\n  const id = providedId ?? generatedId\n  const { registerDescription } = useSheetContext('Sheet.Description')\n  useEffect(() => registerDescription(id), [id, registerDescription])\n  const shared = {\n    ...props,\n    id,\n    className: ['rsbs-description', className].filter(Boolean).join(' '),\n    'data-rsbs-description': '',\n  }\n  return asChild ? (\n    <Slot {...shared} ref={ref as Ref<HTMLElement>}>\n      {children as SlotProps['children']}\n    </Slot>\n  ) : (\n    <p {...shared} ref={ref}>\n      {children}\n    </p>\n  )\n})\n","import type { ResolvedSnapPoint } from './types.js'\n\nexport function reconcileActiveSnapPoint(\n  activeId: string | null,\n  previousPosition: number,\n  snapPoints: readonly ResolvedSnapPoint[],\n): ResolvedSnapPoint | null {\n  if (snapPoints.length === 0) return null\n\n  const active = snapPoints.find(({ id }) => id === activeId)\n  if (active) return active\n\n  let nearest = snapPoints[0]!\n  let distance = Math.abs(previousPosition - nearest.position)\n\n  for (let index = 1; index < snapPoints.length; index += 1) {\n    const candidate = snapPoints[index]!\n    const candidateDistance = Math.abs(previousPosition - candidate.position)\n    if (candidateDistance < distance) {\n      nearest = candidate\n      distance = candidateDistance\n    }\n  }\n\n  return nearest\n}\n","import type { SheetEvent, SheetState, TransitionResult } from './types.js'\nimport { reconcileActiveSnapPoint } from '../layout/reconcile-active-snap-point.js'\n\nexport function createInitialState(): SheetState {\n  return {\n    phase: 'closed',\n    open: false,\n    activeSnapPoint: null,\n    position: 0,\n    targetPosition: 0,\n    velocity: 0,\n    dismissReason: null,\n  }\n}\n\nfunction invalid(state: SheetState, event: SheetEvent): TransitionResult {\n  return {\n    state,\n    diagnostic: {\n      code: 'invalid-transition',\n      event: event.type,\n      phase: state.phase,\n    },\n  }\n}\n\nexport function reduceSheetState(\n  state: SheetState,\n  event: SheetEvent,\n): TransitionResult {\n  if (event.type === 'OPEN_REQUESTED') {\n    return {\n      state: {\n        ...state,\n        phase: 'opening',\n        open: true,\n        activeSnapPoint: event.snapPoint,\n        targetPosition: event.targetPosition,\n        velocity: 0,\n        dismissReason: null,\n      },\n      diagnostic: null,\n    }\n  }\n\n  if (event.type === 'CLOSE_REQUESTED' && state.phase !== 'closed') {\n    return {\n      state: {\n        ...state,\n        phase: 'closing',\n        open: false,\n        dismissReason: event.reason,\n        velocity: event.velocity ?? 0,\n      },\n      diagnostic: null,\n    }\n  }\n\n  if (\n    event.type === 'DRAG_STARTED' &&\n    ['open', 'opening', 'settling'].includes(state.phase)\n  ) {\n    return {\n      state: {\n        ...state,\n        phase: 'dragging',\n        position: event.position,\n        velocity: 0,\n      },\n      diagnostic: null,\n    }\n  }\n\n  if (event.type === 'DRAG_MOVED' && state.phase === 'dragging') {\n    return {\n      state: { ...state, position: event.position },\n      diagnostic: null,\n    }\n  }\n\n  if (event.type === 'DRAG_ENDED' && state.phase === 'dragging') {\n    return {\n      state: {\n        ...state,\n        phase: 'settling',\n        position: event.position,\n        targetPosition: event.targetPosition,\n        velocity: event.velocity,\n        activeSnapPoint: event.snapPoint,\n      },\n      diagnostic: null,\n    }\n  }\n\n  if (event.type === 'LAYOUT_CHANGED') {\n    if (state.phase === 'closed') {\n      return {\n        state: {\n          ...state,\n          position: event.layout.closedPosition,\n          targetPosition: event.layout.closedPosition,\n        },\n        diagnostic: null,\n      }\n    }\n\n    if (state.phase === 'closing') {\n      return {\n        state: {\n          ...state,\n          targetPosition: event.layout.closedPosition,\n        },\n        diagnostic: null,\n      }\n    }\n\n    const snapPoint = reconcileActiveSnapPoint(\n      state.activeSnapPoint,\n      state.position,\n      event.layout.snapPoints,\n    )\n    if (!snapPoint) return { state, diagnostic: null }\n\n    return {\n      state: {\n        ...state,\n        phase: state.phase === 'dragging' ? 'dragging' : 'settling',\n        activeSnapPoint: snapPoint.id,\n        targetPosition: snapPoint.position,\n        velocity: state.phase === 'dragging' ? state.velocity : 0,\n      },\n      diagnostic: null,\n    }\n  }\n\n  if (event.type === 'SETTLED' && state.phase === 'closing') {\n    return {\n      state: {\n        ...createInitialState(),\n        position: event.position,\n        targetPosition: event.position,\n        velocity: 0,\n      },\n      diagnostic: null,\n    }\n  }\n\n  if (\n    event.type === 'SETTLED' &&\n    (state.phase === 'opening' || state.phase === 'settling')\n  ) {\n    return {\n      state: {\n        ...state,\n        phase: 'open',\n        position: event.position,\n        targetPosition: event.position,\n        velocity: 0,\n      },\n      diagnostic: null,\n    }\n  }\n\n  return invalid(state, event)\n}\n","import type { SheetState } from './types.js'\n\nexport function assertSheetState(state: SheetState): void {\n  if (state.phase === 'closed' && state.open) {\n    throw new Error('closed phase requires open to be false')\n  }\n\n  if (\n    (state.phase === 'opening' ||\n      state.phase === 'open' ||\n      state.phase === 'dragging' ||\n      state.phase === 'settling') &&\n    !state.activeSnapPoint\n  ) {\n    throw new Error(`${state.phase} phase requires an active snap point`)\n  }\n\n  if (\n    !Number.isFinite(state.position) ||\n    !Number.isFinite(state.targetPosition) ||\n    !Number.isFinite(state.velocity)\n  ) {\n    throw new Error('sheet positions must be finite')\n  }\n}\n","import { createInitialState, reduceSheetState } from './reducer.js'\nimport { assertSheetState } from './invariants.js'\nimport type {\n  ControllerDiagnostic,\n  SheetController,\n  SheetEvent,\n  SheetState,\n} from './types.js'\n\nexport interface CreateSheetControllerOptions {\n  initialState?: SheetState\n  onDiagnostic?: (diagnostic: ControllerDiagnostic) => void\n}\n\nexport function createSheetController(\n  options: CreateSheetControllerOptions = {},\n): SheetController {\n  let state = options.initialState ?? createInitialState()\n  const listeners = new Set<(state: SheetState) => void>()\n\n  return {\n    getState() {\n      return state\n    },\n    dispatch(event: SheetEvent) {\n      const previousState = state\n      const result = reduceSheetState(previousState, event)\n\n      if (result.diagnostic) {\n        options.onDiagnostic?.(result.diagnostic)\n        return\n      }\n\n      state = result.state\n      if (process.env.NODE_ENV !== 'production') assertSheetState(state)\n      if (state !== previousState) {\n        const notificationState = state\n        for (const listener of [...listeners]) listener(notificationState)\n      }\n    },\n    subscribe(listener) {\n      listeners.add(listener)\n      return () => {\n        listeners.delete(listener)\n      }\n    },\n  }\n}\n","import { useEffect, useState } from 'react'\n\nexport function useReducedMotion(): boolean {\n  const [reducedMotion, setReducedMotion] = useState(() =>\n    typeof window === 'undefined'\n      ? false\n      : window.matchMedia('(prefers-reduced-motion: reduce)').matches,\n  )\n\n  useEffect(() => {\n    const query = window.matchMedia('(prefers-reduced-motion: reduce)')\n    const update = () => setReducedMotion(query.matches)\n    query.addEventListener('change', update)\n    update()\n    return () => query.removeEventListener('change', update)\n  }, [])\n\n  return reducedMotion\n}\n","export interface PositionSample {\n  position: number\n  time: number\n}\n\nexport function calculateVelocity(\n  samples: readonly PositionSample[],\n  windowMilliseconds = 100,\n): number {\n  if (samples.length < 2) return 0\n  const latest = samples[samples.length - 1]!\n  const threshold = latest.time - windowMilliseconds\n  const earliest = samples.find(({ time }) => time >= threshold) ?? samples[0]!\n  const elapsed = latest.time - earliest.time\n  return elapsed > 0 ? (latest.position - earliest.position) / elapsed : 0\n}\n","import { calculateVelocity } from './velocity.js'\nimport type { PositionSample } from './velocity.js'\n\nexport interface PointerSample {\n  pointerId: number\n  clientY: number\n  timeStamp: number\n}\n\nexport interface PointerCaptureTarget {\n  setPointerCapture?(pointerId: number): void\n  releasePointerCapture?(pointerId: number): void\n  hasPointerCapture?(pointerId: number): boolean\n}\n\nexport interface PointerMovement {\n  deltaY: number\n  deltaSinceLastY: number\n  positionY: number\n  velocityY: number\n}\n\nexport interface PointerCompletion extends PointerMovement {\n  cancelled: boolean\n}\n\nexport interface PointerSessionOptions {\n  onStart(positionY: number): void\n  onMove(movement: PointerMovement): void\n  onEnd(completion: PointerCompletion): void\n}\n\nexport interface PointerSession {\n  readonly active: boolean\n  start(pointer: PointerSample, target?: PointerCaptureTarget): boolean\n  capture(target: PointerCaptureTarget): void\n  move(pointer: PointerSample): void\n  end(pointer: PointerSample): void\n  cancel(): void\n  dispose(): void\n}\n\nfunction capturePointer(target: PointerCaptureTarget, pointerId: number): void {\n  try {\n    target.setPointerCapture?.(pointerId)\n  } catch {\n    // The pointer may have ended before capture was requested.\n  }\n}\n\nfunction releasePointer(target: PointerCaptureTarget, pointerId: number): void {\n  try {\n    if (!target.hasPointerCapture || target.hasPointerCapture(pointerId)) {\n      target.releasePointerCapture?.(pointerId)\n    }\n  } catch {\n    // Capture may already have been released by the browser.\n  }\n}\n\nexport function createPointerSession(\n  options: PointerSessionOptions,\n): PointerSession {\n  let pointerId: number | null = null\n  let startY = 0\n  let currentY = 0\n  let deltaSinceLastY = 0\n  let captureTarget: PointerCaptureTarget | undefined\n  let samples: PositionSample[] = []\n\n  const movement = (): PointerMovement => ({\n    deltaY: currentY - startY,\n    deltaSinceLastY,\n    positionY: currentY,\n    velocityY: calculateVelocity(samples),\n  })\n\n  const cleanup = (cancelled: boolean) => {\n    if (pointerId === null) return\n\n    const completedPointerId = pointerId\n    const completion = { ...movement(), cancelled }\n    pointerId = null\n\n    if (captureTarget) releasePointer(captureTarget, completedPointerId)\n\n    captureTarget = undefined\n    samples = []\n    options.onEnd(completion)\n  }\n\n  return {\n    get active() {\n      return pointerId !== null\n    },\n    start(pointer, target) {\n      if (pointerId !== null) return false\n      pointerId = pointer.pointerId\n      startY = pointer.clientY\n      currentY = pointer.clientY\n      deltaSinceLastY = 0\n      captureTarget = target\n      samples = [{ position: pointer.clientY, time: pointer.timeStamp }]\n      if (target) capturePointer(target, pointer.pointerId)\n      options.onStart(pointer.clientY)\n      return true\n    },\n    capture(target) {\n      if (pointerId === null || captureTarget) return\n      captureTarget = target\n      capturePointer(target, pointerId)\n    },\n    move(pointer) {\n      if (pointer.pointerId !== pointerId) return\n      deltaSinceLastY = pointer.clientY - currentY\n      currentY = pointer.clientY\n      samples.push({ position: pointer.clientY, time: pointer.timeStamp })\n      options.onMove(movement())\n    },\n    end(pointer) {\n      if (pointer.pointerId !== pointerId) return\n      deltaSinceLastY = pointer.clientY - currentY\n      currentY = pointer.clientY\n      samples.push({ position: pointer.clientY, time: pointer.timeStamp })\n      cleanup(false)\n    },\n    cancel() {\n      cleanup(true)\n    },\n    dispose() {\n      cleanup(true)\n    },\n  }\n}\n","const DEFAULT_RESISTANCE = 0.35\n\nexport interface DragRange {\n  min: number\n  max: number\n}\n\nexport function applyDragResistance(\n  position: number,\n  range: DragRange,\n  resistance = DEFAULT_RESISTANCE,\n): number {\n  if (range.min > range.max) {\n    throw new Error('drag range minimum cannot exceed maximum')\n  }\n  if (position < range.min) {\n    return range.min + (position - range.min) * resistance\n  }\n  if (position > range.max) {\n    return range.max + (position - range.max) * resistance\n  }\n  return position\n}\n","export type GestureOwner = 'sheet' | 'content'\n\nexport interface ScrollBoundaryInput {\n  deltaY: number\n  scrollTop: number\n  scrollHeight: number\n  clientHeight: number\n  startedOnHandle: boolean\n}\n\nexport function decideGestureOwner({\n  deltaY,\n  scrollTop,\n  scrollHeight,\n  clientHeight,\n  startedOnHandle,\n}: ScrollBoundaryInput): GestureOwner {\n  if (startedOnHandle) return 'sheet'\n\n  const maximumScrollTop = Math.max(0, scrollHeight - clientHeight)\n\n  if (maximumScrollTop <= 0) return 'sheet'\n  if (deltaY < 0) {\n    return scrollTop < maximumScrollTop ? 'content' : 'sheet'\n  }\n  if (deltaY > 0) {\n    return scrollTop > 0 ? 'content' : 'sheet'\n  }\n\n  return 'content'\n}\n\nexport function findScrollableAncestor(\n  target: EventTarget | null,\n  boundary: HTMLElement,\n): HTMLElement | null {\n  let element = target instanceof HTMLElement ? target : null\n\n  while (element && element !== boundary) {\n    const overflowY = getComputedStyle(element).overflowY\n    if (\n      element.scrollHeight > element.clientHeight &&\n      ['auto', 'scroll', 'overlay'].includes(overflowY)\n    )\n      return element\n    element = element.parentElement\n  }\n\n  return null\n}\n","import type { ResolvedSnapPoint } from './types.js'\n\nconst FLICK_VELOCITY = 0.45\n\nexport interface SelectSettleTargetOptions {\n  position: number\n  velocity: number\n  snapPoints: readonly ResolvedSnapPoint[]\n  closedPosition: number\n  dismissible: boolean\n}\n\nexport type SettleTarget =\n  | { type: 'snap'; snapPoint: ResolvedSnapPoint }\n  | { type: 'dismiss'; position: number }\n  | { type: 'none' }\n\nfunction nearestIndex(\n  position: number,\n  snapPoints: readonly ResolvedSnapPoint[],\n): number {\n  let selected = 0\n  let distance = Math.abs(position - snapPoints[0]!.position)\n\n  for (let index = 1; index < snapPoints.length; index += 1) {\n    const candidateDistance = Math.abs(position - snapPoints[index]!.position)\n    if (candidateDistance < distance) {\n      selected = index\n      distance = candidateDistance\n    }\n  }\n  return selected\n}\n\nexport function selectSettleTarget({\n  position,\n  velocity,\n  snapPoints,\n  closedPosition,\n  dismissible,\n}: SelectSettleTargetOptions): SettleTarget {\n  if (snapPoints.length === 0) return { type: 'none' }\n\n  const lastIndex = snapPoints.length - 1\n  const lastPoint = snapPoints[lastIndex]!\n  const dismissalMidpoint = (lastPoint.position + closedPosition) / 2\n  const nearest = nearestIndex(position, snapPoints)\n\n  if (\n    dismissible &&\n    (position >= dismissalMidpoint ||\n      (nearest === lastIndex && velocity >= FLICK_VELOCITY))\n  ) {\n    return { type: 'dismiss', position: closedPosition }\n  }\n\n  if (Math.abs(velocity) >= FLICK_VELOCITY) {\n    const direction = velocity > 0 ? 1 : -1\n    const directedIndex = Math.max(0, Math.min(lastIndex, nearest + direction))\n    return { type: 'snap', snapPoint: snapPoints[directedIndex]! }\n  }\n\n  return { type: 'snap', snapPoint: snapPoints[nearest]! }\n}\n","import { useEffect, useMemo, useRef } from 'react'\nimport type { PointerEventHandler } from 'react'\nimport type { SheetController, SheetState } from '../controller/types.js'\nimport { createPointerSession } from '../gestures/pointer-session.js'\nimport { applyDragResistance } from '../gestures/resistance.js'\nimport {\n  decideGestureOwner,\n  findScrollableAncestor,\n} from '../gestures/scroll-boundary.js'\nimport { selectSettleTarget } from '../layout/select-settle-target.js'\nimport type { ResolvedLayout } from '../layout/types.js'\n\nexport interface UseSheetInteractionsOptions {\n  content: HTMLElement | null\n  controller: SheetController\n  state: SheetState\n  layout: ResolvedLayout | null\n  dismissible: boolean\n  onDismiss(): void\n  onSnapPointChange(id: string): void\n  onPositionChange(position: number): void\n}\n\nexport interface SheetInteractionHandlers {\n  onPointerDown: PointerEventHandler<HTMLElement>\n  onPointerMove: PointerEventHandler<HTMLElement>\n  onPointerUp: PointerEventHandler<HTMLElement>\n  onPointerCancel: PointerEventHandler<HTMLElement>\n}\n\nexport function useSheetInteractions({\n  content,\n  controller,\n  state,\n  layout,\n  dismissible,\n  onDismiss,\n  onSnapPointChange,\n  onPositionChange,\n}: UseSheetInteractionsOptions): SheetInteractionHandlers {\n  const stateRef = useRef(state)\n  const layoutRef = useRef(layout)\n  const scrollElementRef = useRef<HTMLElement | null>(null)\n  const startedOnHandleRef = useRef(false)\n  const sheetOwnsGestureRef = useRef(false)\n  const takeoverDeltaRef = useRef(0)\n  const startPositionRef = useRef(0)\n  const captureTargetRef = useRef<HTMLElement | null>(null)\n  stateRef.current = state\n  layoutRef.current = layout\n\n  const session = useMemo(\n    () =>\n      createPointerSession({\n        onStart() {\n          startPositionRef.current = stateRef.current.position\n          sheetOwnsGestureRef.current = startedOnHandleRef.current\n          takeoverDeltaRef.current = 0\n          if (\n            sheetOwnsGestureRef.current &&\n            ['open', 'opening', 'settling'].includes(stateRef.current.phase)\n          ) {\n            controller.dispatch({\n              type: 'DRAG_STARTED',\n              position: startPositionRef.current,\n            })\n          }\n        },\n        onMove(movement) {\n          const activeLayout = layoutRef.current\n          if (!activeLayout) return\n\n          if (!sheetOwnsGestureRef.current) {\n            const scrollElement = scrollElementRef.current\n            const owner = decideGestureOwner({\n              deltaY: movement.deltaSinceLastY,\n              scrollTop: scrollElement?.scrollTop ?? 0,\n              scrollHeight: scrollElement?.scrollHeight ?? 0,\n              clientHeight: scrollElement?.clientHeight ?? 0,\n              startedOnHandle: startedOnHandleRef.current,\n            })\n            if (owner === 'content') return\n            if (\n              !['open', 'opening', 'settling'].includes(stateRef.current.phase)\n            )\n              return\n            sheetOwnsGestureRef.current = true\n            if (captureTargetRef.current) {\n              session.capture(captureTargetRef.current)\n            }\n            takeoverDeltaRef.current = movement.deltaY\n            startPositionRef.current = stateRef.current.position\n            controller.dispatch({\n              type: 'DRAG_STARTED',\n              position: startPositionRef.current,\n            })\n          }\n\n          const minimum = activeLayout.snapPoints[0]?.position\n          if (minimum === undefined) return\n          const position = applyDragResistance(\n            startPositionRef.current +\n              movement.deltaY -\n              takeoverDeltaRef.current,\n            { min: minimum, max: activeLayout.closedPosition },\n          )\n          controller.dispatch({ type: 'DRAG_MOVED', position })\n          onPositionChange(position)\n        },\n        onEnd(completion) {\n          const activeLayout = layoutRef.current\n          if (!sheetOwnsGestureRef.current || !activeLayout) return\n          const current = stateRef.current\n          const target = selectSettleTarget({\n            position: current.position,\n            velocity: completion.cancelled ? 0 : completion.velocityY,\n            snapPoints: activeLayout.snapPoints,\n            closedPosition: activeLayout.closedPosition,\n            dismissible,\n          })\n\n          if (target.type === 'dismiss') {\n            controller.dispatch({\n              type: 'CLOSE_REQUESTED',\n              reason: 'drag',\n              velocity: completion.velocityY,\n            })\n            onDismiss()\n          } else if (target.type === 'snap') {\n            controller.dispatch({\n              type: 'DRAG_ENDED',\n              position: current.position,\n              velocity: completion.velocityY,\n              snapPoint: target.snapPoint.id,\n              targetPosition: target.snapPoint.position,\n            })\n            onSnapPointChange(target.snapPoint.id)\n          }\n        },\n      }),\n    [controller, dismissible, onDismiss, onPositionChange, onSnapPointChange],\n  )\n\n  useEffect(() => {\n    const cancel = () => session.cancel()\n    window.addEventListener('blur', cancel)\n    return () => {\n      window.removeEventListener('blur', cancel)\n      session.dispose()\n    }\n  }, [session])\n\n  return {\n    onPointerDown(event) {\n      if (\n        !content ||\n        !layout ||\n        !['open', 'opening', 'settling'].includes(state.phase)\n      )\n        return\n      if (session.active) {\n        session.cancel()\n        return\n      }\n      const target = event.target instanceof HTMLElement ? event.target : null\n      startedOnHandleRef.current = Boolean(\n        target?.closest('[data-rsbs-handle]'),\n      )\n      scrollElementRef.current = startedOnHandleRef.current\n        ? null\n        : findScrollableAncestor(event.target, content)\n      captureTargetRef.current = event.currentTarget\n      session.start(\n        event.nativeEvent,\n        startedOnHandleRef.current ? event.currentTarget : undefined,\n      )\n    },\n    onPointerMove(event) {\n      session.move(event.nativeEvent)\n      if (sheetOwnsGestureRef.current) event.preventDefault()\n    },\n    onPointerUp(event) {\n      session.end(event.nativeEvent)\n    },\n    onPointerCancel() {\n      session.cancel()\n    },\n  }\n}\n","import type { LayoutMeasurements } from './types.js'\n\ninterface ResizeObserverLike {\n  observe(target: Element): void\n  disconnect(): void\n}\n\ninterface VisualViewportLike {\n  readonly height: number\n  addEventListener(type: 'resize', listener: (event: Event) => void): void\n  removeEventListener(type: 'resize', listener: (event: Event) => void): void\n}\n\nexport interface LayoutObservationOptions {\n  viewport: HTMLElement\n  content: HTMLElement\n  onChange(measurements: LayoutMeasurements): void\n  getSafeArea?: () => { top: number; bottom: number }\n  visualViewport?: VisualViewportLike | null\n  createResizeObserver?: (callback: () => void) => ResizeObserverLike | null\n}\n\nexport interface LayoutObservation {\n  measure(): void\n  dispose(): void\n}\n\nfunction readSafeArea(): { top: number; bottom: number } {\n  if (typeof document === 'undefined') return { top: 0, bottom: 0 }\n\n  const probe = document.createElement('div')\n  probe.style.cssText =\n    'position:fixed;visibility:hidden;pointer-events:none;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)'\n  document.body.append(probe)\n  const style = getComputedStyle(probe)\n  const result = {\n    top: Number.parseFloat(style.paddingTop) || 0,\n    bottom: Number.parseFloat(style.paddingBottom) || 0,\n  }\n  probe.remove()\n  return result\n}\n\nexport function observeLayout({\n  viewport,\n  content,\n  onChange,\n  getSafeArea = readSafeArea,\n  visualViewport = typeof window === 'undefined' ? null : window.visualViewport,\n  createResizeObserver = (callback) =>\n    typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback),\n}: LayoutObservationOptions): LayoutObservation {\n  let disposed = false\n  const activeVisualViewport =\n    typeof document !== 'undefined' && viewport.parentElement === document.body\n      ? visualViewport\n      : null\n\n  const measure = () => {\n    if (disposed) return\n    const safeArea = getSafeArea()\n    const contentBoxHeight = content.getBoundingClientRect().height\n    onChange({\n      viewportHeight: activeVisualViewport?.height ?? viewport.clientHeight,\n      contentHeight: contentBoxHeight || content.scrollHeight,\n      safeAreaTop: safeArea.top,\n      safeAreaBottom: safeArea.bottom,\n    })\n  }\n\n  const resizeObserver = createResizeObserver(measure)\n  resizeObserver?.observe(viewport)\n  resizeObserver?.observe(content)\n  activeVisualViewport?.addEventListener('resize', measure)\n  measure()\n\n  return {\n    measure,\n    dispose() {\n      if (disposed) return\n      disposed = true\n      resizeObserver?.disconnect()\n      activeVisualViewport?.removeEventListener('resize', measure)\n    },\n  }\n}\n","import type { SnapPoint, SnapPointValue } from '../public-types.js'\nimport type {\n  LayoutMeasurements,\n  ResolvedSnapPoint,\n  SnapPointDiagnostic,\n} from './types.js'\n\nexport interface ResolveSnapPointsResult {\n  snapPoints: ResolvedSnapPoint[]\n  diagnostics: SnapPointDiagnostic[]\n}\n\nfunction validMeasurements(measurements: LayoutMeasurements): boolean {\n  const values = [\n    measurements.viewportHeight,\n    measurements.contentHeight,\n    measurements.safeAreaTop,\n    measurements.safeAreaBottom,\n  ]\n\n  return (\n    values.every((value) => Number.isFinite(value) && value >= 0) &&\n    measurements.viewportHeight >\n      measurements.safeAreaTop + measurements.safeAreaBottom\n  )\n}\n\nfunction resolveHeight(\n  value: SnapPointValue,\n  measurements: LayoutMeasurements,\n  availableHeight: number,\n): number | null {\n  if (value === 'content') return measurements.contentHeight\n  if (typeof value === 'number') {\n    return value > 0 && value <= 1 ? value * availableHeight : null\n  }\n\n  const match = /^(-?(?:\\d+\\.?\\d*|\\.\\d+))(px|%)$/.exec(value)\n  if (!match) return null\n\n  const amount = Number(match[1])\n  if (!Number.isFinite(amount) || amount <= 0) return null\n  return match[2] === '%' ? (amount / 100) * availableHeight : amount\n}\n\nexport function resolveSnapPoints(\n  snapPoints: readonly SnapPoint[],\n  measurements: LayoutMeasurements,\n): ResolveSnapPointsResult {\n  if (!validMeasurements(measurements)) {\n    return {\n      snapPoints: [],\n      diagnostics: [{ code: 'invalid-measurements' }],\n    }\n  }\n\n  const availableHeight =\n    measurements.viewportHeight -\n    measurements.safeAreaTop -\n    measurements.safeAreaBottom\n  const seen = new Set<string>()\n  const resolved: ResolvedSnapPoint[] = []\n  const diagnostics: SnapPointDiagnostic[] = []\n\n  for (const snapPoint of snapPoints) {\n    if (seen.has(snapPoint.id)) {\n      diagnostics.push({ code: 'duplicate-id', id: snapPoint.id })\n      continue\n    }\n    seen.add(snapPoint.id)\n\n    const height = resolveHeight(snapPoint.value, measurements, availableHeight)\n    if (height === null) {\n      diagnostics.push({\n        code: 'invalid-value',\n        id: snapPoint.id,\n        value: snapPoint.value,\n      })\n      continue\n    }\n\n    const clampedHeight = Math.min(height, availableHeight)\n    resolved.push({\n      id: snapPoint.id,\n      position:\n        measurements.viewportHeight -\n        measurements.safeAreaBottom -\n        clampedHeight,\n    })\n  }\n\n  resolved.sort((left, right) => left.position - right.position)\n  return { snapPoints: resolved, diagnostics }\n}\n","import { useEffect } from 'react'\nimport type { SnapPoint } from '../public-types.js'\nimport { observeLayout } from '../layout/observe-layout.js'\nimport { resolveSnapPoints } from '../layout/resolve-snap-points.js'\nimport type { ResolvedLayout } from '../layout/types.js'\n\nexport interface UseSheetLayoutOptions {\n  viewport: HTMLElement | null\n  content: HTMLElement | null\n  snapPoints: readonly SnapPoint[]\n  onLayout(layout: ResolvedLayout): void\n}\n\nexport function useSheetLayout({\n  viewport,\n  content,\n  snapPoints,\n  onLayout,\n}: UseSheetLayoutOptions): void {\n  useEffect(() => {\n    if (!viewport || !content) return\n\n    return observeLayout({\n      viewport,\n      content,\n      onChange(measurements) {\n        const resolved = resolveSnapPoints(snapPoints, measurements)\n        if (resolved.snapPoints.length === 0) return\n        onLayout({\n          viewportHeight: measurements.viewportHeight,\n          closedPosition:\n            measurements.viewportHeight - measurements.safeAreaBottom,\n          snapPoints: resolved.snapPoints,\n        })\n      },\n    }).dispose\n  }, [content, onLayout, snapPoints, viewport])\n}\n","import { useEffect } from 'react'\nimport type { SheetController, SheetState } from '../controller/types.js'\nimport type { MotionAdapter } from '../motion/types.js'\n\nexport interface UseSheetMotionOptions {\n  controller: SheetController\n  state: SheetState\n  closedPosition: number\n  reducedMotion: boolean\n  adapter: MotionAdapter\n  getPosition(): number\n  onUpdate(position: number): void\n  getBackdropProgress(): number\n  onBackdropProgress(progress: number): void\n}\n\nfunction clamp(value: number): number {\n  return Math.min(1, Math.max(0, value))\n}\n\nexport function resolveBackdropProgress(\n  phase: SheetState['phase'],\n  value: number,\n  from: number,\n  to: number,\n  startProgress = phase === 'opening' ? 0 : 1,\n): number {\n  if (from === to) return phase === 'closing' ? 0 : 1\n  const segmentProgress = clamp((value - from) / (to - from))\n  const targetProgress = phase === 'closing' ? 0 : 1\n  return clamp(\n    startProgress + (targetProgress - startProgress) * segmentProgress,\n  )\n}\n\nexport function useSheetMotion({\n  controller,\n  state,\n  closedPosition,\n  reducedMotion,\n  adapter,\n  getPosition,\n  onUpdate,\n  getBackdropProgress,\n  onBackdropProgress,\n}: UseSheetMotionOptions): void {\n  useEffect(() => {\n    if (!['opening', 'settling', 'closing'].includes(state.phase)) return\n    const from = getPosition()\n    const target =\n      state.phase === 'closing' ? closedPosition : state.targetPosition\n    const startBackdropProgress = getBackdropProgress()\n    const handle = adapter.start({\n      from,\n      to: target,\n      velocity: state.velocity,\n      reducedMotion,\n      onUpdate(value) {\n        onUpdate(value)\n        onBackdropProgress(\n          resolveBackdropProgress(\n            state.phase,\n            value,\n            from,\n            target,\n            startBackdropProgress,\n          ),\n        )\n      },\n      onComplete: () =>\n        controller.dispatch({ type: 'SETTLED', position: target }),\n    })\n    return () => handle.stop()\n  }, [\n    adapter,\n    closedPosition,\n    controller,\n    getPosition,\n    getBackdropProgress,\n    onBackdropProgress,\n    onUpdate,\n    reducedMotion,\n    state,\n  ])\n}\n","const clamp = (min, max, v) => {\n    if (v > max)\n        return max;\n    if (v < min)\n        return min;\n    return v;\n};\n\nexport { clamp };\n//# sourceMappingURL=clamp.mjs.map\n","function formatErrorMessage(message, errorCode) {\n    return errorCode\n        ? `${message}. For more information and steps for solving, visit https://motion.dev/troubleshooting/${errorCode}`\n        : message;\n}\n\nexport { formatErrorMessage };\n//# sourceMappingURL=format-error-message.mjs.map\n","import { formatErrorMessage } from './format-error-message.mjs';\n\nlet warning = () => { };\nlet invariant = () => { };\nif (typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV !== \"production\") {\n    warning = (check, message, errorCode) => {\n        if (!check && typeof console !== \"undefined\") {\n            console.warn(formatErrorMessage(message, errorCode));\n        }\n    };\n    invariant = (check, message, errorCode) => {\n        if (!check) {\n            throw new Error(formatErrorMessage(message, errorCode));\n        }\n    };\n}\n\nexport { invariant, warning };\n//# sourceMappingURL=errors.mjs.map\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n/*#__NO_SIDE_EFFECTS__*/\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n/*#__NO_SIDE_EFFECTS__*/\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n//# sourceMappingURL=time-conversion.mjs.map\n","const generateLinearEasing = (easing, duration, // as milliseconds\nresolution = 10 // as milliseconds\n) => {\n    let points = \"\";\n    const numPoints = Math.max(Math.round(duration / resolution), 2);\n    for (let i = 0; i < numPoints; i++) {\n        points += Math.round(easing(i / (numPoints - 1)) * 10000) / 10000 + \", \";\n    }\n    return `linear(${points.substring(0, points.length - 2)})`;\n};\n\nexport { generateLinearEasing };\n//# sourceMappingURL=linear.mjs.map\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator, timeStep = 50, maxDuration = maxGeneratorDuration, keyframes) {\n    let duration = 0;\n    let state = generator.next(duration);\n    keyframes?.push(state.value);\n    while (!state.done && duration < maxDuration) {\n        duration += timeStep;\n        state = generator.next(duration);\n        keyframes?.push(state.value);\n    }\n    return duration >= maxDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n//# sourceMappingURL=calc-duration.mjs.map\n","import { millisecondsToSeconds } from 'motion-utils';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './calc-duration.mjs';\n\n/**\n * Create a progress => progress easing function from a generator.\n */\nfunction createGeneratorEasing(options, scale = 100, createGenerator) {\n    const generator = createGenerator({ ...options, keyframes: [0, scale] });\n    const duration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n    return {\n        type: \"keyframes\",\n        ease: (progress) => {\n            return generator.next(duration * progress).value / scale;\n        },\n        duration: millisecondsToSeconds(duration),\n    };\n}\n\nexport { createGeneratorEasing };\n//# sourceMappingURL=create-generator-easing.mjs.map\n","import { millisecondsToSeconds, clamp, secondsToMilliseconds, warning } from 'motion-utils';\nimport { generateLinearEasing } from '../waapi/utils/linear.mjs';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './utils/calc-duration.mjs';\nimport { createGeneratorEasing } from './utils/create-generator-easing.mjs';\n\nconst springDefaults = {\n    // Default spring physics\n    stiffness: 100,\n    damping: 10,\n    mass: 1.0,\n    velocity: 0.0,\n    // Default duration/bounce-based options\n    duration: 800, // in ms\n    bounce: 0.3,\n    visualDuration: 0.3, // in seconds\n    // Rest thresholds\n    restSpeed: {\n        granular: 0.01,\n        default: 2,\n    },\n    restDelta: {\n        granular: 0.005,\n        default: 0.5,\n    },\n    // Limits\n    minDuration: 0.01, // in seconds\n    maxDuration: 10.0, // in seconds\n    minDamping: 0.05,\n    maxDamping: 1,\n};\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n    return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n    let result = initialGuess;\n    for (let i = 1; i < rootIterations; i++) {\n        result = result - envelope(result) / derivative(result);\n    }\n    return result;\n}\n/**\n * This is ported from the Framer implementation of duration-based spring resolution.\n */\nconst safeMin = 0.001;\nfunction findSpring({ duration = springDefaults.duration, bounce = springDefaults.bounce, velocity = springDefaults.velocity, mass = springDefaults.mass, }) {\n    let envelope;\n    let derivative;\n    warning(duration <= secondsToMilliseconds(springDefaults.maxDuration), \"Spring duration must be 10 seconds or less\", \"spring-duration-limit\");\n    let dampingRatio = 1 - bounce;\n    /**\n     * Restrict dampingRatio and duration to within acceptable ranges.\n     */\n    dampingRatio = clamp(springDefaults.minDamping, springDefaults.maxDamping, dampingRatio);\n    duration = clamp(springDefaults.minDuration, springDefaults.maxDuration, millisecondsToSeconds(duration));\n    if (dampingRatio < 1) {\n        /**\n         * Underdamped spring\n         */\n        envelope = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const a = exponentialDecay - velocity;\n            const b = calcAngularFreq(undampedFreq, dampingRatio);\n            const c = Math.exp(-delta);\n            return safeMin - (a / b) * c;\n        };\n        derivative = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const d = delta * velocity + velocity;\n            const e = dampingRatio *\n                dampingRatio *\n                undampedFreq *\n                undampedFreq *\n                duration;\n            const f = Math.exp(-delta);\n            const g = calcAngularFreq(undampedFreq * undampedFreq, dampingRatio);\n            const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n            return (factor * ((d - e) * f)) / g;\n        };\n    }\n    else {\n        /**\n         * Critically-damped spring\n         */\n        envelope = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (undampedFreq - velocity) * duration + 1;\n            return -safeMin + a * b;\n        };\n        derivative = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (velocity - undampedFreq) * (duration * duration);\n            return a * b;\n        };\n    }\n    const initialGuess = 5 / duration;\n    const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n    duration = secondsToMilliseconds(duration);\n    if (isNaN(undampedFreq)) {\n        return {\n            stiffness: springDefaults.stiffness,\n            damping: springDefaults.damping,\n            duration,\n        };\n    }\n    else {\n        const stiffness = undampedFreq * undampedFreq * mass;\n        return {\n            stiffness,\n            damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n            duration,\n        };\n    }\n}\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n    return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n    let springOptions = {\n        velocity: springDefaults.velocity,\n        stiffness: springDefaults.stiffness,\n        damping: springDefaults.damping,\n        mass: springDefaults.mass,\n        isResolvedFromDuration: false,\n        ...options,\n    };\n    // stiffness/damping/mass overrides duration/bounce\n    if (!isSpringType(options, physicsKeys) &&\n        isSpringType(options, durationKeys)) {\n        // Time-defined springs should ignore inherited velocity.\n        // Velocity from interrupted animations can cause findSpring()\n        // to compute wildly different spring parameters, leading to\n        // massive oscillation on small-range animations.\n        springOptions.velocity = 0;\n        if (options.visualDuration) {\n            const visualDuration = options.visualDuration;\n            const root = (2 * Math.PI) / (visualDuration * 1.2);\n            const stiffness = root * root;\n            const damping = 2 *\n                clamp(0.05, 1, 1 - (options.bounce || 0)) *\n                Math.sqrt(stiffness);\n            springOptions = {\n                ...springOptions,\n                mass: springDefaults.mass,\n                stiffness,\n                damping,\n            };\n        }\n        else {\n            const derived = findSpring({ ...options, velocity: 0 });\n            springOptions = {\n                ...springOptions,\n                ...derived,\n                mass: springDefaults.mass,\n            };\n            springOptions.isResolvedFromDuration = true;\n        }\n    }\n    return springOptions;\n}\nfunction spring(optionsOrVisualDuration = springDefaults.visualDuration, bounce = springDefaults.bounce) {\n    const options = typeof optionsOrVisualDuration !== \"object\"\n        ? {\n            visualDuration: optionsOrVisualDuration,\n            keyframes: [0, 1],\n            bounce,\n        }\n        : optionsOrVisualDuration;\n    let { restSpeed, restDelta } = options;\n    const origin = options.keyframes[0];\n    const target = options.keyframes[options.keyframes.length - 1];\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = { done: false, value: origin };\n    const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n        ...options,\n        velocity: -millisecondsToSeconds(options.velocity || 0),\n    });\n    const initialVelocity = velocity || 0.0;\n    const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n    const initialDelta = target - origin;\n    const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n    const decay = dampingRatio * undampedAngularFreq;\n    /**\n     * If we're working on a granular scale, use smaller defaults for determining\n     * when the spring is finished.\n     *\n     * These defaults have been selected emprically based on what strikes a good\n     * ratio between feeling good and finishing as soon as changes are imperceptible.\n     */\n    const isGranularScale = Math.abs(initialDelta) < 5;\n    restSpeed || (restSpeed = isGranularScale\n        ? springDefaults.restSpeed.granular\n        : springDefaults.restSpeed.default);\n    restDelta || (restDelta = isGranularScale\n        ? springDefaults.restDelta.granular\n        : springDefaults.restDelta.default);\n    let resolveSpring;\n    let resolveVelocity;\n    if (dampingRatio < 1) {\n        const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n        const A = (initialVelocity + decay * initialDelta) / angularFreq;\n        // Coefficients for the analytical derivative (px/ms)\n        const sinCoeff = decay * A + initialDelta * angularFreq;\n        const cosCoeff = decay * initialDelta - A * angularFreq;\n        /**\n         * The underdamped hot path needs both position and velocity every\n         * frame and they share the same exp/sin/cos terms, so sample both\n         * at once, memoized by t, to only calculate them once per frame.\n         */\n        let sampledT = -1;\n        let position = 0;\n        let velocityAtT = 0;\n        const sample = (t) => {\n            if (t !== sampledT) {\n                sampledT = t;\n                const envelope = Math.exp(-decay * t);\n                const sin = Math.sin(angularFreq * t);\n                const cos = Math.cos(angularFreq * t);\n                position = target - envelope * (A * sin + initialDelta * cos);\n                velocityAtT = envelope * (sinCoeff * sin + cosCoeff * cos);\n            }\n        };\n        // Underdamped spring\n        resolveSpring = (t) => {\n            sample(t);\n            return position;\n        };\n        resolveVelocity = (t) => {\n            sample(t);\n            return velocityAtT;\n        };\n    }\n    else if (dampingRatio === 1) {\n        // Critically damped spring\n        resolveSpring = (t) => target -\n            Math.exp(-undampedAngularFreq * t) *\n                (initialDelta +\n                    (initialVelocity + undampedAngularFreq * initialDelta) * t);\n        // Analytical derivative of critically damped spring (px/ms)\n        const C = initialVelocity + undampedAngularFreq * initialDelta;\n        resolveVelocity = (t) => Math.exp(-undampedAngularFreq * t) *\n            (undampedAngularFreq * C * t - initialVelocity);\n    }\n    else {\n        // Overdamped spring\n        const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-decay * t);\n            // When performing sinh or cosh values can hit Infinity so we cap them here\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return (target -\n                (envelope *\n                    ((initialVelocity + decay * initialDelta) *\n                        Math.sinh(freqForT) +\n                        dampedAngularFreq *\n                            initialDelta *\n                            Math.cosh(freqForT))) /\n                    dampedAngularFreq);\n        };\n        // Analytical derivative of overdamped spring (px/ms)\n        const P = (initialVelocity + decay * initialDelta) / dampedAngularFreq;\n        const sinhCoeff = decay * P - initialDelta * dampedAngularFreq;\n        const coshCoeff = decay * initialDelta - P * dampedAngularFreq;\n        resolveVelocity = (t) => {\n            const envelope = Math.exp(-decay * t);\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return (envelope *\n                (sinhCoeff * Math.sinh(freqForT) +\n                    coshCoeff * Math.cosh(freqForT)));\n        };\n    }\n    const generator = {\n        calculatedDuration: isResolvedFromDuration ? duration || null : null,\n        velocity: (t) => secondsToMilliseconds(resolveVelocity(t)),\n        next: (t) => {\n            const current = resolveSpring(t);\n            if (!isResolvedFromDuration) {\n                const currentVelocity = secondsToMilliseconds(resolveVelocity(t));\n                state.done =\n                    Math.abs(currentVelocity) <= restSpeed &&\n                        Math.abs(target - current) <= restDelta;\n            }\n            else {\n                state.done = t >= duration;\n            }\n            state.value = state.done ? target : current;\n            return state;\n        },\n        toString: () => {\n            const calculatedDuration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n            const easing = generateLinearEasing((progress) => generator.next(calculatedDuration * progress).value, calculatedDuration, 30);\n            return calculatedDuration + \"ms \" + easing;\n        },\n        toTransition: () => { },\n    };\n    return generator;\n}\nspring.applyToOptions = (options) => {\n    const generatorOptions = createGeneratorEasing(options, 100, spring);\n    options.ease = generatorOptions.ease;\n    options.duration = secondsToMilliseconds(generatorOptions.duration);\n    options.type = \"keyframes\";\n    return options;\n};\n\nexport { spring };\n//# sourceMappingURL=spring.mjs.map\n","import { calcGeneratorDuration, spring } from 'motion'\nimport type { MotionAdapter } from './types.js'\n\ninterface AnimationOptions {\n  type: 'spring'\n  velocity: number\n  stiffness: number\n  damping: number\n  onUpdate(value: number): void\n  onComplete(): void\n}\n\ninterface AnimationControls {\n  stop(): void\n}\n\ntype AnimationDriver = (\n  from: number,\n  to: number,\n  options: AnimationOptions,\n) => AnimationControls\n\nconst motionDriver: AnimationDriver = (from, to, options) => {\n  const generator = spring({\n    keyframes: [from, to],\n    velocity: options.velocity,\n    stiffness: options.stiffness,\n    damping: options.damping,\n  })\n  // Use the same duration sampling and millisecond rounding as Motion's\n  // JSAnimation, so the existing spring trajectory and settling time survive.\n  const duration = calcGeneratorDuration(generator)\n  let startTime = performance.now()\n  let stopped = false\n  let frameId: number\n\n  const update = (timestamp: number) => {\n    if (stopped) return\n    // A browser's frame timestamp can precede performance.now() at startup.\n    startTime = Math.min(startTime, timestamp)\n    const elapsed = Math.round(timestamp - startTime)\n    const done = elapsed >= duration\n    options.onUpdate(done ? to : generator.next(elapsed).value)\n    if (stopped) return\n    if (done) {\n      // Motion's animate() reports completion through a promise. Preserve\n      // that ordering, but suppress completion if effect cleanup intervenes.\n      queueMicrotask(() => {\n        if (stopped) return\n        stopped = true\n        options.onComplete()\n      })\n    } else {\n      frameId = requestAnimationFrame(update)\n    }\n  }\n\n  frameId = requestAnimationFrame(update)\n  return {\n    stop() {\n      stopped = true\n      cancelAnimationFrame(frameId)\n    },\n  }\n}\n\nexport function createMotionAdapter(\n  driver: AnimationDriver = motionDriver,\n): MotionAdapter {\n  return {\n    start(request) {\n      if (request.reducedMotion) {\n        request.onUpdate(request.to)\n        request.onComplete()\n        return { stop() {} }\n      }\n\n      const controls = driver(request.from, request.to, {\n        type: 'spring',\n        velocity: request.velocity * 1000,\n        stiffness: 380,\n        damping: 38,\n        onUpdate: request.onUpdate,\n        onComplete: request.onComplete,\n      })\n\n      return { stop: () => controls.stop() }\n    },\n  }\n}\n\nexport const motionAdapter = createMotionAdapter()\n","import {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n  useSyncExternalStore,\n} from 'react'\nimport type { ReactNode } from 'react'\nimport { SheetContext } from '../context/sheet-context.js'\nimport { createSheetController } from '../controller/create-controller.js'\nimport { useReducedMotion } from '../hooks/use-reduced-motion.js'\nimport { useSheetInteractions } from '../hooks/use-sheet-interactions.js'\nimport { useSheetLayout } from '../hooks/use-sheet-layout.js'\nimport { useSheetMotion } from '../hooks/use-sheet-motion.js'\nimport type { ResolvedLayout } from '../layout/types.js'\nimport { motionAdapter } from '../motion/motion-adapter.js'\nimport type {\n  OpenChangeDetails,\n  OpenChangeReason,\n  SnapPoint,\n} from '../public-types.js'\n\nexport interface SheetRootProps {\n  children: ReactNode\n  open?: boolean\n  defaultOpen?: boolean\n  onOpenChange?: (open: boolean, details: OpenChangeDetails) => void\n  snapPoints?: readonly SnapPoint[]\n  activeSnapPoint?: string\n  defaultSnapPoint?: string\n  onSnapPointChange?: (id: string) => void\n  modal?: boolean\n  dismissible?: boolean\n}\n\nconst DEFAULT_SNAP_POINTS: readonly SnapPoint[] = [\n  { id: 'content', value: 'content' },\n]\n\nexport function Root({\n  children,\n  open: controlledOpen,\n  defaultOpen,\n  onOpenChange,\n  snapPoints = DEFAULT_SNAP_POINTS,\n  activeSnapPoint: controlledSnapPoint,\n  defaultSnapPoint,\n  onSnapPointChange,\n  modal = true,\n  dismissible = true,\n}: SheetRootProps) {\n  const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen ?? false)\n  const [titleId, setTitleId] = useState<string>()\n  const [descriptionId, setDescriptionId] = useState<string>()\n  const [viewport, setViewport] = useState<HTMLElement | null>(null)\n  const [content, setContent] = useState<HTMLElement | null>(null)\n  const [layout, setLayout] = useState<ResolvedLayout | null>(null)\n  const [uncontrolledSnapPoint, setUncontrolledSnapPoint] = useState(\n    defaultSnapPoint ?? snapPoints[0]?.id,\n  )\n  const controllerRef = useRef<ReturnType<typeof createSheetController>>(null)\n  if (!controllerRef.current) controllerRef.current = createSheetController()\n  const controller = controllerRef.current\n  const controllerState = useSyncExternalStore(\n    controller.subscribe,\n    controller.getState,\n    controller.getState,\n  )\n  const layoutRef = useRef(layout)\n  const motionPositionRef = useRef(controllerState.position)\n  const backdropRef = useRef<HTMLElement | null>(null)\n  const backdropProgressRef = useRef(0)\n  layoutRef.current = layout\n  if (controllerState.phase === 'closed')\n    motionPositionRef.current = controllerState.position\n  const open = controlledOpen ?? uncontrolledOpen\n  const present = open || controllerState.phase !== 'closed'\n  const transitionPhase =\n    open && controllerState.phase === 'closed' ? 'open' : controllerState.phase\n  const controlled = controlledOpen !== undefined\n  const activeSnapPoint = controlledSnapPoint ?? uncontrolledSnapPoint\n  const reducedMotion = useReducedMotion()\n\n  useEffect(() => {\n    if (\n      process.env.NODE_ENV !== 'production' &&\n      controlledOpen !== undefined &&\n      defaultOpen !== undefined\n    ) {\n      console.warn(\n        'Sheet.Root cannot use both open and defaultOpen; open takes precedence.',\n      )\n    }\n  }, [controlledOpen, defaultOpen])\n\n  const requestOpenChange = useCallback(\n    (nextOpen: boolean, reason: OpenChangeReason) => {\n      if (nextOpen === open) return\n      if (!controlled) setUncontrolledOpen(nextOpen)\n      onOpenChange?.(nextOpen, { reason })\n    },\n    [controlled, onOpenChange, open],\n  )\n\n  const registerTitle = useCallback((id: string) => {\n    setTitleId(id)\n    return () => setTitleId((current) => (current === id ? undefined : current))\n  }, [])\n\n  const registerDescription = useCallback((id: string) => {\n    setDescriptionId(id)\n    return () =>\n      setDescriptionId((current) => (current === id ? undefined : current))\n  }, [])\n\n  const updatePosition = useCallback(\n    (position: number) => {\n      motionPositionRef.current = position\n      content?.style.setProperty('--rsbs-position', `${position}px`)\n    },\n    [content],\n  )\n\n  const getPosition = useCallback(() => motionPositionRef.current, [])\n\n  const updateBackdropProgress = useCallback(\n    (progress: number) => {\n      backdropProgressRef.current = progress\n      backdropRef.current?.style.setProperty(\n        '--rsbs-backdrop-progress',\n        String(progress),\n      )\n      content?.style.setProperty('--rsbs-surface-progress', String(progress))\n    },\n    [content],\n  )\n\n  const getBackdropProgress = useCallback(() => backdropProgressRef.current, [])\n\n  const registerBackdrop = useCallback((element: HTMLElement | null) => {\n    backdropRef.current = element\n    element?.style.setProperty(\n      '--rsbs-backdrop-progress',\n      String(backdropProgressRef.current),\n    )\n  }, [])\n\n  const handleLayout = useCallback(\n    (nextLayout: ResolvedLayout) => {\n      layoutRef.current = nextLayout\n      setLayout(nextLayout)\n      controller.dispatch({ type: 'LAYOUT_CHANGED', layout: nextLayout })\n    },\n    [controller],\n  )\n\n  useSheetLayout({ viewport, content, snapPoints, onLayout: handleLayout })\n\n  useEffect(() => {\n    const current = controller.getState()\n    const currentLayout = layoutRef.current\n    if (open && currentLayout) {\n      const point =\n        currentLayout.snapPoints.find(({ id }) => id === activeSnapPoint) ??\n        currentLayout.snapPoints[0]\n      if (\n        point &&\n        (current.phase === 'closed' ||\n          current.phase === 'closing' ||\n          (current.phase === 'open' && current.activeSnapPoint !== point.id))\n      ) {\n        controller.dispatch({\n          type: 'OPEN_REQUESTED',\n          reason: 'imperative',\n          snapPoint: point.id,\n          targetPosition: point.position,\n        })\n      }\n    } else if (!open && !['closed', 'closing'].includes(current.phase)) {\n      controller.dispatch({ type: 'CLOSE_REQUESTED', reason: 'imperative' })\n    }\n  }, [activeSnapPoint, controller, layout, open])\n\n  useSheetMotion({\n    controller,\n    state: controllerState,\n    closedPosition: layout?.closedPosition ?? controllerState.position,\n    reducedMotion,\n    adapter: motionAdapter,\n    getPosition,\n    onUpdate: updatePosition,\n    getBackdropProgress,\n    onBackdropProgress: updateBackdropProgress,\n  })\n\n  const handleSnapPointChange = useCallback(\n    (id: string) => {\n      if (controlledSnapPoint === undefined) setUncontrolledSnapPoint(id)\n      onSnapPointChange?.(id)\n    },\n    [controlledSnapPoint, onSnapPointChange],\n  )\n\n  const handleDragDismiss = useCallback(() => {\n    requestOpenChange(false, 'drag')\n  }, [requestOpenChange])\n\n  const interactionHandlers = useSheetInteractions({\n    content,\n    controller,\n    state: controllerState,\n    layout,\n    dismissible,\n    onDismiss: handleDragDismiss,\n    onSnapPointChange: handleSnapPointChange,\n    onPositionChange: updatePosition,\n  })\n\n  const value = useMemo(\n    () => ({\n      open,\n      present,\n      transitionPhase,\n      modal,\n      dismissible,\n      titleId,\n      descriptionId,\n      requestOpenChange,\n      registerTitle,\n      registerDescription,\n      registerViewport: setViewport,\n      registerContent: setContent,\n      registerBackdrop,\n      interactionHandlers,\n      position: motionPositionRef.current,\n      surfaceProgress: backdropProgressRef.current,\n      dragging: controllerState.phase === 'dragging',\n    }),\n    [\n      descriptionId,\n      dismissible,\n      modal,\n      open,\n      present,\n      transitionPhase,\n      controllerState.phase,\n      controllerState.position,\n      interactionHandlers,\n      registerDescription,\n      registerBackdrop,\n      registerTitle,\n      requestOpenChange,\n      setContent,\n      setViewport,\n      titleId,\n    ],\n  )\n\n  return <SheetContext.Provider value={value}>{children}</SheetContext.Provider>\n}\n","import { forwardRef, useEffect, useId } from 'react'\nimport type { HTMLAttributes, Ref } from 'react'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\nimport { useSheetContext } from '../context/sheet-context.js'\n\nexport type SheetTitleProps = HTMLAttributes<HTMLHeadingElement> & {\n  asChild?: boolean\n}\n\nexport const Title = forwardRef<HTMLHeadingElement, SheetTitleProps>(\n  function Title(\n    { asChild = false, children, className, id: providedId, ...props },\n    ref,\n  ) {\n    const generatedId = useId()\n    const id = providedId ?? generatedId\n    const { registerTitle } = useSheetContext('Sheet.Title')\n    useEffect(() => registerTitle(id), [id, registerTitle])\n    const shared = {\n      ...props,\n      id,\n      className: ['rsbs-title', className].filter(Boolean).join(' '),\n      'data-rsbs-title': '',\n    }\n    return asChild ? (\n      <Slot {...shared} ref={ref as Ref<HTMLElement>}>\n        {children as SlotProps['children']}\n      </Slot>\n    ) : (\n      <h2 {...shared} ref={ref}>\n        {children}\n      </h2>\n    )\n  },\n)\n","import { forwardRef } from 'react'\nimport type { ButtonHTMLAttributes, MouseEvent, Ref } from 'react'\nimport { useSheetContext } from '../context/sheet-context.js'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\n\nexport interface SheetTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  asChild?: boolean\n}\n\nexport const Trigger = forwardRef<HTMLButtonElement, SheetTriggerProps>(\n  function Trigger(\n    {\n      asChild = false,\n      children,\n      className,\n      onClick,\n      type = 'button',\n      ...props\n    },\n    ref,\n  ) {\n    const { open, requestOpenChange } = useSheetContext('Sheet.Trigger')\n    const sharedProps = {\n      ...props,\n      className: ['rsbs-trigger', className].filter(Boolean).join(' '),\n      'aria-expanded': open,\n      'data-rsbs-trigger': '',\n      onClick: (event: MouseEvent<HTMLElement>) => {\n        onClick?.(event as MouseEvent<HTMLButtonElement>)\n        if (!event.defaultPrevented) requestOpenChange(true, 'trigger')\n      },\n    }\n\n    return asChild ? (\n      <Slot {...sharedProps} ref={ref as Ref<HTMLElement>}>\n        {children as SlotProps['children']}\n      </Slot>\n    ) : (\n      <button {...sharedProps} ref={ref} type={type}>\n        {children}\n      </button>\n    )\n  },\n)\n","import { forwardRef } from 'react'\nimport type { HTMLAttributes, Ref } from 'react'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\nimport { mergeRefs } from '../composition/merge-refs.js'\nimport { useSheetContext } from '../context/sheet-context.js'\n\nexport type SheetViewportProps = HTMLAttributes<HTMLDivElement> & {\n  asChild?: boolean\n}\n\nexport const Viewport = forwardRef<HTMLDivElement, SheetViewportProps>(\n  function Viewport({ asChild = false, children, className, ...props }, ref) {\n    const { registerViewport, transitionPhase } =\n      useSheetContext('Sheet.Viewport')\n    const shared = {\n      ...props,\n      className: ['rsbs-viewport', className].filter(Boolean).join(' '),\n      'data-rsbs-viewport': '',\n      'data-rsbs-state': transitionPhase,\n    }\n    return asChild ? (\n      <Slot\n        {...shared}\n        ref={mergeRefs(registerViewport, ref as Ref<HTMLElement>)}\n      >\n        {children as SlotProps['children']}\n      </Slot>\n    ) : (\n      <div {...shared} ref={mergeRefs(ref, (value) => registerViewport(value))}>\n        {children}\n      </div>\n    )\n  },\n)\n","import { forwardRef } from 'react'\nimport type { HTMLAttributes, Ref } from 'react'\nimport { Slot } from '../composition/Slot.js'\nimport type { SlotProps } from '../composition/Slot.js'\n\nexport type SheetHandleProps = HTMLAttributes<HTMLDivElement> & {\n  asChild?: boolean\n}\n\nexport const Handle = forwardRef<HTMLDivElement, SheetHandleProps>(\n  function Handle({ asChild = false, children, className, ...props }, ref) {\n    const shared = {\n      ...props,\n      className: ['rsbs-handle', className].filter(Boolean).join(' '),\n      'data-rsbs-handle': '',\n    }\n    return asChild ? (\n      <Slot {...shared} ref={ref as Ref<HTMLElement>}>\n        {children as SlotProps['children']}\n      </Slot>\n    ) : (\n      <div {...shared} ref={ref}>\n        {children}\n      </div>\n    )\n  },\n)\n","import { useEffect, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useSheetContext } from '../context/sheet-context.js'\n\nexport interface SheetPortalProps {\n  children: ReactNode\n  container?: Element | DocumentFragment | null\n}\n\nexport function Portal({ children, container }: SheetPortalProps) {\n  const { present } = useSheetContext('Sheet.Portal')\n  const [mounted, setMounted] = useState(false)\n\n  useEffect(() => {\n    setMounted(true)\n    return () => setMounted(false)\n  }, [])\n\n  if (!mounted || !present) return null\n  return createPortal(children, container ?? document.body)\n}\n","import { Backdrop } from './Backdrop.js'\nimport { Close } from './Close.js'\nimport { Content } from './Content.js'\nimport { Description } from './Description.js'\nimport { Root } from './Root.js'\nimport { Title } from './Title.js'\nimport { Trigger } from './Trigger.js'\nimport { Viewport } from './Viewport.js'\n\nexport const Sheet = {\n  Root,\n  Trigger,\n  Portal,\n  Backdrop,\n  Viewport,\n  Content,\n  Handle,\n  Title,\n  Description,\n  Close,\n} as const\nimport { Handle } from './Handle.js'\nimport { Portal } from './Portal.js'\n","import type { ReactNode } from 'react'\nimport { Backdrop } from './Backdrop.js'\nimport type { SheetBackdropProps } from './Backdrop.js'\nimport { Content } from './Content.js'\nimport type { SheetContentProps } from './Content.js'\nimport { Description } from './Description.js'\nimport { Handle } from './Handle.js'\nimport { Portal } from './Portal.js'\nimport { Root } from './Root.js'\nimport type { SheetRootProps } from './Root.js'\nimport { Title } from './Title.js'\nimport { Viewport } from './Viewport.js'\nimport type { SheetViewportProps } from './Viewport.js'\n\nexport interface BottomSheetProps extends Omit<SheetRootProps, 'children'> {\n  children: ReactNode\n  title: ReactNode\n  description?: ReactNode\n  backdropProps?: SheetBackdropProps\n  contentProps?: SheetContentProps\n  viewportProps?: SheetViewportProps\n}\n\nexport function BottomSheet({\n  backdropProps,\n  children,\n  contentProps,\n  description,\n  title,\n  viewportProps,\n  ...rootProps\n}: BottomSheetProps) {\n  return (\n    <Root {...rootProps}>\n      <Portal>\n        <Backdrop {...backdropProps} />\n        <Viewport {...viewportProps}>\n          <Content {...contentProps}>\n            <Handle />\n            <Title>{title}</Title>\n            {description === undefined ? null : (\n              <Description>{description}</Description>\n            )}\n            {children}\n          </Content>\n        </Viewport>\n      </Portal>\n    </Root>\n  )\n}\n"],"x_google_ignoreList":[24,25,26,27,28,29,30,31],"mappings":"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"}