{"version":3,"file":"ScrollAreaRoot.cjs","sources":["../../../../src/components/ScrollArea/ScrollAreaRoot/ScrollAreaRoot.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react';\nimport { useMergedRef } from '@raikou/hooks';\nimport { Box, BoxProps, ElementProps, Factory, useProps } from '../../../core';\nimport { ScrollAreaProvider } from '../ScrollArea.context';\n\nexport type ScrollAreaRootStylesNames =\n  | 'root'\n  | 'viewport'\n  | 'viewportInner'\n  | 'scrollbar'\n  | 'thumb'\n  | 'corner';\n\nexport type ScrollAreaRootCssVariables = {\n  root: '--sa-corner-width' | '--sa-corner-height';\n};\n\nexport interface ScrollAreaRootStylesCtx {\n  cornerWidth: number;\n  cornerHeight: number;\n}\n\nexport interface ScrollAreaRootProps extends BoxProps, ElementProps<'div'> {\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  /** Axis at which scrollbars must be rendered, `'xy'` by default */\n  scrollbars?: 'x' | 'y' | 'xy' | false;\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\nexport type ScrollAreaRootFactory = Factory<{\n  props: ScrollAreaRootProps;\n  ref: HTMLDivElement;\n  stylesNames: ScrollAreaRootStylesNames;\n}>;\n\nconst defaultProps: Partial<ScrollAreaRootProps> = {\n  scrollHideDelay: 1000,\n  type: 'hover',\n};\n\nexport const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>((_props, ref) => {\n  const props = useProps('ScrollAreaRoot', defaultProps, _props);\n  const { type, scrollHideDelay, scrollbars, ...others } = props;\n\n  const [scrollArea, setScrollArea] = useState<HTMLDivElement | null>(null);\n  const [viewport, setViewport] = useState<HTMLDivElement | null>(null);\n  const [content, setContent] = useState<HTMLDivElement | null>(null);\n  const [scrollbarX, setScrollbarX] = useState<HTMLDivElement | null>(null);\n  const [scrollbarY, setScrollbarY] = useState<HTMLDivElement | null>(null);\n  const [cornerWidth, setCornerWidth] = useState(0);\n  const [cornerHeight, setCornerHeight] = useState(0);\n  const [scrollbarXEnabled, setScrollbarXEnabled] = useState(false);\n  const [scrollbarYEnabled, setScrollbarYEnabled] = useState(false);\n  const rootRef = useMergedRef(ref, (node) => setScrollArea(node));\n\n  return (\n    <ScrollAreaProvider\n      value={{\n        type: type!,\n        scrollHideDelay: scrollHideDelay!,\n        scrollArea,\n        viewport,\n        onViewportChange: setViewport,\n        content,\n        onContentChange: setContent,\n        scrollbarX,\n        onScrollbarXChange: setScrollbarX,\n        scrollbarXEnabled,\n        onScrollbarXEnabledChange: setScrollbarXEnabled,\n        scrollbarY,\n        onScrollbarYChange: setScrollbarY,\n        scrollbarYEnabled,\n        onScrollbarYEnabledChange: setScrollbarYEnabled,\n        onCornerWidthChange: setCornerWidth,\n        onCornerHeightChange: setCornerHeight,\n      }}\n    >\n      <Box\n        {...others}\n        ref={rootRef}\n        __vars={{\n          '--sa-corner-width': scrollbars !== 'xy' ? '0px' : `${cornerWidth}px`,\n          '--sa-corner-height': scrollbars !== 'xy' ? '0px' : `${cornerHeight}px`,\n        }}\n      />\n    </ScrollAreaProvider>\n  );\n});\n\nScrollAreaRoot.displayName = '@raikou/core/ScrollAreaRoot';\n"],"names":["forwardRef","useProps","useState","useMergedRef","jsx","ScrollAreaProvider","Box"],"mappings":";;;;;;;;;;;;AA8CA,MAAM,YAA6C,GAAA;AAAA,EACjD,eAAiB,EAAA,GAAA;AAAA,EACjB,IAAM,EAAA;AACR,CAAA;AAEO,MAAM,cAAiB,GAAAA,gBAAA,CAAgD,CAAC,MAAA,EAAQ,GAAQ,KAAA;AAC7F,EAAA,MAAM,KAAQ,GAAAC,iBAAA,CAAS,gBAAkB,EAAA,YAAA,EAAc,MAAM,CAAA;AAC7D,EAAA,MAAM,EAAE,IAAM,EAAA,eAAA,EAAiB,UAAY,EAAA,GAAG,QAAW,GAAA,KAAA;AAEzD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIC,eAAgC,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAgC,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAgC,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAgC,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAgC,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,CAAC,CAAA;AAChD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,CAAC,CAAA;AAClD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChE,EAAA,MAAM,UAAUC,kBAAa,CAAA,GAAA,EAAK,CAAC,IAAS,KAAA,aAAA,CAAc,IAAI,CAAC,CAAA;AAE/D,EACE,uBAAAC,cAAA;AAAA,IAACC,qCAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,IAAA;AAAA,QACA,eAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,gBAAkB,EAAA,WAAA;AAAA,QAClB,OAAA;AAAA,QACA,eAAiB,EAAA,UAAA;AAAA,QACjB,UAAA;AAAA,QACA,kBAAoB,EAAA,aAAA;AAAA,QACpB,iBAAA;AAAA,QACA,yBAA2B,EAAA,oBAAA;AAAA,QAC3B,UAAA;AAAA,QACA,kBAAoB,EAAA,aAAA;AAAA,QACpB,iBAAA;AAAA,QACA,yBAA2B,EAAA,oBAAA;AAAA,QAC3B,mBAAqB,EAAA,cAAA;AAAA,QACrB,oBAAsB,EAAA;AAAA,OACxB;AAAA,MAEA,QAAA,kBAAAD,cAAA;AAAA,QAACE,OAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,GAAK,EAAA,OAAA;AAAA,UACL,MAAQ,EAAA;AAAA,YACN,mBAAqB,EAAA,UAAA,KAAe,IAAO,GAAA,KAAA,GAAQ,GAAG,WAAW,CAAA,EAAA,CAAA;AAAA,YACjE,oBAAsB,EAAA,UAAA,KAAe,IAAO,GAAA,KAAA,GAAQ,GAAG,YAAY,CAAA,EAAA;AAAA;AACrE;AAAA;AACF;AAAA,GACF;AAEJ,CAAC;AAED,cAAA,CAAe,WAAc,GAAA,6BAAA;;;;"}