{"version":3,"sources":["../src/drawer-content.tsx"],"sourcesContent":["import type { CSSUIObject, ThemeProps } from \"@yamada-ui/core\"\nimport type { MotionPanInfo } from \"@yamada-ui/motion\"\nimport type { Merge } from \"@yamada-ui/utils\"\nimport type { DrawerProps } from \"./drawer\"\nimport { ui } from \"@yamada-ui/core\"\nimport { motionForwardRef } from \"@yamada-ui/motion\"\nimport { Slide } from \"@yamada-ui/transitions\"\nimport { useValue } from \"@yamada-ui/use-value\"\nimport { cx, findChildren, getValidChildren, isArray } from \"@yamada-ui/utils\"\nimport { useCallback, useMemo } from \"react\"\nimport { DrawerCloseButton } from \"./drawer-close-button\"\nimport { DrawerDragBar } from \"./drawer-drag-bar\"\nimport { useDrawer, useModal } from \"./modal-context\"\n\nexport interface DrawerContentProps\n  extends Merge<\n    Omit<DrawerProps, \"isOpen\" | \"open\" | \"placement\" | keyof ThemeProps>,\n    Required<\n      Pick<\n        DrawerProps,\n        | \"dragConstraints\"\n        | \"dragElastic\"\n        | \"dragOffset\"\n        | \"dragVelocity\"\n        | \"placement\"\n        | \"placement\"\n      >\n    >\n  > {}\n\nexport const DrawerContent = motionForwardRef<DrawerContentProps, \"div\">(\n  (\n    {\n      className,\n      children,\n      closeOnDrag,\n      dragConstraints,\n      dragElastic,\n      dragOffset,\n      dragVelocity,\n      placement: _placement,\n      withCloseButton,\n      withDragBar,\n      blankForDragProps,\n      ...rest\n    },\n    ref,\n  ) => {\n    const { bodyRef, duration, headerRef, open, onClose } = useModal()\n    const styles = useDrawer()\n    const placement = useValue(_placement)\n    const validChildren = getValidChildren(children)\n    const [customDrawerCloseButton, ...cloneChildren] = findChildren(\n      validChildren,\n      DrawerCloseButton,\n    )\n    const blankForDragBg = useMemo(() => {\n      const propBg =\n        rest.backgroundColor ?? rest.bgColor ?? rest.background ?? rest.bg\n      const styleBg =\n        styles.container?.backgroundColor ??\n        styles.container?.bgColor ??\n        styles.container?.background ??\n        styles.container?.bg\n      const computedBg = propBg ?? styleBg\n\n      return isArray(computedBg) ? computedBg : [computedBg]\n    }, [rest, styles])\n    const blankForDrag = useMemo<CSSUIObject>(() => {\n      let position: CSSUIObject = {}\n\n      switch (placement) {\n        case \"top\":\n          position = { left: 0, right: 0, top: \"calc(-100dvh + 1px)\" }\n          break\n\n        case \"bottom\":\n          position = { bottom: \"calc(-100dvh + 1px)\", left: 0, right: 0 }\n          break\n\n        case \"left\":\n          position = { bottom: 0, left: \"calc(-100% + 1px)\", top: 0 }\n          break\n\n        case \"right\":\n          position = { bottom: 0, right: \"calc(-100% + 1px)\", top: 0 }\n          break\n      }\n      const [lightBg, darkBg] = blankForDragBg\n\n      return {\n        _after: {\n          bg: lightBg,\n          content: '\"\"',\n          display: \"block\",\n          h: \"100dvh\",\n          position: \"absolute\",\n          w: \"100%\",\n          ...position,\n          ...blankForDragProps,\n        },\n        _dark: {\n          _after: {\n            bg: darkBg,\n          },\n        },\n      }\n    }, [placement, blankForDragBg, blankForDragProps])\n    const css = useMemo<CSSUIObject>(\n      () => ({\n        display: \"flex\",\n        flexDirection:\n          placement === \"top\" || placement === \"bottom\" ? \"column\" : \"row\",\n        outline: 0,\n        ...(closeOnDrag ? blankForDrag : {}),\n        ...styles.container,\n      }),\n      [blankForDrag, closeOnDrag, placement, styles],\n    )\n\n    const getDragDirectionRestriction = useCallback(\n      (value: number) => {\n        switch (placement) {\n          case \"top\":\n            return { bottom: value }\n          case \"bottom\":\n            return { top: value }\n          case \"left\":\n            return { right: value }\n          case \"right\":\n            return { left: value }\n        }\n      },\n      [placement],\n    )\n\n    const getDragDirection = useCallback(() => {\n      switch (placement) {\n        case \"top\":\n        case \"bottom\":\n          return \"y\"\n        case \"left\":\n        case \"right\":\n          return \"x\"\n      }\n    }, [placement])\n\n    const isCloseByDragInfo = useCallback(\n      (info: MotionPanInfo) => {\n        switch (placement) {\n          case \"top\":\n            return (\n              info.velocity.y <= dragVelocity * -1 ||\n              info.offset.y <= dragOffset * -1\n            )\n          case \"bottom\":\n            return (\n              info.velocity.y >= dragVelocity || info.offset.y >= dragOffset\n            )\n          case \"left\":\n            return (\n              info.velocity.x <= dragVelocity * -1 ||\n              info.offset.x <= dragOffset * -1\n            )\n          case \"right\":\n            return (\n              info.velocity.x >= dragVelocity || info.offset.x >= dragOffset\n            )\n        }\n      },\n      [placement, dragVelocity, dragOffset],\n    )\n\n    return (\n      <Slide\n        ref={ref}\n        className={cx(\"ui-drawer\", className)}\n        aria-describedby={bodyRef.current?.id}\n        aria-labelledby={headerRef.current?.id}\n        aria-modal=\"true\"\n        drag={closeOnDrag ? getDragDirection() : false}\n        dragConstraints={getDragDirectionRestriction(dragConstraints)}\n        dragElastic={getDragDirectionRestriction(dragElastic)}\n        dragMomentum={false}\n        dragSnapToOrigin\n        duration={duration}\n        isOpen={open}\n        placement={placement}\n        role=\"dialog\"\n        tabIndex={-1}\n        onDragEnd={(_, info) => {\n          if (isCloseByDragInfo(info)) onClose?.()\n        }}\n        __css={css}\n        {...rest}\n      >\n        {customDrawerCloseButton ??\n          (withCloseButton && onClose ? <DrawerCloseButton /> : null)}\n\n        {withDragBar &&\n        closeOnDrag &&\n        (placement === \"bottom\" || placement === \"right\") ? (\n          <DrawerDragBar />\n        ) : null}\n\n        <ui.div\n          className=\"ui-drawer__inner\"\n          __css={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            w: \"100%\",\n            ...styles.inner,\n          }}\n        >\n          {cloneChildren}\n        </ui.div>\n\n        {withDragBar &&\n        closeOnDrag &&\n        (placement === \"top\" || placement === \"left\") ? (\n          <DrawerDragBar />\n        ) : null}\n      </Slide>\n    )\n  },\n)\n\nDrawerContent.displayName = \"DrawerContent\"\nDrawerContent.__ui__ = \"DrawerContent\"\n"],"mappings":"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","names":["_a","_b"]}