@blkc-code/render-canvas 0.3.0 → 0.6.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 +9 -9
- package/dist/draw.d.ts.map +1 -1
- package/dist/draw.js +73 -305
- package/dist/draw.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +16 -0
- package/dist/links.d.ts.map +1 -0
- package/dist/links.js +75 -0
- package/dist/links.js.map +1 -0
- package/dist/office.d.ts +2 -0
- package/dist/office.d.ts.map +1 -1
- package/dist/office.js +2 -0
- package/dist/office.js.map +1 -1
- package/dist/pack.d.ts +31 -0
- package/dist/pack.d.ts.map +1 -0
- package/dist/pack.js +10 -0
- package/dist/pack.js.map +1 -0
- package/dist/paint.d.ts +15 -0
- package/dist/paint.d.ts.map +1 -0
- package/dist/paint.js +18 -0
- package/dist/paint.js.map +1 -0
- package/dist/runtime.js +1 -1
- package/dist/runtime.txt +1 -1
- package/dist/types.d.ts +13 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/world.d.ts +15 -11
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +31 -59
- package/dist/world.js.map +1 -1
- package/dist/worlds/office-data.d.ts +14 -0
- package/dist/worlds/office-data.d.ts.map +1 -0
- package/dist/worlds/office-data.js +52 -0
- package/dist/worlds/office-data.js.map +1 -0
- package/dist/worlds/office-paint.d.ts +13 -0
- package/dist/worlds/office-paint.d.ts.map +1 -0
- package/dist/worlds/office-paint.js +292 -0
- package/dist/worlds/office-paint.js.map +1 -0
- package/package.json +7 -2
- package/src/draw.ts +73 -289
- package/src/index.ts +3 -0
- package/src/links.ts +76 -0
- package/src/office.ts +3 -0
- package/src/pack.ts +36 -0
- package/src/paint.ts +24 -0
- package/src/types.ts +12 -2
- package/src/world.ts +41 -60
- package/src/worlds/office-data.ts +57 -0
- package/src/worlds/office-paint.ts +276 -0
package/dist/runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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();})();
|
|
1
|
+
"use strict";(()=>{var q="bold 7px ui-monospace, Menlo, Consolas, monospace",ae="7px ui-monospace, Menlo, Consolas, monospace",E="#14141f",r=(e,t,s,f,a,n)=>{e.fillStyle=t,e.fillRect(Math.round(s),Math.round(f),a,n)};function $(e,t){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)+t));return`rgb(${a(16)},${a(8)},${a(0)})`}var Ee=new Map;function ie(e){Ee.set(e.id,e)}var We=(e,t)=>e&&Ee.get(e)||t;var fe={desk:{w:3,h:2,spot:{x:1,y:2},use:"seat"},coffee:{w:2,h:1,spot:{x:0,y:1},use:"lounge"},water:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},sofa:{w:3,h:1,spot:{x:1,y:1},use:"lounge"},plant:{w:1,h:1},fern:{w:1,h:1},board:{w:4,h:1,spot:{x:1,y:1},use:"board"},whiteboard:{w:3,h:1,spot:{x:1,y:1},use:"board"},shelf:{w:2,h:1,spot:{x:0,y:1},use:"lounge"},server:{w:1,h:1},table:{w:3,h:2,spot:{x:1,y:2},use:"board"},rug:{w:4,h:3,solid:!1},arcade:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},fridge:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},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},use:"lounge"},tv:{w:3,h:1,spot:{x:1,y:2},use:"lounge"},vending:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},trophy:{w:1,h:1},clock:{w:1,h:1,solid:!1,wall:!0},poster:{w:1,h:1,solid:!1,wall:!0}},Re={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}]},le={id:"office",name:"Pixel Office",words:{quests:"QUESTS"},items:fe,layout:Re};var Qe=64,Je=40,Fe=40,Ze=300,Be=60,et=4.5,ce=fe,tt=["working","thinking","blocked","reviewing","idle","done","away"],nt=["todo","doing","done"],ot=["wood","carpet","tile","stone","concrete","grass","hall"];var B=(e,t)=>typeof e=="number"&&Number.isFinite(e)?Math.floor(e):t,P=(e,t=120)=>typeof e=="string"?e.slice(0,t):"",U=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function ze(e){let t=2166136261;for(let s=0;s<e.length;s++)t=Math.imul(t^e.charCodeAt(s),16777619);return t>>>0}var Ie=["#2b1b12","#5a3a22","#a8622d","#d9b36c","#20242e","#7d2f3f","#4a5568","#e5e7eb"],$e=["#f4d3b5","#e8b98f","#c98d62","#9c6644","#6f4530","#4e2f20"],De=["#3b82f6","#ef4444","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316"],ue=(e,t)=>typeof e=="string"&&/^#[0-9a-f]{3,8}$/i.test(e)?e:t,de=(e,t,s)=>s*e.cols+t;function X(e,t,s){return t>=0&&s>=0&&t<e.cols&&s<e.rows&&e.walkable[de(e,t,s)]===!0}function Y(e,t,s){if(!X(e,s.x,s.y))return null;if(t.x===s.x&&t.y===s.y)return[];let f=new Int32Array(e.cols*e.rows).fill(-1),a=de(e,t.x,t.y);f[a]=a;let n=[a];for(let o=0;o<n.length;o++){let i=n[o],l=i%e.cols,u=Math.floor(i/e.cols);if(l===s.x&&u===s.y){let b=[];for(let w=i;w!==a;w=f[w])b.unshift({x:w%e.cols,y:Math.floor(w/e.cols)});return b}for(let[b,w]of[[0,1],[0,-1],[1,0],[-1,0]]){let x=l+b,y=u+w;if(!X(e,x,y))continue;let O=de(e,x,y);f[O]===-1&&(f[O]=i,n.push(O))}}return null}function _e(e,t){let s=P(e?.id,60)||`agent-${t+1}`,f=ze(s),a=tt.includes(e?.state)?e.state:"idle";return{id:s,name:P(e?.name,24)||s,role:P(e?.role,40),state:a,task:P(e?.task,120),area:P(e?.area,60),party:0,hair:ue(e?.hair,Ie[f%Ie.length]),skin:ue(e?.skin,$e[(f>>>4)%$e.length]),shirt:ue(e?.shirt,De[(f>>>8)%De.length]),x:0,y:0,path:[],facing:"down",walking:!1,rest:0,seed:f}}function Ue(e){return{title:P(e?.title,80),state:nt.includes(e?.state)?e.state:"todo",agent:P(e?.agent,60)}}ie(le);var ee=(e,t)=>e.pack.items[t.type];function Ne(e,t){let s=Array.isArray(e?.rooms)&&e.rooms.length>0,f=Math.min(Math.max(B(e?.cols,s?20:t.layout.cols),6),Qe),a=Math.min(Math.max(B(e?.rows,s?14:t.layout.rows),6),Je),n=s?U(e.rooms,40):t.layout.rooms,o=s?U(e.doors,60):t.layout.doors,i=Array.isArray(e?.furniture)?U(e.furniture,Ze):s?[]:t.layout.furniture,l=n.map((c,h)=>{let M=Math.min(Math.max(B(c?.x,0),0),f),R=Math.min(Math.max(B(c?.y,0),0),a);return{id:P(c?.id,60)||`room-${h+1}`,name:P(c?.name,24),x:M,y:R,w:Math.min(Math.max(B(c?.w,0),0),f-M),h:Math.min(Math.max(B(c?.h,0),0),a-R),floor:ot.includes(c?.floor)?c.floor:"wood",paths:U(c?.paths,20).filter(T=>typeof T=="string").map(T=>T.slice(0,200))}}),u=new Array(f*a).fill(!1),b=(c,h,M)=>{c>=0&&h>=0&&c<f&&h<a&&(u[h*f+c]=M)};for(let c of l)for(let h=c.y;h<c.y+c.h;h++)for(let M=c.x;M<c.x+c.w;M++)b(M,h,!0);let w=o.map(c=>({x:B(c?.x,-1),y:B(c?.y,-1)})).filter(c=>c.x>=0&&c.y>=0);for(let c of w)b(c.x,c.y,!0);let x=i.filter(c=>c&&Object.hasOwn(t.items,c.type)).map(c=>({type:c.type,x:B(c.x,-99),y:B(c.y,-99)}));for(let c of x){let h=t.items[c.type];if(h.solid!==!1)for(let M=c.y;M<c.y+h.h;M++)for(let R=c.x;R<c.x+h.w;R++)b(R,M,!1)}let y=(c,h)=>c>=0&&h>=0&&c<f&&h<a&&u[h*f+c]===!0,O=c=>{let h=t.items[c.type].spot;if(!h)return;let M={x:c.x+h.x,y:c.y+h.y};return y(M.x,M.y)?M:void 0},W=x.filter(c=>t.items[c.type].use==="seat").map(O).filter(c=>!!c),A={lounge:[],board:[]};for(let c of x){let h=O(c);if(!h)continue;let M=t.items[c.type].use;M==="lounge"&&A.lounge.push(h),M==="board"&&A.board.push(h)}let m=U(e?.links,60).map(c=>({from:P(c?.from,60),to:P(c?.to,60)})).filter(c=>c.from&&c.to);return{cols:f,rows:a,rooms:l,doors:w,furniture:x,walkable:u,seats:W,spots:A,links:m}}function be(e={}){let t=We(e?.world,le),s={pack:t,showLinks:!0,...Ne(e,t),agents:U(e?.agents,Fe).map(_e),tasks:U(e?.tasks,Be).map(Ue)};for(let f of s.agents)pe(s,f);return s}function me(e,t){Object.assign(e,Ne(t,e.pack),{routes:void 0});for(let s of e.agents)s.seat=void 0,s.path=[],s.x=Math.round(s.x),s.y=Math.round(s.y),X(e,s.x,s.y)?(Z(e,s),K(e,s,te(e,s))):pe(e,s)}function st(e){for(let t=0;t<e.rows;t++)for(let s=0;s<e.cols;s++)if(X(e,s,t))return{x:s,y:t};return{x:0,y:0}}var He=["working","thinking","blocked"];function Z(e,t){if(!He.includes(t.state)){t.seat=void 0;return}let s=e.rooms.find(o=>o.id===t.area),f=o=>!!s&&o.x>=s.x&&o.x<s.x+s.w&&o.y>=s.y&&o.y<s.y+s.h;if(t.seat&&(!s||f(t.seat)))return;t.seat=void 0;let a=new Set(e.agents.filter(o=>o!==t&&o.seat).map(o=>`${o.seat?.x},${o.seat?.y}`)),n=e.seats.filter(o=>!a.has(`${o.x},${o.y}`));t.seat=s?n.find(f):n[0]}function rt(e){return e.path[e.path.length-1]??{x:Math.round(e.x),y:Math.round(e.y)}}function Pe(e,t,s){let f=new Set(e.agents.filter(a=>a!==t&&a.state!=="away").map(a=>{let n=rt(a);return`${n.x},${n.y}`}));for(let a=0;a<=4;a++)for(let n=-a;n<=a;n++)for(let o=-a;o<=a;o++){if(Math.abs(o)+Math.abs(n)!==a)continue;let i={x:s.x+o,y:s.y+n};if(X(e,i.x,i.y)&&!f.has(`${i.x},${i.y}`)&&Y(e,s,i))return i}return s}function te(e,t){let s=f=>{let a=f.length>0?f[(t.seed+Math.floor(t.rest*1e3))%f.length]:void 0;return a&&Pe(e,t,a)};switch(t.state){case"working":case"thinking":case"blocked":{if(t.seat)return t.seat;let f=e.rooms.find(a=>a.id===t.area);return f&&f.w>0&&f.h>0?Pe(e,t,{x:f.x+(f.w>>1),y:f.y+(f.h>>1)}):s(e.spots.lounge)}case"reviewing":return s(e.spots.board)??t.seat;case"idle":case"done":return s(e.spots.lounge)??t.seat;default:return}}function pe(e,t){Z(e,t);let s=te(e,t)??t.seat??st(e);t.x=s.x,t.y=s.y,t.path=[],t.walking=!1,t.facing=N(t)?"up":"down",t.rest=2+t.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 K(e,t,s){if(!s)return;let f={x:Math.round(t.x),y:Math.round(t.y)};t.path=Y(e,f,s)??[]}function ye(e,t){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,o=Math.hypot(a,n),i=et*t;Math.abs(a)>Math.abs(n)?s.facing=a>0?"right":"left":n!==0&&(s.facing=n>0?"down":"up"),s.walking=!0,o<=i?(s.x=f.x,s.y=f.y,s.path.shift()):(s.x+=a/o*i,s.y+=n/o*i);continue}s.walking=!1,s.party>0&&(s.party=Math.max(0,s.party-t)),s.state==="idle"&&(s.rest-=t,s.rest<=0&&(s.seed=ze(String(s.seed)),s.rest=3+s.seed%60/10,K(e,s,te(e,s)))),N(s)&&(s.facing="up")}}function he(e,t){if(Array.isArray(t.tasks)&&(e.tasks=U(t.tasks,Be).map(Ue)),!Array.isArray(t.agents))return;let s=new Map(e.agents.map(n=>[n.id,n])),f=U(t.agents,Fe).map(_e);e.agents=f.map(n=>s.get(n.id)).filter(n=>!!n);let a=f.map(n=>{let o=s.get(n.id);if(!o){pe(e,n),e.agents=[...e.agents,n];let l=e.doors[0],u={x:n.x,y:n.y};return l&&n.state!=="away"&&(n.x=l.x,n.y=l.y,K(e,n,u)),n}Object.assign(o,{name:n.name,role:n.role,task:n.task,hair:n.hair,skin:n.skin,shirt:n.shirt});let i=o.area!==n.area;return o.area=n.area,o.state!==n.state||i?(n.state==="done"&&o.state!=="done"&&(o.party=3),o.state=n.state,Z(e,o),n.state!=="away"&&K(e,o,te(e,o))):He.includes(o.state)&&!o.seat&&(Z(e,o),o.seat&&K(e,o,o.seat)),o});e.agents=a}function ne(e,t,s){let f,a=1/0;for(let n of e.agents){if(n.state==="away")continue;let o=t-(n.x+.5),i=s-(n.y+.1),l=Math.hypot(o,i);Math.abs(o)<.8&&i>-1.6&&i<1.1&&l<a&&(f=n,a=l)}return f}var Xe=["#38bdf8","#f472b6","#fbbf24","#a78bfa","#34d399","#fb7185"];function Ye(e,t){let s=e.rooms.find(i=>i.id===t);if(!s)return;let f=s.x+(s.w>>1),a=s.y+(s.h>>1),n,o=1/0;for(let i=s.y;i<s.y+s.h;i++)for(let l=s.x;l<s.x+s.w;l++){let u=Math.abs(l-f)+Math.abs(i-a);u<o&&X(e,l,i)&&(n={x:l,y:i},o=u)}return n}function ge(e){let t=[];for(let s of e.links){let f=Ye(e,s.from),a=Ye(e,s.to);if(!f||!a)continue;let n=Y(e,f,a);n&&n.length>0&&t.push({from:s.from,to:s.to,points:[f,...n]})}return t}function xe(e,t,s){t.forEach((f,a)=>{let n=Xe[a%Xe.length],o=(a%5-2)*2,i=b=>[b.x*16+8+o,b.y*16+8+o];e.save(),e.lineWidth=2,e.strokeStyle=n,e.globalAlpha=.85,e.setLineDash([6,5]),e.lineDashOffset=-s*14,e.beginPath(),f.points.forEach((b,w)=>{let[x,y]=i(b);w===0?e.moveTo(x,y):e.lineTo(x,y)}),e.stroke(),e.setLineDash([]);let l=f.points[0],u=f.points[f.points.length-1];if(l&&u){let[b,w]=i(l),[x,y]=i(u);e.fillStyle=n,e.fillRect(b-2,w-2,4,4),e.beginPath(),e.arc(x,y,4,0,Math.PI*2),e.fill()}e.restore()})}function at(e,t,s,f,a,n,o,i){if(r(e,"#55351d",t+1,s+22,46,8),r(e,"#6b4427",t+1,s+13,46,10),r(e,"#8a5a33",t+1,s+10,46,12),r(e,"#a87545",t+1,s+10,46,2),r(e,"#3b2413",t+3,s+22,3,9),r(e,"#3b2413",t+42,s+22,3,9),r(e,"#55351d",t+30,s+23,12,7),r(e,"#7c5637",t+31,s+24,10,2),r(e,"#d4a24e",t+35,s+24,2,1),r(e,"#7c5637",t+31,s+27,10,2),r(e,"#d4a24e",t+35,s+27,2,1),r(e,E,t+14,s-3,20,15),r(e,"#374151",t+22,s+12,4,2),r(e,"#4b5563",t+19,s+14,10,1),i)r(e,"#3f0f14",t+15,s-2,18,13),Math.floor(a*2)%2===0&&(r(e,"#ef4444",t+23,s,2,6),r(e,"#ef4444",t+23,s+7,2,2));else if(f){r(e,"#0f2a2e",t+15,s-2,18,13);let l=Math.floor(a*3+n%13);for(let u=0;u<5;u++){let b=3+((n>>u&7)+(l+u)*7)%12;r(e,u%3===0?o.primary:u%3===1?"#7dd3fc":"#fcd34d",t+16+u%2*2,s-1+u*2.2,b,1)}e.fillStyle="rgba(125,211,252,0.12)",e.fillRect(t+10,s+11,28,8)}else r(e,"#1f2937",t+15,s-2,18,13),r(e,"#374151",t+17,s,3,1);r(e,"#d1d5db",t+16,s+15,16,5);for(let l=0;l<2;l++)for(let u=0;u<7;u++)r(e,"#9ca3af",t+17+u*2,s+16+l*2,1,1);r(e,"#e5e7eb",t+34,s+16,3,4),r(e,"#f3f4f6",t+40,s+13,5,5),r(e,o.primary,t+40,s+15,5,1),r(e,"#fde68a",t+4,s+13,7,6),r(e,"#fbbf24",t+5,s+15,5,1)}function it(e,t,s,f){r(e,"#3a2c1e",t,s-12,64,27),r(e,"#d9c29c",t+2,s-10,60,23);for(let o=0;o<40;o++)r(e,"#c9b08a",t+3+o*37%58,s-9+o*13%21,1,1);let a={todo:"#fde68a",doing:"#93c5fd",done:"#86efac"},n=8;f.tasks.slice(0,n*2).forEach((o,i)=>{let l=i%n,u=Math.floor(i/n);r(e,"#00000033",t+5+l*7,s-7+u*10,6,8),r(e,a[o.state],t+4+l*7,s-8+u*10,6,8),r(e,"#ef4444",t+6+l*7,s-8+u*10,2,1),r(e,"#00000040",t+5+l*7,s-5+u*10,4,1),r(e,"#00000040",t+5+l*7,s-3+u*10,3,1)})}function ft(e,t,s,f,a){let n=t.x*16,o=t.y*16;switch(t.type){case"desk":{let i=t.x+1,l=t.y+2,u=s.agents.find(b=>b.seat?.x===i&&b.seat?.y===l&&N(b));at(e,n,o,!!u,f,u?.seed??0,a,u?.state==="blocked");break}case"coffee":r(e,"#374151",n,o+2,32,14),r(e,"#6b7280",n,o+2,32,2),r(e,E,n+4,o-9,15,15),r(e,"#27272a",n+5,o-8,13,13),r(e,Math.floor(f*2)%2?"#ef4444":"#7f1d1d",n+15,o-6,2,2),r(e,"#52525b",n+7,o-6,6,4),r(e,"#f3f4f6",n+8,o+3,5,4),r(e,"#f3f4f6",n+23,o-1,5,5),r(e,"#92400e",n+24,o,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),o-1-(f*8+i*4)%9,1,2);break;case"water":r(e,"#d1d5db",n+3,o+3,10,13),r(e,"#9ca3af",n+3,o+14,10,2),r(e,"#60a5fa",n+4,o-8,8,11),r(e,"#bae6fd",n+5,o-7,2,9),r(e,"#3b82f6",n+5,o+6,2,2),r(e,"#ef4444",n+9,o+6,2,2),Math.floor(f*.4+t.x)%5===0&&r(e,"#e0f2fe",n+8,o-2-f*6%7,1,1);break;case"sofa":r(e,$(a.primary,-60),n+1,o-7,46,11),r(e,$(a.primary,-30),n+2,o-6,44,3),r(e,"#4b5563",n,o+3,48,11),r(e,"#6b7280",n+3,o+3,20,7),r(e,"#6b7280",n+25,o+3,20,7),r(e,"#374151",n,o+12,48,3),r(e,"#374151",n-1,o-2,4,16),r(e,"#374151",n+45,o-2,4,16);break;case"plant":r(e,"#92400e",n+4,o+9,8,7),r(e,"#b45309",n+3,o+8,10,2);for(let[i,l,u,b]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,o+l,u,b);r(e,"#22c55e",n+7,o-3,2,8),r(e,"#22c55e",n+3,o+1,2,3),r(e,"#4ade80",n+10,o-4,1,3);break;case"fern":r(e,"#57534e",n+3,o+10,10,6),r(e,"#78716c",n+2,o+9,12,2);for(let i=0;i<7;i++){let l=i-3;for(let u=0;u<5;u++)r(e,u%2?"#16a34a":"#15803d",n+7+l*(u/2+1),o+8-u*2+Math.abs(l),2,2)}break;case"board":it(e,n,o,s);break;case"whiteboard":r(e,"#9ca3af",n,o-10,48,22),r(e,"#f9fafb",n+2,o-8,44,18),r(e,"#3b82f6",n+5,o-5,14,1),r(e,"#3b82f6",n+5,o-2,9,1),r(e,"#ef4444",n+24,o-6,8,6),r(e,"#f9fafb",n+25,o-5,6,4),r(e,"#10b981",n+8,o+3,20,1),r(e,"#10b981",n+27,o+2,1,3),r(e,"#6b7280",n+2,o+10,44,2);break;case"shelf":r(e,"#5b3a21",n,o-12,32,28);for(let i=0;i<2;i++){r(e,"#3b2413",n+2,o-10+i*13,28,11);for(let l=0;l<8;l++){let u=["#ef4444","#3b82f6","#10b981","#f59e0b","#8b5cf6"][(l*3+i+t.x)%5];r(e,u,n+3+l*3,o-8+i*13+l%3,2,9-l%3),r(e,$(u,40),n+3+l*3,o-6+i*13,2,1)}}break;case"server":r(e,E,n,o-13,16,29),r(e,"#1f2937",n+1,o-12,14,27);for(let i=0;i<5;i++){r(e,"#111827",n+2,o-11+i*5,12,4);let l=Math.floor(f*3+i*2+t.x)%3!==0;r(e,l?"#22c55e":"#14532d",n+3,o-10+i*5,1,1),r(e,i%2===0?"#f59e0b":"#3b82f6",n+5,o-10+i*5,1,1),r(e,"#374151",n+8,o-10+i*5,5,1)}break;case"table":r(e,"#44403c",n+2,o+16,44,12),r(e,"#78716c",n+2,o+3,44,14),r(e,"#a8a29e",n+2,o+3,44,2),r(e,"#f9fafb",n+10,o+6,8,6),r(e,"#f9fafb",n+28,o+8,8,6),r(e,"#1f2937",n+12,o+8,4,1),r(e,"#3b82f6",n+30,o+10,4,1);break;case"rug":r(e,a.primary,n,o,64,48),e.fillStyle="rgba(0,0,0,0.42)",e.fillRect(n+3,o+3,58,42),r(e,a.primary,n+6,o+6,52,1),r(e,a.primary,n+6,o+41,52,1),r(e,a.primary,n+6,o+6,1,36),r(e,a.primary,n+57,o+6,1,36);for(let i=0;i<6;i++)r(e,a.primary,n+12+i*8,o+22,4,4);break;case"arcade":r(e,E,n,o-14,16,30),r(e,"#4c1d95",n+1,o-13,14,28),r(e,"#111827",n+3,o-10,10,9),r(e,["#22c55e","#ec4899","#38bdf8"][Math.floor(f*2)%3],n+4+Math.floor(f*4)%7,o-8+Math.floor(f*3)%5,2,2),r(e,"#f59e0b",n+3,o-13,10,2),r(e,"#27272a",n+2,o+1,12,4),r(e,"#ef4444",n+4,o+2,2,2),r(e,"#3b82f6",n+9,o+2,2,2);break;case"fridge":r(e,E,n+1,o-12,14,28),r(e,"#e5e7eb",n+2,o-11,12,26),r(e,"#9ca3af",n+2,o-3,12,1),r(e,"#6b7280",n+11,o-8,1,3),r(e,"#6b7280",n+11,o,1,5),r(e,"#fde68a",n+4,o-9,3,3),r(e,"#fca5a5",n+5,o+3,3,3);break;case"printer":r(e,"#4b5563",n+2,o+8,12,8),r(e,E,n+1,o-2,14,11),r(e,"#d1d5db",n+2,o-1,12,9),r(e,"#f9fafb",n+4,o-5-(Math.floor(f)%4===0?1:0),8,5),r(e,"#22c55e",n+11,o+1,2,1),r(e,"#9ca3af",n+3,o+5,10,1);break;case"lamp":r(e,"#374151",n+5,o+13,6,3),r(e,"#4b5563",n+7,o-4,2,17),r(e,E,n+2,o-10,12,8),r(e,"#fde68a",n+3,o-9,10,6),r(e,"#fef3c7",n+4,o-8,4,2);break;case"beanbag":r(e,E,n,o+3,16,13),r(e,$(a.primary,-50),n+1,o+4,14,11),r(e,$(a.primary,-20),n+3,o+5,8,4),r(e,"#00000040",n+1,o+13,14,2);break;case"tv":r(e,"#3b2413",n+2,o+8,44,8),r(e,"#5b3a21",n+2,o+8,44,2),r(e,E,n+4,o-14,40,22),r(e,"#0b1120",n+5,o-13,38,20);for(let i=0;i<9;i++){let l=2+(i*5+Math.floor(f*3))%12;r(e,i%3===0?a.primary:i%3===1?"#38bdf8":"#f472b6",n+8+i*4,o+5-l,3,l)}break;case"vending":r(e,E,n,o-14,16,30),r(e,"#b91c1c",n+1,o-13,14,28),r(e,"#0f172a",n+3,o-11,8,16);for(let i=0;i<3;i++)for(let l=0;l<2;l++)r(e,["#fbbf24","#34d399","#60a5fa","#f472b6"][(i+l*2)%4],n+4+l*3,o-10+i*5,2,4);r(e,"#d1d5db",n+12,o-9,2,6),r(e,"#111827",n+3,o+8,10,4);break;case"trophy":r(e,"#6b4427",n+2,o+8,12,8),r(e,"#8a5a33",n+2,o+8,12,2),r(e,"#78350f",n+5,o+5,6,3),r(e,"#f59e0b",n+7,o+1,2,4),r(e,E,n+3,o-8,10,10),r(e,"#fbbf24",n+4,o-7,8,8),r(e,"#fde68a",n+5,o-6,2,5),r(e,"#fbbf24",n+1,o-6,3,1),r(e,"#fbbf24",n+12,o-6,3,1);break;case"clock":{r(e,E,n+3,o+1,10,10),r(e,"#f9fafb",n+4,o+2,8,8),r(e,"#1f2937",n+8,o+3,1,3),r(e,"#1f2937",n+8,o+6,3,1);break}case"poster":{let i=["#7c3aed","#0ea5e9","#db2777","#059669"],l=i[(t.x+t.y)%i.length];r(e,E,n+2,o,12,11),r(e,l,n+3,o+1,10,9),r(e,$(l,60),n+5,o+3,6,3),r(e,"#f9fafb",n+5,o+7,6,1);break}}}var ke={furniture:ft,glow(e,t,s){e.type==="lamp"&&s(e.x*16+8,e.y*16,36,"rgba(253,224,139,0.30)"),(e.type==="arcade"||e.type==="vending"||e.type==="tv")&&s(e.x*16+8,e.y*16,26,"rgba(125,211,252,0.16)"),e.type==="desk"&&t.agents.some(f=>f.seat?.x===e.x+1&&f.seat?.y===e.y+2&&N(f))&&s(e.x*16+24,e.y*16+8,30,"rgba(125,211,252,0.26)")}};var lt=new Map([["office",ke]]);var oe=e=>lt.get(e.pack.id)??ke;function Me(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 ut(e,t){e.fillStyle=E;for(let[,s,f,a,n]of t)e.fillRect(Math.round(s)-1,Math.round(f)-1,a+2,n+2);for(let[s,f,a,n,o]of t)r(e,s,f,a,n,o)}function dt(e,t,s,f){let a=t.x*16+2,n=t.y*16+15,o=N(t),i=t.walking,l=t.facing==="left"||t.facing==="right",u=t.facing==="up",b=t.facing==="left",w=Math.floor(s*9+t.seed%5),x=i?w%4:0,y=i&&x%2===1?-1:0,O=!i&&!o&&Math.floor(s*1.4+t.seed%7)%2===0?1:0,W=t.party>0?-Math.abs(Math.round(Math.sin(s*12)*3)):0,A=t.skin,m=t.hair,c=t.shirt,h=$(c,-40),M=$(c,24),R="#39415a",T="#1f2433",D=t.seed%5,H=(t.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)),t.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=y+W,g=[],L=n-13+re+O*0,S=L-8+O;if(o&&(r(e,"#1f2937",a+1,t.y*16+3,10,9),r(e,"#374151",a+2,t.y*16+11,8,3),r(e,"#111827",a+5,t.y*16+14,2,2)),!o){let v=L+7;if(l){let k=x===1?2:x===3?-2:0;g.push([R,a+4+k,v,3,5],[T,a+4+k+(b?-1:0),v+5,4,1]),g.push([$(R,-12),a+5-k,v,3,5],[T,a+5-k+(b?-1:0),v+5,4,1])}else{let k=x===1?1:0,F=x===3?1:0;g.push([R,a+2,v,3,5-k],[T,a+2,v+5-k,3,1]),g.push([R,a+7,v,3,5-F],[T,a+7,v+5-F,3,1])}}let z=i?x===1?1:x===3?-1:0:0;if(l)g.push([c,a+3,L,6,7],[h,a+3,L+6,6,1]),g.push([h,a+5+z,L+1,2,5],[A,a+5+z,L+6,2,1]);else{g.push([c,a+1,L,10,7],[h,a+1,L+6,10,1]);let v=o&&t.state==="working",k=Math.floor(s*10+t.seed)%2;g.push([h,a-1,L+1+z+(v?-k:0),2,5]),g.push([h,a+11,L+1-z+(v?k-1:0),2,5]),g.push([A,a-1,L+6+z+(v?-k:0),2,1]),g.push([A,a+11,L+6-z+(v?k-1:0),2,1]),!u&&H===2&&g.push(["#f3f4f6",a+4,L,4,3],[t.seed%2?"#ef4444":"#1d4ed8",a+5,L,2,5]),!u&&H===1&&g.push([M,a+3,L,6,2],[h,a+5,L+2,2,4]),u&&H===1&&g.push([M,a+2,L,8,3])}if(g.push([A,a+1,S,10,8]),u)g.push([m,a+1,S,10,7]);else if(l){let v=b?a+7:a+1;g.push([m,a+1,S,10,3],[m,v,S,4,6]);let k=Math.floor(s*.7+t.seed%11)%7===0;g.push([k?$(A,-40):"#1a1a24",b?a+3:a+8,S+4,1,k?1:2])}else{g.push([m,a+1,S,10,3],[m,a+1,S+3,1,2],[m,a+10,S+3,1,2]);let v=Math.floor(s*.7+t.seed%11)%7===0;g.push([v?$(A,-40):"#1a1a24",a+3,S+4,2,v?1:2]),g.push([v?$(A,-40):"#1a1a24",a+7,S+4,2,v?1:2]),g.push([$(A,-28),a+5,S+6,2,1])}if(D===1&&g.push([m,a,S+2,2,8],[m,a+10,S+2,2,8]),D===2&&g.push([m,a+4,S-3,4,3]),D===3&&g.push([m,a+2,S-2,2,2],[m,a+5,S-3,2,3],[m,a+8,S-2,2,2]),D===4&&(g.push([M,a,S-1,12,3]),!u&&!l&&g.push([h,a+1,S+2,10,1]),l&&g.push([h,b?a-2:a+9,S+1,5,1])),ut(e,g),t.party>0){let v=["#f59e0b","#ec4899","#22c55e","#3b82f6","#a855f7"];for(let k=0;k<10;k++){let F=(s*1.1+k*.137)%1,J=k*2.4+t.seed;r(e,v[k%v.length],a+6+Math.cos(J)*(4+F*14),n-22-F*6+F*F*26,2,2)}}}function G(e,t,s,f){r(e,E,t-1,s-1,13,11),r(e,"#ffffff",t,s,11,9),r(e,"#ffffff",t+4,s+9,3,1),r(e,E,t+4,s+10,3,1),f(t,s)}function ct(e,t,s){let f=Math.round(t.x*16+2),a=Math.round(t.y*16-22+(N(t)?2:-2)),n=Math.floor(s*2+t.seed%3)%2===0;if(t.state==="blocked")G(e,f,a,(o,i)=>{r(e,n?"#dc2626":"#991b1b",o+5,i+1,2,5),r(e,n?"#dc2626":"#991b1b",o+5,i+7,2,1)});else if(t.state==="thinking"){let o=Math.floor(s*3)%4;G(e,f,a,(i,l)=>{for(let u=0;u<3;u++)r(e,u<o?"#111827":"#d1d5db",i+2+u*3,l+4,2,2)})}else if(t.state==="reviewing"&&!t.walking)G(e,f,a,(o,i)=>{r(e,"#2563eb",o+4,i+1,4,1),r(e,"#2563eb",o+7,i+2,1,2),r(e,"#2563eb",o+5,i+4,2,1),r(e,"#2563eb",o+5,i+5,1,1),r(e,"#2563eb",o+5,i+7,1,1)});else if(t.state==="done"){let o=n?"#f59e0b":"#fbbf24";G(e,f,a,(i,l)=>{r(e,o,i+5,l+1,1,7),r(e,o,i+2,l+3,7,2),r(e,o,i+4,l+2,3,5)})}else t.state==="idle"&&!t.walking&&t.seed%3===0&&G(e,f,a,(o,i)=>{r(e,"#92400e",o+3,i+3,4,4),r(e,"#d97706",o+3,i+3,4,1),r(e,"#92400e",o+7,i+4,1,2),n&&r(e,"#9ca3af",o+4,i+1,1,1)})}function bt(e,t){for(let s=t.y;s<t.y+t.h;s++)for(let f=t.x;f<t.x+t.w;f++){let a=f*16,n=s*16,o=(f*73+s*151)%17;switch(t.floor){case"carpet":r(e,"#4c4f7a",a,n,16,16);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,16,16),r(e,"#aab5c2",a,n+15,16,1),r(e,"#aab5c2",a+15,n,1,16),r(e,"#e8eef5",a+1,n+1,5,1);break;case"stone":r(e,o%3===0?"#8d93a3":"#9aa0b0",a,n,16,16),r(e,"#7a8090",a,n+15,16,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,16,16);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);o===3&&r(e,"#596070",a+3,n+8,8,1);break;case"hall":{r(e,"#cfc8b8",a,n,16,16),r(e,"#bdb6a6",a,n+15,16,1),r(e,"#bdb6a6",a+15,n,1,16);let i=t.w>=t.h,l=i?s-t.y:f-t.x,u=i?t.h:t.w;i&&l===0&&r(e,"#7f6a55",a,n+12,16,4),i&&l===u-1&&r(e,"#7f6a55",a,n,16,4),!i&&l===0&&r(e,"#7f6a55",a+12,n,4,16),!i&&l===u-1&&r(e,"#7f6a55",a,n,4,16);break}case"grass":r(e,"#3f8f4f",a,n,16,16);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,16,16),r(e,"#8a5d36",a,n+7,16,1),r(e,"#8a5d36",a,n+15,16,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+o%9+2,n+3,4,1),r(e,"#b4835a",a+o%7+4,n+11,3,1)}}}}var qe="#2a2d48",mt="#5c628f",V="#4a4f78",pt="#6d74a4";function yt(e,t,s){let f=t*16,a=s*16;r(e,(t+s)%2===0?"#4b8a4f":"#478549",f,a,16,16);let n=(t*73+s*151)%29;for(let o=0;o<4;o++)r(e,"#5a9b5c",f+(t*5+o*7)%15,a+(s*3+o*5)%15,1,2);n===4?(r(e,"#2f6a38",f+3,a+7,10,7),r(e,"#3c7f45",f+5,a+8,5,3)):n===11&&(r(e,"#5b3a22",f+7,a+10,2,5),r(e,"#24592e",f+2,a+1,12,10),r(e,"#2f6f3a",f+4,a+2,7,5))}function ht(e,t,s,f){let a=new Set;for(let o of t.rooms)for(let i=o.y;i<o.y+o.h;i++)for(let l=o.x;l<o.x+o.w;l++)a.add(`${l},${i}`);let n=new Set(t.doors.map(o=>`${o.x},${o.y}`));for(let o=0;o<t.rows;o++)for(let i=0;i<t.cols;i++){let l=`${i},${o}`;if(a.has(l)||n.has(l))continue;let u=i*16,b=o*16,w=(x,y)=>{for(let O=y-1;O<=y+1;O++)for(let W=x-1;W<=x+1;W++)if(a.has(`${W},${O}`)||n.has(`${W},${O}`))return!0;return!1};if(!w(i,o)){yt(e,i,o);continue}a.has(`${i},${o+1}`)?(r(e,mt,u,b,16,16),r(e,pt,u,b,16,1),r(e,V,u,b+12,16,4),r(e,s.primary,u,b+11,16,1),i%4===3&&!w(i,o-1)&&!t.furniture.some(x=>ee(t,x).wall&&x.x===i&&x.y===o)&&(r(e,"#1f2937",u+1,b+1,14,9),r(e,f.sky,u+2,b+2,12,7),r(e,$(f.sky,40),u+3,b+3,4,2),r(e,"#1f2937",u+8,b+2,1,7),f.night>.3&&(r(e,"#fef3c7",u+4,b+3,1,1),r(e,"#fef3c7",u+11,b+5,1,1)))):(r(e,qe,u,b,16,16),a.has(`${i},${o-1}`)&&r(e,"#20233a",u,b,16,3),a.has(`${i-1},${o}`)&&r(e,"#20233a",u,b,2,16),a.has(`${i+1},${o}`)&&r(e,"#20233a",u+14,b,2,16))}for(let o of t.doors){let i=o.x*16,l=o.y*16,u=a.has(`${o.x},${o.y-1}`)||a.has(`${o.x},${o.y+1}`);r(e,"#7c5637",i,l,16,16);for(let b=2;b<16;b+=4)r(e,"#6b4a2f",u?i:i+b,u?l+b:l,u?16:1,u?1:16);u?(r(e,V,i,l,2,16),r(e,V,i+14,l,2,16)):(r(e,V,i,l,16,2),r(e,V,i,l+14,16,2))}}function gt(e,t){e.font=q,e.textBaseline="top";for(let s of t.rooms){if(!s.name)continue;let f=s.name.toUpperCase(),a=Math.ceil(e.measureText(f).width)+6,n=s.x*16+3,o=s.y*16-13;r(e,"#1c1f33",n,o,a,10),r(e,"#2f3350",n+1,o+1,a-2,8),e.fillStyle="#f8fafc",e.fillText(f,n+3,o+1.5)}}function ve(e,t,s,f){r(e,qe,0,0,t.cols*16,t.rows*16);for(let a of t.rooms)bt(e,a);ht(e,t,s,f);for(let a of t.furniture)a.type==="rug"&&oe(t).furniture(e,a,t,0,s);for(let a of t.furniture)ee(t,a).wall&&oe(t).furniture(e,a,t,0,s);if(f.sun!=="rgba(0,0,0,0)"){e.fillStyle=f.sun;for(let a of t.rooms)for(let n=a.x;n<a.x+a.w;n++)n%4===3&&e.fillRect(n*16+2,a.y*16,12,Math.min(a.h,3)*16)}}function xt(e,t,s,f){e.font=q,e.textBaseline="top";let a=Math.ceil(e.measureText(t.name).width)+5,n=Math.round(Math.max(1,Math.min(f-a-1,t.x*16+8-a/2))),o=Math.round(t.y*16+16);e.fillStyle=s?"#ffffff":"rgba(17,24,39,0.82)",e.fillRect(n,o,a,10),e.fillStyle=s?"#111827":"#ffffff",e.fillText(t.name,n+2.5,o+1.5)}function kt(e,t,s){let f=[],a="";for(let n of t.split(/\s+/)){let o=a?`${a} ${n}`:n;e.measureText(o).width>s&&a?(f.push(a),a=n):a=o}return a&&f.push(a),f.slice(0,3)}var je={working:"Working",thinking:"Thinking",blocked:"Blocked",reviewing:"Reviewing",idle:"On a break",done:"Finished",away:"Away"};function Mt(e,t,s){e.font=ae,e.textBaseline="top";let f=s.rooms.find(u=>u.id===t.area),a=kt(e,t.task||je[t.state]||"",110),n=120,o=18+a.length*9+(f?9:0)+3,i=Math.round(Math.max(2,Math.min(s.cols*16-n-2,t.x*16+8-n/2))),l=Math.round(Math.max(2,t.y*16-o-24));r(e,E,i-1,l-1,n+2,o+2),r(e,"#ffffff",i,l,n,o),e.fillStyle="#111827",e.font=q,e.fillText(`${t.name}: ${je[t.state]??""}`.slice(0,28),i+4,l+4),e.fillStyle="#374151",e.font=ae,a.forEach((u,b)=>e.fillText(u,i+4,l+15+b*9)),f&&(e.fillStyle="#6b7280",e.fillText(`In ${f.name}`.slice(0,28),i+4,l+15+a.length*9))}function vt(e,t,s){if(t.tasks.length===0)return;let f=t.tasks.filter(n=>n.state==="done").length;e.font=q,e.textBaseline="top";let a=96;r(e,"rgba(17,24,39,0.85)",4,4,a,20),e.fillStyle="#ffffff",e.fillText(`${t.pack.words.quests} ${f}/${t.tasks.length}`,8,6.5),r(e,"#374151",8,16,a-8,4),r(e,s.primary,8,16,Math.round((a-8)*f/t.tasks.length),4)}function Ke(e,t,s,f,a,n,o){let i=t.cols*16,l=t.rows*16;n?e.drawImage(n,0,0,i,l):ve(e,t,f,a),t.showLinks&&t.links.length>0&&(t.routes??(t.routes=ge(t)),xe(e,t.routes,s));let u=oe(t),b=[];for(let y of t.furniture){let O=ee(t,y);O.solid!==!1&&b.push({depth:(y.y+O.h)*16-2,draw:()=>oe(t).furniture(e,y,t,s,f)})}let w=t.agents.filter(y=>y.state!=="away");for(let y of w)b.push({depth:y.y*16+14,draw:()=>dt(e,y,s,y.id===o)});b.sort((y,O)=>y.depth-O.depth);for(let y of b)y.draw();if(a.night>0){e.fillStyle=`rgba(12,14,48,${a.night})`,e.fillRect(0,0,i,l),e.save(),e.globalCompositeOperation="lighter";let y=(O,W,A,m)=>{let c=e.createRadialGradient(O,W,1,O,W,A);c.addColorStop(0,m),c.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=c,e.fillRect(O-A,W-A,A*2,A*2)};for(let O of t.furniture)u.glow(O,t,y);e.restore()}gt(e,t);for(let y of w)xt(e,y,y.id===o,i);for(let y of w)y.id!==o&&ct(e,y,s);vt(e,t,f);let x=w.find(y=>y.id===o);x&&Mt(e,x,t)}var wt=/^(#[0-9a-f]{3,8}|rgba?\([\d\s.,%/]+\)|hsla?\([\d\s.,%/a-z]+\))$/i,we=4;function Ot(e){let t=getComputedStyle(e),s=(f,a)=>{let n=t.getPropertyValue(f).trim();return wt.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 Q(e,t={},s={}){let f=be(t),a=e.getContext("2d");if(!a)throw new Error("This browser can't draw to a canvas.");let n=a,o=Ot(e),i=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,l,u=0,b=0,w=0,x=0,y=!0,O=!1,W=!0,A,m={x:0,y:0,zoom:1},c=new Date().getHours(),h=Me(c),M,R=!0,T=()=>f.cols*16,D=()=>f.rows*16,H=()=>{m.zoom=Math.min(we,Math.max(1,m.zoom)),m.x=Math.min(T()-T()/m.zoom,Math.max(0,m.x)),m.y=Math.min(D()-D()/m.zoom,Math.max(0,m.y))},re=()=>{if(typeof document>"u")return;M??(M=document.createElement("canvas")),M.width=T()*u,M.height=D()*u;let p=M.getContext("2d");p&&(p.setTransform(u,0,0,u,0,0),p.imageSmoothingEnabled=!1,ve(p,f,o,h),R=!1)},g=()=>{R&&re();let p=u*m.zoom;n.setTransform(p,0,0,p,-m.x*p,-m.y*p),n.imageSmoothingEnabled=!1,Ke(n,f,b,o,h,M,l),A?.(n)},L=()=>{let p=e.getBoundingClientRect().width||T(),I=Math.max(1,Math.ceil(p*(typeof devicePixelRatio=="number"?devicePixelRatio:1)/T()));I===u&&e.width===T()*u&&e.height===D()*u||(u=I,e.width=T()*u,e.height=D()*u,R=!0,g())},S=p=>{if(O)return;if(x=requestAnimationFrame(S),!y){w=p;return}let C=Math.min((p-w)/1e3||0,.1);w=p,b+=C,ye(f,C);let I=new Date().getHours();I!==c&&(c=I,h=Me(c),R=!0),g()},z=p=>{l=p===l?void 0:p,s.onSelect?.(l),i&&g()},v=p=>{let C=e.getBoundingClientRect(),I=(p.clientX-C.left)/C.width*(T()/m.zoom)+m.x,_=(p.clientY-C.top)/C.height*(D()/m.zoom)+m.y;return{x:I/16,y:_/16}},k,F=p=>{W&&(k={x:p.clientX,y:p.clientY,moved:!1})},J=p=>{if(!W)return;if(k&&s.camera&&m.zoom>1){let _=e.getBoundingClientRect(),j=p.clientX-k.x,Ce=p.clientY-k.y;if(k.moved||Math.abs(j)+Math.abs(Ce)>3){k.moved=!0,m.x-=j/_.width*(T()/m.zoom),m.y-=Ce/_.height*(D()/m.zoom),k.x=p.clientX,k.y=p.clientY,H(),e.style.cursor="grabbing";return}}let{x:C,y:I}=v(p);e.style.cursor=ne(f,C,I)?"pointer":s.camera&&m.zoom>1?"grab":"default"},Oe=p=>{if(!W)return;let C=k?.moved;if(k=void 0,C)return;let{x:I,y:_}=v(p),j=ne(f,I,_);(j||l)&&z(j?.id??l)},Se=(p,C)=>{if(p===void 0){m.zoom=1,m.x=0,m.y=0;return}let I=C?v(C):{x:m.x/16+T()/m.zoom/16/2,y:m.y/16+D()/m.zoom/16/2};if(m.zoom=Math.min(we,Math.max(1,m.zoom*p)),C){let _=v(C);m.x+=(I.x-_.x)*16,m.y+=(I.y-_.y)*16}else m.x=I.x*16-T()/m.zoom/2,m.y=I.y*16-D()/m.zoom/2;H()},Ae=p=>{p.preventDefault(),Se(p.deltaY<0?1.2:1/1.2,p)};e.addEventListener("pointerdown",F),e.addEventListener("pointermove",J),e.addEventListener("pointerup",Oe),s.camera&&e.addEventListener("wheel",Ae,{passive:!1});let Le=typeof ResizeObserver=="function"?new ResizeObserver(L):void 0;Le?.observe(e);let Te=typeof IntersectionObserver=="function"?new IntersectionObserver(p=>{y=p.some(C=>C.isIntersecting)}):void 0;return Te?.observe(e),L(),u===0&&(u=1,g()),i||(x=requestAnimationFrame(S)),{world:f,update(p){he(f,p),i&&g()},setLayout(p){me(f,p),R=!0,m.zoom=Math.min(m.zoom,we),H(),u=0,L()},select:z,tileAt:v,setOverlay(p){A=p},setLinksVisible(p){f.showLinks=p,i&&g()},setInteractive(p){W=p,k=void 0,p||(e.style.cursor="crosshair")},zoom:Se,destroy(){O=!0,cancelAnimationFrame(x),Le?.disconnect(),Te?.disconnect(),e.removeEventListener("pointerdown",F),e.removeEventListener("pointermove",J),e.removeEventListener("pointerup",Oe),e.removeEventListener("wheel",Ae)}}}var Ve=new Map;function St(e,t){Ve.set(e,t)}function At(e,t,s){let f=[...s.querySelectorAll("button[data-blkc-agent]")],a=Q(e,t,{onSelect(n){for(let o of f)o.setAttribute("aria-pressed",String(o.dataset.blkcAgent===n))}});for(let n of f)n.disabled=!1,n.addEventListener("click",()=>a.select(n.dataset.blkcAgent));return a}St("office",At);var Ge=new WeakSet;function se(e=document){let t=[];for(let s of e.querySelectorAll("canvas[data-blkc-canvas]")){if(Ge.has(s))continue;let f=Ve.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]"),o={};try{o=JSON.parse(n?.textContent||"{}")}catch{o={}}Ge.add(s);let i=f(s,o,a);t.push({element:s,destroy:()=>i.destroy()})}return t}globalThis.BLKCCanvas={FURNITURE:ce,createOffice:Q,findPath:Y,mountCanvasBlocks:se};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>se()):se();})();
|
|
2
2
|
/**
|
|
3
3
|
* BLKC Render-Canvas.
|
|
4
4
|
*
|
package/dist/runtime.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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();})();
|
|
1
|
+
"use strict";(()=>{var q="bold 7px ui-monospace, Menlo, Consolas, monospace",ae="7px ui-monospace, Menlo, Consolas, monospace",E="#14141f",r=(e,t,s,f,a,n)=>{e.fillStyle=t,e.fillRect(Math.round(s),Math.round(f),a,n)};function $(e,t){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)+t));return`rgb(${a(16)},${a(8)},${a(0)})`}var Ee=new Map;function ie(e){Ee.set(e.id,e)}var We=(e,t)=>e&&Ee.get(e)||t;var fe={desk:{w:3,h:2,spot:{x:1,y:2},use:"seat"},coffee:{w:2,h:1,spot:{x:0,y:1},use:"lounge"},water:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},sofa:{w:3,h:1,spot:{x:1,y:1},use:"lounge"},plant:{w:1,h:1},fern:{w:1,h:1},board:{w:4,h:1,spot:{x:1,y:1},use:"board"},whiteboard:{w:3,h:1,spot:{x:1,y:1},use:"board"},shelf:{w:2,h:1,spot:{x:0,y:1},use:"lounge"},server:{w:1,h:1},table:{w:3,h:2,spot:{x:1,y:2},use:"board"},rug:{w:4,h:3,solid:!1},arcade:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},fridge:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},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},use:"lounge"},tv:{w:3,h:1,spot:{x:1,y:2},use:"lounge"},vending:{w:1,h:1,spot:{x:0,y:1},use:"lounge"},trophy:{w:1,h:1},clock:{w:1,h:1,solid:!1,wall:!0},poster:{w:1,h:1,solid:!1,wall:!0}},Re={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}]},le={id:"office",name:"Pixel Office",words:{quests:"QUESTS"},items:fe,layout:Re};var Qe=64,Je=40,Fe=40,Ze=300,Be=60,et=4.5,ce=fe,tt=["working","thinking","blocked","reviewing","idle","done","away"],nt=["todo","doing","done"],ot=["wood","carpet","tile","stone","concrete","grass","hall"];var B=(e,t)=>typeof e=="number"&&Number.isFinite(e)?Math.floor(e):t,P=(e,t=120)=>typeof e=="string"?e.slice(0,t):"",U=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function ze(e){let t=2166136261;for(let s=0;s<e.length;s++)t=Math.imul(t^e.charCodeAt(s),16777619);return t>>>0}var Ie=["#2b1b12","#5a3a22","#a8622d","#d9b36c","#20242e","#7d2f3f","#4a5568","#e5e7eb"],$e=["#f4d3b5","#e8b98f","#c98d62","#9c6644","#6f4530","#4e2f20"],De=["#3b82f6","#ef4444","#10b981","#f59e0b","#8b5cf6","#ec4899","#14b8a6","#f97316"],ue=(e,t)=>typeof e=="string"&&/^#[0-9a-f]{3,8}$/i.test(e)?e:t,de=(e,t,s)=>s*e.cols+t;function X(e,t,s){return t>=0&&s>=0&&t<e.cols&&s<e.rows&&e.walkable[de(e,t,s)]===!0}function Y(e,t,s){if(!X(e,s.x,s.y))return null;if(t.x===s.x&&t.y===s.y)return[];let f=new Int32Array(e.cols*e.rows).fill(-1),a=de(e,t.x,t.y);f[a]=a;let n=[a];for(let o=0;o<n.length;o++){let i=n[o],l=i%e.cols,u=Math.floor(i/e.cols);if(l===s.x&&u===s.y){let b=[];for(let w=i;w!==a;w=f[w])b.unshift({x:w%e.cols,y:Math.floor(w/e.cols)});return b}for(let[b,w]of[[0,1],[0,-1],[1,0],[-1,0]]){let x=l+b,y=u+w;if(!X(e,x,y))continue;let O=de(e,x,y);f[O]===-1&&(f[O]=i,n.push(O))}}return null}function _e(e,t){let s=P(e?.id,60)||`agent-${t+1}`,f=ze(s),a=tt.includes(e?.state)?e.state:"idle";return{id:s,name:P(e?.name,24)||s,role:P(e?.role,40),state:a,task:P(e?.task,120),area:P(e?.area,60),party:0,hair:ue(e?.hair,Ie[f%Ie.length]),skin:ue(e?.skin,$e[(f>>>4)%$e.length]),shirt:ue(e?.shirt,De[(f>>>8)%De.length]),x:0,y:0,path:[],facing:"down",walking:!1,rest:0,seed:f}}function Ue(e){return{title:P(e?.title,80),state:nt.includes(e?.state)?e.state:"todo",agent:P(e?.agent,60)}}ie(le);var ee=(e,t)=>e.pack.items[t.type];function Ne(e,t){let s=Array.isArray(e?.rooms)&&e.rooms.length>0,f=Math.min(Math.max(B(e?.cols,s?20:t.layout.cols),6),Qe),a=Math.min(Math.max(B(e?.rows,s?14:t.layout.rows),6),Je),n=s?U(e.rooms,40):t.layout.rooms,o=s?U(e.doors,60):t.layout.doors,i=Array.isArray(e?.furniture)?U(e.furniture,Ze):s?[]:t.layout.furniture,l=n.map((c,h)=>{let M=Math.min(Math.max(B(c?.x,0),0),f),R=Math.min(Math.max(B(c?.y,0),0),a);return{id:P(c?.id,60)||`room-${h+1}`,name:P(c?.name,24),x:M,y:R,w:Math.min(Math.max(B(c?.w,0),0),f-M),h:Math.min(Math.max(B(c?.h,0),0),a-R),floor:ot.includes(c?.floor)?c.floor:"wood",paths:U(c?.paths,20).filter(T=>typeof T=="string").map(T=>T.slice(0,200))}}),u=new Array(f*a).fill(!1),b=(c,h,M)=>{c>=0&&h>=0&&c<f&&h<a&&(u[h*f+c]=M)};for(let c of l)for(let h=c.y;h<c.y+c.h;h++)for(let M=c.x;M<c.x+c.w;M++)b(M,h,!0);let w=o.map(c=>({x:B(c?.x,-1),y:B(c?.y,-1)})).filter(c=>c.x>=0&&c.y>=0);for(let c of w)b(c.x,c.y,!0);let x=i.filter(c=>c&&Object.hasOwn(t.items,c.type)).map(c=>({type:c.type,x:B(c.x,-99),y:B(c.y,-99)}));for(let c of x){let h=t.items[c.type];if(h.solid!==!1)for(let M=c.y;M<c.y+h.h;M++)for(let R=c.x;R<c.x+h.w;R++)b(R,M,!1)}let y=(c,h)=>c>=0&&h>=0&&c<f&&h<a&&u[h*f+c]===!0,O=c=>{let h=t.items[c.type].spot;if(!h)return;let M={x:c.x+h.x,y:c.y+h.y};return y(M.x,M.y)?M:void 0},W=x.filter(c=>t.items[c.type].use==="seat").map(O).filter(c=>!!c),A={lounge:[],board:[]};for(let c of x){let h=O(c);if(!h)continue;let M=t.items[c.type].use;M==="lounge"&&A.lounge.push(h),M==="board"&&A.board.push(h)}let m=U(e?.links,60).map(c=>({from:P(c?.from,60),to:P(c?.to,60)})).filter(c=>c.from&&c.to);return{cols:f,rows:a,rooms:l,doors:w,furniture:x,walkable:u,seats:W,spots:A,links:m}}function be(e={}){let t=We(e?.world,le),s={pack:t,showLinks:!0,...Ne(e,t),agents:U(e?.agents,Fe).map(_e),tasks:U(e?.tasks,Be).map(Ue)};for(let f of s.agents)pe(s,f);return s}function me(e,t){Object.assign(e,Ne(t,e.pack),{routes:void 0});for(let s of e.agents)s.seat=void 0,s.path=[],s.x=Math.round(s.x),s.y=Math.round(s.y),X(e,s.x,s.y)?(Z(e,s),K(e,s,te(e,s))):pe(e,s)}function st(e){for(let t=0;t<e.rows;t++)for(let s=0;s<e.cols;s++)if(X(e,s,t))return{x:s,y:t};return{x:0,y:0}}var He=["working","thinking","blocked"];function Z(e,t){if(!He.includes(t.state)){t.seat=void 0;return}let s=e.rooms.find(o=>o.id===t.area),f=o=>!!s&&o.x>=s.x&&o.x<s.x+s.w&&o.y>=s.y&&o.y<s.y+s.h;if(t.seat&&(!s||f(t.seat)))return;t.seat=void 0;let a=new Set(e.agents.filter(o=>o!==t&&o.seat).map(o=>`${o.seat?.x},${o.seat?.y}`)),n=e.seats.filter(o=>!a.has(`${o.x},${o.y}`));t.seat=s?n.find(f):n[0]}function rt(e){return e.path[e.path.length-1]??{x:Math.round(e.x),y:Math.round(e.y)}}function Pe(e,t,s){let f=new Set(e.agents.filter(a=>a!==t&&a.state!=="away").map(a=>{let n=rt(a);return`${n.x},${n.y}`}));for(let a=0;a<=4;a++)for(let n=-a;n<=a;n++)for(let o=-a;o<=a;o++){if(Math.abs(o)+Math.abs(n)!==a)continue;let i={x:s.x+o,y:s.y+n};if(X(e,i.x,i.y)&&!f.has(`${i.x},${i.y}`)&&Y(e,s,i))return i}return s}function te(e,t){let s=f=>{let a=f.length>0?f[(t.seed+Math.floor(t.rest*1e3))%f.length]:void 0;return a&&Pe(e,t,a)};switch(t.state){case"working":case"thinking":case"blocked":{if(t.seat)return t.seat;let f=e.rooms.find(a=>a.id===t.area);return f&&f.w>0&&f.h>0?Pe(e,t,{x:f.x+(f.w>>1),y:f.y+(f.h>>1)}):s(e.spots.lounge)}case"reviewing":return s(e.spots.board)??t.seat;case"idle":case"done":return s(e.spots.lounge)??t.seat;default:return}}function pe(e,t){Z(e,t);let s=te(e,t)??t.seat??st(e);t.x=s.x,t.y=s.y,t.path=[],t.walking=!1,t.facing=N(t)?"up":"down",t.rest=2+t.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 K(e,t,s){if(!s)return;let f={x:Math.round(t.x),y:Math.round(t.y)};t.path=Y(e,f,s)??[]}function ye(e,t){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,o=Math.hypot(a,n),i=et*t;Math.abs(a)>Math.abs(n)?s.facing=a>0?"right":"left":n!==0&&(s.facing=n>0?"down":"up"),s.walking=!0,o<=i?(s.x=f.x,s.y=f.y,s.path.shift()):(s.x+=a/o*i,s.y+=n/o*i);continue}s.walking=!1,s.party>0&&(s.party=Math.max(0,s.party-t)),s.state==="idle"&&(s.rest-=t,s.rest<=0&&(s.seed=ze(String(s.seed)),s.rest=3+s.seed%60/10,K(e,s,te(e,s)))),N(s)&&(s.facing="up")}}function he(e,t){if(Array.isArray(t.tasks)&&(e.tasks=U(t.tasks,Be).map(Ue)),!Array.isArray(t.agents))return;let s=new Map(e.agents.map(n=>[n.id,n])),f=U(t.agents,Fe).map(_e);e.agents=f.map(n=>s.get(n.id)).filter(n=>!!n);let a=f.map(n=>{let o=s.get(n.id);if(!o){pe(e,n),e.agents=[...e.agents,n];let l=e.doors[0],u={x:n.x,y:n.y};return l&&n.state!=="away"&&(n.x=l.x,n.y=l.y,K(e,n,u)),n}Object.assign(o,{name:n.name,role:n.role,task:n.task,hair:n.hair,skin:n.skin,shirt:n.shirt});let i=o.area!==n.area;return o.area=n.area,o.state!==n.state||i?(n.state==="done"&&o.state!=="done"&&(o.party=3),o.state=n.state,Z(e,o),n.state!=="away"&&K(e,o,te(e,o))):He.includes(o.state)&&!o.seat&&(Z(e,o),o.seat&&K(e,o,o.seat)),o});e.agents=a}function ne(e,t,s){let f,a=1/0;for(let n of e.agents){if(n.state==="away")continue;let o=t-(n.x+.5),i=s-(n.y+.1),l=Math.hypot(o,i);Math.abs(o)<.8&&i>-1.6&&i<1.1&&l<a&&(f=n,a=l)}return f}var Xe=["#38bdf8","#f472b6","#fbbf24","#a78bfa","#34d399","#fb7185"];function Ye(e,t){let s=e.rooms.find(i=>i.id===t);if(!s)return;let f=s.x+(s.w>>1),a=s.y+(s.h>>1),n,o=1/0;for(let i=s.y;i<s.y+s.h;i++)for(let l=s.x;l<s.x+s.w;l++){let u=Math.abs(l-f)+Math.abs(i-a);u<o&&X(e,l,i)&&(n={x:l,y:i},o=u)}return n}function ge(e){let t=[];for(let s of e.links){let f=Ye(e,s.from),a=Ye(e,s.to);if(!f||!a)continue;let n=Y(e,f,a);n&&n.length>0&&t.push({from:s.from,to:s.to,points:[f,...n]})}return t}function xe(e,t,s){t.forEach((f,a)=>{let n=Xe[a%Xe.length],o=(a%5-2)*2,i=b=>[b.x*16+8+o,b.y*16+8+o];e.save(),e.lineWidth=2,e.strokeStyle=n,e.globalAlpha=.85,e.setLineDash([6,5]),e.lineDashOffset=-s*14,e.beginPath(),f.points.forEach((b,w)=>{let[x,y]=i(b);w===0?e.moveTo(x,y):e.lineTo(x,y)}),e.stroke(),e.setLineDash([]);let l=f.points[0],u=f.points[f.points.length-1];if(l&&u){let[b,w]=i(l),[x,y]=i(u);e.fillStyle=n,e.fillRect(b-2,w-2,4,4),e.beginPath(),e.arc(x,y,4,0,Math.PI*2),e.fill()}e.restore()})}function at(e,t,s,f,a,n,o,i){if(r(e,"#55351d",t+1,s+22,46,8),r(e,"#6b4427",t+1,s+13,46,10),r(e,"#8a5a33",t+1,s+10,46,12),r(e,"#a87545",t+1,s+10,46,2),r(e,"#3b2413",t+3,s+22,3,9),r(e,"#3b2413",t+42,s+22,3,9),r(e,"#55351d",t+30,s+23,12,7),r(e,"#7c5637",t+31,s+24,10,2),r(e,"#d4a24e",t+35,s+24,2,1),r(e,"#7c5637",t+31,s+27,10,2),r(e,"#d4a24e",t+35,s+27,2,1),r(e,E,t+14,s-3,20,15),r(e,"#374151",t+22,s+12,4,2),r(e,"#4b5563",t+19,s+14,10,1),i)r(e,"#3f0f14",t+15,s-2,18,13),Math.floor(a*2)%2===0&&(r(e,"#ef4444",t+23,s,2,6),r(e,"#ef4444",t+23,s+7,2,2));else if(f){r(e,"#0f2a2e",t+15,s-2,18,13);let l=Math.floor(a*3+n%13);for(let u=0;u<5;u++){let b=3+((n>>u&7)+(l+u)*7)%12;r(e,u%3===0?o.primary:u%3===1?"#7dd3fc":"#fcd34d",t+16+u%2*2,s-1+u*2.2,b,1)}e.fillStyle="rgba(125,211,252,0.12)",e.fillRect(t+10,s+11,28,8)}else r(e,"#1f2937",t+15,s-2,18,13),r(e,"#374151",t+17,s,3,1);r(e,"#d1d5db",t+16,s+15,16,5);for(let l=0;l<2;l++)for(let u=0;u<7;u++)r(e,"#9ca3af",t+17+u*2,s+16+l*2,1,1);r(e,"#e5e7eb",t+34,s+16,3,4),r(e,"#f3f4f6",t+40,s+13,5,5),r(e,o.primary,t+40,s+15,5,1),r(e,"#fde68a",t+4,s+13,7,6),r(e,"#fbbf24",t+5,s+15,5,1)}function it(e,t,s,f){r(e,"#3a2c1e",t,s-12,64,27),r(e,"#d9c29c",t+2,s-10,60,23);for(let o=0;o<40;o++)r(e,"#c9b08a",t+3+o*37%58,s-9+o*13%21,1,1);let a={todo:"#fde68a",doing:"#93c5fd",done:"#86efac"},n=8;f.tasks.slice(0,n*2).forEach((o,i)=>{let l=i%n,u=Math.floor(i/n);r(e,"#00000033",t+5+l*7,s-7+u*10,6,8),r(e,a[o.state],t+4+l*7,s-8+u*10,6,8),r(e,"#ef4444",t+6+l*7,s-8+u*10,2,1),r(e,"#00000040",t+5+l*7,s-5+u*10,4,1),r(e,"#00000040",t+5+l*7,s-3+u*10,3,1)})}function ft(e,t,s,f,a){let n=t.x*16,o=t.y*16;switch(t.type){case"desk":{let i=t.x+1,l=t.y+2,u=s.agents.find(b=>b.seat?.x===i&&b.seat?.y===l&&N(b));at(e,n,o,!!u,f,u?.seed??0,a,u?.state==="blocked");break}case"coffee":r(e,"#374151",n,o+2,32,14),r(e,"#6b7280",n,o+2,32,2),r(e,E,n+4,o-9,15,15),r(e,"#27272a",n+5,o-8,13,13),r(e,Math.floor(f*2)%2?"#ef4444":"#7f1d1d",n+15,o-6,2,2),r(e,"#52525b",n+7,o-6,6,4),r(e,"#f3f4f6",n+8,o+3,5,4),r(e,"#f3f4f6",n+23,o-1,5,5),r(e,"#92400e",n+24,o,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),o-1-(f*8+i*4)%9,1,2);break;case"water":r(e,"#d1d5db",n+3,o+3,10,13),r(e,"#9ca3af",n+3,o+14,10,2),r(e,"#60a5fa",n+4,o-8,8,11),r(e,"#bae6fd",n+5,o-7,2,9),r(e,"#3b82f6",n+5,o+6,2,2),r(e,"#ef4444",n+9,o+6,2,2),Math.floor(f*.4+t.x)%5===0&&r(e,"#e0f2fe",n+8,o-2-f*6%7,1,1);break;case"sofa":r(e,$(a.primary,-60),n+1,o-7,46,11),r(e,$(a.primary,-30),n+2,o-6,44,3),r(e,"#4b5563",n,o+3,48,11),r(e,"#6b7280",n+3,o+3,20,7),r(e,"#6b7280",n+25,o+3,20,7),r(e,"#374151",n,o+12,48,3),r(e,"#374151",n-1,o-2,4,16),r(e,"#374151",n+45,o-2,4,16);break;case"plant":r(e,"#92400e",n+4,o+9,8,7),r(e,"#b45309",n+3,o+8,10,2);for(let[i,l,u,b]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,o+l,u,b);r(e,"#22c55e",n+7,o-3,2,8),r(e,"#22c55e",n+3,o+1,2,3),r(e,"#4ade80",n+10,o-4,1,3);break;case"fern":r(e,"#57534e",n+3,o+10,10,6),r(e,"#78716c",n+2,o+9,12,2);for(let i=0;i<7;i++){let l=i-3;for(let u=0;u<5;u++)r(e,u%2?"#16a34a":"#15803d",n+7+l*(u/2+1),o+8-u*2+Math.abs(l),2,2)}break;case"board":it(e,n,o,s);break;case"whiteboard":r(e,"#9ca3af",n,o-10,48,22),r(e,"#f9fafb",n+2,o-8,44,18),r(e,"#3b82f6",n+5,o-5,14,1),r(e,"#3b82f6",n+5,o-2,9,1),r(e,"#ef4444",n+24,o-6,8,6),r(e,"#f9fafb",n+25,o-5,6,4),r(e,"#10b981",n+8,o+3,20,1),r(e,"#10b981",n+27,o+2,1,3),r(e,"#6b7280",n+2,o+10,44,2);break;case"shelf":r(e,"#5b3a21",n,o-12,32,28);for(let i=0;i<2;i++){r(e,"#3b2413",n+2,o-10+i*13,28,11);for(let l=0;l<8;l++){let u=["#ef4444","#3b82f6","#10b981","#f59e0b","#8b5cf6"][(l*3+i+t.x)%5];r(e,u,n+3+l*3,o-8+i*13+l%3,2,9-l%3),r(e,$(u,40),n+3+l*3,o-6+i*13,2,1)}}break;case"server":r(e,E,n,o-13,16,29),r(e,"#1f2937",n+1,o-12,14,27);for(let i=0;i<5;i++){r(e,"#111827",n+2,o-11+i*5,12,4);let l=Math.floor(f*3+i*2+t.x)%3!==0;r(e,l?"#22c55e":"#14532d",n+3,o-10+i*5,1,1),r(e,i%2===0?"#f59e0b":"#3b82f6",n+5,o-10+i*5,1,1),r(e,"#374151",n+8,o-10+i*5,5,1)}break;case"table":r(e,"#44403c",n+2,o+16,44,12),r(e,"#78716c",n+2,o+3,44,14),r(e,"#a8a29e",n+2,o+3,44,2),r(e,"#f9fafb",n+10,o+6,8,6),r(e,"#f9fafb",n+28,o+8,8,6),r(e,"#1f2937",n+12,o+8,4,1),r(e,"#3b82f6",n+30,o+10,4,1);break;case"rug":r(e,a.primary,n,o,64,48),e.fillStyle="rgba(0,0,0,0.42)",e.fillRect(n+3,o+3,58,42),r(e,a.primary,n+6,o+6,52,1),r(e,a.primary,n+6,o+41,52,1),r(e,a.primary,n+6,o+6,1,36),r(e,a.primary,n+57,o+6,1,36);for(let i=0;i<6;i++)r(e,a.primary,n+12+i*8,o+22,4,4);break;case"arcade":r(e,E,n,o-14,16,30),r(e,"#4c1d95",n+1,o-13,14,28),r(e,"#111827",n+3,o-10,10,9),r(e,["#22c55e","#ec4899","#38bdf8"][Math.floor(f*2)%3],n+4+Math.floor(f*4)%7,o-8+Math.floor(f*3)%5,2,2),r(e,"#f59e0b",n+3,o-13,10,2),r(e,"#27272a",n+2,o+1,12,4),r(e,"#ef4444",n+4,o+2,2,2),r(e,"#3b82f6",n+9,o+2,2,2);break;case"fridge":r(e,E,n+1,o-12,14,28),r(e,"#e5e7eb",n+2,o-11,12,26),r(e,"#9ca3af",n+2,o-3,12,1),r(e,"#6b7280",n+11,o-8,1,3),r(e,"#6b7280",n+11,o,1,5),r(e,"#fde68a",n+4,o-9,3,3),r(e,"#fca5a5",n+5,o+3,3,3);break;case"printer":r(e,"#4b5563",n+2,o+8,12,8),r(e,E,n+1,o-2,14,11),r(e,"#d1d5db",n+2,o-1,12,9),r(e,"#f9fafb",n+4,o-5-(Math.floor(f)%4===0?1:0),8,5),r(e,"#22c55e",n+11,o+1,2,1),r(e,"#9ca3af",n+3,o+5,10,1);break;case"lamp":r(e,"#374151",n+5,o+13,6,3),r(e,"#4b5563",n+7,o-4,2,17),r(e,E,n+2,o-10,12,8),r(e,"#fde68a",n+3,o-9,10,6),r(e,"#fef3c7",n+4,o-8,4,2);break;case"beanbag":r(e,E,n,o+3,16,13),r(e,$(a.primary,-50),n+1,o+4,14,11),r(e,$(a.primary,-20),n+3,o+5,8,4),r(e,"#00000040",n+1,o+13,14,2);break;case"tv":r(e,"#3b2413",n+2,o+8,44,8),r(e,"#5b3a21",n+2,o+8,44,2),r(e,E,n+4,o-14,40,22),r(e,"#0b1120",n+5,o-13,38,20);for(let i=0;i<9;i++){let l=2+(i*5+Math.floor(f*3))%12;r(e,i%3===0?a.primary:i%3===1?"#38bdf8":"#f472b6",n+8+i*4,o+5-l,3,l)}break;case"vending":r(e,E,n,o-14,16,30),r(e,"#b91c1c",n+1,o-13,14,28),r(e,"#0f172a",n+3,o-11,8,16);for(let i=0;i<3;i++)for(let l=0;l<2;l++)r(e,["#fbbf24","#34d399","#60a5fa","#f472b6"][(i+l*2)%4],n+4+l*3,o-10+i*5,2,4);r(e,"#d1d5db",n+12,o-9,2,6),r(e,"#111827",n+3,o+8,10,4);break;case"trophy":r(e,"#6b4427",n+2,o+8,12,8),r(e,"#8a5a33",n+2,o+8,12,2),r(e,"#78350f",n+5,o+5,6,3),r(e,"#f59e0b",n+7,o+1,2,4),r(e,E,n+3,o-8,10,10),r(e,"#fbbf24",n+4,o-7,8,8),r(e,"#fde68a",n+5,o-6,2,5),r(e,"#fbbf24",n+1,o-6,3,1),r(e,"#fbbf24",n+12,o-6,3,1);break;case"clock":{r(e,E,n+3,o+1,10,10),r(e,"#f9fafb",n+4,o+2,8,8),r(e,"#1f2937",n+8,o+3,1,3),r(e,"#1f2937",n+8,o+6,3,1);break}case"poster":{let i=["#7c3aed","#0ea5e9","#db2777","#059669"],l=i[(t.x+t.y)%i.length];r(e,E,n+2,o,12,11),r(e,l,n+3,o+1,10,9),r(e,$(l,60),n+5,o+3,6,3),r(e,"#f9fafb",n+5,o+7,6,1);break}}}var ke={furniture:ft,glow(e,t,s){e.type==="lamp"&&s(e.x*16+8,e.y*16,36,"rgba(253,224,139,0.30)"),(e.type==="arcade"||e.type==="vending"||e.type==="tv")&&s(e.x*16+8,e.y*16,26,"rgba(125,211,252,0.16)"),e.type==="desk"&&t.agents.some(f=>f.seat?.x===e.x+1&&f.seat?.y===e.y+2&&N(f))&&s(e.x*16+24,e.y*16+8,30,"rgba(125,211,252,0.26)")}};var lt=new Map([["office",ke]]);var oe=e=>lt.get(e.pack.id)??ke;function Me(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 ut(e,t){e.fillStyle=E;for(let[,s,f,a,n]of t)e.fillRect(Math.round(s)-1,Math.round(f)-1,a+2,n+2);for(let[s,f,a,n,o]of t)r(e,s,f,a,n,o)}function dt(e,t,s,f){let a=t.x*16+2,n=t.y*16+15,o=N(t),i=t.walking,l=t.facing==="left"||t.facing==="right",u=t.facing==="up",b=t.facing==="left",w=Math.floor(s*9+t.seed%5),x=i?w%4:0,y=i&&x%2===1?-1:0,O=!i&&!o&&Math.floor(s*1.4+t.seed%7)%2===0?1:0,W=t.party>0?-Math.abs(Math.round(Math.sin(s*12)*3)):0,A=t.skin,m=t.hair,c=t.shirt,h=$(c,-40),M=$(c,24),R="#39415a",T="#1f2433",D=t.seed%5,H=(t.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)),t.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=y+W,g=[],L=n-13+re+O*0,S=L-8+O;if(o&&(r(e,"#1f2937",a+1,t.y*16+3,10,9),r(e,"#374151",a+2,t.y*16+11,8,3),r(e,"#111827",a+5,t.y*16+14,2,2)),!o){let v=L+7;if(l){let k=x===1?2:x===3?-2:0;g.push([R,a+4+k,v,3,5],[T,a+4+k+(b?-1:0),v+5,4,1]),g.push([$(R,-12),a+5-k,v,3,5],[T,a+5-k+(b?-1:0),v+5,4,1])}else{let k=x===1?1:0,F=x===3?1:0;g.push([R,a+2,v,3,5-k],[T,a+2,v+5-k,3,1]),g.push([R,a+7,v,3,5-F],[T,a+7,v+5-F,3,1])}}let z=i?x===1?1:x===3?-1:0:0;if(l)g.push([c,a+3,L,6,7],[h,a+3,L+6,6,1]),g.push([h,a+5+z,L+1,2,5],[A,a+5+z,L+6,2,1]);else{g.push([c,a+1,L,10,7],[h,a+1,L+6,10,1]);let v=o&&t.state==="working",k=Math.floor(s*10+t.seed)%2;g.push([h,a-1,L+1+z+(v?-k:0),2,5]),g.push([h,a+11,L+1-z+(v?k-1:0),2,5]),g.push([A,a-1,L+6+z+(v?-k:0),2,1]),g.push([A,a+11,L+6-z+(v?k-1:0),2,1]),!u&&H===2&&g.push(["#f3f4f6",a+4,L,4,3],[t.seed%2?"#ef4444":"#1d4ed8",a+5,L,2,5]),!u&&H===1&&g.push([M,a+3,L,6,2],[h,a+5,L+2,2,4]),u&&H===1&&g.push([M,a+2,L,8,3])}if(g.push([A,a+1,S,10,8]),u)g.push([m,a+1,S,10,7]);else if(l){let v=b?a+7:a+1;g.push([m,a+1,S,10,3],[m,v,S,4,6]);let k=Math.floor(s*.7+t.seed%11)%7===0;g.push([k?$(A,-40):"#1a1a24",b?a+3:a+8,S+4,1,k?1:2])}else{g.push([m,a+1,S,10,3],[m,a+1,S+3,1,2],[m,a+10,S+3,1,2]);let v=Math.floor(s*.7+t.seed%11)%7===0;g.push([v?$(A,-40):"#1a1a24",a+3,S+4,2,v?1:2]),g.push([v?$(A,-40):"#1a1a24",a+7,S+4,2,v?1:2]),g.push([$(A,-28),a+5,S+6,2,1])}if(D===1&&g.push([m,a,S+2,2,8],[m,a+10,S+2,2,8]),D===2&&g.push([m,a+4,S-3,4,3]),D===3&&g.push([m,a+2,S-2,2,2],[m,a+5,S-3,2,3],[m,a+8,S-2,2,2]),D===4&&(g.push([M,a,S-1,12,3]),!u&&!l&&g.push([h,a+1,S+2,10,1]),l&&g.push([h,b?a-2:a+9,S+1,5,1])),ut(e,g),t.party>0){let v=["#f59e0b","#ec4899","#22c55e","#3b82f6","#a855f7"];for(let k=0;k<10;k++){let F=(s*1.1+k*.137)%1,J=k*2.4+t.seed;r(e,v[k%v.length],a+6+Math.cos(J)*(4+F*14),n-22-F*6+F*F*26,2,2)}}}function G(e,t,s,f){r(e,E,t-1,s-1,13,11),r(e,"#ffffff",t,s,11,9),r(e,"#ffffff",t+4,s+9,3,1),r(e,E,t+4,s+10,3,1),f(t,s)}function ct(e,t,s){let f=Math.round(t.x*16+2),a=Math.round(t.y*16-22+(N(t)?2:-2)),n=Math.floor(s*2+t.seed%3)%2===0;if(t.state==="blocked")G(e,f,a,(o,i)=>{r(e,n?"#dc2626":"#991b1b",o+5,i+1,2,5),r(e,n?"#dc2626":"#991b1b",o+5,i+7,2,1)});else if(t.state==="thinking"){let o=Math.floor(s*3)%4;G(e,f,a,(i,l)=>{for(let u=0;u<3;u++)r(e,u<o?"#111827":"#d1d5db",i+2+u*3,l+4,2,2)})}else if(t.state==="reviewing"&&!t.walking)G(e,f,a,(o,i)=>{r(e,"#2563eb",o+4,i+1,4,1),r(e,"#2563eb",o+7,i+2,1,2),r(e,"#2563eb",o+5,i+4,2,1),r(e,"#2563eb",o+5,i+5,1,1),r(e,"#2563eb",o+5,i+7,1,1)});else if(t.state==="done"){let o=n?"#f59e0b":"#fbbf24";G(e,f,a,(i,l)=>{r(e,o,i+5,l+1,1,7),r(e,o,i+2,l+3,7,2),r(e,o,i+4,l+2,3,5)})}else t.state==="idle"&&!t.walking&&t.seed%3===0&&G(e,f,a,(o,i)=>{r(e,"#92400e",o+3,i+3,4,4),r(e,"#d97706",o+3,i+3,4,1),r(e,"#92400e",o+7,i+4,1,2),n&&r(e,"#9ca3af",o+4,i+1,1,1)})}function bt(e,t){for(let s=t.y;s<t.y+t.h;s++)for(let f=t.x;f<t.x+t.w;f++){let a=f*16,n=s*16,o=(f*73+s*151)%17;switch(t.floor){case"carpet":r(e,"#4c4f7a",a,n,16,16);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,16,16),r(e,"#aab5c2",a,n+15,16,1),r(e,"#aab5c2",a+15,n,1,16),r(e,"#e8eef5",a+1,n+1,5,1);break;case"stone":r(e,o%3===0?"#8d93a3":"#9aa0b0",a,n,16,16),r(e,"#7a8090",a,n+15,16,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,16,16);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);o===3&&r(e,"#596070",a+3,n+8,8,1);break;case"hall":{r(e,"#cfc8b8",a,n,16,16),r(e,"#bdb6a6",a,n+15,16,1),r(e,"#bdb6a6",a+15,n,1,16);let i=t.w>=t.h,l=i?s-t.y:f-t.x,u=i?t.h:t.w;i&&l===0&&r(e,"#7f6a55",a,n+12,16,4),i&&l===u-1&&r(e,"#7f6a55",a,n,16,4),!i&&l===0&&r(e,"#7f6a55",a+12,n,4,16),!i&&l===u-1&&r(e,"#7f6a55",a,n,4,16);break}case"grass":r(e,"#3f8f4f",a,n,16,16);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,16,16),r(e,"#8a5d36",a,n+7,16,1),r(e,"#8a5d36",a,n+15,16,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+o%9+2,n+3,4,1),r(e,"#b4835a",a+o%7+4,n+11,3,1)}}}}var qe="#2a2d48",mt="#5c628f",V="#4a4f78",pt="#6d74a4";function yt(e,t,s){let f=t*16,a=s*16;r(e,(t+s)%2===0?"#4b8a4f":"#478549",f,a,16,16);let n=(t*73+s*151)%29;for(let o=0;o<4;o++)r(e,"#5a9b5c",f+(t*5+o*7)%15,a+(s*3+o*5)%15,1,2);n===4?(r(e,"#2f6a38",f+3,a+7,10,7),r(e,"#3c7f45",f+5,a+8,5,3)):n===11&&(r(e,"#5b3a22",f+7,a+10,2,5),r(e,"#24592e",f+2,a+1,12,10),r(e,"#2f6f3a",f+4,a+2,7,5))}function ht(e,t,s,f){let a=new Set;for(let o of t.rooms)for(let i=o.y;i<o.y+o.h;i++)for(let l=o.x;l<o.x+o.w;l++)a.add(`${l},${i}`);let n=new Set(t.doors.map(o=>`${o.x},${o.y}`));for(let o=0;o<t.rows;o++)for(let i=0;i<t.cols;i++){let l=`${i},${o}`;if(a.has(l)||n.has(l))continue;let u=i*16,b=o*16,w=(x,y)=>{for(let O=y-1;O<=y+1;O++)for(let W=x-1;W<=x+1;W++)if(a.has(`${W},${O}`)||n.has(`${W},${O}`))return!0;return!1};if(!w(i,o)){yt(e,i,o);continue}a.has(`${i},${o+1}`)?(r(e,mt,u,b,16,16),r(e,pt,u,b,16,1),r(e,V,u,b+12,16,4),r(e,s.primary,u,b+11,16,1),i%4===3&&!w(i,o-1)&&!t.furniture.some(x=>ee(t,x).wall&&x.x===i&&x.y===o)&&(r(e,"#1f2937",u+1,b+1,14,9),r(e,f.sky,u+2,b+2,12,7),r(e,$(f.sky,40),u+3,b+3,4,2),r(e,"#1f2937",u+8,b+2,1,7),f.night>.3&&(r(e,"#fef3c7",u+4,b+3,1,1),r(e,"#fef3c7",u+11,b+5,1,1)))):(r(e,qe,u,b,16,16),a.has(`${i},${o-1}`)&&r(e,"#20233a",u,b,16,3),a.has(`${i-1},${o}`)&&r(e,"#20233a",u,b,2,16),a.has(`${i+1},${o}`)&&r(e,"#20233a",u+14,b,2,16))}for(let o of t.doors){let i=o.x*16,l=o.y*16,u=a.has(`${o.x},${o.y-1}`)||a.has(`${o.x},${o.y+1}`);r(e,"#7c5637",i,l,16,16);for(let b=2;b<16;b+=4)r(e,"#6b4a2f",u?i:i+b,u?l+b:l,u?16:1,u?1:16);u?(r(e,V,i,l,2,16),r(e,V,i+14,l,2,16)):(r(e,V,i,l,16,2),r(e,V,i,l+14,16,2))}}function gt(e,t){e.font=q,e.textBaseline="top";for(let s of t.rooms){if(!s.name)continue;let f=s.name.toUpperCase(),a=Math.ceil(e.measureText(f).width)+6,n=s.x*16+3,o=s.y*16-13;r(e,"#1c1f33",n,o,a,10),r(e,"#2f3350",n+1,o+1,a-2,8),e.fillStyle="#f8fafc",e.fillText(f,n+3,o+1.5)}}function ve(e,t,s,f){r(e,qe,0,0,t.cols*16,t.rows*16);for(let a of t.rooms)bt(e,a);ht(e,t,s,f);for(let a of t.furniture)a.type==="rug"&&oe(t).furniture(e,a,t,0,s);for(let a of t.furniture)ee(t,a).wall&&oe(t).furniture(e,a,t,0,s);if(f.sun!=="rgba(0,0,0,0)"){e.fillStyle=f.sun;for(let a of t.rooms)for(let n=a.x;n<a.x+a.w;n++)n%4===3&&e.fillRect(n*16+2,a.y*16,12,Math.min(a.h,3)*16)}}function xt(e,t,s,f){e.font=q,e.textBaseline="top";let a=Math.ceil(e.measureText(t.name).width)+5,n=Math.round(Math.max(1,Math.min(f-a-1,t.x*16+8-a/2))),o=Math.round(t.y*16+16);e.fillStyle=s?"#ffffff":"rgba(17,24,39,0.82)",e.fillRect(n,o,a,10),e.fillStyle=s?"#111827":"#ffffff",e.fillText(t.name,n+2.5,o+1.5)}function kt(e,t,s){let f=[],a="";for(let n of t.split(/\s+/)){let o=a?`${a} ${n}`:n;e.measureText(o).width>s&&a?(f.push(a),a=n):a=o}return a&&f.push(a),f.slice(0,3)}var je={working:"Working",thinking:"Thinking",blocked:"Blocked",reviewing:"Reviewing",idle:"On a break",done:"Finished",away:"Away"};function Mt(e,t,s){e.font=ae,e.textBaseline="top";let f=s.rooms.find(u=>u.id===t.area),a=kt(e,t.task||je[t.state]||"",110),n=120,o=18+a.length*9+(f?9:0)+3,i=Math.round(Math.max(2,Math.min(s.cols*16-n-2,t.x*16+8-n/2))),l=Math.round(Math.max(2,t.y*16-o-24));r(e,E,i-1,l-1,n+2,o+2),r(e,"#ffffff",i,l,n,o),e.fillStyle="#111827",e.font=q,e.fillText(`${t.name}: ${je[t.state]??""}`.slice(0,28),i+4,l+4),e.fillStyle="#374151",e.font=ae,a.forEach((u,b)=>e.fillText(u,i+4,l+15+b*9)),f&&(e.fillStyle="#6b7280",e.fillText(`In ${f.name}`.slice(0,28),i+4,l+15+a.length*9))}function vt(e,t,s){if(t.tasks.length===0)return;let f=t.tasks.filter(n=>n.state==="done").length;e.font=q,e.textBaseline="top";let a=96;r(e,"rgba(17,24,39,0.85)",4,4,a,20),e.fillStyle="#ffffff",e.fillText(`${t.pack.words.quests} ${f}/${t.tasks.length}`,8,6.5),r(e,"#374151",8,16,a-8,4),r(e,s.primary,8,16,Math.round((a-8)*f/t.tasks.length),4)}function Ke(e,t,s,f,a,n,o){let i=t.cols*16,l=t.rows*16;n?e.drawImage(n,0,0,i,l):ve(e,t,f,a),t.showLinks&&t.links.length>0&&(t.routes??(t.routes=ge(t)),xe(e,t.routes,s));let u=oe(t),b=[];for(let y of t.furniture){let O=ee(t,y);O.solid!==!1&&b.push({depth:(y.y+O.h)*16-2,draw:()=>oe(t).furniture(e,y,t,s,f)})}let w=t.agents.filter(y=>y.state!=="away");for(let y of w)b.push({depth:y.y*16+14,draw:()=>dt(e,y,s,y.id===o)});b.sort((y,O)=>y.depth-O.depth);for(let y of b)y.draw();if(a.night>0){e.fillStyle=`rgba(12,14,48,${a.night})`,e.fillRect(0,0,i,l),e.save(),e.globalCompositeOperation="lighter";let y=(O,W,A,m)=>{let c=e.createRadialGradient(O,W,1,O,W,A);c.addColorStop(0,m),c.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=c,e.fillRect(O-A,W-A,A*2,A*2)};for(let O of t.furniture)u.glow(O,t,y);e.restore()}gt(e,t);for(let y of w)xt(e,y,y.id===o,i);for(let y of w)y.id!==o&&ct(e,y,s);vt(e,t,f);let x=w.find(y=>y.id===o);x&&Mt(e,x,t)}var wt=/^(#[0-9a-f]{3,8}|rgba?\([\d\s.,%/]+\)|hsla?\([\d\s.,%/a-z]+\))$/i,we=4;function Ot(e){let t=getComputedStyle(e),s=(f,a)=>{let n=t.getPropertyValue(f).trim();return wt.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 Q(e,t={},s={}){let f=be(t),a=e.getContext("2d");if(!a)throw new Error("This browser can't draw to a canvas.");let n=a,o=Ot(e),i=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,l,u=0,b=0,w=0,x=0,y=!0,O=!1,W=!0,A,m={x:0,y:0,zoom:1},c=new Date().getHours(),h=Me(c),M,R=!0,T=()=>f.cols*16,D=()=>f.rows*16,H=()=>{m.zoom=Math.min(we,Math.max(1,m.zoom)),m.x=Math.min(T()-T()/m.zoom,Math.max(0,m.x)),m.y=Math.min(D()-D()/m.zoom,Math.max(0,m.y))},re=()=>{if(typeof document>"u")return;M??(M=document.createElement("canvas")),M.width=T()*u,M.height=D()*u;let p=M.getContext("2d");p&&(p.setTransform(u,0,0,u,0,0),p.imageSmoothingEnabled=!1,ve(p,f,o,h),R=!1)},g=()=>{R&&re();let p=u*m.zoom;n.setTransform(p,0,0,p,-m.x*p,-m.y*p),n.imageSmoothingEnabled=!1,Ke(n,f,b,o,h,M,l),A?.(n)},L=()=>{let p=e.getBoundingClientRect().width||T(),I=Math.max(1,Math.ceil(p*(typeof devicePixelRatio=="number"?devicePixelRatio:1)/T()));I===u&&e.width===T()*u&&e.height===D()*u||(u=I,e.width=T()*u,e.height=D()*u,R=!0,g())},S=p=>{if(O)return;if(x=requestAnimationFrame(S),!y){w=p;return}let C=Math.min((p-w)/1e3||0,.1);w=p,b+=C,ye(f,C);let I=new Date().getHours();I!==c&&(c=I,h=Me(c),R=!0),g()},z=p=>{l=p===l?void 0:p,s.onSelect?.(l),i&&g()},v=p=>{let C=e.getBoundingClientRect(),I=(p.clientX-C.left)/C.width*(T()/m.zoom)+m.x,_=(p.clientY-C.top)/C.height*(D()/m.zoom)+m.y;return{x:I/16,y:_/16}},k,F=p=>{W&&(k={x:p.clientX,y:p.clientY,moved:!1})},J=p=>{if(!W)return;if(k&&s.camera&&m.zoom>1){let _=e.getBoundingClientRect(),j=p.clientX-k.x,Ce=p.clientY-k.y;if(k.moved||Math.abs(j)+Math.abs(Ce)>3){k.moved=!0,m.x-=j/_.width*(T()/m.zoom),m.y-=Ce/_.height*(D()/m.zoom),k.x=p.clientX,k.y=p.clientY,H(),e.style.cursor="grabbing";return}}let{x:C,y:I}=v(p);e.style.cursor=ne(f,C,I)?"pointer":s.camera&&m.zoom>1?"grab":"default"},Oe=p=>{if(!W)return;let C=k?.moved;if(k=void 0,C)return;let{x:I,y:_}=v(p),j=ne(f,I,_);(j||l)&&z(j?.id??l)},Se=(p,C)=>{if(p===void 0){m.zoom=1,m.x=0,m.y=0;return}let I=C?v(C):{x:m.x/16+T()/m.zoom/16/2,y:m.y/16+D()/m.zoom/16/2};if(m.zoom=Math.min(we,Math.max(1,m.zoom*p)),C){let _=v(C);m.x+=(I.x-_.x)*16,m.y+=(I.y-_.y)*16}else m.x=I.x*16-T()/m.zoom/2,m.y=I.y*16-D()/m.zoom/2;H()},Ae=p=>{p.preventDefault(),Se(p.deltaY<0?1.2:1/1.2,p)};e.addEventListener("pointerdown",F),e.addEventListener("pointermove",J),e.addEventListener("pointerup",Oe),s.camera&&e.addEventListener("wheel",Ae,{passive:!1});let Le=typeof ResizeObserver=="function"?new ResizeObserver(L):void 0;Le?.observe(e);let Te=typeof IntersectionObserver=="function"?new IntersectionObserver(p=>{y=p.some(C=>C.isIntersecting)}):void 0;return Te?.observe(e),L(),u===0&&(u=1,g()),i||(x=requestAnimationFrame(S)),{world:f,update(p){he(f,p),i&&g()},setLayout(p){me(f,p),R=!0,m.zoom=Math.min(m.zoom,we),H(),u=0,L()},select:z,tileAt:v,setOverlay(p){A=p},setLinksVisible(p){f.showLinks=p,i&&g()},setInteractive(p){W=p,k=void 0,p||(e.style.cursor="crosshair")},zoom:Se,destroy(){O=!0,cancelAnimationFrame(x),Le?.disconnect(),Te?.disconnect(),e.removeEventListener("pointerdown",F),e.removeEventListener("pointermove",J),e.removeEventListener("pointerup",Oe),e.removeEventListener("wheel",Ae)}}}var Ve=new Map;function St(e,t){Ve.set(e,t)}function At(e,t,s){let f=[...s.querySelectorAll("button[data-blkc-agent]")],a=Q(e,t,{onSelect(n){for(let o of f)o.setAttribute("aria-pressed",String(o.dataset.blkcAgent===n))}});for(let n of f)n.disabled=!1,n.addEventListener("click",()=>a.select(n.dataset.blkcAgent));return a}St("office",At);var Ge=new WeakSet;function se(e=document){let t=[];for(let s of e.querySelectorAll("canvas[data-blkc-canvas]")){if(Ge.has(s))continue;let f=Ve.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]"),o={};try{o=JSON.parse(n?.textContent||"{}")}catch{o={}}Ge.add(s);let i=f(s,o,a);t.push({element:s,destroy:()=>i.destroy()})}return t}globalThis.BLKCCanvas={FURNITURE:ce,createOffice:Q,findPath:Y,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,10 @@
|
|
|
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" | "stone" | "concrete" | "grass";
|
|
5
|
-
export type
|
|
4
|
+
export type FloorStyle = "wood" | "carpet" | "tile" | "stone" | "concrete" | "grass" | "hall";
|
|
5
|
+
export type OfficeFurnitureType = "desk" | "coffee" | "sofa" | "plant" | "fern" | "board" | "whiteboard" | "shelf" | "server" | "table" | "rug" | "water" | "arcade" | "fridge" | "printer" | "lamp" | "beanbag" | "tv" | "vending" | "clock" | "poster" | "trophy";
|
|
6
|
+
/** An office item, or whatever else the world defines. */
|
|
7
|
+
export type FurnitureType = OfficeFurnitureType | (string & {});
|
|
6
8
|
export interface OfficeRoom {
|
|
7
9
|
id?: string;
|
|
8
10
|
name?: string;
|
|
@@ -41,14 +43,23 @@ export interface OfficeTask {
|
|
|
41
43
|
state?: TaskState;
|
|
42
44
|
agent?: string;
|
|
43
45
|
}
|
|
46
|
+
/** `from` depends on `to`. */
|
|
47
|
+
export interface OfficeLink {
|
|
48
|
+
from: string;
|
|
49
|
+
to: string;
|
|
50
|
+
}
|
|
44
51
|
export interface OfficeLayout {
|
|
45
52
|
cols?: number;
|
|
46
53
|
rows?: number;
|
|
47
54
|
rooms?: OfficeRoom[];
|
|
48
55
|
doors?: OfficeDoor[];
|
|
49
56
|
furniture?: OfficeFurniture[];
|
|
57
|
+
/** How the rooms' code depends on each other. Drawn as lines between them. */
|
|
58
|
+
links?: OfficeLink[];
|
|
50
59
|
}
|
|
51
60
|
export interface OfficeScene extends OfficeLayout {
|
|
61
|
+
/** Which world to draw. The office if left out or unknown. */
|
|
62
|
+
world?: string;
|
|
52
63
|
agents?: OfficeAgent[];
|
|
53
64
|
tasks?: OfficeTask[];
|
|
54
65
|
}
|
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,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,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,GAAG,MAAM,CAAC;AAC9F,MAAM,MAAM,mBAAmB,GAC3B,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,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEhE,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,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAExD,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;IAC9B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB"}
|
package/dist/world.d.ts
CHANGED
|
@@ -2,21 +2,14 @@
|
|
|
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 ItemSpec, type WorldData } from "./pack.js";
|
|
6
|
+
import type { LinkRoute } from "./links.js";
|
|
5
7
|
import type { AgentState, FloorStyle, FurnitureType, OfficeDoor, OfficeFurniture, OfficeLayout, OfficeRoom, OfficeScene, TaskState } from "./types.js";
|
|
6
8
|
export declare const MAX_COLS = 64;
|
|
7
9
|
export declare const MAX_ROWS = 40;
|
|
8
10
|
export declare const WALK_SPEED = 4.5;
|
|
9
|
-
/**
|
|
10
|
-
export declare const FURNITURE: Record<
|
|
11
|
-
w: number;
|
|
12
|
-
h: number;
|
|
13
|
-
solid?: boolean;
|
|
14
|
-
wall?: boolean;
|
|
15
|
-
spot?: {
|
|
16
|
-
x: number;
|
|
17
|
-
y: number;
|
|
18
|
-
};
|
|
19
|
-
}>;
|
|
11
|
+
/** Footprints and uses, for the office. Other worlds bring their own. */
|
|
12
|
+
export declare const FURNITURE: Record<string, ItemSpec>;
|
|
20
13
|
export declare const DEFAULT_LAYOUT: {
|
|
21
14
|
cols: number;
|
|
22
15
|
rows: number;
|
|
@@ -74,6 +67,15 @@ export interface Agent {
|
|
|
74
67
|
seed: number;
|
|
75
68
|
}
|
|
76
69
|
export interface World {
|
|
70
|
+
/** What this world is made of. */
|
|
71
|
+
pack: WorldData;
|
|
72
|
+
links: {
|
|
73
|
+
from: string;
|
|
74
|
+
to: string;
|
|
75
|
+
}[];
|
|
76
|
+
/** Worked out when first drawn, and again when the building changes. */
|
|
77
|
+
routes?: LinkRoute[];
|
|
78
|
+
showLinks: boolean;
|
|
77
79
|
cols: number;
|
|
78
80
|
rows: number;
|
|
79
81
|
rooms: Room[];
|
|
@@ -110,6 +112,8 @@ export declare function findPath(world: World, from: {
|
|
|
110
112
|
x: number;
|
|
111
113
|
y: number;
|
|
112
114
|
}[] | null;
|
|
115
|
+
/** A piece of furniture's spec. Only items in the world's list get into a World. */
|
|
116
|
+
export declare const specOf: (world: Pick<World, "pack">, item: Item) => ItemSpec;
|
|
113
117
|
/** Build a world from a scene. Bad values are dropped or clamped, so it never throws. */
|
|
114
118
|
export declare function createWorld(scene?: OfficeScene): World;
|
|
115
119
|
/** Change the building while everyone is in it. Anyone left inside a wall or a desk moves. */
|
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,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,
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAEpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,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,yEAAyE;AACzE,eAAO,MAAM,SAAS,0BAAe,CAAC;AAMtC,eAAO,MAAM,cAAc;;;;;;CAAgB,CAAC;AAM5C,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,kCAAkC;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtC,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,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;AAiCD,oFAAoF;AACpF,eAAO,MAAM,MAAM,GAAI,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,IAAI,KAAG,QAAmD,CAAC;AAiEpH,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,GAAE,WAAgB,GAAG,KAAK,CAW1D;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"}
|