couches flottantes et retours d’état

Centre de notifications des mises à jour du mentor

Réaliser un centre de notifications dans le contexte d’une fenêtre de mise à jour du mentor : contenu réel, contrôles actionnables, retour d’état clair et mise en page adaptée aux différentes tailles.

couches flottantes et retours d’étatCentre de notificationsHTMLCSSJavaScript
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>Centre de notifications des mises à jour du mentor</title>
  <style>
    :root { --ink:#24213a; --paper:#f6f1e8; --accent:#e6a23c; --secondary:#a8a1d8; --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:"Kaiti SC",STKaiti,"Songti SC",serif; background:radial-gradient(circle at 12% 18%,color-mix(in srgb,var(--accent) 12%,transparent) 0 1px,transparent 2px),var(--paper);background-size:19px 19px; }
    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(980px,calc(100% - 32px));margin:auto;padding:72px 0 92px}.mast{display:grid;grid-template-columns:1fr auto;transform:rotate(-.25deg);gap:32px;align-items:center;margin-bottom:46px}.mast h1{font-family:"Kaiti SC",STKaiti,serif;font-weight:700;font-size:clamp(40px,8vw,84px);letter-spacing:.02em;margin:0;line-height:1.12}.intro{max-width:650px;margin-top:18px;line-height:2}.scenario{padding:12px;border:2px solid var(--accent);color:var(--accent);transform:rotate(3deg)}.eyebrow{display:block;margin-bottom:9px;color:var(--accent);letter-spacing:.18em}.demo{border-radius:2px;transform:rotate(.12deg);box-shadow:0 30px 70px color-mix(in srgb,var(--ink) 18%,transparent);position:relative;min-height:430px;overflow:hidden;padding:clamp(28px,6vw,66px);background:color-mix(in srgb,var(--paper) 92%,#fff)}@media(max-width:700px){.page{width:calc(100% - 20px);padding:28px 0}.mast{grid-template-columns:1fr}.scenario{justify-self:start}.demo{padding:20px}}
    .panel{padding:16px;border:3px double var(--accent);background:var(--paper)}.stack{display:grid;gap:14px}.row{display:grid;grid-auto-flow:column;grid-auto-columns:max-content;gap:10px;overflow:auto}.action{padding:10px 15px;border:1px solid var(--accent);background:transparent;font-family:Didot,serif;letter-spacing:.06em}.action.primary,.action.is-active{color:var(--paper);background:var(--ink)}.metric{font-family:Didot,serif;font-size:clamp(36px,8vw,74px);letter-spacing:.04em}.status{min-height:24px;padding:9px;border-inline:1px solid var(--accent);text-align:center}.muted{line-height:1.8}.chip{padding:5px 14px;border-inline:1px solid var(--accent);letter-spacing:.1em}.meter{height:5px;background:var(--line)}.meter>i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--secondary))}
    .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}}
    .notification-home{display:grid;place-content:center;justify-items:start;min-height:390px;padding:clamp(28px,7vw,78px);border-radius:32px;color:var(--paper);background:radial-gradient(circle at 80% 10%,var(--accent),transparent 35%),var(--ink)}.notification-home h2{margin:.2em 0;font-size:clamp(38px,8vw,86px)}.notification-home>button{display:flex;gap:12px;align-items:center;padding:13px 18px;border:1px solid var(--paper);border-radius:999px;color:var(--paper);background:transparent}.notification-home>button span{display:grid;min-width:25px;height:25px;place-items:center;border-radius:50%;color:var(--ink);background:var(--secondary);font-weight:900}.notification-center-demo dialog{width:min(500px,calc(100% - 20px));height:min(680px,calc(100dvh - 20px));max-height:none;margin:10px 10px 10px auto;padding:0;border:0;border-radius:24px;color:var(--ink);background:var(--paper);box-shadow:-20px 0 70px #0005}.notification-center-demo dialog::backdrop{background:#10101099}.notification-center-demo dialog>header,.notification-center-demo dialog>footer{display:flex;justify-content:space-between;gap:15px;align-items:center;padding:18px 20px;border-bottom:1px solid var(--line)}.notification-center-demo dialog h2{margin:.2em 0}.notification-center-demo dialog header>button{width:42px;height:42px;border:0;border-radius:50%;background:var(--line);font-size:22px}.notification-filters{display:flex;gap:8px;padding:12px 20px}.notification-filters button,.notification-center-demo dialog footer button{padding:9px 13px;border:1px solid var(--line);border-radius:999px;background:transparent}.notification-filters button[aria-pressed="true"]{color:var(--paper);background:var(--ink)}.notification-list{display:grid;align-content:start;max-height:470px;overflow:auto;border-block:1px solid var(--line)}.notification-list article+article{border-top:1px solid var(--line)}.notification-list article>button{display:grid;grid-template-columns:1fr;width:100%;padding:0;border:0;background:transparent;text-align:left}.notification-list article>button>i{display:none}.notification-list article button>span{display:grid;gap:5px}.notification-list article>button{grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:16px 20px}.notification-list i{width:10px;height:10px;border-radius:50%;background:var(--accent)}.notification-list article[data-read="true"]{opacity:.58}.notification-list article[data-read="true"] i{background:transparent}.notification-list em{font-size:12px;font-style:normal}.notification-center-demo dialog>footer{border-top:1px solid var(--line);border-bottom:0;font-weight:900}.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}}.mentor-mailbox{--casework-scale:100;display:grid;gap:18px;padding:clamp(18px,4vw,30px);border:1px solid var(--line);border-radius:30px;background:linear-gradient(160deg,color-mix(in srgb,var(--secondary) 10%,transparent),color-mix(in srgb,var(--paper) 95%,transparent));box-shadow:var(--shadow)}.mentor-mailbox__head{display:flex;justify-content:space-between;gap:18px;align-items:end}.mentor-mailbox__head h2{margin:.18em 0}.mentor-mailbox__modes{display:flex;flex-wrap:wrap;gap:8px;justify-content:end}.mentor-mailbox__grid{display:grid;grid-template-columns:minmax(0,1.46fr) minmax(230px,.54fr);gap:16px}.mentor-mailbox__viewport{min-width:0;padding:clamp(14px,3vw,22px);overflow:auto;border:1px solid var(--line);border-radius:24px;background:color-mix(in srgb,var(--paper) 92%,transparent)}.mentor-mailbox__viewport>*{display:block;width:calc(10000%/var(--casework-scale));max-width:none;transform:scale(calc(var(--casework-scale)/100));transform-origin:top left}.mentor-mailbox__rail{display:grid;align-content:start;gap:14px;padding:18px;border-radius:24px;color:var(--paper);background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 90%,#08120f),color-mix(in srgb,var(--ink) 72%,#1b120e))}.mentor-mailbox__rail label{display:grid;gap:8px}.mentor-mailbox__rail input{width:100%}.mentor-mailbox__notes{display:grid;gap:10px}.mentor-mailbox__notes button{display:grid;gap:6px;padding:14px;border:1px solid #ffffff24;border-radius:16px;color:inherit;background:#ffffff10;text-align:left}.mentor-mailbox__notes button[aria-pressed="true"]{border-color:var(--secondary);background:#ffffff1a;box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--secondary) 28%,transparent)}.mentor-mailbox__notes small{line-height:1.45;opacity:.78}.mentor-mailbox__log{display:grid;gap:8px;margin:0;padding-left:18px}.mentor-mailbox[data-casework-mode="inspect"] .mentor-mailbox__viewport{outline:4px solid color-mix(in srgb,var(--accent) 26%,transparent);outline-offset:2px}.mentor-mailbox[data-casework-mode="handoff"] .mentor-mailbox__rail{background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 84%,#28120f),color-mix(in srgb,var(--ink) 68%,#11201d))}@media(max-width:920px){.mentor-mailbox__grid{grid-template-columns:1fr}}@media(max-width:560px){.mentor-mailbox__head{align-items:stretch;flex-direction:column}.mentor-mailbox__modes{justify-content:start}.mentor-mailbox__viewport>*{width:100%;transform:none}}
  </style>
</head>
<body data-aesthetic="paper" data-composition="split-note">
  <main class="page">
    <header class="mast"><div><span class="eyebrow">paper / centre de notifications / INTERMEDIATE</span><h1>Centre de notifications des mises à jour du mentor</h1><p class="intro">Réaliser un centre de notifications dans le contexte d’une fenêtre de mise à jour du mentor : contenu réel, contrôles actionnables, retour d’état clair et mise en page adaptée aux différentes tailles.</p></div><span class="scenario">Fenêtre de mise à jour du mentor</span></header>
    <div class="composition-split"><aside class="split-note"><b>CASE 02</b><span>Maîtriser la structure sémantique du centre de notifications, l’agencement adaptatif, les interactions au clavier et la synchronisation des états.</span></aside><section class="demo" aria-label="Zone interactive du centre de notifications pour la fenêtre de mise à jour du mentor"><section id="mentorMailbox" class="mentor-mailbox" data-casework-mode="queue"><header class="mentor-mailbox__head"><div><span class="eyebrow">Fenêtre de mise à jour du mentor / MENTOR MAILBOX</span><h2>Boîte de réception du mentor du centre de notifications</h2><p>Placez le centre de notifications dans l’espace de travail de la boîte de réception du mentor, et évitez la structure existante du panneau de notifications grâce à une mise à l’échelle dédiée, à des fiches d’enregistrement et à une vue de passation.</p></div><div class="mentor-mailbox__modes"><button class="action primary" type="button" data-casework-mode="queue">File d’attente</button><button class="action" type="button" data-casework-mode="inspect">Voir</button><button class="action" type="button" data-casework-mode="handoff">Transfert</button></div></header><div class="mentor-mailbox__grid"><div class="mentor-mailbox__viewport"><div class="workflow-dispatch"><aside class="dispatch-console"><span class="eyebrow">Fenêtre de mise à jour du mentor DISPATCH</span><h2>Poste de coordination de la fenêtre de mise à jour du mentor</h2><form id="workflowDispatchForm"><label>Type de tâche<select id="workflowDispatchKind"><option>Panneau d’ouverture de la fenêtre de mise à jour du mentor</option><option>Fenêtre de mise à jour du mentor en cours de traitement</option><option>Feedback de fin de mise à jour du mentor</option></select></label><label>Nombre de tâches en attente<input id="workflowDispatchAmount" type="number" min="1" max="9999" value="36"><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">Panneau d’ouverture de la fenêtre de mise à jour du mentor</option><option value="2">Fenêtre de mise à jour du mentor 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-notification-center --><section class="notification-center-demo"><div class="notification-home"><span class="eyebrow">NOTIFICATION CENTER</span><h2>Centre de notifications des mises à jour du mentor</h2><button id="notificationOpen" type="button" aria-haspopup="dialog" aria-controls="notificationCenter" data-core-bridge="overlays-feedback-notification-center">Ouvrir les notifications <span id="notificationBadge">3</span></button></div><dialog id="notificationCenter" aria-labelledby="notificationTitle"><header><div><span class="eyebrow">INBOX</span><h2 id="notificationTitle">Toutes les notifications</h2></div><button id="notificationClose" type="button" aria-label="Fermer le centre de notifications">×</button></header><div class="notification-filters" role="group" aria-label="filtre des notifications"><button type="button" data-notification-filter="all" aria-pressed="true">tout</button><button type="button" data-notification-filter="unread" aria-pressed="false">Non lu</button></div><div id="notificationList" class="notification-list"><article data-notification data-read="false"><button type="button"><i aria-hidden="true"></i><span><strong>Plan de fenêtre de mise à jour du mentor</strong><small>1 heures auparavant</small></span><em>Non lu</em></button></article><article data-notification data-read="false"><button type="button"><i aria-hidden="true"></i><span><strong>Inspiration pour la fenêtre de mise à jour du mentor</strong><small>il y a 2 heures</small></span><em>Non lu</em></button></article><article data-notification data-read="false"><button type="button"><i aria-hidden="true"></i><span><strong>Journal de la fenêtre de mise à jour du mentor</strong><small>3 heures auparavant</small></span><em>Non lu</em></button></article><article data-notification data-read="true"><button type="button"><i aria-hidden="true"></i><span><strong>Collaboration de la fenêtre de mise à jour du mentor</strong><small>Il y a 4 heures</small></span><em>Lu</em></button></article><article data-notification data-read="true"><button type="button"><i aria-hidden="true"></i><span><strong>Progression de la fenêtre de mise à jour du mentor</strong><small>Il y a 5 heures</small></span><em>Lu</em></button></article></div><footer><output id="notificationCount">3 non lues</output><button id="notificationReadAll" type="button">Tout marquer comme lu</button></footer></dialog></section><!-- 11DZ_CORE_END --></section></div></div><aside class="mentor-mailbox__rail"><label>Multiplicateur de suivi<input id="mentorMailboxScale" type="range" min="84" max="132" value="100"><output id="mentorMailboxScaleValue">100%</output></label><div class="mentor-mailbox__notes"><button type="button" data-casework-note="0" aria-pressed="true"><strong>Plan de fenêtre de mise à jour du mentor</strong><small>Vérifier les changements d’état</small></button><button type="button" data-casework-note="1" aria-pressed="false"><strong>Inspiration pour la fenêtre de mise à jour du mentor</strong><small>Confirmer l’entrée clavier</small></button><button type="button" data-casework-note="2" aria-pressed="false"><strong>Journal de la fenêtre de mise à jour du mentor</strong><small>Observer le repli pour les petits écrans</small></button><button type="button" data-casework-note="3" aria-pressed="false"><strong>Collaboration de la fenêtre de mise à jour du mentor</strong><small>Écrire le verdict actuel</small></button></div><button id="mentorMailboxCapture" class="action primary" type="button">Historique de la boîte aux lettres archivée</button><ol id="mentorMailboxLog" class="mentor-mailbox__log"><li>En attente du premier enregistrement</li></ol></aside></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-notification-center */
const notificationCenter=document.querySelector('#notificationCenter');const notifications=[...document.querySelectorAll('[data-notification]')];let notificationFilter='all';function renderNotifications(){let unread=0;notifications.forEach(item=>{const read=item.dataset.read==='true';if(!read)unread+=1;item.hidden=notificationFilter==='unread'&&read;item.querySelector('em').textContent=read?'Lu':'Non lu';});document.querySelector('#notificationBadge').textContent=unread;document.querySelector('#notificationCount').textContent=unread+' éléments non lus';announce('Actuellement, il y a '+unread+' notifications non lues');}document.querySelector('#notificationOpen').addEventListener('click',()=>notificationCenter.showModal());document.querySelector('#notificationClose').addEventListener('click',()=>notificationCenter.close());document.querySelectorAll('[data-notification-filter]').forEach(button=>button.addEventListener('click',()=>{notificationFilter=button.dataset.notificationFilter;document.querySelectorAll('[data-notification-filter]').forEach(item=>item.setAttribute('aria-pressed',String(item===button)));renderNotifications();}));notifications.forEach(item=>item.querySelector('button').addEventListener('click',()=>{item.dataset.read='true';renderNotifications();}));document.querySelector('#notificationReadAll').addEventListener('click',()=>{notifications.forEach(item=>{item.dataset.read='true';});renderNotifications();});renderNotifications();
/* 11DZ_CORE_SCRIPT_END */
const workflowBridgeSpec={"name":"overlays-feedback-notification-center","selector":"[data-core-bridge=\"overlays-feedback-notification-center\"]","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":"Panneau d’ouverture de la fenêtre de mise à jour du mentor","amount":12,"priority":"normal","touches":0}],["2",{"label":"Fenêtre de mise à jour du mentor 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 fenêtre de mise à jour du mentor :'+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 caseworkShell=document.querySelector('#mentorMailbox');const caseworkScale=document.querySelector('#mentorMailboxScale');const caseworkScaleValue=document.querySelector('#mentorMailboxScaleValue');const caseworkLog=document.querySelector('#mentorMailboxLog');const caseworkModeButtons=[...caseworkShell.querySelectorAll('[data-casework-mode]')];const caseworkNotes=[...caseworkShell.querySelectorAll('[data-casework-note]')];const caseworkLabels=["Plan de fenêtre de mise à jour du mentor","Inspiration pour la fenêtre de mise à jour du mentor","Journal de la fenêtre de mise à jour du mentor","Collaboration de la fenêtre de mise à jour du mentor"];const caseworkCore=document.querySelector('#workflowCore');let caseworkCount=0;function caseworkActiveIndex(){return Math.max(0,caseworkNotes.findIndex(button=>button.getAttribute('aria-pressed')==='true'));}function caseworkRender(reason){const version=caseworkCore?.dataset.workflowVersion||'0';const scale=Number(caseworkScale.value);caseworkShell.style.setProperty('--casework-scale',String(scale));caseworkScaleValue.textContent=scale+'%';caseworkNotes.forEach((button,index)=>button.setAttribute('aria-pressed',String(index===caseworkActiveIndex())));announce(reason+' · Version de base '+version);}caseworkModeButtons.forEach(button=>button.addEventListener('click',()=>{caseworkModeButtons.forEach(item=>item.classList.toggle('primary',item===button));caseworkShell.dataset.caseworkMode=button.dataset.caseworkMode;caseworkRender('Basculé vers'+button.textContent);}));caseworkNotes.forEach((button,index)=>button.addEventListener('click',()=>{caseworkNotes.forEach(item=>item.setAttribute('aria-pressed','false'));button.setAttribute('aria-pressed','true');caseworkRender('Carte d’enregistrement basculée');announce('Carte de suivi :'+caseworkLabels[index]);}));caseworkScale.addEventListener('input',()=>caseworkRender('L’échelle d’observation a été mise à jour'));document.querySelector('#mentorMailboxCapture').addEventListener('click',()=>{const index=caseworkActiveIndex();const version=caseworkCore?.dataset.workflowVersion||'0';caseworkCount+=1;const item=document.createElement('li');item.textContent='Enregistrement '+caseworkCount+' · '+(caseworkLabels[index]||caseworkLabels[0]||'Exemple sans nom')+' · Version de base '+version;const empty=caseworkLog.querySelector('li')?.textContent==='En attente du premier enregistrement';if(empty)caseworkLog.replaceChildren(item);else caseworkLog.prepend(item);while(caseworkLog.children.length>6)caseworkLog.lastElementChild.remove();caseworkRender('Enregistrement ajouté '+caseworkCount);});caseworkCore?.addEventListener('focusin',()=>caseworkRender('L’élément principal a le focus'));caseworkCore?.addEventListener('click',()=>caseworkRender('Interaction de l’exemple principal'));caseworkRender('Prêt à créer l’enregistrement');
  </script>
</body>
</html>
Commentaires sur la pageVous avez découvert un problème ou avez une suggestion d’amélioration ?
Les fonctions de retour nécessitent l’utilisation de la version en ligne

Veuillez activer JavaScript dans la version en ligne avant de soumettre ; les fonctionnalités locales de l’outil ou du cas ne sont pas affectées.

Aller vers la version en ligne pour envoyer des commentaires