Tables and data display

Studio Roster Bulk Selection Table

Complete the bulk selection table for the studio roster scenario: includes real content, actionable controls, clear status feedback, and responsive layouts across sizes.

Tables and data displayBatch selection tableHTML TableCSSJavaScript
With JavaScript enabled, you can edit, run, and save this example. The fixed source is as follows:
<!doctype html>
<html lang="en" dir="ltr">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Studio Roster Bulk Selection Table</title>
  <style>
    :root { --ink:#ecf7f3; --paper:#071310; --accent:#e05263; --secondary:#79b7c7; --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:ui-monospace,"SFMono-Regular",Consolas,monospace; background:linear-gradient(color-mix(in srgb,var(--secondary) 5%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--secondary) 5%,transparent) 1px,transparent 1px),var(--paper);background-size:24px 24px; }
    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(1080px,calc(100% - 30px));margin:auto;padding:48px 0}.eyebrow{color:var(--secondary);font:700 12px/1.3 ui-monospace,monospace}.eyebrow::before{content:"> ";color:var(--accent)}.mast{display:grid;grid-template-columns:1fr auto;border:1px solid var(--secondary);padding:18px;gap:24px;align-items:center;margin-bottom:16px}.mast h1{font-family:ui-monospace,"SFMono-Regular",monospace;font-weight:700;font-size:clamp(34px,7vw,72px);letter-spacing:-.055em;margin:12px 0;line-height:1.05}.intro{margin:0;color:color-mix(in srgb,var(--ink) 72%,transparent);font:400 14px/1.7 ui-monospace,monospace}.scenario{padding:7px 10px;border:1px dashed var(--secondary);font:700 11px/1 ui-monospace,monospace}.demo{border-color:var(--secondary);border-radius:8px;box-shadow:0 0 50px color-mix(in srgb,var(--secondary) 15%,transparent);position:relative;min-height:390px;padding:26px;background:color-mix(in srgb,var(--paper) 94%,#000)}@media(max-width:700px){.page{width:calc(100% - 18px);padding:20px 0}.mast{grid-template-columns:1fr}.demo{padding:14px}}
    .panel{padding:18px;border:3px solid var(--ink);background:var(--paper);box-shadow:8px 8px 0 var(--ink)}.stack{display:grid;gap:12px}.row{display:flex;flex-wrap:wrap;gap:8px}.action{min-height:42px;padding:8px 13px;border:3px solid var(--ink);background:var(--paper);font-weight:900}.action.primary,.action.is-active{color:var(--paper);background:var(--ink)}.status{min-height:24px;padding:8px;color:var(--paper);background:var(--ink);font-weight:900}.metric{font-size:clamp(34px,8vw,76px);font-weight:900;letter-spacing:-.08em}.muted{font-weight:600}.chip{padding:5px 8px;border:2px solid var(--ink);font-weight:900}.meter{height:14px;border:3px solid var(--ink)}.meter>i{display:block;height:100%;background:var(--ink)}
    .composition-gallery{margin:0;padding:clamp(8px,2vw,18px);border:1px solid var(--ink);background:color-mix(in srgb,var(--paper) 78%,transparent)}.gallery-caption{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center;padding:15px 4px 2px;font-size:12px}.gallery-caption::before,.gallery-caption::after{content:"";height:1px;background:var(--line)}.gallery-caption strong{font:800 11px/1.2 ui-monospace,monospace;letter-spacing:.16em;text-transform:uppercase}.composition-gallery .demo{box-shadow:none}.composition-gallery .demo::before{content:"";position:absolute;inset:10px;border:1px dashed color-mix(in srgb,var(--accent) 36%,transparent);pointer-events:none}
    .special-table{width:100%;border-collapse:collapse;background:var(--paper)}.special-table caption{padding:14px 16px;text-align:left;font-weight:800}.special-table th,.special-table td{padding:13px 16px;border-top:1px solid var(--line);text-align:left}.special-table tbody tr:hover{background:color-mix(in srgb,var(--secondary) 14%,transparent)}.special-table-shell{overflow:auto;border:1px solid var(--line);border-radius:18px;background:var(--paper)}.table-special-tools{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;margin-bottom:14px}.table-special-tools select,.table-special-tools input{min-height:40px;padding:8px 11px;border:1px solid var(--line);border-radius:9px;background:var(--paper)}.bulk-table-studio{display:grid;gap:16px}.bulk-toolbar{display:flex;justify-content:space-between;gap:18px;align-items:end}.bulk-toolbar h2{margin:.35em 0}.bulk-toolbar label{display:grid;gap:8px;font-weight:800}.bulk-toolbar select{min-height:42px;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper)}.bulk-board{display:grid;grid-template-columns:minmax(0,1.2fr) 260px;gap:14px}.bulk-table-studio tbody tr[data-bulk-hidden="true"]{display:none}.bulk-table-studio tbody tr:has([data-bulk-row]:checked){background:color-mix(in srgb,var(--accent) 12%,transparent)}.bulk-table-studio tbody strong,.bulk-table-studio tbody small{display:block}.bulk-pill{display:inline-flex;align-items:center;justify-content:center;min-width:72px;padding:5px 10px;border-radius:999px;background:color-mix(in srgb,var(--secondary) 14%,transparent);font-weight:900}.bulk-summary{display:grid;align-content:start;gap:14px}.bulk-summary dl{display:grid;gap:10px;margin:0}.bulk-summary dl div{display:flex;justify-content:space-between;gap:12px}.bulk-summary dd{margin:0;font-weight:900}.bulk-summary ol{display:grid;gap:8px;padding-left:18px;margin:0}.bulk-actions{display:grid;gap:10px}.bulk-actions button{width:100%}@media(max-width:760px){.bulk-toolbar{align-items:stretch;flex-direction:column}.bulk-board{grid-template-columns:1fr}}.workflow-spatial{display:grid;gap:16px}.workflow-spatial>header{display:grid;grid-template-columns:1fr minmax(170px,.35fr) minmax(170px,.35fr);gap:18px;align-items:end;padding-bottom:16px;border-bottom:5px solid var(--ink)}.workflow-spatial h2{margin:.2em 0}.workflow-spatial header label{display:grid;grid-template-columns:1fr auto;gap:7px}.workflow-spatial header input{grid-column:1/-1;width:100%}.spatial-grid{display:grid;grid-template-columns:minmax(0,var(--spatial-width)) 20px minmax(180px,1fr);gap:0;align-items:stretch}.spatial-core{min-width:0;transform:scale(var(--spatial-zoom));transform-origin:top left;transition:transform .2s}.spatial-handle{display:grid;min-height:300px;place-items:center;border:0;border-inline:1px dashed var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);cursor:col-resize}.spatial-grid>aside{display:grid;align-content:center;gap:14px;padding:22px;background:color-mix(in srgb,var(--secondary) 14%,var(--paper))}.spatial-grid>aside strong{font-size:clamp(24px,4vw,42px)}@media(max-width:900px){.workflow-spatial>header{grid-template-columns:1fr}.spatial-grid{order:-1;grid-template-columns:1fr}.spatial-handle{min-height:44px;cursor:row-resize}.spatial-core{transform:none}}
  </style>
</head>
<body data-aesthetic="terminal" data-composition="gallery-frame">
  <main class="page">
    <header class="mast"><div><span class="eyebrow">terminal / Bulk Selection Table / BEGINNER</span><h1>Studio Roster Bulk Selection Table</h1><p class="intro">Complete the bulk selection table for the studio roster scenario: includes real content, actionable controls, clear status feedback, and responsive layouts across sizes.</p></div><span class="scenario">Studio Roster</span></header>
    <figure class="composition-gallery"><section class="demo" aria-label="Studio Roster Bulk Selection Table Interaction Area"><div id="workflowSpatial" class="workflow-spatial" style="--spatial-width:64%;--spatial-zoom:1"><header><div><span class="eyebrow">Studio Roster Table SPATIAL CANVAS</span><h2>Studio roster table adjustment panel</h2></div><label>Total record share<input id="workflowSpatialWidth" type="range" min="38" max="82" value="64"><output id="workflowSpatialWidthValue">64%</output></label><label>Content Scaling<input id="workflowSpatialZoom" type="range" min="80" max="120" value="100"><output id="workflowSpatialZoomValue">100%</output></label></header><div class="spatial-grid"><section id="workflowCore" class="workflow-core spatial-core"><!-- 11DZ_CORE_START:tables-data-bulk-selection --><section class="bulk-table-studio"><header class="bulk-toolbar"><div><span class="eyebrow">BULK SELECTION</span><h2>Studio Roster Batch Console</h2><p class="muted">Filter the current status, select records, and sync the results to the batch summary on the right.</p></div><label>Filter Status <select id="bulkStatusFilter"><option value="">All statuses</option><option value="To be processed">To be processed</option><option value="In Progress">In Progress</option><option value="Completed">Completed</option></select></label></header><div class="bulk-board"><div class="special-table-shell"><table class="special-table"><caption>Studio Roster Bulk Processing Queue</caption><thead><tr><th><input id="bulkSelectAll" type="checkbox" aria-label="Select currently visible rows" data-core-bridge="tables-data-bulk-selection"></th><th aria-sort="none">Project</th><th aria-sort="none">Status</th><th aria-sort="none">Owner</th><th aria-sort="none">Hours</th></tr></thead><tbody><tr data-bulk-hours="12"><td><input data-bulk-row type="checkbox" aria-label="Select Studio Roster Inspiration"></td><td><strong>Studio Roster Table Inspiration</strong><small>Batch 01</small></td><td><span data-bulk-status class="bulk-pill">To be processed</span></td><td data-bulk-owner-label>Group A</td><td>12h</td></tr><tr data-bulk-hours="14"><td><input data-bulk-row type="checkbox" aria-label="Select studio roster records"></td><td><strong>Studio roster records</strong><small>Batch 02</small></td><td><span data-bulk-status class="bulk-pill">In Progress</span></td><td data-bulk-owner-label>Group B</td><td>14h</td></tr><tr data-bulk-hours="16"><td><input data-bulk-row type="checkbox" aria-label="Select Studio Roster Collaboration"></td><td><strong>Studio Roster Collaboration</strong><small>Batch 03</small></td><td><span data-bulk-status class="bulk-pill">Completed</span></td><td data-bulk-owner-label>Group C</td><td>16h</td></tr><tr data-bulk-hours="18"><td><input data-bulk-row type="checkbox" aria-label="Selection work roster table progress"></td><td><strong>Studio Roster Table Progress</strong><small>Batch 04</small></td><td><span data-bulk-status class="bulk-pill">To be processed</span></td><td data-bulk-owner-label>Group A</td><td>18h</td></tr><tr data-bulk-hours="20"><td><input data-bulk-row type="checkbox" aria-label="Select Studio Roster Reminder"></td><td><strong>Studio roster table reminder</strong><small>Batch 05</small></td><td><span data-bulk-status class="bulk-pill">In Progress</span></td><td data-bulk-owner-label>Group B</td><td>20h</td></tr><tr data-bulk-hours="22"><td><input data-bulk-row type="checkbox" aria-label="Select Studio Roster Collection"></td><td><strong>Studio roster favorites</strong><small>Batch 06</small></td><td><span data-bulk-status class="bulk-pill">Completed</span></td><td data-bulk-owner-label>Group C</td><td>22h</td></tr><tr data-bulk-hours="24"><td><input data-bulk-row type="checkbox" aria-label="Select Studio Roster Table Overview"></td><td><strong>Studio roster overview</strong><small>Batch 07</small></td><td><span data-bulk-status class="bulk-pill">To be processed</span></td><td data-bulk-owner-label>Group A</td><td>24h</td></tr></tbody></table></div><aside class="bulk-summary panel"><strong>Batch summary</strong><dl><div><dt>Selected Records</dt><dd id="bulkCount">0</dd></div><div><dt>Total hours</dt><dd id="bulkHours">0h</dd></div><div><dt>Responsible Group</dt><dd id="bulkOwners">0 Group</dd></div></dl><ol id="bulkSelectedList"><li>No records selected</li></ol><div class="bulk-actions"><button id="bulkQueueReview" class="action" type="button">Add for review</button><button id="bulkCompleteRows" class="action primary" type="button">Complete Selected</button></div></aside></div></section><!-- 11DZ_CORE_END --></section><input id="workflowSpatialHandle" class="spatial-handle" type="button" value="↔" aria-label="Drag to adjust the main case preview width"><aside><strong>Studio Roster Filter View</strong><p>The Studio Roster comparison view and Studio Roster summary view will reflow according to the canvas size.</p><output id="workflowSpatialStatus">Width 64%, zoom 100%</output><input id="workflowSpatialApply" class="action primary" type="button" value="Application view"></aside></div></div><p id="status" class="status" role="status" aria-live="polite"></p></section><figcaption class="gallery-caption"><strong>Studio roster table / GALLERY 03</strong></figcaption></figure>
  </main>
  <script>
    'use strict';
    const statusOutput = document.querySelector('#status');
    const announce = message => { statusOutput.textContent = message; };
    /* 11DZ_CORE_SCRIPT_START:tables-data-bulk-selection */
const bulkRows=[...document.querySelectorAll('[data-bulk-row]')];const bulkSelectAll=document.querySelector('#bulkSelectAll');const bulkStatusFilter=document.querySelector('#bulkStatusFilter');const bulkSelectedList=document.querySelector('#bulkSelectedList');function bulkRowStatus(row){return row.querySelector('[data-bulk-status]').textContent.trim();}function bulkRowOwner(row){return row.querySelector('[data-bulk-owner-label]').textContent.trim();}function bulkVisibleRows(){return bulkRows.filter(box=>box.closest('tr').dataset.bulkHidden!=='true');}function bulkSelectedRows(){return bulkRows.filter(box=>box.checked&&box.closest('tr').dataset.bulkHidden!=='true');}function bulkSyncSummary(message){const selected=bulkSelectedRows();const owners=new Set(selected.map(box=>bulkRowOwner(box.closest('tr'))));const hours=selected.reduce((sum,box)=>sum+Number(box.closest('tr').dataset.bulkHours||0),0);document.querySelector('#bulkCount').textContent=String(selected.length);document.querySelector('#bulkHours').textContent=hours+'h';document.querySelector('#bulkOwners').textContent=owners.size+' Group';bulkSelectedList.replaceChildren(...(selected.length?selected.map(box=>{const item=document.createElement('li');const row=box.closest('tr');item.textContent=row.querySelector('strong').textContent+' · '+bulkRowStatus(row);return item;}):[Object.assign(document.createElement('li'),{textContent:'No records selected'})]));const visible=bulkVisibleRows();bulkSelectAll.indeterminate=selected.length>0&&selected.length<visible.length;bulkSelectAll.checked=visible.length>0&&selected.length===visible.length;if(message)announce(message);}function bulkApplyFilter(){const filter=bulkStatusFilter.value;bulkRows.forEach(box=>{const row=box.closest('tr');const hidden=Boolean(filter)&&bulkRowStatus(row)!==filter;row.dataset.bulkHidden=String(hidden);if(hidden)box.checked=false;});bulkSyncSummary(filter?'Filtered '+filter:'All statuses shown');}bulkSelectAll.addEventListener('change',()=>{bulkVisibleRows().forEach(box=>{box.checked=bulkSelectAll.checked;});bulkSyncSummary('Updated current visible row selection');});bulkRows.forEach(box=>box.addEventListener('change',()=>bulkSyncSummary('Batch summary updated')));bulkStatusFilter.addEventListener('change',bulkApplyFilter);document.querySelector('#bulkQueueReview').addEventListener('click',()=>{const selected=bulkSelectedRows();selected.forEach(box=>{box.closest('tr').querySelector('[data-bulk-status]').textContent='Pending Review';});bulkSyncSummary('Added to Review Queue '+selected.length+' item');});document.querySelector('#bulkCompleteRows').addEventListener('click',()=>{const selected=bulkSelectedRows();selected.forEach(box=>{const row=box.closest('tr');row.querySelector('[data-bulk-status]').textContent='Completed';box.checked=false;});bulkSyncSummary('Completed '+selected.length+' records');});bulkApplyFilter();
/* 11DZ_CORE_SCRIPT_END */
const workflowBridgeSpec={"name":"tables-data-bulk-selection","selector":"[data-core-bridge=\"tables-data-bulk-selection\"]","mode":"toggle","key":" "};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+' · Core Version '+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.setAttribute('aria-keyshortcuts',workflowBridgeSpec.key===' '?'Space':workflowBridgeSpec.key);const workflowBridgeToggleKeyMatches=event=>event.key===workflowBridgeSpec.key||event.key==='Spacebar'||event.code==='Space';workflowBridgeControl.addEventListener('keydown',event=>{if(!workflowBridgeToggleKeyMatches(event))return;event.preventDefault();});workflowBridgeControl.addEventListener('keyup',event=>{if(!workflowBridgeToggleKeyMatches(event))return;event.preventDefault();workflowBridgeControl.click();});workflowBridgeControl.addEventListener("change",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 workflowSpatial=document.querySelector('#workflowSpatial');const workflowSpatialCore=document.querySelector('#workflowCore');const workflowSpatialWidth=document.querySelector('#workflowSpatialWidth');const workflowSpatialZoom=document.querySelector('#workflowSpatialZoom');const workflowSpatialHandle=document.querySelector('#workflowSpatialHandle');const workflowSpatialState={width:64,zoom:1,dragging:false};function workflowSpatialDrive(){workflowSpatial.style.setProperty('--spatial-width',workflowSpatialState.width+'%');workflowSpatial.style.setProperty('--spatial-zoom',String(workflowSpatialState.zoom));workflowSpatialWidth.value=String(workflowSpatialState.width);workflowSpatialZoom.value=String(Math.round(workflowSpatialState.zoom*100));document.querySelector('#workflowSpatialWidthValue').textContent=workflowSpatialState.width+'%';document.querySelector('#workflowSpatialZoomValue').textContent=Math.round(workflowSpatialState.zoom*100)+'%';document.querySelector('#workflowSpatialStatus').textContent='width '+workflowSpatialState.width+'%, zoom '+Math.round(workflowSpatialState.zoom*100)+'%';announce('The studio roster table canvas has been rearranged');}workflowSpatialWidth.addEventListener('input',()=>{workflowSpatialState.width=Number(workflowSpatialWidth.value);workflowSpatialDrive();});workflowSpatialZoom.addEventListener('input',()=>{workflowSpatialState.zoom=Number(workflowSpatialZoom.value)/100;workflowSpatialDrive();});workflowSpatialHandle.addEventListener('pointerdown',event=>{workflowSpatialState.dragging=true;workflowSpatialHandle.setPointerCapture(event.pointerId);});workflowSpatialHandle.addEventListener('pointermove',event=>{if(!workflowSpatialState.dragging)return;const rect=workflowSpatial.getBoundingClientRect();workflowSpatialState.width=Math.max(38,Math.min(82,Math.round((event.clientX-rect.left)/rect.width*100)));workflowSpatialDrive();});workflowSpatialHandle.addEventListener('pointerup',event=>{workflowSpatialState.dragging=false;workflowSpatialHandle.releasePointerCapture(event.pointerId);});workflowSpatialHandle.addEventListener('wheel',event=>{event.preventDefault();workflowSpatialState.zoom=Math.max(.8,Math.min(1.2,workflowSpatialState.zoom+(event.deltaY<0?.05:-.05)));workflowSpatialDrive();},{passive:false});workflowSpatialHandle.addEventListener('keydown',event=>{if(!['ArrowLeft','ArrowRight'].includes(event.key))return;event.preventDefault();workflowSpatialState.width=Math.max(38,Math.min(82,workflowSpatialState.width+(event.key==='ArrowRight'?2:-2)));workflowSpatialDrive();});document.querySelector('#workflowSpatialApply').addEventListener('click',()=>{const bridge=workflowBridgeActivate();document.querySelector('#workflowSpatialStatus').textContent='View applied · Width '+workflowSpatialState.width+'%, zoom '+Math.round(workflowSpatialState.zoom*100)+'% · '+bridge.summary;announce(document.querySelector('#workflowSpatialStatus').textContent);});workflowSpatialDrive();
workflowBridgeReset();
  </script>
</body>
</html>
Page feedbackFound an issue or have suggestions for improvement?
Feedback features need to be used in the online version

Please enable JavaScript in the online version before submitting; local features of the current tool or example are not affected.

Go to the online version for feedback