1import{d as a,l as e,o as l,b as n,c as s,e as u,j as t,v as o,k as d,t as i,h as r,B as p,n as m,f as c,R as v,m as b,q as y}from"./DQ8Q0yk1.js";import{u as f,L as k}from"./BxiX0nRS.js";import{F as M,c as h,a as g,b as x}from"./Cuwm7enT.js";const w={class:"demo-page"},P={class:"editor-panel"},S={class:"panel-card"},D={class:"field"},U={class:"panel-card"},I={class:"params-grid"},V={class:"field"},$={class:"field"},C={class:"field"},R={class:"field"},O={key:0,class:"params-grid"},_={class:"field"},j={class:"field"},A={key:1,class:"params-grid"},q={class:"field"},H={class:"field"},G={class:"field"},B={class:"field"},K={class:"summary-grid"},F={key:2,class:"error-text"},J={class:"room-panel"},L={class:"stage"},N={class:"preview-card"},Q={class:"panel"},T={class:"panel-card"},z={class:"field"},E={class:"field"},W={class:"panel-card"},X={class:"status-grid"},Y={class:"status-grid__wide"},Z={class:"status-grid__wide"},aa=y(a({__name:"fake-live-danmaku-demo",setup(a){const y=h(),aa=e(M.map(a=>`${a.name}: ${a.content}`).join("\n")),ea=e(y.displayMode??"fly"),la=e(y.spawnIntervalMs),na=e(y.moveSpeedPxPerSecond),sa=e(y.stackGapPx??8),ua=e(y.stackSpawnIntervalMinMs??800),ta=e(y.stackSpawnIntervalMaxMs??2500),oa=e(y.stackOverflowReleasePx??32),da=e(y.danmakuAreaHeight),ia=e(y.cleanupDelayMs),ra=e(y.bottomOffsetPx??0),pa=e(""),ma=e(""),ca=e(""),va=b(()=>aa.value.split("\n").map(a=>a.trim()).filter(Boolean).map((a,e)=>{const l=a.indexOf(":");return-1===l?{type:"default",name:`Viewer ${e+1}`,content:a}:{type:"default",name:a.slice(0,l).trim()||`Viewer ${e+1}`,content:a.slice(l+1).trim()||a}})),ba=e(h({defaultDanmakuPool:va.value})),{flyingDanmakus:ya,pendingQueue:fa,isRunning:ka,runtimeStatus:Ma,start:ha,stop:ga,reset:xa,enqueueUserDanmaku:wa,enqueuePaidDanmaku:Pa,enqueueMockPaidDanmaku:Sa,measureDanmaku:Da}=f(ba),Ua=b(()=>"stack"===ea.value?ba.value.stackGapPx??0:Math.round(ba.value.moveSpeedPxPerSecond*ba.value.spawnIntervalMs/1e3)),Ia=a=>`${a} diamonds`,Va=a=>{if(0===a.length)return null;return a[Math.floor(Math.random()*a.length)]??null},$a=()=>{0!==va.value.length?(ba.value=h({displayMode:ea.value,defaultDanmakuPool:va.value,spawnIntervalMs:Math.max(200,Math.round(la.value)),moveSpeedPxPerSecond:Math.max(10,Math.round(na.value)),stackGapPx:Math.max(0,Math.round(sa.value)),stackSpawnIntervalMinMs:Math.max(0,Math.round(Math.min(ua.value,ta.value))),stackSpawnIntervalMaxMs:Math.max(0,Math.round(Math.max(ua.value,ta.value))),stackOverflowReleasePx:Math.max(0,Math.round(oa.value)),danmakuAreaHeight:Math.max(240,Math.round(da.value)),cleanupDelayMs:Math.max(0,Math.round(ia.value)),bottomOffsetPx:Math.max(0,Math.round(ra.value))}),xa(),ha(),pa.value=""):pa.value="Default danmaku pool cannot be empty."},Ca=()=>{ga()},Ra=()=>{xa(),ha()},Oa=()=>{wa(ma.value),ma.value=""},_a=()=>{Pa(ca.value),ca.value=""},ja=()=>{const a=Va(g);a&&wa(a.content,a.name)},Aa=()=>{const a=Va(x);a&&Sa(a)};return l(()=>{ha()}),(a,e)=>{return n(),s("div",w,[u("section",P,[e[29]||(e[29]=u("article",{class:"panel-card hero-card"},[u("p",{class:"eyebrow"},"Danmaku Debug"),u("h1",null,"Danmaku Display Builder"),u("p",null," Tune both the fixed-cadence fly mode and the bottom-stacking stack mode in one playground. ")],-1)),u("article",S,[e[14]||(e[14]=u("h2",null,"Mock Pool",-1)),u("label",D,[e[13]||(e[13]=u("span",null,"Default Danmakus (`name: content`, one per line)",-1)),t(u("textarea",{"onUpdate:modelValue":e[0]||(e[0]=a=>aa.value=a),rows:"10",spellcheck:"false"},null,512),[[o,aa.value]])])]),u("article",U,[e[28]||(e[28]=u("h2",null,"Key Parameters",-1)),u("div",I,[u("label",V,[e[16]||(e[16]=u("span",null,"displayMode",-1)),t(u("select",{"onUpdate:modelValue":e[1]||(e[1]=a=>ea.value=a)},[...e[15]||(e[15]=[u("option",{value:"fly"}," fly ",-1),u("option",{value:"stack"}," stack ",-1)])],512),[[d,ea.value]])]),u("label",$,[e[17]||(e[17]=u("span",null,"danmakuAreaHeight",-1)),t(u("input",{"onUpdate:modelValue":e[2]||(e[2]=a=>da.value=a),min:"240",max:"900",step:"10",type:"number"},null,512),[[o,da.value,void 0,{number:!0}]])]),u("label",C,[e[18]||(e[18]=u("span",null,"bottomOffsetPx",-1)),t(u("input",{"onUpdate:modelValue":e[3]||(e[3]=a=>ra.value=a),min:"0",max:"80",step:"1",type:"number"},null,512),[[o,ra.value,void 0,{number:!0}]])]),u("label",R,[e[19]||(e[19]=u("span",null,"cleanupDelayMs",-1)),t(u("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>ia.value=a),min:"0",max:"3000",step:"20",type:"number"},null,512),[[o,ia.value,void 0,{number:!0}]])])]),"fly"===ea.value?(n(),s("div",O,[u("label",_,[e[20]||(e[20]=u("span",null,"spawnIntervalMs",-1)),t(u("input",{"onUpdate:modelValue":e[5]||(e[5]=a=>la.value=a),min:"200",max:"5000",step:"50",type:"number"},null,512),[[o,la.value,void 0,{number:!0}]])]),u("label",j,[e[21]||(e[21]=u("span",null,"moveSpeedPxPerSecond",-1)),t(u("input",{"onUpdate:modelValue":e[6]||(e[6]=a=>na.value=a),min:"10",max:"240",step:"2",type:"number"},null,512),[[o,na.value,void 0,{number:!0}]])])])):(n(),s("div",A,[u("label",q,[e[22]||(e[22]=u("span",null,"stackGapPx",-1)),t(u("input",{"onUpdate:modelValue":e[7]||
1(e[7]=a=>sa.value=a),min:"0",max:"48",step:"1",type:"number"},null,512),[[o,sa.value,void 0,{number:!0}]])]),u("label",H,[e[23]||(e[23]=u("span",null,"stackSpawnIntervalMinMs",-1)),t(u("input",{"onUpdate:modelValue":e[8]||(e[8]=a=>ua.value=a),min:"0",max:"5000",step:"50",type:"number"},null,512),[[o,ua.value,void 0,{number:!0}]])]),u("label",G,[e[24]||(e[24]=u("span",null,"stackSpawnIntervalMaxMs",-1)),t(u("input",{"onUpdate:modelValue":e[9]||(e[9]=a=>ta.value=a),min:"0",max:"5000",step:"50",type:"number"},null,512),[[o,ta.value,void 0,{number:!0}]])]),u("label",B,[e[25]||(e[25]=u("span",null,"stackOverflowReleasePx",-1)),t(u("input",{"onUpdate:modelValue":e[10]||(e[10]=a=>oa.value=a),min:"0",max:"120",step:"1",type:"number"},null,512),[[o,oa.value,void 0,{number:!0}]])])])),u("div",K,[u("div",null,[e[26]||(e[26]=u("span",null,"default pool",-1)),u("strong",null,i(va.value.length),1)]),u("div",null,[u("span",null,i("fly"===ea.value?"target gap":"stack gap"),1),u("strong",null,i(Ua.value)+"px",1)]),u("div",null,[e[27]||(e[27]=u("span",null,"flying",-1)),u("strong",null,i(r(Ma).flyingCount),1)])]),pa.value?(n(),s("p",F,i(pa.value),1)):p("",!0),u("div",{class:"button-row"},[u("button",{class:"generate-btn",onClick:$a}," Apply Config "),u("button",{class:"secondary-btn",onClick:Ca}," Stop "),u("button",{class:"secondary-btn",onClick:Ra}," Reset ")])])]),u("section",J,[u("main",L,[u("section",N,[u("div",{class:"preview-surface",style:m({height:`${ba.value.danmakuAreaHeight}px`})},[e[30]||(e[30]=u("div",{class:"preview-overlay"},null,-1)),c(k,{items:r(ya),"area-height":ba.value.danmakuAreaHeight,"display-mode":ba.value.displayMode??"fly","consumed-label":"consumed","and-made-her-label":"and made her","diamonds-label":Ia,onMeasure:r(Da)},null,8,["items","area-height","display-mode","onMeasure"])],4)])]),u("aside",Q,[u("section",T,[e[33]||(e[33]=u("h2",null,"Inject Danmaku",-1)),u("label",z,[e[31]||(e[31]=u("span",null,"User Danmaku",-1)),t(u("input",{"onUpdate:modelValue":e[11]||(e[11]=a=>ma.value=a),placeholder:"type a user danmaku",type:"text",onKeyup:v(Oa,["enter"])},null,544),[[o,ma.value]])]),u("label",E,[e[32]||(e[32]=u("span",null,"Paid Danmaku",-1)),t(u("input",{"onUpdate:modelValue":e[12]||(e[12]=a=>ca.value=a),placeholder:"type a paid danmaku",type:"text",onKeyup:v(_a,["enter"])},null,544),[[o,ca.value]])]),u("div",{class:"button-row"},[u("button",{onClick:Oa}," Send User "),u("button",{onClick:_a}," Send Paid ")]),u("div",{class:"button-row"},[u("button",{class:"secondary-btn",onClick:ja}," Random User "),u("button",{class:"secondary-btn",onClick:Aa}," Random Paid ")])]),u("section",W,[e[39]||(e[39]=u("h2",null,"Runtime Status",-1)),u("div",X,[u("div",null,[e[34]||(e[34]=u("span",null,"running",-1)),u("strong",null,i((b=r(ka),b?"yes":"no")),1)]),u("div",null,[e[35]||(e[35]=u("span",null,"pending queue",-1)),u("strong",null,i(r(fa).length),1)]),u("div",null,[e[36]||(e[36]=u("span",null,"flying count",-1)),u("strong",null,i(r(Ma).flyingCount),1)]),u("div",null,[u("span",null,i("fly"===ea.value?"spawn interval":"spawn range"),1),u("strong",null,i("fly"===ea.value?`${ba.value.spawnIntervalMs}ms`:`${ba.value.stackSpawnIntervalMinMs??0}-${ba.value.stackSpawnIntervalMaxMs??0}ms`),1)]),u("div",Y,[e[37]||(e[37]=u("span",null,"pending preview",-1)),u("strong",null,i((l=r(fa),l.map(a=>`${a.name}: ${a.content}`).join(" | ")||"empty")),1)]),u("div",Z,[e[38]||(e[38]=u("span",null,"runtime",-1)),u("strong",null,i(JSON.stringify(r(Ma))),1)])])])])])]);var l,b}}}),[["__scopeId","data-v-04600d3e"]]);export{aa as default};
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.