import { useEffect, useState } from "react"; import { Package, CreditCard, CalendarDays, Paperclip, Building2, Ban } from "lucide-react"; import type { Attachment, Quote, Store } from "../../lib/types"; import { api } from "../../lib/api"; import { formatMaterialTitle, itemTermsheetIds, lineItemTotal, materialById, } from "../../lib/quoteUtils"; import { fmtDate, fmtDateTime, fmtNum } from "../../lib/formatters"; import { groupCommas } from "../../lib/numutil"; import { FlowDiagram, type FlowRefs } from "./FlowDiagram"; import { itemProjects } from "../../lib/quoteUtils"; import { FilePreviewModal, useFilePreview } from "../../components/FilePreviewModal"; export interface QuoteDetailProps { store: Store; q: Quote; } // بخش expanded یک پیشنهاد: اقلام (راست) ↔ ترم‌شیت‌ها (چپ) با خطوط SVG رنگی export function QuoteDetail({ store, q }: QuoteDetailProps) { const [flowEl, setFlowEl] = useState(null); const [flowRefs] = useState(() => ({ items: new Map(), termsheets: new Map() })); const [bump, setBump] = useState(0); // پیش‌نمایش پیوست‌ها: کلیک روی نام فایل، فایل را نشان می‌دهد (نه دانلود). // بایت‌ها با توکن گرفته می‌شوند چون /