// The design canvas — shows a bilingual government notice being edited. // This is the CENTERPIECE: a realistic-feeling tender notice cover. function DesignCanvas({ zoom, selectedId, onSelect, showGrid, showGuides, showBleed }) { const canvasW = 595 * 1.05; // A4 portrait scaled const canvasH = 842 * 1.05; return (
{/* Rulers */} {/* Canvas viewport — centered, scrollable */}
{/* Bleed */} {showBleed && (
)} {/* Artboard */}
{/* Artboard label */}
TENDER-COVER-01 · A4 · 210 × 297 mm · 300 dpi
{/* Corner ruler intersection */}
); } function Ruler({ orientation }) { const isH = orientation === 'h'; return (
{Array.from({ length: 60 }, (_, i) => { const pos = i * 40; const isMajor = i % 2 === 0; return ( {isMajor && ( {i * 40} )} ); })}
); } // The actual designed content — a bilingual tender notice cover. function TenderNoticeArt({ selectedId, onSelect, showGuides }) { const sel = (id) => ({ outline: selectedId === id ? '1.5px solid var(--gold)' : 'none', outlineOffset: 2, cursor: 'pointer', }); return (
onSelect(null)} > {/* Guides */} {showGuides && ( <>
)} {/* Top emblem row */}
{ e.stopPropagation(); onSelect('emblem'); }} style={{ display: 'flex', alignItems: 'center', gap: 14, marginBottom: 18, ...sel('emblem') }} > {/* Emblem placeholder — ashoka-ish concentric mark */} {Array.from({ length: 24 }).map((_, i) => { const a = (i * Math.PI * 2) / 24; const x1 = 26 + Math.cos(a) * 8; const y1 = 26 + Math.sin(a) * 8; const x2 = 26 + Math.cos(a) * 18; const y2 = 26 + Math.sin(a) * 18; return ; })}
Government of India
भारत सरकार
MINISTRY OF RURAL DEVELOPMENT · KRISHI BHAVAN · NEW DELHI 110001
{/* Rule */}
{/* Notice header */}
{ e.stopPropagation(); onSelect('notice-head'); }} style={{ ...sel('notice-head') }} >
NOTICE · सूचना
Invitation of E-Tenders
ई-निविदा आमंत्रण सूचना
Reference No.
MoRD/DES/2026/TND-0284
Date of Issue
14 July 2026
{/* Body copy — the tender abstract */}
{ e.stopPropagation(); onSelect('body'); }} style={{ marginTop: 18, ...sel('body') }} >

The Ministry of Rural Development, Government of India, invites sealed e-tenders through the Central Public Procurement Portal from eligible bidders for the supply, installation, and five-year maintenance of GIS-enabled village mapping equipment across 218 blocks under the Pradhan Mantri Awaas Yojana — Gramin. Bidders must be registered under GST and possess prior experience of a comparable scale in Government of India projects.

ग्रामीण विकास मंत्रालय, भारत सरकार, प्रधानमंत्री आवास योजना — ग्रामीण के अंतर्गत 218 विकास खंडों में जीआईएस-सक्षम गाँव मानचित्रण उपकरणों की आपूर्ति, संस्थापन एवं पाँच वर्षीय अनुरक्षण हेतु केंद्रीय सार्वजनिक क्रय पोर्टल के माध्यम से पात्र निविदाकारों से मुहरबंद ई-निविदाएँ आमंत्रित करता है।

{/* Schedule table */}
{ e.stopPropagation(); onSelect('schedule'); }} style={{ marginTop: 22, border: '1px solid #0A1F3D', ...sel('schedule') }} >
Critical Dates · महत्वपूर्ण तिथियाँ
{[ ['Publication of Tender', 'निविदा प्रकाशन', '14 Jul 2026'], ['Pre-Bid Meeting', 'पूर्व-निविदा बैठक', '22 Jul 2026 · 11:00 IST'], ['Last Date · Submission', 'प्रस्तुति अंतिम तिथि', '08 Aug 2026 · 15:00 IST'], ['Opening of Technical Bid', 'तकनीकी निविदा उद्घाटन', '10 Aug 2026 · 11:00 IST'], ].map((r, i, arr) => (
{r[0]}
{r[1]}
{r[2]}
))}
{/* EMD */}
{ e.stopPropagation(); onSelect('emd'); }} style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12, marginTop: 14, ...sel('emd'), }} >
Estimated Value
₹ 42,80,00,000
Forty-Two Crore Eighty Lakh
Earnest Money Deposit
₹ 21,40,000
Refundable · Bank Guarantee
{/* Footer */}
Issuing Authority
Sd/- Rakesh Sharma, IAS
Joint Secretary · Procurement
{/* QR placeholder */}
cppp.gov.in/mord-284
{/* Page number */}
01 · 04
); } // Faux QR function QRMark({ size = 44 }) { const cells = 11; const s = size / cells; // deterministic pattern const pattern = Array.from({ length: cells * cells }, (_, i) => { // finder squares const r = Math.floor(i / cells), c = i % cells; const inFinder = (r < 3 && c < 3) || (r < 3 && c > cells - 4) || (r > cells - 4 && c < 3); if (inFinder) return (r === 0 || r === 2 || c === 0 || c === 2 || (r === 1 && c === 1)) ? 1 : 0; return (Math.sin(i * 3.7) * 10000) % 1 > 0.4 ? 1 : 0; }); return ( {pattern.map((v, i) => v ? ( ) : null)} ); } Object.assign(window, { DesignCanvas });