New non-destructive route /site-finder/analysis/[cad]/ptica rendering the existing /analyze data in the «ПТИЦА» operator-terminal cockpit. The light analysis page, Section1-6, globals.css and package.json are untouched. PR#1 scope: app-shell (topbar + 4 tabs + left rail), hero (dark Leaflet map + parcel passport KV-grid + Buildability radial gauge + invest-score block), and the Development Scan card grid — wired to useParcelAnalyzeQuery / ParcelAnalysis. Data honesty: real fields render live (passport egrn.*, district, utilities.summary, median_price, pipeline_24mo); absent fields show muted placeholders with source captions (buildability/risk = derived proxy «предв.»; invest/buy-signal «после прогноза»; КСИТ/height/ОКС/economy «—») via typed ptica-adapt.ts — no fake numbers presented as live. Dark theme is a CSS-module scoped under .pticaRoot[data-theme=dark] (cannot leak to the light app); IBM Plex Mono added via next/font (no dep/lockfile change). Leaflet via dynamic(ssr:false). TS strict, no any. Deferred to follow-up PRs: Scenarios (forecast), Reports+Compare tabs, 16 detail drawers, Three.js 3D massing.
22 lines
560 B
TypeScript
22 lines
560 B
TypeScript
"use client";
|
||
|
||
/**
|
||
* PticaPlaceholderPanel — honest "В разработке" panel for cockpit tabs/sections
|
||
* that aren't wired in INCREMENT 1 (Scenarios / Reports / Compare).
|
||
*/
|
||
|
||
import styles from "@/app/site-finder/analysis/[cad]/ptica/ptica.module.css";
|
||
|
||
interface Props {
|
||
label: string;
|
||
hint?: string;
|
||
}
|
||
|
||
export function PticaPlaceholderPanel({ label, hint }: Props) {
|
||
return (
|
||
<div className={`${styles.panel} ${styles.placeholderPanel}`}>
|
||
<div className={styles.soon}>{label}</div>
|
||
{hint && <p>{hint}</p>}
|
||
</div>
|
||
);
|
||
}
|