diff --git a/src/components/cardStack/layouts/timelines/TimelineHorizontalCardStack.tsx b/src/components/cardStack/layouts/timelines/TimelineHorizontalCardStack.tsx index 9088c41..2d1e3e2 100644 --- a/src/components/cardStack/layouts/timelines/TimelineHorizontalCardStack.tsx +++ b/src/components/cardStack/layouts/timelines/TimelineHorizontalCardStack.tsx @@ -1,175 +1,29 @@ -"use client"; +'use client'; -import React, { Children, useCallback } from "react"; -import { cls } from "@/lib/utils"; -import CardStackTextBox from "../../CardStackTextBox"; -import { useTimelineHorizontal, type MediaItem } from "../../hooks/useTimelineHorizontal"; -import MediaContent from "@/components/shared/MediaContent"; -import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, ButtonAnimationType, TitleSegment, TextboxLayout, InvertedBackground } from "../../types"; +import React from 'react'; +import { + ButtonConfig, + ButtonAnimationType, + TitleSegment, + TextboxLayout, + InvertedBackground, +} from '@/components/cardStack/types'; interface TimelineHorizontalCardStackProps { - children: React.ReactNode; - title: string; - titleSegments?: TitleSegment[]; - description: string; - tag?: string; - tagIcon?: LucideIcon; - tagAnimation?: ButtonAnimationType; - buttons?: ButtonConfig[]; - buttonAnimation?: ButtonAnimationType; - textboxLayout: TextboxLayout; - useInvertedBackground?: InvertedBackground; - mediaItems?: MediaItem[]; + items: any[]; className?: string; - containerClassName?: string; - textBoxClassName?: string; - titleClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - descriptionClassName?: string; - tagClassName?: string; - buttonContainerClassName?: string; - buttonClassName?: string; - buttonTextClassName?: string; - cardClassName?: string; - progressBarClassName?: string; - mediaContainerClassName?: string; - mediaClassName?: string; - ariaLabel?: string; } -const TimelineHorizontalCardStack = ({ - children, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - mediaItems, - className = "", - containerClassName = "", - textBoxClassName = "", - titleClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - descriptionClassName = "", - tagClassName = "", - buttonContainerClassName = "", - buttonClassName = "", - buttonTextClassName = "", - cardClassName = "", - progressBarClassName = "", - mediaContainerClassName = "", - mediaClassName = "", - ariaLabel = "Timeline section", -}: TimelineHorizontalCardStackProps) => { - const childrenArray = Children.toArray(children); - const itemCount = childrenArray.length; - - const { activeIndex, progressRefs, handleItemClick, imageOpacity, currentMediaSrc } = useTimelineHorizontal({ - itemCount, - mediaItems, - }); - - const getGridColumns = useCallback(() => { - if (itemCount === 2) return "md:grid-cols-2"; - if (itemCount === 3) return "md:grid-cols-3"; - return "md:grid-cols-4"; - }, [itemCount]); - - const getItemOpacity = useCallback( - (index: number) => { - return index <= activeIndex ? "opacity-100" : "opacity-50"; - }, - [activeIndex] - ); - +const TimelineHorizontalCardStack: React.FC = ({ items, className = '' }) => { return ( -
-
- - {mediaItems && mediaItems.length > 0 && ( -
-
- -
-
- )} -
- {Children.map(childrenArray, (child, index) => ( -
handleItemClick(index)} - > - {child} -
-
-
{ - if (el !== null) { - progressRefs.current[index] = el; - } - }} - className={cls("absolute z-10 h-full w-full bg-foreground origin-left", progressBarClassName)} - style={{ transform: "scaleX(0)" }} - /> -
-
- ))} +
+ {items.map((item, index) => ( +
+ {item.title}
-
-
+ ))} + ); }; -TimelineHorizontalCardStack.displayName = "TimelineHorizontalCardStack"; - -export default React.memo(TimelineHorizontalCardStack); +export default TimelineHorizontalCardStack;