Tiroir latéral d’alerte de la salle de rappel d’approbation
Dans un scénario de salle d’alerte des autorisations, finalisez un tiroir latéral : contenu réel, contrôles actionnables, retours d’état clairs et mise en page adaptative aux différentes tailles.
Après activation de JavaScript, ce cas peut être modifié, exécuté et enregistré. Code source fixe ci-dessous :
<!doctype html>
<html lang="fr" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tiroir latéral d’alerte de la salle de rappel d’approbation</title>
<style>
:root { --ink:#18314f; --paper:#f7f8f2; --accent:#ff6b5e; --secondary:#71c9b5; --line:color-mix(in srgb, var(--ink) 18%, transparent); --shadow:0 24px 60px color-mix(in srgb, var(--ink) 16%, transparent); color-scheme:light; }
* { box-sizing:border-box; }
html { min-width:320px; background:var(--paper); }
body { min-height:100vh; margin:0; overflow-x:hidden; color:var(--ink); font-family:Didot,"Songti SC",serif; background:linear-gradient(30deg,transparent 48%,color-mix(in srgb,var(--accent) 9%,transparent) 49% 51%,transparent 52%),var(--paper);background-size:52px 90px; }
button,input,select,textarea { color:inherit; font:inherit; }
button,[role="button"],input,select,textarea { accent-color:var(--accent); }
button { cursor:pointer; }
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible { outline:3px solid var(--accent); outline-offset:3px; }
[hidden] { display:none !important; }
@media (max-width:700px) { .mast h1 { line-height:1.08 !important; letter-spacing:-.035em !important; overflow-wrap:anywhere; } }
@media (prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto !important; animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; } }
.page{width:min(1040px,calc(100% - 36px));margin:auto;padding:64px 0}.mast{display:grid;justify-items:center;text-align:center;border-block:3px double var(--accent);padding:26px;gap:20px;margin-bottom:32px}.mast h1{font-family:Didot,"Songti SC",serif;font-weight:700;font-size:clamp(38px,8vw,86px);letter-spacing:.035em;margin:0;line-height:1}.eyebrow{display:block;color:var(--accent);font:800 11px/1 ui-monospace,monospace;letter-spacing:.3em}.intro{max-width:600px;margin-inline:auto;line-height:1.8}.scenario{padding:8px 26px;border-inline:1px solid var(--accent);letter-spacing:.16em}.demo{border:4px double var(--accent);border-radius:0;clip-path:polygon(24px 0,calc(100% - 24px) 0,100% 24px,100% calc(100% - 24px),calc(100% - 24px) 100%,24px 100%,0 calc(100% - 24px),0 24px);position:relative;min-height:440px;overflow:hidden;padding:clamp(28px,5vw,60px);background:var(--paper)}@media(max-width:700px){.page{width:calc(100% - 20px);padding:24px 0}.mast{padding:18px}.demo{padding:18px}}
.stack{display:flex;flex-direction:column;gap:18px}.panel{padding:28px;border-left:7px solid var(--accent);background:color-mix(in srgb,var(--secondary) 12%,var(--paper))}.action{min-height:46px;padding:11px 18px;border:0;border-bottom:3px solid var(--ink);background:transparent;font-weight:900}.action.primary,.action.is-active{color:var(--paper);background:var(--ink)}.row{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}.metric{font:900 clamp(32px,7vw,64px)/1 ui-monospace,monospace}.status{min-height:22px;padding-top:12px;border-top:1px dashed var(--line)}.muted{color:color-mix(in srgb,var(--ink) 62%,transparent)}.chip{display:inline-block;padding:5px 8px;background:var(--secondary)}.meter{height:12px;border:1px solid var(--ink)}.meter>i{display:block;height:100%;background:var(--ink)}
.composition-split{display:grid;grid-template-columns:150px minmax(0,1fr);gap:18px;align-items:start}.split-note{position:sticky;top:20px;display:grid;gap:14px;padding:18px 12px;border-block:3px double var(--accent);font-size:13px;line-height:1.65}.split-note b{font:900 12px/1 ui-monospace,monospace;letter-spacing:.12em}.split-note span{writing-mode:vertical-rl;min-height:120px;color:color-mix(in srgb,var(--ink) 60%,transparent)}.composition-split .demo{min-width:0}@media(max-width:900px){.composition-split{grid-template-columns:1fr}.split-note{position:static;grid-template-columns:auto 1fr}.split-note span{writing-mode:horizontal-tb;min-height:0}}
.drawer-canvas{display:grid;gap:22px;min-height:380px;padding:clamp(24px,6vw,66px);border:1px solid var(--line);border-radius:30px;background:linear-gradient(130deg,var(--paper),color-mix(in srgb,var(--secondary) 18%,var(--paper)))}.drawer-canvas h2{margin:0;font-size:clamp(36px,8vw,82px)}.drawer-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.drawer-cards article{display:grid;gap:7px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--paper)}.drawer-canvas>.action{justify-self:start}.drawer-demo dialog{width:min(460px,calc(100% - 20px));height:calc(100dvh - 20px);max-height:none;margin:10px 10px 10px auto;padding:0;border:0;border-radius:26px;color:var(--ink);background:var(--paper);box-shadow:-24px 0 70px #0004}.drawer-demo dialog::backdrop{background:#1118}.drawer-demo form{display:grid;grid-template-rows:auto auto 1fr auto;height:100%}.drawer-demo form header,.drawer-demo form footer{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:20px;border-bottom:1px solid var(--line)}.drawer-demo form header h2{margin:.2em 0}.drawer-demo form button{padding:10px 14px;border:1px solid var(--line);border-radius:9px;background:transparent}.drawer-demo form header>button{width:42px;height:42px;padding:0;border-radius:50%;font-size:22px}.drawer-demo nav{display:flex;gap:6px;padding:12px 20px;border-bottom:1px solid var(--line)}.drawer-demo nav button[aria-current="page"]{color:var(--paper);background:var(--ink)}.drawer-content{padding:28px;line-height:1.8}.drawer-content strong{font-size:30px}.drawer-demo form footer{border-top:1px solid var(--line);border-bottom:0}.drawer-demo form footer .primary{color:var(--paper);background:var(--accent)}@media(max-width:560px){.drawer-cards{grid-template-columns:1fr}.drawer-demo dialog{width:calc(100% - 12px);height:calc(100dvh - 12px);margin:6px}}.workflow-dispatch{display:grid;grid-template-columns:minmax(210px,.48fr) minmax(0,1.52fr);gap:18px}.dispatch-console{display:grid;align-content:start;gap:16px;padding:22px;border:1px solid var(--line);border-radius:18px;background:color-mix(in srgb,var(--secondary) 12%,var(--paper))}.dispatch-console h2{margin:.2em 0}.dispatch-console form,.dispatch-console label{display:grid;gap:7px}.dispatch-console input,.dispatch-console select{min-width:0;width:100%;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--paper)}.dispatch-console fieldset{display:flex;gap:12px;border:1px solid var(--line);border-radius:10px}.dispatch-console fieldset label{display:flex;align-items:center}.dispatch-workbench{--dispatch-load:.22;min-width:0;padding:14px;border-left:8px solid color-mix(in srgb,var(--accent) calc(var(--dispatch-load)*100%),var(--line));background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 8%,transparent),transparent 28%)}.dispatch-workbench[data-dispatch-priority="urgent"]{box-shadow:inset 0 0 0 2px var(--accent)}@media(max-width:900px){.workflow-dispatch{grid-template-columns:1fr}.dispatch-console{order:2}}.atlas-shell{--atlas-zoom:100;display:grid;gap:18px;padding:clamp(18px,4vw,30px);border:1px solid var(--line);border-radius:34px;background:linear-gradient(165deg,color-mix(in srgb,var(--secondary) 10%,transparent),color-mix(in srgb,var(--paper) 96%,transparent));box-shadow:var(--shadow)}.atlas-head{display:flex;justify-content:space-between;gap:20px;align-items:end}.atlas-head h2{margin:.18em 0}.atlas-controls{display:grid;gap:10px;justify-items:end}.atlas-modes{display:flex;flex-wrap:wrap;gap:8px;justify-content:end}.atlas-controls output{padding:10px 14px;border:1px solid var(--line);border-radius:999px;background:var(--paper);font-weight:900}.atlas-body{display:grid;grid-template-columns:minmax(240px,.56fr) minmax(0,1.44fr);gap:16px}.atlas-index{display:grid;align-content:start;gap:14px;padding:18px;border-radius:26px;color:var(--paper);background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 88%,#071310),color-mix(in srgb,var(--ink) 72%,#21110f))}.atlas-index label{display:grid;gap:8px}.atlas-index input,.atlas-index select{width:100%;padding:10px;border:1px solid #ffffff2e;border-radius:10px;color:inherit;background:#ffffff12}.atlas-chapters{display:grid;gap:10px;margin:0;padding:0;list-style:none}.atlas-chapters button{display:grid;gap:6px;width:100%;padding:14px;border:1px solid #ffffff24;border-radius:18px;color:inherit;background:#ffffff0e;text-align:left}.atlas-chapters button[aria-pressed="true"]{border-color:var(--secondary);background:#ffffff18;box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--secondary) 28%,transparent)}.atlas-chapters span{font:800 11px/1 ui-monospace,monospace;letter-spacing:.16em}.atlas-chapters small{line-height:1.5;opacity:.76}.atlas-meta{display:grid;gap:10px;margin:0}.atlas-meta div{display:grid;gap:4px;padding:12px;border:1px solid #ffffff1f;border-radius:14px;background:#ffffff10}.atlas-meta dt{font:700 11px/1 ui-monospace,monospace;letter-spacing:.14em;text-transform:uppercase;opacity:.72}.atlas-meta dd{margin:0;font-weight:900}.atlas-stage{display:grid;gap:14px;min-width:0}.atlas-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.atlas-summary article{display:grid;gap:6px;padding:14px;border:1px solid var(--line);border-radius:18px;background:var(--paper)}.atlas-summary article[data-active="true"]{background:color-mix(in srgb,var(--secondary) 14%,var(--paper));box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--accent) 18%,transparent)}.atlas-summary span{font:800 11px/1 ui-monospace,monospace;letter-spacing:.16em}.atlas-core-shell{min-width:0;padding:clamp(14px,3vw,22px);overflow:auto;border:1px solid var(--line);border-radius:26px;background:radial-gradient(circle at top right,color-mix(in srgb,var(--accent) 8%,transparent),transparent 35%),color-mix(in srgb,var(--paper) 94%,transparent)}.atlas-core-shell>*{display:block;width:calc(10000%/var(--atlas-zoom));max-width:none;transform:scale(calc(var(--atlas-zoom)/100));transform-origin:top left}.atlas-log{display:grid;gap:8px;margin:0;padding-left:18px}.atlas-log li{line-height:1.55}.atlas-shell[data-atlas-mode="trace"] .atlas-core-shell{outline:4px solid color-mix(in srgb,var(--accent) 24%,transparent);outline-offset:3px}.atlas-shell[data-atlas-mode="handoff"] .atlas-index{background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 82%,#28120f),color-mix(in srgb,var(--ink) 68%,#11201d))}@media(max-width:960px){.atlas-body{grid-template-columns:1fr}.atlas-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:560px){.atlas-head{align-items:stretch;flex-direction:column}.atlas-controls{justify-items:start}.atlas-modes{justify-content:start}.atlas-summary{grid-template-columns:1fr}.atlas-core-shell>*{width:100%;transform:none}}
</style>
</head>
<body data-aesthetic="art-deco" data-composition="split-note">
<main class="page">
<header class="mast"><div><span class="eyebrow">art-deco / tiroir latéral / INTERMEDIATE</span><h1>Tiroir latéral d’alerte de la salle de rappel d’approbation</h1><p class="intro">Dans un scénario de salle d’alerte des autorisations, finalisez un tiroir latéral : contenu réel, contrôles actionnables, retours d’état clairs et mise en page adaptative aux différentes tailles.</p></div><span class="scenario">Salle de rappel d’approbation</span></header>
<div class="composition-split"><aside class="split-note"><b>CASE 02</b><span>Maîtriser la structure sémantique d’un tiroir latéral, l’agencement responsive, les interactions clavier et la synchronisation d’état.</span></aside><section class="demo" aria-label="Zone d’interaction du tiroir latéral de la salle des rappels d’approbation"><section id="atlasShell" class="atlas-shell" data-atlas-mode="brief"><header class="atlas-head"><div><span class="eyebrow">Salle de rappel d’approbation / ATLAS DOSSIER</span><h2>Atlas d’exemples du tiroir latéral</h2><p>Réencapsuler le cas principal dans une page d’exemple de type atlas, en séparant l’index des exemples, la vue de suivi, les annotations de passation et les notes de terrain.</p></div><div class="atlas-controls"><div class="atlas-modes"><button class="action primary" type="button" data-atlas-mode="brief">Briefing</button><button class="action" type="button" data-atlas-mode="trace">Suivi</button><button class="action" type="button" data-atlas-mode="handoff">Transfert</button></div><output id="atlasState">En attente de création d’échantillon</output></div></header><div class="atlas-body"><aside class="atlas-index"><ol class="atlas-chapters"><li><button type="button" data-atlas-card="0" aria-pressed="true"><span>01</span><strong>Rappel d’approbation de la salle</strong><small>Vérifier si les changements d’état sont visibles</small></button></li><li><button type="button" data-atlas-card="1" aria-pressed="false"><span>02</span><strong>Vue d’ensemble de la salle des rappels d’approbation</strong><small>Confirmer la cohérence entre l’entrée au clavier et le clic</small></button></li><li><button type="button" data-atlas-card="2" aria-pressed="false"><span>03</span><strong>Plan de la salle de rappel des approbations</strong><small>Vérifiez si la disposition se replie sur les écrans étroits</small></button></li><li><button type="button" data-atlas-card="3" aria-pressed="false"><span>04</span><strong>Inspiration pour la salle des alertes de rappel d’approbation</strong><small>Enregistrer la conclusion de la révision en cours</small></button></li></ol><label>Ratio de mise en page<input id="atlasZoom" type="range" min="82" max="132" value="100"><output id="atlasZoomValue">100%</output></label><label>focus de l’échantillonnage<select id="atlasFocus"><option value="0">Rappel d’approbation de la salle</option><option value="1">Vue d’ensemble de la salle des rappels d’approbation</option><option value="2">Plan de la salle de rappel des approbations</option><option value="3">Inspiration pour la salle des alertes de rappel d’approbation</option></select></label><button id="atlasCapture" class="action primary" type="button">Échantillon inclus</button><dl class="atlas-meta"><div><dt>Nombre de contenus</dt><dd id="atlasCount">0</dd></div><div><dt>Focus actuel</dt><dd id="atlasCurrent">Rappel d’approbation de la salle</dd></div><div><dt>Mode de relecture</dt><dd id="atlasModeLabel">Briefing</dd></div></dl></aside><section class="atlas-stage"><div class="atlas-summary"><article data-active="true"><span>Sample</span><strong>Rappel d’approbation de la salle</strong><p>Vérifier si les changements d’état sont visibles</p></article><article><span>Trace</span><strong>Vue d’ensemble de la salle des rappels d’approbation</strong><p>Confirmer la cohérence entre l’entrée au clavier et le clic</p></article><article><span>Signal</span><strong>Plan de la salle de rappel des approbations</strong><p>Vérifiez si la disposition se replie sur les écrans étroits</p></article><article><span>Handoff</span><strong>Inspiration pour la salle des alertes de rappel d’approbation</strong><p>Enregistrer la conclusion de la révision en cours</p></article></div><div id="atlasCoreShell" class="atlas-core-shell"><div class="workflow-dispatch"><aside class="dispatch-console"><span class="eyebrow">Salle de rappel d’approbation DISPATCH</span><h2>Salle de répartition du bureau des alertes d’approbation</h2><form id="workflowDispatchForm"><label>Type de tâche<select id="workflowDispatchKind"><option>Ouverture du panneau de rappel d’approbation</option><option>Salle d’alerte de rappel d’approbation en cours de traitement</option><option>Retour de feedback de la salle de rappel d’approbation</option></select></label><label>Nombre de tâches en attente<input id="workflowDispatchAmount" type="number" min="1" max="9999" value="21"><span>élément</span></label><fieldset><legend>Priorité de traitement</legend><label><input type="radio" name="workflowPriority" value="normal" checked>Standard</label><label><input type="radio" name="workflowPriority" value="urgent">Urgent</label></fieldset><button class="action primary" type="submit">Traitement terminé</button></form><label>Tâche en cours<select id="workflowDispatchActive" aria-label="Basculer la tâche en cours"><option value="1">Ouverture du panneau de rappel d’approbation</option><option value="2">Salle d’alerte de rappel d’approbation en cours de traitement</option></select></label><output id="workflowDispatchSummary">En attente de planification</output></aside><section id="workflowCore" class="workflow-core dispatch-workbench" data-dispatch-priority="normal"><!-- 11DZ_CORE_START:overlays-feedback-side-drawer --><section class="drawer-demo"><div class="drawer-canvas"><span class="eyebrow">SIDE DRAWER</span><h2>Espace de travail du local d’alerte de validation</h2><div class="drawer-cards"><article><span>01</span><strong>Rappel d’approbation de la salle</strong></article><article><span>02</span><strong>Vue d’ensemble de la salle des rappels d’approbation</strong></article><article><span>03</span><strong>Plan de la salle de rappel des approbations</strong></article></div><button id="drawerOpen" class="action primary" type="button" aria-controls="sideDrawer" data-core-bridge="overlays-feedback-side-drawer">Ouvrir le panneau latéral de détails</button></div><dialog id="sideDrawer" aria-labelledby="drawerTitle"><form method="dialog"><header><div><span class="eyebrow">DETAIL PANEL</span><h2 id="drawerTitle">Rappel d’approbation de la salle</h2></div><button value="close" aria-label="Fermer les détails latéraux">×</button></header><nav aria-label="Section de détails"><button type="button" data-drawer-tab="0" aria-current="page">Aperçu</button><button type="button" data-drawer-tab="1">Enregistrement</button><button type="button" data-drawer-tab="2">Collaborateur</button></nav><div id="drawerContent" class="drawer-content"><strong>Aperçu</strong><p>Le tiroir latéral conserve le contexte de la page principale et occupe toute la largeur disponible sur les petits écrans.</p></div><footer><button value="close">À traiter plus tard</button><button value="saved" class="primary">Enregistrer les détails</button></footer></form></dialog></section><!-- 11DZ_CORE_END --></section></div></div><ol id="atlasLog" class="atlas-log"><li>En attente du premier échantillon du graphe</li></ol></section></div></section><p id="status" class="status" role="status" aria-live="polite"></p></section></div>
</main>
<script>
'use strict';
const statusOutput = document.querySelector('#status');
const announce = message => { statusOutput.textContent = message; };
/* 11DZ_CORE_SCRIPT_START:overlays-feedback-side-drawer */
const sideDrawer=document.querySelector('#sideDrawer');document.querySelector('#drawerOpen').addEventListener('click',()=>{sideDrawer.returnValue='close';sideDrawer.showModal();});const drawerTabs=[...document.querySelectorAll('[data-drawer-tab]')];const drawerCopy=[['Aperçu','Voir le résumé et l’état principal du projet en cours.'],['Enregistrement','Vérifiez les dernières mises à jour et les résultats du traitement par ordre chronologique.'],['Collaborateur','Confirmer les membres participants ainsi que les étapes dont chacun est responsable.']];drawerTabs.forEach((button,index)=>button.addEventListener('click',()=>{drawerTabs.forEach(item=>item.removeAttribute('aria-current'));button.setAttribute('aria-current','page');document.querySelector('#drawerContent').innerHTML='<strong>'+drawerCopy[index][0]+'</strong><p>'+drawerCopy[index][1]+'</p>';announce('le panneau coulissant a basculé vers '+drawerCopy[index][0]);}));sideDrawer.addEventListener('click',event=>{if(event.target===sideDrawer)sideDrawer.close('close');});sideDrawer.addEventListener('close',()=>announce(sideDrawer.returnValue==='saved'?'Les détails latéraux ont été enregistrés':'Le panneau latéral détaillé est fermé'));
/* 11DZ_CORE_SCRIPT_END */
const workflowBridgeSpec={"name":"overlays-feedback-side-drawer","selector":"[data-core-bridge=\"overlays-feedback-side-drawer\"]","mode":"click","key":"Enter"};const workflowBridgeCore=document.querySelector('#workflowCore');const workflowBridgeControl=workflowBridgeCore.querySelector(workflowBridgeSpec.selector);if(!workflowBridgeControl)throw new Error('Missing core bridge: '+workflowBridgeSpec.name);const workflowBridgeControlledId=workflowBridgeControl.getAttribute('aria-controls');const workflowBridgeControlled=workflowBridgeControlledId?document.getElementById(workflowBridgeControlledId):null;workflowBridgeCore.dataset.workflowBridge=workflowBridgeSpec.name;workflowBridgeCore.dataset.workflowVersion='0';function workflowBridgeSerialize(){const visualNode=workflowBridgeCore.firstElementChild||workflowBridgeCore;const visual=getComputedStyle(visualNode);const outputs=[...workflowBridgeCore.querySelectorAll('output,[role="status"],[aria-live],meter,progress')].map(node=>node.textContent.trim()+'|'+node.getAttribute('aria-valuenow')+'|'+node.getAttribute('value'));const canvas=[...workflowBridgeCore.querySelectorAll('canvas')].map(node=>{try{return node.toDataURL().slice(-160);}catch{return 'canvas-unavailable';}});return JSON.stringify({html:workflowBridgeCore.innerHTML,status:statusOutput.textContent,outputs,canvas,visual:[visual.display,visual.visibility,visual.opacity,visual.transform,visual.filter,visual.backgroundColor,visual.width,visual.height],scroll:workflowBridgeSpec.mode==='scroll'?workflowBridgeControl.scrollTop:null});}let workflowBridgeLastEffect=workflowBridgeSerialize();function workflowBridgeSummary(){const label=(workflowBridgeControl.getAttribute('aria-label')||workflowBridgeControl.textContent||workflowBridgeControl.value||workflowBridgeSpec.name).trim().replace(/\s+/g,' ').slice(0,72);return label+' · Version de base '+workflowBridgeCore.dataset.workflowVersion;}function workflowBridgeCommit(){const effect=workflowBridgeSerialize();if(effect===workflowBridgeLastEffect)return {changed:false,summary:workflowBridgeSummary()};workflowBridgeLastEffect=effect;workflowBridgeCore.dataset.workflowVersion=String(Number(workflowBridgeCore.dataset.workflowVersion||0)+1);return {changed:true,summary:workflowBridgeSummary()};}function workflowBridgeScheduleCommit(){queueMicrotask(workflowBridgeCommit);setTimeout(workflowBridgeCommit,0);}workflowBridgeControl.addEventListener("click",workflowBridgeScheduleCommit);const workflowBridgeStateTargets=new Set(workflowBridgeCore.querySelectorAll('dialog'));if(workflowBridgeControlled&&workflowBridgeCore.contains(workflowBridgeControlled))workflowBridgeStateTargets.add(workflowBridgeControlled);workflowBridgeStateTargets.forEach(target=>['close','cancel','toggle'].forEach(eventName=>target.addEventListener(eventName,workflowBridgeScheduleCommit)));function workflowBridgeActivate(){workflowBridgeControl.focus();workflowBridgeControl.click();const result=workflowBridgeCommit();setTimeout(workflowBridgeCommit,0);return result;}function workflowBridgeReset(){workflowBridgeCore.dataset.workflowVersion='0';workflowBridgeLastEffect=workflowBridgeSerialize();}
const workflowDispatchCore=document.querySelector('#workflowCore');const workflowDispatchForm=document.querySelector('#workflowDispatchForm');const workflowDispatchSelect=document.querySelector('#workflowDispatchActive');const workflowDispatchJobs=new Map([["1",{"label":"Ouverture du panneau de rappel d’approbation","amount":12,"priority":"normal","touches":0}],["2",{"label":"Salle d’alerte de rappel d’approbation en cours de traitement","amount":21,"priority":"urgent","touches":0}]]);let workflowDispatchSerial=workflowDispatchJobs.size;function workflowDispatchDrive(job,activate=false){workflowDispatchCore.dataset.dispatchPriority=job.priority;workflowDispatchCore.style.setProperty('--dispatch-load',Math.min(.95,.16+job.amount/120));const bridge=activate?workflowBridgeActivate():{changed:false,summary:workflowBridgeSummary()};document.querySelector('#workflowDispatchSummary').textContent=job.label+' · '+job.amount+' élément · '+bridge.summary;announce('Tâche en cours dans la salle de rappels d’approbation :'+job.label);}function workflowDispatchRender(activeId,activate=false){workflowDispatchSelect.replaceChildren(...[...workflowDispatchJobs].map(([id,job])=>{const option=document.createElement('option');option.value=id;option.textContent=job.label+(job.priority==='urgent'?' · Urgent':'');return option;}));workflowDispatchSelect.value=activeId;workflowDispatchDrive(workflowDispatchJobs.get(activeId),activate);}workflowDispatchForm.addEventListener('submit',event=>{event.preventDefault();const data=new FormData(workflowDispatchForm);const id=String(++workflowDispatchSerial);workflowDispatchJobs.set(id,{label:document.querySelector('#workflowDispatchKind').value,amount:Math.max(1,Number(document.querySelector('#workflowDispatchAmount').value)||1),priority:data.get('workflowPriority'),touches:0});workflowDispatchRender(id,true);});workflowDispatchSelect.addEventListener('change',()=>workflowDispatchDrive(workflowDispatchJobs.get(workflowDispatchSelect.value),true));workflowDispatchCore.addEventListener('focusin',()=>{const job=workflowDispatchJobs.get(workflowDispatchSelect.value);if(!job)return;job.touches+=1;document.querySelector('#workflowDispatchSummary').textContent=job.label+' · '+job.amount+' élément · '+workflowBridgeSummary();});workflowDispatchRender('1',false);
workflowBridgeReset();
const atlasShell=document.querySelector('#atlasShell');const atlasState=document.querySelector('#atlasState');const atlasZoom=document.querySelector('#atlasZoom');const atlasZoomValue=document.querySelector('#atlasZoomValue');const atlasFocus=document.querySelector('#atlasFocus');const atlasCurrent=document.querySelector('#atlasCurrent');const atlasCount=document.querySelector('#atlasCount');const atlasModeLabel=document.querySelector('#atlasModeLabel');const atlasCards=[...document.querySelectorAll('[data-atlas-card]')];const atlasSummary=[...document.querySelectorAll('.atlas-summary article')];const atlasLog=document.querySelector('#atlasLog');const atlasModeButtons=[...atlasShell.querySelectorAll('[data-atlas-mode]')];const atlasNotes=["Rappel d’approbation de la salle","Vue d’ensemble de la salle des rappels d’approbation","Plan de la salle de rappel des approbations","Inspiration pour la salle des alertes de rappel d’approbation"];const atlasCore=document.querySelector('#workflowCore');let atlasCaptures=0;function atlasSetActive(index){atlasCards.forEach((button,buttonIndex)=>button.setAttribute('aria-pressed',String(buttonIndex===index)));atlasSummary.forEach((card,cardIndex)=>{if(cardIndex===index)card.setAttribute('data-active','true');else card.removeAttribute('data-active');});atlasCurrent.textContent=atlasNotes[index]||atlasNotes[0]||'Sans titre - focalisation';}function atlasRender(reason){const version=atlasCore?.dataset.workflowVersion||'0';const zoom=Number(atlasZoom.value);const active=Math.min(atlasNotes.length-1,Number(atlasFocus.value)||0);atlasShell.style.setProperty('--atlas-zoom',String(zoom));atlasZoomValue.textContent=zoom+'%';atlasCount.textContent=String(atlasCaptures);atlasSetActive(active);atlasModeLabel.textContent={brief:'Briefing',trace:'Suivi',handoff:'Transfert'}[atlasShell.dataset.atlasMode]||'Briefing';atlasState.textContent=reason+' · Version de base '+version;}atlasModeButtons.forEach(button=>button.addEventListener('click',()=>{atlasModeButtons.forEach(item=>item.classList.toggle('primary',item===button));atlasShell.dataset.atlasMode=button.dataset.atlasMode;atlasRender('Basculé vers'+button.textContent);announce('Mode graphe :'+button.textContent);}));atlasCards.forEach((button,index)=>button.addEventListener('click',()=>{atlasFocus.value=String(index);atlasRender('Focalisation de l’échantillon changée');announce('Focus du graphe :'+atlasNotes[index]);}));atlasZoom.addEventListener('input',()=>{atlasRender('Le niveau de zoom de la mise en page a été mis à jour');announce('Échelle du graphe '+atlasZoom.value+'%');});atlasFocus.addEventListener('change',()=>{atlasRender('Focus d’échantillonnage changé');announce('Point d’échantillonnage :'+atlasNotes[Number(atlasFocus.value)||0]);});document.querySelector('#atlasCapture').addEventListener('click',()=>{const index=Math.min(atlasNotes.length-1,Number(atlasFocus.value)||0);const note=atlasNotes[index]||atlasNotes[0]||'Sans titre - focalisation';const version=atlasCore?.dataset.workflowVersion||'0';atlasCaptures+=1;const item=document.createElement('li');item.textContent='échantillon '+atlasCaptures+' · '+note+' · Version de base '+version;const empty=atlasLog.querySelector('li')?.textContent==='En attente du premier échantillon du graphe';if(empty)atlasLog.replaceChildren(item);else atlasLog.prepend(item);while(atlasLog.children.length>6)atlasLog.lastElementChild.remove();atlasRender('Échantillon inclus '+atlasCaptures);announce('Échantillon inclus '+atlasCaptures+' · '+note);});atlasCore?.addEventListener('focusin',()=>atlasRender('L’élément principal a le focus'));atlasCore?.addEventListener('click',()=>atlasRender('Interaction de l’exemple principal'));atlasRender('En attente de création d’échantillon');
</script>
</body>
</html>