@blkc-code/render-canvas 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/draw.d.ts +13 -3
- package/dist/draw.d.ts.map +1 -1
- package/dist/draw.js +529 -196
- package/dist/draw.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/office.d.ts +23 -2
- package/dist/office.d.ts.map +1 -1
- package/dist/office.js +132 -20
- package/dist/office.js.map +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/runtime.txt +1 -1
- package/dist/types.d.ts +9 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/world.d.ts +15 -3
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +138 -32
- package/dist/world.js.map +1 -1
- package/package.json +1 -1
- package/src/draw.ts +489 -193
- package/src/index.ts +1 -1
- package/src/office.ts +139 -21
- package/src/runtime.ts +4 -1
- package/src/types.ts +20 -4
- package/src/world.ts +139 -36
package/dist/runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(()=>{var E={desk:{w:3,h:2,spot:{x:1,y:2}},coffee:{w:2,h:1,spot:{x:0,y:1}},water:{w:1,h:1,spot:{x:0,y:1}},sofa:{w:3,h:1,spot:{x:1,y:1}},plant:{w:1,h:1},board:{w:4,h:1,spot:{x:1,y:1}},shelf:{w:2,h:1,spot:{x:0,y:1}},server:{w:1,h:1},table:{w:3,h:2,spot:{x:1,y:2}},rug:{w:4,h:3,solid:!1}},ct=["working","thinking","blocked","reviewing","idle","done","away"],ut=["todo","doing","done"],dt=["wood","carpet","tile"],C={cols:26,rows:17,rooms:[{id:"studio",name:"Studio",x:1,y:3,w:15,h:13,floor:"wood"},{id:"lounge",name:"Lounge",x:17,y:3,w:8,h:6,floor:"carpet"},{id:"quests",name:"Quests",x:17,y:10,w:8,h:6,floor:"tile"}],doors:[{x:16,y:6},{x:16,y:13},{x:23,y:9}],furniture:[{type:"desk",x:2,y:4},{type:"desk",x:7,y:4},{type:"desk",x:12,y:4},{type:"desk",x:2,y:10},{type:"desk",x:7,y:10},{type:"desk",x:12,y:10},{type:"plant",x:1,y:8},{type:"plant",x:15,y:8},{type:"server",x:15,y:15},{type:"server",x:14,y:15},{type:"shelf",x:1,y:15},{type:"coffee",x:19,y:3},{type:"water",x:21,y:3},{type:"sofa",x:22,y:3},{type:"rug",x:20,y:5},{type:"plant",x:24,y:8},{type:"board",x:19,y:10},{type:"table",x:19,y:13},{type:"plant",x:24,y:15}]},A=(t,e)=>typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e,w=(t,e=120)=>typeof t=="string"?t.slice(0,e):"",S=(t,e)=>Array.isArray(t)?t.slice(0,e):[];function V(t){let e=2166136261;for(let n=0;n<t.length;n++)e=Math.imul(e^t.charCodeAt(n),16777619);return e>>>0}var Y=["#2b1b12","#5a3a22","#a8622d","#d9b36c","#20242e","#7d2f3f","#4a5568","#e5e7eb"],Q=["#f4d3b5","#e8b98f","#c98d62","#9c6644","#6f4530","#4e2f20"],J=["#3b82f6","#ef4444","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316"],_=(t,e)=>typeof t=="string"&&/^#[0-9a-f]{3,8}$/i.test(t)?t:e,F=(t,e,n)=>n*t.cols+e;function R(t,e,n){return e>=0&&n>=0&&e<t.cols&&n<t.rows&&t.walkable[F(t,e,n)]===!0}function Z(t,e,n){if(!R(t,n.x,n.y))return null;if(e.x===n.x&&e.y===n.y)return[];let i=new Int32Array(t.cols*t.rows).fill(-1),r=F(t,e.x,e.y);i[r]=r;let s=[r];for(let o=0;o<s.length;o++){let a=s[o],u=a%t.cols,l=Math.floor(a/t.cols);if(u===n.x&&l===n.y){let h=[];for(let p=a;p!==r;p=i[p])h.unshift({x:p%t.cols,y:Math.floor(p/t.cols)});return h}for(let[h,p]of[[0,1],[0,-1],[1,0],[-1,0]]){let x=u+h,k=l+p;if(!R(t,x,k))continue;let M=F(t,x,k);i[M]===-1&&(i[M]=a,s.push(M))}}return null}function tt(t,e){let n=w(t?.id,60)||`agent-${e+1}`,i=V(n),r=ct.includes(t?.state)?t.state:"idle";return{id:n,name:w(t?.name,24)||n,role:w(t?.role,40),state:r,task:w(t?.task,120),hair:_(t?.hair,Y[i%Y.length]),skin:_(t?.skin,Q[(i>>>4)%Q.length]),shirt:_(t?.shirt,J[(i>>>8)%J.length]),x:0,y:0,path:[],facing:"down",walking:!1,rest:0,seed:i}}function et(t){return{title:w(t?.title,80),state:ut.includes(t?.state)?t.state:"todo",agent:w(t?.agent,60)}}function B(t={}){let e=Array.isArray(t?.rooms)&&t.rooms.length>0,n=Math.min(Math.max(A(t?.cols,e?20:C.cols),6),64),i=Math.min(Math.max(A(t?.rows,e?14:C.rows),6),40),r=e?S(t.rooms,40):C.rooms,s=e?S(t.doors,60):C.doors,o=Array.isArray(t?.furniture)?S(t.furniture,300):e?[]:C.furniture,a=r.map(c=>{let b=Math.min(Math.max(A(c?.x,0),0),n),y=Math.min(Math.max(A(c?.y,0),0),i);return{name:w(c?.name,24),x:b,y,w:Math.min(Math.max(A(c?.w,0),0),n-b),h:Math.min(Math.max(A(c?.h,0),0),i-y),floor:dt.includes(c?.floor)?c.floor:"wood"}}),u=new Array(n*i).fill(!1),l=(c,b,y)=>{c>=0&&b>=0&&c<n&&b<i&&(u[b*n+c]=y)};for(let c of a)for(let b=c.y;b<c.y+c.h;b++)for(let y=c.x;y<c.x+c.w;y++)l(y,b,!0);let h=s.map(c=>({x:A(c?.x,-1),y:A(c?.y,-1)})).filter(c=>c.x>=0&&c.y>=0);for(let c of h)l(c.x,c.y,!0);let p=o.filter(c=>c&&Object.hasOwn(E,c.type)).map(c=>({type:c.type,x:A(c.x,-99),y:A(c.y,-99)}));for(let c of p){let b=E[c.type];if(b.solid!==!1)for(let y=c.y;y<c.y+b.h;y++)for(let T=c.x;T<c.x+b.w;T++)l(T,y,!1)}let x={cols:n,rows:i,rooms:a,doors:h,furniture:p,walkable:u,agents:S(t?.agents,40).map(tt),tasks:S(t?.tasks,60).map(et),spots:{lounge:[],board:[]}},k=c=>{let b=E[c.type].spot;if(!b)return;let y={x:c.x+b.x,y:c.y+b.y};return R(x,y.x,y.y)?y:void 0},M=p.filter(c=>c.type==="desk").map(k).filter(c=>!!c);for(let c of p){let b=k(c);b&&((c.type==="coffee"||c.type==="sofa"||c.type==="water"||c.type==="shelf")&&x.spots.lounge.push(b),(c.type==="board"||c.type==="table")&&x.spots.board.push(b))}return x.agents.forEach((c,b)=>{c.seat=M[b],nt(x,c)}),x}function ht(t){for(let e=0;e<t.rows;e++)for(let n=0;n<t.cols;n++)if(R(t,n,e))return{x:n,y:e};return{x:0,y:0}}function I(t,e){let n=i=>i.length>0?i[(e.seed+Math.floor(e.rest*1e3))%i.length]:void 0;switch(e.state){case"working":case"thinking":case"blocked":return e.seat??n(t.spots.lounge);case"reviewing":return n(t.spots.board)??e.seat;case"idle":case"done":return n(t.spots.lounge)??e.seat;default:return}}function nt(t,e){let n=I(t,e)??e.seat??ht(t);e.x=n.x,e.y=n.y,e.path=[],e.walking=!1,e.facing=O(e)?"up":"down",e.rest=2+e.seed%50/10}var O=t=>(t.state==="working"||t.state==="thinking"||t.state==="blocked")&&t.seat!==void 0&&t.seat.x===t.x&&t.seat.y===t.y&&t.path.length===0;function ot(t,e,n){if(!n)return;let i={x:Math.round(e.x),y:Math.round(e.y)};e.path=Z(t,i,n)??[]}function D(t,e){for(let n of t.agents)if(n.state!=="away"){if(n.path.length>0){let i=n.path[0],r=i.x-n.x,s=i.y-n.y,o=Math.hypot(r,s),a=3.2*e;Math.abs(r)>Math.abs(s)?n.facing=r>0?"right":"left":s!==0&&(n.facing=s>0?"down":"up"),n.walking=!0,o<=a?(n.x=i.x,n.y=i.y,n.path.shift()):(n.x+=r/o*a,n.y+=s/o*a);continue}n.walking=!1,n.state==="idle"&&(n.rest-=e,n.rest<=0&&(n.seed=V(String(n.seed)),n.rest=3+n.seed%60/10,ot(t,n,I(t,n)))),O(n)&&(n.facing="up")}}function P(t,e){if(Array.isArray(e.tasks)&&(t.tasks=S(e.tasks,60).map(et)),!Array.isArray(e.agents))return;let n=new Map(t.agents.map(r=>[r.id,r])),i=t.furniture.filter(r=>r.type==="desk").map(r=>({x:r.x+1,y:r.y+2})).filter(r=>R(t,r.x,r.y));t.agents=S(e.agents,40).map((r,s)=>{let o=tt(r,s),a=n.get(o.id);return o.seat=i[s],a?(Object.assign(a,{name:o.name,role:o.role,task:o.task,hair:o.hair,skin:o.skin,shirt:o.shirt,seat:o.seat}),a.state!==o.state&&(a.state=o.state,o.state!=="away"&&ot(t,a,I(t,a))),a):(nt(t,o),o)})}function L(t,e,n){let i,r=1/0;for(let s of t.agents){if(s.state==="away")continue;let o=e-(s.x+.5),a=n-(s.y+.1),u=Math.hypot(o,a);Math.abs(o)<.8&&a>-1.6&&a<1.1&&u<r&&(i=s,r=u)}return i}var d=16,f=(t,e,n,i,r,s)=>{t.fillStyle=e,t.fillRect(Math.round(n),Math.round(i),r,s)},bt=["...hhhhhh...","..hhhhhhhh..","..hhhhhhhh..","..hssssssh..","..ssessess..","..ssssssss..","...ssssss..."],pt=["...hhhhhh...","..hhhhhhhh..","..hhhhhhhh..","..hhhhhhhh..","..hhhhhhhh..","..hhhhhhhh..","...ssssss..."],yt=["...hhhhhh...","..hhhhhhhh..","..hhhhhhhh..","..hhssssss..","..hhsssess..","..hsssssss..","...ssssss..."],mt=["..tttttttt..",".tttttttttt.",".stttttttts.",".stTTTTTTts."],xt=["...tttttt...","...tttttt...","...ttsttt...","...TTsTTT..."],gt=["..llllllll..","..lll..lll..","..lll..lll..","..bbb..bbb.."],kt=["..llllllll..","..lll..lll..","..bbb..lll..",".......bbb.."],Mt=["..llllllll..","..lll..lll..","..lll..bbb..","..bbb......."],At=["...llllll...","...lll.lll..","...lll.lll..","...bbb.bbb.."],St=["...llllll...","..lll..lll..",".lll....lll.",".bb......bb."],wt=["...llllll...","...llllll...","....llll....","....bbbb...."];function $(t,e,n,i,r,s=!1){e.forEach((o,a)=>{for(let u=0;u<o.length;u++){let l=o[s?o.length-1-u:u],h=r[l];h&&f(t,h,n+u,i+a,1,1)}})}function Tt(t,e){let n=parseInt(t.slice(1).padEnd(6,t.slice(-1)),16),i=r=>Math.max(0,Math.min(255,(n>>r&255)+e));return`rgb(${i(16)},${i(8)},${i(0)})`}function vt(t,e,n,i){let r=e.x*d+2,s=O(e),o={h:e.hair,s:e.skin,e:"#1a1a24",t:e.shirt,T:Tt(e.shirt,-36),l:"#39415a",b:"#1f2433"},a=Math.floor(n*8+e.seed)%2===0,u=!e.walking&&Math.floor(n*1.5+e.seed%7)%2===0?1:0,l=s?11:15,h=e.y*d+(s?6:-1)-(e.walking&&a?1:0);s&&(f(t,"#1f2937",r+1,e.y*d+3,10,9),f(t,"#374151",r+2,e.y*d+11,8,3),f(t,"#111827",r+5,e.y*d+14,2,2)),t.fillStyle="rgba(0,0,0,0.25)",t.fillRect(Math.round(r+2),Math.round(e.y*d+14),8,2),i&&(t.fillStyle="rgba(255,255,255,0.28)",t.fillRect(Math.round(r-1),Math.round(e.y*d+13),14,4));let p=e.facing==="left"||e.facing==="right",x=p?yt:e.facing==="up"?pt:bt,k=p?xt:mt,M=e.walking?p?a?St:wt:a?kt:Mt:p?At:gt,c=e.facing==="left";if($(t,x,r,h-l+u*0,o,c),$(t,k,r,h-l+x.length,o,c),!s)$(t,M,r,h-l+x.length+k.length,o,c);else if(e.state==="working"){let b=Math.floor(n*9+e.seed)%2;f(t,e.skin,r+1+b,h-l+x.length+3,1,1),f(t,e.skin,r+10-(1-b),h-l+x.length+3,1,1)}}function W(t,e,n,i){f(t,"#111827",e-1,n-1,13,11),f(t,"#ffffff",e,n,11,9),f(t,"#ffffff",e+4,n+9,3,1),f(t,"#111827",e+4,n+10,3,1),i(e,n)}function Et(t,e,n){let i=Math.round(e.x*d+2),r=Math.round(e.y*d-26+(O(e)?8:0)),s=Math.floor(n*2+e.seed%3)%2===0;if(e.state==="blocked")W(t,i,r,(o,a)=>{f(t,s?"#dc2626":"#991b1b",o+5,a+1,2,5),f(t,s?"#dc2626":"#991b1b",o+5,a+7,2,1)});else if(e.state==="thinking"){let o=Math.floor(n*3)%4;W(t,i,r,(a,u)=>{for(let l=0;l<3;l++)f(t,l<o?"#111827":"#d1d5db",a+2+l*3,u+4,2,2)})}else if(e.state==="reviewing"&&!e.walking)W(t,i,r,(o,a)=>{f(t,"#2563eb",o+4,a+1,4,1),f(t,"#2563eb",o+7,a+2,1,2),f(t,"#2563eb",o+5,a+4,2,1),f(t,"#2563eb",o+5,a+5,1,1),f(t,"#2563eb",o+5,a+7,1,1)});else if(e.state==="done"){let o=s?"#f59e0b":"#fbbf24";W(t,i,r,(a,u)=>{f(t,o,a+5,u+1,1,7),f(t,o,a+2,u+3,7,2),f(t,o,a+4,u+2,3,5)})}}function Ot(t,e,n){for(let i=e.y;i<e.y+e.h;i++)for(let r=e.x;r<e.x+e.w;r++){let s=r*d,o=i*d;if(e.floor==="carpet"){f(t,"#4c4f7a",s,o,d,d);for(let a=0;a<6;a++)f(t,"#55588a",s+(r*7+a*5)%15,o+(i*3+a*7)%15,1,1)}else if(e.floor==="tile")f(t,(r+i)%2===0?"#cfd8e3":"#bcc7d4",s,o,d,d),f(t,"#aab5c2",s,o+15,d,1),f(t,"#aab5c2",s+15,o,1,d);else{f(t,"#a06f45",s,o,d,d);let a=i%2===0?0:8;f(t,"#8f6039",s,o+7,d,1),f(t,"#8f6039",s,o+15,d,1),f(t,"#8f6039",s+(a+r*8)%16,o,1,7),f(t,"#ad7c52",s+3,o+3,4,1)}}}var it="#2f3350",Ct="#565c86",Rt="#454a70";function Lt(t,e,n){let i=new Set;for(let r of e.rooms)for(let s=r.y;s<r.y+r.h;s++)for(let o=r.x;o<r.x+r.w;o++)i.add(`${o},${s}`);for(let r of e.doors)i.add(`${r.x},${r.y}`);for(let r=0;r<e.rows;r++)for(let s=0;s<e.cols;s++){if(i.has(`${s},${r}`))continue;let o=s*d,a=r*d;i.has(`${s},${r+1}`)?(f(t,Ct,o,a,d,d),f(t,Rt,o,a+13,d,3),f(t,n.primary,o,a+12,d,1),s%4===3&&r<=3&&(f(t,"#1f2937",o+1,a+1,14,9),f(t,"#8ed0ff",o+2,a+2,12,7),f(t,"#bfe6ff",o+3,a+3,4,2),f(t,"#1f2937",o+8,a+2,1,7))):f(t,it,o,a,d,d)}for(let r of e.doors)f(t,"#6b4a2f",r.x*d,r.y*d,d,d),f(t,"#7c5637",r.x*d+2,r.y*d,12,d)}function Wt(t,e,n,i,r,s,o){if(f(t,"#6b4427",e+1,n+13,46,17),f(t,"#8a5a33",e+1,n+11,46,11),f(t,"#a06c3f",e+1,n+11,46,2),f(t,"#4a2e1a",e+3,n+22,3,9),f(t,"#4a2e1a",e+42,n+22,3,9),f(t,"#111827",e+15,n-1,18,13),f(t,"#374151",e+22,n+12,4,2),i){f(t,"#0f2a2e",e+16,n,16,11);let a=Math.floor(r*3+s%13);for(let u=0;u<4;u++){let l=3+((s>>u)+(a+u)*7)%11;f(t,u%2===0?o.primary:"#7dd3fc",e+17,n+1+u*2.5,l,1)}t.fillStyle="rgba(125,211,252,0.10)",t.fillRect(e+11,n+11,26,8)}else f(t,"#1f2937",e+16,n,16,11),f(t,"#374151",e+18,n+2,3,1);f(t,"#d1d5db",e+17,n+15,14,4),f(t,"#9ca3af",e+18,n+16,12,1),f(t,"#f3f4f6",e+38,n+14,4,4),f(t,o.primary,e+38,n+16,4,1)}function _t(t,e,n,i){f(t,"#2b2118",e,n-11,64,26),f(t,"#d9c29c",e+2,n-9,60,22);let r={todo:"#fde68a",doing:"#93c5fd",done:"#86efac"},s=8;i.tasks.slice(0,s*2).forEach((o,a)=>{let u=a%s,l=Math.floor(a/s);f(t,"#00000033",e+5+u*7,n-6+l*9,6,7),f(t,r[o.state],e+4+u*7,n-7+l*9,6,7),f(t,"#00000040",e+5+u*7,n-5+l*9,4,1)})}function st(t,e,n,i,r){let s=e.x*d,o=e.y*d;switch(e.type){case"desk":{let a=e.x+1,u=e.y+2,l=n.agents.find(h=>h.seat?.x===a&&h.seat?.y===u&&O(h)&&h.state!=="blocked");Wt(t,s,o,!!l,i,l?.seed??0,r);break}case"coffee":f(t,"#374151",s,o+2,32,14),f(t,"#6b7280",s,o+2,32,2),f(t,"#111827",s+4,o-8,14,14),f(t,"#ef4444",s+15,o-5,2,2),f(t,"#f3f4f6",s+8,o+3,5,4),f(t,"#f3f4f6",s+22,o-1,5,5);for(let a=0;a<3;a++)t.fillStyle="rgba(255,255,255,0.45)",t.fillRect(s+9+Math.round(Math.sin(i*2+a)*1.5),o-1-(i*8+a*4)%9,1,2);break;case"water":f(t,"#e5e7eb",s+3,o+3,10,13),f(t,"#7dd3fc",s+4,o-7,8,10),f(t,"#bae6fd",s+5,o-6,2,8),f(t,"#3b82f6",s+5,o+6,2,2);break;case"sofa":f(t,r.primary,s+1,o-6,46,9),f(t,"#00000030",s+1,o+1,46,2),f(t,"#4b5563",s,o+3,48,11),f(t,"#6b7280",s+3,o+3,20,7),f(t,"#6b7280",s+25,o+3,20,7),f(t,"#374151",s,o+12,48,3);break;case"plant":f(t,"#92400e",s+4,o+9,8,7),f(t,"#b45309",s+3,o+8,10,2);for(let[a,u,l,h]of[[6,-3,4,11],[2,0,5,6],[9,1,5,6],[4,-6,3,6],[9,-5,3,5]])f(t,"#15803d",s+a,o+u,l,h);f(t,"#22c55e",s+7,o-3,2,8),f(t,"#22c55e",s+3,o+1,2,3);break;case"board":_t(t,s,o,n);break;case"shelf":f(t,"#5b3a21",s,o-12,32,28);for(let a=0;a<2;a++){f(t,"#3b2413",s+2,o-10+a*13,28,11);for(let u=0;u<8;u++){let l=["#ef4444","#3b82f6","#10b981","#f59e0b","#8b5cf6"][(u*3+a)%5];f(t,l,s+3+u*3,o-8+a*13+u%3,2,9-u%3)}}break;case"server":f(t,"#111827",s+1,o-12,14,28);for(let a=0;a<5;a++){f(t,"#1f2937",s+2,o-11+a*5,12,4);let u=Math.floor(i*3+a*2+e.x)%3!==0;f(t,u?"#22c55e":"#14532d",s+3,o-10+a*5,1,1),f(t,a%2===0?"#f59e0b":"#3b82f6",s+5,o-10+a*5,1,1)}break;case"table":f(t,"#57534e",s+2,o+14,44,14),f(t,"#78716c",s+2,o+3,44,14),f(t,"#a8a29e",s+2,o+3,44,2),f(t,"#f9fafb",s+10,o+6,8,6),f(t,"#f9fafb",s+28,o+8,8,6);break;case"rug":f(t,r.primary,s,o,64,48),t.fillStyle="rgba(0,0,0,0.35)",t.fillRect(s+3,o+3,58,42),f(t,r.primary,s+6,o+6,52,1),f(t,r.primary,s+6,o+41,52,1);break}}function Ft(t,e){t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";for(let n of e.rooms){if(!n.name)continue;let i=n.name.toUpperCase(),r=n.x*d+3,s=n.y*d-12;t.fillStyle="rgba(0,0,0,0.45)",t.fillText(i,r+1,s+1),t.fillStyle="rgba(255,255,255,0.85)",t.fillText(i,r,s)}}function Bt(t,e,n,i){let r=e.name;t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";let s=Math.ceil(t.measureText(r).width)+5,o=e.x*d+8,a=Math.round(Math.max(1,Math.min(i-s-1,o-s/2))),u=Math.round(e.y*d+15);t.fillStyle=n?"#ffffff":"rgba(17,24,39,0.82)",t.fillRect(a,u,s,10),t.fillStyle=n?"#111827":"#ffffff",t.fillText(r,a+2.5,u+1.5)}function It(t,e,n){let i=[],r="";for(let s of e.split(/\s+/)){let o=r?`${r} ${s}`:s;t.measureText(o).width>n&&r?(i.push(r),r=s):r=o}return r&&i.push(r),i.slice(0,3)}var rt={working:"Working",thinking:"Thinking",blocked:"Blocked",reviewing:"Reviewing",idle:"On a break",done:"Finished",away:"Away"};function Dt(t,e,n){t.font="7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";let i=It(t,e.task||rt[e.state]||"",104),r=114,s=18+i.length*9+3,o=Math.round(Math.max(2,Math.min(n-r-2,e.x*d+8-r/2))),a=Math.round(Math.max(2,e.y*d-s-22));f(t,"#111827",o-1,a-1,r+2,s+2),f(t,"#ffffff",o,a,r,s),t.fillStyle="#111827",t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.fillText(`${e.name}: ${rt[e.state]??""}`.slice(0,26),o+4,a+4),t.fillStyle="#374151",t.font="7px ui-monospace, Menlo, Consolas, monospace",i.forEach((u,l)=>t.fillText(u,o+4,a+15+l*9))}function Pt(t,e,n){if(e.tasks.length===0)return;let i=e.tasks.filter(o=>o.state==="done").length,r=`QUESTS ${i}/${e.tasks.length}`;t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";let s=96;f(t,"rgba(17,24,39,0.85)",4,4,s,20),t.fillStyle="#ffffff",t.fillText(r,8,6.5),f(t,"#374151",8,16,s-8,4),f(t,n.primary,8,16,Math.round((s-8)*i/e.tasks.length),4)}function at(t,e,n,i,r){let s=e.cols*d;f(t,it,0,0,s,e.rows*d);for(let l of e.rooms)Ot(t,l,i);Lt(t,e,i);for(let l of e.furniture)l.type==="rug"&&st(t,l,e,n,i);let o=[];for(let l of e.furniture)l.type!=="rug"&&o.push({depth:(l.y+E[l.type].h)*d-2,draw:()=>st(t,l,e,n,i)});let a=e.agents.filter(l=>l.state!=="away");for(let l of a)o.push({depth:l.y*d+14,draw:()=>vt(t,l,n,l.id===r)});o.sort((l,h)=>l.depth-h.depth);for(let l of o)l.draw();Ft(t,e);for(let l of a)Bt(t,l,l.id===r,s);for(let l of a)l.id!==r&&Et(t,l,n);Pt(t,e,i);let u=a.find(l=>l.id===r);u&&Dt(t,u,s)}var $t=/^(#[0-9a-f]{3,8}|rgba?\([\d\s.,%/]+\)|hsla?\([\d\s.,%/a-z]+\))$/i;function Ht(t){let e=getComputedStyle(t),n=(i,r)=>{let s=e.getPropertyValue(i).trim();return $t.test(s)?s:r};return{primary:n("--blkc-color-primary","#3b82f6"),accent:n("--blkc-color-accent","#f59e0b"),background:n("--blkc-color-background","#1a1a2e"),text:n("--blkc-color-text","#ffffff")}}function H(t,e={},n={}){let i=B(e),r=t.getContext("2d");if(!r)throw new Error("This browser can't draw to a canvas.");let s=r,o=i.cols*d,a=i.rows*d,u=Ht(t),l=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,h,p=0,x=0,k=0,M=0,c=!0,b=!1,y=()=>{s.setTransform(p,0,0,p,0,0),s.imageSmoothingEnabled=!1,at(s,i,x,u,h)},T=()=>{let m=t.getBoundingClientRect().width||o,v=Math.max(1,Math.ceil(m*(typeof devicePixelRatio=="number"?devicePixelRatio:1)/o));v!==p&&(p=v,t.width=o*p,t.height=a*p,y())},U=m=>{if(b)return;if(M=requestAnimationFrame(U),!c){k=m;return}let g=Math.min((m-k)/1e3||0,.1);k=m,x+=g,D(i,g),y()},X=m=>{h=m===h?void 0:m,n.onSelect?.(h),l&&y()},G=m=>{let g=t.getBoundingClientRect();return{x:(m.clientX-g.left)/g.width*i.cols,y:(m.clientY-g.top)/g.height*i.rows}},K=m=>{let{x:g,y:v}=G(m);X(L(i,g,v)?.id)},j=m=>{let{x:g,y:v}=G(m);t.style.cursor=L(i,g,v)?"pointer":"default"};t.addEventListener("pointerdown",K),t.addEventListener("pointermove",j);let q=typeof ResizeObserver=="function"?new ResizeObserver(T):void 0;q?.observe(t);let z=typeof IntersectionObserver=="function"?new IntersectionObserver(m=>{c=m.some(g=>g.isIntersecting)}):void 0;return z?.observe(t),T(),p===0&&(p=1,y()),l||(M=requestAnimationFrame(U)),{world:i,update(m){P(i,m),l&&y()},select:X,destroy(){b=!0,cancelAnimationFrame(M),q?.disconnect(),z?.disconnect(),t.removeEventListener("pointerdown",K),t.removeEventListener("pointermove",j)}}}var lt=new Map;function Nt(t,e){lt.set(t,e)}function Ut(t,e,n){let i=[...n.querySelectorAll("button[data-blkc-agent]")],r=H(t,e,{onSelect(s){for(let o of i)o.setAttribute("aria-pressed",String(o.dataset.blkcAgent===s))}});for(let s of i)s.disabled=!1,s.addEventListener("click",()=>r.select(s.dataset.blkcAgent));return r}Nt("office",Ut);var ft=new WeakSet;function N(t=document){let e=[];for(let n of t.querySelectorAll("canvas[data-blkc-canvas]")){if(ft.has(n))continue;let i=lt.get(n.dataset.blkcCanvas??"");if(!i)continue;let r=n.closest("[data-blkc-canvas-root]")??n.parentElement??n,s=r.querySelector("script[data-blkc-canvas-data]"),o={};try{o=JSON.parse(s?.textContent||"{}")}catch{o={}}ft.add(n);let a=i(n,o,r);e.push({element:n,destroy:()=>a.destroy()})}return e}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>N()):N();})();
|
|
1
|
+
"use strict";(()=>{var P={desk:{w:3,h:2,spot:{x:1,y:2}},coffee:{w:2,h:1,spot:{x:0,y:1}},water:{w:1,h:1,spot:{x:0,y:1}},sofa:{w:3,h:1,spot:{x:1,y:1}},plant:{w:1,h:1},fern:{w:1,h:1},board:{w:4,h:1,spot:{x:1,y:1}},whiteboard:{w:3,h:1,spot:{x:1,y:1}},shelf:{w:2,h:1,spot:{x:0,y:1}},server:{w:1,h:1},table:{w:3,h:2,spot:{x:1,y:2}},rug:{w:4,h:3,solid:!1},arcade:{w:1,h:1,spot:{x:0,y:1}},fridge:{w:1,h:1,spot:{x:0,y:1}},printer:{w:1,h:1,spot:{x:0,y:1}},lamp:{w:1,h:1},beanbag:{w:1,h:1,spot:{x:0,y:1}},tv:{w:3,h:1,spot:{x:1,y:2}},vending:{w:1,h:1,spot:{x:0,y:1}},trophy:{w:1,h:1},clock:{w:1,h:1,solid:!1,wall:!0},poster:{w:1,h:1,solid:!1,wall:!0}},Pe=["working","thinking","blocked","reviewing","idle","done","away"],ze=["todo","doing","done"],_e=["wood","carpet","tile","stone","concrete","grass"],K={cols:26,rows:17,rooms:[{id:"studio",name:"Studio",x:1,y:3,w:15,h:13,floor:"wood"},{id:"lounge",name:"Lounge",x:17,y:3,w:8,h:6,floor:"carpet"},{id:"quests",name:"Quests",x:17,y:10,w:8,h:6,floor:"tile"}],doors:[{x:16,y:6},{x:16,y:13},{x:23,y:9}],furniture:[{type:"desk",x:2,y:4},{type:"desk",x:7,y:4},{type:"desk",x:12,y:4},{type:"desk",x:2,y:10},{type:"desk",x:7,y:10},{type:"desk",x:12,y:10},{type:"plant",x:1,y:8},{type:"plant",x:15,y:8},{type:"server",x:15,y:15},{type:"server",x:14,y:15},{type:"shelf",x:1,y:15},{type:"coffee",x:19,y:3},{type:"water",x:21,y:3},{type:"sofa",x:22,y:3},{type:"rug",x:20,y:5},{type:"plant",x:24,y:8},{type:"board",x:19,y:10},{type:"table",x:19,y:13},{type:"plant",x:24,y:15}]},I=(e,o)=>typeof e=="number"&&Number.isFinite(e)?Math.floor(e):o,U=(e,o=120)=>typeof e=="string"?e.slice(0,o):"",X=(e,o)=>Array.isArray(e)?e.slice(0,o):[];function Te(e){let o=2166136261;for(let s=0;s<e.length;s++)o=Math.imul(o^e.charCodeAt(s),16777619);return o>>>0}var ve=["#2b1b12","#5a3a22","#a8622d","#d9b36c","#20242e","#7d2f3f","#4a5568","#e5e7eb"],Ae=["#f4d3b5","#e8b98f","#c98d62","#9c6644","#6f4530","#4e2f20"],Se=["#3b82f6","#ef4444","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316"],ae=(e,o)=>typeof e=="string"&&/^#[0-9a-f]{3,8}$/i.test(e)?e:o,ie=(e,o,s)=>s*e.cols+o;function q(e,o,s){return o>=0&&s>=0&&o<e.cols&&s<e.rows&&e.walkable[ie(e,o,s)]===!0}function G(e,o,s){if(!q(e,s.x,s.y))return null;if(o.x===s.x&&o.y===s.y)return[];let f=new Int32Array(e.cols*e.rows).fill(-1),a=ie(e,o.x,o.y);f[a]=a;let n=[a];for(let t=0;t<n.length;t++){let i=n[t],u=i%e.cols,l=Math.floor(i/e.cols);if(u===s.x&&l===s.y){let y=[];for(let w=i;w!==a;w=f[w])y.unshift({x:w%e.cols,y:Math.floor(w/e.cols)});return y}for(let[y,w]of[[0,1],[0,-1],[1,0],[-1,0]]){let m=u+y,g=l+w;if(!q(e,m,g))continue;let S=ie(e,m,g);f[S]===-1&&(f[S]=i,n.push(S))}}return null}function Ce(e,o){let s=U(e?.id,60)||`agent-${o+1}`,f=Te(s),a=Pe.includes(e?.state)?e.state:"idle";return{id:s,name:U(e?.name,24)||s,role:U(e?.role,40),state:a,task:U(e?.task,120),area:U(e?.area,60),party:0,hair:ae(e?.hair,ve[f%ve.length]),skin:ae(e?.skin,Ae[(f>>>4)%Ae.length]),shirt:ae(e?.shirt,Se[(f>>>8)%Se.length]),x:0,y:0,path:[],facing:"down",walking:!1,rest:0,seed:f}}function Ee(e){return{title:U(e?.title,80),state:ze.includes(e?.state)?e.state:"todo",agent:U(e?.agent,60)}}function Re(e){let o=Array.isArray(e?.rooms)&&e.rooms.length>0,s=Math.min(Math.max(I(e?.cols,o?20:K.cols),6),64),f=Math.min(Math.max(I(e?.rows,o?14:K.rows),6),40),a=o?X(e.rooms,40):K.rooms,n=o?X(e.doors,60):K.doors,t=Array.isArray(e?.furniture)?X(e.furniture,300):o?[]:K.furniture,i=a.map((b,c)=>{let M=Math.min(Math.max(I(b?.x,0),0),s),O=Math.min(Math.max(I(b?.y,0),0),f);return{id:U(b?.id,60)||`room-${c+1}`,name:U(b?.name,24),x:M,y:O,w:Math.min(Math.max(I(b?.w,0),0),s-M),h:Math.min(Math.max(I(b?.h,0),0),f-O),floor:_e.includes(b?.floor)?b.floor:"wood",paths:X(b?.paths,20).filter(F=>typeof F=="string").map(F=>F.slice(0,200))}}),u=new Array(s*f).fill(!1),l=(b,c,M)=>{b>=0&&c>=0&&b<s&&c<f&&(u[c*s+b]=M)};for(let b of i)for(let c=b.y;c<b.y+b.h;c++)for(let M=b.x;M<b.x+b.w;M++)l(M,c,!0);let y=n.map(b=>({x:I(b?.x,-1),y:I(b?.y,-1)})).filter(b=>b.x>=0&&b.y>=0);for(let b of y)l(b.x,b.y,!0);let w=t.filter(b=>b&&Object.hasOwn(P,b.type)).map(b=>({type:b.type,x:I(b.x,-99),y:I(b.y,-99)}));for(let b of w){let c=P[b.type];if(c.solid!==!1)for(let M=b.y;M<b.y+c.h;M++)for(let O=b.x;O<b.x+c.w;O++)l(O,M,!1)}let m=(b,c)=>b>=0&&c>=0&&b<s&&c<f&&u[c*s+b]===!0,g=b=>{let c=P[b.type].spot;if(!c)return;let M={x:b.x+c.x,y:b.y+c.y};return m(M.x,M.y)?M:void 0},S=w.filter(b=>b.type==="desk").map(g).filter(b=>!!b),E={lounge:[],board:[]};for(let b of w){let c=g(b);c&&(["coffee","sofa","water","shelf","arcade","fridge","beanbag","vending","tv"].includes(b.type)&&E.lounge.push(c),["board","table","whiteboard"].includes(b.type)&&E.board.push(c))}return{cols:s,rows:f,rooms:i,doors:y,furniture:w,walkable:u,seats:S,spots:E}}function fe(e={}){let o={...Re(e),agents:X(e?.agents,40).map(Ce),tasks:X(e?.tasks,60).map(Ee)};for(let s of o.agents)ue(o,s);return o}function le(e,o){Object.assign(e,Re(o));for(let s of e.agents)s.seat=void 0,s.path=[],s.x=Math.round(s.x),s.y=Math.round(s.y),q(e,s.x,s.y)?(ee(e,s),j(e,s,te(e,s))):ue(e,s)}function Ue(e){for(let o=0;o<e.rows;o++)for(let s=0;s<e.cols;s++)if(q(e,s,o))return{x:s,y:o};return{x:0,y:0}}var Le=["working","thinking","blocked"];function ee(e,o){if(!Le.includes(o.state)){o.seat=void 0;return}let s=e.rooms.find(t=>t.id===o.area),f=t=>!!s&&t.x>=s.x&&t.x<s.x+s.w&&t.y>=s.y&&t.y<s.y+s.h;if(o.seat&&(!s||f(o.seat)))return;o.seat=void 0;let a=new Set(e.agents.filter(t=>t!==o&&t.seat).map(t=>`${t.seat?.x},${t.seat?.y}`)),n=e.seats.filter(t=>!a.has(`${t.x},${t.y}`));o.seat=s?n.find(f):n[0]}function Xe(e){return e.path[e.path.length-1]??{x:Math.round(e.x),y:Math.round(e.y)}}function Oe(e,o,s){let f=new Set(e.agents.filter(a=>a!==o&&a.state!=="away").map(a=>{let n=Xe(a);return`${n.x},${n.y}`}));for(let a=0;a<=4;a++)for(let n=-a;n<=a;n++)for(let t=-a;t<=a;t++){if(Math.abs(t)+Math.abs(n)!==a)continue;let i={x:s.x+t,y:s.y+n};if(q(e,i.x,i.y)&&!f.has(`${i.x},${i.y}`)&&G(e,s,i))return i}return s}function te(e,o){let s=f=>{let a=f.length>0?f[(o.seed+Math.floor(o.rest*1e3))%f.length]:void 0;return a&&Oe(e,o,a)};switch(o.state){case"working":case"thinking":case"blocked":{if(o.seat)return o.seat;let f=e.rooms.find(a=>a.id===o.area);return f&&f.w>0&&f.h>0?Oe(e,o,{x:f.x+(f.w>>1),y:f.y+(f.h>>1)}):s(e.spots.lounge)}case"reviewing":return s(e.spots.board)??o.seat;case"idle":case"done":return s(e.spots.lounge)??o.seat;default:return}}function ue(e,o){ee(e,o);let s=te(e,o)??o.seat??Ue(e);o.x=s.x,o.y=s.y,o.path=[],o.walking=!1,o.facing=N(o)?"up":"down",o.rest=2+o.seed%50/10}var N=e=>(e.state==="working"||e.state==="thinking"||e.state==="blocked")&&e.seat!==void 0&&e.seat.x===e.x&&e.seat.y===e.y&&e.path.length===0;function j(e,o,s){if(!s)return;let f={x:Math.round(o.x),y:Math.round(o.y)};o.path=G(e,f,s)??[]}function de(e,o){for(let s of e.agents)if(s.state!=="away"){if(s.path.length>0){let f=s.path[0],a=f.x-s.x,n=f.y-s.y,t=Math.hypot(a,n),i=4.5*o;Math.abs(a)>Math.abs(n)?s.facing=a>0?"right":"left":n!==0&&(s.facing=n>0?"down":"up"),s.walking=!0,t<=i?(s.x=f.x,s.y=f.y,s.path.shift()):(s.x+=a/t*i,s.y+=n/t*i);continue}s.walking=!1,s.party>0&&(s.party=Math.max(0,s.party-o)),s.state==="idle"&&(s.rest-=o,s.rest<=0&&(s.seed=Te(String(s.seed)),s.rest=3+s.seed%60/10,j(e,s,te(e,s)))),N(s)&&(s.facing="up")}}function ce(e,o){if(Array.isArray(o.tasks)&&(e.tasks=X(o.tasks,60).map(Ee)),!Array.isArray(o.agents))return;let s=new Map(e.agents.map(n=>[n.id,n])),f=X(o.agents,40).map(Ce);e.agents=f.map(n=>s.get(n.id)).filter(n=>!!n);let a=f.map(n=>{let t=s.get(n.id);if(!t){ue(e,n),e.agents=[...e.agents,n];let u=e.doors[0],l={x:n.x,y:n.y};return u&&n.state!=="away"&&(n.x=u.x,n.y=u.y,j(e,n,l)),n}Object.assign(t,{name:n.name,role:n.role,task:n.task,hair:n.hair,skin:n.skin,shirt:n.shirt});let i=t.area!==n.area;return t.area=n.area,t.state!==n.state||i?(n.state==="done"&&t.state!=="done"&&(t.party=3),t.state=n.state,ee(e,t),n.state!=="away"&&j(e,t,te(e,t))):Le.includes(t.state)&&!t.seat&&(ee(e,t),t.seat&&j(e,t,t.seat)),t});e.agents=a}function ne(e,o,s){let f,a=1/0;for(let n of e.agents){if(n.state==="away")continue;let t=o-(n.x+.5),i=s-(n.y+.1),u=Math.hypot(t,i);Math.abs(t)<.8&&i>-1.6&&i<1.1&&u<a&&(f=n,a=u)}return f}var d=16,oe="bold 7px ui-monospace, Menlo, Consolas, monospace",We="7px ui-monospace, Menlo, Consolas, monospace",C="#14141f",r=(e,o,s,f,a,n)=>{e.fillStyle=o,e.fillRect(Math.round(s),Math.round(f),a,n)};function $(e,o){if(!e.startsWith("#"))return e;let s=e.length===4?`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:e,f=parseInt(s.slice(1,7),16),a=n=>Math.max(0,Math.min(255,(f>>n&255)+o));return`rgb(${a(16)},${a(8)},${a(0)})`}function ye(e){return e>=7&&e<17?{sky:"#8ed0ff",sun:"rgba(255,244,214,0.10)",night:0}:e>=17&&e<20?{sky:"#ffae70",sun:"rgba(255,170,110,0.13)",night:.14}:e>=5&&e<7?{sky:"#ffc9a3",sun:"rgba(255,200,170,0.08)",night:.16}:{sky:"#16204a",sun:"rgba(0,0,0,0)",night:.24}}function He(e,o){e.fillStyle=C;for(let[,s,f,a,n]of o)e.fillRect(Math.round(s)-1,Math.round(f)-1,a+2,n+2);for(let[s,f,a,n,t]of o)r(e,s,f,a,n,t)}function Ne(e,o,s,f){let a=o.x*d+2,n=o.y*d+15,t=N(o),i=o.walking,u=o.facing==="left"||o.facing==="right",l=o.facing==="up",y=o.facing==="left",w=Math.floor(s*9+o.seed%5),m=i?w%4:0,g=i&&m%2===1?-1:0,S=!i&&!t&&Math.floor(s*1.4+o.seed%7)%2===0?1:0,E=o.party>0?-Math.abs(Math.round(Math.sin(s*12)*3)):0,b=o.skin,c=o.hair,M=o.shirt,O=$(M,-40),F=$(M,24),B="#39415a",R="#1f2433",W=o.seed%5,H=(o.seed>>>5)%3;e.fillStyle="rgba(0,0,0,0.28)",e.fillRect(Math.round(a+1),Math.round(n-1),10,2),f&&(e.fillStyle="rgba(255,255,255,0.45)",e.fillRect(Math.round(a-2),Math.round(n-2),16,4)),o.state==="blocked"&&(e.fillStyle=Math.floor(s*3)%2===0?"rgba(239,68,68,0.55)":"rgba(239,68,68,0.22)",e.fillRect(Math.round(a-2),Math.round(n-2),16,4));let re=g+E,p=[],A=n-13+re+S*0,v=A-8+S;if(t&&(r(e,"#1f2937",a+1,o.y*d+3,10,9),r(e,"#374151",a+2,o.y*d+11,8,3),r(e,"#111827",a+5,o.y*d+14,2,2)),!t){let k=A+7;if(u){let x=m===1?2:m===3?-2:0;p.push([B,a+4+x,k,3,5],[R,a+4+x+(y?-1:0),k+5,4,1]),p.push([$(B,-12),a+5-x,k,3,5],[R,a+5-x+(y?-1:0),k+5,4,1])}else{let x=m===1?1:0,D=m===3?1:0;p.push([B,a+2,k,3,5-x],[R,a+2,k+5-x,3,1]),p.push([B,a+7,k,3,5-D],[R,a+7,k+5-D,3,1])}}let z=i?m===1?1:m===3?-1:0:0;if(u)p.push([M,a+3,A,6,7],[O,a+3,A+6,6,1]),p.push([O,a+5+z,A+1,2,5],[b,a+5+z,A+6,2,1]);else{p.push([M,a+1,A,10,7],[O,a+1,A+6,10,1]);let k=t&&o.state==="working",x=Math.floor(s*10+o.seed)%2;p.push([O,a-1,A+1+z+(k?-x:0),2,5]),p.push([O,a+11,A+1-z+(k?x-1:0),2,5]),p.push([b,a-1,A+6+z+(k?-x:0),2,1]),p.push([b,a+11,A+6-z+(k?x-1:0),2,1]),!l&&H===2&&p.push(["#f3f4f6",a+4,A,4,3],[o.seed%2?"#ef4444":"#1d4ed8",a+5,A,2,5]),!l&&H===1&&p.push([F,a+3,A,6,2],[O,a+5,A+2,2,4]),l&&H===1&&p.push([F,a+2,A,8,3])}if(p.push([b,a+1,v,10,8]),l)p.push([c,a+1,v,10,7]);else if(u){let k=y?a+7:a+1;p.push([c,a+1,v,10,3],[c,k,v,4,6]);let x=Math.floor(s*.7+o.seed%11)%7===0;p.push([x?$(b,-40):"#1a1a24",y?a+3:a+8,v+4,1,x?1:2])}else{p.push([c,a+1,v,10,3],[c,a+1,v+3,1,2],[c,a+10,v+3,1,2]);let k=Math.floor(s*.7+o.seed%11)%7===0;p.push([k?$(b,-40):"#1a1a24",a+3,v+4,2,k?1:2]),p.push([k?$(b,-40):"#1a1a24",a+7,v+4,2,k?1:2]),p.push([$(b,-28),a+5,v+6,2,1])}if(W===1&&p.push([c,a,v+2,2,8],[c,a+10,v+2,2,8]),W===2&&p.push([c,a+4,v-3,4,3]),W===3&&p.push([c,a+2,v-2,2,2],[c,a+5,v-3,2,3],[c,a+8,v-2,2,2]),W===4&&(p.push([F,a,v-1,12,3]),!l&&!u&&p.push([O,a+1,v+2,10,1]),u&&p.push([O,y?a-2:a+9,v+1,5,1])),He(e,p),o.party>0){let k=["#f59e0b","#ec4899","#22c55e","#3b82f6","#a855f7"];for(let x=0;x<10;x++){let D=(s*1.1+x*.137)%1,Z=x*2.4+o.seed;r(e,k[x%k.length],a+6+Math.cos(Z)*(4+D*14),n-22-D*6+D*D*26,2,2)}}}function Q(e,o,s,f){r(e,C,o-1,s-1,13,11),r(e,"#ffffff",o,s,11,9),r(e,"#ffffff",o+4,s+9,3,1),r(e,C,o+4,s+10,3,1),f(o,s)}function Ye(e,o,s){let f=Math.round(o.x*d+2),a=Math.round(o.y*d-22+(N(o)?2:-2)),n=Math.floor(s*2+o.seed%3)%2===0;if(o.state==="blocked")Q(e,f,a,(t,i)=>{r(e,n?"#dc2626":"#991b1b",t+5,i+1,2,5),r(e,n?"#dc2626":"#991b1b",t+5,i+7,2,1)});else if(o.state==="thinking"){let t=Math.floor(s*3)%4;Q(e,f,a,(i,u)=>{for(let l=0;l<3;l++)r(e,l<t?"#111827":"#d1d5db",i+2+l*3,u+4,2,2)})}else if(o.state==="reviewing"&&!o.walking)Q(e,f,a,(t,i)=>{r(e,"#2563eb",t+4,i+1,4,1),r(e,"#2563eb",t+7,i+2,1,2),r(e,"#2563eb",t+5,i+4,2,1),r(e,"#2563eb",t+5,i+5,1,1),r(e,"#2563eb",t+5,i+7,1,1)});else if(o.state==="done"){let t=n?"#f59e0b":"#fbbf24";Q(e,f,a,(i,u)=>{r(e,t,i+5,u+1,1,7),r(e,t,i+2,u+3,7,2),r(e,t,i+4,u+2,3,5)})}else o.state==="idle"&&!o.walking&&o.seed%3===0&&Q(e,f,a,(t,i)=>{r(e,"#92400e",t+3,i+3,4,4),r(e,"#d97706",t+3,i+3,4,1),r(e,"#92400e",t+7,i+4,1,2),n&&r(e,"#9ca3af",t+4,i+1,1,1)})}function Ke(e,o){for(let s=o.y;s<o.y+o.h;s++)for(let f=o.x;f<o.x+o.w;f++){let a=f*d,n=s*d,t=(f*73+s*151)%17;switch(o.floor){case"carpet":r(e,"#4c4f7a",a,n,d,d);for(let i=0;i<8;i++)r(e,i%2?"#55588a":"#454874",a+(f*7+i*5)%15,n+(s*3+i*7)%15,1,1);break;case"tile":r(e,(f+s)%2===0?"#d6dee8":"#c2ccd8",a,n,d,d),r(e,"#aab5c2",a,n+15,d,1),r(e,"#aab5c2",a+15,n,1,d),r(e,"#e8eef5",a+1,n+1,5,1);break;case"stone":r(e,t%3===0?"#8d93a3":"#9aa0b0",a,n,d,d),r(e,"#7a8090",a,n+15,d,1),r(e,"#7a8090",a+(s%2?7:15),n,1,15),r(e,"#adb3c2",a+2,n+2,3,1);break;case"concrete":r(e,"#6b7280",a,n,d,d);for(let i=0;i<5;i++)r(e,i%2?"#747b89":"#636a78",a+(f*11+i*3)%15,n+(s*5+i*5)%15,1,1);t===3&&r(e,"#596070",a+3,n+8,8,1);break;case"grass":r(e,"#3f8f4f",a,n,d,d);for(let i=0;i<7;i++)r(e,i%3?"#4aa35c":"#347a43",a+(f*5+i*9)%15,n+(s*7+i*3)%14,1,2);break;default:{let i=s%2===0?"#a57448":"#9c6c42";r(e,i,a,n,d,d),r(e,"#8a5d36",a,n+7,d,1),r(e,"#8a5d36",a,n+15,d,1),r(e,"#8a5d36",a+(f*8+(s%2?8:0))%16,n,1,7),r(e,"#8a5d36",a+(f*8+(s%2?0:8))%16,n+8,1,7),r(e,"#b4835a",a+t%9+2,n+3,4,1),r(e,"#b4835a",a+t%7+4,n+11,3,1)}}}}var Fe="#2a2d48",je="#5c628f",V="#4a4f78",qe="#6d74a4";function Ge(e,o,s,f){let a=new Set;for(let t of o.rooms)for(let i=t.y;i<t.y+t.h;i++)for(let u=t.x;u<t.x+t.w;u++)a.add(`${u},${i}`);let n=new Set(o.doors.map(t=>`${t.x},${t.y}`));for(let t=0;t<o.rows;t++)for(let i=0;i<o.cols;i++){let u=`${i},${t}`;if(a.has(u)||n.has(u))continue;let l=i*d,y=t*d;a.has(`${i},${t+1}`)?(r(e,je,l,y,d,d),r(e,qe,l,y,d,1),r(e,V,l,y+12,d,4),r(e,s.primary,l,y+11,d,1),i%4===3&&!o.furniture.some(w=>P[w.type].wall&&w.x===i&&w.y===t)&&(r(e,"#1f2937",l+1,y+1,14,9),r(e,f.sky,l+2,y+2,12,7),r(e,$(f.sky,40),l+3,y+3,4,2),r(e,"#1f2937",l+8,y+2,1,7),f.night>.3&&(r(e,"#fef3c7",l+4,y+3,1,1),r(e,"#fef3c7",l+11,y+5,1,1)))):(r(e,Fe,l,y,d,d),a.has(`${i},${t-1}`)&&r(e,"#20233a",l,y,d,3),a.has(`${i-1},${t}`)&&r(e,"#20233a",l,y,2,d),a.has(`${i+1},${t}`)&&r(e,"#20233a",l+14,y,2,d))}for(let t of o.doors){let i=t.x*d,u=t.y*d,l=a.has(`${t.x},${t.y-1}`)||a.has(`${t.x},${t.y+1}`);r(e,"#7c5637",i,u,d,d);for(let y=2;y<16;y+=4)r(e,"#6b4a2f",l?i:i+y,l?u+y:u,l?d:1,l?1:d);l?(r(e,V,i,u,2,d),r(e,V,i+14,u,2,d)):(r(e,V,i,u,d,2),r(e,V,i,u+14,d,2))}}function Qe(e,o){e.font=oe,e.textBaseline="top";for(let s of o.rooms){if(!s.name)continue;let f=s.name.toUpperCase(),a=Math.ceil(e.measureText(f).width)+6,n=s.x*d+3,t=s.y*d-13;r(e,"#1c1f33",n,t,a,10),r(e,"#2f3350",n+1,t+1,a-2,8),e.fillStyle="#f8fafc",e.fillText(f,n+3,t+1.5)}}function he(e,o,s,f){r(e,Fe,0,0,o.cols*d,o.rows*d);for(let a of o.rooms)Ke(e,a);Ge(e,o,s,f);for(let a of o.furniture)a.type==="rug"&&be(e,a,o,0,s);for(let a of o.furniture)P[a.type].wall&&be(e,a,o,0,s);if(f.sun!=="rgba(0,0,0,0)"){e.fillStyle=f.sun;for(let a of o.rooms)for(let n=a.x;n<a.x+a.w;n++)n%4===3&&e.fillRect(n*d+2,a.y*d,12,Math.min(a.h,3)*d)}}function Ve(e,o,s,f,a,n,t,i){if(r(e,"#55351d",o+1,s+22,46,8),r(e,"#6b4427",o+1,s+13,46,10),r(e,"#8a5a33",o+1,s+10,46,12),r(e,"#a87545",o+1,s+10,46,2),r(e,"#3b2413",o+3,s+22,3,9),r(e,"#3b2413",o+42,s+22,3,9),r(e,"#55351d",o+30,s+23,12,7),r(e,"#7c5637",o+31,s+24,10,2),r(e,"#d4a24e",o+35,s+24,2,1),r(e,"#7c5637",o+31,s+27,10,2),r(e,"#d4a24e",o+35,s+27,2,1),r(e,C,o+14,s-3,20,15),r(e,"#374151",o+22,s+12,4,2),r(e,"#4b5563",o+19,s+14,10,1),i)r(e,"#3f0f14",o+15,s-2,18,13),Math.floor(a*2)%2===0&&(r(e,"#ef4444",o+23,s,2,6),r(e,"#ef4444",o+23,s+7,2,2));else if(f){r(e,"#0f2a2e",o+15,s-2,18,13);let u=Math.floor(a*3+n%13);for(let l=0;l<5;l++){let y=3+((n>>l&7)+(u+l)*7)%12;r(e,l%3===0?t.primary:l%3===1?"#7dd3fc":"#fcd34d",o+16+l%2*2,s-1+l*2.2,y,1)}e.fillStyle="rgba(125,211,252,0.12)",e.fillRect(o+10,s+11,28,8)}else r(e,"#1f2937",o+15,s-2,18,13),r(e,"#374151",o+17,s,3,1);r(e,"#d1d5db",o+16,s+15,16,5);for(let u=0;u<2;u++)for(let l=0;l<7;l++)r(e,"#9ca3af",o+17+l*2,s+16+u*2,1,1);r(e,"#e5e7eb",o+34,s+16,3,4),r(e,"#f3f4f6",o+40,s+13,5,5),r(e,t.primary,o+40,s+15,5,1),r(e,"#fde68a",o+4,s+13,7,6),r(e,"#fbbf24",o+5,s+15,5,1)}function Je(e,o,s,f){r(e,"#3a2c1e",o,s-12,64,27),r(e,"#d9c29c",o+2,s-10,60,23);for(let t=0;t<40;t++)r(e,"#c9b08a",o+3+t*37%58,s-9+t*13%21,1,1);let a={todo:"#fde68a",doing:"#93c5fd",done:"#86efac"},n=8;f.tasks.slice(0,n*2).forEach((t,i)=>{let u=i%n,l=Math.floor(i/n);r(e,"#00000033",o+5+u*7,s-7+l*10,6,8),r(e,a[t.state],o+4+u*7,s-8+l*10,6,8),r(e,"#ef4444",o+6+u*7,s-8+l*10,2,1),r(e,"#00000040",o+5+u*7,s-5+l*10,4,1),r(e,"#00000040",o+5+u*7,s-3+l*10,3,1)})}function be(e,o,s,f,a){let n=o.x*d,t=o.y*d;switch(o.type){case"desk":{let i=o.x+1,u=o.y+2,l=s.agents.find(y=>y.seat?.x===i&&y.seat?.y===u&&N(y));Ve(e,n,t,!!l,f,l?.seed??0,a,l?.state==="blocked");break}case"coffee":r(e,"#374151",n,t+2,32,14),r(e,"#6b7280",n,t+2,32,2),r(e,C,n+4,t-9,15,15),r(e,"#27272a",n+5,t-8,13,13),r(e,Math.floor(f*2)%2?"#ef4444":"#7f1d1d",n+15,t-6,2,2),r(e,"#52525b",n+7,t-6,6,4),r(e,"#f3f4f6",n+8,t+3,5,4),r(e,"#f3f4f6",n+23,t-1,5,5),r(e,"#92400e",n+24,t,3,1);for(let i=0;i<3;i++)e.fillStyle="rgba(255,255,255,0.5)",e.fillRect(n+9+Math.round(Math.sin(f*2+i)*1.5),t-1-(f*8+i*4)%9,1,2);break;case"water":r(e,"#d1d5db",n+3,t+3,10,13),r(e,"#9ca3af",n+3,t+14,10,2),r(e,"#60a5fa",n+4,t-8,8,11),r(e,"#bae6fd",n+5,t-7,2,9),r(e,"#3b82f6",n+5,t+6,2,2),r(e,"#ef4444",n+9,t+6,2,2),Math.floor(f*.4+o.x)%5===0&&r(e,"#e0f2fe",n+8,t-2-f*6%7,1,1);break;case"sofa":r(e,$(a.primary,-60),n+1,t-7,46,11),r(e,$(a.primary,-30),n+2,t-6,44,3),r(e,"#4b5563",n,t+3,48,11),r(e,"#6b7280",n+3,t+3,20,7),r(e,"#6b7280",n+25,t+3,20,7),r(e,"#374151",n,t+12,48,3),r(e,"#374151",n-1,t-2,4,16),r(e,"#374151",n+45,t-2,4,16);break;case"plant":r(e,"#92400e",n+4,t+9,8,7),r(e,"#b45309",n+3,t+8,10,2);for(let[i,u,l,y]of[[6,-3,4,11],[2,0,5,6],[9,1,5,6],[4,-6,3,6],[9,-5,3,5]])r(e,"#15803d",n+i,t+u,l,y);r(e,"#22c55e",n+7,t-3,2,8),r(e,"#22c55e",n+3,t+1,2,3),r(e,"#4ade80",n+10,t-4,1,3);break;case"fern":r(e,"#57534e",n+3,t+10,10,6),r(e,"#78716c",n+2,t+9,12,2);for(let i=0;i<7;i++){let u=i-3;for(let l=0;l<5;l++)r(e,l%2?"#16a34a":"#15803d",n+7+u*(l/2+1),t+8-l*2+Math.abs(u),2,2)}break;case"board":Je(e,n,t,s);break;case"whiteboard":r(e,"#9ca3af",n,t-10,48,22),r(e,"#f9fafb",n+2,t-8,44,18),r(e,"#3b82f6",n+5,t-5,14,1),r(e,"#3b82f6",n+5,t-2,9,1),r(e,"#ef4444",n+24,t-6,8,6),r(e,"#f9fafb",n+25,t-5,6,4),r(e,"#10b981",n+8,t+3,20,1),r(e,"#10b981",n+27,t+2,1,3),r(e,"#6b7280",n+2,t+10,44,2);break;case"shelf":r(e,"#5b3a21",n,t-12,32,28);for(let i=0;i<2;i++){r(e,"#3b2413",n+2,t-10+i*13,28,11);for(let u=0;u<8;u++){let l=["#ef4444","#3b82f6","#10b981","#f59e0b","#8b5cf6"][(u*3+i+o.x)%5];r(e,l,n+3+u*3,t-8+i*13+u%3,2,9-u%3),r(e,$(l,40),n+3+u*3,t-6+i*13,2,1)}}break;case"server":r(e,C,n,t-13,16,29),r(e,"#1f2937",n+1,t-12,14,27);for(let i=0;i<5;i++){r(e,"#111827",n+2,t-11+i*5,12,4);let u=Math.floor(f*3+i*2+o.x)%3!==0;r(e,u?"#22c55e":"#14532d",n+3,t-10+i*5,1,1),r(e,i%2===0?"#f59e0b":"#3b82f6",n+5,t-10+i*5,1,1),r(e,"#374151",n+8,t-10+i*5,5,1)}break;case"table":r(e,"#44403c",n+2,t+16,44,12),r(e,"#78716c",n+2,t+3,44,14),r(e,"#a8a29e",n+2,t+3,44,2),r(e,"#f9fafb",n+10,t+6,8,6),r(e,"#f9fafb",n+28,t+8,8,6),r(e,"#1f2937",n+12,t+8,4,1),r(e,"#3b82f6",n+30,t+10,4,1);break;case"rug":r(e,a.primary,n,t,64,48),e.fillStyle="rgba(0,0,0,0.42)",e.fillRect(n+3,t+3,58,42),r(e,a.primary,n+6,t+6,52,1),r(e,a.primary,n+6,t+41,52,1),r(e,a.primary,n+6,t+6,1,36),r(e,a.primary,n+57,t+6,1,36);for(let i=0;i<6;i++)r(e,a.primary,n+12+i*8,t+22,4,4);break;case"arcade":r(e,C,n,t-14,16,30),r(e,"#4c1d95",n+1,t-13,14,28),r(e,"#111827",n+3,t-10,10,9),r(e,["#22c55e","#ec4899","#38bdf8"][Math.floor(f*2)%3],n+4+Math.floor(f*4)%7,t-8+Math.floor(f*3)%5,2,2),r(e,"#f59e0b",n+3,t-13,10,2),r(e,"#27272a",n+2,t+1,12,4),r(e,"#ef4444",n+4,t+2,2,2),r(e,"#3b82f6",n+9,t+2,2,2);break;case"fridge":r(e,C,n+1,t-12,14,28),r(e,"#e5e7eb",n+2,t-11,12,26),r(e,"#9ca3af",n+2,t-3,12,1),r(e,"#6b7280",n+11,t-8,1,3),r(e,"#6b7280",n+11,t,1,5),r(e,"#fde68a",n+4,t-9,3,3),r(e,"#fca5a5",n+5,t+3,3,3);break;case"printer":r(e,"#4b5563",n+2,t+8,12,8),r(e,C,n+1,t-2,14,11),r(e,"#d1d5db",n+2,t-1,12,9),r(e,"#f9fafb",n+4,t-5-(Math.floor(f)%4===0?1:0),8,5),r(e,"#22c55e",n+11,t+1,2,1),r(e,"#9ca3af",n+3,t+5,10,1);break;case"lamp":r(e,"#374151",n+5,t+13,6,3),r(e,"#4b5563",n+7,t-4,2,17),r(e,C,n+2,t-10,12,8),r(e,"#fde68a",n+3,t-9,10,6),r(e,"#fef3c7",n+4,t-8,4,2);break;case"beanbag":r(e,C,n,t+3,16,13),r(e,$(a.primary,-50),n+1,t+4,14,11),r(e,$(a.primary,-20),n+3,t+5,8,4),r(e,"#00000040",n+1,t+13,14,2);break;case"tv":r(e,"#3b2413",n+2,t+8,44,8),r(e,"#5b3a21",n+2,t+8,44,2),r(e,C,n+4,t-14,40,22),r(e,"#0b1120",n+5,t-13,38,20);for(let i=0;i<9;i++){let u=2+(i*5+Math.floor(f*3))%12;r(e,i%3===0?a.primary:i%3===1?"#38bdf8":"#f472b6",n+8+i*4,t+5-u,3,u)}break;case"vending":r(e,C,n,t-14,16,30),r(e,"#b91c1c",n+1,t-13,14,28),r(e,"#0f172a",n+3,t-11,8,16);for(let i=0;i<3;i++)for(let u=0;u<2;u++)r(e,["#fbbf24","#34d399","#60a5fa","#f472b6"][(i+u*2)%4],n+4+u*3,t-10+i*5,2,4);r(e,"#d1d5db",n+12,t-9,2,6),r(e,"#111827",n+3,t+8,10,4);break;case"trophy":r(e,"#6b4427",n+2,t+8,12,8),r(e,"#8a5a33",n+2,t+8,12,2),r(e,"#78350f",n+5,t+5,6,3),r(e,"#f59e0b",n+7,t+1,2,4),r(e,C,n+3,t-8,10,10),r(e,"#fbbf24",n+4,t-7,8,8),r(e,"#fde68a",n+5,t-6,2,5),r(e,"#fbbf24",n+1,t-6,3,1),r(e,"#fbbf24",n+12,t-6,3,1);break;case"clock":{r(e,C,n+3,t+1,10,10),r(e,"#f9fafb",n+4,t+2,8,8),r(e,"#1f2937",n+8,t+3,1,3),r(e,"#1f2937",n+8,t+6,3,1);break}case"poster":{let i=["#7c3aed","#0ea5e9","#db2777","#059669"],u=i[(o.x+o.y)%i.length];r(e,C,n+2,t,12,11),r(e,u,n+3,t+1,10,9),r(e,$(u,60),n+5,t+3,6,3),r(e,"#f9fafb",n+5,t+7,6,1);break}}}function Ze(e,o,s,f){e.font=oe,e.textBaseline="top";let a=Math.ceil(e.measureText(o.name).width)+5,n=Math.round(Math.max(1,Math.min(f-a-1,o.x*d+8-a/2))),t=Math.round(o.y*d+16);e.fillStyle=s?"#ffffff":"rgba(17,24,39,0.82)",e.fillRect(n,t,a,10),e.fillStyle=s?"#111827":"#ffffff",e.fillText(o.name,n+2.5,t+1.5)}function et(e,o,s){let f=[],a="";for(let n of o.split(/\s+/)){let t=a?`${a} ${n}`:n;e.measureText(t).width>s&&a?(f.push(a),a=n):a=t}return a&&f.push(a),f.slice(0,3)}var $e={working:"Working",thinking:"Thinking",blocked:"Blocked",reviewing:"Reviewing",idle:"On a break",done:"Finished",away:"Away"};function tt(e,o,s){e.font=We,e.textBaseline="top";let f=s.rooms.find(l=>l.id===o.area),a=et(e,o.task||$e[o.state]||"",110),n=120,t=18+a.length*9+(f?9:0)+3,i=Math.round(Math.max(2,Math.min(s.cols*d-n-2,o.x*d+8-n/2))),u=Math.round(Math.max(2,o.y*d-t-24));r(e,C,i-1,u-1,n+2,t+2),r(e,"#ffffff",i,u,n,t),e.fillStyle="#111827",e.font=oe,e.fillText(`${o.name}: ${$e[o.state]??""}`.slice(0,28),i+4,u+4),e.fillStyle="#374151",e.font=We,a.forEach((l,y)=>e.fillText(l,i+4,u+15+y*9)),f&&(e.fillStyle="#6b7280",e.fillText(`In ${f.name}`.slice(0,28),i+4,u+15+a.length*9))}function nt(e,o,s){if(o.tasks.length===0)return;let f=o.tasks.filter(n=>n.state==="done").length;e.font=oe,e.textBaseline="top";let a=96;r(e,"rgba(17,24,39,0.85)",4,4,a,20),e.fillStyle="#ffffff",e.fillText(`QUESTS ${f}/${o.tasks.length}`,8,6.5),r(e,"#374151",8,16,a-8,4),r(e,s.primary,8,16,Math.round((a-8)*f/o.tasks.length),4)}function Be(e,o,s,f,a,n,t){let i=o.cols*d,u=o.rows*d;n?e.drawImage(n,0,0,i,u):he(e,o,f,a);let l=[];for(let m of o.furniture){let g=P[m.type];g.solid!==!1&&l.push({depth:(m.y+g.h)*d-2,draw:()=>be(e,m,o,s,f)})}let y=o.agents.filter(m=>m.state!=="away");for(let m of y)l.push({depth:m.y*d+14,draw:()=>Ne(e,m,s,m.id===t)});l.sort((m,g)=>m.depth-g.depth);for(let m of l)m.draw();if(a.night>0){e.fillStyle=`rgba(12,14,48,${a.night})`,e.fillRect(0,0,i,u),e.save(),e.globalCompositeOperation="lighter";let m=(g,S,E,b)=>{let c=e.createRadialGradient(g,S,1,g,S,E);c.addColorStop(0,b),c.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=c,e.fillRect(g-E,S-E,E*2,E*2)};for(let g of o.furniture)g.type==="lamp"&&m(g.x*d+8,g.y*d,36,"rgba(253,224,139,0.30)"),(g.type==="arcade"||g.type==="vending"||g.type==="tv")&&m(g.x*d+8,g.y*d,26,"rgba(125,211,252,0.16)"),g.type==="desk"&&o.agents.some(S=>S.seat?.x===g.x+1&&S.seat?.y===g.y+2&&N(S))&&m(g.x*d+24,g.y*d+8,30,"rgba(125,211,252,0.26)");e.restore()}Qe(e,o);for(let m of y)Ze(e,m,m.id===t,i);for(let m of y)m.id!==t&&Ye(e,m,s);nt(e,o,f);let w=y.find(m=>m.id===t);w&&tt(e,w,o)}var ot=/^(#[0-9a-f]{3,8}|rgba?\([\d\s.,%/]+\)|hsla?\([\d\s.,%/a-z]+\))$/i,me=4;function st(e){let o=getComputedStyle(e),s=(f,a)=>{let n=o.getPropertyValue(f).trim();return ot.test(n)?n:a};return{primary:s("--blkc-color-primary","#3b82f6"),accent:s("--blkc-color-accent","#f59e0b"),background:s("--blkc-color-background","#1a1a2e"),text:s("--blkc-color-text","#ffffff")}}function J(e,o={},s={}){let f=fe(o),a=e.getContext("2d");if(!a)throw new Error("This browser can't draw to a canvas.");let n=a,t=st(e),i=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,u,l=0,y=0,w=0,m=0,g=!0,S=!1,E=!0,b,c={x:0,y:0,zoom:1},M=new Date().getHours(),O=ye(M),F,B=!0,R=()=>f.cols*d,W=()=>f.rows*d,H=()=>{c.zoom=Math.min(me,Math.max(1,c.zoom)),c.x=Math.min(R()-R()/c.zoom,Math.max(0,c.x)),c.y=Math.min(W()-W()/c.zoom,Math.max(0,c.y))},re=()=>{if(typeof document>"u")return;F??(F=document.createElement("canvas")),F.width=R()*l,F.height=W()*l;let h=F.getContext("2d");h&&(h.setTransform(l,0,0,l,0,0),h.imageSmoothingEnabled=!1,he(h,f,t,O),B=!1)},p=()=>{B&&re();let h=l*c.zoom;n.setTransform(h,0,0,h,-c.x*h,-c.y*h),n.imageSmoothingEnabled=!1,Be(n,f,y,t,O,F,u),b?.(n)},A=()=>{let h=e.getBoundingClientRect().width||R(),L=Math.max(1,Math.ceil(h*(typeof devicePixelRatio=="number"?devicePixelRatio:1)/R()));L===l&&e.width===R()*l&&e.height===W()*l||(l=L,e.width=R()*l,e.height=W()*l,B=!0,p())},v=h=>{if(S)return;if(m=requestAnimationFrame(v),!g){w=h;return}let T=Math.min((h-w)/1e3||0,.1);w=h,y+=T,de(f,T);let L=new Date().getHours();L!==M&&(M=L,O=ye(M),B=!0),p()},z=h=>{u=h===u?void 0:h,s.onSelect?.(u),i&&p()},k=h=>{let T=e.getBoundingClientRect(),L=(h.clientX-T.left)/T.width*(R()/c.zoom)+c.x,_=(h.clientY-T.top)/T.height*(W()/c.zoom)+c.y;return{x:L/d,y:_/d}},x,D=h=>{E&&(x={x:h.clientX,y:h.clientY,moved:!1})},Z=h=>{if(!E)return;if(x&&s.camera&&c.zoom>1){let _=e.getBoundingClientRect(),Y=h.clientX-x.x,we=h.clientY-x.y;if(x.moved||Math.abs(Y)+Math.abs(we)>3){x.moved=!0,c.x-=Y/_.width*(R()/c.zoom),c.y-=we/_.height*(W()/c.zoom),x.x=h.clientX,x.y=h.clientY,H(),e.style.cursor="grabbing";return}}let{x:T,y:L}=k(h);e.style.cursor=ne(f,T,L)?"pointer":s.camera&&c.zoom>1?"grab":"default"},pe=h=>{if(!E)return;let T=x?.moved;if(x=void 0,T)return;let{x:L,y:_}=k(h),Y=ne(f,L,_);(Y||u)&&z(Y?.id??u)},ge=(h,T)=>{if(h===void 0){c.zoom=1,c.x=0,c.y=0;return}let L=T?k(T):{x:c.x/d+R()/c.zoom/d/2,y:c.y/d+W()/c.zoom/d/2};if(c.zoom=Math.min(me,Math.max(1,c.zoom*h)),T){let _=k(T);c.x+=(L.x-_.x)*d,c.y+=(L.y-_.y)*d}else c.x=L.x*d-R()/c.zoom/2,c.y=L.y*d-W()/c.zoom/2;H()},xe=h=>{h.preventDefault(),ge(h.deltaY<0?1.2:1/1.2,h)};e.addEventListener("pointerdown",D),e.addEventListener("pointermove",Z),e.addEventListener("pointerup",pe),s.camera&&e.addEventListener("wheel",xe,{passive:!1});let ke=typeof ResizeObserver=="function"?new ResizeObserver(A):void 0;ke?.observe(e);let Me=typeof IntersectionObserver=="function"?new IntersectionObserver(h=>{g=h.some(T=>T.isIntersecting)}):void 0;return Me?.observe(e),A(),l===0&&(l=1,p()),i||(m=requestAnimationFrame(v)),{world:f,update(h){ce(f,h),i&&p()},setLayout(h){le(f,h),B=!0,c.zoom=Math.min(c.zoom,me),H(),l=0,A()},select:z,tileAt:k,setOverlay(h){b=h},setInteractive(h){E=h,x=void 0,h||(e.style.cursor="crosshair")},zoom:ge,destroy(){S=!0,cancelAnimationFrame(m),ke?.disconnect(),Me?.disconnect(),e.removeEventListener("pointerdown",D),e.removeEventListener("pointermove",Z),e.removeEventListener("pointerup",pe),e.removeEventListener("wheel",xe)}}}var Ie=new Map;function rt(e,o){Ie.set(e,o)}function at(e,o,s){let f=[...s.querySelectorAll("button[data-blkc-agent]")],a=J(e,o,{onSelect(n){for(let t of f)t.setAttribute("aria-pressed",String(t.dataset.blkcAgent===n))}});for(let n of f)n.disabled=!1,n.addEventListener("click",()=>a.select(n.dataset.blkcAgent));return a}rt("office",at);var De=new WeakSet;function se(e=document){let o=[];for(let s of e.querySelectorAll("canvas[data-blkc-canvas]")){if(De.has(s))continue;let f=Ie.get(s.dataset.blkcCanvas??"");if(!f)continue;let a=s.closest("[data-blkc-canvas-root]")??s.parentElement??s,n=a.querySelector("script[data-blkc-canvas-data]"),t={};try{t=JSON.parse(n?.textContent||"{}")}catch{t={}}De.add(s);let i=f(s,t,a);o.push({element:s,destroy:()=>i.destroy()})}return o}globalThis.BLKCCanvas={FURNITURE:P,createOffice:J,findPath:G,mountCanvasBlocks:se};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>se()):se();})();
|
|
2
2
|
/**
|
|
3
3
|
* BLKC Render-Canvas.
|
|
4
4
|
*
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElF,uEAAuE;AACtE,UAAiD,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;AAEzH,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC3E,CAAC;KAAM,CAAC;IACN,iBAAiB,EAAE,CAAC;AACtB,CAAC"}
|
package/dist/runtime.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(()=>{var E={desk:{w:3,h:2,spot:{x:1,y:2}},coffee:{w:2,h:1,spot:{x:0,y:1}},water:{w:1,h:1,spot:{x:0,y:1}},sofa:{w:3,h:1,spot:{x:1,y:1}},plant:{w:1,h:1},board:{w:4,h:1,spot:{x:1,y:1}},shelf:{w:2,h:1,spot:{x:0,y:1}},server:{w:1,h:1},table:{w:3,h:2,spot:{x:1,y:2}},rug:{w:4,h:3,solid:!1}},ct=["working","thinking","blocked","reviewing","idle","done","away"],ut=["todo","doing","done"],dt=["wood","carpet","tile"],C={cols:26,rows:17,rooms:[{id:"studio",name:"Studio",x:1,y:3,w:15,h:13,floor:"wood"},{id:"lounge",name:"Lounge",x:17,y:3,w:8,h:6,floor:"carpet"},{id:"quests",name:"Quests",x:17,y:10,w:8,h:6,floor:"tile"}],doors:[{x:16,y:6},{x:16,y:13},{x:23,y:9}],furniture:[{type:"desk",x:2,y:4},{type:"desk",x:7,y:4},{type:"desk",x:12,y:4},{type:"desk",x:2,y:10},{type:"desk",x:7,y:10},{type:"desk",x:12,y:10},{type:"plant",x:1,y:8},{type:"plant",x:15,y:8},{type:"server",x:15,y:15},{type:"server",x:14,y:15},{type:"shelf",x:1,y:15},{type:"coffee",x:19,y:3},{type:"water",x:21,y:3},{type:"sofa",x:22,y:3},{type:"rug",x:20,y:5},{type:"plant",x:24,y:8},{type:"board",x:19,y:10},{type:"table",x:19,y:13},{type:"plant",x:24,y:15}]},A=(t,e)=>typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e,w=(t,e=120)=>typeof t=="string"?t.slice(0,e):"",S=(t,e)=>Array.isArray(t)?t.slice(0,e):[];function V(t){let e=2166136261;for(let n=0;n<t.length;n++)e=Math.imul(e^t.charCodeAt(n),16777619);return e>>>0}var Y=["#2b1b12","#5a3a22","#a8622d","#d9b36c","#20242e","#7d2f3f","#4a5568","#e5e7eb"],Q=["#f4d3b5","#e8b98f","#c98d62","#9c6644","#6f4530","#4e2f20"],J=["#3b82f6","#ef4444","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316"],_=(t,e)=>typeof t=="string"&&/^#[0-9a-f]{3,8}$/i.test(t)?t:e,F=(t,e,n)=>n*t.cols+e;function R(t,e,n){return e>=0&&n>=0&&e<t.cols&&n<t.rows&&t.walkable[F(t,e,n)]===!0}function Z(t,e,n){if(!R(t,n.x,n.y))return null;if(e.x===n.x&&e.y===n.y)return[];let i=new Int32Array(t.cols*t.rows).fill(-1),r=F(t,e.x,e.y);i[r]=r;let s=[r];for(let o=0;o<s.length;o++){let a=s[o],u=a%t.cols,l=Math.floor(a/t.cols);if(u===n.x&&l===n.y){let h=[];for(let p=a;p!==r;p=i[p])h.unshift({x:p%t.cols,y:Math.floor(p/t.cols)});return h}for(let[h,p]of[[0,1],[0,-1],[1,0],[-1,0]]){let x=u+h,k=l+p;if(!R(t,x,k))continue;let M=F(t,x,k);i[M]===-1&&(i[M]=a,s.push(M))}}return null}function tt(t,e){let n=w(t?.id,60)||`agent-${e+1}`,i=V(n),r=ct.includes(t?.state)?t.state:"idle";return{id:n,name:w(t?.name,24)||n,role:w(t?.role,40),state:r,task:w(t?.task,120),hair:_(t?.hair,Y[i%Y.length]),skin:_(t?.skin,Q[(i>>>4)%Q.length]),shirt:_(t?.shirt,J[(i>>>8)%J.length]),x:0,y:0,path:[],facing:"down",walking:!1,rest:0,seed:i}}function et(t){return{title:w(t?.title,80),state:ut.includes(t?.state)?t.state:"todo",agent:w(t?.agent,60)}}function B(t={}){let e=Array.isArray(t?.rooms)&&t.rooms.length>0,n=Math.min(Math.max(A(t?.cols,e?20:C.cols),6),64),i=Math.min(Math.max(A(t?.rows,e?14:C.rows),6),40),r=e?S(t.rooms,40):C.rooms,s=e?S(t.doors,60):C.doors,o=Array.isArray(t?.furniture)?S(t.furniture,300):e?[]:C.furniture,a=r.map(c=>{let b=Math.min(Math.max(A(c?.x,0),0),n),y=Math.min(Math.max(A(c?.y,0),0),i);return{name:w(c?.name,24),x:b,y,w:Math.min(Math.max(A(c?.w,0),0),n-b),h:Math.min(Math.max(A(c?.h,0),0),i-y),floor:dt.includes(c?.floor)?c.floor:"wood"}}),u=new Array(n*i).fill(!1),l=(c,b,y)=>{c>=0&&b>=0&&c<n&&b<i&&(u[b*n+c]=y)};for(let c of a)for(let b=c.y;b<c.y+c.h;b++)for(let y=c.x;y<c.x+c.w;y++)l(y,b,!0);let h=s.map(c=>({x:A(c?.x,-1),y:A(c?.y,-1)})).filter(c=>c.x>=0&&c.y>=0);for(let c of h)l(c.x,c.y,!0);let p=o.filter(c=>c&&Object.hasOwn(E,c.type)).map(c=>({type:c.type,x:A(c.x,-99),y:A(c.y,-99)}));for(let c of p){let b=E[c.type];if(b.solid!==!1)for(let y=c.y;y<c.y+b.h;y++)for(let T=c.x;T<c.x+b.w;T++)l(T,y,!1)}let x={cols:n,rows:i,rooms:a,doors:h,furniture:p,walkable:u,agents:S(t?.agents,40).map(tt),tasks:S(t?.tasks,60).map(et),spots:{lounge:[],board:[]}},k=c=>{let b=E[c.type].spot;if(!b)return;let y={x:c.x+b.x,y:c.y+b.y};return R(x,y.x,y.y)?y:void 0},M=p.filter(c=>c.type==="desk").map(k).filter(c=>!!c);for(let c of p){let b=k(c);b&&((c.type==="coffee"||c.type==="sofa"||c.type==="water"||c.type==="shelf")&&x.spots.lounge.push(b),(c.type==="board"||c.type==="table")&&x.spots.board.push(b))}return x.agents.forEach((c,b)=>{c.seat=M[b],nt(x,c)}),x}function ht(t){for(let e=0;e<t.rows;e++)for(let n=0;n<t.cols;n++)if(R(t,n,e))return{x:n,y:e};return{x:0,y:0}}function I(t,e){let n=i=>i.length>0?i[(e.seed+Math.floor(e.rest*1e3))%i.length]:void 0;switch(e.state){case"working":case"thinking":case"blocked":return e.seat??n(t.spots.lounge);case"reviewing":return n(t.spots.board)??e.seat;case"idle":case"done":return n(t.spots.lounge)??e.seat;default:return}}function nt(t,e){let n=I(t,e)??e.seat??ht(t);e.x=n.x,e.y=n.y,e.path=[],e.walking=!1,e.facing=O(e)?"up":"down",e.rest=2+e.seed%50/10}var O=t=>(t.state==="working"||t.state==="thinking"||t.state==="blocked")&&t.seat!==void 0&&t.seat.x===t.x&&t.seat.y===t.y&&t.path.length===0;function ot(t,e,n){if(!n)return;let i={x:Math.round(e.x),y:Math.round(e.y)};e.path=Z(t,i,n)??[]}function D(t,e){for(let n of t.agents)if(n.state!=="away"){if(n.path.length>0){let i=n.path[0],r=i.x-n.x,s=i.y-n.y,o=Math.hypot(r,s),a=3.2*e;Math.abs(r)>Math.abs(s)?n.facing=r>0?"right":"left":s!==0&&(n.facing=s>0?"down":"up"),n.walking=!0,o<=a?(n.x=i.x,n.y=i.y,n.path.shift()):(n.x+=r/o*a,n.y+=s/o*a);continue}n.walking=!1,n.state==="idle"&&(n.rest-=e,n.rest<=0&&(n.seed=V(String(n.seed)),n.rest=3+n.seed%60/10,ot(t,n,I(t,n)))),O(n)&&(n.facing="up")}}function P(t,e){if(Array.isArray(e.tasks)&&(t.tasks=S(e.tasks,60).map(et)),!Array.isArray(e.agents))return;let n=new Map(t.agents.map(r=>[r.id,r])),i=t.furniture.filter(r=>r.type==="desk").map(r=>({x:r.x+1,y:r.y+2})).filter(r=>R(t,r.x,r.y));t.agents=S(e.agents,40).map((r,s)=>{let o=tt(r,s),a=n.get(o.id);return o.seat=i[s],a?(Object.assign(a,{name:o.name,role:o.role,task:o.task,hair:o.hair,skin:o.skin,shirt:o.shirt,seat:o.seat}),a.state!==o.state&&(a.state=o.state,o.state!=="away"&&ot(t,a,I(t,a))),a):(nt(t,o),o)})}function L(t,e,n){let i,r=1/0;for(let s of t.agents){if(s.state==="away")continue;let o=e-(s.x+.5),a=n-(s.y+.1),u=Math.hypot(o,a);Math.abs(o)<.8&&a>-1.6&&a<1.1&&u<r&&(i=s,r=u)}return i}var d=16,f=(t,e,n,i,r,s)=>{t.fillStyle=e,t.fillRect(Math.round(n),Math.round(i),r,s)},bt=["...hhhhhh...","..hhhhhhhh..","..hhhhhhhh..","..hssssssh..","..ssessess..","..ssssssss..","...ssssss..."],pt=["...hhhhhh...","..hhhhhhhh..","..hhhhhhhh..","..hhhhhhhh..","..hhhhhhhh..","..hhhhhhhh..","...ssssss..."],yt=["...hhhhhh...","..hhhhhhhh..","..hhhhhhhh..","..hhssssss..","..hhsssess..","..hsssssss..","...ssssss..."],mt=["..tttttttt..",".tttttttttt.",".stttttttts.",".stTTTTTTts."],xt=["...tttttt...","...tttttt...","...ttsttt...","...TTsTTT..."],gt=["..llllllll..","..lll..lll..","..lll..lll..","..bbb..bbb.."],kt=["..llllllll..","..lll..lll..","..bbb..lll..",".......bbb.."],Mt=["..llllllll..","..lll..lll..","..lll..bbb..","..bbb......."],At=["...llllll...","...lll.lll..","...lll.lll..","...bbb.bbb.."],St=["...llllll...","..lll..lll..",".lll....lll.",".bb......bb."],wt=["...llllll...","...llllll...","....llll....","....bbbb...."];function $(t,e,n,i,r,s=!1){e.forEach((o,a)=>{for(let u=0;u<o.length;u++){let l=o[s?o.length-1-u:u],h=r[l];h&&f(t,h,n+u,i+a,1,1)}})}function Tt(t,e){let n=parseInt(t.slice(1).padEnd(6,t.slice(-1)),16),i=r=>Math.max(0,Math.min(255,(n>>r&255)+e));return`rgb(${i(16)},${i(8)},${i(0)})`}function vt(t,e,n,i){let r=e.x*d+2,s=O(e),o={h:e.hair,s:e.skin,e:"#1a1a24",t:e.shirt,T:Tt(e.shirt,-36),l:"#39415a",b:"#1f2433"},a=Math.floor(n*8+e.seed)%2===0,u=!e.walking&&Math.floor(n*1.5+e.seed%7)%2===0?1:0,l=s?11:15,h=e.y*d+(s?6:-1)-(e.walking&&a?1:0);s&&(f(t,"#1f2937",r+1,e.y*d+3,10,9),f(t,"#374151",r+2,e.y*d+11,8,3),f(t,"#111827",r+5,e.y*d+14,2,2)),t.fillStyle="rgba(0,0,0,0.25)",t.fillRect(Math.round(r+2),Math.round(e.y*d+14),8,2),i&&(t.fillStyle="rgba(255,255,255,0.28)",t.fillRect(Math.round(r-1),Math.round(e.y*d+13),14,4));let p=e.facing==="left"||e.facing==="right",x=p?yt:e.facing==="up"?pt:bt,k=p?xt:mt,M=e.walking?p?a?St:wt:a?kt:Mt:p?At:gt,c=e.facing==="left";if($(t,x,r,h-l+u*0,o,c),$(t,k,r,h-l+x.length,o,c),!s)$(t,M,r,h-l+x.length+k.length,o,c);else if(e.state==="working"){let b=Math.floor(n*9+e.seed)%2;f(t,e.skin,r+1+b,h-l+x.length+3,1,1),f(t,e.skin,r+10-(1-b),h-l+x.length+3,1,1)}}function W(t,e,n,i){f(t,"#111827",e-1,n-1,13,11),f(t,"#ffffff",e,n,11,9),f(t,"#ffffff",e+4,n+9,3,1),f(t,"#111827",e+4,n+10,3,1),i(e,n)}function Et(t,e,n){let i=Math.round(e.x*d+2),r=Math.round(e.y*d-26+(O(e)?8:0)),s=Math.floor(n*2+e.seed%3)%2===0;if(e.state==="blocked")W(t,i,r,(o,a)=>{f(t,s?"#dc2626":"#991b1b",o+5,a+1,2,5),f(t,s?"#dc2626":"#991b1b",o+5,a+7,2,1)});else if(e.state==="thinking"){let o=Math.floor(n*3)%4;W(t,i,r,(a,u)=>{for(let l=0;l<3;l++)f(t,l<o?"#111827":"#d1d5db",a+2+l*3,u+4,2,2)})}else if(e.state==="reviewing"&&!e.walking)W(t,i,r,(o,a)=>{f(t,"#2563eb",o+4,a+1,4,1),f(t,"#2563eb",o+7,a+2,1,2),f(t,"#2563eb",o+5,a+4,2,1),f(t,"#2563eb",o+5,a+5,1,1),f(t,"#2563eb",o+5,a+7,1,1)});else if(e.state==="done"){let o=s?"#f59e0b":"#fbbf24";W(t,i,r,(a,u)=>{f(t,o,a+5,u+1,1,7),f(t,o,a+2,u+3,7,2),f(t,o,a+4,u+2,3,5)})}}function Ot(t,e,n){for(let i=e.y;i<e.y+e.h;i++)for(let r=e.x;r<e.x+e.w;r++){let s=r*d,o=i*d;if(e.floor==="carpet"){f(t,"#4c4f7a",s,o,d,d);for(let a=0;a<6;a++)f(t,"#55588a",s+(r*7+a*5)%15,o+(i*3+a*7)%15,1,1)}else if(e.floor==="tile")f(t,(r+i)%2===0?"#cfd8e3":"#bcc7d4",s,o,d,d),f(t,"#aab5c2",s,o+15,d,1),f(t,"#aab5c2",s+15,o,1,d);else{f(t,"#a06f45",s,o,d,d);let a=i%2===0?0:8;f(t,"#8f6039",s,o+7,d,1),f(t,"#8f6039",s,o+15,d,1),f(t,"#8f6039",s+(a+r*8)%16,o,1,7),f(t,"#ad7c52",s+3,o+3,4,1)}}}var it="#2f3350",Ct="#565c86",Rt="#454a70";function Lt(t,e,n){let i=new Set;for(let r of e.rooms)for(let s=r.y;s<r.y+r.h;s++)for(let o=r.x;o<r.x+r.w;o++)i.add(`${o},${s}`);for(let r of e.doors)i.add(`${r.x},${r.y}`);for(let r=0;r<e.rows;r++)for(let s=0;s<e.cols;s++){if(i.has(`${s},${r}`))continue;let o=s*d,a=r*d;i.has(`${s},${r+1}`)?(f(t,Ct,o,a,d,d),f(t,Rt,o,a+13,d,3),f(t,n.primary,o,a+12,d,1),s%4===3&&r<=3&&(f(t,"#1f2937",o+1,a+1,14,9),f(t,"#8ed0ff",o+2,a+2,12,7),f(t,"#bfe6ff",o+3,a+3,4,2),f(t,"#1f2937",o+8,a+2,1,7))):f(t,it,o,a,d,d)}for(let r of e.doors)f(t,"#6b4a2f",r.x*d,r.y*d,d,d),f(t,"#7c5637",r.x*d+2,r.y*d,12,d)}function Wt(t,e,n,i,r,s,o){if(f(t,"#6b4427",e+1,n+13,46,17),f(t,"#8a5a33",e+1,n+11,46,11),f(t,"#a06c3f",e+1,n+11,46,2),f(t,"#4a2e1a",e+3,n+22,3,9),f(t,"#4a2e1a",e+42,n+22,3,9),f(t,"#111827",e+15,n-1,18,13),f(t,"#374151",e+22,n+12,4,2),i){f(t,"#0f2a2e",e+16,n,16,11);let a=Math.floor(r*3+s%13);for(let u=0;u<4;u++){let l=3+((s>>u)+(a+u)*7)%11;f(t,u%2===0?o.primary:"#7dd3fc",e+17,n+1+u*2.5,l,1)}t.fillStyle="rgba(125,211,252,0.10)",t.fillRect(e+11,n+11,26,8)}else f(t,"#1f2937",e+16,n,16,11),f(t,"#374151",e+18,n+2,3,1);f(t,"#d1d5db",e+17,n+15,14,4),f(t,"#9ca3af",e+18,n+16,12,1),f(t,"#f3f4f6",e+38,n+14,4,4),f(t,o.primary,e+38,n+16,4,1)}function _t(t,e,n,i){f(t,"#2b2118",e,n-11,64,26),f(t,"#d9c29c",e+2,n-9,60,22);let r={todo:"#fde68a",doing:"#93c5fd",done:"#86efac"},s=8;i.tasks.slice(0,s*2).forEach((o,a)=>{let u=a%s,l=Math.floor(a/s);f(t,"#00000033",e+5+u*7,n-6+l*9,6,7),f(t,r[o.state],e+4+u*7,n-7+l*9,6,7),f(t,"#00000040",e+5+u*7,n-5+l*9,4,1)})}function st(t,e,n,i,r){let s=e.x*d,o=e.y*d;switch(e.type){case"desk":{let a=e.x+1,u=e.y+2,l=n.agents.find(h=>h.seat?.x===a&&h.seat?.y===u&&O(h)&&h.state!=="blocked");Wt(t,s,o,!!l,i,l?.seed??0,r);break}case"coffee":f(t,"#374151",s,o+2,32,14),f(t,"#6b7280",s,o+2,32,2),f(t,"#111827",s+4,o-8,14,14),f(t,"#ef4444",s+15,o-5,2,2),f(t,"#f3f4f6",s+8,o+3,5,4),f(t,"#f3f4f6",s+22,o-1,5,5);for(let a=0;a<3;a++)t.fillStyle="rgba(255,255,255,0.45)",t.fillRect(s+9+Math.round(Math.sin(i*2+a)*1.5),o-1-(i*8+a*4)%9,1,2);break;case"water":f(t,"#e5e7eb",s+3,o+3,10,13),f(t,"#7dd3fc",s+4,o-7,8,10),f(t,"#bae6fd",s+5,o-6,2,8),f(t,"#3b82f6",s+5,o+6,2,2);break;case"sofa":f(t,r.primary,s+1,o-6,46,9),f(t,"#00000030",s+1,o+1,46,2),f(t,"#4b5563",s,o+3,48,11),f(t,"#6b7280",s+3,o+3,20,7),f(t,"#6b7280",s+25,o+3,20,7),f(t,"#374151",s,o+12,48,3);break;case"plant":f(t,"#92400e",s+4,o+9,8,7),f(t,"#b45309",s+3,o+8,10,2);for(let[a,u,l,h]of[[6,-3,4,11],[2,0,5,6],[9,1,5,6],[4,-6,3,6],[9,-5,3,5]])f(t,"#15803d",s+a,o+u,l,h);f(t,"#22c55e",s+7,o-3,2,8),f(t,"#22c55e",s+3,o+1,2,3);break;case"board":_t(t,s,o,n);break;case"shelf":f(t,"#5b3a21",s,o-12,32,28);for(let a=0;a<2;a++){f(t,"#3b2413",s+2,o-10+a*13,28,11);for(let u=0;u<8;u++){let l=["#ef4444","#3b82f6","#10b981","#f59e0b","#8b5cf6"][(u*3+a)%5];f(t,l,s+3+u*3,o-8+a*13+u%3,2,9-u%3)}}break;case"server":f(t,"#111827",s+1,o-12,14,28);for(let a=0;a<5;a++){f(t,"#1f2937",s+2,o-11+a*5,12,4);let u=Math.floor(i*3+a*2+e.x)%3!==0;f(t,u?"#22c55e":"#14532d",s+3,o-10+a*5,1,1),f(t,a%2===0?"#f59e0b":"#3b82f6",s+5,o-10+a*5,1,1)}break;case"table":f(t,"#57534e",s+2,o+14,44,14),f(t,"#78716c",s+2,o+3,44,14),f(t,"#a8a29e",s+2,o+3,44,2),f(t,"#f9fafb",s+10,o+6,8,6),f(t,"#f9fafb",s+28,o+8,8,6);break;case"rug":f(t,r.primary,s,o,64,48),t.fillStyle="rgba(0,0,0,0.35)",t.fillRect(s+3,o+3,58,42),f(t,r.primary,s+6,o+6,52,1),f(t,r.primary,s+6,o+41,52,1);break}}function Ft(t,e){t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";for(let n of e.rooms){if(!n.name)continue;let i=n.name.toUpperCase(),r=n.x*d+3,s=n.y*d-12;t.fillStyle="rgba(0,0,0,0.45)",t.fillText(i,r+1,s+1),t.fillStyle="rgba(255,255,255,0.85)",t.fillText(i,r,s)}}function Bt(t,e,n,i){let r=e.name;t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";let s=Math.ceil(t.measureText(r).width)+5,o=e.x*d+8,a=Math.round(Math.max(1,Math.min(i-s-1,o-s/2))),u=Math.round(e.y*d+15);t.fillStyle=n?"#ffffff":"rgba(17,24,39,0.82)",t.fillRect(a,u,s,10),t.fillStyle=n?"#111827":"#ffffff",t.fillText(r,a+2.5,u+1.5)}function It(t,e,n){let i=[],r="";for(let s of e.split(/\s+/)){let o=r?`${r} ${s}`:s;t.measureText(o).width>n&&r?(i.push(r),r=s):r=o}return r&&i.push(r),i.slice(0,3)}var rt={working:"Working",thinking:"Thinking",blocked:"Blocked",reviewing:"Reviewing",idle:"On a break",done:"Finished",away:"Away"};function Dt(t,e,n){t.font="7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";let i=It(t,e.task||rt[e.state]||"",104),r=114,s=18+i.length*9+3,o=Math.round(Math.max(2,Math.min(n-r-2,e.x*d+8-r/2))),a=Math.round(Math.max(2,e.y*d-s-22));f(t,"#111827",o-1,a-1,r+2,s+2),f(t,"#ffffff",o,a,r,s),t.fillStyle="#111827",t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.fillText(`${e.name}: ${rt[e.state]??""}`.slice(0,26),o+4,a+4),t.fillStyle="#374151",t.font="7px ui-monospace, Menlo, Consolas, monospace",i.forEach((u,l)=>t.fillText(u,o+4,a+15+l*9))}function Pt(t,e,n){if(e.tasks.length===0)return;let i=e.tasks.filter(o=>o.state==="done").length,r=`QUESTS ${i}/${e.tasks.length}`;t.font="bold 7px ui-monospace, Menlo, Consolas, monospace",t.textBaseline="top";let s=96;f(t,"rgba(17,24,39,0.85)",4,4,s,20),t.fillStyle="#ffffff",t.fillText(r,8,6.5),f(t,"#374151",8,16,s-8,4),f(t,n.primary,8,16,Math.round((s-8)*i/e.tasks.length),4)}function at(t,e,n,i,r){let s=e.cols*d;f(t,it,0,0,s,e.rows*d);for(let l of e.rooms)Ot(t,l,i);Lt(t,e,i);for(let l of e.furniture)l.type==="rug"&&st(t,l,e,n,i);let o=[];for(let l of e.furniture)l.type!=="rug"&&o.push({depth:(l.y+E[l.type].h)*d-2,draw:()=>st(t,l,e,n,i)});let a=e.agents.filter(l=>l.state!=="away");for(let l of a)o.push({depth:l.y*d+14,draw:()=>vt(t,l,n,l.id===r)});o.sort((l,h)=>l.depth-h.depth);for(let l of o)l.draw();Ft(t,e);for(let l of a)Bt(t,l,l.id===r,s);for(let l of a)l.id!==r&&Et(t,l,n);Pt(t,e,i);let u=a.find(l=>l.id===r);u&&Dt(t,u,s)}var $t=/^(#[0-9a-f]{3,8}|rgba?\([\d\s.,%/]+\)|hsla?\([\d\s.,%/a-z]+\))$/i;function Ht(t){let e=getComputedStyle(t),n=(i,r)=>{let s=e.getPropertyValue(i).trim();return $t.test(s)?s:r};return{primary:n("--blkc-color-primary","#3b82f6"),accent:n("--blkc-color-accent","#f59e0b"),background:n("--blkc-color-background","#1a1a2e"),text:n("--blkc-color-text","#ffffff")}}function H(t,e={},n={}){let i=B(e),r=t.getContext("2d");if(!r)throw new Error("This browser can't draw to a canvas.");let s=r,o=i.cols*d,a=i.rows*d,u=Ht(t),l=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,h,p=0,x=0,k=0,M=0,c=!0,b=!1,y=()=>{s.setTransform(p,0,0,p,0,0),s.imageSmoothingEnabled=!1,at(s,i,x,u,h)},T=()=>{let m=t.getBoundingClientRect().width||o,v=Math.max(1,Math.ceil(m*(typeof devicePixelRatio=="number"?devicePixelRatio:1)/o));v!==p&&(p=v,t.width=o*p,t.height=a*p,y())},U=m=>{if(b)return;if(M=requestAnimationFrame(U),!c){k=m;return}let g=Math.min((m-k)/1e3||0,.1);k=m,x+=g,D(i,g),y()},X=m=>{h=m===h?void 0:m,n.onSelect?.(h),l&&y()},G=m=>{let g=t.getBoundingClientRect();return{x:(m.clientX-g.left)/g.width*i.cols,y:(m.clientY-g.top)/g.height*i.rows}},K=m=>{let{x:g,y:v}=G(m);X(L(i,g,v)?.id)},j=m=>{let{x:g,y:v}=G(m);t.style.cursor=L(i,g,v)?"pointer":"default"};t.addEventListener("pointerdown",K),t.addEventListener("pointermove",j);let q=typeof ResizeObserver=="function"?new ResizeObserver(T):void 0;q?.observe(t);let z=typeof IntersectionObserver=="function"?new IntersectionObserver(m=>{c=m.some(g=>g.isIntersecting)}):void 0;return z?.observe(t),T(),p===0&&(p=1,y()),l||(M=requestAnimationFrame(U)),{world:i,update(m){P(i,m),l&&y()},select:X,destroy(){b=!0,cancelAnimationFrame(M),q?.disconnect(),z?.disconnect(),t.removeEventListener("pointerdown",K),t.removeEventListener("pointermove",j)}}}var lt=new Map;function Nt(t,e){lt.set(t,e)}function Ut(t,e,n){let i=[...n.querySelectorAll("button[data-blkc-agent]")],r=H(t,e,{onSelect(s){for(let o of i)o.setAttribute("aria-pressed",String(o.dataset.blkcAgent===s))}});for(let s of i)s.disabled=!1,s.addEventListener("click",()=>r.select(s.dataset.blkcAgent));return r}Nt("office",Ut);var ft=new WeakSet;function N(t=document){let e=[];for(let n of t.querySelectorAll("canvas[data-blkc-canvas]")){if(ft.has(n))continue;let i=lt.get(n.dataset.blkcCanvas??"");if(!i)continue;let r=n.closest("[data-blkc-canvas-root]")??n.parentElement??n,s=r.querySelector("script[data-blkc-canvas-data]"),o={};try{o=JSON.parse(s?.textContent||"{}")}catch{o={}}ft.add(n);let a=i(n,o,r);e.push({element:n,destroy:()=>a.destroy()})}return e}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>N()):N();})();
|
|
1
|
+
"use strict";(()=>{var P={desk:{w:3,h:2,spot:{x:1,y:2}},coffee:{w:2,h:1,spot:{x:0,y:1}},water:{w:1,h:1,spot:{x:0,y:1}},sofa:{w:3,h:1,spot:{x:1,y:1}},plant:{w:1,h:1},fern:{w:1,h:1},board:{w:4,h:1,spot:{x:1,y:1}},whiteboard:{w:3,h:1,spot:{x:1,y:1}},shelf:{w:2,h:1,spot:{x:0,y:1}},server:{w:1,h:1},table:{w:3,h:2,spot:{x:1,y:2}},rug:{w:4,h:3,solid:!1},arcade:{w:1,h:1,spot:{x:0,y:1}},fridge:{w:1,h:1,spot:{x:0,y:1}},printer:{w:1,h:1,spot:{x:0,y:1}},lamp:{w:1,h:1},beanbag:{w:1,h:1,spot:{x:0,y:1}},tv:{w:3,h:1,spot:{x:1,y:2}},vending:{w:1,h:1,spot:{x:0,y:1}},trophy:{w:1,h:1},clock:{w:1,h:1,solid:!1,wall:!0},poster:{w:1,h:1,solid:!1,wall:!0}},Pe=["working","thinking","blocked","reviewing","idle","done","away"],ze=["todo","doing","done"],_e=["wood","carpet","tile","stone","concrete","grass"],K={cols:26,rows:17,rooms:[{id:"studio",name:"Studio",x:1,y:3,w:15,h:13,floor:"wood"},{id:"lounge",name:"Lounge",x:17,y:3,w:8,h:6,floor:"carpet"},{id:"quests",name:"Quests",x:17,y:10,w:8,h:6,floor:"tile"}],doors:[{x:16,y:6},{x:16,y:13},{x:23,y:9}],furniture:[{type:"desk",x:2,y:4},{type:"desk",x:7,y:4},{type:"desk",x:12,y:4},{type:"desk",x:2,y:10},{type:"desk",x:7,y:10},{type:"desk",x:12,y:10},{type:"plant",x:1,y:8},{type:"plant",x:15,y:8},{type:"server",x:15,y:15},{type:"server",x:14,y:15},{type:"shelf",x:1,y:15},{type:"coffee",x:19,y:3},{type:"water",x:21,y:3},{type:"sofa",x:22,y:3},{type:"rug",x:20,y:5},{type:"plant",x:24,y:8},{type:"board",x:19,y:10},{type:"table",x:19,y:13},{type:"plant",x:24,y:15}]},I=(e,o)=>typeof e=="number"&&Number.isFinite(e)?Math.floor(e):o,U=(e,o=120)=>typeof e=="string"?e.slice(0,o):"",X=(e,o)=>Array.isArray(e)?e.slice(0,o):[];function Te(e){let o=2166136261;for(let s=0;s<e.length;s++)o=Math.imul(o^e.charCodeAt(s),16777619);return o>>>0}var ve=["#2b1b12","#5a3a22","#a8622d","#d9b36c","#20242e","#7d2f3f","#4a5568","#e5e7eb"],Ae=["#f4d3b5","#e8b98f","#c98d62","#9c6644","#6f4530","#4e2f20"],Se=["#3b82f6","#ef4444","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316"],ae=(e,o)=>typeof e=="string"&&/^#[0-9a-f]{3,8}$/i.test(e)?e:o,ie=(e,o,s)=>s*e.cols+o;function q(e,o,s){return o>=0&&s>=0&&o<e.cols&&s<e.rows&&e.walkable[ie(e,o,s)]===!0}function G(e,o,s){if(!q(e,s.x,s.y))return null;if(o.x===s.x&&o.y===s.y)return[];let f=new Int32Array(e.cols*e.rows).fill(-1),a=ie(e,o.x,o.y);f[a]=a;let n=[a];for(let t=0;t<n.length;t++){let i=n[t],u=i%e.cols,l=Math.floor(i/e.cols);if(u===s.x&&l===s.y){let y=[];for(let w=i;w!==a;w=f[w])y.unshift({x:w%e.cols,y:Math.floor(w/e.cols)});return y}for(let[y,w]of[[0,1],[0,-1],[1,0],[-1,0]]){let m=u+y,g=l+w;if(!q(e,m,g))continue;let S=ie(e,m,g);f[S]===-1&&(f[S]=i,n.push(S))}}return null}function Ce(e,o){let s=U(e?.id,60)||`agent-${o+1}`,f=Te(s),a=Pe.includes(e?.state)?e.state:"idle";return{id:s,name:U(e?.name,24)||s,role:U(e?.role,40),state:a,task:U(e?.task,120),area:U(e?.area,60),party:0,hair:ae(e?.hair,ve[f%ve.length]),skin:ae(e?.skin,Ae[(f>>>4)%Ae.length]),shirt:ae(e?.shirt,Se[(f>>>8)%Se.length]),x:0,y:0,path:[],facing:"down",walking:!1,rest:0,seed:f}}function Ee(e){return{title:U(e?.title,80),state:ze.includes(e?.state)?e.state:"todo",agent:U(e?.agent,60)}}function Re(e){let o=Array.isArray(e?.rooms)&&e.rooms.length>0,s=Math.min(Math.max(I(e?.cols,o?20:K.cols),6),64),f=Math.min(Math.max(I(e?.rows,o?14:K.rows),6),40),a=o?X(e.rooms,40):K.rooms,n=o?X(e.doors,60):K.doors,t=Array.isArray(e?.furniture)?X(e.furniture,300):o?[]:K.furniture,i=a.map((b,c)=>{let M=Math.min(Math.max(I(b?.x,0),0),s),O=Math.min(Math.max(I(b?.y,0),0),f);return{id:U(b?.id,60)||`room-${c+1}`,name:U(b?.name,24),x:M,y:O,w:Math.min(Math.max(I(b?.w,0),0),s-M),h:Math.min(Math.max(I(b?.h,0),0),f-O),floor:_e.includes(b?.floor)?b.floor:"wood",paths:X(b?.paths,20).filter(F=>typeof F=="string").map(F=>F.slice(0,200))}}),u=new Array(s*f).fill(!1),l=(b,c,M)=>{b>=0&&c>=0&&b<s&&c<f&&(u[c*s+b]=M)};for(let b of i)for(let c=b.y;c<b.y+b.h;c++)for(let M=b.x;M<b.x+b.w;M++)l(M,c,!0);let y=n.map(b=>({x:I(b?.x,-1),y:I(b?.y,-1)})).filter(b=>b.x>=0&&b.y>=0);for(let b of y)l(b.x,b.y,!0);let w=t.filter(b=>b&&Object.hasOwn(P,b.type)).map(b=>({type:b.type,x:I(b.x,-99),y:I(b.y,-99)}));for(let b of w){let c=P[b.type];if(c.solid!==!1)for(let M=b.y;M<b.y+c.h;M++)for(let O=b.x;O<b.x+c.w;O++)l(O,M,!1)}let m=(b,c)=>b>=0&&c>=0&&b<s&&c<f&&u[c*s+b]===!0,g=b=>{let c=P[b.type].spot;if(!c)return;let M={x:b.x+c.x,y:b.y+c.y};return m(M.x,M.y)?M:void 0},S=w.filter(b=>b.type==="desk").map(g).filter(b=>!!b),E={lounge:[],board:[]};for(let b of w){let c=g(b);c&&(["coffee","sofa","water","shelf","arcade","fridge","beanbag","vending","tv"].includes(b.type)&&E.lounge.push(c),["board","table","whiteboard"].includes(b.type)&&E.board.push(c))}return{cols:s,rows:f,rooms:i,doors:y,furniture:w,walkable:u,seats:S,spots:E}}function fe(e={}){let o={...Re(e),agents:X(e?.agents,40).map(Ce),tasks:X(e?.tasks,60).map(Ee)};for(let s of o.agents)ue(o,s);return o}function le(e,o){Object.assign(e,Re(o));for(let s of e.agents)s.seat=void 0,s.path=[],s.x=Math.round(s.x),s.y=Math.round(s.y),q(e,s.x,s.y)?(ee(e,s),j(e,s,te(e,s))):ue(e,s)}function Ue(e){for(let o=0;o<e.rows;o++)for(let s=0;s<e.cols;s++)if(q(e,s,o))return{x:s,y:o};return{x:0,y:0}}var Le=["working","thinking","blocked"];function ee(e,o){if(!Le.includes(o.state)){o.seat=void 0;return}let s=e.rooms.find(t=>t.id===o.area),f=t=>!!s&&t.x>=s.x&&t.x<s.x+s.w&&t.y>=s.y&&t.y<s.y+s.h;if(o.seat&&(!s||f(o.seat)))return;o.seat=void 0;let a=new Set(e.agents.filter(t=>t!==o&&t.seat).map(t=>`${t.seat?.x},${t.seat?.y}`)),n=e.seats.filter(t=>!a.has(`${t.x},${t.y}`));o.seat=s?n.find(f):n[0]}function Xe(e){return e.path[e.path.length-1]??{x:Math.round(e.x),y:Math.round(e.y)}}function Oe(e,o,s){let f=new Set(e.agents.filter(a=>a!==o&&a.state!=="away").map(a=>{let n=Xe(a);return`${n.x},${n.y}`}));for(let a=0;a<=4;a++)for(let n=-a;n<=a;n++)for(let t=-a;t<=a;t++){if(Math.abs(t)+Math.abs(n)!==a)continue;let i={x:s.x+t,y:s.y+n};if(q(e,i.x,i.y)&&!f.has(`${i.x},${i.y}`)&&G(e,s,i))return i}return s}function te(e,o){let s=f=>{let a=f.length>0?f[(o.seed+Math.floor(o.rest*1e3))%f.length]:void 0;return a&&Oe(e,o,a)};switch(o.state){case"working":case"thinking":case"blocked":{if(o.seat)return o.seat;let f=e.rooms.find(a=>a.id===o.area);return f&&f.w>0&&f.h>0?Oe(e,o,{x:f.x+(f.w>>1),y:f.y+(f.h>>1)}):s(e.spots.lounge)}case"reviewing":return s(e.spots.board)??o.seat;case"idle":case"done":return s(e.spots.lounge)??o.seat;default:return}}function ue(e,o){ee(e,o);let s=te(e,o)??o.seat??Ue(e);o.x=s.x,o.y=s.y,o.path=[],o.walking=!1,o.facing=N(o)?"up":"down",o.rest=2+o.seed%50/10}var N=e=>(e.state==="working"||e.state==="thinking"||e.state==="blocked")&&e.seat!==void 0&&e.seat.x===e.x&&e.seat.y===e.y&&e.path.length===0;function j(e,o,s){if(!s)return;let f={x:Math.round(o.x),y:Math.round(o.y)};o.path=G(e,f,s)??[]}function de(e,o){for(let s of e.agents)if(s.state!=="away"){if(s.path.length>0){let f=s.path[0],a=f.x-s.x,n=f.y-s.y,t=Math.hypot(a,n),i=4.5*o;Math.abs(a)>Math.abs(n)?s.facing=a>0?"right":"left":n!==0&&(s.facing=n>0?"down":"up"),s.walking=!0,t<=i?(s.x=f.x,s.y=f.y,s.path.shift()):(s.x+=a/t*i,s.y+=n/t*i);continue}s.walking=!1,s.party>0&&(s.party=Math.max(0,s.party-o)),s.state==="idle"&&(s.rest-=o,s.rest<=0&&(s.seed=Te(String(s.seed)),s.rest=3+s.seed%60/10,j(e,s,te(e,s)))),N(s)&&(s.facing="up")}}function ce(e,o){if(Array.isArray(o.tasks)&&(e.tasks=X(o.tasks,60).map(Ee)),!Array.isArray(o.agents))return;let s=new Map(e.agents.map(n=>[n.id,n])),f=X(o.agents,40).map(Ce);e.agents=f.map(n=>s.get(n.id)).filter(n=>!!n);let a=f.map(n=>{let t=s.get(n.id);if(!t){ue(e,n),e.agents=[...e.agents,n];let u=e.doors[0],l={x:n.x,y:n.y};return u&&n.state!=="away"&&(n.x=u.x,n.y=u.y,j(e,n,l)),n}Object.assign(t,{name:n.name,role:n.role,task:n.task,hair:n.hair,skin:n.skin,shirt:n.shirt});let i=t.area!==n.area;return t.area=n.area,t.state!==n.state||i?(n.state==="done"&&t.state!=="done"&&(t.party=3),t.state=n.state,ee(e,t),n.state!=="away"&&j(e,t,te(e,t))):Le.includes(t.state)&&!t.seat&&(ee(e,t),t.seat&&j(e,t,t.seat)),t});e.agents=a}function ne(e,o,s){let f,a=1/0;for(let n of e.agents){if(n.state==="away")continue;let t=o-(n.x+.5),i=s-(n.y+.1),u=Math.hypot(t,i);Math.abs(t)<.8&&i>-1.6&&i<1.1&&u<a&&(f=n,a=u)}return f}var d=16,oe="bold 7px ui-monospace, Menlo, Consolas, monospace",We="7px ui-monospace, Menlo, Consolas, monospace",C="#14141f",r=(e,o,s,f,a,n)=>{e.fillStyle=o,e.fillRect(Math.round(s),Math.round(f),a,n)};function $(e,o){if(!e.startsWith("#"))return e;let s=e.length===4?`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:e,f=parseInt(s.slice(1,7),16),a=n=>Math.max(0,Math.min(255,(f>>n&255)+o));return`rgb(${a(16)},${a(8)},${a(0)})`}function ye(e){return e>=7&&e<17?{sky:"#8ed0ff",sun:"rgba(255,244,214,0.10)",night:0}:e>=17&&e<20?{sky:"#ffae70",sun:"rgba(255,170,110,0.13)",night:.14}:e>=5&&e<7?{sky:"#ffc9a3",sun:"rgba(255,200,170,0.08)",night:.16}:{sky:"#16204a",sun:"rgba(0,0,0,0)",night:.24}}function He(e,o){e.fillStyle=C;for(let[,s,f,a,n]of o)e.fillRect(Math.round(s)-1,Math.round(f)-1,a+2,n+2);for(let[s,f,a,n,t]of o)r(e,s,f,a,n,t)}function Ne(e,o,s,f){let a=o.x*d+2,n=o.y*d+15,t=N(o),i=o.walking,u=o.facing==="left"||o.facing==="right",l=o.facing==="up",y=o.facing==="left",w=Math.floor(s*9+o.seed%5),m=i?w%4:0,g=i&&m%2===1?-1:0,S=!i&&!t&&Math.floor(s*1.4+o.seed%7)%2===0?1:0,E=o.party>0?-Math.abs(Math.round(Math.sin(s*12)*3)):0,b=o.skin,c=o.hair,M=o.shirt,O=$(M,-40),F=$(M,24),B="#39415a",R="#1f2433",W=o.seed%5,H=(o.seed>>>5)%3;e.fillStyle="rgba(0,0,0,0.28)",e.fillRect(Math.round(a+1),Math.round(n-1),10,2),f&&(e.fillStyle="rgba(255,255,255,0.45)",e.fillRect(Math.round(a-2),Math.round(n-2),16,4)),o.state==="blocked"&&(e.fillStyle=Math.floor(s*3)%2===0?"rgba(239,68,68,0.55)":"rgba(239,68,68,0.22)",e.fillRect(Math.round(a-2),Math.round(n-2),16,4));let re=g+E,p=[],A=n-13+re+S*0,v=A-8+S;if(t&&(r(e,"#1f2937",a+1,o.y*d+3,10,9),r(e,"#374151",a+2,o.y*d+11,8,3),r(e,"#111827",a+5,o.y*d+14,2,2)),!t){let k=A+7;if(u){let x=m===1?2:m===3?-2:0;p.push([B,a+4+x,k,3,5],[R,a+4+x+(y?-1:0),k+5,4,1]),p.push([$(B,-12),a+5-x,k,3,5],[R,a+5-x+(y?-1:0),k+5,4,1])}else{let x=m===1?1:0,D=m===3?1:0;p.push([B,a+2,k,3,5-x],[R,a+2,k+5-x,3,1]),p.push([B,a+7,k,3,5-D],[R,a+7,k+5-D,3,1])}}let z=i?m===1?1:m===3?-1:0:0;if(u)p.push([M,a+3,A,6,7],[O,a+3,A+6,6,1]),p.push([O,a+5+z,A+1,2,5],[b,a+5+z,A+6,2,1]);else{p.push([M,a+1,A,10,7],[O,a+1,A+6,10,1]);let k=t&&o.state==="working",x=Math.floor(s*10+o.seed)%2;p.push([O,a-1,A+1+z+(k?-x:0),2,5]),p.push([O,a+11,A+1-z+(k?x-1:0),2,5]),p.push([b,a-1,A+6+z+(k?-x:0),2,1]),p.push([b,a+11,A+6-z+(k?x-1:0),2,1]),!l&&H===2&&p.push(["#f3f4f6",a+4,A,4,3],[o.seed%2?"#ef4444":"#1d4ed8",a+5,A,2,5]),!l&&H===1&&p.push([F,a+3,A,6,2],[O,a+5,A+2,2,4]),l&&H===1&&p.push([F,a+2,A,8,3])}if(p.push([b,a+1,v,10,8]),l)p.push([c,a+1,v,10,7]);else if(u){let k=y?a+7:a+1;p.push([c,a+1,v,10,3],[c,k,v,4,6]);let x=Math.floor(s*.7+o.seed%11)%7===0;p.push([x?$(b,-40):"#1a1a24",y?a+3:a+8,v+4,1,x?1:2])}else{p.push([c,a+1,v,10,3],[c,a+1,v+3,1,2],[c,a+10,v+3,1,2]);let k=Math.floor(s*.7+o.seed%11)%7===0;p.push([k?$(b,-40):"#1a1a24",a+3,v+4,2,k?1:2]),p.push([k?$(b,-40):"#1a1a24",a+7,v+4,2,k?1:2]),p.push([$(b,-28),a+5,v+6,2,1])}if(W===1&&p.push([c,a,v+2,2,8],[c,a+10,v+2,2,8]),W===2&&p.push([c,a+4,v-3,4,3]),W===3&&p.push([c,a+2,v-2,2,2],[c,a+5,v-3,2,3],[c,a+8,v-2,2,2]),W===4&&(p.push([F,a,v-1,12,3]),!l&&!u&&p.push([O,a+1,v+2,10,1]),u&&p.push([O,y?a-2:a+9,v+1,5,1])),He(e,p),o.party>0){let k=["#f59e0b","#ec4899","#22c55e","#3b82f6","#a855f7"];for(let x=0;x<10;x++){let D=(s*1.1+x*.137)%1,Z=x*2.4+o.seed;r(e,k[x%k.length],a+6+Math.cos(Z)*(4+D*14),n-22-D*6+D*D*26,2,2)}}}function Q(e,o,s,f){r(e,C,o-1,s-1,13,11),r(e,"#ffffff",o,s,11,9),r(e,"#ffffff",o+4,s+9,3,1),r(e,C,o+4,s+10,3,1),f(o,s)}function Ye(e,o,s){let f=Math.round(o.x*d+2),a=Math.round(o.y*d-22+(N(o)?2:-2)),n=Math.floor(s*2+o.seed%3)%2===0;if(o.state==="blocked")Q(e,f,a,(t,i)=>{r(e,n?"#dc2626":"#991b1b",t+5,i+1,2,5),r(e,n?"#dc2626":"#991b1b",t+5,i+7,2,1)});else if(o.state==="thinking"){let t=Math.floor(s*3)%4;Q(e,f,a,(i,u)=>{for(let l=0;l<3;l++)r(e,l<t?"#111827":"#d1d5db",i+2+l*3,u+4,2,2)})}else if(o.state==="reviewing"&&!o.walking)Q(e,f,a,(t,i)=>{r(e,"#2563eb",t+4,i+1,4,1),r(e,"#2563eb",t+7,i+2,1,2),r(e,"#2563eb",t+5,i+4,2,1),r(e,"#2563eb",t+5,i+5,1,1),r(e,"#2563eb",t+5,i+7,1,1)});else if(o.state==="done"){let t=n?"#f59e0b":"#fbbf24";Q(e,f,a,(i,u)=>{r(e,t,i+5,u+1,1,7),r(e,t,i+2,u+3,7,2),r(e,t,i+4,u+2,3,5)})}else o.state==="idle"&&!o.walking&&o.seed%3===0&&Q(e,f,a,(t,i)=>{r(e,"#92400e",t+3,i+3,4,4),r(e,"#d97706",t+3,i+3,4,1),r(e,"#92400e",t+7,i+4,1,2),n&&r(e,"#9ca3af",t+4,i+1,1,1)})}function Ke(e,o){for(let s=o.y;s<o.y+o.h;s++)for(let f=o.x;f<o.x+o.w;f++){let a=f*d,n=s*d,t=(f*73+s*151)%17;switch(o.floor){case"carpet":r(e,"#4c4f7a",a,n,d,d);for(let i=0;i<8;i++)r(e,i%2?"#55588a":"#454874",a+(f*7+i*5)%15,n+(s*3+i*7)%15,1,1);break;case"tile":r(e,(f+s)%2===0?"#d6dee8":"#c2ccd8",a,n,d,d),r(e,"#aab5c2",a,n+15,d,1),r(e,"#aab5c2",a+15,n,1,d),r(e,"#e8eef5",a+1,n+1,5,1);break;case"stone":r(e,t%3===0?"#8d93a3":"#9aa0b0",a,n,d,d),r(e,"#7a8090",a,n+15,d,1),r(e,"#7a8090",a+(s%2?7:15),n,1,15),r(e,"#adb3c2",a+2,n+2,3,1);break;case"concrete":r(e,"#6b7280",a,n,d,d);for(let i=0;i<5;i++)r(e,i%2?"#747b89":"#636a78",a+(f*11+i*3)%15,n+(s*5+i*5)%15,1,1);t===3&&r(e,"#596070",a+3,n+8,8,1);break;case"grass":r(e,"#3f8f4f",a,n,d,d);for(let i=0;i<7;i++)r(e,i%3?"#4aa35c":"#347a43",a+(f*5+i*9)%15,n+(s*7+i*3)%14,1,2);break;default:{let i=s%2===0?"#a57448":"#9c6c42";r(e,i,a,n,d,d),r(e,"#8a5d36",a,n+7,d,1),r(e,"#8a5d36",a,n+15,d,1),r(e,"#8a5d36",a+(f*8+(s%2?8:0))%16,n,1,7),r(e,"#8a5d36",a+(f*8+(s%2?0:8))%16,n+8,1,7),r(e,"#b4835a",a+t%9+2,n+3,4,1),r(e,"#b4835a",a+t%7+4,n+11,3,1)}}}}var Fe="#2a2d48",je="#5c628f",V="#4a4f78",qe="#6d74a4";function Ge(e,o,s,f){let a=new Set;for(let t of o.rooms)for(let i=t.y;i<t.y+t.h;i++)for(let u=t.x;u<t.x+t.w;u++)a.add(`${u},${i}`);let n=new Set(o.doors.map(t=>`${t.x},${t.y}`));for(let t=0;t<o.rows;t++)for(let i=0;i<o.cols;i++){let u=`${i},${t}`;if(a.has(u)||n.has(u))continue;let l=i*d,y=t*d;a.has(`${i},${t+1}`)?(r(e,je,l,y,d,d),r(e,qe,l,y,d,1),r(e,V,l,y+12,d,4),r(e,s.primary,l,y+11,d,1),i%4===3&&!o.furniture.some(w=>P[w.type].wall&&w.x===i&&w.y===t)&&(r(e,"#1f2937",l+1,y+1,14,9),r(e,f.sky,l+2,y+2,12,7),r(e,$(f.sky,40),l+3,y+3,4,2),r(e,"#1f2937",l+8,y+2,1,7),f.night>.3&&(r(e,"#fef3c7",l+4,y+3,1,1),r(e,"#fef3c7",l+11,y+5,1,1)))):(r(e,Fe,l,y,d,d),a.has(`${i},${t-1}`)&&r(e,"#20233a",l,y,d,3),a.has(`${i-1},${t}`)&&r(e,"#20233a",l,y,2,d),a.has(`${i+1},${t}`)&&r(e,"#20233a",l+14,y,2,d))}for(let t of o.doors){let i=t.x*d,u=t.y*d,l=a.has(`${t.x},${t.y-1}`)||a.has(`${t.x},${t.y+1}`);r(e,"#7c5637",i,u,d,d);for(let y=2;y<16;y+=4)r(e,"#6b4a2f",l?i:i+y,l?u+y:u,l?d:1,l?1:d);l?(r(e,V,i,u,2,d),r(e,V,i+14,u,2,d)):(r(e,V,i,u,d,2),r(e,V,i,u+14,d,2))}}function Qe(e,o){e.font=oe,e.textBaseline="top";for(let s of o.rooms){if(!s.name)continue;let f=s.name.toUpperCase(),a=Math.ceil(e.measureText(f).width)+6,n=s.x*d+3,t=s.y*d-13;r(e,"#1c1f33",n,t,a,10),r(e,"#2f3350",n+1,t+1,a-2,8),e.fillStyle="#f8fafc",e.fillText(f,n+3,t+1.5)}}function he(e,o,s,f){r(e,Fe,0,0,o.cols*d,o.rows*d);for(let a of o.rooms)Ke(e,a);Ge(e,o,s,f);for(let a of o.furniture)a.type==="rug"&&be(e,a,o,0,s);for(let a of o.furniture)P[a.type].wall&&be(e,a,o,0,s);if(f.sun!=="rgba(0,0,0,0)"){e.fillStyle=f.sun;for(let a of o.rooms)for(let n=a.x;n<a.x+a.w;n++)n%4===3&&e.fillRect(n*d+2,a.y*d,12,Math.min(a.h,3)*d)}}function Ve(e,o,s,f,a,n,t,i){if(r(e,"#55351d",o+1,s+22,46,8),r(e,"#6b4427",o+1,s+13,46,10),r(e,"#8a5a33",o+1,s+10,46,12),r(e,"#a87545",o+1,s+10,46,2),r(e,"#3b2413",o+3,s+22,3,9),r(e,"#3b2413",o+42,s+22,3,9),r(e,"#55351d",o+30,s+23,12,7),r(e,"#7c5637",o+31,s+24,10,2),r(e,"#d4a24e",o+35,s+24,2,1),r(e,"#7c5637",o+31,s+27,10,2),r(e,"#d4a24e",o+35,s+27,2,1),r(e,C,o+14,s-3,20,15),r(e,"#374151",o+22,s+12,4,2),r(e,"#4b5563",o+19,s+14,10,1),i)r(e,"#3f0f14",o+15,s-2,18,13),Math.floor(a*2)%2===0&&(r(e,"#ef4444",o+23,s,2,6),r(e,"#ef4444",o+23,s+7,2,2));else if(f){r(e,"#0f2a2e",o+15,s-2,18,13);let u=Math.floor(a*3+n%13);for(let l=0;l<5;l++){let y=3+((n>>l&7)+(u+l)*7)%12;r(e,l%3===0?t.primary:l%3===1?"#7dd3fc":"#fcd34d",o+16+l%2*2,s-1+l*2.2,y,1)}e.fillStyle="rgba(125,211,252,0.12)",e.fillRect(o+10,s+11,28,8)}else r(e,"#1f2937",o+15,s-2,18,13),r(e,"#374151",o+17,s,3,1);r(e,"#d1d5db",o+16,s+15,16,5);for(let u=0;u<2;u++)for(let l=0;l<7;l++)r(e,"#9ca3af",o+17+l*2,s+16+u*2,1,1);r(e,"#e5e7eb",o+34,s+16,3,4),r(e,"#f3f4f6",o+40,s+13,5,5),r(e,t.primary,o+40,s+15,5,1),r(e,"#fde68a",o+4,s+13,7,6),r(e,"#fbbf24",o+5,s+15,5,1)}function Je(e,o,s,f){r(e,"#3a2c1e",o,s-12,64,27),r(e,"#d9c29c",o+2,s-10,60,23);for(let t=0;t<40;t++)r(e,"#c9b08a",o+3+t*37%58,s-9+t*13%21,1,1);let a={todo:"#fde68a",doing:"#93c5fd",done:"#86efac"},n=8;f.tasks.slice(0,n*2).forEach((t,i)=>{let u=i%n,l=Math.floor(i/n);r(e,"#00000033",o+5+u*7,s-7+l*10,6,8),r(e,a[t.state],o+4+u*7,s-8+l*10,6,8),r(e,"#ef4444",o+6+u*7,s-8+l*10,2,1),r(e,"#00000040",o+5+u*7,s-5+l*10,4,1),r(e,"#00000040",o+5+u*7,s-3+l*10,3,1)})}function be(e,o,s,f,a){let n=o.x*d,t=o.y*d;switch(o.type){case"desk":{let i=o.x+1,u=o.y+2,l=s.agents.find(y=>y.seat?.x===i&&y.seat?.y===u&&N(y));Ve(e,n,t,!!l,f,l?.seed??0,a,l?.state==="blocked");break}case"coffee":r(e,"#374151",n,t+2,32,14),r(e,"#6b7280",n,t+2,32,2),r(e,C,n+4,t-9,15,15),r(e,"#27272a",n+5,t-8,13,13),r(e,Math.floor(f*2)%2?"#ef4444":"#7f1d1d",n+15,t-6,2,2),r(e,"#52525b",n+7,t-6,6,4),r(e,"#f3f4f6",n+8,t+3,5,4),r(e,"#f3f4f6",n+23,t-1,5,5),r(e,"#92400e",n+24,t,3,1);for(let i=0;i<3;i++)e.fillStyle="rgba(255,255,255,0.5)",e.fillRect(n+9+Math.round(Math.sin(f*2+i)*1.5),t-1-(f*8+i*4)%9,1,2);break;case"water":r(e,"#d1d5db",n+3,t+3,10,13),r(e,"#9ca3af",n+3,t+14,10,2),r(e,"#60a5fa",n+4,t-8,8,11),r(e,"#bae6fd",n+5,t-7,2,9),r(e,"#3b82f6",n+5,t+6,2,2),r(e,"#ef4444",n+9,t+6,2,2),Math.floor(f*.4+o.x)%5===0&&r(e,"#e0f2fe",n+8,t-2-f*6%7,1,1);break;case"sofa":r(e,$(a.primary,-60),n+1,t-7,46,11),r(e,$(a.primary,-30),n+2,t-6,44,3),r(e,"#4b5563",n,t+3,48,11),r(e,"#6b7280",n+3,t+3,20,7),r(e,"#6b7280",n+25,t+3,20,7),r(e,"#374151",n,t+12,48,3),r(e,"#374151",n-1,t-2,4,16),r(e,"#374151",n+45,t-2,4,16);break;case"plant":r(e,"#92400e",n+4,t+9,8,7),r(e,"#b45309",n+3,t+8,10,2);for(let[i,u,l,y]of[[6,-3,4,11],[2,0,5,6],[9,1,5,6],[4,-6,3,6],[9,-5,3,5]])r(e,"#15803d",n+i,t+u,l,y);r(e,"#22c55e",n+7,t-3,2,8),r(e,"#22c55e",n+3,t+1,2,3),r(e,"#4ade80",n+10,t-4,1,3);break;case"fern":r(e,"#57534e",n+3,t+10,10,6),r(e,"#78716c",n+2,t+9,12,2);for(let i=0;i<7;i++){let u=i-3;for(let l=0;l<5;l++)r(e,l%2?"#16a34a":"#15803d",n+7+u*(l/2+1),t+8-l*2+Math.abs(u),2,2)}break;case"board":Je(e,n,t,s);break;case"whiteboard":r(e,"#9ca3af",n,t-10,48,22),r(e,"#f9fafb",n+2,t-8,44,18),r(e,"#3b82f6",n+5,t-5,14,1),r(e,"#3b82f6",n+5,t-2,9,1),r(e,"#ef4444",n+24,t-6,8,6),r(e,"#f9fafb",n+25,t-5,6,4),r(e,"#10b981",n+8,t+3,20,1),r(e,"#10b981",n+27,t+2,1,3),r(e,"#6b7280",n+2,t+10,44,2);break;case"shelf":r(e,"#5b3a21",n,t-12,32,28);for(let i=0;i<2;i++){r(e,"#3b2413",n+2,t-10+i*13,28,11);for(let u=0;u<8;u++){let l=["#ef4444","#3b82f6","#10b981","#f59e0b","#8b5cf6"][(u*3+i+o.x)%5];r(e,l,n+3+u*3,t-8+i*13+u%3,2,9-u%3),r(e,$(l,40),n+3+u*3,t-6+i*13,2,1)}}break;case"server":r(e,C,n,t-13,16,29),r(e,"#1f2937",n+1,t-12,14,27);for(let i=0;i<5;i++){r(e,"#111827",n+2,t-11+i*5,12,4);let u=Math.floor(f*3+i*2+o.x)%3!==0;r(e,u?"#22c55e":"#14532d",n+3,t-10+i*5,1,1),r(e,i%2===0?"#f59e0b":"#3b82f6",n+5,t-10+i*5,1,1),r(e,"#374151",n+8,t-10+i*5,5,1)}break;case"table":r(e,"#44403c",n+2,t+16,44,12),r(e,"#78716c",n+2,t+3,44,14),r(e,"#a8a29e",n+2,t+3,44,2),r(e,"#f9fafb",n+10,t+6,8,6),r(e,"#f9fafb",n+28,t+8,8,6),r(e,"#1f2937",n+12,t+8,4,1),r(e,"#3b82f6",n+30,t+10,4,1);break;case"rug":r(e,a.primary,n,t,64,48),e.fillStyle="rgba(0,0,0,0.42)",e.fillRect(n+3,t+3,58,42),r(e,a.primary,n+6,t+6,52,1),r(e,a.primary,n+6,t+41,52,1),r(e,a.primary,n+6,t+6,1,36),r(e,a.primary,n+57,t+6,1,36);for(let i=0;i<6;i++)r(e,a.primary,n+12+i*8,t+22,4,4);break;case"arcade":r(e,C,n,t-14,16,30),r(e,"#4c1d95",n+1,t-13,14,28),r(e,"#111827",n+3,t-10,10,9),r(e,["#22c55e","#ec4899","#38bdf8"][Math.floor(f*2)%3],n+4+Math.floor(f*4)%7,t-8+Math.floor(f*3)%5,2,2),r(e,"#f59e0b",n+3,t-13,10,2),r(e,"#27272a",n+2,t+1,12,4),r(e,"#ef4444",n+4,t+2,2,2),r(e,"#3b82f6",n+9,t+2,2,2);break;case"fridge":r(e,C,n+1,t-12,14,28),r(e,"#e5e7eb",n+2,t-11,12,26),r(e,"#9ca3af",n+2,t-3,12,1),r(e,"#6b7280",n+11,t-8,1,3),r(e,"#6b7280",n+11,t,1,5),r(e,"#fde68a",n+4,t-9,3,3),r(e,"#fca5a5",n+5,t+3,3,3);break;case"printer":r(e,"#4b5563",n+2,t+8,12,8),r(e,C,n+1,t-2,14,11),r(e,"#d1d5db",n+2,t-1,12,9),r(e,"#f9fafb",n+4,t-5-(Math.floor(f)%4===0?1:0),8,5),r(e,"#22c55e",n+11,t+1,2,1),r(e,"#9ca3af",n+3,t+5,10,1);break;case"lamp":r(e,"#374151",n+5,t+13,6,3),r(e,"#4b5563",n+7,t-4,2,17),r(e,C,n+2,t-10,12,8),r(e,"#fde68a",n+3,t-9,10,6),r(e,"#fef3c7",n+4,t-8,4,2);break;case"beanbag":r(e,C,n,t+3,16,13),r(e,$(a.primary,-50),n+1,t+4,14,11),r(e,$(a.primary,-20),n+3,t+5,8,4),r(e,"#00000040",n+1,t+13,14,2);break;case"tv":r(e,"#3b2413",n+2,t+8,44,8),r(e,"#5b3a21",n+2,t+8,44,2),r(e,C,n+4,t-14,40,22),r(e,"#0b1120",n+5,t-13,38,20);for(let i=0;i<9;i++){let u=2+(i*5+Math.floor(f*3))%12;r(e,i%3===0?a.primary:i%3===1?"#38bdf8":"#f472b6",n+8+i*4,t+5-u,3,u)}break;case"vending":r(e,C,n,t-14,16,30),r(e,"#b91c1c",n+1,t-13,14,28),r(e,"#0f172a",n+3,t-11,8,16);for(let i=0;i<3;i++)for(let u=0;u<2;u++)r(e,["#fbbf24","#34d399","#60a5fa","#f472b6"][(i+u*2)%4],n+4+u*3,t-10+i*5,2,4);r(e,"#d1d5db",n+12,t-9,2,6),r(e,"#111827",n+3,t+8,10,4);break;case"trophy":r(e,"#6b4427",n+2,t+8,12,8),r(e,"#8a5a33",n+2,t+8,12,2),r(e,"#78350f",n+5,t+5,6,3),r(e,"#f59e0b",n+7,t+1,2,4),r(e,C,n+3,t-8,10,10),r(e,"#fbbf24",n+4,t-7,8,8),r(e,"#fde68a",n+5,t-6,2,5),r(e,"#fbbf24",n+1,t-6,3,1),r(e,"#fbbf24",n+12,t-6,3,1);break;case"clock":{r(e,C,n+3,t+1,10,10),r(e,"#f9fafb",n+4,t+2,8,8),r(e,"#1f2937",n+8,t+3,1,3),r(e,"#1f2937",n+8,t+6,3,1);break}case"poster":{let i=["#7c3aed","#0ea5e9","#db2777","#059669"],u=i[(o.x+o.y)%i.length];r(e,C,n+2,t,12,11),r(e,u,n+3,t+1,10,9),r(e,$(u,60),n+5,t+3,6,3),r(e,"#f9fafb",n+5,t+7,6,1);break}}}function Ze(e,o,s,f){e.font=oe,e.textBaseline="top";let a=Math.ceil(e.measureText(o.name).width)+5,n=Math.round(Math.max(1,Math.min(f-a-1,o.x*d+8-a/2))),t=Math.round(o.y*d+16);e.fillStyle=s?"#ffffff":"rgba(17,24,39,0.82)",e.fillRect(n,t,a,10),e.fillStyle=s?"#111827":"#ffffff",e.fillText(o.name,n+2.5,t+1.5)}function et(e,o,s){let f=[],a="";for(let n of o.split(/\s+/)){let t=a?`${a} ${n}`:n;e.measureText(t).width>s&&a?(f.push(a),a=n):a=t}return a&&f.push(a),f.slice(0,3)}var $e={working:"Working",thinking:"Thinking",blocked:"Blocked",reviewing:"Reviewing",idle:"On a break",done:"Finished",away:"Away"};function tt(e,o,s){e.font=We,e.textBaseline="top";let f=s.rooms.find(l=>l.id===o.area),a=et(e,o.task||$e[o.state]||"",110),n=120,t=18+a.length*9+(f?9:0)+3,i=Math.round(Math.max(2,Math.min(s.cols*d-n-2,o.x*d+8-n/2))),u=Math.round(Math.max(2,o.y*d-t-24));r(e,C,i-1,u-1,n+2,t+2),r(e,"#ffffff",i,u,n,t),e.fillStyle="#111827",e.font=oe,e.fillText(`${o.name}: ${$e[o.state]??""}`.slice(0,28),i+4,u+4),e.fillStyle="#374151",e.font=We,a.forEach((l,y)=>e.fillText(l,i+4,u+15+y*9)),f&&(e.fillStyle="#6b7280",e.fillText(`In ${f.name}`.slice(0,28),i+4,u+15+a.length*9))}function nt(e,o,s){if(o.tasks.length===0)return;let f=o.tasks.filter(n=>n.state==="done").length;e.font=oe,e.textBaseline="top";let a=96;r(e,"rgba(17,24,39,0.85)",4,4,a,20),e.fillStyle="#ffffff",e.fillText(`QUESTS ${f}/${o.tasks.length}`,8,6.5),r(e,"#374151",8,16,a-8,4),r(e,s.primary,8,16,Math.round((a-8)*f/o.tasks.length),4)}function Be(e,o,s,f,a,n,t){let i=o.cols*d,u=o.rows*d;n?e.drawImage(n,0,0,i,u):he(e,o,f,a);let l=[];for(let m of o.furniture){let g=P[m.type];g.solid!==!1&&l.push({depth:(m.y+g.h)*d-2,draw:()=>be(e,m,o,s,f)})}let y=o.agents.filter(m=>m.state!=="away");for(let m of y)l.push({depth:m.y*d+14,draw:()=>Ne(e,m,s,m.id===t)});l.sort((m,g)=>m.depth-g.depth);for(let m of l)m.draw();if(a.night>0){e.fillStyle=`rgba(12,14,48,${a.night})`,e.fillRect(0,0,i,u),e.save(),e.globalCompositeOperation="lighter";let m=(g,S,E,b)=>{let c=e.createRadialGradient(g,S,1,g,S,E);c.addColorStop(0,b),c.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=c,e.fillRect(g-E,S-E,E*2,E*2)};for(let g of o.furniture)g.type==="lamp"&&m(g.x*d+8,g.y*d,36,"rgba(253,224,139,0.30)"),(g.type==="arcade"||g.type==="vending"||g.type==="tv")&&m(g.x*d+8,g.y*d,26,"rgba(125,211,252,0.16)"),g.type==="desk"&&o.agents.some(S=>S.seat?.x===g.x+1&&S.seat?.y===g.y+2&&N(S))&&m(g.x*d+24,g.y*d+8,30,"rgba(125,211,252,0.26)");e.restore()}Qe(e,o);for(let m of y)Ze(e,m,m.id===t,i);for(let m of y)m.id!==t&&Ye(e,m,s);nt(e,o,f);let w=y.find(m=>m.id===t);w&&tt(e,w,o)}var ot=/^(#[0-9a-f]{3,8}|rgba?\([\d\s.,%/]+\)|hsla?\([\d\s.,%/a-z]+\))$/i,me=4;function st(e){let o=getComputedStyle(e),s=(f,a)=>{let n=o.getPropertyValue(f).trim();return ot.test(n)?n:a};return{primary:s("--blkc-color-primary","#3b82f6"),accent:s("--blkc-color-accent","#f59e0b"),background:s("--blkc-color-background","#1a1a2e"),text:s("--blkc-color-text","#ffffff")}}function J(e,o={},s={}){let f=fe(o),a=e.getContext("2d");if(!a)throw new Error("This browser can't draw to a canvas.");let n=a,t=st(e),i=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,u,l=0,y=0,w=0,m=0,g=!0,S=!1,E=!0,b,c={x:0,y:0,zoom:1},M=new Date().getHours(),O=ye(M),F,B=!0,R=()=>f.cols*d,W=()=>f.rows*d,H=()=>{c.zoom=Math.min(me,Math.max(1,c.zoom)),c.x=Math.min(R()-R()/c.zoom,Math.max(0,c.x)),c.y=Math.min(W()-W()/c.zoom,Math.max(0,c.y))},re=()=>{if(typeof document>"u")return;F??(F=document.createElement("canvas")),F.width=R()*l,F.height=W()*l;let h=F.getContext("2d");h&&(h.setTransform(l,0,0,l,0,0),h.imageSmoothingEnabled=!1,he(h,f,t,O),B=!1)},p=()=>{B&&re();let h=l*c.zoom;n.setTransform(h,0,0,h,-c.x*h,-c.y*h),n.imageSmoothingEnabled=!1,Be(n,f,y,t,O,F,u),b?.(n)},A=()=>{let h=e.getBoundingClientRect().width||R(),L=Math.max(1,Math.ceil(h*(typeof devicePixelRatio=="number"?devicePixelRatio:1)/R()));L===l&&e.width===R()*l&&e.height===W()*l||(l=L,e.width=R()*l,e.height=W()*l,B=!0,p())},v=h=>{if(S)return;if(m=requestAnimationFrame(v),!g){w=h;return}let T=Math.min((h-w)/1e3||0,.1);w=h,y+=T,de(f,T);let L=new Date().getHours();L!==M&&(M=L,O=ye(M),B=!0),p()},z=h=>{u=h===u?void 0:h,s.onSelect?.(u),i&&p()},k=h=>{let T=e.getBoundingClientRect(),L=(h.clientX-T.left)/T.width*(R()/c.zoom)+c.x,_=(h.clientY-T.top)/T.height*(W()/c.zoom)+c.y;return{x:L/d,y:_/d}},x,D=h=>{E&&(x={x:h.clientX,y:h.clientY,moved:!1})},Z=h=>{if(!E)return;if(x&&s.camera&&c.zoom>1){let _=e.getBoundingClientRect(),Y=h.clientX-x.x,we=h.clientY-x.y;if(x.moved||Math.abs(Y)+Math.abs(we)>3){x.moved=!0,c.x-=Y/_.width*(R()/c.zoom),c.y-=we/_.height*(W()/c.zoom),x.x=h.clientX,x.y=h.clientY,H(),e.style.cursor="grabbing";return}}let{x:T,y:L}=k(h);e.style.cursor=ne(f,T,L)?"pointer":s.camera&&c.zoom>1?"grab":"default"},pe=h=>{if(!E)return;let T=x?.moved;if(x=void 0,T)return;let{x:L,y:_}=k(h),Y=ne(f,L,_);(Y||u)&&z(Y?.id??u)},ge=(h,T)=>{if(h===void 0){c.zoom=1,c.x=0,c.y=0;return}let L=T?k(T):{x:c.x/d+R()/c.zoom/d/2,y:c.y/d+W()/c.zoom/d/2};if(c.zoom=Math.min(me,Math.max(1,c.zoom*h)),T){let _=k(T);c.x+=(L.x-_.x)*d,c.y+=(L.y-_.y)*d}else c.x=L.x*d-R()/c.zoom/2,c.y=L.y*d-W()/c.zoom/2;H()},xe=h=>{h.preventDefault(),ge(h.deltaY<0?1.2:1/1.2,h)};e.addEventListener("pointerdown",D),e.addEventListener("pointermove",Z),e.addEventListener("pointerup",pe),s.camera&&e.addEventListener("wheel",xe,{passive:!1});let ke=typeof ResizeObserver=="function"?new ResizeObserver(A):void 0;ke?.observe(e);let Me=typeof IntersectionObserver=="function"?new IntersectionObserver(h=>{g=h.some(T=>T.isIntersecting)}):void 0;return Me?.observe(e),A(),l===0&&(l=1,p()),i||(m=requestAnimationFrame(v)),{world:f,update(h){ce(f,h),i&&p()},setLayout(h){le(f,h),B=!0,c.zoom=Math.min(c.zoom,me),H(),l=0,A()},select:z,tileAt:k,setOverlay(h){b=h},setInteractive(h){E=h,x=void 0,h||(e.style.cursor="crosshair")},zoom:ge,destroy(){S=!0,cancelAnimationFrame(m),ke?.disconnect(),Me?.disconnect(),e.removeEventListener("pointerdown",D),e.removeEventListener("pointermove",Z),e.removeEventListener("pointerup",pe),e.removeEventListener("wheel",xe)}}}var Ie=new Map;function rt(e,o){Ie.set(e,o)}function at(e,o,s){let f=[...s.querySelectorAll("button[data-blkc-agent]")],a=J(e,o,{onSelect(n){for(let t of f)t.setAttribute("aria-pressed",String(t.dataset.blkcAgent===n))}});for(let n of f)n.disabled=!1,n.addEventListener("click",()=>a.select(n.dataset.blkcAgent));return a}rt("office",at);var De=new WeakSet;function se(e=document){let o=[];for(let s of e.querySelectorAll("canvas[data-blkc-canvas]")){if(De.has(s))continue;let f=Ie.get(s.dataset.blkcCanvas??"");if(!f)continue;let a=s.closest("[data-blkc-canvas-root]")??s.parentElement??s,n=a.querySelector("script[data-blkc-canvas-data]"),t={};try{t=JSON.parse(n?.textContent||"{}")}catch{t={}}De.add(s);let i=f(s,t,a);o.push({element:s,destroy:()=>i.destroy()})}return o}globalThis.BLKCCanvas={FURNITURE:P,createOffice:J,findPath:G,mountCanvasBlocks:se};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>se()):se();})();
|
|
2
2
|
/**
|
|
3
3
|
* BLKC Render-Canvas.
|
|
4
4
|
*
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** What a Kit writes to describe an office. All of it is plain JSON. */
|
|
2
2
|
export type AgentState = "working" | "thinking" | "blocked" | "reviewing" | "idle" | "done" | "away";
|
|
3
3
|
export type TaskState = "todo" | "doing" | "done";
|
|
4
|
-
export type FloorStyle = "wood" | "carpet" | "tile";
|
|
5
|
-
export type FurnitureType = "desk" | "coffee" | "sofa" | "plant" | "board" | "shelf" | "server" | "table" | "rug" | "water";
|
|
4
|
+
export type FloorStyle = "wood" | "carpet" | "tile" | "stone" | "concrete" | "grass";
|
|
5
|
+
export type FurnitureType = "desk" | "coffee" | "sofa" | "plant" | "fern" | "board" | "whiteboard" | "shelf" | "server" | "table" | "rug" | "water" | "arcade" | "fridge" | "printer" | "lamp" | "beanbag" | "tv" | "vending" | "clock" | "poster" | "trophy";
|
|
6
6
|
export interface OfficeRoom {
|
|
7
7
|
id?: string;
|
|
8
8
|
name?: string;
|
|
@@ -11,6 +11,8 @@ export interface OfficeRoom {
|
|
|
11
11
|
w: number;
|
|
12
12
|
h: number;
|
|
13
13
|
floor?: FloorStyle;
|
|
14
|
+
/** Project folders this room stands for, so agents go there when they work in them. */
|
|
15
|
+
paths?: string[];
|
|
14
16
|
}
|
|
15
17
|
export interface OfficeDoor {
|
|
16
18
|
x: number;
|
|
@@ -27,6 +29,8 @@ export interface OfficeAgent {
|
|
|
27
29
|
role?: string;
|
|
28
30
|
state?: AgentState;
|
|
29
31
|
task?: string;
|
|
32
|
+
/** The id of the room this agent is working in. */
|
|
33
|
+
area?: string;
|
|
30
34
|
/** Character colours. Anything left out is picked from the id. */
|
|
31
35
|
hair?: string;
|
|
32
36
|
skin?: string;
|
|
@@ -37,12 +41,14 @@ export interface OfficeTask {
|
|
|
37
41
|
state?: TaskState;
|
|
38
42
|
agent?: string;
|
|
39
43
|
}
|
|
40
|
-
export interface
|
|
44
|
+
export interface OfficeLayout {
|
|
41
45
|
cols?: number;
|
|
42
46
|
rows?: number;
|
|
43
47
|
rooms?: OfficeRoom[];
|
|
44
48
|
doors?: OfficeDoor[];
|
|
45
49
|
furniture?: OfficeFurniture[];
|
|
50
|
+
}
|
|
51
|
+
export interface OfficeScene extends OfficeLayout {
|
|
46
52
|
agents?: OfficeAgent[];
|
|
47
53
|
tasks?: OfficeTask[];
|
|
48
54
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACrG,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACrG,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AACrF,MAAM,MAAM,aAAa,GACrB,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAC7G,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtH,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AACD,MAAM,WAAW,UAAU;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AACpD,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,aAAa,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAC9E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,UAAU;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAEhF,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB"}
|
package/dist/world.d.ts
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
* The office as data: which tiles can be walked on, who is where, and where they are
|
|
3
3
|
* heading. Nothing in here touches a canvas, so all of it can be tested.
|
|
4
4
|
*/
|
|
5
|
-
import type { AgentState, FloorStyle, FurnitureType, OfficeDoor, OfficeFurniture, OfficeRoom, OfficeScene, TaskState } from "./types.js";
|
|
5
|
+
import type { AgentState, FloorStyle, FurnitureType, OfficeDoor, OfficeFurniture, OfficeLayout, OfficeRoom, OfficeScene, TaskState } from "./types.js";
|
|
6
6
|
export declare const MAX_COLS = 64;
|
|
7
7
|
export declare const MAX_ROWS = 40;
|
|
8
|
-
export declare const WALK_SPEED =
|
|
8
|
+
export declare const WALK_SPEED = 4.5;
|
|
9
9
|
/** Footprint in tiles, and where someone stands to use it, relative to its corner. */
|
|
10
10
|
export declare const FURNITURE: Record<FurnitureType, {
|
|
11
11
|
w: number;
|
|
12
12
|
h: number;
|
|
13
13
|
solid?: boolean;
|
|
14
|
+
wall?: boolean;
|
|
14
15
|
spot?: {
|
|
15
16
|
x: number;
|
|
16
17
|
y: number;
|
|
@@ -24,12 +25,14 @@ export declare const DEFAULT_LAYOUT: {
|
|
|
24
25
|
furniture: OfficeFurniture[];
|
|
25
26
|
};
|
|
26
27
|
export interface Room {
|
|
28
|
+
id: string;
|
|
27
29
|
name: string;
|
|
28
30
|
x: number;
|
|
29
31
|
y: number;
|
|
30
32
|
w: number;
|
|
31
33
|
h: number;
|
|
32
34
|
floor: FloorStyle;
|
|
35
|
+
paths: string[];
|
|
33
36
|
}
|
|
34
37
|
export interface Item {
|
|
35
38
|
type: FurnitureType;
|
|
@@ -47,6 +50,9 @@ export interface Agent {
|
|
|
47
50
|
role: string;
|
|
48
51
|
state: AgentState;
|
|
49
52
|
task: string;
|
|
53
|
+
area: string;
|
|
54
|
+
/** Seconds of celebration left after finishing something. */
|
|
55
|
+
party: number;
|
|
50
56
|
hair: string;
|
|
51
57
|
skin: string;
|
|
52
58
|
shirt: string;
|
|
@@ -86,6 +92,10 @@ export interface World {
|
|
|
86
92
|
y: number;
|
|
87
93
|
}[];
|
|
88
94
|
};
|
|
95
|
+
seats: {
|
|
96
|
+
x: number;
|
|
97
|
+
y: number;
|
|
98
|
+
}[];
|
|
89
99
|
}
|
|
90
100
|
export declare function hash(text: string): number;
|
|
91
101
|
export declare function isWalkable(world: World, x: number, y: number): boolean;
|
|
@@ -102,7 +112,9 @@ export declare function findPath(world: World, from: {
|
|
|
102
112
|
}[] | null;
|
|
103
113
|
/** Build a world from a scene. Bad values are dropped or clamped, so it never throws. */
|
|
104
114
|
export declare function createWorld(scene?: OfficeScene): World;
|
|
105
|
-
/**
|
|
115
|
+
/** Change the building while everyone is in it. Anyone left inside a wall or a desk moves. */
|
|
116
|
+
export declare function applyLayout(world: World, layout: OfficeLayout): void;
|
|
117
|
+
/** Where this agent's current state wants it to be. */
|
|
106
118
|
export declare function goalFor(world: World, agent: Agent): {
|
|
107
119
|
x: number;
|
|
108
120
|
y: number;
|
package/dist/world.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAe,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAc,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAe,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAc,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhL,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAI3B,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,sFAAsF;AACtF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAuBvI,CAAC;AAMF,eAAO,MAAM,cAAc;;;WAOpB,UAAU,EAAE;WAC8C,UAAU,EAAE;eAQtE,eAAe,EAAE;CACvB,CAAC;AAMF,MAAM,WAAW,IAAI;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;AAClI,MAAM,WAAW,IAAI;IAAG,IAAI,EAAE,aAAa,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AACnE,MAAM,WAAW,IAAI;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAExE,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE;QAAE,MAAM,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAAC,KAAK,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IACjF,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzC;AAYD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,6FAA6F;AAC7F,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,CA6BtI;AA0FD,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,GAAE,WAAgB,GAAG,KAAK,CAQ1D;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAcpE;AAkDD,uDAAuD;AACvD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAuBxF;AAaD,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,KAAG,OAEqE,CAAC;AAQ9G,gDAAgD;AAChD,wBAAgB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAoCnD;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,IAAI,CAqC5F;AAED,yDAAyD;AACzD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAc7E"}
|