import { useState } from "react"; import { useTranslation } from "react-i18n-lite"; import type { BookmarkRailItem } from "@/utils/bookmarkRailLayout"; import { truncateRailPreview } from "@/utils/bookmarkRailLayout"; import { normalizeHighlightColor } from "@/constants/bookmarkHighlightColors"; import { BookmarkIcon } from "./BookmarkIcon"; interface BookmarkReaderRailProps { items: BookmarkRailItem[]; onGoToBookmark: (epubCfi: string) => void; } function RailMarker({ item, onGoToBookmark, }: { item: BookmarkRailItem; onGoToBookmark: (epubCfi: string) => void; }) { const { t } = useTranslation(); const [hovered, setHovered] = useState(false); const color = normalizeHighlightColor(item.marker.highlight_color); const previewText = truncateRailPreview( item.marker.location_text || item.marker.chapter_title || "", ); const notePreview = item.marker.content ? truncateRailPreview(item.marker.content, 80) : ""; const ariaLabel = previewText ? t("reader.bookmarkRailPreview", { text: previewText }) : t("reader.bookmarkRailGoTo"); return (
  • {hovered && previewText && (

    {previewText}

    {notePreview && (

    {notePreview}

    )}
    )}
  • ); } export function BookmarkReaderRail({ items, onGoToBookmark }: BookmarkReaderRailProps) { if (items.length === 0) return null; return ( ); }