/** * ============================================================================= * Job·Ka — Groupe KA * Auteur : Simon-Pierre Boucher * Contact : contact@spboucher.ai * Fichier : frontend/src/fiche/Closing.tsx * Rôle : « En bref », Où travailler (carte OSM), Dossier de l'offre, * Sources et méthodologie, CTA sticky mobile, aside desktop et * « Demander à Ka » (widget KA Agent partagé). * Créé : 2026-09-07 * ============================================================================= */ import { useEffect, useMemo, useState } from "react"; import { Job, displayTitle, formatDate, formatSalary } from "../api"; import { Ico, IcoHeart } from "../components/Icons"; import BottomSheet from "./BottomSheet"; import { EmployerLogo, SalaryCapsule } from "./JobHero"; import { ComparaisonSalaire, Constat } from "./synthese"; import { Accordion, SectionCard, SkeletonLines, SourceLine, relTime } from "./ui"; export function BriefList({ items, compact = false }: { items: Constat[]; compact?: boolean }) { const glyph = (t: Constat["tone"]) => (t === "good" ? "✓" : t === "bad" ? "✕" : t === "warn" ? "!" : "○"); return ( ); } export function Summary({ items, loading }: { items: Constat[]; loading: boolean }) { return ( {items.length > 0 ? : loading ? :

Pas encore de synthèse pour cette offre.

}
); } export function LocationCard({ job }: { job: Job }) { const src = useMemo(() => { if (job.lat == null || job.lng == null) return null; const d = 0.02; const bbox = [job.lng - d, job.lat - d, job.lng + d, job.lat + d].join(","); return `https://www.openstreetmap.org/export/embed.html?bbox=${bbox}&layer=mapnik&marker=${job.lat},${job.lng}`; }, [job.lat, job.lng]); if (!src) return null; return ( } sub={`${[job.address, job.city, job.region].filter(Boolean).join(" · ")}${job.work_mode === "teletravail" ? " — poste en télétravail" : ""}`}>