ความคืบหน้างาน ไฟล์ต้นฉบับ

tracker/static/usecase-groups.js

// Module folding survives live refresh and full-page navigation.
(() => {
 const KEY='tracker-usecase-collapsed-modules';
 const read=()=>{try{const a=JSON.parse(localStorage.getItem(KEY)||'[]');return new Set(Array.isArray(a)?a.filter(x=>typeof x==='string'):[])}catch{return new Set()}};
 const state=read();
 function apply(){const collapsed=state;document.querySelectorAll('[data-uc-module]').forEach(group=>{const open=!collapsed.has(group.dataset.ucModule),button=group.querySelector('[data-uc-toggle]');button.setAttribute('aria-expanded',String(open));button.querySelector('[data-uc-chevron]').textContent=open?'▾':'▸';group.querySelectorAll('.uc-row').forEach(row=>row.hidden=!open)});}
 document.addEventListener('click',e=>{
  const toggle=e.target.closest('[data-uc-toggle]'),expand=e.target.closest('[data-uc-expand-all]'),collapse=e.target.closest('[data-uc-collapse-all]');if(!toggle&&!expand&&!collapse)return;
  const set=state;if(toggle){const key=toggle.dataset.ucToggle;set.has(key)?set.delete(key):set.add(key)}else document.querySelectorAll('[data-uc-module]').forEach(g=>{collapse?set.add(g.dataset.ucModule):set.delete(g.dataset.ucModule)});
  try{localStorage.setItem(KEY,JSON.stringify([...set]))}catch{}
  apply();
 });
 apply();document.addEventListener('tracker:updated',apply);
})();