2026-01-13 18:47:57 +00:00
|
|
|
import * as React from 'react';
|
|
|
|
|
import { cn } from '@/lib/utils';
|
2025-12-22 21:56:37 +00:00
|
|
|
|
2026-01-07 09:31:02 +00:00
|
|
|
/**
|
|
|
|
|
* ScrollArea - Composant de zone de défilement avec design system Kodo
|
2026-01-13 18:47:57 +00:00
|
|
|
*
|
2026-01-07 09:31:02 +00:00
|
|
|
* Composant pour créer une zone de défilement avec une barre de défilement personnalisée.
|
|
|
|
|
* Utilise le design system Kodo avec la classe `custom-scrollbar` pour le style.
|
2026-01-13 18:47:57 +00:00
|
|
|
*
|
2026-01-07 09:31:02 +00:00
|
|
|
* @example
|
|
|
|
|
* ```tsx
|
|
|
|
|
* // Zone de défilement simple
|
|
|
|
|
* <ScrollArea className="h-64">
|
|
|
|
|
* <div>Contenu long qui nécessite un scroll</div>
|
|
|
|
|
* </ScrollArea>
|
|
|
|
|
* ```
|
2026-01-13 18:47:57 +00:00
|
|
|
*
|
2026-01-07 09:31:02 +00:00
|
|
|
* @component
|
|
|
|
|
* @param {React.HTMLAttributes<HTMLDivElement>} props - Propriétés HTML standard de div
|
|
|
|
|
* @returns {JSX.Element} Élément div avec overflow-auto et custom-scrollbar
|
|
|
|
|
*/
|
2025-12-22 21:56:37 +00:00
|
|
|
const ScrollArea = React.forwardRef<
|
2026-01-13 18:47:57 +00:00
|
|
|
HTMLDivElement,
|
|
|
|
|
React.HTMLAttributes<HTMLDivElement>
|
2025-12-22 21:56:37 +00:00
|
|
|
>(({ className, children, ...props }, ref) => (
|
2026-01-13 18:47:57 +00:00
|
|
|
<div
|
|
|
|
|
ref={ref}
|
|
|
|
|
className={cn('relative overflow-auto custom-scrollbar', className)}
|
|
|
|
|
{...props}
|
|
|
|
|
>
|
|
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
));
|
|
|
|
|
ScrollArea.displayName = 'ScrollArea';
|
2025-12-22 21:56:37 +00:00
|
|
|
|
2026-01-07 09:31:02 +00:00
|
|
|
/**
|
|
|
|
|
* ScrollBar - Barre de défilement personnalisée
|
2026-01-13 18:47:57 +00:00
|
|
|
*
|
2026-01-07 09:31:02 +00:00
|
|
|
* Composant pour une barre de défilement personnalisée (utilisé avec ScrollArea).
|
2026-01-13 18:47:57 +00:00
|
|
|
*
|
2026-01-07 09:31:02 +00:00
|
|
|
* @component
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
const ScrollBar = React.forwardRef<
|
2026-01-13 18:47:57 +00:00
|
|
|
HTMLDivElement,
|
|
|
|
|
React.HTMLAttributes<HTMLDivElement>
|
2026-01-07 09:31:02 +00:00
|
|
|
>(({ className, ...props }, ref) => (
|
2026-01-13 18:47:57 +00:00
|
|
|
<div
|
|
|
|
|
ref={ref}
|
|
|
|
|
className={cn('flex touch-none select-none transition-colors', className)}
|
|
|
|
|
{...props}
|
|
|
|
|
/>
|
|
|
|
|
));
|
|
|
|
|
ScrollBar.displayName = 'ScrollBar';
|
2026-01-07 09:31:02 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
export { ScrollArea, ScrollBar };
|