Загрузка...

Адаптивный редактор текста с боковой панелью рисков, ссылками, автосохранением и счетчиком символов. Интерактивный UI на Tailwind CSS.
<main class="max-w-[1280px] mr-auto ml-auto pt-6 pr-6 pb-6 pl-6">
<div class="grid grid-cols-12 gap-6">
<!-- Colonne gauche: Document (scroll) -->
<section class="col-span-12 lg:col-span-8 lg:h-[calc(100vh-48px)] overflow-y-auto pr-1"
aria-label="Document - Cadre 5">
<article class="border border-gray-200 rounded-xl p-6 bg-white shadow-[0_0_0_1px_rgba(0,0,0,0.02)]">
<header class="mb-4">
<h3 class="text-2xl tracking-tight font-semibold text-slate-900">Cadre 5 — Dérogations / écarts</h3>
<!-- Références - version large (monoligne) -->
<p class="hidden md:block mt-3 text-[15px] leading-6 text-slate-700 whitespace-nowrap overflow-hidden">
<span class="font-semibold text-slate-900">Dérogation</span> :
<span class="">D.IV.6–11</span>
<a href="#" target="_blank" rel="noopener noreferrer"
class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer"
aria-label="Ouvrir l’article D.IV.6–11 dans un nouvel onglet"
data-tooltip="Ouvrir l’article dans un nouvel onglet"
style="position: relative;">🔗<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span></a>
<button type="button" class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer" aria-label="Copier l’extrait pertinent D.IV.6–11" data-tooltip="Copier l’extrait pertinent" data-snippet="Dérogation D.IV.6–11 — Extrait type: Les dérogations sont admises si la motivation démontre l’intérêt public et la compatibilité avec les objectifs du CoDT." style="position: relative;">📋<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span></button>
,
<span>D.IV.13</span>
<a href="#" target="_blank" rel="noopener noreferrer"
class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer"
aria-label="Ouvrir l’article D.IV.13 dans un nouvel onglet"
data-tooltip="Ouvrir l’article dans un nouvel onglet"
style="position: relative;">🔗<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span></a>
<button type="button" class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer" aria-label="Copier l’extrait pertinent D.IV.13" data-tooltip="Copier l’extrait pertinent" data-snippet="Dérogation D.IV.13 — Extrait type: Conditions de recevabilité et de motivation détaillées pour l’octroi d’une dérogation." style="position: relative;">📋<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span></button>
<span class="mx-2 select-none text-slate-400">·</span>
<span class="font-semibold text-slate-900">Écart</span> :
<span>D.IV.5</span>
<a href="#" target="_blank" rel="noopener noreferrer"
class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer"
aria-label="Ouvrir l’article D.IV.5 dans un nouvel onglet"
data-tooltip="Ouvrir l’article dans un nouvel onglet"
style="position: relative;">🔗<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span></a>
<button type="button" class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer" aria-label="Copier l’extrait pertinent D.IV.5" data-tooltip="Copier l’extrait pertinent" data-snippet="Écart D.IV.5 — Extrait type: Un écart peut être accordé lorsque la finalité et la qualité urbanistique sont maintenues." style="position: relative;">📋<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span></button>
<span class="mx-2 select-none text-slate-400">·</span>
<span class="font-semibold text-slate-900">Local</span> :
<span class="">Guide communal [Commune]</span>
<a href="#" target="_blank" rel="noopener noreferrer"
class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer"
aria-label="Ouvrir le Guide communal [Commune] dans un nouvel onglet"
data-tooltip="Ouvrir l’article dans un nouvel onglet"
style="position: relative;">🔗<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Ouvrir l’article dans un nouvel onglet</span></a>
<button type="button" class="align-middle hover:underline decoration-slate-400 underline-offset-2 cursor-pointer" aria-label="Copier l’extrait pertinent du Guide communal [Commune]" data-tooltip="Copier l’extrait pertinent" data-snippet="Guide communal [Commune] — Extrait type: Recommandations locales pour l’intégration paysagère et la gestion de l’eau." style="position: relative;">📋<span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span><span class="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-slate-900 text-white text-xs px-2 py-1 opacity-0 transition-opacity shadow">Copier l’extrait pertinent</span></button>
</p>
<p class="hidden md:block mt-1 text-[13px] leading-5 text-slate-500">
Astuce: vous pouvez coller les extraits copiés dans l’outil IA de votre choix. Aucune intégration IA n’est
fournie dans l’interface.
</p>
<!-- Références - version compacte (≤767px), troncature + popover -->
<div class="md:hidden mt-3">
<div class="flex items-center gap-2">
<p class="text-[15px] leading-6 text-slate-700 truncate">
<span class="font-semibold text-slate-900">Dérogation</span> : D.IV.6–11, D.IV.13 ·
<span class="font-semibold text-slate-900">Écart</span> : D.IV.5 ·
<span class="font-semibold text-slate-900">Local</span> : Guide communal [Commune]
</p>
<button id="refsMoreBtn" type="button" class="shrink-0 text-slate-600 hover:text-slate-900 hover:underline underline-offset-2 text-sm px-2 py-1 rounded-md ring-1 ring-slate-200" aria-haspopup="dialog" aria-expanded="false" aria-controls="refsPopover">
+1
</button>
</div>
<!-- Popover -->
<div id="refsPopover" role="dialog" aria-modal="false" aria-label="Références"
class="hidden mt-2 w-full rounded-lg border border-slate-200 bg-white shadow-lg p-3">
<ul class="space-y-2 text-[15px]">
<li class="flex items-center justify-between gap-3">
<span><span class="font-semibold">Dérogation</span> : D.IV.6–11</span>
<span class="flex items-center gap-2">
<a href="#" target="_blank" rel="noopener noreferrer" class="hover:underline underline-offset-2" aria-label="Ouvrir D.IV.6–11">🔗</a>
<button type="button" aria-label="Copier D.IV.6–11" data-snippet="Dérogation D.IV.6–11 — Extrait type: Les dérogations sont admises si la motivation démontre l’intérêt public et la compatibilité avec les objectifs du CoDT." class="hover:underline underline-offset-2 cursor-pointer">📋</button>
</span>
</li>
<li class="flex items-center justify-between gap-3">
<span><span class="font-semibold">Dérogation</span> : D.IV.13</span>
<span class="flex items-center gap-2">
<a href="#" target="_blank" rel="noopener noreferrer" class="hover:underline underline-offset-2" aria-label="Ouvrir D.IV.13">🔗</a>
<button type="button" aria-label="Copier D.IV.13" data-snippet="Dérogation D.IV.13 — Extrait type: Conditions de recevabilité et de motivation détaillées pour l’octroi d’une dérogation." class="hover:underline underline-offset-2 cursor-pointer">📋</button>
</span>
</li>
<li class="flex items-center justify-between gap-3">
<span><span class="font-semibold">Écart</span> : D.IV.5</span>
<span class="flex items-center gap-2">
<a href="#" target="_blank" rel="noopener noreferrer" class="hover:underline underline-offset-2" aria-label="Ouvrir D.IV.5">🔗</a>
<button type="button" aria-label="Copier D.IV.5" data-snippet="Écart D.IV.5 — Extrait type: Un écart peut être accordé lorsque la finalité et la qualité urbanistique sont maintenues." class="hover:underline underline-offset-2 cursor-pointer">📋</button>
</span>
</li>
<li class="flex items-center justify-between gap-3">
<span><span class="font-semibold">Local</span> : Guide communal [Commune]</span>
<span class="flex items-center gap-2">
<a href="#" target="_blank" rel="noopener noreferrer" class="hover:underline underline-offset-2" aria-label="Ouvrir Guide communal [Commune]">🔗</a>
<button type="button" aria-label="Copier Guide communal [Commune]" data-snippet="Guide communal [Commune] — Extrait type: Recommandations locales pour l’intégration paysagère et la gestion de l’eau." class="hover:underline underline-offset-2 cursor-pointer">📋</button>
</span>
</li>
</ul>
<p class="mt-2 text-[13px] text-slate-500">
Astuce: collez les extraits copiés dans l’outil IA de votre choix (aucune intégration IA dans l’UI).
</p>
</div>
</div>
</header>
<!-- Zone de saisie -->
<div class="mt-2">
<label for="cadre5" class="sr-only">Saisir le contenu du Cadre 5</label>
<textarea id="cadre5" name="cadre5" class="w-full focus:border-slate-400 focus:ring-2 focus:ring-slate-200 outline-none text-[15px] leading-6 placeholder-slate-400 resize-none text-slate-900 border-slate-300 border rounded-lg pt-4 pr-4 pb-4 pl-4" rows="6" placeholder="Astuce : tapez “/” pour insérer un élément des Risques (cartes, captages, radon…). Vous pouvez aussi coller des extraits de règlement ici. Aucune intégration IA n’est fournie dans l’interface." aria-describedby="cadre5-help" style="height: 176px;"></textarea>
<p id="cadre5-error" class="mt-2 hidden text-sm text-red-600">Texte requis</p>
<!-- Footer (optionnel) -->
<div class="mt-3 flex items-center justify-between text-sm text-slate-500">
<div class="flex items-center gap-2">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"
data-lucide="clock" class="lucide lucide-clock w-4 h-4 text-slate-400">
<path d="M12 6v6l4 2" class=""></path>
<circle cx="12" cy="12" r="10" class=""></circle>
</svg>
<span id="draftState" class="">Brouillon sauvegardé • 12:41</span>
</div>
<div class="text-[13px] text-slate-500">
<span id="charCount">0 caractère</span>
</div>
</div>
<p id="cadre5-help" class="sr-only">Utilisez Ctrl ou ⌘ + Entrée pour sauvegarder. Le texte doit être
renseigné.</p>
</div>
</article>
<!-- Espace pour simuler contenu long afin de tester le scroll -->
<div class="h-24"></div>
</section>
<!-- Colonne droite: Risques (sticky) -->
<aside class="col-span-12 lg:col-span-4">
<div class="lg:sticky lg:top-6">
<!-- Liste des risques -->
<div id="riskListContainer" class="">
<ul class="space-y-4" aria-label="Risques (WoM)">
<!-- 🔴 Inondations & ruissellement (0) -->
<li class="">
<button type="button" class="risk-card group w-full text-left rounded-2xl border-2 border-red-500 bg-red-50/50 p-4 shadow-sm hover:bg-red-50 transition-colors focus:outline-none focus:ring-2 focus:ring-red-200 filter saturate-0 opacity-60" data-risk="red" aria-expanded="false" aria-label="Inondations & ruissellement — ouvrir le détail">
<div class="flex items-center justify-between gap-3">
<div class="flex items-center gap-3">
<span class="size-2.5 rounded-full bg-red-500 inline-block"></span>
<span class="text-[15px] font-medium text-slate-900">Inondations & ruissellement</span>
</div>
<span class="text-[13px] text-slate-700" aria-live="polite">• <span class="risk-count" data-risk-count="red">0</span></span>
</div>
</button>
</li>
<!-- 🟠 Imperméabilisation des sols -->
<li class="">
<button type="button" class="risk-card group w-full text-left rounded-2xl border-2 border-amber-500 bg-amber-50/50 p-4 shadow-sm hover:bg-amber-50 transition-colors focus:outline-none focus:ring-2 focus:ring-amber-200" data-risk="orange" aria-expanded="false" aria-label="Imperméabilisation des sols — ouvrir le détail">
<div class="flex items-center justify-between gap-3">
<div class="flex items-center gap-3">
<span class="size-2.5 rounded-full bg-amber-500 inline-block"></span>
<span class="text-[15px] font-medium text-slate-900">Imperméabilisation des sols</span>
</div>
<span class="text-[13px] text-slate-700" aria-live="polite">• <span class="risk-count" data-risk-count="orange">3</span></span>
</div>
</button>
</li>
<!-- 🟡 Assainissement & eaux usées -->
<li class="">
<button type="button" class="risk-card group w-full text-left rounded-2xl border-2 border-amber-400 bg-amber-50/40 p-4 shadow-sm hover:bg-amber-50 transition-colors focus:outline-none focus:ring-2 focus:ring-amber-200" data-risk="yellow" aria-expanded="false" aria-label="Assainissement & eaux usées — ouvrir le détail">
<div class="flex items-center justify-between gap-3">
<div class="flex items-center gap-3">
<span class="size-2.5 rounded-full bg-amber-400 inline-block"></span>
<span class="text-[15px] font-medium text-slate-900">Assainissement & eaux usées</span>
</div>
<span class="text-[13px] text-slate-700" aria-live="polite">• <span class="risk-count" data-risk-count="yellow">3</span></span>
</div>
</button>
</li>
<!-- 🟢 Contraintes milieu (sites, arbres) -->
<li class="">
<button type="button" class="risk-card group w-full text-left rounded-2xl border-2 border-green-500 bg-green-50/50 p-4 shadow-sm hover:bg-green-50 transition-colors focus:outline-none focus:ring-2 focus:ring-green-200" data-risk="green" aria-expanded="false" aria-label="Contraintes milieu (sites, arbres) — ouvrir le détail">
<div class="flex items-center justify-between gap-3">
<div class="flex items-center gap-3">
<span class="size-2.5 rounded-full bg-green-500 inline-block"></span>
<span class="text-[15px] font-medium text-slate-900">Contraintes milieu (sites, arbres)</span>
</div>
<span class="text-[13px] text-slate-700" aria-live="polite">• <span class="risk-count" data-risk-count="green">5</span></span>
</div>
</button>
</li>
<!-- 🔵 Insertion paysagère -->
<li class="">
<button type="button" class="risk-card group w-full text-left rounded-2xl border-2 border-blue-500 bg-blue-50/50 p-4 shadow-sm hover:bg-blue-50 transition-colors focus:outline-none focus:ring-2 focus:ring-blue-200" data-risk="blue" aria-expanded="false" aria-label="Insertion paysagère — ouvrir le détail">
<div class="flex items-center justify-between gap-3">
<div class="flex items-center gap-3">
<span class="size-2.5 rounded-full bg-blue-500 inline-block"></span>
<span class="text-[15px] font-medium text-slate-900">Insertion paysagère</span>
</div>
<span class="text-[13px] text-slate-700" aria-live="polite">• <span class="risk-count" data-risk-count="blue">1</span></span>
</div>
</button>
</li>
</ul>
</div>
<!-- Détails d’un risque (inline, ancré) -->
<div id="riskDetailsContainer" class="hidden rounded-2xl border border-slate-200 bg-white shadow-sm">
<!-- Header -->
<div class="flex items-center justify-between px-4 py-3 border-b border-slate-200">
<div class="flex items-center gap-2">
<button id="riskBackBtn" type="button" class="inline-flex items-center gap-1.5 text-[14.5px] text-slate-700 hover:text-slate-900 hover:underline underline-offset-2">
← Tous les risques
</button>
</div>
<div class="flex items-center gap-3">
<span id="detailsCount" class="text-[13px] text-slate-600">0</span>
</div>
</div>
<!-- Titre + pastille -->
<div class="px-4 pt-3 pb-2">
<div class="flex items-center gap-2">
<span id="detailsDot" class="size-2.5 rounded-full bg-slate-400 inline-block"></span>
<h4 id="detailsTitle" class="text-[15px] font-medium tracking-tight text-slate-900">Risque</h4>
</div>
</div>
<!-- Liste d’items -->
<div class="px-4 pb-3 border-b border-slate-200">
<ul id="detailsList" class="space-y-2"></ul>
</div>
<!-- Zone carte + actions -->
<div class="p-4">
<div id="embedHeader" class="mb-2">
<div class="text-[14.5px] text-slate-900" id="embedTitle">—</div>
<div class="text-[12.5px] text-slate-500" id="embedSource">—</div>
</div>
<div class="rounded-lg border border-slate-200 overflow-hidden bg-slate-50">
<div class="bg-white">
<div class="relative">
<img id="embedImage" src="" alt="" class="w-full h-auto block select-none" draggable="true">
<iframe id="embedIframe" src="" class="hidden w-full aspect-video"></iframe>
</div>
</div>
<div class="flex items-center justify-between px-2.5 py-2 bg-white border-t border-slate-200">
<div class="flex items-center gap-1.5">
<button id="actionInsert" type="button" class="inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-[13px] text-slate-700 hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-slate-200">
⇥ <span>Insérer dans le texte</span>
</button>
<button id="actionCopyRef" type="button" class="inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-[13px] text-slate-700 hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-slate-200">
📋 <span>Copier la référence</span>
</button>
</div>
<div class="relative">
<button id="actionMore" type="button" class="w-8 h-8 inline-flex items-center justify-center rounded-md hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-slate-200" aria-haspopup="menu" aria-expanded="false">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-lucide="more-horizontal" class="lucide lucide-more-horizontal w-4 h-4 text-slate-700"><circle cx="12" cy="12" r="1" class=""></circle><circle cx="19" cy="12" r="1" class=""></circle><circle cx="5" cy="12" r="1" class=""></circle></svg>
</button>
<div id="moreMenu"
class="hidden absolute right-0 mt-1 w-48 rounded-md border border-slate-200 bg-white shadow-lg p-1">
<a id="openSourceLink" href="#" target="_blank" rel="noopener noreferrer"
class="flex items-center gap-2 px-2 py-1.5 rounded-md text-[13px] text-slate-700 hover:bg-slate-50">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"
data-lucide="external-link" class="lucide lucide-external-link w-4 h-4">
<path d="M15 3h6v6" class=""></path>
<path d="M10 14 21 3" class=""></path>
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" class=""></path>
</svg> Ouvrir la source
</a>
<a id="openMapLink" href="#" target="_blank" rel="noopener noreferrer"
class="flex items-center gap-2 px-2 py-1.5 rounded-md text-[13px] text-slate-700 hover:bg-slate-50">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"
data-lucide="map" class="lucide lucide-map w-4 h-4">
<path
d="M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z"
class=""></path>
<path d="M15 5.764v15" class=""></path>
<path d="M9 3.236v15" class=""></path>
</svg> Ouvrir la carte
</a>
</div>
</div>
</div>
</div>
<p class="mt-2 text-[12.5px] text-slate-500">Astuce : vous pouvez glisser-déposer l’aperçu de la carte vers
le champ texte pour l’insérer.</p>
</div>
</div>
</div>
</aside>
</div>
</main>