@mijn-ui/react-scroll-area
Version:
A custom scrollable container for overflowing content.
81 lines (79 loc) • 2.29 kB
JavaScript
"use client";
// src/scroll-area.tsx
import { createTVUnstyledSlots } from "@mijn-ui/react-core";
import { useTVUnstyled } from "@mijn-ui/react-hooks";
import {
cn,
scrollAreaStyles
} from "@mijn-ui/react-theme";
import { createContext } from "@mijn-ui/react-utilities";
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
import { jsx, jsxs } from "react/jsx-runtime";
var [ScrollAreaProvider, useScrollAreaContext] = createContext({
name: "ScrollAreaContext",
strict: true,
errorMessage: "useScrollAreaContext: `context` is undefined. Seems you forgot to wrap component within <ScrollArea />"
});
var useScrollAreaStyles = (unstyledOverride) => {
const context = useScrollAreaContext();
const unstyledSlots = useTVUnstyled(context, unstyledOverride);
return { ...unstyledSlots, classNames: context.classNames };
};
var ScrollArea = ({
unstyled,
classNames,
className,
children,
...props
}) => {
const styles = scrollAreaStyles();
const { base, viewport } = createTVUnstyledSlots(styles, unstyled);
return /* @__PURE__ */ jsx(ScrollAreaProvider, { value: { unstyled, styles }, children: /* @__PURE__ */ jsxs(
ScrollAreaPrimitive.Root,
{
className: base({ className: cn(classNames?.base, className) }),
...props,
children: [
/* @__PURE__ */ jsx(
ScrollAreaPrimitive.Viewport,
{
className: viewport({ className: classNames?.viewport }),
children
}
),
/* @__PURE__ */ jsx(ScrollBar, {}),
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
]
}
) });
};
var ScrollBar = ({
unstyled,
className,
orientation = "vertical",
...props
}) => {
const { scrollbar, scrollThumb, classNames } = useScrollAreaStyles(unstyled);
return /* @__PURE__ */ jsx(
ScrollAreaPrimitive.ScrollAreaScrollbar,
{
orientation,
className: scrollbar({
orientation,
className: cn(classNames?.scrollbar, className)
}),
...props,
children: /* @__PURE__ */ jsx(
ScrollAreaPrimitive.ScrollAreaThumb,
{
className: scrollThumb({ className: classNames?.scrollThumb })
}
)
}
);
};
export {
ScrollArea,
ScrollBar,
useScrollAreaStyles
};