/* Construction module — 6-step stepper */
(function () {
const { useState } = React;
const Icon = window.Icon, PageHead = window.PageHead;
const D = window.YEIDA;
function Construction({ go, toast }) {
const steps = D.constructionSteps;
const [active, setActive] = useState(3); // Authority Review
const [docs, setDocs] = useState(D.requiredDocs);
const upload = (i) => { setDocs(d => d.map((x, j) => j === i ? { ...x, status: 'uploaded' } : x)); toast && toast('Document uploaded for scrutiny'); };
return (
go('documents')}> Building Docs
{/* Stepper rail */}
{steps.map((s, i) => {
const state = s.done ? 'done' : i === active ? 'active' : 'todo';
const cc = state === 'done' ? 'var(--emerald-500)' : state === 'active' ? 'var(--blue-500)' : 'var(--line)';
return (
{i < steps.length - 1 &&
}
setActive(i)} style={{ position: 'relative', zIndex: 1, background: 'none', border: 'none', cursor: 'pointer', width: '100%', textAlign: 'center', padding: 0 }}>
{s.done ? : {i + 1} }
{s.title}
{s.desc}
);
})}
{/* Step content */}
{active === 0 &&
}
{active === 1 &&
}
{active === 2 &&
}
{active === 3 &&
}
{active === 4 &&
}
{active === 5 &&
}
{/* nav */}
setActive(a => Math.max(0, a - 1))}> Previous
setActive(a => Math.min(5, a + 1))}>Next Step
);
}
function Card({ children, ...p }) { return {children}
; }
function Overview({ go }) {
return (
Step 1 · Overview
Start construction on Plot B-47
Before beginning construction, your building plan must be sanctioned by YEIDA in accordance with the prevailing building byelaws, FAR and setback norms for {D.user.sector}.
{[['Max Ground Coverage', '50%'], ['Permissible FAR', '1.5'], ['Max Height', '15 m'], ['Front Setback', '3 m']].map(([l, v]) => (
))}
Eligibility
{[['Possession granted', true], ['100% premium not mandatory', true], ['No pending dues for plan', false], ['Architect empanelled', true]].map(([l, ok], i) => (
{l}
))}
Clear the Water Connection due of ₹12,400 before plan submission.
);
}
function Required({ docs }) {
return (
Step 2 · Required Documents
Document checklist
Prepare the following before submitting your building plan for scrutiny.
{docs.map((d, i) => (
{d.status === 'uploaded' ? 'Ready' : 'Pending'}
))}
);
}
function Upload({ docs, upload }) {
return (
Step 3 · Upload
Upload documents
Drag & drop files here
PDF, DWG, JPG · up to 25 MB each
Browse Files
Submission status
{docs.map((d, i) => (
{d.status === 'uploaded'
?
Uploaded
:
upload(i)}> Upload }
))}
);
}
function Review({ setActive }) {
return (
Step 4 · Authority Review
Your application is under scrutiny
YEIDA's Building Plan section is reviewing your submission against byelaws. You'll be notified once the sanction letter is issued.
{[['Submitted', '16 Feb 2026'], ['Application No.', 'BP-2026-18-0472'], ['Est. Decision', '12 Jun 2026'], ['Reviewing Officer', 'AE (Planning)']].map(([l, v]) => (
))}
Document Check Technical Scrutiny Sanction
);
}
function Approval() {
return (
Step 5 · Approval
Sanction letter ready
Once approved, your building plan sanction letter will be available to download here, valid for 3 years from the date of issue.
Download Sanction Letter
Preview
);
}
function Progress() {
return (
Step 6 · Progress Tracker
On-site construction progress
{D.constructionMilestones.map((m, i) => (
0 ? 'var(--blue-50)' : 'var(--bg-2)', color: m.pct === 100 ? 'var(--emerald-600)' : m.pct > 0 ? 'var(--blue-600)' : 'var(--faint)' }}>
0 ? 'blue' : 'gray')} style={{ fontSize: 11 }}>{m.status}
{m.pct}%
))}
);
}
window.Construction = Construction;
})();