1import{a as e,n as t,o as n,r}from"./story-Dpu8oYJx.js";var i=[`grammar1`,`grammar2`,`grammar3`],a={User:`Anna`,Age:`29`,Y1ear:`1997`,Y2ear:`2022`,Y3ear:`53`,Sx:`she`,Pn:`her`,Ob:`her`,Country:`Spain`,Capital:`Madrid`,Job:`Film Editors`,Hates:`swimming`,Likes:`violin`},o={select:document.getElementById(`grammar-select`),rules:document.getElementById(`rules`),ruleName:document.getElementById(`rule-name`),alts:document.getElementById(`alts`),preview:document.getElementById(`preview`),reroll:document.getElementById(`reroll`),download:document.getElementById(`download`)},s={},c=`grammar1`,l=null,u=null;function d(e){return e.STORY?.[0]?.trim().split(/\s+/)??[]}function f(){let t=new r(s[c]);for(let[e,n]of Object.entries(a))t.addRule(e,n);for(let[r,i]of Object.entries(e))t.addRule(r,n(i));return t}function p(){let e=s[c],t=new Set(d(e));o.rules.innerHTML=``;let n=e=>{let t=document.createElement(`div`);t.className=`group`,t.textContent=e,o.rules.appendChild(t)},r=n=>{let r=document.createElement(`button`);r.textContent=`${n} (${e[n].length})`,r.classList.toggle(`beat`,t.has(n)),r.classList.toggle(`selected`,n===l),r.addEventListener(`click`,()=>m(n)),o.rules.appendChild(r)};n(`story beats`),d(e).forEach(r),n(`meta`),[`STORY`,`TITLE`,`SCENERY`].filter(t=>e[t]).forEach(r),n(`vocabulary`),Object.keys(e).filter(e=>!t.has(e)&&![`STORY`,`TITLE`,`SCENERY`].includes(e)).forEach(r)}function m(e){l=e,o.ruleName.textContent=e,o.alts.value=s[c][e].join(` 2`),p()}function h(){let e=f(),n=s[c],r=n.TITLE?t(e.expand(`TITLE`)):`(no TITLE rule)`,i=n.SCENERY??[],a=d(n).map((n,r)=>({beat:n,text:t(e.expand(n)),query:i[r]?e.expandText(i[r]):`â`}));o.preview.innerHTML=`<h2>${r}</h2>`+a.map((e,t)=>` 3 <div class="scene"> 4 <b>${t+1} · ${e.beat}</b> 5 <p>${e.text}</p> 6 <div class="q">🌎 ${e.query}</div> 7 </div>`).join(``)}o.alts.addEventListener(`input`,()=>{if(!l)return;let e=o.alts.value.split(` 8`).map(e=>e.trim()).filter(Boolean);e.length&&(s[c][l]=e),p(),clearTimeout(u),u=setTimeout(h,400)}),o.select.addEventListener(`change`,()=>{c=o.select.value,l=null,o.ruleName.textContent=`â`,o.alts.value=``,p(),h()}),o.reroll.addEventListener(`click`,h),o.download.addEventListener(`click`,()=>{let e=new Blob([JSON.stringify(s[c],null,2)],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`${c}.json`,t.click(),URL.revokeObjectURL(t.href)});for(let e of i)s[e]=await fetch(`/grammar/${e}.json`).then(e=>e.json());p(),h();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.