{"version":3,"file":"VaulRoot.cjs","sources":["../../src/lib/VaulRoot.tsx"],"sourcesContent":["import type {\n  ExtendComponent,\n  Factory,\n  MantineRadius,\n  MantineShadow,\n  MantineThemeComponent,\n  RemoveScroll,\n  StylesApiProps\n} from '@mantine/core'\nimport { createVarsResolver, getRadius, getSize, useProps, useStyles } from '@mantine/core'\nimport { useFocusReturn, useIsomorphicEffect, useUncontrolled } from '@mantine/hooks'\nimport type { ComponentPropsWithRef } from 'react'\nimport { useMemo, useRef, useState, type ReactNode } from 'react'\nimport { Drawer } from 'vaul'\nimport { VaulContextProvider } from './context'\nimport type { ScrollAreaComponent, VaulClasses } from './types'\nimport classes from './vaul.module.css'\nimport { VaulBody } from './VaulBody'\nimport { VaulCloseTarget } from './VaulCloseTarget'\nimport { VaulContent } from './VaulContent'\nimport { VaulDescription } from './VaulDescription'\nimport { VaulFooter } from './VaulFooter'\nimport { VaulHandler } from './VaulHandler'\nimport { VaulHeader } from './VaulHeader'\nimport { VaulOverlay } from './VaulOverlay'\nimport { VaulPortal } from './VaulPortal'\nimport { VaulTarget } from './VaulTarget'\nimport { VaulTitle } from './VaulTitle'\n\nexport type VaulDirection = 'top' | 'bottom' | 'left' | 'right'\n\nexport type VaulStylesNames =\n  | 'content'\n  | 'overlay'\n  | 'header'\n  | 'title'\n  | 'handler'\n  | 'body'\n  | 'footer'\n  | 'description'\n  | 'target'\n  | 'closeTarget'\n\nexport type VaulCssVariables = {\n  content: '--vaul-radius' | '--vaul-z-index' | '--vaul-handler-radius'\n  overlay: '--vaul-overlay-z-index'\n}\n\nexport interface BaseVaulRootProps {\n  defaultActiveSnapPoint?: number | string | null\n  activeSnapPoint?: number | string | null\n  setActiveSnapPoint?: (snapPoint: number | string | null | undefined) => void\n\n  dismissible?: boolean\n  defaultOpened?: boolean\n  opened?: boolean\n  onOpenChange?: (value: boolean) => void\n  onCloseAnimationEnd?: () => void\n\n  direction?: VaulDirection\n  snapPoints?: (string | number)[]\n  fadeFromIndex?: number\n\n  scrollLockTimeout?: number\n  closeThreshold?: number\n  maxHeight?: number | string\n\n  portalTarget?: HTMLElement | null\n\n  closeOnClickOutside?: boolean\n  closeOnEscape?: boolean\n\n  radius?: MantineRadius\n  handlerRadius?: MantineRadius\n  shadow?: MantineShadow\n\n  zIndex?: number\n  overlayZIndex?: number\n\n  trapFocus?: boolean\n  returnFocus?: boolean\n  lockScroll?: boolean\n\n  scrollAreaComponent?: ScrollAreaComponent\n  removeScrollProps?: Omit<ComponentPropsWithRef<typeof RemoveScroll>, 'children'>\n}\n\nexport interface VaulRootProps extends BaseVaulRootProps, StylesApiProps<VaulRootFactory> {\n  __staticSelector?: string\n  children: ReactNode\n}\n\nexport type VaulRootFactory = Factory<{\n  props: VaulRootProps\n  stylesNames: VaulStylesNames\n  vars: VaulCssVariables\n  staticComponents: {\n    Root: typeof VaulRoot\n    Portal: typeof VaulPortal\n    Overlay: typeof VaulOverlay\n    Content: typeof VaulContent\n    Body: typeof VaulBody\n    Header: typeof VaulHeader\n    Title: typeof VaulTitle\n    Description: typeof VaulDescription\n    Footer: typeof VaulFooter\n    Handler: typeof VaulHandler\n    Target: typeof VaulTarget\n    CloseTarget: typeof VaulTarget\n  }\n}>\n\nconst varsResolver = createVarsResolver<VaulRootFactory>(\n  // eslint-disable-next-line no-empty-pattern\n  (_, { radius, handlerRadius, zIndex, overlayZIndex, shadow, maxHeight }) => ({\n    content: {\n      '--vaul-radius': radius === undefined ? undefined : getRadius(radius),\n      '--vaul-z-index': zIndex === undefined ? undefined : `${zIndex}`,\n      '--vaul-handler-radius': radius === undefined ? undefined : getRadius(handlerRadius),\n      '--vaul-shadow': shadow === undefined ? undefined : getSize(shadow, 'vaul-shadow'),\n      '--vaul-max-height': maxHeight === undefined ? undefined : maxHeight\n    },\n    overlay: {\n      '--vaul-overlay-z-index': overlayZIndex === undefined ? undefined : `${overlayZIndex}`\n    }\n  })\n)\n\nconst defaultProps: Omit<VaulRootProps, 'children'> = {\n  __staticSelector: 'VaulRoot',\n  closeOnEscape: true,\n  closeOnClickOutside: true,\n  trapFocus: true,\n  returnFocus: true,\n  dismissible: true,\n  lockScroll: true\n}\n\nexport const VaulRoot = (_props: VaulRootProps) => {\n  const props = useProps('VaulRoot', defaultProps, _props)\n\n  const {\n    __staticSelector,\n    children,\n\n    defaultActiveSnapPoint: defaultActiveSnapPointProp,\n    activeSnapPoint: activeSnapPointProp,\n    setActiveSnapPoint: setActiveSnapPointProp,\n\n    snapPoints,\n    fadeFromIndex,\n\n    direction = 'bottom',\n    scrollLockTimeout,\n    closeThreshold,\n    dismissible = true,\n    opened: openedProp,\n    defaultOpened: defaultOpenedProp,\n    onOpenChange: onOpenChangeProp,\n    onCloseAnimationEnd,\n\n    portalTarget,\n\n    closeOnClickOutside = true,\n    closeOnEscape = true,\n\n    trapFocus = true,\n    returnFocus = true,\n    lockScroll = true,\n\n    removeScrollProps = {},\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    scrollAreaComponent,\n    variant = 'default'\n  } = props\n\n  const [opened, onOpenChange] = useUncontrolled({\n    value: openedProp,\n    onChange: onOpenChangeProp,\n    defaultValue: defaultOpenedProp,\n    finalValue: false\n  })\n\n  const [activeSnapPoint, setActiveSnapPoint] = useUncontrolled({\n    value: activeSnapPointProp,\n    onChange: setActiveSnapPointProp,\n    defaultValue: defaultActiveSnapPointProp,\n    finalValue: undefined\n  })\n\n  const [isVisible, setIsVisible] = useState<boolean>(opened)\n  const [descriptionId, setDescriptionId] = useState<string>('')\n\n  const showOverlay = useMemo<boolean>(() => {\n    if (!isVisible || !opened) {\n      return false\n    }\n\n    if (\n      !snapPoints ||\n      snapPoints.length === 0 ||\n      activeSnapPoint === undefined ||\n      activeSnapPoint === null ||\n      fadeFromIndex === undefined ||\n      fadeFromIndex === null\n    ) {\n      return true\n    }\n\n    if (fadeFromIndex === -1) {\n      return false\n    }\n\n    const currentSnapPointIndex = snapPoints.indexOf(activeSnapPoint)\n    return currentSnapPointIndex === fadeFromIndex\n  }, [activeSnapPoint, fadeFromIndex, isVisible, opened, snapPoints])\n\n  const overlayRef = useRef<HTMLDivElement>(null)\n\n  const getStyles = useStyles<VaulRootFactory>({\n    name: __staticSelector!,\n    rootSelector: 'content',\n    classes,\n    props,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver\n  })\n\n  useFocusReturn({ opened, shouldReturnFocus: trapFocus && returnFocus })\n\n  useIsomorphicEffect(() => {\n    if (opened) {\n      setIsVisible(true)\n    }\n  }, [opened])\n\n  return (\n    <VaulContextProvider\n      value={{\n        opened,\n        setOpened: onOpenChange,\n        closeOnClickOutside,\n        getStyles,\n        variant,\n        unstyled,\n        trapFocus,\n        closeOnEscape,\n        removeScrollProps,\n        portalTarget,\n        isVisible,\n        showOverlay,\n        overlayRef,\n        scrollAreaComponent,\n        lockScroll,\n        descriptionId,\n        setDescriptionId\n      }}>\n      <Drawer.Root\n        open={opened}\n        onOpenChange={onOpenChange}\n        onAnimationEnd={(open) => {\n          if (!open) {\n            setIsVisible(false)\n            onCloseAnimationEnd?.()\n          }\n        }}\n        snapPoints={snapPoints as []}\n        activeSnapPoint={activeSnapPoint}\n        setActiveSnapPoint={setActiveSnapPoint}\n        fadeFromIndex={fadeFromIndex}\n        direction={direction}\n        scrollLockTimeout={scrollLockTimeout}\n        closeThreshold={closeThreshold}\n        dismissible={dismissible}\n        shouldScaleBackground={false}\n        modal={false}\n        noBodyStyles\n        setBackgroundColorOnScale={false}\n        disablePreventScroll>\n        {children}\n      </Drawer.Root>\n    </VaulContextProvider>\n  )\n}\n\nconst extendVaul = (c: ExtendComponent<VaulRootFactory>): MantineThemeComponent => c\n\nVaulRoot.displayName = 'mantine-vaul/VaulRoot'\nVaulRoot.classes = classes as VaulClasses\nVaulRoot.extend = extendVaul\nVaulRoot.Root = VaulRoot\nVaulRoot.Portal = VaulPortal\nVaulRoot.Content = VaulContent\nVaulRoot.Overlay = VaulOverlay\nVaulRoot.Handler = VaulHandler\nVaulRoot.Header = VaulHeader\nVaulRoot.Title = VaulTitle\nVaulRoot.Description = VaulDescription\nVaulRoot.Body = VaulBody\nVaulRoot.Footer = VaulFooter\nVaulRoot.Target = VaulTarget\nVaulRoot.CloseTarget = VaulCloseTarget\n"],"names":["varsResolver","createVarsResolver","_","radius","handlerRadius","zIndex","overlayZIndex","shadow","maxHeight","getRadius","getSize","defaultProps","VaulRoot","_props","props","useProps","__staticSelector","children","defaultActiveSnapPointProp","activeSnapPointProp","setActiveSnapPointProp","snapPoints","fadeFromIndex","direction","scrollLockTimeout","closeThreshold","dismissible","openedProp","defaultOpenedProp","onOpenChangeProp","onCloseAnimationEnd","portalTarget","closeOnClickOutside","closeOnEscape","trapFocus","returnFocus","lockScroll","removeScrollProps","classNames","styles","unstyled","vars","scrollAreaComponent","variant","opened","onOpenChange","useUncontrolled","activeSnapPoint","setActiveSnapPoint","isVisible","setIsVisible","useState","descriptionId","setDescriptionId","showOverlay","useMemo","overlayRef","useRef","getStyles","useStyles","classes","useFocusReturn","useIsomorphicEffect","jsx","VaulContextProvider","Drawer","open","extendVaul","c","VaulPortal","VaulContent","VaulOverlay","VaulHandler","VaulHeader","VaulTitle","VaulDescription","VaulBody","VaulFooter","VaulTarget","VaulCloseTarget"],"mappings":"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"}