{"version":3,"file":"ScrollArea.cjs","sources":["../../../src/components/ScrollArea/ScrollArea.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  rem,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { ScrollAreaCorner } from './ScrollAreaCorner/ScrollAreaCorner';\nimport { ScrollAreaRoot } from './ScrollAreaRoot/ScrollAreaRoot';\nimport { ScrollAreaScrollbar } from './ScrollAreaScrollbar/ScrollAreaScrollbar';\nimport { ScrollAreaThumb } from './ScrollAreaThumb/ScrollAreaThumb';\nimport { ScrollAreaViewport } from './ScrollAreaViewport/ScrollAreaViewport';\nimport {\n  ScrollAreaCornerStyle,\n  ScrollAreaRootStyle,\n  ScrollAreaScrollBarStyle,\n  ScrollAreaThumbStyle,\n  ScrollAreaViewportInnerStyle,\n  ScrollAreaViewportStyle,\n} from './ScrollArea.css';\n\nexport type ScrollAreaStylesNames = 'root' | 'viewport' | 'scrollbar' | 'thumb' | 'corner';\nexport type ScrollAreaCssVariables = {\n  root: '--scrollarea-scrollbar-size';\n};\n\nexport interface ScrollAreaProps\n  extends BoxProps,\n    StylesApiProps<ScrollAreaFactory>,\n    ElementProps<'div'> {\n  /** Scrollbar size, any valid CSS value for width/height, numbers are converted to rem, default value is 0.75rem */\n  scrollbarSize?: number | string;\n\n  /**\n   * Defines scrollbars behavior, `hover` by default\n   * - `hover` – scrollbars are visible when mouse is over the scroll area\n   * - `scroll` – scrollbars are visible when the scroll area is scrolled\n   * - `always` – scrollbars are always visible\n   * - `never` – scrollbars are always hidden\n   * - `auto` – similar to `overflow: auto` – scrollbars are always visible when the content is overflowing\n   * */\n  type?: 'auto' | 'always' | 'scroll' | 'hover' | 'never';\n\n  /** Scroll hide delay in ms, applicable only when type is set to `hover` or `scroll`, `1000` by default */\n  scrollHideDelay?: number;\n\n  /** Axis at which scrollbars must be rendered, `'xy'` by default */\n  scrollbars?: 'x' | 'y' | 'xy' | false;\n\n  /** Determines whether scrollbars should be offset with padding on given axis, `false` by default */\n  offsetScrollbars?: boolean | 'x' | 'y';\n\n  /** Assigns viewport element (scrollable container) ref */\n  viewportRef?: React.ForwardedRef<HTMLDivElement>;\n\n  /** Props passed down to the viewport element */\n  viewportProps?: React.ComponentPropsWithRef<'div'>;\n\n  /** Called with current position (`x` and `y` coordinates) when viewport is scrolled */\n  onScrollPositionChange?: (position: { x: number; y: number }) => void;\n\n  /** Called when scrollarea is scrolled all the way to the bottom */\n  onBottomReached?: () => void;\n\n  /** Called when scrollarea is scrolled all the way to the top */\n  onTopReached?: () => void;\n}\n\nexport interface ScrollAreaAutosizeProps extends ScrollAreaProps {}\n\nexport type ScrollAreaFactory = Factory<{\n  props: ScrollAreaProps;\n  ref: HTMLDivElement;\n  stylesNames: ScrollAreaStylesNames;\n  vars: ScrollAreaCssVariables;\n  staticComponents: {\n    Autosize: typeof ScrollAreaAutosize;\n  };\n}>;\n\nconst defaultProps: Partial<ScrollAreaProps> = {\n  scrollHideDelay: 1000,\n  type: 'hover',\n  scrollbars: 'xy',\n};\n\nconst varsResolver = createVarsResolver<ScrollAreaFactory>((_, { scrollbarSize }) => ({\n  root: {\n    '--scrollarea-scrollbar-size': rem(scrollbarSize),\n  },\n}));\n\nexport const ScrollArea = factory<ScrollAreaFactory>((_props, ref) => {\n  const props = useProps('ScrollArea', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    scrollbarSize,\n    vars,\n    type,\n    scrollHideDelay,\n    viewportProps,\n    viewportRef,\n    onScrollPositionChange,\n    children,\n    offsetScrollbars,\n    scrollbars,\n    onBottomReached,\n    onTopReached,\n    ...others\n  } = props;\n\n  const [scrollbarHovered, setScrollbarHovered] = useState(false);\n\n  const getStyles = useStyles<ScrollAreaFactory>({\n    name: 'ScrollArea',\n    props,\n    classes: {\n      root: ScrollAreaRootStyle,\n      viewport: ScrollAreaViewportStyle,\n      viewportInner: ScrollAreaViewportInnerStyle,\n      scrollbar: ScrollAreaScrollBarStyle,\n      thumb: ScrollAreaThumbStyle,\n      corner: ScrollAreaCornerStyle,\n    },\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  return (\n    <ScrollAreaRoot\n      type={type === 'never' ? 'always' : type}\n      scrollHideDelay={scrollHideDelay}\n      ref={ref}\n      scrollbars={scrollbars}\n      {...getStyles('root')}\n      {...others}\n    >\n      <ScrollAreaViewport\n        {...viewportProps}\n        {...getStyles('viewport', { style: viewportProps?.style })}\n        ref={viewportRef}\n        data-offset-scrollbars={offsetScrollbars === true ? 'xy' : offsetScrollbars || undefined}\n        data-scrollbars={scrollbars || undefined}\n        onScroll={(e) => {\n          viewportProps?.onScroll?.(e);\n          onScrollPositionChange?.({ x: e.currentTarget.scrollLeft, y: e.currentTarget.scrollTop });\n          const { scrollTop, scrollHeight, clientHeight } = e.currentTarget;\n          if (scrollTop - (scrollHeight - clientHeight) >= 0) {\n            onBottomReached?.();\n          }\n          if (scrollTop === 0) {\n            onTopReached?.();\n          }\n        }}\n      >\n        {children}\n      </ScrollAreaViewport>\n\n      {(scrollbars === 'xy' || scrollbars === 'x') && (\n        <ScrollAreaScrollbar\n          {...getStyles('scrollbar')}\n          orientation=\"horizontal\"\n          data-hidden={type === 'never' || undefined}\n          forceMount\n          onMouseEnter={() => setScrollbarHovered(true)}\n          onMouseLeave={() => setScrollbarHovered(false)}\n        >\n          <ScrollAreaThumb {...getStyles('thumb')} />\n        </ScrollAreaScrollbar>\n      )}\n\n      {(scrollbars === 'xy' || scrollbars === 'y') && (\n        <ScrollAreaScrollbar\n          {...getStyles('scrollbar')}\n          orientation=\"vertical\"\n          data-hidden={type === 'never' || undefined}\n          forceMount\n          onMouseEnter={() => setScrollbarHovered(true)}\n          onMouseLeave={() => setScrollbarHovered(false)}\n        >\n          <ScrollAreaThumb {...getStyles('thumb')} />\n        </ScrollAreaScrollbar>\n      )}\n\n      <ScrollAreaCorner\n        {...getStyles('corner')}\n        data-hovered={scrollbarHovered || undefined}\n        data-hidden={type === 'never' || undefined}\n      />\n    </ScrollAreaRoot>\n  );\n});\n\nScrollArea.displayName = '@raikou/core/ScrollArea';\n\nexport const ScrollAreaAutosize = factory<ScrollAreaFactory>((props, ref) => {\n  const {\n    children,\n    classNames,\n    styles,\n    scrollbarSize,\n    scrollHideDelay,\n    type,\n    dir,\n    offsetScrollbars,\n    viewportRef,\n    onScrollPositionChange,\n    unstyled,\n    variant,\n    viewportProps,\n    scrollbars,\n    style,\n    vars,\n    onBottomReached,\n    onTopReached,\n    ...others\n  } = useProps('ScrollAreaAutosize', defaultProps, props);\n\n  return (\n    <Box {...others} ref={ref} style={[{ display: 'flex', overflow: 'auto' }, style]}>\n      <Box style={{ display: 'flex', flexDirection: 'column', flex: 1 }}>\n        <ScrollArea\n          classNames={classNames}\n          styles={styles}\n          scrollHideDelay={scrollHideDelay}\n          scrollbarSize={scrollbarSize}\n          type={type}\n          dir={dir}\n          offsetScrollbars={offsetScrollbars}\n          viewportRef={viewportRef}\n          onScrollPositionChange={onScrollPositionChange}\n          unstyled={unstyled}\n          variant={variant}\n          viewportProps={viewportProps}\n          vars={vars}\n          scrollbars={scrollbars}\n          onBottomReached={onBottomReached}\n          onTopReached={onTopReached}\n        >\n          {children}\n        </ScrollArea>\n      </Box>\n    </Box>\n  );\n});\n\nScrollAreaAutosize.displayName = '@raikou/core/ScrollAreaAutosize';\nScrollArea.Autosize = ScrollAreaAutosize;\n"],"names":["createVarsResolver","rem","factory","useProps","useState","useStyles","ScrollAreaRootStyle","ScrollAreaViewportStyle","ScrollAreaViewportInnerStyle","ScrollAreaScrollBarStyle","ScrollAreaThumbStyle","ScrollAreaCornerStyle","jsxs","ScrollAreaRoot","jsx","ScrollAreaViewport","ScrollAreaScrollbar","ScrollAreaThumb","ScrollAreaCorner","Box"],"mappings":"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"}