1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./S8NYqUhz.js","./Dk81hmAA.js","./entry.C3S7J5VN.css","./DL9Nc2fK.js","./FaDr1iyu.js","./Bv80R3rW.js","./CrFoN066.js","./xYX4xZmw.js","./BC9Pa7jE.js","./C1oRC4l-.js","./C4dDbWEg.js","./B2GWQNqc.js","./CxSqjDGQ.js","./DL2cmomj.js","./CGz0H2HK.js","./BtCAaDxU.js","./Dw-kuXL3.js"])))=>i.map(i=>d[i]); 2import{J as nt,a as k,z as cs,b as v,_ as ot,r as G,c as C,x as et,y as rn,G as m,D as H,t as S,H as ce,a6 as Zt,a5 as vn,a7 as Nn,E as We,a9 as fi,ae as Me,a4 as ae,bH as Sn,w as Je,o as wn,aC as F$,aD as H$,i as Jn,aN as Lk,a1 as qe,C as g,aw as hn,av as wt,ar as cr,M as z$,bI as Kk,bJ as Fk,aH as xi,aF as j$,g as Hk,af as un,a2 as mo,j as Xi,au as ps,a8 as js,bN as wm,c6 as fb,m as Mm,f as bd,aq as zk,aI as jk,bQ as fl,A as mb,S as hb,O as U$,c7 as G$,aY as V$,aZ as bb,ad as gb,c8 as W$,c9 as X$,by as Y$,ca as q$}from"#entry";import{I as Z$}from"./DL9Nc2fK.js";import{V as J$,M as Uk}from"./FaDr1iyu.js";import{d as Q$,g as eE}from"./Bv80R3rW.js";import{g as Gk}from"./xYX4xZmw.js";import{a as tE,b as nE,i as oE}from"./BC9Pa7jE.js";import{d as aE,e as sE,f as iE}from"./C1oRC4l-.js";import{useDraftStaging as $m}from"./C4dDbWEg.js";import{f as rE}from"./B2GWQNqc.js";import{P as lE,a as uf}from"./CxSqjDGQ.js";import{J as cE}from"./DL2cmomj.js";const dE=nt({__name:"BbGridBackdrop",setup(e){function t(o){if(o.pointerType!=="mouse")return;const a=o.currentTarget,s=a.getBoundingClientRect();a.style.setProperty("--bb-mx",`${o.clientX-s.left}px`),a.style.setProperty("--bb-my",`${o.clientY-s.top}px`),a.style.setProperty("--bb-spot","1")}function n(o){o.currentTarget.style.setProperty("--bb-spot","0")}return(o,a)=>(v(),k("div",{class:"bb-grid",onPointermove:t,onPointerleave:n},[cs(o.$slots,"default",{},void 0,!0)],32))}}),Vk=Object.assign(ot(dE,[["__scopeId","data-v-4d5f8aba"]]),{__name:"BbShellBbGridBackdrop"}),uE={class:"bb-project-list"},pE={class:"bb-project-list-header"},fE={class:"bb-project-list-title"},mE={class:"bb-project-list-search-wrap"},hE=["placeholder","aria-label"],bE={key:0,class:"bb-project-list-empty sr-only",role:"status"},gE={class:"bb-project-list-items bb-project-list-grid"},vE=["data-project-id"],yE=["onClick"],kE={class:"bb-project-list-icon","aria-hidden":"true"},SE={class:"bb-project-list-name"},IE={class:"bb-project-list-meta"},wE={key:0,class:"bb-project-list-scene"},ME={class:"bb-project-list-parts"},$E={class:"bb-project-list-updated"},EE=["aria-expanded","aria-label","onClick"],xE={key:0,class:"bb-project-list-menu",role:"menu"},PE=["onClick"],CE=["onClick"],BE={key:1,class:"bb-project-list-confirm-row"},_E={class:"bb-project-list-confirm",role:"alert"},AE=["onClick"],TE=nt({__name:"BbProjectList",props:{projects:{},hasMore:{type:Boolean,default:!1}},emits:["create","open","remove","more"],setup(e,{emit:t}){const n=e,o=t,a=G(""),s=C(()=>{const h=a.value.trim().toLowerCase();return h?n.projects.filter(b=>b.name.toLowerCase().includes(h)||(b.sceneTitle??"").toLowerCase().includes(h)):n.projects}),i=G(null);function r(h){i.value=i.value===h?null:h}const l=G(null);function c(h){i.value=null,l.value=h}function d(h){l.value=null,o("remove",h)}function u(){l.value=null}const p=h=>String(h).padStart(2,"0");function f(h){const b=new Date(h);return`${b.getFullYear()}-${p(b.getMonth()+1)}-${p(b.getDate())} ${p(b.getHours())}:${p(b.getMinutes())}`}return(h,b)=>{const I=vn;return v(),et(Vk,null,{default:rn(()=>[m("section",uE,[m("header",pE,[m("h1",fE,S(h.$t("tool.blockingBoard.list.title")),1),m("label",mE,[ce(I,{name:"i-lucide-search",class:"bb-project-list-search-icon"}),Zt(m("input",{"onUpdate:modelValue":b[0]||(b[0]=y=>a.value=y),type:"search",class:"bb-project-list-search",placeholder:h.$t("tool.blockingBoard.list.search"),"aria-label":h.$t("tool.blockingBoard.list.search")},null,8,hE),[[Nn,a.value]])]),m("button",{type:"button",class:"bb-new-project-btn btn-md",onClick:b[1]||(b[1]=y=>o("create"))},[ce(I,{name:"i-lucide-plus",class:"size-[16px]"}),We(" "+S(h.$t("tool.blockingBoard.list.newProject")),1)])]),e.projects.length===0&&!e.hasMore?(v(),k("p",bE,S(h.$t("tool.blockingBoard.list.empty")),1)):H("",!0),m("ul",gE,[m("li",{class:"bb-project-list-new-card",role:"button",tabindex:"0",onClick:b[2]||(b[2]=y=>o("create")),onKeydown:b[3]||(b[3]=fi(y=>o("create"),["enter"]))},[ce(I,{name:"i-lucide-plus",class:"bb-project-list-new-icon"}),m("span",null,S(h.$t("tool.blockingBoard.list.newProject")),1)],32),(v(!0),k(ae,null,Me(s.value,y=>(v(),k("li",{key:y.projectId,class:"bb-project-list-item","data-project-id":y.projectId},[m("button",{type:"button",class:"bb-project-list-open",onClick:w=>o("open",y.projectId)}
2,[m("span",kE,[ce(Z$,{class:"size-[18px]"})]),m("span",SE,S(y.name||h.$t("tool.blockingBoard.import.blankDefaultName")),1),m("span",IE,[y.sceneTitle&&y.sceneTitle!==y.name?(v(),k("span",wE,S(y.sceneTitle),1)):H("",!0),m("span",ME,S(h.$t("tool.blockingBoard.list.parts",{count:y.partCount})),1),m("span",$E,S(h.$t("tool.blockingBoard.list.updatedAt",{time:f(y.updatedAt)})),1)])],8,yE),m("button",{type:"button",class:"bb-project-list-menu-btn","aria-haspopup":"menu","aria-expanded":i.value===y.projectId,"aria-label":h.$t("tool.blockingBoard.stage.more"),onClick:w=>r(y.projectId)},[ce(I,{name:"i-lucide-ellipsis-vertical",class:"size-[16px]"})],8,EE),i.value===y.projectId?(v(),k("div",xE,[m("button",{type:"button",role:"menuitem",class:"bb-project-list-menu-open",onClick:w=>(i.value=null,o("open",y.projectId))},S(h.$t("tool.blockingBoard.list.open")),9,PE),m("button",{type:"button",role:"menuitem",class:"bb-project-list-remove",onClick:w=>c(y.projectId)},S(h.$t("tool.blockingBoard.list.delete")),9,CE)])):H("",!0),l.value===y.projectId?(v(),k("div",BE,[m("span",_E,S(h.$t("tool.blockingBoard.list.confirmDelete")),1),m("button",{type:"button",class:"bb-project-list-confirm-yes btn-md",onClick:w=>d(y.projectId)},S(h.$t("tool.blockingBoard.list.delete")),9,AE),m("button",{type:"button",class:"bb-project-list-confirm-no btn-md",onClick:u},S(h.$t("tool.blockingBoard.cancel")),1)])):H("",!0)],8,vE))),128))]),e.hasMore?(v(),k("button",{key:1,type:"button",class:"bb-project-list-more btn-md",onClick:b[4]||(b[4]=y=>o("more"))},S(h.$t("tool.blockingBoard.list.more")),1)):H("",!0)])]),_:1})}}}),RE=Object.assign(ot(TE,[["__scopeId","data-v-1646333c"]]),{__name:"BbProjectList"}),Wk=Symbol("bb-overlay-registry");function DE(e){return e.length>0?e[e.length-1]:null}function OE(){const e=Sn([]),t={top:C(()=>DE(e.value)),open(n){return e.value.includes(n)||(e.value=[...e.value,n]),()=>{e.value=e.value.filter(o=>o!==n)}}};return H$(Wk,t),t}function Qo(e,t,n){const o=F$(Wk,null);if(!o)return;const a={name:e,onAction:n};let s=null;Je(t,i=>{i&&!s?s=o.open(a):!i&&s&&(s(),s=null)},{immediate:!0}),wn(()=>{s?.(),s=null})}const Em={SCHEMA_INVALID:{severity:"error",messageKey:"tool.blockingBoard.issue.schemaInvalid"},UNSUPPORTED_SCHEMA_VERSION:{severity:"error",messageKey:"tool.blockingBoard.issue.unsupportedSchemaVersion"},LIMIT_EXCEEDED:{severity:"error",messageKey:"tool.blockingBoard.issue.limitExceeded"},INVALID_ID:{severity:"error",messageKey:"tool.blockingBoard.issue.invalidId"},DUPLICATE_ID:{severity:"error",messageKey:"tool.blockingBoard.issue.duplicateId"},REFERENCE_MISSING:{severity:"error",messageKey:"tool.blockingBoard.issue.referenceMissing"},REFERENCE_MISMATCH:{severity:"error",messageKey:"tool.blockingBoard.issue.referenceMismatch"},INVALID_RANGE:{severity:"error",messageKey:"tool.blockingBoard.issue.invalidRange"},COVERAGE_OVERLAP:{severity:"error",messageKey:"tool.blockingBoard.issue.coverageOverlap"},COVERAGE_GAP:{severity:"warning",messageKey:"tool.blockingBoard.issue.coverageGap"},PART_DURATION_OUT_OF_MODEL_RANGE:{severity:"error",messageKey:"tool.blockingBoard.issue.partDurationOutOfModelRange"},DURATION_OUT_OF_MODEL_RANGE:{severity:"error",messageKey:"tool.blockingBoard.issue.durationOutOfModelRange"},MEDIA_NOT_OWNED:{severity:"warning",messageKey:"tool.blockingBoard.issue.mediaNotOwned"},TARGET_MODEL_UNKNOWN:{severity:"warning",messageKey:"tool.blockingBoard.issue.targetModelUnknown"},CUT_TRACK_EMPTY:{severity:"error",messageKey:"tool.blockingBoard.issue.cutTrackEmpty"},CUT_GAP:{severity:"error",messageKey:"tool.blockingBoard.issue.cutGap"},CUT_OVERLAP:{severity:"error",messageKey:"tool.blockingBoard.issue.cutOverlap"},CUT_OUTSIDE_COVERAGE:{severity:"error",messageKey:"tool.blockingBoard.issue.cutOutsideCoverage"},CUT_TOO_SHORT:{severity:"warning",messageKey:"tool.blockingBoard.issue.cutTooShort"},ACTION_SUBJECT_UNRESOLVED:{severity:"warning",messageKey:"tool.blockingBoard.issue.actionSubjectUnresolved"},OUT_OF_ROOM:{severity:"warning",messageKey:"tool.blockingBoard.issue.outOfRoom"},OPENING_OUT_OF_WALL:{severity:"warning",messageKey:"tool.blockingBoard.issue.openingOutOfWall"},UNKNOWN_FIELD_REMOVED:{severity:"info",messageKey:"tool.blockingBoard.issue.unknownFieldRemoved"},PLACEMENT_UNRESOLVED:{severity:"warning",messageKey:"tool.blockingBoard.issue.placementUnresolved"},PROP_UNPLACED:{severity:"info",messageKey:"tool.blockingBoard.issue.propUnplaced"},PROP_NO_SPACE:{severity:"warning",messageKey:"tool.blockingBoard.issue.propNoSpace"},OPENING_NO_SPACE:{severity:"warning",messageKey:"tool.blockingBoard.issue.openingNoSpace"},ROOM_PRESET_MISSING:{severity:"info",messageKey:"tool.blockingBoard.issue.roomPresetMissing"},ROOM_SIZE_CLAMPED:{severity:"info",messageKey:"tool.blockingBoard.issue.roomSizeClamped"},BLANK_PROPS_DROPPED:{severity:"info",messageKey:"tool.blockingBoard.issue.blankPropsDropped"},CAMERA_PLACEMENT_UNRESOLVED:{severity:"warning",messageKey:"tool.blockingBoard.issue.cameraPlacementUnresolved"},PATH_GOAL_UNRESOLVED:{severity:"warning",messageKey:"tool.blockingBoard.issue.pathGoalUnresolved"},PATH_UNREACHABLE:{severity:"warning",messageKey:"tool.blockingBoard.issue.pathUnreachable"},LEGACY_FIELD_IGNORED:{severity:"info",messageKey:"tool.blockingBoard.issue.legacyFieldIgnored"},CUT_TIME_UNPARSED:{severity:"warning",messageKey:"tool.blockingBoard.issue.cutTimeUnparsed"},SNAPSHOT_TOO_LARGE:{severity:"error",messageKey:"tool.blockingBoard.issue.
2snapshotTooLarge"},SNAPSHOT_LARGE:{severity:"warning",messageKey:"tool.blockingBoard.issue.snapshotLarge"},PLACEMENT_UNSPECIFIED:{severity:"info",messageKey:"tool.blockingBoard.issue.placementUnspecified"},SUBJECT_UNSPECIFIED:{severity:"info",messageKey:"tool.blockingBoard.issue.subjectUnspecified"},PROJECT_CONFLICT:{severity:"error",messageKey:"tool.blockingBoard.issue.projectConflict"},SEAT_INVALID:{severity:"error",messageKey:"tool.blockingBoard.issue.seatInvalid"},WAYPOINT_TIME_ORDER:{severity:"error",messageKey:"tool.blockingBoard.issue.waypointTimeOrder"},CAMERA_HAS_KEYS:{severity:"error",messageKey:"tool.blockingBoard.issue.cameraHasKeys"},SUPPORT_CYCLE:{severity:"error",messageKey:"tool.blockingBoard.issue.supportCycle"},OPENING_OVERLAP:{severity:"error",messageKey:"tool.blockingBoard.issue.openingOverlap"},UNKNOWN_EVENT_ANCHOR:{severity:"error",messageKey:"tool.blockingBoard.issue.unknownEventAnchor"},PAUSE_EXCEEDS_PART:{severity:"warning",messageKey:"tool.blockingBoard.issue.pauseExceedsPart"},TELEPORTATION_DETECTED:{severity:"error",messageKey:"tool.blockingBoard.issue.teleportationDetected"},UNREALISTIC_SPEED:{severity:"warning",messageKey:"tool.blockingBoard.issue.unrealisticSpeed"},MOVE_TOO_SLOW:{severity:"warning",messageKey:"tool.blockingBoard.issue.moveTooSlow"},PHYSICAL_IMPOSSIBILITY:{severity:"error",messageKey:"tool.blockingBoard.issue.physicalImpossibility"},DOOR_CLOSED_PASSAGE:{severity:"warning",messageKey:"tool.blockingBoard.issue.doorClosedPassage"},ACTOR_OVERLAP:{severity:"warning",messageKey:"tool.blockingBoard.issue.actorOverlap"},PROP_OVERLAP:{severity:"warning",messageKey:"tool.blockingBoard.issue.propOverlap"},CAMERA_INSIDE_SOLID:{severity:"error",messageKey:"tool.blockingBoard.issue.cameraInsideSolid"},CAMERA_OCCLUDED:{severity:"warning",messageKey:"tool.blockingBoard.issue.cameraOccluded"},SUBJECT_OUT_OF_FRAME:{severity:"warning",messageKey:"tool.blockingBoard.issue.subjectOutOfFrame"},AXIS_CROSSING:{severity:"warning",messageKey:"tool.blockingBoard.issue.axisCrossing"},JUMP_CUT_RISK:{severity:"warning",messageKey:"tool.blockingBoard.issue.jumpCutRisk"},CAMERA_MULTI_MOVE:{severity:"warning",messageKey:"tool.blockingBoard.issue.cameraMultiMove"},CAMERA_KEY_OUT_OF_RANGE:{severity:"error",messageKey:"tool.blockingBoard.issue.cameraKeyOutOfRange"},EXPORT_BLOCKED:{severity:"error",messageKey:"tool.blockingBoard.issue.exportBlocked"},PROMPT_COORDINATE_LEAK:{severity:"error",messageKey:"tool.blockingBoard.issue.promptCoordinateLeak"},HANDOFF_NAME_INVALID:{severity:"error",messageKey:"tool.blockingBoard.issue.handoffNameInvalid"},HANDOFF_NAME_DUPLICATE:{severity:"error",messageKey:"tool.blockingBoard.issue.handoffNameDuplicate"},SUBJECT_DESCRIPTION_TOO_LONG:{severity:"error",messageKey:"tool.blockingBoard.issue.subjectDescriptionTooLong"},HOMOGRAPHY_DEGENERATE:{severity:"error",messageKey:"tool.blockingBoard.issue.homographyDegenerate"},PHOTO_TOO_LARGE:{severity:"error",messageKey:"tool.blockingBoard.issue.photoTooLarge"},AUTO_DETOUR_UNREACHABLE:{severity:"warning",messageKey:"tool.blockingBoard.issue.autoDetourUnreachable"},AUTO_DETOUR_POSITION_KEYS:{severity:"warning",messageKey:"tool.blockingBoard.issue.autoDetourPositionKeys"},DRAFT_NORMALIZED:{severity:"info",messageKey:"tool.blockingBoard.issue.draftNormalized"},IMAGE_LAYOUT_NORMALIZED:{severity:"info",messageKey:"tool.blockingBoard.issue.imageLayoutNormalized"},IMAGE_PROP_DROPPED:{severity:"info",messageKey:"tool.blockingBoard.issue.imagePropDropped"},IMAGE_PROPS_TRUNCATED:{severity:"info",messageKey:"tool.blockingBoard.issue.imagePropsTruncated"},IMAGE_NO_ROOM:{severity:"info",messageKey:"tool.blockingBoard.issue.imageNoRoom"},ROOM_PROP_INDEX_DROPPED:{severity:"warning",messageKey:"tool.blockingBoard.issue.roomPropIndexDropped"},RECORDING_UNSUPPORTED:{severity:"error",messageKey:"tool.blockingBoard.issue.recordingUnsupported"},RECORDING_FAILED:{severity:"error",messageKey:"tool.blockingBoard.issue.recordingFailed"},MOTION_UNKNOWN:{severity:"warning",messageKey:"tool.blockingBoard.issue.motionUnknown"},MOTION_SPECIES_UNSUPPORTED:{severity:"warning",messageKey:"tool.blockingBoard.issue.motionSpeciesUnsupported"},IMAGE_PATH_ANCHORS_INSUFFICIENT:{severity:"error",messageKey:"tool.blockingBoard.issue.imagePathAnchorsInsufficient"},IMAGE_PATH_POINT_CLAMPED:{severity:"info",messageKey:"tool.blockingBoard.issue.imagePathPointClamped"},IMPORT_TOO_LARGE:{severity:"error",messageKey:"tool.blockingBoard.issue.importTooLarge"},PROP_SIZE_UNKNOWN:{severity:"error",messageKey:"tool.blockingBoard.issue.propSizeUnknown"},OPENING_SIZE_UNKNOWN:{severity:"error",messageKey:"tool.blockingBoard.issue.openingSizeUnknown"},INVALID_ANCHOR_EVENT_TYPE:{severity:"error",messageKey:"tool.blockingBoard.issue.invali
2dAnchorEventType"},ACTOR_STATE_DESYNC:{severity:"error",messageKey:"tool.blockingBoard.issue.actorStateDesync"},LIGHT_BACKLIT:{severity:"warning",messageKey:"tool.blockingBoard.issue.lightBacklit"},BS_AUTO_CAST:{severity:"info",messageKey:"tool.blockingBoard.issue.bsAutoCast"},BS_AMBIGUOUS_TOKEN:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsAmbiguousToken"},BS_CAMERA_CONFLICT:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsCameraConflict"},BS_LENS_SNAPPED:{severity:"info",messageKey:"tool.blockingBoard.issue.bsLensSnapped"},BS_DIALOGUE_OVERFLOW:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsDialogueOverflow"},BS_CUT_LONGER_THAN_PART:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsCutLongerThanPart"},BS_CUT_TOO_LONG:{severity:"error",messageKey:"tool.blockingBoard.issue.bsCutTooLong"},BS_SECOND_SCENE:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsSecondScene"},BS_PROP_GENERIC:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsPropGeneric"},BS_CAST_LIMIT:{severity:"error",messageKey:"tool.blockingBoard.issue.bsCastLimit"},BS_PART_LIMIT:{severity:"error",messageKey:"tool.blockingBoard.issue.bsPartLimit"},BS_POSITION_UNREAD:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsPositionUnread"},BS_MOVE_UNREAD:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsMoveUnread"},BS_MOVE_NO_TARGET:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsMoveNoTarget"},BS_ROOM_FULL:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsRoomFull"},BS_MOVE_TOO_FAST:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsMoveTooFast"},BS_MOVE_TOO_SLOW:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsMoveTooSlow"},BS_DOOR_CLOSED:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsDoorClosed"},BS_PATH_BLOCKED:{severity:"warning",messageKey:"tool.blockingBoard.issue.bsPathBlocked"}};function Le(e,t){const n=Em[e],o={code:e,severity:n.severity,path:t.path,messageKey:n.messageKey};return t.targetId!==void 0&&(o.targetId=t.targetId),t.timeRange!==void 0&&(o.timeRange={...t.timeRange}),t.params!==void 0&&(o.params={...t.params}),o}function Bn(e,t){return e?t?t.startsWith("[")?`${e}${t}`:`${e}.${t}`:e:t}function kl(e){return e.some(t=>t.severity==="error")}const xn=.001,_o=xn;function tp(e){return typeof e=="number"&&Number.isFinite(e)}function gd(e,t){return Math.abs(e-t)<=_o}function Xk(e,t){const{startSec:n,endSec:o}=e;return!tp(n)||!tp(o)||!tp(t)||t<=0?!1:n>=-_o&&o<=t+_o&&o-n>_o}function mi(e,t){return t>=e.startSec-_o&&t<e.endSec-_o}function xm(e,t){return e.startSec<t.endSec-_o&&t.startSec<e.endSec-_o}function vd(e,t){return t.startSec>=e.startSec-_o&&t.endSec<=e.endSec+_o}function Pi(e,t){const n=Math.max(e.startSec,t.startSec),o=Math.min(e.endSec,t.endSec);return o-n>_o?{startSec:n,endSec:o}:null}function NE(e){const t=e.filter(o=>o.endSec-o.startSec>_o).map(o=>({startSec:o.startSec,endSec:o.endSec})).sort((o,a)=>o.startSec-a.startSec||o.endSec-a.endSec),n=[];for(const o of t){const a=n[n.length-1];a&&o.startSec<=a.endSec+_o?a.endSec=Math.max(a.endSec,o.endSec):n.push(o)}return n}function Yk(e,t){const n=[];let o=0;for(const a of NE(e))a.startSec-o>_o&&n.push({startSec:o,endSec:a.startSec}),o=Math.max(o,a.endSec);return t-o>_o&&n.push({startSec:o,endSec:t}),n}const yc=xn;function Vl(e){const{cuts:t,durationSec:n,fps:o}=e,a=Bn(e.pathPrefix??"","cuts"),s=[];if(t.length===0)return s.push(Le("CUT_TRACK_EMPTY",{path:a,timeRange:{startSec:0,endSec:n}})),s;const i=t.map((d,u)=>({cut:d,index:u})),r=[];for(const d of i){const u={startSec:d.cut.inSec,endSec:d.cut.outSec};if(!Xk(u,n)){s.push(Le("INVALID_RANGE",{path:`${a}[${d.index}]`,targetId:d.cut.id,params:{inSec:d.cut.inSec,outSec:d.cut.outSec,durationSec:n}}));continue}r.push(d);const p=o>0?1/o:0;d.cut.outSec-d.cut.inSec<p-yc&&s.push(Le("CUT_TOO_SHORT",{path:`${a}[${d.index}]`,targetId:d.cut.id,timeRange:u,params:{fps:o}}))}const l=[...r].sort((d,u)=>d.cut.inSec-u.cut.inSec||d.cut.outSec-u.cut.outSec||d.index-u.index);let c=0;for(const{cut:d,index:u}of l){const p=`${a}[${u}]`;d.inSec>c+yc?s.push(Le("CUT_GAP",{path:p,targetId:d.id,timeRange:{startSec:c,endSec:d.inSec}})):d.inSec<c-yc&&s.push(Le("CUT_OVERLAP",{path:p,targetId:d.id,timeRange:{startSec:d.inSec,endSec:Math.min(c,d.outSec)}})),c=Math.max(c,d.outSec)}return n-c>yc&&s.push(Le("CUT_GAP",{path:a,timeRange:{startSec:c,endSec:n}})),s}function LE(e){const t=Bn(e.pathPrefix??"","cuts"),n=new Map(e.coverages.map(a=>[a.id,a])),o=[];
2return e.cuts.forEach((a,s)=>{const i=`${t}[${s}]`,r=n.get(a.coverageId);if(!r){o.push(Le("REFERENCE_MISSING",{path:`${i}.coverageId`,targetId:a.id,params:{field:"coverageId",referencedId:a.coverageId}}));return}r.cameraId!==a.cameraId&&o.push(Le("REFERENCE_MISMATCH",{path:`${i}.cameraId`,targetId:a.id,params:{expected:r.cameraId,actual:a.cameraId}}));const l={startSec:a.inSec,endSec:a.outSec},c={startSec:r.startSec,endSec:r.endSec};vd(c,l)||o.push(Le("CUT_OUTSIDE_COVERAGE",{path:i,targetId:a.id,timeRange:l,params:{coverageId:r.id}}))}),o}function KE(e){const{coverages:t,durationSec:n}=e,o=Bn(e.pathPrefix??"","coverages"),a=[],s=new Map,i=[];t.forEach((r,l)=>{const c={startSec:r.startSec,endSec:r.endSec};if(!Xk(c,n)){a.push(Le("INVALID_RANGE",{path:`${o}[${l}]`,targetId:r.id,params:{startSec:r.startSec,endSec:r.endSec,durationSec:n}}));return}i.push(c);const d=s.get(r.cameraId)??[];d.push({coverage:r,index:l}),s.set(r.cameraId,d)});for(const r of s.values()){const l=[...r].sort((c,d)=>c.coverage.startSec-d.coverage.startSec);for(let c=0;c<l.length;c+=1)for(let d=c+1;d<l.length;d+=1){const u=l[c].coverage,p=l[d].coverage,f=Pi({startSec:u.startSec,endSec:u.endSec},{startSec:p.startSec,endSec:p.endSec});f&&a.push(Le("COVERAGE_OVERLAP",{path:`${o}[${l[d].index}]`,targetId:p.id,timeRange:f,params:{cameraId:p.cameraId,otherCoverageId:u.id}}))}}if(Number.isFinite(n)&&n>0)for(const r of Yk(i,n))a.push(Le("COVERAGE_GAP",{path:o,timeRange:r}));return a}const Mt={idMaxLength:64,stringMaxLength:2e4,coordinateAbsMaxM:100,partDurationMaxSec:600,fovOverrideMinDeg:4,fovOverrideMaxDeg:180,fpsMin:1,fpsMax:120,parts:26,actorsPerPart:16,camerasPerPart:16,propsTotal:200,actionsPerPart:500,dialoguesPerPart:300,propEventsPerPart:300,coveragesPerPart:200,cutsPerPart:200,waypointsPerActor:200,keysPerTrack:500,aliasesPerEntry:20,refsPerKind:100},FE=/^[A-Za-z0-9_\-:.]{1,64}$/,HE=["__proto__","constructor","prototype"];function qk(e){return typeof e=="string"&&FE.test(e)&&!HE.includes(e)}const zn={castRefIds:"parts[].castRefIds[]",refId:"parts[].actors[].refId",startSeat:"parts[].actors[].start.seatPropId",poseSeat:"parts[].actors[].poseKeys[].seatPropId",facingTarget:"parts[].actors[].facingKeys[].targetId",carryProp:"parts[].actors[].carryKeys[].propId",support:"room.props[].supportPropId | parts[].props[].supportPropId",actionActor:"parts[].timeline.actions[].actorId",actionTargetProp:"parts[].timeline.actions[].targetPropId",actionTargetOpening:"parts[].timeline.actions[].targetOpeningId",dialogueActor:"parts[].timeline.dialogues[].actorId",propEventTarget:"parts[].timeline.propEvents[].targetId",cameraSubject:"parts[].cameras[].subject.targetIds[]",coverageCamera:"parts[].timeline.coverages[].cameraId",coverageSubject:"parts[].timeline.coverages[].subject.targetIds[]",anchorTarget:"parts[].timeline.coverages[].anchor.targetId",cutCoverage:"parts[].timeline.cuts[].coverageId",cutCamera:"parts[].timeline.cuts[].cameraId",activePart:"activePartId",propRef:"room.props[].refId | parts[].props[].refId"};function Zk(e){const t=[],n=(o,a,s,i,r,l)=>{s!=null&&t.push({path:o,edge:a,value:s,partIndex:i,kind:r,meta:l})};return e.room.props.forEach((o,a)=>{n(`room.props[${a}].supportPropId`,zn.support,o.supportPropId,-1,"propOrRoom"),n(`room.props[${a}].refId`,zn.propRef,o.refId,-1,"propRefs")}),e.parts.forEach((o,a)=>{const s=`parts[${a}]`;o.castRefIds.forEach((i,r)=>n(`${s}.castRefIds[${r}]`,zn.castRefIds,i,a,"characters")),o.actors.forEach((i,r)=>{const l=`${s}.actors[${r}]`;n(`${l}.refId`,zn.refId,i.refId,a,"characters"),n(`${l}.start.seatPropId`,zn.startSeat,i.start.seatPropId,a,"propOrRoom"),i.poseKeys.forEach((c,d)=>n(`${l}.poseKeys[${d}].seatPropId`,zn.poseSeat,c.seatPropId,a,"propOrRoom")),i.facingKeys.forEach((c,d)=>n(`${l}.facingKeys[${d}].targetId`,zn.facingTarget,c.targetId,a,"facingTarget")),i.carryKeys?.forEach((c,d)=>n(`${l}.carryKeys[${d}].propId`,zn.carryProp,c.propId,a,"propOrRoom"))}),o.props.forEach((i,r)=>{n(`${s}.props[${r}].supportPropId`,zn.support,i.supportPropId,a,"propOrRoom"),n(`${s}.props[${r}].refId`,zn.propRef,i.refId,a,"propRefs")}),o.cameras.forEach((i,r)=>{i.subject&&i.subject.targetIds.forEach((l,c)=>n(`${s}.cameras[${r}].subject.targetIds[${c}]`,zn.cameraSubject,l,a,"actorOrProp"))}),o.timeline.actions.forEach((i,r)=>{const l=`${s}.timeline.actions[${r}]`;n(`${l}.actorId`,zn.actionActor,i.actorId,a,"actor"),n(`${l}.targetPropId`,zn.actionTargetProp,i.targetPropId,a,"propOrRoom"),n(`${l}.targetOpeningId`,zn.actionTargetOpening,i.targetOpeningId,a,"opening")}
2),o.timeline.dialogues.forEach((i,r)=>n(`${s}.timeline.dialogues[${r}].actorId`,zn.dialogueActor,i.actorId,a,"actor")),o.timeline.propEvents.forEach((i,r)=>n(`${s}.timeline.propEvents[${r}].targetId`,zn.propEventTarget,i.targetId,a,"propOrRoomOrOpening")),o.timeline.coverages.forEach((i,r)=>{const l=`${s}.timeline.coverages[${r}]`;n(`${l}.cameraId`,zn.coverageCamera,i.cameraId,a,"camera"),i.subject.targetIds.forEach((c,d)=>n(`${l}.subject.targetIds[${d}]`,zn.coverageSubject,c,a,"actorOrProp")),i.anchor&&n(`${l}.anchor.targetId`,zn.anchorTarget,i.anchor.targetId,a,"anchor",{eventType:i.anchor.eventType})}),o.timeline.cuts.forEach((i,r)=>{const l=`${s}.timeline.cuts[${r}]`;n(`${l}.coverageId`,zn.cutCoverage,i.coverageId,a,"coverage");const c=o.timeline.coverages.find(d=>d.id===i.coverageId);n(`${l}.cameraId`,zn.cutCamera,i.cameraId,a,"cutCamera",{coverageCameraId:c?.cameraId})})}),n("activePartId",zn.activePart,e.activePartId,-1,"parts"),t}function kc(e,t,n){return e.room.props.some(o=>o.id===n)?!0:!!t&&t.props.some(o=>o.id===n)}function np(e,t){return!!e&&e.actors.some(n=>n.id===t)}function vb(e,t){return!!e&&e.cameras.some(n=>n.id===t)}function zE(e,t){return!!e&&e.timeline.coverages.some(n=>n.id===t)}function yb(e,t){return e.room.openings.some(n=>n.id===t)}function jE(e,t){return e.refs.characters.some(n=>n.id===t)}function UE(e,t,n){switch(n.kind){case"characters":return jE(e,n.value)?"ok":{code:"REFERENCE_MISSING"};case"propRefs":return e.refs.props.some(o=>o.id===n.value)?"ok":{code:"REFERENCE_MISSING"};case"propOrRoom":return kc(e,t,n.value)?"ok":{code:"REFERENCE_MISSING"};case"actor":return np(t,n.value)?"ok":{code:"REFERENCE_MISSING"};case"opening":return yb(e,n.value)?"ok":{code:"REFERENCE_MISSING"};case"propOrRoomOrOpening":return kc(e,t,n.value)||yb(e,n.value)?"ok":{code:"REFERENCE_MISSING"};case"actorOrProp":return np(t,n.value)||kc(e,t,n.value)?"ok":{code:"REFERENCE_MISSING"};case"facingTarget":return np(t,n.value)||vb(t,n.value)||kc(e,t,n.value)?"ok":{code:"REFERENCE_MISSING"};case"camera":case"cutCamera":return vb(t,n.value)?n.kind==="cutCamera"&&n.meta?.coverageCameraId!==void 0&&n.meta.coverageCameraId!==n.value?{code:"REFERENCE_MISMATCH",detail:"cut.cameraId !== coverage.cameraId"}:"ok":{code:"REFERENCE_MISSING"};case"coverage":return zE(t,n.value)?"ok":{code:"REFERENCE_MISSING"};case"parts":return e.parts.some(o=>o.partId===n.value)?"ok":{code:"REFERENCE_MISSING"};case"anchor":{const o=!!t?.timeline.actions.some(i=>i.id===n.value),a=!!t?.timeline.dialogues.some(i=>i.id===n.value),s=n.meta?.eventType??"";return s.startsWith("action")?o?"ok":a?{code:"REFERENCE_MISMATCH",detail:"anchor expects an action"}:{code:"REFERENCE_MISSING"}:s.startsWith("dialogue")?a?"ok":o?{code:"REFERENCE_MISMATCH",detail:"anchor expects a dialogue"}:{code:"REFERENCE_MISSING"}:o||a?"ok":{code:"REFERENCE_MISSING"}}default:return"ok"}}function GE(e,t){return Zk(e).filter(n=>n.value===t).map(n=>({path:n.path,edge:n.edge}))}function Jk(e){const t=[];for(const n of Zk(e)){const o=n.partIndex>=0?e.parts[n.partIndex]:void 0,a=UE(e,o,n);if(a!=="ok"){const s=Le(a.code,{path:n.path,params:{field:n.edge,referencedId:n.value,...a.detail?{detail:a.detail}:{}}});n.kind==="facingTarget"&&(s.severity="warning"),t.push(s)}}return t}function VE(e){return[...e.room.props,...e.parts.flatMap(t=>t.props)]}function kb(e,t){const n=[],o=new Set([t]),a=[t];for(;a.length>0;){const s=a.shift();for(const i of VE(e))i.supportPropId===s&&!o.has(i.id)&&(o.add(i.id),n.push({id:i.id,kind:"prop",reason:"supported by removed prop"}),a.push(i.id))}return n}const Sb=[{path:"parts[].actors[].start.seatPropId",field:"seatPropId"},{path:"parts[].actors[].poseKeys[].seatPropId",field:"seatPropId"},{path:"parts[].actors[].facingKeys[].targetId",field:"targetId"},{path:"parts[].actors[].carryKeys[]",field:"propId"},{path:"parts[].timeline.actions[].targetPropId",field:"targetPropId"},{path:"parts[].timeline.propEvents[]",field:"targetId"},{path:"parts[].cameras[].subject.targetIds | parts[].timeline.coverages[].subject.targetIds",field:"targetIds"}],WE=[{path:"parts[].timeline.actions[].targetOpeningId",field:"targetOpeningId"},{path:"parts[].timeline.propEvents[]",field:"targetId"}];function ia(e,t){if(e.room.props.some(n=>n.id===t))return{id:t,kind:"prop",cascade:kb(e,t),detach:Sb};
2if(e.room.openings.some(n=>n.id===t))return{id:t,kind:"opening",cascade:[],detach:WE};for(const n of e.parts){if(n.props.some(o=>o.id===t))return{id:t,kind:"prop",cascade:kb(e,t),detach:Sb};if(n.actors.some(o=>o.id===t)){const o=[];n.timeline.actions.filter(s=>s.actorId===t).forEach(s=>o.push({id:s.id,kind:"action",reason:"actor removed"})),n.timeline.dialogues.filter(s=>s.actorId===t).forEach(s=>o.push({id:s.id,kind:"dialogue",reason:"actor removed"}));const a=[];return n.timeline.coverages.forEach(s=>{if(!s.subject.targetIds.includes(t))return;s.subject.targetIds.filter(r=>r!==t).length===0&&(a.push(s.id),o.push({id:s.id,kind:"coverage",reason:"subject empty after actor removal"}))}),n.timeline.cuts.filter(s=>a.includes(s.coverageId)).forEach(s=>o.push({id:s.id,kind:"cut",reason:"coverage removed"})),{id:t,kind:"actor",cascade:o,detach:[{path:"parts[].cameras[].subject.targetIds",field:"targetIds"},{path:"parts[].timeline.coverages[].subject.targetIds",field:"targetIds"},{path:"parts[].actors[].facingKeys[].targetId",field:"targetId"}]}}if(n.cameras.some(o=>o.id===t)){const o=[],a=n.timeline.coverages.filter(s=>s.cameraId===t).map(s=>s.id);return a.forEach(s=>o.push({id:s,kind:"coverage",reason:"camera removed"})),n.timeline.cuts.filter(s=>a.includes(s.coverageId)).forEach(s=>o.push({id:s.id,kind:"cut",reason:"coverage removed"})),{id:t,kind:"camera",cascade:o,detach:[{path:"parts[].actors[].facingKeys[].targetId",field:"targetId"}]}}if(n.timeline.coverages.some(o=>o.id===t)){const o=n.timeline.cuts.filter(a=>a.coverageId===t).map(a=>({id:a.id,kind:"cut",reason:"coverage removed"}));return{id:t,kind:"coverage",cascade:o,detach:[]}}if(n.timeline.actions.some(o=>o.id===t))return{id:t,kind:"action",cascade:[],detach:[{path:"parts[].timeline.coverages[].anchor",field:"anchor"}]};if(n.timeline.dialogues.some(o=>o.id===t))return{id:t,kind:"dialogue",cascade:[],detach:[{path:"parts[].timeline.coverages[].anchor",field:"anchor"}]}}return{id:t,kind:"unknown",cascade:[],detach:[]}}function Ci(e,t){const n=new Set([t.id,...t.cascade.map(a=>a.id)]),o=JSON.parse(JSON.stringify(e));return o.room.props=o.room.props.filter(a=>!n.has(a.id)),o.room.openings=o.room.openings.filter(a=>!n.has(a.id)),o.room.props.forEach(a=>{a.supportPropId&&n.has(a.supportPropId)&&delete a.supportPropId}),o.parts.forEach(a=>{a.actors=a.actors.filter(s=>!n.has(s.id)),a.props=a.props.filter(s=>!n.has(s.id)),a.cameras=a.cameras.filter(s=>!n.has(s.id)),a.timeline.actions=a.timeline.actions.filter(s=>!n.has(s.id)),a.timeline.dialogues=a.timeline.dialogues.filter(s=>!n.has(s.id)),a.timeline.coverages=a.timeline.coverages.filter(s=>!n.has(s.id)),a.timeline.cuts=a.timeline.cuts.filter(s=>!n.has(s.id)),a.timeline.propEvents=a.timeline.propEvents.filter(s=>!n.has(s.targetId)),a.props.forEach(s=>{s.supportPropId&&n.has(s.supportPropId)&&delete s.supportPropId}),a.actors.forEach(s=>{s.start.seatPropId&&n.has(s.start.seatPropId)&&delete s.start.seatPropId,s.poseKeys.forEach(i=>{i.seatPropId&&n.has(i.seatPropId)&&delete i.seatPropId}),s.facingKeys.forEach(i=>{i.targetId&&n.has(i.targetId)&&delete i.targetId}),s.carryKeys&&(s.carryKeys=s.carryKeys.filter(i=>!i.propId||!n.has(i.propId)))}),a.timeline.actions.forEach(s=>{s.targetPropId&&n.has(s.targetPropId)&&delete s.targetPropId,s.targetOpeningId&&n.has(s.targetOpeningId)&&delete s.targetOpeningId}),a.cameras.forEach(s=>{s.subject&&(s.subject.targetIds=s.subject.targetIds.filter(i=>!n.has(i)))}),a.timeline.coverages.forEach(s=>{s.subject.targetIds=s.subject.targetIds.filter(i=>!n.has(i)),s.anchor&&n.has(s.anchor.targetId)&&delete s.anchor})}),o}const lu=["outdoor","alley","road","rooftop","parking-lot","park","forest","neighborhood","river","bridge","palace-yard"];function vs(e,t){return t==="north"||t==="south"?e.widthM:e.depthM}const hi=1,bi=100;function Qk(e){return e.openings.map(t=>{const n=Math.max(0,vs(e,t.wall)-t.widthM);return{...t,offsetM:Math.min(n,Math.max(0,t.offsetM))}})}const cu=["stand","sit","kneel","crouch","lie"],du=["male","female","child","other"],e0=["walking","running","vehicle","flying","unspecified"],Pm=["north","east","south","west"],uu=["door","window","glass-door","sliding-door","double-door"];function gi(e){return e!=="window"}const Ys=[8,10,16,24,35,50,85,135,200,300],Cm=["static","dolly-in","pull-back","pan","tilt","truck","arc","crane","tracking","handheld","zoom","whip-pan","spiral-in","spiral-out"],t0=["left","right","up","down","in","out"],n0=["wide","full","medium","close-up","extreme-close-up","insert"],o0=["movement","performance"],XE=["explicit","inferred","user"],a0=["blocking","concurrent"],YE=["explicit","estimated"],qE=["action-start","action-end","dialogue-start","dialogue-end","contact"],s0=["absolute","follow-subject"],ZE=["authored","derived"];function je(e,t,n,o,a,s,i,r,l,c,d,u){return{key:e,kind:t,category:n,widthM:o,depthM:a,heightM:s,labels:{ko:i,en:r},aliases:l,color:c,...d?{seat:d}:{},...u?.passage?{passage:u.passage}:{},...u?.walkable?{walkable:u.walkable}:{}}}const aa=[je("desk","desk","office",1.2,.7,.75,"ì±
ì","desk",["ì±
ì","desk","ë°ì¤í¬","ê³µë ë°ì¤í¬","ë³´ì¡°ë"],"#c8a97e"),je("desk-executive","desk","office",1.6,.8,.75,"íì¥ì±
ì","executive desk",["íì¥ì±
ì"],"#b8935f"),je("chair","chair","office",.55,.55,.92,"ìì","chair",["ìì","chair","íì ìì"],"#8b6f4e",{heightM:.45,slotsAlongWidth:1}),je("sofa","sofa","living",2,.85,.78,"ìí","sofa",["ìí","sofa","ì¼í"],"#6f7d95",{heightM:.42,slotsAlongWidth:3}),je("sofa-corner-long","sofa","living",2.6,.9,.78,"Lì ìí(ê°ë¡)","corner sofa",["Lììí_ê°ë¡","Lí ìí"],"#6f7d95",{heightM:.42,slotsAlongWidth:4}),je("sofa-corner-short","sofa","living",.9,1.8,.78,"Lì ìí(ì¸ë¡)","corner sofa (short)",["Lììí_ì¸ë¡"],"#6f7d95",{heightM:.42,slotsAlongDepth:2}),je("table","table","kitchen",1.1,.6,.45,"í
ì´ë¸","table",["í
ì´ë¸","table","í° í
ì´ë¸"],"#a9835c"),je("table-glass","table","kitchen",1.1,.6,.45,"ì 리í
ì´ë¸","glass table",["ì 리í
ì´ë¸"],"#bcd4dc"),je("bookcase","bookcase","living",.9,.35,1.8,"ì±
2
ì¥","bookcase",["ì±
ì¥","bookcase","ìê°"],"#7a5c3e"),je("shelf-files","bookcase","office",1.8,.4,1.9,"ìë¥ì ë°","file shelf",["ìë¥ì ë°"],"#7a5c3e"),je("cabinet","cabinet","office",.9,.45,1.9,"ìºë¹ë","cabinet",["ìºë¹ë","ìºë¹ë·","ìë©ì¥","cabinet"],"#5f6b73"),je("locker","cabinet","office",.6,.5,1.9,"ë¡ì»¤","locker",["ë¡ì»¤","ì¬ë¬¼í¨","locker"],"#5f6b73"),je("cabinet-steel","cabinet","office",.75,.55,1.8,"ì² ì ìºë¹ë·","steel cabinet",["ì² ì ìºë¹ë·"],"#889096"),je("wardrobe","cabinet","living",1,.6,2,"ì·ì¥","wardrobe",["ì·ì¥"],"#7a5c3e"),je("coat-rack","coat-rack","living",.45,.45,1.7,"ì½í¸ë","coat rack",["ì½í¸ë","ì½í¸ì¤í ë"],"#5a4632"),je("plant","plant","living",.4,.4,.65,"íë¶","plant",["íë¶"],"#4d7a4d"),je("box","box","office",.45,.45,.55,"ë°ì¤","box",["ë°ì¤","ìì"],"#a9825a"),je("bed","bed","living",1,2,.55,"침ë","bed",["침ë","bed"],"#c8b6a0",{heightM:.5,slotsAlongWidth:1}),je("monitor","monitor","office",.55,.2,.45,"모ëí°","monitor",["모ëí°"],"#2b2b2b"),je("tv","tv","living",1,.25,1.15,"TV","TV",["TV","í°ë¹"],"#1f1f1f"),je("floor-lamp","lamp","living",.4,.4,1.55,"ì¤í ëì¡°ëª
","floor lamp",["ì¤í ëì¡°ëª
","íë¡ì´ë¨í"],"#d9c27a"),je("sink","sink","kitchen",1.8,.65,.88,"ì±í¬ë","sink",["ì±í¬ë"],"#9aa5ab"),je("fridge","fridge","kitchen",.75,.7,1.75,"ëì¥ê³ ","fridge",["ëì¥ê³ "],"#dcdfe1"),je("washer","washer","kitchen",.6,.65,.85,"ì¸í기","washer",["ì¸í기"],"#dcdfe1"),je("aircon","aircon","office",.9,.225,.32,"ìì´ì»¨","air conditioner",["ìì´ì»¨"],"#e8eef0"),je("corkboard","board","office",1.6,.05,1,"ì½ë¥´í¬ë³´ë","corkboard",["ì½ë¥´í¬ë³´ë","ê²ìí"],"#b8895a"),je("water-cooler","appliance","kitchen",.35,.35,1.1,"ì ì기","water cooler",["ì ì기"],"#bcd4dc"),je("printer","appliance","office",.55,.55,.6,"í린í°","printer",["í린í°","ë³µì¬ê¸°"],"#e5e5e5"),je("wall","wall","structure",6,.2,2.4,"ë²½","wall",["ë²½"],"#d6d1c6"),je("pillar","pillar","structure",.4,.4,2.7,"기ë¥","pillar",["기ë¥","ìí기ë¥"],"#c9c4b8"),je("stairs","stairs","structure",2.5,1.1,2.7,"ê³ë¨","stairs",["ê³ë¨"],"#b3ada0",void 0,{walkable:"stairs"}),je("platform","platform","structure",2,1.5,.4,"ë¨ì","platform",["ë¨ì"],"#b8a98f",void 0,{walkable:"platform"}),je("ramp","ramp","structure",1,2.4,.4,"ê²½ì¬ë¡","ramp",["ê²½ì¬ë¡"],"#b3ada0",void 0,{walkable:"ramp"}),je("railing","railing","structure",1.5,.05,1,"ëê°","railing",["ëê°"],"#9a9488"),je("archway","archway","structure",1.2,.3,2.4,"ìì¹ íµë¡","archway",["ìì¹"],"#c9c4b8",void 0,{passage:{widthM:.9,heightM:2.1}}),je("car","car","outdoor",4.5,1.8,1.45,"ìëì°¨","car",["ìëì°¨","car"],"#6b6f76"),je("van","van","outdoor",5,2.1,1.95,"ì¹í©ì°¨","van",["ì¹í©ì°¨","ë°´","van"],"#6b6f76"),je("streetlight","streetlight","outdoor",.325,.325,4.4,"ê°ë¡ë±","streetlight",["ê°ë¡ë±"],"#7a7a6e"),je("bench","bench","outdoor",1.4,.425,.45,"벤ì¹","bench",["벤ì¹"],"#8b6f4e",{heightM:.45,slotsAlongWidth:2}),je("tree","tree","outdoor",1.1,1.1,3.6,"ë무","tree",["ë무"],"#4d7a4d"),je("abandoned-house","building","outdoor",3.5,2.75,3.4,"íê°","abandoned house",["íê°"],"#7a746a"),je("generic","generic","structure",.8,.8,1,"ìí","prop",["ìí"],"#9a9a9a"),je("door","door","structure",.9,.2,2.05,"문","door",["문","door"],"#8b6f4e"),je("harness","small-prop","handheld",.75,.75,.5,"íë¤ì¤","harness",[],"#5a4632"),je("flashlight","small-prop","handheld",1.15,.3,.8,"ìì ë±","flashlight",[],"#3a3a3a"),je("battery-pack","small-prop","handheld",.25,.25,.3,"ë°°í°ë¦¬í©","battery pack",[],"#3a3a3a"),je("camera-case","small-prop","handheld",.7,.45,.5,"ì¹´ë©ë¼ì¼ì´ì¤","camera case",[],"#2b2b2b"),je("gear-case","small-prop","handheld",.7,.45,.5,"ì¥ë¹ì¼ì´ì¤","gear case",[],"#2b2b2b"),je("censer-case","small-prop","handheld",.6,.375,.35,"í¥ë¡ì¼ì´ì¤","censer case",[],"#4a3c2a"),je("smart-glasses","small-prop","handheld",.3,.15,.02,"ì¤ë§í¸ê¸ë¼ì¤","smart glasses",[],"#1f1f1f"),je("pistol","small-prop","handheld",.3,.075,.06,"ê¶ì´","pistol",[],"#2b2b2b"),je("shotgun","small-prop","handheld",1.6,.125,.11,"ì°íì´","shotgun",[],"#3a2f26"),je("rifle","small-prop","handheld",2.3,.15,.16,"ìì´","rifle",[],"#3a2f26"),je("smg","small-prop","handheld",1.35,.15,.14,"기ê´ë¨ì´","submachine gun",[],"#3a2f26"),je("vest","small-prop","handheld",.65,.5,.9,"ë°©íì¡°ë¼","vest",[],"#3a3a3a"),je("camcorder","small-prop","handheld",.45,.25,.12,"ìº ì½ë","camcorder",[],"#2b2b2b"),je("tripod","small-prop","handheld",.3,.3,1.4,"ì¼ê°ë","tripod",[],"#2b2b2b"),je("gilt-bronze-censer","small-prop","handheld",.6,.6,.55,"ê¸ëëí¥ë¡","gilt-bronze incense burner",[],"#b08d3a"),je("talisman","small-prop","handheld",.4,.55,.02,"ë
2¶ì ","talisman",[],"#d6c27a"),je("ritual-bell","small-prop","handheld",.3,.3,.2,"굿방ì¸","ritual bell",[],"#b08d3a"),je("headphones","small-prop","handheld",.35,.35,.22,"í¤ëí°","headphones",[],"#2b2b2b"),je("old-phone","small-prop","handheld",.4,.3,.2,"구ìì í기","old phone",[],"#2b2b2b"),je("family-photo","small-prop","handheld",.5,.35,.04,"ê°ì¡±ì¬ì§","family photo",[],"#d6c9a8"),je("report","small-prop","handheld",.6,.45,.03,"ë³´ê³ ì","report",[],"#e5e0d0"),je("rusty-door","door","structure",1.1,.2,2.4,"ë
¹ì¨ì² 문","rusty iron door",[],"#5a4a3a"),je("caution-tape","tape","outdoor",2.25,.15,.02,"ì¶ì
ê¸ì§í
ì´í","caution tape",[],"#e0c93a"),je("derelict-rail","rail","outdoor",8,.35,.12,"íì² ë¡","derelict rail track",[],"#4a423a"),je("utility-pole","pole","outdoor",.35,.35,6,"ì ì 주","utility pole",[],"#5a5248"),je("power-line","small-prop","handheld",7.5,.15,.02,"ì ì ","power line",[],"#3a3a3a"),je("wall-crack","small-prop","handheld",.1,2.25,1.8,"ë²½ê· ì´","wall crack",[],"#7a746a"),je("spotlight","small-prop","handheld",.25,.1,.35,"ëíìì ë±","spotlight",[],"#3a3a3a"),je("safety-goggles","small-prop","handheld",.175,.075,.05,"ìë ¥ë³´í¸ê³ ê¸","safety goggles",[],"#2b2b2b"),je("smartphone","small-prop","handheld",.075,.15,.008,"ì¤ë§í¸í°","smartphone",[],"#1f1f1f"),je("armchair","sofa","living",.85,.85,.9,"ìë½ìì","armchair",["ìë½ìì","armchair","1ì¸ ìí","ìì²´ì´"],"#8a6f5a",{heightM:.45,slotsAlongWidth:1}),je("coffee-table","table","living",1,.55,.42,"ì»¤í¼ í
ì´ë¸","coffee table",["ì»¤í¼ í
ì´ë¸","coffee table","ê±°ì¤ í
ì´ë¸","ì¢í"],"#a0825f"),je("rug","rug","living",2,1.4,.01,"ë¬ê·¸","rug",["ë¬ê·¸","rug","ì¹´í«","매í¸"],"#7a5c6e"),je("nightstand","cabinet","living",.45,.4,.55,"íí","nightstand",["íí","nightstand","침ë ì íì"],"#b08d67"),je("dresser","cabinet","living",1.2,.5,.8,"ìëì¥","dresser",["ìëì¥","dresser","ì²´ì¤í¸","chest of drawers"],"#a88660"),je("curtain","curtain","living",2,.1,2.4,"커í¼","curtain",["커í¼","curtain","ë¸ë¼ì¸ë"],"#c9b8a0"),je("mirror-stand","mirror","living",.5,.05,1.6,"ì ì ê±°ì¸","standing mirror",["ì ì ê±°ì¸","standing mirror","ê±°ì¸"],"#b7c4cc"),je("piano","piano","living",1.5,.6,1.2,"í¼ìë
¸","piano",["í¼ìë
¸","piano","ì
ë¼ì´í¸ í¼ìë
¸"],"#2f2a28"),je("kitchen-counter","counter","kitchen",2.4,.6,.9,"주방 조리ë","kitchen counter",["주방 조리ë","kitchen counter","조리ë","ìì¼ëë"],"#d8d2c8"),je("stove","appliance","kitchen",.6,.6,.9,"ê°ì¤ë ì¸ì§","stove",["ê°ì¤ë ì¸ì§","stove","ì¸ëì
","ë ì¸ì§"],"#9aa0a6"),je("dining-table","table","kitchen",1.6,.9,.75,"ìí","dining table",["ìí","dining table","ìë¹ í
ì´ë¸"],"#9c7a55"),je("stool","chair","kitchen",.4,.4,.65,"ì¤í´","stool",["ì¤í´","stool","ë° ìì","ë±ë°ì´ ìë ìì"],"#6f6a64",{heightM:.65,slotsAlongWidth:1}),je("microwave","appliance","kitchen",.5,.4,.3,"ì ìë ì¸ì§","microwave",["ì ìë ì¸ì§","microwave"],"#c0c4c8"),je("toilet","toilet","bath",.4,.7,.8,"ë³ê¸°","toilet",["ë³ê¸°","toilet","ìë³ê¸°"],"#f0f0f0",{heightM:.42,slotsAlongWidth:1}),je("bathtub","bathtub","bath",.8,1.7,.55,"ìì¡°","bathtub",["ìì¡°","bathtub","목ìíµ"],"#eef2f5"),je("shower-booth","shower","bath",.9,.9,2,"ì¤ì ë¶ì¤","shower booth",["ì¤ì ë¶ì¤","shower booth","ì¤ìì¤"],"#cfe3ea"),je("washbasin","sink","bath",.6,.45,.85,"ì¸ë©´ë","washbasin",["ì¸ë©´ë","washbasin","ì¸ë©´ê¸°"],"#e8e8e8"),je("whiteboard","board","office",1.8,.5,1.9,"íì´í¸ë³´ë","whiteboard",["íì´í¸ë³´ë","whiteboard","ì´ëì ì¹ í"],"#f4f4f4"),je("blackboard","board","office",3.6,.1,2.1,"ì¹ í","blackboard",["ì¹ í","blackboard","êµì¤ ì¹ í","íí"],"#2e4a3a"),je("lectern","counter","office",.6,.5,1.1,"êµí","lectern",["êµí","lectern","ê°ì°ë","ì°ë¨"],"#8c6d4f"),je("school-desk","desk","office",.65,.5,.72,"íì ì±
ì","school desk",["íì ì±
ì","school desk","íêµ ì±
ì"],"#b89a73"),je("laptop","device","office",.35,.25,.23,"ë
¸í¸ë¶","laptop",["ë
¸í¸ë¶","laptop","ë©í±"],"#5c6168"),je("partition","wall","office",1.6,.05,1.5,"칸ë§ì´","partition",["칸ë§ì´","partition","íí°ì
","ê°ë¦¼ë§"],"#9ea7ad"),je("
2checkout-counter","counter","shop",1.6,.6,.95,"ê³ì°ë","checkout counter",["ê³ì°ë","checkout counter","ì¹´ì´í°","í¬ì¤"],"#b5a58c"),je("display-shelf","bookcase","shop",1.2,.45,1.6,"ì§ì´ë","display shelf",["ì§ì´ë","display shelf","매ë","ì ë°"],"#c7c0b0"),je("vending-machine","appliance","shop",.9,.8,1.8,"ìí기","vending machine",["ìí기","vending machine","ìë£ ìí기"],"#c0392b"),je("showcase-fridge","fridge","shop",.9,.7,2,"ìë£ ì¼ì¼ì´ì¤","display fridge",["ìë£ ì¼ì¼ì´ì¤","display fridge","ëì¥ ì¼ì¼ì´ì¤"],"#dfe8ee"),je("cafe-counter","counter","shop",2.4,.7,1.05,"ì¹´í ì¹´ì´í°","cafe counter",["ì¹´í ì¹´ì´í°","cafe counter","ë° ì¹´ì´í°"],"#7b5a41"),je("hospital-bed","bed","medical",1,2.1,.9,"ë³ì 침ë","hospital bed",["ë³ì 침ë","hospital bed","íì 침ë"],"#e6ecef"),je("iv-stand","pole","medical",.5,.5,1.8,"ë§ê±° ì¤í ë","IV stand",["ë§ê±° ì¤í ë","IV stand","ìì¡ ê±¸ì´"],"#b0b8bf"),je("wheelchair","chair","medical",.65,1.05,.95,"í ì²´ì´","wheelchair",["í ì²´ì´","wheelchair"],"#3f4a54",{heightM:.5,slotsAlongWidth:1}),je("medical-cart","cart","medical",.6,.45,.95,"ìë£ ì¹´í¸","medical cart",["ìë£ ì¹´í¸","medical cart","ëë ì± ì¹´í¸"],"#d0d7dc"),je("traffic-cone","cone","outdoor",.35,.35,.7,"ë¬ë²ì½","traffic cone",["ë¬ë²ì½","traffic cone","êµíµì½","ë¼ë°ì½"],"#f07b1d"),je("trash-can","bin","outdoor",.5,.5,.9,"ì°ë 기íµ","trash can",["ì°ë 기íµ","trash can","í´ì§íµ"],"#5d6d5f"),je("bicycle","bicycle","outdoor",.6,1.75,1.05,"ìì ê±°","bicycle",["ìì ê±°","bicycle"],"#2d6cdf"),je("motorcycle","motorcycle","outdoor",.8,2.1,1.1,"ì¤í ë°ì´","motorcycle",["ì¤í ë°ì´","motorcycle","ì¤ì¿ í°","ë°ì´í¬"],"#3b3b3b"),je("fence","fence","outdoor",2,.05,1.2,"ì¸í리","fence",["ì¸í리","fence","íì¤","ë´ì¥"],"#8a8f7a"),je("bus-stop","shelter","outdoor",3,1.4,2.5,"ë²ì¤ ì ë¥ì¥","bus stop",["ë²ì¤ ì ë¥ì¥","bus stop","ì ë¥ì¥"],"#7f8c8d"),je("bush","plant","outdoor",1,1,.8,"ë¤ë¶","bush",["ë¤ë¶","bush","ê´ëª©","ìí"],"#4e7d3a"),je("bag","small-prop","handheld",.4,.15,.35,"ê°ë°©","bag",["ê°ë°©","bag","ë°±í©","ë°°ë"],"#6b4f3a"),je("suitcase","small-prop","handheld",.45,.25,.7,"ì¬í ê°ë°©","suitcase",["ì¬í ê°ë°©","suitcase","ìºë¦¬ì´"],"#34495e"),je("cup","small-prop","handheld",.08,.08,.1,"컵","cup",["컵","cup","머그컵","커í¼ì"],"#ecf0f1"),je("book","small-prop","handheld",.2,.15,.03,"ì±
","book",["ì±
","book","ìë¥ì² ","ë
¸í¸"],"#8e44ad"),je("umbrella","small-prop","handheld",.1,.1,.9,"ì°ì°","umbrella",["ì°ì°","umbrella","ìì°"],"#2c3e50")],Jo={door:{widthM:.9,heightM:2.05},"door-entrance":{widthM:1,heightM:2.1},"glass-door":{widthM:.9,heightM:2.05},window:{widthM:1.2,heightM:1.2,sillM:.9},"window-small":{widthM:.6,heightM:.6},"window-wide":{widthM:2.4,heightM:2},"sliding-door":{widthM:1.2,heightM:2.1},"double-door":{widthM:1.6,heightM:2.1}};function Ib(e,t){const n=Jo[e];return{widthM:n?.widthM??t.widthM,heightM:n?.heightM??t.heightM,sillM:t.sillM}}const yd={normal:{widthM:1.2,heightM:1.2,sillM:.9},wide:Ib("window-wide",{widthM:2.4,heightM:2,sillM:.1}),small:Ib("window-small",{widthM:.6,heightM:.6,sillM:1.2}
2),high:{widthM:1.2,heightM:.5,sillM:1.6}};function wb(e){return e.replace(/\s+/g,"").toLowerCase()}function Tt(e){const t=wb(e);for(const n of aa)if([n.key,n.labels.ko,n.labels.en,...n.aliases].some(a=>wb(a)===t))return n;return null}const Mb=["#8c6b4f","#c97b4a","#c9a24a","#8ba84a","#4aa876","#4aa2a8","#4a7fc9","#6b5fc9","#a54ac9","#c94a8f","#c95a5a","#767676"];function JE(e){let t=0;for(let n=0;n<e.length;n+=1)t=t*31+e.charCodeAt(n)>>>0;return t}function QE(e){return Mb[JE(e)%Mb.length]}function Sl(e){return Tt(e.catalogKey??e.kind)?.color??QE(e.kind)}const Bm=Math.PI/180;function Qt(e){return(e%360+360)%360}function Io(e,t){const n=Qt(t-e);return n>180?n-360:n}function In(e){const t=e*Bm;return{x:Math.cos(t),y:Math.sin(t)}}function ho(e){const t=e*Bm;return{x:-Math.sin(t),y:Math.cos(t)}}function ex(e,t){const n=t*Bm,o=Math.cos(n),a=Math.sin(n);return{x:e.x*o-e.y*a,y:e.x*a+e.y*o}}function Ot(e,t){return Math.hypot(t.x-e.x,t.y-e.y)}const pu=.12,Vs=2.4,tx=.3,i0=Jo.window.sillM;function Wl(e,t,n){const o=e.widthM/2,a=e.depthM/2;switch(t){case"north":return{x:-o+n,y:-a};case"south":return{x:-o+n,y:a};case"west":return{x:-o,y:-a+n};case"east":return{x:o,y:-a+n}}}function _m(e){return e==="north"||e==="south"?90:0}const r0=["north","east","south","west"];function qs(e){const t=[];for(const n of r0){if(!e.walls[n])continue;let a=[[0,vs(e,n)]];for(const s of e.openings)s.wall!==n||s.kind==="window"||(a=l0(a,s.offsetM,s.offsetM+s.widthM));a.forEach(([s,i],r)=>{i-s<=1e-9||t.push({id:`wall-${n}-${r}`,center:Wl(e,n,(s+i)/2),widthM:i-s,depthM:pu,headingDeg:_m(n),heightM:Vs})})}return t}const nx=/^wall-(north|east|south|west)-\d+$/;function fu(e){const t=nx.exec(e);return t?t[1]:null}function l0(e,t,n){const o=[];for(const[a,s]of e){if(n<=a||t>=s){o.push([a,s]);continue}t>a&&o.push([a,t]),n<s&&o.push([n,s])}return o}const c0={north:90,south:270,west:0,east:180};function vi(e,t,n){const o=c0[t.wall],a=Wl(e,t.wall,t.offsetM+t.widthM/2),s=In(o);return{position:{x:a.x+s.x*n,y:a.y+s.y*n},headingDeg:o}}const ox=1,pf=.1;function ff(e,t){return e.openings.some(n=>{if(!gi(n.kind))return!1;const o=Wl(e,n.wall,n.offsetM+n.widthM/2),a=In(c0[n.wall]),s=t.x-o.x,i=t.y-o.y,r=-(s*a.x+i*a.y),l=Math.abs(s*a.y-i*a.x);return r>0&&r<=ox+pf&&l<=n.widthM/2+pf})}function mu(e){return!e.walls.north&&!e.walls.east&&!e.walls.south&&!e.walls.west}const Ji=1;function ys(e,t){if(ff(e,t))return!0;if(!mu(e))return!1;const n=Math.max(Math.abs(t.x)-e.widthM/2,Math.abs(t.y)-e.depthM/2);return n>0&&n<=Ji+pf}function d0(e,t){const n=e.widthM/2,o=e.depthM/2,a=[{d:n-t.x,position:{x:n+Ji,y:t.y},headingDeg:0},{d:t.x+n,position:{x:-n-Ji,y:t.y},headingDeg:180}],s=[{d:o-t.y,position:{x:t.x,y:o+Ji},headingDeg:90},{d:t.y+o,position:{x:t.x,y:-o-Ji},headingDeg:270}],i=(e.widthM>=e.depthM*$b?a:e.depthM>=e.widthM*$b?s:[...a,...s]).sort((r,l)=>r.d-l.d);return{position:i[0].position,headingDeg:i[0].headingDeg}}const $b=2;function Xl(e,t){return{center:Wl(e,t.wall,t.offsetM+t.widthM/2),widthM:t.widthM,depthM:pu,headingDeg:_m(t.wall)}}function Am(e){if(e.kind==="window"){const t=Math.min(e.sillM??i0,Math.max(0,Vs-tx-e.heightM));return{bottomM:t,topM:Math.min(Vs,t+e.heightM)}}return{bottomM:0,topM:Math.min(Vs,e.heightM)}}function op(e,t,n,o,a,s,i){return{id:n,wall:t,center:Wl(e,t,(o+a)/2),widthM:a-o,depthM:pu,headingDeg:_m(t),bottomM:s,topM:i}}function ax(e){const t=[];for(const n of r0){if(!e.walls[n])continue;const o=vs(e,n),a=e.openings.filter(i=>i.wall===n);let s=[[0,o]];for(const i of a)s=l0(s,i.offsetM,i.offsetM+i.widthM);s.forEach(([i,r],l)=>{r-i<=1e-9||t.push(op(e,n,`wall-${n}-${l}`,i,r,0,Vs))});for(const i of a){const r=Am(i),l=i.offsetM,c=i.offsetM+i.widthM;r.bottomM>1e-6&&t.push(op(e,n,`wall-${n}-below-${i.id}`,l,c,0,r.bottomM)),r.topM<Vs-1e-6&&t.push(op(e,n,`wall-${n}-above-${i.id}`,l,c,r.topM,Vs))}}return t}const Eb=.1,sx=1e-6;function u0(e){return lu.includes(e.kind)?!0:!e.walls.north&&!e.walls.east&&!e.walls.south&&!e.walls.west}function Gr(e,t,n,o,a){const s=t.widthM/2+Eb,i=t.depthM/2+Eb;(Math.abs(n.x)>s||Math.abs(n.y)>i)&&e.push(Le("OUT_OF_ROOM",{path:o,targetId:a,params:{x:n.x,y:n.y}}))}function ix(e){const t=[],n=e.room;
2return n.openings.forEach((o,a)=>{const s=vs(n,o.wall);o.offsetM+o.widthM>s+sx&&t.push(Le("OPENING_OUT_OF_WALL",{path:`room.openings[${a}]`,targetId:o.id,params:{offsetM:o.offsetM,widthM:o.widthM,wallLengthM:s}}))}),u0(n)||e.parts.forEach((o,a)=>{const s=`parts[${a}]`;o.actors.forEach((i,r)=>{const l=`${s}.actors[${r}]`;ff(n,i.start.position)||Gr(t,n,i.start.position,`${l}.start.position`,i.id),i.path.waypoints.forEach((c,d)=>{ff(n,c)||Gr(t,n,c,`${l}.path.waypoints[${d}]`,i.id)}),i.positionKeys.forEach((c,d)=>Gr(t,n,c,`${l}.positionKeys[${d}]`,i.id))}),o.cameras.forEach((i,r)=>{const l=`${s}.cameras[${r}]`;Gr(t,n,i.position,`${l}.position`,i.id),i.keys.forEach((c,d)=>Gr(t,n,c,`${l}.keys[${d}]`,i.id))})}),t}function Oo(e,t,n,o,a){t!==void 0&&(t<-xn||t>n+xn)&&e.push(Le("INVALID_RANGE",{path:o,targetId:a,params:{value:t,durationSec:n}}))}function rx(e,t){const n=[],o=e.durationSec;e.actors.forEach((s,i)=>{const r=s.path.waypoints.reduce((c,d)=>c+d.pauseSec,0);r>o+xn&&n.push(Le("PAUSE_EXCEEDS_PART",{path:Bn(t,`actors[${i}].path.waypoints`),targetId:s.id,params:{totalPauseSec:r,durationSec:o}}));const l=Bn(t,`actors[${i}]`);s.path.waypoints.forEach((c,d)=>Oo(n,c.atSec,o,`${l}.path.waypoints[${d}].atSec`,s.id)),s.positionKeys.forEach((c,d)=>Oo(n,c.atSec,o,`${l}.positionKeys[${d}].atSec`,s.id)),s.facingKeys.forEach((c,d)=>Oo(n,c.atSec,o,`${l}.facingKeys[${d}].atSec`,s.id)),s.poseKeys.forEach((c,d)=>Oo(n,c.atSec,o,`${l}.poseKeys[${d}].atSec`,s.id))});const a=e.timeline;return a.actions.forEach((s,i)=>{const r=Bn(t,`timeline.actions[${i}]`);Oo(n,s.startSec,o,`${r}.startSec`,s.id),Oo(n,s.endSec,o,`${r}.endSec`,s.id)}
2),a.dialogues.forEach((s,i)=>{const r=Bn(t,`timeline.dialogues[${i}]`);Oo(n,s.startSec,o,`${r}.startSec`,s.id),Oo(n,s.endSec,o,`${r}.endSec`,s.id)}),a.propEvents.forEach((s,i)=>{const r=Bn(t,`timeline.propEvents[${i}]`);Oo(n,s.startSec,o,`${r}.startSec`,s.id),Oo(n,s.endSec,o,`${r}.endSec`,s.id)}),a.coverages.forEach((s,i)=>{const r=Bn(t,`timeline.coverages[${i}]`);Oo(n,s.startSec,o,`${r}.startSec`,s.id),Oo(n,s.endSec,o,`${r}.endSec`,s.id)}),a.cuts.forEach((s,i)=>{const r=Bn(t,`timeline.cuts[${i}]`);Oo(n,s.inSec,o,`${r}.inSec`,s.id),Oo(n,s.outSec,o,`${r}.outSec`,s.id)}),n}const Tm=["idle","talk","nod","bow","wave","point","pick-up","open-door"],Rs=["humanoid"],Ds=e=>e/30,La={idle:{id:"idle",labelKey:"tool.blockingBoard.motionClip.idle",loop:!0,durationSec:Ds(251),figureKinds:Rs,defaultForActionTypes:[]},talk:{id:"talk",labelKey:"tool.blockingBoard.motionClip.talk",loop:!0,durationSec:Ds(114),figureKinds:Rs,defaultForActionTypes:[]},nod:{id:"nod",labelKey:"tool.blockingBoard.motionClip.nod",loop:!1,durationSec:Ds(79),figureKinds:Rs,defaultForActionTypes:["nod"]},bow:{id:"bow",labelKey:"tool.blockingBoard.motionClip.bow",loop:!1,durationSec:Ds(83),figureKinds:Rs,defaultForActionTypes:["bow"]},wave:{id:"wave",labelKey:"tool.blockingBoard.motionClip.wave",loop:!0,durationSec:Ds(40),figureKinds:Rs,defaultForActionTypes:["wave"]},point:{id:"point",labelKey:"tool.blockingBoard.motionClip.point",loop:!1,durationSec:Ds(84),figureKinds:Rs,defaultForActionTypes:[]},"pick-up":{id:"pick-up",labelKey:"tool.blockingBoard.motionClip.pickUp",loop:!1,durationSec:Ds(206),figureKinds:Rs,defaultForActionTypes:["pick-up"]},"open-door":{id:"open-door",labelKey:"tool.blockingBoard.motionClip.openDoor",loop:!1,durationSec:Ds(330),figureKinds:Rs,defaultForActionTypes:["open-door"]}},p0="none";function hu(e){return typeof e=="string"&&Tm.includes(e)}function bu(e){return e===p0||hu(e)}function lx(e){return hu(e)?La[e]:null}function f0(e){return Tm.find(t=>La[t].defaultForActionTypes.includes(e))??null}function Rm(e){return e.motionId===void 0?f0(e.actionType):hu(e.motionId)?e.motionId:null}const Ao={human:{heightM:1.7,radiusM:.3,labels:{ko:"ì¬ë",en:"human"}},dog:{heightM:.58,radiusM:.33,labels:{ko:"ê°",en:"dog"}},cat:{heightM:.3,radiusM:.22,labels:{ko:"ê³ ìì´",en:"cat"}},bird:{heightM:.22,radiusM:.15,labels:{ko:"ì",en:"bird"}},horse:{heightM:1.55,radiusM:.65,labels:{ko:"ë§",en:"horse"}},"creature-humanoid":{heightM:2.6,radiusM:.65,labels:{ko:"ì¸ê°í í¬ë¦¬ì²",en:"humanoid creature"}},"creature-quadruped":{heightM:1.35,radiusM:.55,labels:{ko:"ì¬ì¡± í¬ë¦¬ì²",en:"quadruped creature"}},"creature-winged":{heightM:1.9,radiusM:.6,labels:{ko:"ë ê° í¬ë¦¬ì²",en:"winged creature"}},crow:{heightM:.34,radiusM:.25,labels:{ko:"ê¹ë§ê·",en:"crow"}},lizard:{heightM:.3,radiusM:.22,labels:{ko:"ëë§ë±",en:"lizard"}},"three-headed-hawk":{heightM:1.85,radiusM:.55,labels:{ko:"ì¼ë매",en:"three-headed hawk"}},wraith:{heightM:1.72,radiusM:.4,labels:{ko:"ìí¼",en:"wraith"}},"shadow-figure":{heightM:2.1,radiusM:.65,labels:{ko:"ê²ìíì²´",en:"shadow figure"}}},m0=Object.keys(Ao).filter(e=>e!=="human"),cx="creature-quadruped",Il=40;function Dm(e){return Object.hasOwn(Ao,e)}const dx={male:1.75,female:1.62,child:1.2,other:1.6},ux={stand:.93,sit:.68,kneel:.53,crouch:.41,lie:.18};function h0(e){return e.species&&Ao[e.species]||Ao.human}function wo(e){return(!e.species||e.species==="human"||!Ao[e.species])&&e.bodyType?dx[e.bodyType]:h0(e).heightM}function Vt(e){return h0(e).radiusM}function Fa(e,t){return e*ux[t??"stand"]}const px={dog:"quadruped",cat:"quadruped",horse:"quadruped","creature-quadruped":"quadruped",lizard:"quadruped",bird:"bird",crow:"bird","creature-winged":"bird","three-headed-hawk":"bird"};function ks(e){return e&&px[e]||"humanoid"}function fx(e,t){const n=[];return e.timeline.actions.forEach((o,a)=>{const s=o.motionId;if(s===void 0)return;const i=Bn(t,`timeline.actions[${a}].motionId`);if(!bu(s)){n.push(Le("MOTION_UNKNOWN",{path:i,targetId:o.id,params:{motionId:s}}));return}if(!hu(s))return;const r=e.actors.find(l=>l.id===o.actorId);r&&(La[s].figureKinds.includes(ks(r.species))||n.push(Le("MOTION_SPECIES_UNSUPPORTED",{path:i,targetId:o.id,params:{motionId:s,species:r.species}})))}),n}const gu=200,b0=4,wl=16,Ha="blocking-board/5",g0=["blocking-board/1","blocking-board/2","blocking-board/3","blocking-board/4"],kd=J$.SEEDANCE_2_5_BYTP,dr=500;
2function Sr(){return{sceneBackground:null,styleDirection:{ko:""},targetVideoModel:kd}}const mx=["linear","smooth"],hx=["dawn","day","dusk","night"];function Om(){return Object.values(Q$).filter(e=>e.tool==="video"&&e.mentionMode==="native").map(e=>e.modlCode)}function v0(e){return typeof e=="string"&&Om().includes(e)}function bx(e){const t=eE(e);if(!t)return null;const n=Gk(e)?.video;return{image:t.references.image,video:t.references.video,total:t.references.total,promptMax:t.prompt.max,videoSec:n?.eachMaxSec!==void 0?{eachMin:n.eachMinSec??0,eachMax:n.eachMaxSec,totalMax:n.totalMaxSec??n.eachMaxSec}:null}}function za(e){const t=Gk(e)?.video,o=[tE(e),t?.eachMaxSec].filter(s=>typeof s=="number");if(o.length===0)return null;const a=[oE(e)?nE:null,t?.eachMinSec].filter(s=>typeof s=="number");return{minSec:a.length?Math.max(...a):0,maxSec:Math.min(...o)}}const gx={INVALID_INPUT:"invalidInput",MODEL_UNAVAILABLE:"modelUnavailable",PROVIDER_FAILED:"providerFailed",PROVIDER_TIMEOUT:"providerTimeout",RESPONSE_TRUNCATED:"responseTruncated",PROSE_INVALID:"proseInvalid"};function xb(e){return`tool.blockingBoard.handoff.prose.failure.${gx[e]}`}const Yl=40,y0=/^[A-Za-z0-9][A-Za-z0-9 .'-]*$/,ur=500,Nm=500,mt=e=>({t:"string",max:e}),mf=(e,t,n)=>({t:"string",min:e,max:t,prefix:n}),$t=(e={})=>({t:"number",...e}),ja=()=>$t({min:-100,max:100}),ds=()=>({t:"boolean"}),Fn=e=>({t:"enum",values:e}),Sa=()=>({t:"id"}),Nt=e=>({t:"object",fields:e}),En=(e,t)=>({t:"array",item:e,max:t}),vx=(e,t)=>({t:"array",item:e,exact:t}),Qi=e=>({t:"record",value:e}),Ht=e=>({t:"optional",inner:e}),So=e=>({t:"nullable",inner:e});function Lm(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function k0(e,t,n,o){if(!Lm(t))return o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:"must be an object"}})),t;const a={};for(const[s,i]of Object.entries(e)){const r=n?`${n}.${s}`:s,l=i.t==="optional";if(!(s in t)){l||o.issues.push(Le("SCHEMA_INVALID",{path:r,params:{detail:"missing"}}));continue}const c=l?i.inner:i;a[s]=il(c,t[s],r,o)}for(const s of Object.keys(t))if(!(s in e)){const i=n?`${n}.${s}`:s;o.issues.push(Le("UNKNOWN_FIELD_REMOVED",{path:i}))}return a}function il(e,t,n,o){switch(e.t){case"optional":return il(e.inner,t,n,o);case"nullable":return t===null?null:il(e.inner,t,n,o);case"string":{if(typeof t!="string")return o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:"must be a string"}})),t;const a=e.max??Mt.stringMaxLength;return t.length>a&&o.issues.push(Le("LIMIT_EXCEEDED",{path:n,params:{max:a}})),e.min!==void 0&&t.length<e.min&&o.issues.push(Le("LIMIT_EXCEEDED",{path:n,params:{min:e.min}})),e.prefix!==void 0&&!t.startsWith(e.prefix)&&o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:`must start with ${e.prefix}`}})),t}case"number":return typeof t!="number"||!Number.isFinite(t)?(o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:"must be a finite number"}})),t):(e.int&&!Number.isInteger(t)&&o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:"must be an integer"}})),e.min!==void 0&&(e.exclusiveMin?t<=e.min:t<e.min)&&o.issues.push(Le("LIMIT_EXCEEDED",{path:n,params:{min:e.min}})),e.max!==void 0&&(e.exclusiveMax?t>=e.max:t>e.max)&&o.issues.push(Le("LIMIT_EXCEEDED",{path:n,params:{max:e.max}})),t);case"boolean":return typeof t!="boolean"&&o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:"must be a boolean"}})),t;case"enum":return e.values.includes(t)||o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:`must be one of: ${e.values.join(", ")}`}})),t;case"id":return qk(t)?o.ids.has(t)?(o.issues.push(Le("DUPLICATE_ID",{path:n,targetId:t})),t):(o.ids.add(t),t):(o.issues.push(Le("INVALID_ID",{path:n,params:{value:String(t)}})),t);case"object":return k0(e.fields,t,n,o);case"array":return Array.isArray(t)?(e.exact!==void 0&&t.length!==e.exact?o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:`must have length ${e.exact}`}})):e.max!==void 0&&t.length>e.max&&o.issues.push(Le("LIMIT_EXCEEDED",{path:n,params:{max:e.max,length:t.length}})),t.map((a,s)=>il(e.item,a,`${n}[${s}]`,o))):(o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:"must be an array"}})),t);
2case"record":{if(!Lm(t))return o.issues.push(Le("SCHEMA_INVALID",{path:n,params:{detail:"must be an object"}})),t;const a={};for(const[s,i]of Object.entries(t))a[s]=il(e.value,i,`${n}.${s}`,o);return a}}}const Km=Nt({ko:Ht(mt()),en:Ht(mt())}),Fm=Nt({x:ja(),y:ja()}),yx=Nt({id:Sa(),kind:Fn(uu),wall:Fn(Pm),offsetM:$t({min:0}),widthM:$t({min:0,exclusiveMin:!0}),heightM:$t({min:0,exclusiveMin:!0}),sillM:Ht($t({min:0})),sourceId:Ht(mt())}),S0=Nt({id:Sa(),kind:mt(),name:mt(),center:Fm,widthM:$t({min:0,exclusiveMin:!0}),depthM:$t({min:0,exclusiveMin:!0}),headingDeg:$t(),heightM:Ht($t({min:0,exclusiveMin:!0})),catalogKey:Ht(mt()),supportPropId:Ht(mt()),elevationM:Ht($t({min:0,max:10})),sourceId:Ht(mt()),refId:Ht(mt())}),kx=Nt({north:ds(),east:ds(),south:ds(),west:ds()}),Sx=Nt({kind:mt(),widthM:$t({min:0,exclusiveMin:!0}),depthM:$t({min:0,exclusiveMin:!0}),walls:kx,openings:En(yx),props:En(S0)}),I0={mdiaId:mf(1,128),url:mf(1,Mt.stringMaxLength,"https://"),wdth:So($t({min:0,exclusiveMin:!0,int:!0})),hegt:So($t({min:0,exclusiveMin:!0,int:!0}))},w0=Nt(I0),Ix=Nt({...I0,duraSec:$t({min:0,exclusiveMin:!0}),grayscale:ds(),boardKey:mf(1,128)}),ap=Nt({id:Sa(),tag:mt(),name:mt(),aliases:En(mt(),Mt.aliasesPerEntry),media:Ht(So(w0)),description:Ht(mt(ur)),handoffName:Ht(mt(Yl)),standalone:Ht(ds()),species:Ht(mt()),speciesName:Ht(mt(Il)),speciesNameEn:Ht(mt(Il))}),wx=Nt({characters:En(ap,Mt.refsPerKind),backgrounds:En(ap,Mt.refsPerKind),props:En(ap,Mt.refsPerKind)}),Mx=Nt({x:ja(),y:ja(),atSec:Ht($t()),pauseSec:$t({min:0})}),$x=Nt({atSec:$t(),x:ja(),y:ja()}),Ex=Nt({atSec:$t(),headingDeg:$t(),targetId:Ht(mt()),travel:Ht(ds())}),xx=Nt({atSec:$t(),pose:Fn(cu),seatPropId:Ht(mt())}),Px=Nt({position:Fm,headingDeg:$t(),pose:Fn(cu),seatPropId:Ht(mt())}),Cx=Nt({id:Sa(),refId:Ht(mt()),name:mt(),aliases:En(mt(),Mt.aliasesPerEntry),color:mt(),species:mt(),bodyType:Fn(du),movementMode:Fn(e0),start:Px,path:Nt({waypoints:En(Mx,Mt.waypointsPerActor)}),positionKeys:En($x,Mt.keysPerTrack),facingKeys:En(Ex,Mt.keysPerTrack),poseKeys:En(xx,Mt.keysPerTrack),carryKeys:Ht(En(Nt({atSec:$t({min:0}),propId:So(mt())}),Mt.keysPerTrack)),sourceId:Ht(mt())}),M0=Nt({targetIds:En(mt()),nodePath:Ht(mt())}),Bx=Nt({type:Fn(Cm),amount:Ht($t()),direction:Ht(Fn(t0))}),_x=Nt({atSec:$t(),x:ja(),y:ja(),heightM:$t({min:0,exclusiveMin:!0}),headingDeg:$t(),pitchDeg:$t({min:-90,max:90}),rollDeg:$t({min:-180,max:180}),lensMm:Fn(Ys)}),Ax=Nt({id:Sa(),name:mt(),position:Fm,heightM:$t({min:0,exclusiveMin:!0}),headingDeg:$t(),pitchDeg:$t({min:-90,max:90}),rollDeg:$t({min:-180,max:180}),lensMm:Fn(Ys),fovOverrideDeg:Ht($t({min:Mt.fovOverrideMinDeg,max:Mt.fovOverrideMaxDeg})),move:Bx,keys:En(_x,Mt.keysPerTrack),subject:So(M0),sourceId:Ht(mt())}),$0=Nt({type:mt(),confidence:$t({min:0,max:1}),source:Fn(ZE),text:Ht(Km)}),Tx=Nt({id:Sa(),actorId:So(mt()),startSec:$t(),endSec:$t(),actionType:mt(),actionClass:Fn(o0),text:Km,source:Fn(XE),motionId:Ht(mt()),targetPropId:Ht(mt()),targetOpeningId:Ht(mt())}),Rx=Nt({id:Sa(),actorId:mt(),startSec:$t(),endSec:$t(),line:mt(),lang:mt(),mode:Fn(a0),timeSource:Fn(YE)}),Dx=Nt({id:Sa(),targetId:mt(),startSec:$t(),endSec:$t(),state:Nt({open:ds(),openAngleDeg:Ht($t())})}),Ox=Nt({targetId:mt(),eventType:Fn(qE),offsetSec:$t()}),Nx=Nt({id:Sa(),cameraId:mt(),startSec:$t(),endSec:$t(),shotType:Fn(n0),subject:M0,anchor:Ht(Ox),timingMode:Fn(s0),shotIntent:Ht($0)}),Lx=Nt({id:Sa(),inSec:$t(),outSec:$t(),coverageId:mt(),cameraId:mt(),shotIntent:Ht($0),direction:Ht(mt(Nm))}),Kx=Nt({actions:En(Tx,Mt.actionsPerPart),dialogues:En(Rx,Mt.dialoguesPerPart),propEvents:En(Dx,Mt.propEventsPerPart),coverages:En(Nx,Mt.coveragesPerPart),cuts:En(Lx,Mt.cutsPerPart)}),Fx=Nt({blocks:Qi(mt()),cutTexts:Qi(Km)}),Hx=Nt({id:mt(),kind:Fn(["actor","prop","camera","path"]),source:Fn(["explicit","inferred"]),codes:En(Fn(Object.keys(Em))),note:Ht(mt())}),zx=Nt({entries:En(Hx)}),ns=Nt({en:mt(),ko:mt()}),jx=Nt({key:mt(),prose:Nt({names:Qi(mt()),sceneContext:So(ns),location:So(ns),environment:So(ns),style:So(ns),references:Qi(ns),propLock:Qi(ns),performance:Qi(ns),beats:En(Nt({cutId:mt(),text:ns,sfx:So(ns)}))}),fieldIssues:En(mt()),createdAt:$t({min:0})}),Ux=Nt({partId:Sa(),title:mt(),durationSec:$t({min:0,exclusiveMin:!0,max:Mt.partDurationMaxSec}),castRefIds:En(mt()),actors:En(Cx,Mt.actorsPerPart),props:En(S0),cameras:En(Ax,Mt.camerasPerPart),timeline:Kx,prompt:Fx,placementReport:Ht(zx),handoffRecording:Ht(So(Ix)),handoffProse:Ht(So(jx))}
2),Gx=Nt({sceneId:mt(),title:mt()}),Vx=Nt({fps:$t({min:Mt.fpsMin,max:Mt.fpsMax}),lightTime:Fn(hx),lightDirectionDeg:$t(),easing:Fn(mx)}),Wx=Nt({format:mt(),storageKey:mt(),sha256:mt()}),Xx=Nt({photo:Nt({x:$t({min:0,max:8e3}),y:$t({min:0,max:8e3})}),board:Nt({x:ja(),y:ja()})}),Yx=Nt({fileName:mt(gu),widthPx:$t({min:1,max:8e3}),heightPx:$t({min:1,max:8e3}),homography:So(vx($t(),9)),anchors:En(Xx,wl),opacity:$t({min:.2,max:1}),visible:ds()}),qx={schemaVersion:mt(),projectId:mt(Mt.idMaxLength),name:mt(),scene:Gx,room:Sx,refs:wx,parts:En(Ux,Mt.parts),activePartId:mt(Mt.idMaxLength),settings:Vx,source:So(Wx),background:Ht(Yx),sceneBackground:So(w0),styleDirection:Nt({ko:mt(dr)}),targetVideoModel:mt()};function hf(e){const t={issues:[],ids:new Set};if(!Lm(e))return t.issues.push(Le("SCHEMA_INVALID",{path:"",params:{detail:"must be an object"}})),{snapshot:null,issues:t.issues};e.schemaVersion!==Ha&&t.issues.push(Le("UNSUPPORTED_SCHEMA_VERSION",{path:"schemaVersion",params:{value:String(e.schemaVersion)}}));let n=e;typeof e.targetVideoModel=="string"&&!v0(e.targetVideoModel)&&(t.issues.push(Le("TARGET_MODEL_UNKNOWN",{path:"targetVideoModel",params:{value:e.targetVideoModel,fallback:kd}})),n={...e,targetVideoModel:kd});const o=k0(qx,n,"",t);return{snapshot:kl(t.issues)?null:o,issues:t.issues}}function E0(e){const t=hf(e);if(!t.snapshot)return t;const n=t.snapshot,o=[...t.issues,...ix(n),...Jk(n)];let a=n.room.props.length;return n.parts.forEach((s,i)=>{const r=`parts[${i}].timeline`;o.push(...Vl({cuts:s.timeline.cuts,durationSec:s.durationSec,fps:n.settings.fps,pathPrefix:r})),o.push(...KE({coverages:s.timeline.coverages,durationSec:s.durationSec,pathPrefix:r})),o.push(...LE({cuts:s.timeline.cuts,coverages:s.timeline.coverages,pathPrefix:r}).filter(l=>l.code==="CUT_OUTSIDE_COVERAGE")),a+=s.props.length}),a>Mt.propsTotal&&o.push(Le("LIMIT_EXCEEDED",{path:"room.props",params:{propsTotal:a}})),{snapshot:n,issues:o}}const ql=30;function Zl(e,t=ql){if(!(e>0)||!(t>0))return[0];const n=1/t,o=[],a=Math.floor(e/n+1e-9);for(let s=0;s<=a;s+=1)o.push(Math.min(s*n,e));return e-o[o.length-1]>1e-9&&o.push(e),o}function Sd(e,t){const n=[];let o=null;for(const a of e){if(a.hit===null){o=null;continue}const s=t(a.hit);o&&o.key===s?o.endSec=a.t:(o={key:s,startSec:a.t,endSec:a.t,first:a.hit},n.push(o))}return n}function Ss(e,t){const n=t.x-e.center.x,o=t.y-e.center.y,a=In(e.headingDeg),s=ho(e.headingDeg);return{x:n*a.x+o*a.y,y:n*s.x+o*s.y}}function Bi(e,t){const n=In(e.headingDeg),o=ho(e.headingDeg);return{x:e.center.x+t.x*n.x+t.y*o.x,y:e.center.y+t.x*n.y+t.y*o.y}}function pr(e){return{minX:e.center.x-e.depthM/2,maxX:e.center.x+e.depthM/2,minY:e.center.y-e.widthM/2,maxY:e.center.y+e.widthM/2}}const Zx={desk:"table","desk-executive":"table",table:"table","table-glass":"table",bench:"table","coffee-table":"table","dining-table":"table","school-desk":"table",chair:"chair",sofa:"sofa","sofa-corner-long":"sofa","sofa-corner-short":"sofa",armchair:"sofa",bed:"bed",bookcase:"cabinet","shelf-files":"
2cabinet",cabinet:"cabinet",locker:"cabinet","cabinet-steel":"cabinet",wardrobe:"cabinet",fridge:"cabinet",washer:"cabinet",sink:"cabinet",printer:"cabinet","water-cooler":"cabinet",aircon:"cabinet",nightstand:"cabinet",dresser:"cabinet","vending-machine":"cabinet","showcase-fridge":"cabinet",plant:"plant",bush:"plant",tree:"tree",pillar:"pillar",stairs:"stairs",platform:"platform",ramp:"ramp",archway:"archway","floor-lamp":"pole",streetlight:"pole","coat-rack":"pole",tripod:"pole","utility-pole":"pole","iv-stand":"pole",spotlight:"pole",car:"vehicle",van:"vehicle",monitor:"screen",tv:"screen",rug:"rug","wall-crack":"rug",curtain:"curtain","mirror-stand":"panel",partition:"panel",whiteboard:"board",blackboard:"board",corkboard:"board",piano:"piano","kitchen-counter":"counter",stove:"counter",washbasin:"counter",lectern:"counter","checkout-counter":"counter","cafe-counter":"counter",stool:"stool",toilet:"toilet",bathtub:"bathtub","shower-booth":"booth","display-shelf":"open-shelf","medical-cart":"open-shelf","hospital-bed":"hospital-bed",wheelchair:"wheelchair","traffic-cone":"cone","trash-can":"bin",bicycle:"bicycle",motorcycle:"motorbike",fence:"fence",railing:"fence","caution-tape":"fence","derelict-rail":"fence","bus-stop":"shelter",bag:"bag",harness:"bag",vest:"bag",suitcase:"case",microwave:"case","battery-pack":"case","camera-case":"case","gear-case":"case","censer-case":"case",camcorder:"case",headphones:"case",cup:"cup","gilt-bronze-censer":"cup","ritual-bell":"cup",book:"book",talisman:"book","family-photo":"book",report:"book",umbrella:"umbrella",shotgun:"long-gun",rifle:"long-gun",smg:"long-gun",pistol:"handgun",laptop:"flat-device",smartphone:"flat-device","old-phone":"flat-device","smart-glasses":"flat-device","safety-goggles":"flat-device",flashlight:"tube","power-line":"tube",door:"door-leaf","rusty-door":"door-leaf","abandoned-house":"building"};function Ua(e){const t=Tt(e.catalogKey??e.kind)?.key;return(t&&Zx[t])??"box"}const Jx=.18,Qx=4,eP=8,Pb=1e-9;function x0(e){return Math.min(eP,Math.max(Qx,Math.round(e/Jx)))}function tP(e,t){const n=Ss(e,t);return Math.abs(n.x)>e.depthM/2+Pb||Math.abs(n.y)>e.widthM/2+Pb||e.depthM<=0?null:Math.min(1,Math.max(0,(n.x+e.depthM/2)/e.depthM))}const Cb=new Map;function P0(e){const t=e.catalogKey??e.kind;let n=Cb.get(t);return n===void 0&&(n=Tt(t)?.walkable??null,Cb.set(t,n)),n}function Ir(e,t,n){let o=0;for(const a of[...e.props,...t.props]){const s=P0(a);if(!s)continue;const i=tP(a,n);if(i===null)continue;const r=Ko(a);let l;if(s==="platform")l=r;else if(s==="ramp")l=r*i;else{const c=x0(r);l=r*Math.min(c,Math.floor(i*c)+1)/c}l>o&&(o=l)}return o}const fr=new Set(["table","counter","cabinet","open-shelf","bed"]),nP=new Set(["screen","flat-device","book","cup","bag","case","box","plant","tube","handgun","long-gun","umbrella","bin"]),oP=1,Ml=1e-6;function Es(e,t){const n=[],o=new Set([e.id]);let a=e;for(;a.supportPropId;){const s=t.get(a.supportPropId);if(!s||o.has(s.id))break;n.push(s),o.add(s.id),a=s}return n}function ra(e,t,n){const o=Es(e,t),a=o.reduce((i,r)=>i+Ko(r)+(r.elevationM??0),0)+(e.elevationM??0);if(!n)return a;const s=o[o.length-1]??e;return P0(s)?a:a+n(s.center)}function Bb(e){return{center:e.center,widthM:e.widthM,depthM:e.depthM,headingDeg:e.headingDeg??0}}function C0(e,t){const n=Bb(e),o=Bb(t);for(const a of[-1,1])for(const s of[-1,1]){const i=Bi(n,{x:a*e.depthM/2,y:s*e.widthM/2}),r=Ss(o,i);if(Math.abs(r.x)>t.depthM/2+Ml||Math.abs(r.y)>t.widthM/2+Ml)return!1}return!0}function Hm(e){if(Ko(e)>=oP)return!1;const t=Ua(e);return nP.has(t)||fr.has(t)&&t!=="bed"}function aP(e,t,n){if(!Hm(e))return[];const o=fr.has(Ua(e)),a=e.widthM*e.depthM;return t.filter(s=>s.id===e.id||!fr.has(Ua(s))||Es(s,n).some(i=>i.id===e.id)||o&&a>=s.widthM*s.depthM-Ml?!1:C0({...e,center:s.center},s))}function Id(e,t,n){if(!Hm(e))return null;const o=fr.has(Ua(e)),a=e.widthM*e.depthM;let s=null;for(const i of t){if(i.id===e.id||!fr.has(Ua(i))||Es(i,n).some(l=>l.id===e.id)||o&&a>=i.widthM*i.depthM-Ml||!C0(e,i))continue;const r=ra(i,n)+Ko(i);(!s||r>s.top+Ml)&&(s={prop:i,top:r})}return s?.prop??null}function sP(e,t){return e.map((n,o)=>({p:n,i:o,depth:Es(n,t).length})).sort((n,o)=>n.depth-o.depth||n.i-o.i).map(n=>n.p)}const B0=.3,_0=.75,iP=2,rP=.45;function Ko(e){return e.heightM!==void 0?e.heightM:Tt(e.catalogKey??e.kind)?.heightM??_0}
2function Jc(e){return Tt(e.catalogKey??e.kind)?.seat?.heightM??Ko(e)}function Jl(e,t,n={}){const o=n.solidMinM??B0,a=qs(e);for(const s of[...e.props,...t.props]){if((s.elevationM??0)>=iP)continue;const i=Ko(s);if(i<o)continue;const r=Tt(s.catalogKey??s.kind);if(!(r?.walkable&&!n.includeWalkable)){if(r?.passage){const l=Math.max(0,(s.widthM-r.passage.widthM)/2),c=(s.widthM-l)/2;for(const d of[-1,1])a.push({id:s.id,center:Bi(s,{x:0,y:d*c}),widthM:l,depthM:s.depthM,headingDeg:s.headingDeg,heightM:i});continue}a.push({id:s.id,center:s.center,widthM:s.widthM,depthM:s.depthM,headingDeg:s.headingDeg,heightM:i})}}return a}function lP(e,t,n={}){const o=n.solidMinM??B0,a=qs(e),s=[...e.props,...t.props],i=new Map(s.map(r=>[r.id,r]));for(const r of s){const l=Ko(r);l<o||a.push({id:r.id,center:r.center,widthM:r.widthM,depthM:r.depthM,headingDeg:r.headingDeg,heightM:l,baseM:ra(r,i)})}return a}const cP=1e-9,dP=1e-9;function Ga(e,t,n,o){const a=Ss(n,e),s=Ss(n,t),i={x:s.x-a.x,y:s.y-a.y},r=n.depthM/2+o,l=n.widthM/2+o;let c=0,d=1;for(const u of["x","y"]){const p=u==="x"?r:l;if(Math.abs(i[u])<cP){if(a[u]<=-p||a[u]>=p)return null;continue}let f=(-p-a[u])/i[u],h=(p-a[u])/i[u];if(f>h&&([f,h]=[h,f]),c=Math.max(c,f),d=Math.min(d,h),c>=d-dP)return null}return{enter:c,exit:d}}function ya(e,t,n){const o=Ss(t,e),a=t.depthM/2+n,s=t.widthM/2+n;return Math.abs(o.x)<a&&Math.abs(o.y)<s}function mr(e,t,n,o=0){const a=Ss(n,e),s=n.depthM/2+o,i=n.widthM/2+o,r=Math.min(s,Math.max(-s,a.x)),l=Math.min(i,Math.max(-i,a.y));return Math.hypot(a.x-r,a.y-l)<t}const uP=1e-6;function _b(e,t){const n=In(e.headingDeg),o=ho(e.headingDeg);return Math.abs(t.x*n.x+t.y*n.y)*(e.depthM/2)+Math.abs(t.x*o.x+t.y*o.y)*(e.widthM/2)}function Va(e,t){const n=[In(e.headingDeg),ho(e.headingDeg),In(t.headingDeg),ho(t.headingDeg)],o={x:t.center.x-e.center.x,y:t.center.y-e.center.y};let a=null;for(const s of n){const i=_b(e,s)+_b(t,s)-Math.abs(s.x*o.x+s.y*o.y);if(i<=uP)return null;(!a||i<a.depth)&&(a={axis:s,depth:i})}return a}const Ab=1e-4,pP=3,fP=20;function mP(e){const t=In(e.headingDeg),n=ho(e.headingDeg),o=e.depthM/2,a=e.widthM/2;return{x:Math.abs(t.x)*o+Math.abs(n.x)*a,y:Math.abs(t.y)*o+Math.abs(n.y)*a}}function hP(e,t,n,o){const a=mP(o),s=Math.min(e.x,t.x)-n,i=Math.max(e.x,t.x)+n,r=Math.min(e.y,t.y)-n,l=Math.max(e.y,t.y)+n;return s<=o.center.x+a.x&&i>=o.center.x-a.x&&r<=o.center.y+a.y&&l>=o.center.y-a.y}function Tb(e,t,n){const o=Ss(e,t),a=e.depthM/2+n,s=e.widthM/2+n,i=In(e.headingDeg),r=ho(e.headingDeg);if(Math.abs(o.x)/a>=Math.abs(o.y)/s){const c=o.x>=0?1:-1;return{x:i.x*c,y:i.y*c}}const l=o.y>=0?1:-1;return{x:r.x*l,y:r.y*l}}function zm(e,t,n,o){const a=o.filter(c=>!mr(e,n-1e-6,c));let s=e,i={x:t.x-e.x,y:t.y-e.y};const r=[];for(let c=0;c<pP;c+=1){const d={x:s.x+i.x,y:s.y+i.y};let u=1/0,p=null;for(const y of a){if(!hP(s,d,n,y))continue;const w=Ga(s,d,y,n);if(!w)continue;const M=Math.max(0,w.enter);if(M===0){const x=Tb(y,s,n);if(i.x*x.x+i.y*x.y>=0)continue}M<u&&(u=M,p=y)}if(!p){s=d;break}const f={x:s.x+i.x*u,y:s.y+i.y*u},h=Tb(p,f,n);p.id&&r.push(p.id),s={x:f.x+h.x*Ab,y:f.y+h.y*Ab};const b={x:i.x*(1-u),y:i.y*(1-u)},I=b.x*h.x+b.y*h.y;i={x:b.x-I*h.x,y:b.y-I*h.y}}const l=Math.hypot(s.x-t.x,s.y-t.y)>1e-6;return{position:l?s:t,blocked:l,hitIds:r}}function jm(e,t,n){const o=n.filter(c=>Va(e,c)===null),a=new Set,s=c=>o.filter(d=>Va({...e,center:c},d)!==null);function i(c,d){let u=0,p=1,f=[];for(let h=0;h<fP;h+=1){const b=(u+p)/2,I={x:c.x+(d.x-c.x)*b,y:c.y+(d.y-c.y)*b},y=s(I);y.length===0?u=b:(p=b,f=y)}for(const h of f)h.id&&a.add(h.id);return{x:c.x+(d.x-c.x)*u,y:c.y+(d.y-c.y)*u}}let r=i(e.center,t);r=i(r,{x:t.x,y:r.y}),r=i(r,{x:r.x,y:t.y});const l=Math.hypot(r.x-t.x,r.y-t.y)>1e-6;return{center:l?r:t,blocked:l,hitIds:[...a]}}function bP(e,t){const n=new Set([e.id]);let o=e;for(;o?.supportPropId;){const s=t.get(o.supportPropId);if(!s||n.has(s.id))break;n.add(s.id),o=s}let a=[e.id];for(;a.length>0;){const s=[];for(const i of t.values())i.supportPropId&&a.includes(i.supportPropId)&&!n.has(i.id)&&(n.add(i.id),s.push(i.id));a=s}return n}function Ra(e,t,n,o={}){const a=new Set;n.start.seatPropId&&a.add(n.start.seatPropId);for(const s of n.poseKeys)s.seatPropId&&a.add(s.seatPropId);return Jl(e,t,o).filter(s=>!a.has(s.id))}function vu(e,t,n,o={}){const a=qs(e);if(Ko(n)<.3)return a;const s=new Map([...e.props,...t.props].map(r=>[r.id,r])),i=bP(n,s);return Jl(e,t,o).filter(r=>!i.has(r.id))}const A0=1e-6;function gP(e,t){const n=e[e.length-1];if(n.atSec===void 0||Number.isNaN(n.atSec)){const a=[...e].slice(0,-1).reverse().find(i=>i.atSec!==void 0)?.atSec,s=t??a??10;n.atSec=Math.max(0,s-n.pauseSec)}const o=[0];for(let a=1;a<e.length-1;a+=1)e[a].atSec!==void 0&&o.push(a);o.push(e.length-1);for(let a=0;a<o.length-1;a+=1){const s=o[a],i=o[a+1];if(i-s<=1)continue;const r=[0];for(let h=s;h<i;h+=1)r.push(r[r.length-1]+Ot(e[h],e[h+1]));const l=r[r.length-1];let c=0;for(let h=s+1;h<i;h+=1)c+=e[h].pauseSec;const d=e[s].atSec+e[s].pauseSec,u=e[i].atSec,p=Math.max(0,u-d-c);let f=0;for(let h=s+1;h<i;h+=1){const b=r[h-s],I=l>0?b/l:0;e[h].atSec=d+I*p+f,f+=e[h].pauseSec}}}function _i(e,t){const n=e.path.waypoints,o=n.length>0&&Ot(n[0],e.start.position)<A0,a=o?n.slice(1):n,s=o?Math.max(0,n[0].atSec??0)+(n[0].pauseSec??0):0,i=[{x:e.start.position.x,y:e.start.position.y,atSec:0,pauseSec:s},...a.map(r=>({x:r.x,y:r.y,atSec:r.atSec,pauseSec:r.pauseSec??0}))];return gP(i,t),i}function yu(e,t){let n=0;for(;n<t.length&&Ot(t[n],e)<A0;)n+=1;return n}function T0(e,t){return e.positionKeys.length>=2?[...e.positionKeys].sort((n,o)=>n.atSec-o.atSec).map(n=>({x:n.x,y:n.y,atSec:n.atSec,pauseSec:0})):e.path.waypoints.length===0?[{x:e.start.position.x,y:e.start.position.y,atSec:0,pauseSec:0}]:_i(e,t)}function Rb(e,t,n){const o=T0(e,n);
2if(o.length<=1)return o[0]?.atSec??0;let a=1/0,s=o[0].atSec;for(let i=0;i<o.length-1;i+=1){const r=o[i],l=o[i+1],c=l.x-r.x,d=l.y-r.y,u=c*c+d*d,p=u>0?((t.x-r.x)*c+(t.y-r.y)*d)/u:0,f=Math.min(1,Math.max(0,p)),h=r.x+c*f,b=r.y+d*f,I=(t.x-h)**2+(t.y-b)**2;if(I<a){a=I;const y=r.atSec+r.pauseSec;s=y+f*(l.atSec-y)}}return s}function vP(e,t,n){const o=T0(e,n);if(o.length===0)return{past:[],future:[]};const a=[{x:o[0].x,y:o[0].y}];if(o.length===1)return{past:a,future:[{x:o[0].x,y:o[0].y}]};for(let i=0;i<o.length-1;i+=1){const r=o[i],l=o[i+1],c=r.atSec+r.pauseSec;if(t>=l.atSec){a.push({x:l.x,y:l.y});continue}if(t<=c){const h=o.slice(i).map(b=>({x:b.x,y:b.y}));return{past:a,future:h}}const d=l.atSec-c,u=d>0?(t-c)/d:1,p={x:r.x+(l.x-r.x)*u,y:r.y+(l.y-r.y)*u};a.push(p);const f=[p,...o.slice(i+1).map(h=>({x:h.x,y:h.y}))];return{past:a,future:f}}const s=o[o.length-1];return{past:a,future:[{x:s.x,y:s.y}]}}function Um(e,t){return e.positionKeys.length>=2?[...e.positionKeys].sort((n,o)=>n.atSec-o.atSec).map(n=>({x:n.x,y:n.y,atSec:n.atSec})):e.path.waypoints.length===0?[]:_i(e,t).map(n=>({x:n.x,y:n.y,atSec:n.atSec}))}function R0(e,t,n,o,a){const s=[];return e.actors.forEach((i,r)=>{const l=Vt(i),c=Ra(n,e,i,{solidMinM:o.solidMinHeightM}),d=Bn(a,`actors[${r}].path`),u=i.start.pose==="sit"&&!!i.start.seatPropId,p=Um(i,e.durationSec),f=p.length>0?p[0]:i.start.position;if(!u){const h=c.find(b=>mr(f,l,b));h&&s.push(Le("PHYSICAL_IMPOSSIBILITY",{path:d,targetId:i.id,timeRange:{startSec:0,endSec:0},params:{obstacleId:h.id}}))}for(const h of c){let b=null;for(let I=0;I<p.length-1;I+=1){const y=p[I],w=p[I+1],M=Ga(y,w,h,l);if(!M){b&&(s.push(Le("PHYSICAL_IMPOSSIBILITY",{path:d,targetId:i.id,timeRange:{startSec:b.startSec,endSec:b.endSec},params:{obstacleId:h.id}})),b=null);continue}const x=y.atSec,_=w.atSec,O=x+(_-x)*M.enter,A=x+(_-x)*M.exit;b=b?{startSec:b.startSec,endSec:A}:{startSec:O,endSec:A}}b&&s.push(Le("PHYSICAL_IMPOSSIBILITY",{path:d,targetId:i.id,timeRange:{startSec:b.startSec,endSec:b.endSec},params:{obstacleId:h.id}}))}}),s}function yP(e,t,n){return t.timeline.propEvents.some(o=>o.targetId===e.id&&o.state.open&&xm(o,n))}function D0(e,t,n,o,a){const s=[],i=n.openings.filter(r=>gi(r.kind));return i.length===0||e.actors.forEach((r,l)=>{const c=Bn(a,`actors[${l}].path`),d=Um(r,e.durationSec);for(const u of i){const p=Xl(n,u);let f=null;const h=()=>{f&&(yP(u,e,f)||s.push(Le("DOOR_CLOSED_PASSAGE",{path:c,targetId:r.id,timeRange:{startSec:f.startSec,endSec:f.endSec},params:{doorId:u.id}})),f=null)};for(let b=0;b<d.length-1;b+=1){const I=d[b],y=d[b+1],w=Ga(I,y,p,0);if(!w){h();continue}const M=I.atSec,x=y.atSec,_=M+(x-M)*w.enter,O=M+(x-M)*w.exit;f=f?{startSec:f.startSec,endSec:O}:{startSec:_,endSec:O}}h()}}),s}const kP=.5,Sc=.4,bf=.6,wd=70;function ci(e,t){return Qt(Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI)}function O0(e,t,n){return{x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}}function Md(e){const t=Math.min(1,Math.max(0,e));return t*t*(3-2*t)}function gf(e,t,n){return Qt(e+Io(e,t)*n)}function N0(e){const t=[0];for(let n=0;n<e.length-1;n+=1)t.push(t[t.length-1]+Ot(e[n],e[n+1]));return t}function SP(e,t,n){const o=_i(e,n.durationSec),a=N0(o),s=e.start.headingDeg,i=o[0];if(t<=i.atSec){const d=o.length>1,u=d?o[0].atSec+o[0].pauseSec:void 0,p=d?ci(o[0],o[1]):void 0;return{position:{x:i.x,y:i.y},moving:!1,source:"path",segmentDeg:null,travelM:0,speedMps:0,travelDeg:s,...u!==void 0?{nextDepartureSec:u}:{},...p!==void 0?{departDeg:p}:{}}}for(let d=0;d<o.length-1;d+=1){const u=o[d],p=o[d+1];if(t>=p.atSec)continue;const f=u.atSec+u.pauseSec,h=ci(u,p);if(t<f){const w=d>0?h:null;return{position:{x:u.x,y:u.y},moving:!1,source:"path",segmentDeg:w,travelM:a[d],speedMps:0,travelDeg:w??s,arrivedAtSec:u.atSec,nextDepartureSec:f,departDeg:h}}const b=p.atSec-f,I=b>0?(t-f)/b:1,y=Ot(u,p);return{position:O0(u,p,I),moving:!0,source:"path",segmentDeg:h,travelM:a[d]+y*I,speedMps:b>0?y/b:0,travelDeg:h}}const r=o[o.length-1],l=o[o.length-2],c=l?ci(l,r):null;return{position:{x:r.x,y:r.y},moving:!1,source:"path",segmentDeg:c,travelM:a[a.length-1],speedMps:0,travelDeg:c??s,arrivedAtSec:r.atSec}}function IP(e,t,n){const o=[...e].sort((r,l)=>r.atSec-l.atSec),a=N0(o),s=o[0],i=o[o.length-1];if(t<=s.atSec){const r=o.length>1,l=r?s.atSec:void 0,c=r?ci(o[0],o[1]):void 0;return{position:{x:s.x,y:s.y},moving:!1,source:"keys",segmentDeg:null,travelM:0,speedMps:0,travelDeg:n,...l!==void 0?{nextDepartureSec:l}:{}
2,...c!==void 0?{departDeg:c}:{}}}if(t>=i.atSec){const r=o[o.length-2],l=r?ci(r,i):null;return{position:{x:i.x,y:i.y},moving:!1,source:"keys",segmentDeg:l,travelM:a[a.length-1],speedMps:0,travelDeg:l??n,arrivedAtSec:i.atSec}}for(let r=0;r<o.length-1;r+=1){const l=o[r],c=o[r+1];if(t<l.atSec||t>=c.atSec)continue;const d=c.atSec-l.atSec,u=d>0?(t-l.atSec)/d:0,p=Ot(l,c),f=ci(l,c);return{position:O0(l,c,u),moving:!0,source:"keys",segmentDeg:f,travelM:a[r]+p*u,speedMps:d>0?p/d:0,travelDeg:f}}return{position:{x:s.x,y:s.y},moving:!1,source:"keys",segmentDeg:null,travelM:0,speedMps:0,travelDeg:n}}function sp(e,t,n){if(e.travel)return n.trackMotion?.travelDeg??t.travelDeg;const o=e.targetId?n.targetPosition?.(e.targetId)??null:null;return o?ci(t.position,o):e.headingDeg}function vf(e,t,n,o){const a=o.trackMotion?.travelDeg??n.travelDeg,s=e.facingKeys;if(s.length===0)return a;const i=[...s].sort((d,u)=>d.atSec-u.atSec);let r=-1;for(let d=0;d<i.length&&i[d].atSec<=t;d+=1)r=d;const l=r>=0?i[r]:void 0,c=i[r+1];if(c){const d=Math.max(c.atSec-kP,l?.atSec??-1/0);if(t>=d){const u=l?sp(l,n,o):a,p=c.atSec-d,f=p>0?Md((t-d)/p):1;return gf(u,sp(c,n,o),f)}}return l?sp(l,n,o):a}function ip(e,t){const n=Io(e,t);return Math.abs(n)<=wd?e:Qt(t-Math.sign(n)*wd)}function wP(e,t,n,o,a){let s;if((a.trackMotion?.speedMps??n.speedMps)>.05)s=ip(a.trackMotion?.travelDeg??n.travelDeg,o);else if(n.arrivedAtSec!==void 0&&t-n.arrivedAtSec<Sc){const d=vf(e,n.arrivedAtSec,n,a),u=ip(n.travelDeg,d);s=gf(u,o,Md((t-n.arrivedAtSec)/Sc))}else if(n.nextDepartureSec!==void 0&&n.nextDepartureSec-t<Sc){const d=vf(e,n.nextDepartureSec,n,a),u=ip(n.departDeg??n.travelDeg,d);s=gf(o,u,Md(1-(n.nextDepartureSec-t)/Sc))}else s=o;const r=Io(s,o),l=Qt(Math.abs(r)>wd?o-Math.sign(r)*wd:s),c=Io(l,o);return{bodyDeg:l,headYawDeg:c}}function MP(e,t){const n=e.poseKeys;let o=e.start.pose,a=e.start.seatPropId;const s=[...n].sort((i,r)=>i.atSec-r.atSec);for(const i of s){if(i.atSec>t)break;o=i.pose,a=i.seatPropId}return a!==void 0?{pose:o,seatPropId:a}:{pose:o}}function $P(e,t){const o=[...[{atSec:0,pose:e.start.pose,seatPropId:e.start.seatPropId},...e.poseKeys]].sort((l,c)=>l.atSec-c.atSec);let a=0;for(let l=0;l<o.length&&o[l].atSec<=t;l+=1)a=l;const s=o[a],i=o[a+1];if(i){const l=Math.max(i.atSec-bf,s.atSec);if(t>=l){const c=i.atSec-l,d=c>0?Md((t-l)/c):1;return{from:s.pose,to:i.pose,u:d,...s.seatPropId!==void 0?{fromSeatPropId:s.seatPropId}:{},...i.seatPropId!==void 0?{toSeatPropId:i.seatPropId}:{}}}}const r=a>0?o[a-1]:s;return{from:r.pose,to:s.pose,u:1,...r.seatPropId!==void 0?{fromSeatPropId:r.seatPropId}:{},...s.seatPropId!==void 0?{toSeatPropId:s.seatPropId}:{}}}function mn(e,t,n={}){const o=e.positionKeys.length>=2?IP(e.positionKeys,t,e.start.headingDeg):e.path.waypoints.length>=1?SP(e,t,n):{position:e.start.position,moving:!1,source:"start",travelM:0,speedMps:0,travelDeg:e.start.headingDeg},a=vf(e,t,o,n),{bodyDeg:s,headYawDeg:i}=wP(e,t,o,a,n),{pose:r,seatPropId:l}=MP(e,t),c=$P(e,t);return{position:o.position,headingDeg:a,pose:r,...l!==void 0?{seatPropId:l}:{},moving:o.moving,source:o.source,travelM:o.travelM,speedMps:o.speedMps,poseBlend:c,bodyDeg:s,headYawDeg:i}}const $d=1e-9;function Zs(e,t,n){const o=t.pauseWindowsByActor[n]??[];return a=>{let s=0;for(const i of o){const r=i.endSec-i.startSec;if(a>=i.endSec-$d)s+=r;else if(a>=i.startSec-$d)return{authoredSec:a-s-(a-i.startSec),paused:!0}}return{authoredSec:a-s,paused:!1}}}function li(e,t,n,o){const a=t.pauseWindowsByActor[n]??[];let s=0;for(const i of a){const r=i.startSec-s;if(o>r+$d)s+=i.endSec-i.startSec;else{if(o>=r-$d)return i.startSec;break}}return o+s}const $l={walking:2.5,running:6,vehicle:35,flying:25,unspecified:6},Ed=1e-6,EP=.2,xP=1,PP=.01,CP=2.5;function Db(e,t,n){const o=[];for(let a=0;a<e.length-1;a+=1){const s=e[a],i=e[a+1],r=Math.abs(i.atSec-s.atSec),l=Ot(s,i),c=r<=Ed&&l>PP,d=r<=EP+Ed&&l>=xP;(c||d)&&o.push(Le("TELEPORTATION_DETECTED",{path:n,targetId:t.id,timeRange:{startSec:Math.min(s.atSec,i.atSec),endSec:Math.max(s.atSec,i.atSec)}}))}return o}function BP(e,t,n,o){const a=[],s=Zl(e.durationSec,n.sampleHz??ql);
2return e.actors.forEach((i,r)=>{const l=Bn(o,`actors[${r}]`),c=$l[i.movementMode],d=e.timeline.actions.filter(y=>y.actorId===i.id&&y.actionType==="run"),u=[...i.positionKeys].sort((y,w)=>y.atSec-w.atSec);a.push(...Db(u,i,Bn(l,"positionKeys")));const p=i.path.waypoints.filter(y=>y.atSec!==void 0);a.push(...Db(p,i,Bn(l,"path.waypoints")));const f=Zs(e,t,i.id),h=s.map(y=>{const w=f(y);return{t:y,paused:w.paused,position:mn(i,w.authoredSec,{durationSec:e.durationSec}).position}});let b=null;const I=()=>{b&&(a.push(Le(b.tier==="error"?"TELEPORTATION_DETECTED":"UNREALISTIC_SPEED",{path:l,targetId:i.id,timeRange:{startSec:b.startSec,endSec:b.endSec}})),b=null)};for(let y=0;y<h.length-1;y+=1){const w=h[y],M=h[y+1];if(w.paused||M.paused){I();continue}const x=M.t-w.t,_=x>0?Ot(w.position,M.position)/x:0,A=d.some(K=>K.startSec<=w.t+Ed&&M.t<=K.endSec+Ed)?Math.max(c,$l.running):c,N=_>A*CP?"error":_>A?"warning":null;if(!N){I();continue}b&&b.tier===N?b.endSec=M.t:(I(),b={tier:N,startSec:w.t,endSec:M.t})}I()}),a}const xd=.001,yf=1e-6;function ku(e,t){const n=e.path.waypoints;if(n.length===0)return[];const o=_i(e,t),a=o.length===n.length;return n.map((s,i)=>{if(a&&i===0)return{atSec:Math.max(0,s.atSec??0),leaveSec:o[0].pauseSec};const r=o[a?i:i+1];return{atSec:r.atSec,leaveSec:r.atSec+r.pauseSec}})}function L0(e,t){const n={x:e.start.position.x,y:e.start.position.y,atSec:0,leaveSec:0},o=ku(e,t);return[n,...e.path.waypoints.map((a,s)=>({x:a.x,y:a.y,...o[s]}))]}function K0(e,t){const n=L0(e,t),o=[];for(let a=1;a<n.length;a++){const s=n[a-1],i=n[a],r=Ot(s,i);if(r<=xd)continue;const l=i.atSec-s.leaveSec;o.push({from:a-2,to:a-1,startSec:s.leaveSec,endSec:i.atSec,distanceM:r,mps:l>yf?r/l:1/0})}return o}function Ai(e,t){const n=L0(e,t),o=[];let a=null;for(let s=1;s<n.length;s++){const i=n[s-1],r=n[s],l=Ot(i,r);if(i.leaveSec-i.atSec>yf&&(a=null),l<=xd){r.atSec-i.leaveSec>yf&&(a=null);continue}a||(a={first:s-1,last:s-1,departSec:i.leaveSec,arriveSec:r.atSec,distanceM:0},o.push(a)),a.last=s-1,a.arriveSec=r.atSec,a.distanceM+=l}return o}function F0(e,t){return e.map((n,o)=>{if(o<t.first||o>=t.last||n.atSec===void 0)return n;const{atSec:a,...s}=n;return s})}const rp={normal:1.1,brisk:1.7,run:3};function Pd(e){return e>=rp.run?"run":e>=rp.brisk?"brisk":e>=rp.normal?"normal":"slow"}const _P=.4,AP=.5;function H0(e,t){return e.mps>$l[t]?"tooFast":t==="walking"&&e.mps<_P&&e.distanceM>AP?"tooSlow":null}function Gm(e,t){const n=Ai(e,t),o=K0(e,t).map(s=>({...s,cls:Pd(s.mps),problem:H0(s,e.movementMode),span:n.findIndex(i=>s.to>=i.first&&s.to<=i.last)})),a=n.map((s,i)=>{const r=s.distanceM/Math.max(1e-6,s.arriveSec-s.departSec),l=o.find(c=>c.span===i&&c.problem)?.problem??null;return{...s,mps:r,cls:Pd(r),problem:l}});return{segments:o,spans:a}}const Vr=1e-6;function z0(e,t,n,o=ql){const a=[],s=Zl(e.durationSec,o);return e.actors.forEach((i,r)=>{if(i.positionKeys.length>=2)return;const l=e.timeline.actions.filter(p=>p.actorId===i.id&&p.actionType==="run"),c=[];for(const p of K0(i,e.durationSec)){const f=l.some(b=>b.startSec<=p.startSec+Vr&&p.endSec<=b.endSec+Vr);if(H0(p,f?"running":i.movementMode)!=="tooSlow")continue;const h=c.at(-1);h&&p.startSec<=h.endSec+Vr?(h.endSec=p.endSec,h.distanceM+=p.distanceM):c.push({startSec:p.startSec,endSec:p.endSec,distanceM:p.distanceM})}if(c.length===0)return;const d=Zs(e,t,i.id),u=s.map(p=>({t:p,c:d(p)}));for(const p of c){const f=u.filter(h=>!h.c.paused&&h.c.authoredSec>=p.startSec-Vr&&h.c.authoredSec<=p.endSec+Vr);f.length!==0&&a.push(Le("MOVE_TOO_SLOW",{path:Bn(n,`actors[${r}]`),targetId:i.id,timeRange:{startSec:f[0].t,endSec:f.at(-1).t},params:{distM:Math.round(p.distanceM*10)/10,sec:Math.round((p.endSec-p.startSec)*10)/10}}))}}),a}const El=xn;function TP(e,t){const n=e.filter(a=>a.actorId===t&&a.mode==="blocking").slice().sort((a,s)=>a.startSec-s.startSec),o=[];for(const a of n){const s=o[o.length-1];s&&a.startSec<=s.endSec+El?s.endSec=Math.max(s.endSec,a.endSec):o.push({startSec:a.startSec,endSec:a.endSec,dialogueId:a.id})}return o}function RP(e){return{...e,settledStartSec:e.startSec,settledEndSec:e.endSec,pauseSegments:[]}}function DP(e,t){const n=[...e].sort((i,r)=>i.startSec-r.startSec),o=new Set;let a=0;const s=[];for(const i of n){let r=i.startSec+a,l=i.endSec+a;const c=[];for(let d=0;d<t.length;d+=1){if(o.has(d))continue;const u=t[d],p=u.endSec-u.startSec;if(u.endSec<=r+El)a+=p,r+=p,l+=p,o.add(d);else if(u.startSec<l-El){const f=Math.max(r,u.startSec),h=u.endSec;l+=h-f,c.push({startSec:f,endSec:h}),a+=p,o.add(d)}}s.push({...i,settledStartSec:r,settledEndSec:l,pauseSegments:c})}return s}function OP(e,t){let n=0;for(const o of t)o.endSec<=e.startSec+El&&(n+=o.endSec-o.startSec);return{...e,settledStartSec:e.startSec+n,settledEndSec:e.endSec+n}}function fs(e){const{actions:t,dialogues:n}=e.timeline,o=new Set;for(const c of n)c.mode==="blocking"&&o.add(c.actorId);const a={};
2for(const c of o)a[c]=TP(n,c);const s=new Map,i=[];for(const c of t){if(c.actorId===null||c.actionClass!=="movement"){i.push(RP(c));continue}const d=s.get(c.actorId)??[];d.push(c),s.set(c.actorId,d)}for(const[c,d]of s)i.push(...DP(d,a[c]??[]));const r=[];for(const c of i)c.settledEndSec>e.durationSec+El&&r.push(Le("PAUSE_EXCEEDS_PART",{path:"timeline.actions",targetId:c.id,timeRange:{startSec:c.settledStartSec,endSec:c.settledEndSec}}));const l=n.map(c=>OP(c,a[c.actorId]??[]));return{actions:i,dialogues:l,pauseWindowsByActor:a,issues:r}}const NP=xn;function LP(e,t){const n=e.actions.find(a=>a.id===t.targetId),o=e.dialogues.find(a=>a.id===t.targetId);return t.eventType==="action-start"||t.eventType==="action-end"?n?{kind:"resolved",sec:t.eventType==="action-start"?n.settledStartSec:n.settledEndSec}:o?{kind:"wrong-type",targetKind:"dialogue"}:{kind:"missing"}:t.eventType==="dialogue-start"||t.eventType==="dialogue-end"?o?{kind:"resolved",sec:t.eventType==="dialogue-start"?o.settledStartSec:o.settledEndSec}:n?{kind:"wrong-type",targetKind:"action"}:{kind:"missing"}:{kind:"missing"}}function KP(e,t,n){const o=e.pauseWindowsByActor[t]??[];let a=0;for(const s of o)s.endSec<=n+NP&&(a+=s.endSec-s.startSec);return a}function wr(e,t){const n=[],o=new Map,a=e.timeline.coverages.map((i,r)=>{const l=i.endSec-i.startSec;let c=i.startSec;if(i.anchor){const d=LP(t,i.anchor),u=`timeline.coverages[${r}]`;d.kind==="resolved"?c=d.sec+i.anchor.offsetSec:d.kind==="wrong-type"?n.push(Le("INVALID_ANCHOR_EVENT_TYPE",{path:u,targetId:i.id,params:{anchorTargetId:i.anchor.targetId,eventType:i.anchor.eventType,targetKind:d.targetKind}})):n.push(Le("UNKNOWN_EVENT_ANCHOR",{path:u,targetId:i.id}))}else if(i.timingMode==="follow-subject"){const d=i.subject.targetIds[0];d&&(c=i.startSec+KP(t,d,i.startSec))}return c!==i.startSec&&o.set(i.id,c-i.startSec),c===i.startSec?{...i}:{...i,startSec:c,endSec:c+l}}),s=e.timeline.cuts.map(i=>{const r=o.get(i.coverageId)??0;return r===0?{...i}:{...i,inSec:i.inSec+r,outSec:i.outSec+r}});return{coverages:a,cuts:s,issues:n}}const Vm=36;function kf(e){return e*180/Math.PI}function j0(e){return e*Math.PI/180}function U0(e,t=16/9){const n=Vm/2,o=kf(2*Math.atan(n/e)),a=kf(2*Math.atan(n/t/e));return{horizontalDeg:o,verticalDeg:a}}function G0(e){return Vm/2/Math.tan(j0(e)/2)}function xl(e){return Ys.reduce((t,n)=>Math.abs(n-e)<Math.abs(t-e)?n:t)}const FP={180:8,135:10,107:16,84:24,63:35,47:50,29:85,18:135,12:200,8:300};function Su(e,t=16/9){if(e.fovOverrideDeg===void 0)return U0(e.lensMm,t);const n=e.fovOverrideDeg,o=kf(2*Math.atan(Math.tan(j0(n)/2)/t));return{horizontalDeg:n,verticalDeg:o}}function V0(e){if(e.length===0)return{center:{x:0,y:0},radius:0};const t=(i,r)=>Math.hypot(i.x-r.x,i.y-r.y),n=(i,r)=>({center:{x:(i.x+r.x)/2,y:(i.y+r.y)/2},radius:t(i,r)/2}),o=(i,r,l)=>{const c=i.x,d=i.y,u=r.x-c,p=r.y-d,f=l.x-c,h=l.y-d,b=2*(u*h-p*f);if(Math.abs(b)<1e-9)return[n(i,r),n(i,l),n(r,l)].reduce((x,_)=>_.radius>x.radius?_:x);const I=(h*(u*u+p*p)-p*(f*f+h*h))/b,y=(u*(f*f+h*h)-f*(u*u+p*p))/b,w={x:c+I,y:d+y};return{center:w,radius:t(w,i)}},a=(i,r)=>t(i.center,r)<=i.radius+1e-9;let s={center:e[0],radius:0};for(let i=1;i<e.length;i+=1)if(!a(s,e[i])){s={center:e[i],radius:0};for(let r=0;r<i;r+=1)if(!a(s,e[r])){s=n(e[i],e[r]);for(let l=0;l<r;l+=1)a(s,e[l])||(s=o(e[i],e[r],e[l]))}}return s}const Ob=.35;function HP(e){return Math.max(0,Math.min(1,e))}function Nb(e){return e*e*(3-2*e)}function Wr(e,t){return{x:e.x+t.x,y:e.y+t.y}}function Ic(e,t){return{x:e.x*t,y:e.y*t}}function zP(e,t){const n=t.x-e.x,o=t.y-e.y,a=Math.hypot(n,o);return a>1e-9?{x:n/a,y:o/a}:{x:0,y:0}}function lp(e,t){return Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI}function oi(e,t){return(e??t)===t?1:-1}function jP(e){const t=e.headingDeg*Math.PI/180,n=e.pitchDeg*Math.PI/180,o=5,a=o*Math.cos(n)*Math.cos(t),s=o*Math.cos(n)*Math.sin(t),i=o*Math.sin(n);return{x:e.position.x+a,y:e.position.y+s,h:e.heightM+i}}function UP(e,t){if(t.subjects.length===0)return jP(e);const n=t.subjects.map(s=>s.position),o=t.subjects.length===1?n[0]:V0(n).center,a=t.subjectHeights.length>0?t.subjectHeights.reduce((s,i)=>s+i,0)/t.subjectHeights.length:e.heightM;return{x:o.x,y:o.y,h:a}}function cp(e){return{position:{x:e.x,y:e.y},heightM:e.heightM,headingDeg:e.headingDeg,pitchDeg:e.pitchDeg,rollDeg:e.rollDeg,lensMm:e.lensMm}}function GP(e,t){const n=t.length,o=new Array(n).fill(0),a=[];for(let s=0;s<n-1;s+=1)a.push((t[s+1]-t[s])/(e[s+1]-e[s]));for(let s=1;s<n-1;s+=1){const i=a[s-1],r=a[s];if(i*r<=0)continue;let l=(i+r)/2;const c=l/i,d=l/r,u=c*c+d*d;u>9&&(l=3*l/Math.sqrt(u)),o[s]=l}return o}
2function W0(e,t,n){if(t.length===1)return t[0];const o=GP(e,t);let a=e.length-2;for(let f=0;f<e.length-1;f+=1)if(n>=e[f]&&n<=e[f+1]){a=f;break}const s=e[a+1]-e[a],i=(n-e[a])/s,r=i*i,l=r*i,c=2*l-3*r+1,d=l-2*r+i,u=-2*l+3*r,p=l-r;return c*t[a]+d*s*o[a]+u*t[a+1]+p*s*o[a+1]}function VP(e,t,n){const o=[t[0]];for(let a=1;a<t.length;a+=1)o.push(o[a-1]+Io(t[a-1],t[a]));return W0(e,o,n)}function WP(e,t,n){const o=[...e].sort((c,d)=>c.atSec-d.atSec),a=o[0],s=o[o.length-1];if(t<=a.atSec)return cp(a);if(t>=s.atSec)return cp(s);if(n==="linear"){for(let c=0;c<o.length-1;c+=1){const d=o[c],u=o[c+1];if(t<d.atSec||t>=u.atSec)continue;const p=(t-d.atSec)/(u.atSec-d.atSec);return{position:{x:d.x+(u.x-d.x)*p,y:d.y+(u.y-d.y)*p},heightM:d.heightM+(u.heightM-d.heightM)*p,headingDeg:d.headingDeg+Io(d.headingDeg,u.headingDeg)*p,pitchDeg:d.pitchDeg+Io(d.pitchDeg,u.pitchDeg)*p,rollDeg:d.rollDeg+Io(d.rollDeg,u.rollDeg)*p,lensMm:d.lensMm+(u.lensMm-d.lensMm)*p}}return cp(s)}const i=o.map(c=>c.atSec),r=c=>W0(i,o.map(c),t),l=c=>VP(i,o.map(c),t);return{position:{x:r(c=>c.x),y:r(c=>c.y)},heightM:r(c=>c.heightM),headingDeg:Qt(l(c=>c.headingDeg)),pitchDeg:l(c=>c.pitchDeg),rollDeg:l(c=>c.rollDeg),lensMm:r(c=>c.lensMm)}}function XP(e,t,n,o){const a=WP(e.keys,t,o),s=Su({...e,lensMm:a.lensMm});return{position:a.position,heightM:a.heightM,headingDeg:a.headingDeg,pitchDeg:a.pitchDeg,rollDeg:a.rollDeg,lensMm:a.lensMm,fovH:s.horizontalDeg,fovV:s.verticalDeg,aim:n,source:"keys"}}function Wm(e,t,n){const o=UP(e,n);if(e.keys.length>=2)return XP(e,t,o,n.easing);const a=n.range,s=a?HP((t-a.startSec)/(a.endSec-a.startSec)):0,i=n.easing==="linear"?s:Nb(s);let r={...e.position},l=e.heightM,c=e.lensMm,d={...o},u=0,p=0;const f=e.move,h=f.amount??0,b=f.type;switch(b){case"static":case"handheld":break;case"dolly-in":case"pull-back":{const M=b==="dolly-in"?1:-1,x=zP(r,o);r=Wr(r,Ic(x,M*h*i));break}case"truck":{const M=oi(f.direction,"right"),x=Ic(ho(e.headingDeg),M*h*i);r=Wr(r,x),d={x:d.x+x.x,y:d.y+x.y,h:d.h};break}case"pan":u=oi(f.direction,"right")*h*i;break;case"whip-pan":{const M=Nb(Math.min(1,2*s));u=oi(f.direction,"right")*h*M;break}case"tilt":p=oi(f.direction,"up")*h*i;break;case"crane":l+=oi(f.direction,"up")*h*i;break;case"arc":{const M=oi(f.direction,"right"),x=Ot(r,o),O=lp(o,r)+M*h*i;r=Wr(o,Ic(In(O),x));break}case"tracking":{const M=n.subjectAtStart??n.subjects[0]?.position??r,x=n.subjects[0]?.position??M;r=Wr(r,{x:x.x-M.x,y:x.y-M.y});break}case"zoom":{const M=f.amount??e.lensMm;c=e.lensMm+(M-e.lensMm)*i;break}case"spiral-in":case"spiral-out":{const M=oi(f.direction,"right"),x=b==="spiral-in"?1-Ob*i:1+Ob*i,_=Ot(r,o)*x,A=lp(o,r)+M*h*i;r=Wr(o,Ic(In(A),_));break}}let I=e.headingDeg,y=e.pitchDeg;e.subject!==null&&n.subjects.length>0&&(I=lp(r,d),y=Math.atan2(d.h-l,Ot(r,d))*180/Math.PI),I+=u,y+=p;const w=Su({...e,lensMm:c});return{position:r,heightM:l,headingDeg:I,pitchDeg:y,rollDeg:e.rollDeg,lensMm:c,fovH:w.horizontalDeg,fovV:w.verticalDeg,aim:d,source:"move"}}function X0(e,t,n){const o=e.actors.map(i=>[i.id,i.species,i.start,i.path,i.positionKeys,i.poseKeys]),a=t.openings.map(i=>[i.kind,i.wall,i.offsetM,i.widthM,i.heightM]),s=[...t.props,...e.props].map(i=>[i.id,i.center,i.widthM,i.depthM,i.heightM,i.headingDeg,i.kind,i.catalogKey,i.supportPropId,i.elevationM]);return JSON.stringify([e.durationSec,o,n.pauseWindowsByActor,t.widthM,t.depthM,t.walls,a,s])}function YP(e){const t=[e.start.position,...e.path.waypoints,...e.positionKeys];let n=t[0].x,o=t[0].x,a=t[0].y,s=t[0].y;for(const i of t)i.x<n&&(n=i.x),i.x>o&&(o=i.x),i.y<a&&(a=i.y),i.y>s&&(s=i.y);return{minX:n,maxX:o,minY:a,maxY:s}}const qP=5,Lb=.001;function Kb(e,t){return Qt(Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI)}function ZP(e,t){return e.filter(n=>{const o=Math.max(n.widthM,n.depthM)/2+qP;return n.center.x+o>=t.minX&&n.center.x-o<=t.maxX&&n.center.y+o>=t.minY&&n.center.y-o<=t.maxY})}function Y0(e,t,n,o){const{fps:a}=o,s=Math.ceil(e.durationSec*a),i=X0(e,n,t),r={},l=[];for(const c of e.actors){const d=Zs(e,t,c.id),u=Vt(c),p=ZP(Ra(n,e,c),YP(c)),f=mn(c,d(0).authoredSec,{durationSec:e.durationSec}).position;let h=c.start.headingDeg;const b=[{x:f.x,y:f.y,travelM:0,blocked:!1,travelDeg:h}];let I=f,y=f,w=0,M=!1;for(let x=1;x<=s;x+=1){const _=x/a,O=mn(c,d(_).authoredSec,{durationSec:e.durationSec}).position,A=zm(I,O,u,p);w+=Math.hypot(A.position.x-I.x,A.position.y-I.y),Ot(y,O)>Lb&&(h=Kb(y,O));const N=h;y=O;const K=Ot(I,A.position)>Lb?Kb(I,A.position):N;!M&&A.blocked&&l.push({actorId:c.id,atSec:_,point:A.position,obstacleId:A.hitIds[0]}),b.push({x:A.position.x,y:A.position.y,travelM:w,blocked:A.blocked,travelDeg:K}),I=A.position,M=A.blocked}r[c.id]=b}return{key:i,fps:a,durationSec:e.durationSec,byActor:r,contacts:l}}const JP=1e-6;function Fb(e,t,n){const o=e.byActor[t];if(!o||o.length===0)return null;const a=o.length-1,s=n*e.fps,i=Math.max(0,Math.min(a,Math.floor(s+JP))),r=Math.min(a,i+1),l=Math.max(0,Math.min(1,s-i)),c=o[i],d=o[r],u={x:c.x+(d.x-c.x)*l,y:c.y+(d.y-c.y)*l},p=c.travelM+(d.travelM-c.travelM)*l,f=r>i?(d.travelM-c.travelM)*e.fps:0;return{position:u,travelM:p,speedMps:f,blocked:c.blocked,travelDeg:c.travelDeg}}function di(e,t,n,o,a,s={}){const i=e.cameras.find(p=>p.id===o);if(!i)return null;const r=s.easing??"smooth",l=t.coverages.filter(p=>p.cameraId===o).find(p=>mi({startSec:p.startSec,endSec:p.endSec},a)),c=i.subject?.targetIds??[],d=[],u=[];
2for(const p of c){const f=n[p],h=e.actors.find(I=>I.id===p);if(!f||!h)continue;d.push(f);const b=s.room?Ir(s.room,e,f.position):0;u.push(Fa(wo(h),f.pose)+b)}return Wm(i,a,{range:l?{startSec:l.startSec,endSec:l.endSec}:void 0,subjects:d,subjectHeights:u,easing:r})}function QP(e,t,n){if(t>=n-xn){const o=e.filter(a=>a.outSec>=n-xn);if(o.length>0)return o.reduce((a,s)=>s.inSec>a.inSec?s:a)}return e.find(o=>mi({startSec:o.inSec,endSec:o.outSec},t))??null}function eC(e,t,n){if(t>=n-xn){const o=e.filter(a=>a.endSec>=n-xn);if(o.length>0)return o}return e.filter(o=>mi({startSec:o.startSec,endSec:o.endSec},t))}function Wa(e,t,n,o,a,s={}){const i=s.easing??"smooth";function r(w,M){const x=s.tracks?Fb(s.tracks,M,a):null;return x?{...w,position:x.position}:w}const l={},c={};for(const w of e.actors){const x=Zs(e,t,w.id)(a);l[w.id]=x,c[w.id]=r(mn(w,x.authoredSec,{durationSec:e.durationSec}),w.id)}const d=QP(n.cuts,a,e.durationSec),u=eC(n.coverages,a,e.durationSec),p=d?di(e,n,c,d.cameraId,a,{easing:i,room:o}):null,f=new Map;for(const w of e.props)f.set(w.id,w.center);for(const w of o.props)f.set(w.id,w.center);function h(w){const M=c[w];if(M)return M.position;const x=f.get(w);return x||(e.cameras.some(_=>_.id===w)?d&&w===d.cameraId?p?.position??null:di(e,n,c,w,a,{easing:i,room:o})?.position??null:null)}const b={};for(const w of e.actors){const{authoredSec:M,paused:x}=l[w.id],_=s.tracks?Fb(s.tracks,w.id,a):null,O=mn(w,M,{durationSec:e.durationSec,targetPosition:K=>K===w.id?null:h(K),..._?{trackMotion:{travelDeg:_.travelDeg,speedMps:_.speedMps}}:{}}),A=t.actions.filter(K=>K.actorId===w.id).filter(K=>mi({startSec:K.settledStartSec,endSec:K.settledEndSec},a)).map(K=>K.id),N=t.dialogues.find(K=>K.actorId===w.id&&mi({startSec:K.settledStartSec,endSec:K.settledEndSec},a));b[w.id]={...O,..._?{position:_.position,travelM:_.travelM,speedMps:_.speedMps}:{},paused:x,activeActionIds:A,blocked:_?.blocked??!1,...N?{speakingDialogueId:N.id}:{}}}const I=d?a-d.inSec:0,y=s.tracks?.contacts??[];return{actors:b,activeCut:d,activeCoverages:u,camera:p,localShotSec:I,contacts:y}}function q0(e,t,n,o=0){const a=Math.min(e.h,t.h);let s=null;for(const i of n){const r=Ga(e,t,i,o);r&&(a>=i.heightM||(!s||r.enter<s.enter)&&(s={enter:r.enter,id:i.id}))}return s?{blockedBy:s.id}:null}function tC(e,t,n){let o=null;for(const a of n){const s=Ga(e,t,a,0);if(!s)continue;const i=a.baseM??0,r=e.h+(t.h-e.h)*s.enter,l=e.h+(t.h-e.h)*s.exit,c=Math.min(r,l);Math.max(r,l)<i||c>i+a.heightM||(!o||s.enter<o.enter)&&(o={enter:s.enter,id:a.id})}return o?{blockedBy:o.id}:null}const nC=.15,oC=xn*10,Hb="::";function dp(e){const t=e.filter(n=>n!==null);return t.length===0?null:{startSec:Math.min(...t),endSec:Math.max(...t)}}function aC(e,t,n,o,a,s){const i=[],r=Jl(o,e,{solidMinM:a.solidMinHeightM,includeWalkable:!0});return e.cameras.forEach((l,c)=>{l.keys.forEach((d,u)=>{(d.atSec<-xn||d.atSec>e.durationSec+xn)&&i.push(Le("CAMERA_KEY_OUT_OF_RANGE",{path:Bn(s,`cameras[${c}].keys[${u}]`),targetId:l.id,params:{atSec:d.atSec,durationSec:e.durationSec}}))})}),n.cuts.forEach((l,c)=>{const d=e.cameras.find(x=>x.id===l.cameraId);if(!d)return;const p=n.coverages.find(x=>x.id===l.coverageId)?.subject.targetIds??[],f=Bn(s,`timeline.cuts[${c}]`),h=d.subject===null,b=[l.inSec,(l.inSec+l.outSec)/2,l.outSec-oC],I=[],y=new Map,w=new Map;for(const x of b){const _=Wa(e,t,n,o,x),O=_.camera;if(!O){I.push(null);continue}I.push(r.some(A=>ya(O.position,A,nC))?x:null);for(const A of p){const N=e.actors.find(j=>j.id===A),K=_.actors[A];if(!N||!K||ys(o,K.position))continue;const F=Fa(wo(N),K.pose)+Ir(o,e,K.position),B=q0({...O.position,h:O.heightM},{...K.position,h:F},r);if(B){const j=A+Hb+B.blockedBy,ee=y.get(j)??[];ee.push(x),y.set(j,ee)}if(h){const j=Math.atan2(K.position.y-O.position.y,K.position.x-O.position.x)*180/Math.PI;if(Math.abs(Io(O.headingDeg,j))>O.fovH/2){const D=w.get(A)??[];D.push(x),w.set(A,D)}}}}const M=dp(I);M&&i.push(Le("CAMERA_INSIDE_SOLID",{path:f,targetId:d.id,timeRange:M}));for(const[x,_]of y){const O=dp(_);if(!O)continue;const[A,N]=x.split(Hb);i.push(Le("CAMERA_OCCLUDED",{path:f,targetId:d.id,timeRange:O,params:{subjectId:A,blockerId:N}}))}for(const[x,_]of w){const O=dp(_);O&&i.push(Le("SUBJECT_OUT_OF_FRAME",{path:f,targetId:d.id,timeRange:O,params:{subjectId:x}}))}}),i}const sC=30,iC=.05,rC=2,lC=.01,cC=1,dC=30,uC=1.5,wc={primary:{type:"static"},segments:[]};function pC(e,t,n){const o=t.position.x-e.position.x,a=t.position.y-e.position.y,s=In(e.headingDeg),i=ho(e.headingDeg),r=o*s.x+a*s.y,l=o*i.x+a*i.y,c=t.heightM-e.heightM,d=Io(e.headingDeg,t.headingDeg),u=t.pitchDeg-e.pitchDeg,p=e.lensMm>0?t.lensMm/e.lensMm:1,f=[],h=(I,y)=>{Math.abs(I)/n>
2=iC&&f.push({slice:y,size:Math.abs(I)/cC})},b=(I,y)=>{Math.abs(I)/n>=rC&&f.push({slice:y,size:Math.abs(I)/dC})};return h(r,{type:r>0?"dolly-in":"pull-back"}),h(l,{type:"truck",direction:l>0?"right":"left"}),h(c,{type:"crane",direction:c>0?"up":"down"}),b(d,{type:"pan",direction:d>0?"right":"left"}),b(u,{type:"tilt",direction:u>0?"up":"down"}),Math.abs(p-1)/n>=lC&&f.push({slice:{type:"zoom",direction:p>1?"in":"out"},size:Math.abs(Math.log(p))/Math.log(uC)}),f.length===0?null:f.reduce((I,y)=>y.size>I.size?y:I)}function zb(e){return`${e.type}|${e.direction??""}`}function fC(e){const{part:t,resolved:n,actors:o,room:a,cut:s,easing:i}=e,r=Zl(s.outSec-s.inSec,sC).map(d=>s.inSec+d),l=r.map(d=>di(t,n,o,s.cameraId,d,{easing:i,room:a})),c=[];for(let d=0;d<r.length-1;d+=1){const u=l[d],p=l[d+1],f=r[d+1]-r[d];c.push({t:r[d],hit:u&&p&&f>0?pC(u,p,f):null})}return c}function Z0(e){const t=e.part.cameras.find(i=>i.id===e.cut.cameraId);if(!t)return wc;const n=fC(e);if(t.keys.length<2){const i=t.move,r={type:i.type,...i.amount!==void 0?{amount:i.amount}:{},...i.direction!==void 0?{direction:i.direction}:{}};return i.type==="handheld"?{primary:r,segments:[r]}:i.type==="static"?wc:(i.type==="tracking"?e.resolved.coverages.some(c=>c.cameraId===t.id&&Math.min(c.endSec,e.cut.outSec)>Math.max(c.startSec,e.cut.inSec)):n.some(c=>c.hit!==null))?{primary:r,segments:[r]}:wc}const o=Sd(n,i=>zb(i.slice));if(o.length===0)return wc;const a=o.map(i=>({slice:i.first.slice,size:n.filter(r=>r.hit&&r.t>=i.startSec&&r.t<=i.endSec).filter(r=>zb(r.hit.slice)===i.key).reduce((r,l)=>r+l.hit.size,0)}));return{primary:a.reduce((i,r)=>r.size>i.size?r:i).slice,segments:a.map(i=>i.slice)}}function mC(e,t,n,o,a){const s=[],i=[...n.cuts].sort((r,l)=>r.inSec-l.inSec);return n.cuts.forEach((r,l)=>{const c=Wa(e,t,n,o,r.inSec).actors,{segments:d}=Z0({part:e,resolved:n,actors:c,room:o,cut:r,easing:"smooth"});d.length<2||s.push(Le("CAMERA_MULTI_MOVE",{path:Bn(a,`timeline.cuts[${l}]`),targetId:r.id,timeRange:{startSec:r.inSec,endSec:r.outSec},params:{cut:i.indexOf(r)+1,moves:d.map(u=>u.type).join(" â ")}}))}),s}function J0(e,t,n){return e.actors.map(o=>{const a=Zs(e,t,o.id);return n.map(s=>{const{authoredSec:i,paused:r}=a(s),l=mn(o,i,{durationSec:e.durationSec});return{t:s,paused:r,state:l}})})}const hC=.05;function bC(e,t,n,o,a){const s=[],i=J0(e,n,o);for(let r=0;r<e.actors.length;r+=1)for(let l=r+1;l<e.actors.length;l+=1){const c=e.actors[r],d=e.actors[l],u=Vt(c)+Vt(d)-hC,p=o.map((f,h)=>{const b=i[r][h].state,I=i[l][h].state,y=b.seatPropId!==void 0&&b.seatPropId===I.seatPropId,w=ys(t,b.position)||ys(t,I.position),M=!y&&!w&&Ot(b.position,I.position)<u;return{t:f,hit:M?!0:null}});for(const f of Sd(p,()=>"overlap"))s.push(Le("ACTOR_OVERLAP",{path:Bn(a,`actors[${r}]`),targetId:c.id,timeRange:{startSec:f.startSec,endSec:f.endSec},params:{otherId:d.id}}))}return s}function jb(e,t){return new Set(Es(e,t).map(n=>n.id))}function gC(e,t,n){const o=[],a=[...e.props,...t.props],s=new Map(a.map(i=>[i.id,i]));for(let i=0;i<a.length;i+=1)for(let r=i+1;r<a.length;r+=1){const l=a[i],c=a[r],d=jb(l,s),u=jb(c,s);if(d.has(c.id)||u.has(l.id)||!Va(l,c))continue;const p=ra(l,s),f=ra(c,s),h=p+Ko(l),b=f+Ko(c);Math.max(p,f)>=Math.min(h,b)||o.push(Le("PROP_OVERLAP",{path:Bn(n,"props"),targetId:l.id,params:{otherId:c.id}}))}return o}function vC(e,t,n,o,a){const s=Zl(e.durationSec,o.sampleHz??ql);return[...bC(e,n,t,s,a),...gC(n,e,a)]}const Q0=["sit","kneel","lie"],yC=.1,kC=.5;function SC(e){return Q0.includes(e.state.pose)&&!e.paused&&e.state.speedMps>yC}function IC(e,t){return e.state.pose==="sit"&&!!e.state.seatPropId&&!!t&&!ya(e.state.position,t,kC)}function wC(e,t,n,o,a){const s=Zl(e.durationSec,o.sampleHz??ql),i=J0(e,t,s),r=new Map([...n.props,...e.props].map(c=>[c.id,c])),l=[];return e.actors.forEach((c,d)=>{const u=Bn(a,`actors[${d}]`),p=i[d].map(h=>({t:h.t,hit:SC(h)?h:null}));for(const h of Sd(p,b=>b.state.pose))l.push(Le("ACTOR_STATE_DESYNC",{path:u,targetId:c.id,timeRange:{startSec:h.startSec,endSec:h.endSec},params:{reason:"moving-while-immobile",pose:h.first.state.pose}}));const f=i[d].map(h=>{const b=h.state.seatPropId?r.get(h.state.seatPropId):void 0;return{t:h.t,hit:IC(h,b)?h:null}});
2for(const h of Sd(f,b=>b.state.seatPropId??""))l.push(Le("ACTOR_STATE_DESYNC",{path:u,targetId:c.id,timeRange:{startSec:h.startSec,endSec:h.endSec},params:{reason:"away-from-seat",pose:"sit",seatPropId:h.first.state.seatPropId}}))}),l}const MC=30;function $C(e,t){return Math.abs(Io(e,t))}function EC(e,t,n,o,a,s){if(a.lightTime==="night")return[];const i=[];return n.cuts.forEach((r,l)=>{const c=Wa(e,t,n,o,(r.inSec+r.outSec)/2).camera;if(!c)return;const d=$C(c.headingDeg,a.lightDirectionDeg);d>MC||i.push(Le("LIGHT_BACKLIT",{path:Bn(s,`timeline.cuts[${l}]`),targetId:r.cameraId,timeRange:{startSec:r.inSec,endSec:r.outSec},params:{cutId:r.id,angleDeg:Math.round(d)}}))}),i}const xC={kind:"unspecified",widthM:0,depthM:0,walls:{north:!1,east:!1,south:!1,west:!1},openings:[],props:[]};function PC(e,t,n,o,a){const s=[];for(const i of t.dialogues){const r={startSec:i.settledStartSec,endSec:i.settledEndSec},l=i.actorId,c=n.cuts.filter(h=>xm({startSec:h.inSec,endSec:h.outSec},r)).filter(h=>n.coverages.find(I=>I.id===h.coverageId)?.shotType!=="insert").sort((h,b)=>h.inSec-b.inSec);if(c.length===0)continue;const u=n.coverages.find(h=>h.id===c[0].coverageId)?.subject.targetIds.find(h=>h!==l&&e.actors.some(b=>b.id===h));if(!u)continue;let p=0,f=null;for(const h of c){const b=Math.max(h.inSec,r.startSec),I=Wa(e,t,n,xC,b),y=I.actors[l],w=I.actors[u],M=I.camera;if(!y||!w||!M)continue;const x=Math.sign((w.position.x-y.position.x)*(M.position.y-y.position.y)-(w.position.y-y.position.y)*(M.position.x-y.position.x));if(x!==0&&p!==0&&x!==p&&f){const _=n.cuts.findIndex(O=>O.id===h.id);s.push(Le("AXIS_CROSSING",{path:Bn(a,`timeline.cuts[${_}]`),targetId:h.id,timeRange:{startSec:h.inSec,endSec:h.outSec},params:{pairIds:`${l},${u}`,prevCutId:f}}))}x!==0&&(p=x,f=h.id)}}return s}const CC=30,BC=5;function Ub(e,t,n,o){const a=t.subject?.targetIds??[],s=[],i=[];for(const r of a){const l=e.actors.find(d=>d.id===r);if(!l)continue;const c=mn(l,o,{durationSec:e.durationSec});s.push(c),i.push(Fa(wo(l),c.pose))}return Wm(t,o,{range:{startSec:n.startSec,endSec:n.endSec},subjects:s,subjectHeights:i,easing:"smooth"})}function _C(e,t){if(e.length!==t.length)return!1;const n=new Set(e);return t.every(o=>n.has(o))}function AC(e,t,n){const o=[],a=[...t.cuts].sort((s,i)=>s.inSec-i.inSec);for(let s=0;s<a.length-1;s+=1){const i=a[s],r=a[s+1];if(i.coverageId===r.coverageId)continue;const l=t.coverages.find(I=>I.id===i.coverageId),c=t.coverages.find(I=>I.id===r.coverageId);if(!l||!c||l.shotType!==c.shotType||!_C(l.subject.targetIds,c.subject.targetIds))continue;const d=e.cameras.find(I=>I.id===i.cameraId),u=e.cameras.find(I=>I.id===r.cameraId);if(!d||!u)continue;const p=Ub(e,d,l,i.inSec),f=Ub(e,u,c,r.inSec),h=Math.abs(Io(p.headingDeg,f.headingDeg)),b=Math.abs(p.fovH-f.fovH);if(h<CC&&b<BC){const I=t.cuts.findIndex(y=>y.id===r.id);o.push(Le("JUMP_CUT_RISK",{path:Bn(n,`timeline.cuts[${I}]`),targetId:r.id,params:{prevCutId:i.id}}))}}return o}const TC=/^parts\[(\d+)\]/;function RC(e){return JSON.stringify([e.code,e.path,e.targetId??null,e.timeRange??null])}function DC(e){const t=new Set,n=[];for(const o of e){const a=RC(o);t.has(a)||(t.add(a),n.push(o))}return n}function Gb(e,t){var n;const o={};if(t)for(const a of e){const s=a.path.match(TC);if(!s)continue;const i=t.parts[Number(s[1])];i&&(o[n=i.partId]??(o[n]=[])).push(a)}return{issues:e,byPart:o,errorCount:e.filter(a=>a.severity==="error").length,warningCount:e.filter(a=>a.severity==="warning").length}}function Iu(e,t={}){const n=E0(e),o=n.snapshot;if(!o)return Gb(n.issues,null);const a=o.room,s=[...n.issues];return o.parts.forEach((i,r)=>{const l=fs(i),c=wr(i,l),d=`parts[${r}]`;s.push(...l.issues,...c.issues.map(p=>({...p,path:Bn(d,p.path)}))),s.push(...Vl({cuts:c.cuts,durationSec:i.durationSec,fps:o.settings.fps,pathPrefix:`${d}.timeline`})),s.push(...rx(i,d)),s.push(...fx(i,d)),s.push(...R0(i,l,a,t,d)),s.push(...D0(i,l,a,t,d)),s.push(...BP(i,l,t,d)),s.push(...z0(i,l,d,t.sampleHz)),s.push(...aC(i,l,c,a,t,d)),s.push(...mC(i,l,c,a,d)),s.push(...EC(i,l,c,a,o.settings,d)),s.push(...vC(i,l,a,t,d)),s.push(...wC(i,l,a,t,d)),s.push(...PC(i,l,c,t,d)),s.push(...AC(i,c,d));const u=za(o.targetVideoModel);u&&(i.durationSec<u.minSec||i.durationSec>u.maxSec)&&s.push(Le("PART_DURATION_OUT_OF_MODEL_RANGE",{path:`${d}.durationSec`,params:{minSec:u.minSec,maxSec:u.maxSec}}))}),Gb(DC(s),o)}function wu(e,t){const n=new Set(e.byPart[t]??[]),o=new Set(Object.values(e.byPart).flat());return e.issues.filter(a=>a.severity==="error"&&(n.has(a)||!o.has(a)))}function ml(e,t){return t?e.replace("{mod}","â"):e.replace("{mod}","Ctrl+").replace("â¥","Alt+")}const OC=new Set(["actor","prop","camera","opening"]),NC=new Set(["actor","prop","camera"]);function LC(e,t){const n=t.primary!==null&&NC.has(ia(e,t.primary).kind),o=t.ids.some(a=>OC.has(ia(e,a).kind));
2return{canDuplicate:n,canDelete:o}}const KC=["grid","labels","paths","axis","issues","snap"];function cn(e,t={}){return{id:e,labelKey:`tool.blockingBoard.menu.${e}`,...t}}function FC(e){const t=l=>ml(l,e.isMac),n=e.workspace!=="layout",o=e.stageOptions,a=o.fov??"all",s=[cn("file.new"),cn("file.import"),cn("file.save",{shortcut:t("{mod}S"),separatorBefore:!0}),cn("file.downloadJson",{separatorBefore:!0}),cn("file.downloadShotlistTxt",{disabled:e.exportBlocked}),cn("file.downloadShotlistJson",{disabled:e.exportBlocked}),cn("file.downloadPng"),cn("file.downloadIr",{disabled:e.exportBlocked}),cn("file.downloadVideoIr",{disabled:e.exportBlocked}),cn("file.downloadCutPng",{disabled:e.exportBlocked||e.shotbookRunning||e.cutPngNumber==null}),cn("file.downloadShotbookPng",{disabled:e.exportBlocked||e.shotbookRunning}),cn("file.downloadShotbookZip",{disabled:e.exportBlocked||e.shotbookRunning}),cn("file.back",{separatorBefore:!0})],i=[cn("edit.undo",{shortcut:t("{mod}Z"),disabled:!e.canUndo}),cn("edit.redo",{shortcut:t("â§{mod}Z"),disabled:!e.canRedo}),cn("edit.history",{shortcut:t("â§{mod}H")}),cn("edit.duplicate",{shortcut:t("â§D"),disabled:!e.canDuplicate,separatorBefore:!0}),cn("edit.delete",{shortcut:t("X"),disabled:!e.canDelete}),cn("edit.roomSettings",{separatorBefore:!0}),cn("edit.imagePath")],r=[cn("view.stage2d",{kind:"radio",checked:e.stageMode==="2d",disabled:n}),cn("view.stage3d",{kind:"radio",checked:e.stageMode==="3d",disabled:n}),cn("view.stageSplit",{kind:"radio",checked:e.stageMode==="split",disabled:n}),...KC.map((l,c)=>cn(`view.${l}`,{kind:"check",checked:o[l]!==!1,separatorBefore:c===0})),cn("view.fovAll",{kind:"radio",checked:a==="all",separatorBefore:!0}),cn("view.fovSelected",{kind:"radio",checked:a==="selected"}
2),cn("view.fovNone",{kind:"radio",checked:a==="none"}),cn("view.pip",{kind:"check",checked:e.pipOpen,separatorBefore:!0}),cn("view.perfLight",{kind:"check",checked:e.perfLight}),cn("view.outliner",{kind:"check",checked:e.panels.left,disabled:e.workspace!=="layout",separatorBefore:!0}),cn("view.properties",{kind:"check",checked:e.rightOpen,disabled:e.workspace==="timing"||e.workspace==="output"}),cn("view.timeline",{kind:"check",checked:!e.timelineCollapsed}),cn("view.hide",{shortcut:t("H"),separatorBefore:!0,disabled:!e.hasSelection}),cn("view.showAll",{shortcut:t("â¥H")}),cn("view.shortcuts",{shortcut:"?",separatorBefore:!0})];return[{id:"file",labelKey:"tool.blockingBoard.menu.title.file",items:s},{id:"edit",labelKey:"tool.blockingBoard.menu.title.edit",items:i},{id:"view",labelKey:"tool.blockingBoard.menu.title.view",items:r},{id:"add",labelKey:"tool.blockingBoard.menu.title.add",items:[]}]}const HC=["layout","camera","timing","output"],up="38px",Vb="40px",zC={layout:["top","stage","left","right","tl"],camera:["top","view","plan","shots","right","tl"],timing:["top","plan","view","tl"],output:["top","export"]};function eS(e,t,n={}){if(n.narrow){const s=zC[e];return{columns:"minmax(0, 1fr)",rows:s.map(()=>"auto").join(" "),areas:[...s]}}const o=n.timelineCollapsed===!0,a="44px";switch(e){case"layout":return{columns:`${t.left?"256px":"0"} minmax(0, 1fr) ${t.right?"300px":Vb}`,rows:`${a} minmax(0, 1fr) ${o?up:"246px"} 24px`,areas:["top top top","left stage right","tl tl tl","status status status"]};case"camera":return{columns:`232px minmax(0, 1fr) minmax(0, 1.25fr) ${t.right?"300px":Vb}`,rows:`${a} minmax(0, 1fr) ${o?up:"170px"} 24px`,areas:["top top top top","shots plan view right","shots tl tl right","status status status status"]};case"timing":return{columns:"minmax(0, 1fr) minmax(0, 1fr)",rows:o?`${a} minmax(0, 1fr) ${up} 24px`:`${a} 330px minmax(0, 1fr) 24px`,areas:["top top","plan view","tl tl","status status"]};case"output":return{columns:"minmax(0, 1fr)",rows:`${a} minmax(0, 1fr) 24px`,areas:["top","export","status"]}}}function jC(e){return{gridTemplateColumns:e.columns,gridTemplateRows:e.rows,gridTemplateAreas:e.areas.map(t=>`"${t}"`).join(" ")}}function UC(e,t={}){const n=eS(e,{left:!0,right:!0},t),o=[];for(const a of n.areas)for(const s of a.split(" "))o.includes(s)||o.push(s);return o}const tS=[2e3,5e3,15e3,3e4];function GC(e){return e!=="saved"}function Wb(e){return e==="saved"?"go":e==="dirty"||e==="saving"?"flush":"confirm"}function VC(e){return e==="too-large"?"tool.blockingBoard.save.tooLarge":`tool.blockingBoard.save.${e}`}function WC(e,t=tS){return e>=0&&e<t.length?t[e]:null}function XC(e,t){return t&&e!=="conflict"}const YC=6e4;function qC(e){const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}function ZC(e,t,n){return e!=="saved"?{key:VC(e)}:t?n-t<YC?{key:"tool.blockingBoard.save.savedJustNow"}:{key:"tool.blockingBoard.save.savedAt",params:{time:qC(t)}}:{key:"tool.blockingBoard.save.saved"}}const JC={key:0,class:"bb-save-badge-large"},QC=3e4,e2=nt({__name:"BbSaveBadge",props:{state:{},lastSavedAt:{},sizeLevel:{}},emits:["retry"],setup(e,{emit:t}){const n=e,o=t,a=G(Date.now());let s=null;Jn(()=>{s=Lk(()=>{a.value=Date.now()},QC)}),wn(()=>{s&&clearInterval(s),s=null});const i=C(()=>ZC(n.state,n.lastSavedAt??null,a.value));return(r,l)=>(v(),k("span",{class:qe(["bb-save-badge",`bb-save-badge--${e.state}`])},[l[1]||(l[1]=m("span",{class:"bb-save-badge-dot"},null,-1)),We(" "+S(i.value.params?r.$t(i.value.key,i.value.params):r.$t(i.value.key))+" ",1),e.sizeLevel==="large"?(v(),k("span",JC,S(r.$t("tool.blockingBoard.save.large")),1)):H("",!0),e.state==="error"?(v(),k("button",{key:1,type:"button",class:"bb-save-badge-retry",onClick:l[0]||(l[0]=c=>o("retry"))},S(r.$t("tool.blockingBoard.save.retry")),1)):H("",!0)],2))}}),t2=Object.assign(ot(e2,[["__scopeId","data-v-8571e824"]]),{__name:"BbSaveBadge"}),n2={class:"bb-menu shadow-smd1",role:"menu"},o2={key:0,class:"bb-menu-separator",role:"separator"},a2=["data-item","role","aria-checked","aria-disabled","onMouseenter","onClick"],s2={class:"bb-menu
2-check","aria-hidden":"true"},i2={class:"bb-menu-label"},r2={key:0,class:"bb-menu-shortcut"},l2=nt({__name:"BbMenuList",props:{items:{},activeIndex:{}},emits:["pick","hover"],setup(e,{emit:t}){const n=t;function o(s){return s.kind==="check"?"menuitemcheckbox":s.kind==="radio"?"menuitemradio":"menuitem"}function a(s){s.disabled||n("pick",s.id)}return(s,i)=>{const r=vn;return v(),k("div",n2,[(v(!0),k(ae,null,Me(e.items,(l,c)=>(v(),k(ae,{key:l.id},[l.separatorBefore&&c>0?(v(),k("div",o2)):H("",!0),m("button",{type:"button",class:qe(["bb-menu-item",{"bb-menu-item--active":c===e.activeIndex}]),"data-item":l.id,role:o(l),"aria-checked":l.kind?l.checked?"true":"false":void 0,"aria-disabled":l.disabled?"true":void 0,onMouseenter:d=>n("hover",c),onClick:d=>a(l)},[m("span",s2,[l.kind&&l.checked?(v(),et(r,{key:0,name:"i-lucide-check",class:"size-[12px]"})):H("",!0)]),m("span",i2,S(s.$t(l.labelKey)),1),l.shortcut?(v(),k("span",r2,S(l.shortcut),1)):H("",!0)],42,a2)],64))),128))])}}}),Sf=Object.assign(ot(l2,[["__scopeId","data-v-a8a8752b"]]),{__name:"BbShellBbMenuList"}),c2=["aria-label","title"],d2={key:1,class:"bb-topbar-path-sep","aria-hidden":"true"},u2=["disabled","title","aria-label"],p2=["data-menu","aria-expanded","aria-label","onClick","onMouseenter"],f2=["disabled"],m2=["aria-label"],h2=["data-workspace","aria-selected","onClick"],b2={class:"bb-topbar-history-group"},g2=["disabled","title","aria-label"],v2=["disabled","title","aria-label"],y2=["aria-pressed","title","aria-label"],k2={key:3,class:"bb-topbar-export-reason"},S2=["title"],I2={class:"bb-topbar-panels"},w2=["aria-pressed","aria-label","title"],M2=["aria-pressed","aria-label","title"],$2=nt({__name:"BbTopBar",props:{projectName:{},saveState:{},lastSavedAt:{default:null},sizeLevel:{},canExport:{type:Boolean,default:!1},errorCount:{default:0},leftOpen:{type:Boolean,default:!0},rightOpen:{type:Boolean,default:!0},canRename:{type:Boolean,default:!0},workspace:{default:"layout"},menus:{default:()=>[]},canUndo:{type:Boolean,default:!1},canRedo:{type:Boolean,default:!1},undoLabel:{default:null},redoLabel:{default:null},isMac:{type:Boolean,default:!1},narrow:{type:Boolean,default:!1},historyOpen:{type:Boolean,default:!1}},emits:["back","retry","rename","import","export","toggle-left","toggle-right","update:workspace","menu-action","undo","redo","open-add-menu","toggle-history"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.errorCount>0),s=C(()=>n.menus.filter(D=>D.id!=="add")),i=C(()=>n.narrow?[{id:"more",labelKey:"tool.blockingBoard.menu.title.more"}]:s.value.map(D=>({id:D.id,labelKey:D.labelKey}))),r=C(()=>n.menus.find(D=>D.id==="add")??null),l=C(()=>r.value?.labelKey??"tool.blockingBoard.menu.title.add"),c=G(null),d=G(-1),u=C(()=>c.value===null?[]:c.value==="more"?s.value.flatMap((D,Z)=>D.items.map((L,V)=>Z>0&&V===0?{...L,separatorBefore:!0}:L)):s.value.find(D=>D.id===c.value)?.items??[]);function p(D){c.value=D,d.value=-1}function f(D){p(c.value===D?null:D)}function h(D){c.value!==null&&c.value!==D&&p(D)}function b(D){const Z=u.value.find(L=>L.id===D);!Z||Z.disabled||(p(null),o("menu-action",D))}function I(D){const Z=u.value;if(Z.length===0)return;let L=d.value;for(let V=0;V<Z.length;V++)if(L=(L+D+Z.length)%Z.length,!Z[L].disabled){d.value=L;return}}Qo("menubar",()=>c.value!==null,D=>{if(D.id==="overlay.close")p(null);else if(D.id==="overlay.move")I(D.arg?.delta??1);else if(D.id==="overlay.confirm"){const Z=u.value[d.value];if(!Z)return!1;b(Z.id)}});const y=G(null);function w(D){y.value&&D.target instanceof Node&&y.value.contains(D.target)||p(null)}Je(c,(D,Z)=>{D!==null&&Z===null?document.addEventListener("pointerdown",w,!0):D===null&&Z!==null&&document.removeEventListener("pointerdown",w,!0)}),wn(()=>document.removeEventListener("pointerdown",w,!0));function M(){p(null),o("open-add-menu")}function x(D){const Z=D("tool.blockingBoard.menu.edit.undo"),L=n.undoLabel?` · ${n.undoLabel}`:"";return`${Z}${L} (${ml("{mod}Z",n.isMac)})`}function _(D){const Z=D("tool.blockingBoard.menu.edit.redo"),L=n.redoLabel?` · ${n.redoLabel}`:"";return`${Z}${L} (${ml("â§{mod}Z",n.isMac)})`}const O=C(()=>ml("â§{mod}H",n.isMac)),A=G(!1),N=G(""),K=G(!1),F=G(null);
2async function B(){n.canRename&&(N.value=n.projectName,A.value=!0,await hn(),F.value?.focus(),F.value?.select())}function j(D){if(!A.value)return;A.value=!1;const Z=N.value.trim();D&&Z&&Z!==n.projectName&&o("rename",Z)}function ee(D){if(D.key==="Enter"){if(K.value||D.isComposing)return;j(!0)}else D.key==="Escape"&&j(!1)}return(D,Z)=>{const L=vn;return v(),k("div",{class:qe(["bb-topbar",{"bb-topbar--narrow":e.narrow}])},[m("button",{type:"button",class:"bb-topbar-back bb-topbar-icon-btn btn-md","aria-label":D.$t("tool.blockingBoard.list.title"),title:D.$t("tool.blockingBoard.list.title"),onClick:Z[0]||(Z[0]=V=>o("back"))},[ce(L,{name:"i-lucide-chevron-left",class:"size-[16px]"})],8,c2),e.narrow?H("",!0):(v(),k("button",{key:0,type:"button",class:"bb-topbar-title btn-md",onClick:Z[1]||(Z[1]=V=>o("back"))},S(D.$t("tool.blockingBoard.topbar.title")),1)),e.narrow?H("",!0):(v(),k("span",d2,"/")),e.narrow?H("",!0):(v(),k(ae,{key:2},[A.value?Zt((v(),k("input",{key:1,ref_key:"nameInput",ref:F,"onUpdate:modelValue":Z[2]||(Z[2]=V=>N.value=V),type:"text",class:"bb-topbar-name-input",onKeydown:ee,onBlur:Z[3]||(Z[3]=V=>j(!0)),onCompositionstart:Z[4]||(Z[4]=V=>K.value=!0),onCompositionend:Z[5]||(Z[5]=V=>K.value=!1)},null,544)),[[Nn,N.value]]):(v(),k("button",{key:0,type:"button",class:"bb-topbar-name btn-md",disabled:!e.canRename,title:e.projectName,"aria-label":D.$t("tool.blockingBoard.list.rename"),onClick:B},S(e.projectName||D.$t("tool.blockingBoard.import.blankDefaultName")),9,u2))],64)),m("div",{ref_key:"menusRef",ref:y,class:"bb-topbar-menus"},[(v(!0),k(ae,null,Me(i.value,V=>(v(),k("div",{key:V.id,class:"bb-topbar-menu-anchor"},[m("button",{type:"button",class:qe(["bb-topbar-menu btn-md",{"bb-topbar-menu--open":c.value===V.id}]),"data-menu":V.id,"aria-haspopup":"menu","aria-expanded":c.value===V.id?"true":"false","aria-label":V.id==="more"?D.$t(V.labelKey):void 0,onClick:pe=>f(V.id),onMouseenter:pe=>h(V.id)},[V.id==="more"?(v(),et(L,{key:0,name:"i-lucide-menu",class:"size-[16px]"})):(v(),k(ae,{key:1},[We(S(D.$t(V.labelKey)),1)],64))],42,p2),c.value===V.id?(v(),et(Sf,{key:0,class:"bb-topbar-menu-list",items:u.value,"active-index":d.value,onPick:b,onHover:Z[6]||(Z[6]=pe=>d.value=pe)},null,8,["items","active-index"])):H("",!0)]))),128)),m("button",{type:"button",class:"bb-topbar-menu btn-md","data-menu":"add","aria-haspopup":"menu","aria-expanded":"false",disabled:e.workspace==="output",onClick:M},S(D.$t(l.value)),9,f2)],512),Z[15]||(Z[15]=m("div",{class:"bb-topbar-spacer"},null,-1)),m("div",{class:"bb-topbar-workspaces",role:"tablist","aria-label":D.$t("tool.blockingBoard.workspace.label")},[(v(!0),k(ae,null,Me(g(HC),V=>(v(),k("button",{key:V,type:"button",role:"tab",class:"bb-topbar-workspace btn-md","data-workspace":V,"aria-selected":e.workspace===V?"true":"false",onClick:pe=>o("update:workspace",V)},S(D.$t(`tool.blockingBoard.workspace.${V}`)),9,h2))),128))],8,m2),Z[16]||(Z[16]=m("div",{class:"bb-topbar-spacer"},null,-1)),m("div",b2,[m("button",{type:"button",class:"bb-topbar-undo bb-topbar-icon-btn btn-md",disabled:!e.canUndo,title:x(D.$t),"aria-label":x(D.$t),onClick:Z[7]||(Z[7]=V=>o("undo"))},[ce(L,{name:"i-lucide-undo-2",class:"size-[14px]"})],8,g2),m("button",{type:"button",class:"bb-topbar-redo bb-topbar-icon-btn btn-md",disabled:!e.canRedo,title:_(D.$t),"aria-label":_(D.$t),onClick:Z[8]||(Z[8]=V=>o("redo"))},[ce(L,{name:"i-lucide-redo-2",class:"size-[14px]"})],8,v2),m("button",{type:"button",class:"bb-topbar-history bb-topbar-icon-btn btn-md","aria-pressed":e.historyOpen,title:`${D.$t("tool.blockingBoard.history.title")} (${O.value})`,"aria-label":`${D.$t("tool.blockingBoard.history.title")} (${O.value})`,onClick:Z[9]||(Z[9]=V=>o("toggle-history"))},[ce(L,{name:"i-lucide-history",class:"size-[14px]"})],8,y2)]),ce(t2,{state:e.saveState,"last-saved-at":e.lastSavedAt,"size-level":e.sizeLevel,onRetry:Z[10]||(Z[10]=V=>o("retry"))},null,8,["state","last-saved-at","size-level"]),m("button",{type:"button",class:"bb-topbar-btn bb-topbar-import btn-md",onClick:Z[11]||(Z[11]=V=>o("import"))},S(D.$t("tool.blockingBoard.import.title")),1),e.canExport&&a.value&&!e.narrow?(v(),k("span",k2,S(D.$t("tool.blockingBoard.validation.exportBlocked")),1
2)):H("",!0),e.canExport?(v(),k("button",{key:4,type:"button",class:"bb-topbar-btn bb-topbar-export bb-topbar-btn--primary btn-md",title:a.value?D.$t("tool.blockingBoard.validation.exportBlocked"):void 0,onClick:Z[12]||(Z[12]=V=>o("export"))},[ce(L,{name:"i-lucide-upload",class:"size-[14px]"}),We(" "+S(D.$t("tool.blockingBoard.export.title")),1)],8,S2)):H("",!0),m("div",I2,[m("button",{type:"button",class:"bb-topbar-toggle-left bb-topbar-icon-btn btn-md","aria-pressed":e.leftOpen,"aria-label":D.$t("tool.blockingBoard.topbar.toggleLeft"),title:D.$t("tool.blockingBoard.topbar.toggleLeft"),onClick:Z[13]||(Z[13]=V=>o("toggle-left"))},[ce(L,{name:"i-lucide-panel-left",class:"size-[16px]"})],8,w2),m("button",{type:"button",class:"bb-topbar-toggle-right bb-topbar-icon-btn btn-md","aria-pressed":e.rightOpen,"aria-label":D.$t("tool.blockingBoard.topbar.toggleRight"),title:D.$t("tool.blockingBoard.topbar.toggleRight"),onClick:Z[14]||(Z[14]=V=>o("toggle-right"))},[ce(L,{name:"i-lucide-panel-right",class:"size-[16px]"})],8,M2)])],2)}}}),E2=Object.assign(ot($2,[["__scopeId","data-v-e9d53e0d"]]),{__name:"BbTopBar"}),x2=["data-workspace"],P2=["data-bb-area"],C2=["data-state"],B2={class:"bb-workbench-stage"},_2={class:"bb-workbench-panel"},A2={role:"tablist",class:"bb-workbench-tablist"},T2=["aria-selected"],R2=["aria-selected"],D2={key:0,class:"bb-workbench-tab-dot"},O2={class:"bb-workbench-strip"},N2=nt({__name:"BbWorkbench",props:{layout:{default:"script-to-scene"},state:{default:"empty"},hasValidationIssues:{type:Boolean,default:!1},leftCollapsed:{type:Boolean,default:!1},rightCollapsed:{type:Boolean,default:!1},workspace:{default:"layout"},narrow:{type:Boolean,default:!1},timelineCollapsed:{type:Boolean,default:!1}},setup(e){const t=e,n=C(()=>t.state==="result"||t.state==="error"?"validation":"settings"),o=C(()=>({narrow:t.narrow,timelineCollapsed:t.timelineCollapsed})),a=C(()=>jC(eS(t.workspace,{left:!t.leftCollapsed,right:!t.rightCollapsed},o.value))),s=C(()=>UC(t.workspace,o.value)),i={top:"top",left:"left",stage:"stage",right:"right",tl:"timeline",status:"status",shots:"shots",plan:"plan",view:"view",export:"export"},r={left:"outliner",right:"properties",tl:"timeline",plan:"stage2d",view:"stage3d"};function l(d){return d==="left"?!t.leftCollapsed:!0}function c(d){return[`bb-workbench-${i[d]}`,{"bb-workbench-right--rail":d==="right"&&t.rightCollapsed}]}return(d,u)=>e.layout==="board"?(v(),k("div",{key:0,class:qe(["bb-workbench bb-workbench--board",{"bb-workbench--left-collapsed":e.leftCollapsed,"bb-workbench--right-collapsed":e.rightCollapsed,"bb-workbench--narrow":e.narrow}]),"data-workspace":e.workspace,style:wt(g(a))},[(v(!0),k(ae,null,Me(g(s),p=>Zt((v(),k("div",{key:p,class:qe(c(p)),style:wt({gridArea:p}),"data-bb-area":r[p]},[cs(d.$slots,i[p],{},void 0,!0)],14,P2)),[[cr,l(p)]])),128))],14,x2)):(v(),k("div",{key:1,class:"bb-workbench","data-state":e.state},[m("div",B2,[cs(d.$slots,"stage",{},void 0,!0)]),m("div",_2,[m("div",A2,[m("div",{role:"tab","aria-selected":g(n)==="settings",class:"bb-workbench-tab"},S(d.$t("tool.blockingBoard.tabSettings")),9,T2),m("div",{role:"tab","aria-selected":g(n)==="validation",class:"bb-workbench-tab"},[We(S(d.$t("tool.blockingBoard.tabValidation"))+" ",1),e.hasValidationIssues?(v(),k("span",D2)):H("",!0)],8,R2)]),cs(d.$slots,"panel",{},void 0,!0)]),m("div",O2,[cs(d.$slots,"strip",{},void 0,!0)])],8,C2))}}),L2=Object.assign(ot(N2,[["__scopeId","data-v-08b8aeca"]]),{__name:"BbWorkbench"}),Xb=["#e85d75","#4f8cff","#51cf66","#ffd43b","#b197fc","#ff922b","#20c997","#f783ac"];function Xm(e){return Xb[e%Xb.length]}const Ta=[{key:"living",labels:{ko:"ê±°ì¤Â·ì¹¨ì¤",en:"living & bedroom"}},{key:"kitchen",labels:{ko:"주방·ìë¹",en:"kitchen & dining"}},{key:"bath",labels:{ko:"ìì¤",en:"bathroom"}},{key:"office",labels:{ko:"ì¬ë¬´Â·íêµ",en:"office & school"}},{key:"shop",labels:{ko:"ê°ê²",en:"shop"}},{key:"medical",labels:{ko:"ë³ì",en:"medical"}},{key:"outdoor",labels:{ko:"ì¼ì¸Â·ê±°ë¦¬",en:"outdoor & street"}},{key:"structure",labels:{ko:"구조물",en:"structure"}},{key:"handheld",labels:{ko:"ìì§í·ì¥ë¹",en:"handheld & gear"}}
2],No={north:!0,east:!0,south:!0,west:!0},ca={north:!1,east:!1,south:!1,west:!1};function rt(e,t,n,o=0){return{kind:e,x:t,y:n,headingDeg:o}}function Xn(e,t,n,o){return{kind:e,wall:t,offsetM:n,widthM:o}}const Ti=[{kind:"room",labels:{ko:"ë°©",en:"room"},widthM:7.5,depthM:6.5,walls:No,defaultProps:[rt("bed",-1.75,-1.375),rt("wardrobe",1.5,-2.6),rt("desk",2.375,.75,90),rt("chair",1.55,.75,90),rt("floor-lamp",-3.1,2.25)],defaultOpenings:[Xn("window","north",2.15,1.2),Xn("door","south",5.5,.9)]},{kind:"living-room",labels:{ko:"ê±°ì¤",en:"living room"},widthM:9.5,depthM:7.5,walls:No,defaultProps:[rt("sofa",-1.25,1.875),rt("table",-1.25,.2),rt("tv",-1.25,-2.75),rt("bookcase",3.75,-1.75,90),rt("floor-lamp",3.9,2.6)],defaultOpenings:[Xn("window","north",1.15,1.2),Xn("glass-door","south",7.3,.9)]},{kind:"kitchen",labels:{ko:"주방",en:"kitchen"},widthM:7.5,depthM:5.5,walls:No,defaultProps:[rt("sink",-2.5,-1.7,90),rt("fridge",2.625,-2.05),rt("table",0,.875),rt("chair",0,2),rt("chair",0,-.25,180)],defaultOpenings:[Xn("door","south",5.9,.9)]},{kind:"bathroom",labels:{ko:"íì¥ì¤",en:"bathroom"},widthM:4,depthM:3.5,walls:No,defaultProps:[rt("toilet",-1.6,-1,0),rt("washbasin",1.725,.35,180),rt("bathtub",1.1,-1.3,0)],defaultOpenings:[Xn("door","south",1.55,.8)]},{kind:"hallway",labels:{ko:"ë³µë",en:"hallway"},widthM:11.5,depthM:2.75,walls:No,defaultProps:[],defaultOpenings:[Xn("door","west",.9,.9)]},{kind:"office",labels:{ko:"ì¬ë¬´ì¤",en:"office"},widthM:10.5,depthM:7.5,walls:No,defaultProps:[rt("desk",-2.75,-1.75),rt("chair",-2.75,-.7),rt("desk",.75,-1.75),rt("chair",.75,-.7),rt("desk",-2.75,1.375),rt("chair",-2.75,2.425),rt("desk",.75,1.375),rt("chair",.75,2.425),rt("bookcase",4.625,-.5,90)],defaultOpenings:[Xn("window-wide","north",2.55,2.4),Xn("door","south",9.05,.9)]},{kind:"executive-office",labels:{ko:"ì§ë¬´ì¤",en:"executive office"},widthM:9,depthM:7,walls:No,defaultProps:[rt("desk-executive",0,-1),rt("chair",0,0),rt("sofa",0,2,180)],defaultOpenings:[Xn("door","south",7.5,.9)]},{kind:"cafe",labels:{ko:"ì¹´í",en:"cafe"},widthM:10.5,depthM:8,walls:No,defaultProps:[rt("cafe-counter",-3.8,-2.75,0),rt("stool",-3,-3.4,180),rt("stool",-3,-2.75,180),rt("stool",-3,-2.1,180),rt("table",1.5,-1.5),rt("chair",1.5,-.45),rt("chair",1.5,-2.55,180),rt("table",-1.25,1.75),rt("chair",-1.25,2.8),rt("chair",-1.25,.7,180),rt("table",3.5,2),rt("chair",3.5,3.05)],defaultOpenings:[Xn("window-wide","north",5.55,2.4),Xn("glass-door","south",4.8,.9)]},{kind:"restaurant",labels:{ko:"ìë¹",en:"restaurant"},widthM:10.5,depthM:8,walls:No,defaultProps:[rt("kitchen-counter",-2.5,-2.75,0),rt("fridge",-4.6,-2.7),rt("dining-table",1.5,-1.5),rt("chair",1.5,-.45),rt("chair",1.5,-2.55,180),rt("dining-table",-1.25,1.75),rt("chair",-1.25,2.8),rt("chair",-1.25,.7,180),rt("dining-table",3.5,2),rt("chair",3.5,3.05)],defaultOpenings:[Xn("window-wide","north",5.55,2.4),Xn("glass-door","south",4.8,.9)]},{kind:"classroom",labels:{ko:"êµì¤",en:"classroom"},widthM:9,depthM:7.5,walls:No,defaultProps:[rt("school-desk",0,-2.9,180),rt("blackboard",1.3,-1.9,0),rt("lectern",1.3,.3,180),...[-2.75,0,2.75].flatMap(e=>[rt("school-desk",e,-.75,270),rt("chair",e,.2,270),rt("school-desk",e,1.5,270),rt("chair",e,2.45,270)])],defaultOpenings:[Xn("window","west",1.5,1.2),Xn("window","west",4,1.2),Xn("door","south",7.7,.9)]},{kind:"hospital-room",labels:{ko:"ë³ìì¤",en:"hospital room"},widthM:6,depthM:5.5,walls:No,defaultProps:[rt("hospital-bed",-.875,-.625),rt("iv-stand",.5,-.625),rt("chair",1.5,.875,270),rt("wardrobe",2.25,-2.25)],defaultOpenings:[Xn("window","north",1.6,1.2),Xn("door","south",4.05,.9)]},{kind:"convenience-store",labels:{ko:"í¸ìì ",en:"convenience store"},widthM:9,depthM:7,walls:No,defaultProps:[rt("checkout-counter",-2.5,2.65,0),...[-2.5,0,2.5].map(e=>rt("display-shelf",e,0)),rt("showcase-fridge",0,-3,0)],defaultOpenings:[Xn("glass-door","south",4,.9)]},{kind:"rooftop",labels:{ko:"ì¥ì",en:"rooftop"},widthM:10,depthM:8,walls:ca,defaultProps:[],defaultOpenings:[]},{kind:"parking-lot",labels:{ko:"주차ì¥",en:"parking lot"},widthM:12,depthM:8.5,walls:ca,defaultProps:[rt("car",-3,0),rt("car",3,0)],defaultOpenings:[]},{kind:"alley",labels:{ko:"골목",en:"alley"},widthM:11,depthM:3,walls:ca,defaultProps:[],defaultOpenings:[]},{kind:"road",labels:{ko:"ëë¡",en:"road"},widthM:13,depthM:4,walls:ca,defaultProps:[],defaultOpenings:[]}
2,{kind:"park",labels:{ko:"ê³µì",en:"park"},widthM:12,depthM:9,walls:ca,defaultProps:[rt("bench",0,1),rt("tree",-3,-2),rt("tree",3,-2)],defaultOpenings:[]},{kind:"forest",labels:{ko:"ì²",en:"forest"},widthM:12,depthM:9,walls:ca,defaultProps:[-4,0,4].flatMap(e=>[rt("tree",e,-3),rt("tree",e,3)]),defaultOpenings:[]},{kind:"outdoor",labels:{ko:"ì¼ì¸",en:"outdoor"},widthM:12,depthM:8.5,walls:ca,defaultProps:[],defaultOpenings:[]},{kind:"neighborhood",labels:{ko:"ëë¤",en:"neighborhood"},widthM:24.5,depthM:15.5,walls:ca,defaultProps:[rt("abandoned-house",-7.5,-4.75),rt("wall",-7.5,-.75,90),rt("wall",-3.75,-.75,90),rt("van",7,4.75,180),rt("streetlight",3.75,-3.75),rt("streetlight",-4.5,4.25)],defaultOpenings:[]},{kind:"river",labels:{ko:"ê°",en:"river"},widthM:25,depthM:6.5,walls:ca,defaultProps:[],defaultOpenings:[]},{kind:"bridge",labels:{ko:"ë¤ë¦¬",en:"bridge"},widthM:14,depthM:3,walls:ca,defaultProps:[],defaultOpenings:[]},{kind:"palace-yard",labels:{ko:"ê¶ê¶ ë§ë¹",en:"palace yard"},widthM:18,depthM:13,walls:ca,defaultProps:[rt("wall",-5.9,-3.4,90),rt("wall",5.9,-3.4,90),rt("pillar",-6.25,-4.25),rt("pillar",-2.125,-4.25),rt("pillar",2.125,-4.25),rt("pillar",6.25,-4.25),rt("wall",-5.9,1),rt("wall",5.9,1),rt("door",-.45,5.95,90)],defaultOpenings:[]},{kind:"abandoned-house",labels:{ko:"íê°",en:"abandoned house"},widthM:6.5,depthM:5.5,walls:No,defaultProps:[],defaultOpenings:[Xn("door","south",2.8,.9)]}],Qc={kind:"room",labels:{ko:"ë¹ ë°©",en:"empty room"},widthM:6,depthM:4,walls:No,defaultProps:[],defaultOpenings:[]};function Ym(e){return Ti.find(t=>t.kind===e)??null}function nS(e){return Ym(e)?.labels??null}const Da=40,Cd={x:640,y:360};function rs(e,t=Cd){return{x:(e.x-t.x)/Da,y:(e.y-t.y)/Da}}function Yb(e){return typeof e=="object"&&e!==null}function K2(e){if(!Yb(e))return"unknown";if(e.version==="blocking-board/scene-draft/1")return"scene-draft";if(e.schema==="xconda-scene-v1")return"scene-v1";const t=Yb(e.state)?e.state:null;return e.app==="blocking-board"&&e.version===2||Array.isArray(t?.items)?"preset-v2":e.schemaVersion===Ha||g0.includes(e.schemaVersion)?"snapshot":"unknown"}const F2=["REFERENCE_MISSING","CUT_TRACK_EMPTY","CUT_GAP"];function H2(e){return e.map(t=>F2.includes(t.code)?{...t,severity:"warning"}:t)}const qb={stand:"stand",stands:"stand",standing:"stand",stood:"stand",idle:"stand",기립:"stand",ì:"stand",ìë¤:"stand","ì ìë¤":"stand",sit:"sit",sits:"sit",sitting:"sit",seated:"sit",sat:"sit",perch:"sit",perched:"sit",ì°©ì:"sit",ìë¤:"sit",ìì:"sit","ìì ìë¤":"sit",kneel:"kneel",kneeling:"kneel",무ë¦ê¿ë¤:"kneel",무ë¦:"kneel",crouch:"crouch",crouching:"crouch",ì
í¬ë¦¬ë¤:"crouch",ì
í¬ë¦¼:"crouch",lie:"lie",lying:"lie",prone:"lie",ëë¤:"lie",ëì:"lie",ìë리ë¤:"lie"};function oS(e){return e?qb[e]??qb[e.toLowerCase()]??"stand":"stand"}const Zb={ws:"wide",ìì´ë:"wide",wide:"wide",fs:"full","í ì·":"full",full:"full",미ëììì´ë:"full",ms:"medium",미ëì:"medium",medium:"medium",two:"medium",bust:"medium",waist:"medium",cu:"close-up",í´ë¡ì¦ì
:"close-up","close-up":"close-up",tight:"close-up",ecu:"extreme-close-up","ìµì¤í¸ë¦¼ í´ë¡ì¦ì
":"extreme-close-up","extreme-close-up":"extreme-close-up",insert:"insert"};function If(e){return e?Zb[e.toLowerCase()]??Zb[e]??"medium":"medium"}const Jb={문:"door",ëì´:"door",door:"door",ì¶ì
문:"door-entrance",íê´ë¬¸:"door-entrance","door-entrance":"door-entrance",ì 리문:"glass-door","glass-door":"glass-door",창문:"window",ì°½:"window",window:"window",ììì°½:"window-small","window-small":"window-small",ì ë©´ì 리창:"window-wide","window-wide":"window-wide"};function qm(e){const t=Tt(e);if(t)return t.kind;const n=Jb[e]??Jb[e.toLowerCase()];return n||e.toLowerCase()}function aS(e){const t=Ti.find(n=>n.labels.ko===e||n.labels.en===e);return t?t.kind:qm(e)}const sS=new Set(["walk","run","enter","exit","approach","move"]),Qb={enter:"enter",ë¤ì´ì¨ë¤:"enter",ë¤ì´ì ë¤:"enter",exit:"exit",ëê°ë¤:"exit",í´ì¥:"exit",walk:"walk",ê±·ëë¤:"walk",걸ì´ê°ë¤:"walk",ë¤ê°ê°ë¤:"walk",approach:"walk",run:"run",ë´ë¤:"run",ë¬ë¦°ë¤:"run",sit:"sit-down",ìëë¤:"sit-down",stand:"stand-up",ì¼ì´ì ë¤:"stand-up",nod:"nod",ëë:"nod",목ë¡:"nod",look_up:"look-up","ê³ ê°ë¥¼ ë ë¤":"look-up",look_down:"look-down",read:"read",ì½ëë¤:"read",open_door:"open-door",close_door:"close-door",act:"perform"};function z2(e){const t=Qb[e]??Qb[e.toLowerCase()];return t||e.toLowerCase().replace(/_/g,"-")}const j2=/^(\d+(?:\.\d+)?)\s*[-~]\s*(\d+(?:\.\d+)?)\s*(ì´|s)?$/,U2=/^(\d+(?:\.\d+)?)s?\s*to\s*(\d+(?:\.\d+)?)s?$/,G2=/^(\d{1,2}):(\d{2})\s*[-~]\s*(\d{1,2}):(\d{2})$/,V2=/^(\d+(?:\.\d+)?)\s*(ì´|s)$/;function pp(e,t){return e>=t?null:{startSec:e,endSec:t}}function W2(e){const t=e.trim(),n=t.match(j2);if(n)return pp(Number(n[1]),Number(n[2]));const o=t.match(U2);if(o)return pp(Number(o[1]),Number(o[2]));const a=t.match(G2);
2if(a)return pp(Number(a[1])*60+Number(a[2]),Number(a[3])*60+Number(a[4]));const s=t.match(V2);return s?{startSec:null,endSec:Number(s[1])}:null}function X2(){const e=new Map;return{register(t,n,o,a){e.set(`${t}:${String(n)}`,o);for(const s of[a?.name,...a?.aliases??[]])s&&e.set(`${t}:${s}`,o)},resolve(t,n){return e.get(`${t}:${String(n)}`)??null}}}function Mr(e,t,n){const o=E0(e),a=H2([...t,...o.issues]);return{snapshot:o.snapshot??e,issues:a,format:n}}const iS=[{key:"cast",standard:"ë±ì¥",aliases:["ë±ì¥","ì¸ë¬¼","ì¶ì°","CAST"]},{key:"props",standard:"ê³µê°",aliases:["ê³µê°","ìí","ì¸í¸","PROPS"]},{key:"position",standard:"ìì¹",aliases:["ìì¹","ìì ìì¹","ë°°ì¹","POSITION"]},{key:"scene",standard:"ì¥ë©´",aliases:["ì¥ë©´","ì¥ë©´ì¤ëª
","ì§ë¬¸","ì¡ì
","ACTION","DESCRIPTION"]},{key:"blocking",standard:"ëì ",aliases:["ëì ","ìì§ì","ì´ë","BLOCKING"]},{key:"subject",standard:"í¼ì¬ì²´",aliases:["í¼ì¬ì²´","SUBJECT"]},{key:"dialogue",standard:"ëì¬",aliases:["ëì¬","DIALOGUE"]},{key:"camera",standard:"ì¹´ë©ë¼",aliases:["ì¹´ë©ë¼","ì¹´ë©ë¼ 무ë¸","ì¹´ë©ë¼ë¬´ë¸","ì¹´ë©ë¼ìí¬","ì·","CAMERA"]},{key:"lighting",standard:"ì¡°ëª
",aliases:["ì¡°ëª
","LIGHTING","LIGHT"]},{key:"sound",standard:"ì¬ì´ë",aliases:["ì¬ì´ë","ìí¥","í¨ê³¼ì","S/E","SE","BGM","SOUND"]},{key:"beat",standard:"ë¹í¸",aliases:["ë¹í¸","ìë","BEAT"]},{key:"note",standard:"ë©ëª¨",aliases:["ë©ëª¨","ë¹ê³ ","NOTE"]},{key:"duration",standard:"길ì´",aliases:["길ì´"]}];function Yi(e){return iS.find(t=>t.key===e)?.standard??e}const eg=["scene","blocking","subject","dialogue","camera","lighting","sound","beat","note"],Y2=["scene","blocking","dialogue"],q2=["ë®","ë°¤","ì침","ì ë
","ìë²½","ì¤ì ","ì¤í","D","N","DAY","NIGHT","MORNING","EVENING"],Z2={ì¤ë´:"int",INT:"int",ì¤ì¸:"ext",EXT:"ext"},rS=[{kind:"shot",value:"wide",words:["ìµì¤í¸ë¦¼ 롱","E.L.S","ELS","Establishing","롱","L.S","LS","ìì´ë","Wide","Long","ìì´ëì·","롱ì·","ìµì¤í¸ë¦¼ 롱ì·","Wide Shot"]},{kind:"shot",value:"full",words:["í","F.S","FS","Full","ì ì ","ë","K.S","KS","Knee","íì·","ëì·","Full Shot"]},{kind:"shot",value:"medium",words:["미ëì","M.S","MS","Medium","Mid","ì¨ì´ì¤í¸","Waist","ë°ì¤í¸","B.S","BS","Bust","MCU","미ëìì·","ì¨ì´ì¤í¸ì·","ë°ì¤í¸ì·","Medium Shot"]},{kind:"shot",value:"close-up",words:["í´ë¡ì¦ì
","C.U","CU","Close-up","Closeup","Close Up"]},{kind:"shot",value:"extreme-close-up",words:["ìµì¤í¸ë¦¼ í´ë¡ì¦ì
","E.C.U","ECU","Extreme Close Up"]},{kind:"shot",value:"insert",words:["ì¸ìí¸","Insert","ì¸ìí¸ì·","Insert Shot"]},{kind:"composition",value:"composition",words:["ì¤ë²ìë","O.S.S","OSS","O.T.S","OTS","Over Shoulder","POV","ìì ","í¬ì·","Two Shot","í¬ ì·"]},{kind:"angle",value:"eye",words:["ìì´ë 벨","Eye Level","ìì´ ë 벨"]},{kind:"angle",value:"high",words:["íì´","High","ë¶ê°","íì´ìµê¸"]},{kind:"angle",value:"low",words:["ë¡ì°","Low","ìê°","ë¡ì°ìµê¸"]},{kind:"angle",value:"overhead",words:["ë²ì¦ìì´","Overhead","íë·°","Top","ë²ì¦ ìì´"]},{kind:"angle",value:"dutch",words:["ëì¹","Dutch"]},{kind:"move",value:"static",words:["ê³ ì ","Static","Fix"]},{kind:"move",value:"handheld",words:["í¸ëí¬ë","Handheld"]},{kind:"move",value:"dolly-in",words:["ë¬ë¦¬ ì¸","Dolly In","Push In","í¸ì ì¸","ë¬ë¦¬ì¸","í¸ìì¸"]},{kind:"move",value:"pull-back",words:["íë°±","Pull Back","Dolly Out","í ë°±"]},{kind:"move",value:"pan",words:["í¬","Pan"]},{kind:"move",value:"tilt",words:["í¸í¸","Tilt"]},{kind:"move",value:"truck",words:["í¸ë","Truck"]},{kind:"move",value:"arc",words:["ìí¬","Arc"]},{kind:"move",value:"crane",words:["í¬ë ì¸","Crane","ì§ë¸","Jib"]},{kind:"move",value:"tracking",words:["í¸ëí¹","Tracking","íë¡ì°","Follow"]},{kind:"move",value:"zoom",words:["ì¤","Zoom"]},{kind:"move",value:"whip-pan",words:["í©í¬","Whip Pan","í© í¬"]}],rbe=[{kind:"shot",text:"ìì´ëì·",value:"wide"},{kind:"shot",text:"íì·",value:"full"},{kind:"shot",text:"미ëìì·",value:"medium"},{kind:"shot",text:"ì¨ì´ì¤í¸ì·",value:"medium"},{kind:"shot",text:"ë°ì¤í¸ì·",value:"medium"},{kind:"shot",text:"í´ë¡ì¦ì
",value:"close-up"},{kind:"shot",text:"ìµì¤í¸ë¦¼ í´ë¡ì¦ì
",value:"extreme-close-up"},{kind:"shot",text:"ì¸ìí¸",value:"insert"},{kind:"lens",text:"24mm",value:"24"},{kind:"lens",text:"35mm",value:"35"},{kind:"lens",text:"50mm",value:"50"},{kind:"lens",text:"85mm",value:"85"},{kind:"angle",text:"ìì´ë 벨",value:"eye"},{kind:"angle",text:"íì´ìµê¸",value:"high"},{kind:"angle",text:"ë¡ì°ìµê¸",value:"low"},{kind:"angle",text:"ë²ì¦ìì´",value:"overhead"},{kind:"angle",text:"ëì¹",value:"dutch"},{kind:"move",text:"ê³ ì ",value:"static"},{kind:"move",text:"í¸ëí¬ë",value:"handheld"},{kind:"move",text:"ë¬ë¦¬ ì¸",value:"dolly-in"},{kind:"move",text:"íë°±",value:"pull-back"},{kind:"move",text:"í¬",value:"pan"},{kind:"move",text:"í¸í¸",value:"tilt"},{kind:"move",text:"í¸ëí¹",value:"tracking"},{kind:"move",text:"ì¤",value:"zoom"},{kind:"composition",text:"ì¤ë²ìë",value:"composition"},{kind:"composition",text:"POV",value:"composition"},{kind:"composition",text:"í¬ì·",value:"composition"}],wf={ë¨:"male",ë¨ì:"male",ë¨ì±:"male",ì¬:"female",ì¬ì:"female",ì¬ì±:"female",ìì´:"child",ìë
:"child",ìë
:"child",ì´ë¦°ì´:"child"},J2=["ê»ì","ì","ë","ì´","ê°","ë"],Q2={í:1,ë:2,ì¸:3,ë¤:4,ë¤ì¯:5,ì¬ì¯:6,ì¼ê³±:7,ì¬ë:8,ìí:9,ì´:10},eB=["ë¶ë
¸","íê° ë","ì¬í","ì¬í¼","기ì¨","기ë»","íë³µ","ë¶ì","ëë ¤","긴ì¥ê°","ì¤ë ","그리ì","그리ì","ì¸ë¡","ì°¸ì¼ë©°","ì°¸ëë¤","ëëë¤","ëë¼ë©°","ìê°íë¤","ìê°íë©°","ê²°ì¬","깨ë«","ë§ì¤","ë¹í©ì¤ë¬","ìµì¸"],tB={ì±
ì¥:"bookcase",íì:"table",í
ì´ë¸:"table",침ë:"bed",ìí:"sofa",ìºë¹ë:"cabinet",ìë¥ì¥:"shelf-files",ì§ì´ì¥:"display-shelf",ìì:"chair",ì±
ì:"desk",ì¬ë¬¼í¨:"locker"},lS=[{words:["ì","ì쪽"],relation:"in-front-of"},{words:["ë¤","ë¤ìª½"],relation:"behind"},{words:["ì¼ìª½","ì¼í¸"],relation:"beside-left"},{words:["ì¤ë¥¸ìª½","ì¤ë¥¸í¸"],relation:"beside-right"},{words:["ì","ê·¼ì²","ê°ê¹ì´","ê³"],relation:"near"},{words:["ì
구"],relation:"at-entrance"}],cS=[{words:["ìª¼ê·¸ë ¤ ìì","ì
í¬ë¦¼"],pose:"crouch"},{words:["ë¬´ë¦ ê¿ì","무ë¦ê¿ì"],pose:"kneel"},{words:["ìì ìì","ìì"],pose:"sit"},{words:["ëì ìì","ëì"],pose:"lie"},{words:["ì ìì","ì¬"],pose:"stand"}],Pl=[{words:["ìª¼ê·¸ë ¤ ìëë¤","ì
í¬ë¦°ë¤"],kind:"pose",actionType:"crouch",pose:"crouch"},{words:["ë¬´ë¦ ê¿ëë¤","무ë¦ê¿ëë¤"],kind:"pose",actionType:"kneel",pose:"kneel"},{words:["ì¼ì´ì ë¤","ì¼ì´ëë¤"],kind:"pose",actionType:"stand-up",pose:"stand"},{words:["ìëë¤"],kind:"pose",actionType:"sit-down",pose:"sit"},{words:["ëëë¤"],kind:"pose",actionType:"lie-down",pose:"lie"},{words:["ë¤ì´ì¨ë¤","ë¤ì´ì ë¤","ë±ì¥","ì
ì¥"],kind:"move",actionType:"enter",needsTarget:!1},{words:["ëê°ë¤","ëì ë¤","í´ì¥"],kind:"move",actionType:"exit",needsTarget:!1},{words:["ë¤ê°ê°ë¤","ë¤ê°ì¨ë¤","ë¤ê°ì ë¤"],kind:"move",actionType:"approach",needsTarget:!0},{words:["ë°ì´ê°ë¤","ë¬ë ¤ê°ë¤","ë¬ë¦°ë¤","ë´ë¤"],kind:"move",actionType:"run",needsTarget:!0},{words:["걸ì´ê°ë¤","걸ì´ì¨ë¤","ê±·ëë¤","ì´ë","ê°ë¤"],kind:"move",actionType:"walk",needsTarget:!0},{words:["ì´ë¦°ë¤","ì´ë¦¼","ì°ë¤"],kind:"door",open:!0},{words:["ë«íë¤","ë«í","ë«ëë¤"],kind:"door",open:!1}],Mf={syllablesPerSec:5,secPerSentence:1,minCutSec:2},dS={eye:{pitch:0,roll:0},high:{pitch:-15,roll:0},low:{pitch:10,roll:0},overhead:{pitch:-80,roll:0},dutch:{pitch:0,roll:12}},uS={wide:{lensMm:24,frameHeightM:3.5},full:{lensMm:35,frameHeightM:2},medium:{lensMm:50,frameHeightM:1.3},"close-up":{lensMm:85,frameHeightM:.6},"extreme-close-up":{lensMm:135,frameHeightM:.35},insert:{lensMm:85,frameHeightM:.5}},nB=.6,oB=20;function aB(e,t){const n=e/2/Math.tan(t*Math.PI/180/2);return Math.min(oB,Math.max(nB,n))}const sB=25,Bd=.2,pS=.3,iB=3,tg=[0,15,-15,30,-30,45,-45,60,-60,90,-90],rB=.8,$f=.6,lB=["close-up","extreme-close-up"],ng=.9,og=.5,cB=.15,ag=.3,dB=8,uB=[1,2/3,1/3];function pB(e,t){return Math.abs(Io(e,t))}function fB(e){const t=wo(e.actor),n=Fa(t,e.state.pose);return{x:e.state.position.x,y:e.state.position.y,h:n}}function mB(e){const t=[e];let n=e;for(;n>$f+1e-9;)n=Math.max($f,n*rB),t.push(n);return t}function hB(e,t){if(e.subjectIds.length===0)return{targets:[...t],unspecified:!0};const n=new Map(t.map(a=>[a.actor.id,a]));return{targets:e.subjectIds.map(a=>n.get(a)).filter(a=>!!a),unspecified:!1}}function bB(e,t,n){if(e.length<=1){const h=e[0]?.state.headingDeg??0;return Qt(h+180+sB)}const o=[e[0],e[1]].sort((h,b)=>h.actor.id.localeCompare(b.actor.id)),a={x:o[1].state.position.x-o[0].state.position.x,y:o[1].state.position.y-o[0].state.position.y},s=Math.hypot(a.x,a.y)||1,i={x:a.x/s,y:a.y/s},r=ex(i,90),l=o.map(h=>h.actor.id),c=n.find(h=>{const b=h.subject?.targetIds?[...h.subject.targetIds].sort():null;return b&&b.length===l.length&&b.every((I,y)=>I===l[y])});if(c)return c.headingDeg;const d={x:-t.x,y:-t.y},p=d.x*r.x+d.y*r.y>=0?1:-1,f={x:r.x*p,y:r.y*p};return Qt(Math.atan2(-f.y,-f.x)*180/Math.PI)}function sg(e,t,n,o,a,s,i,r=[],l=[]){if((a.walls.north||a.walls.east||a.walls.south||a.walls.west)&&(Math.abs(e.x)>a.widthM/2-Bd+1e-9||Math.abs(e.y)>a.depthM/2-Bd+1e-9)||s.some(p=>ya(e,p,pS))||r.some(p=>p.people.some(f=>Ot(f,e)<ng))||l.some(p=>Ot(p,e)<ng))return-1;const d=(p,f)=>{const h=fB(p);if(q0({...e,h:n},h,[...s,...f])!==null)return!1;const b=Qt(Math.atan2(p.state.position.y-e.y,p.state.position.x-e.x)*180/Math.PI);return pB(b,t)<o/2-iB};let u=0;
2return i.forEach(p=>{(r.length===0?d(p,[]):r.every(h=>{const b=h.targets.find(I=>I.actor.id===p.actor.id);return!b||d(b,h.blockers)}))&&(u+=1)}),u}function gB(e,t,n){return(t.walls.north||t.walls.east||t.walls.south||t.walls.west)&&(Math.abs(e.x)>t.widthM/2-Bd+1e-9||Math.abs(e.y)>t.depthM/2-Bd+1e-9)?!1:!n.some(a=>ya(e,a,pS))}function vB(e,t,n,o){const a=-o*Math.PI/180,i=e.walls.north||e.walls.east||e.walls.south||e.walls.west?Vs-cB:dB;let r=t+n*Math.sin(a),l=n*Math.cos(a);return r>i?(r=i,l=(r-t)/Math.tan(a)):r<ag&&(r=ag,l=(t-r)/Math.tan(-a)),{heightM:r,horizontalM:Math.max($f/2,l)}}function yB(e){const{cut:t,subjects:n,room:o,solids:a,cameras:s,idFactory:i}=e,r=[],{targets:l,unspecified:c}=hB(t,n);c&&r.push(Le("SUBJECT_UNSPECIFIED",{path:"parts[].cameras",targetId:t.id}));const d=new Set(l.map(Z=>Z.actor.id)),u=e.later?[n,...e.later].map(Z=>({targets:Z.filter(L=>d.has(L.actor.id)),blockers:Z.filter(L=>!d.has(L.actor.id)).map(L=>({id:`person-${L.actor.id}`,center:L.state.position,widthM:og,depthM:og,headingDeg:0,heightM:wo(L.actor)})),people:Z.map(L=>L.state.position)})):[],p=l.map(Z=>Z.state.position),f=l.length<=1,h=V0(p),b=f?l[0]?.state.position??{x:0,y:0}:h.center,I=l.length>0?l.reduce((Z,L)=>Z+wo(L.actor),0)/l.length:1.7,y=l.length>0?l.reduce((Z,L)=>Z+Fa(wo(L.actor),L.state.pose),0)/l.length:Fa(1.7,"stand"),w=uS[t.shotType],M=t.lensMm??w.lensMm,x=f?w.frameHeightM*(I/1.7):Math.max(w.frameHeightM,h.radius*2*1.25),_=Su({lensMm:M}),O=aB(x,_.verticalDeg),A=bB(l,b,s);let N=null,K=null,F=null;for(const Z of mB(O)){for(const L of tg){const V=Qt(A+L),pe=In(V),le={x:b.x-pe.x*Z,y:b.y-pe.y*Z},me=sg(le,V,y,_.horizontalDeg,o,a,l,u,e.peoplePath);if(me===l.length){N={position:le,theta:V};break}if(me>=0&&(!K||me>K.score)&&(K={position:le,theta:V,score:me}),me<0&&gB(le,o,a)){const oe=Math.min(1/0,...u.flatMap(fe=>fe.people.map(X=>Math.hypot(X.x-le.x,X.y-le.y))));(!F||oe>F.clear)&&(F={position:le,theta:V,clear:oe})}}if(N)break}if(!N){r.push(Le("CAMERA_PLACEMENT_UNRESOLVED",{path:"parts[].cameras",targetId:t.id}));const Z=In(A);N=K??F??{position:{x:b.x-Z.x*O,y:b.y-Z.y*O},theta:A}}let B=N.position,j=N.theta,ee=y;if(t.pitchDeg!==void 0&&t.pitchDeg!==0){const Z=Ot(N.position,b);e:for(const L of uB){const V=vB(o,y,Z,t.pitchDeg*L);for(const pe of tg){const le=Qt(N.theta+pe),me=In(le),oe={x:b.x-me.x*V.horizontalM,y:b.y-me.y*V.horizontalM};if(!(sg(oe,le,V.heightM,360,o,a,l,u,e.peoplePath)<l.length)){B=oe,j=le,ee=V.heightM;break e}}}}return{camera:{id:i("cam"),name:t.id,position:B,heightM:ee,headingDeg:j,pitchDeg:t.pitchDeg??0,rollDeg:0,lensMm:M,move:{type:"static"},keys:[],subject:{targetIds:l.map(Z=>Z.actor.id),...lB.includes(t.shotType)?{nodePath:"head"}:{}}},warnings:r}}const ig=.25,fS=.1,rl=1e-9;function kB(e,t,n){return e.x-t>=n.minX-rl&&e.x+t<=n.maxX+rl&&e.y-t>=n.minY-rl&&e.y+t<=n.maxY+rl}function SB(e){return e<=.75?8:e<=1.75?16:24}function Ya(e,t,n,o,a={}){const s=a.maxRadiusM??3,i=r=>kB(r,t,o)?!n.some(l=>l.kind==="circle"?Ot(r,l.center)<t+l.radius+fS:mr(r,t,l.rect)):!1;if(i(e))return e;for(let r=ig;r<=s+rl;r+=ig){const l=SB(r);for(let c=0;c<l;c+=1){const d=2*Math.PI*c/l,u={x:e.x+r*Math.cos(d),y:e.y+r*Math.sin(d)};if(i(u))return u}}return null}function IB(e,t,n,o){const a=Jl(n,o).map(r=>({kind:"rect",rect:r,id:r.id})),i=n.walls.north||n.walls.east||n.walls.south||n.walls.west?{minX:-n.widthM/2,minY:-n.depthM/2,maxX:n.widthM/2,maxY:n.depthM/2}:{minX:-1e6,minY:-1e6,maxX:1e6,maxY:1e6};return Ya(e,t,a,i)??e}const Xr=.35,rg=.6,wB=.6,MB=1.5,$B=["desk","table"];function qi(e,t,n){return{x:e.x+t.x*n,y:e.y+t.y*n}}function mS(e,t){return Qt(Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI)}function EB(e,t,n){let o=null;for(const a of n.props){if(a.id===t.id||!$B.includes(a.kind))continue;const s=Ot(e,a.center);s>MB||(!o||s<o.dist)&&(o={propRef:a,dist:s})}return o?mS(e,o.propRef.center):null}function xB(e,t,n){const a=Tt(e.catalogKey??e.kind)?.seat?.slotsAlongWidth,s=ho(e.headingDeg),i=n.takenSlots??[];let r=e.center,l;if(a&&a>0)for(let d=0;d<a;d+=1){const u=`${e.id}#${d}`;if(i.includes(u))continue;const p=(d-(a-1)/2)*wB;r=qi(e.center,s,p),l=u;break}const c=EB(r,e,t)??e.headingDeg;return{position:r,headingDeg:c,pose:"sit",seatPropId:e.id,...l?{slotKey:l}:{}}}function _d(e,t,n,o,a={}){if(e==="unspecified")return null;if(e==="at-entrance"){const l=t?.kind==="opening"?t.opening:n.openings[0]??null;if(!l)return null;const c=vi(n,l,rg);return{position:c.position,headingDeg:c.headingDeg}}if(t?.kind==="opening"){if(e!=="in-front-of"&&e!=="near"&&e!=="beside-left"&&e!=="beside-right")return null;const l=vi(n,t.opening,Xr+o);
2return{position:l.position,headingDeg:Qt(l.headingDeg+180)}}if(!t)return null;const s=t.prop,i=In(s.headingDeg),r=ho(s.headingDeg);switch(e){case"in-front-of":return{position:qi(s.center,i,s.depthM/2+Xr+o),headingDeg:Qt(s.headingDeg+180)};case"behind":return{position:qi(s.center,i,-(s.depthM/2+Xr+o)),headingDeg:s.headingDeg};case"beside-left":return{position:qi(s.center,r,-(s.widthM/2+Xr+o)),headingDeg:s.headingDeg};case"beside-right":return{position:qi(s.center,r,s.widthM/2+Xr+o),headingDeg:s.headingDeg};case"seated-on":return xB(s,n,a);case"near":{const l={x:-s.center.x,y:-s.center.y},c=Math.hypot(l.x,l.y),d=c>1e-9?{x:l.x/c,y:l.y/c}:{x:1,y:0},u=Math.max(s.widthM,s.depthM)/2+rg+o,p=qi(s.center,d,u);return{position:p,headingDeg:mS(p,s.center)}}default:return null}}const PB=1.5,CB=.45,lg=e=>!!Tt(e.catalogKey??e.kind)?.seat,BB=["bed","hospital-bed"],_B=.05;function Mu(e){const t=e.catalogKey??e.kind;return!!Tt(t)?.seat||BB.includes(t)}function $u(e){const t=Tt(e.catalogKey??e.kind);return!!t&&t.heightM<=_B}function Zm(e){if(!Mu(e)&&!$u(e))return null;const t=e.widthM>=e.depthM?e.headingDeg+90:e.headingDeg;return{position:e.center,headingDeg:t}}function AB(e,t){return lg(e)?[e]:t.props.filter(n=>lg(n)&&Ot(n.center,e.center)<=PB).sort((n,o)=>Ot(n.center,e.center)-Ot(o.center,e.center))}function Ql(e,t,n,o,a=[],s=e.center){const i=t.props.filter(r=>r.id!==e.id&&!!e.name&&r.name===e.name).sort((r,l)=>Ot(r.center,s)-Ot(l.center,s));for(const r of[e,...i])for(const l of AB(r,t)){const c=[...a];for(;;){const d=_d("seated-on",{kind:"prop",prop:l},t,n,{takenSlots:c});if(!d)break;if(!o.some(u=>Ot(u,d.position)<CB))return d;if(!d.slotKey||c.includes(d.slotKey))break;c.push(d.slotKey)}}return null}function Rn(e,t,n){return{...e,parts:e.parts.map(o=>o.partId===t?n(o):o)}}function Ia(e,t){return{...e,room:t(e.room)}}function qn(e,t,n,o){const a=e.parts.find(i=>i.partId===t);return!a||!a.actors.some(i=>i.id===n)?ie("REFERENCE_MISSING","actorId",{referencedId:n}):{ok:!0,snapshot:Rn(e,t,i=>({...i,actors:i.actors.map(r=>r.id===n?o(r):r)}))}}function Js(e,t,n,o){if(e.room.props.some(s=>s.id===n))return{ok:!0,snapshot:Ia(e,i=>({...i,props:i.props.map(r=>r.id===n?o(r):r)}))};const a=e.parts.find(s=>s.partId===t);return a&&a.props.some(s=>s.id===n)?{ok:!0,snapshot:Rn(e,t,i=>({...i,props:i.props.map(r=>r.id===n?o(r):r)}))}:ie("REFERENCE_MISSING","propId",{referencedId:n})}function Jm(e,t,n,o){const a=e.parts.find(i=>i.partId===t);return!a||!a.cameras.some(i=>i.id===n)?ie("REFERENCE_MISSING","cameraId",{referencedId:n}):{ok:!0,snapshot:Rn(e,t,i=>({...i,cameras:i.cameras.map(r=>r.id===n?o(r):r)}))}}const Yn=(e,t,n)=>Math.min(n,Math.max(t,e));function ie(e,t,n){return{ok:!1,issue:Le(e,{path:t,params:n})}}function $r(e,t,n){let o=e,a=o+t;return a>n.endSec&&(a=n.endSec,o=a-t),o<n.startSec&&(o=n.startSec,a=o+t),{startSec:o,endSec:a}}function yi(e,t,n,o){const a=Yn(t.startSec??e.startSec,n.startSec,n.endSec),s=Yn(t.endSec??e.endSec,n.startSec,n.endSec);return s-a<1/o-xn?null:{startSec:a,endSec:s}}function Ri(e,t,n){const o={...e};for(const a of n??Object.keys(t))a in t&&(t[a]===void 0?delete o[a]:o[a]=t[a]);return o}function TB(e){return{minX:-e.room.widthM/2-5,maxX:e.room.widthM/2+5,minY:-e.room.depthM/2-5,maxY:e.room.depthM/2+5}}function qa(e,t,n){const o=e.room.props.find(s=>s.id===n);return o||e.parts.find(s=>s.partId===t)?.props.find(s=>s.id===n)}function hS(e,t,n){if(e.room.props.some(a=>a.id===n)||e.room.openings.some(a=>a.id===n)||e.refs.characters.some(a=>a.id===n)||e.refs.backgrounds.some(a=>a.id===n)||e.refs.props.some(a=>a.id===n))return!0;const o=e.parts.find(a=>a.partId===t);return o?!!(o.actors.some(a=>a.id===n)||o.props.some(a=>a.id===n)||o.cameras.some(a=>a.id===n)||o.timeline.actions.some(a=>a.id===n)||o.timeline.dialogues.some(a=>a.id===n)||o.timeline.propEvents.some(a=>a.id===n)||o.timeline.coverages.some(a=>a.id===n)||o.timeline.cuts.some(a=>a.id===n)):!1}function RB(e,t,n){return n==="room"||e.parts.some(o=>o.partId===n)?!0:hS(e,t,n)}const DB=/^(.*?) \((\d+)\)$/;function fp(e){const t=DB.exec(e);return t&&t[1]!==""?t[1]:e}function ar(e,t){if(e==="")return e;const n=new Set(t);if(!n.has(e))return e;for(let o=2;;o+=1){const a=`${e} (${o})`;if(!n.has(a))return a}}const OB=/^#[0-9a-fA-F]{6}$/,NB=["name","color","species","bodyType","movementMode","aliases","refId"],LB="#8899aa",cg=.01;function Er(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)}function bS(e){const t=Mt.coordinateAbsMaxM;return Math.abs(e.x)<=t&&Math.abs(e.y)<=t}function KB(e,t,n){if(!Er(t.position))return ie("SCHEMA_INVALID","position");if(!bS(t.position))return ie("LIMIT_EXCEEDED","position");const o=e.parts.find(a=>a.partId===n.partId)?.durationSec??0;return qn(e,n.partId,t.actorId,a=>Ad(a,t.position,o))}function Ad(e,t,n){const o=e.start.position,a=yu(o,e.path.waypoints);let s=e.path.waypoints.map((i,r)=>r<a?{...i,x:t.x,y:t.y}:i);return e.positionKeys.length<2&&(s=FB(e,s,a,t,n)??s),{...e,start:{...e.start,position:t},path:{waypoints:s}}}function FB(e,t,n,o,a){const s=Ai(e,a)[0];if(!s||s.first!==n)return null;const i=s.last;if(t[i].atSec===void 0)return null;const r=s.departSec,l=[];let c=Ot(o,t[n]);l.push(c);for(let M=n+1;M<=i;M+=1)c+=Ot(t[M-1],t[M]),l.push(c);const d=s.distanceM,u=c,p=s.arriveSec-r;if(d<1e-6||u<1e-6||p<=1e-9)return null;const f=d/p,h=l.map(M=>r+M/f);let b=r;
2for(const M of h){if(!(M>b+1e-9))return null;b=M}const I=h[h.length-1],y=I-s.arriveSec;let w=t[i].pauseSec;if(i===t.length-1){if(I>a)return null}else if(w>1e-9){if(w=t[i].pauseSec-y,w<cg)return null}else if(I+cg>ku(e,a)[i+1].atSec)return null;return t.map((M,x)=>{if(x<n||x>i)return M;const _=h[x-n];return x===i?{...M,atSec:_,pauseSec:w}:M.atSec===void 0?M:{...M,atSec:_}})}function HB(e,t,n){const o=Qt(t.headingDeg);return qn(e,n.partId,t.actorId,a=>({...a,start:{...a.start,headingDeg:o}}))}function zB(e,t,n){const o=t.patch;if("name"in o){const a=o.name;if(typeof a!="string"||a.length<1||a.length>64)return ie("LIMIT_EXCEEDED","patch.name")}return"color"in o&&(typeof o.color!="string"||!OB.test(o.color))?ie("SCHEMA_INVALID","patch.color"):"refId"in o&&o.refId!==void 0&&!e.refs.characters.some(a=>a.id===o.refId&&!a.standalone)?ie("REFERENCE_MISSING","patch.refId",{referencedId:String(o.refId)}):qn(e,n.partId,t.actorId,a=>{const s={...a};for(const i of NB)i in o&&(o[i]===void 0?delete s[i]:s[i]=o[i]);return s})}function jB(e,t,n){const o=n!==void 0?{atSec:0,pose:t,seatPropId:n}:{atSec:0,pose:t},a=e.findIndex(i=>i.atSec===0);if(a===-1)return[o,...e].sort((i,r)=>i.atSec-r.atSec);const s=[...e];return s[a]=o,s}function UB(e,t,n){const o=qa(e,t,n);return!!o&&!!Tt(o.catalogKey??o.kind)?.seat}function gS(e,t,n,o){const a=()=>ie("SEAT_INVALID","seatPropId");if(n==="sit")return!o||!UB(e,t,o)?a():{ok:!0,seatPropId:o};if(n==="lie"&&o!==void 0){const s=qa(e,t,o);return!s||!Mu(s)?a():{ok:!0,seatPropId:o}}return{ok:!0,seatPropId:void 0}}function GB(e,t,n){const o=gS(e,n.partId,t.pose,t.seatPropId);return o.ok?qn(e,n.partId,t.actorId,a=>{const{seatPropId:s,...i}=a.start,r=o.seatPropId!==void 0?{...i,pose:t.pose,seatPropId:o.seatPropId}:{...i,pose:t.pose},l=jB(a.poseKeys,t.pose,o.seatPropId);return{...a,start:r,poseKeys:l}}):o}function VB(e,t,n){return Er(t.point)?qn(e,n.partId,t.actorId,o=>{if(o.path.waypoints.length>=Mt.waypointsPerActor)return o;const a={x:t.point.x,y:t.point.y,pauseSec:0},s=[...o.path.waypoints],i=t.index??s.length;return s.splice(i,0,a),{...o,path:{waypoints:s}}}):ie("SCHEMA_INVALID","point")}function Eu(e,t){return e.path.waypoints[t]}function WB(e,t,n){const o=e.parts.find(i=>i.partId===n.partId),a=o?.actors.find(i=>i.id===t.actorId);if(!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(!Eu(a,t.index))return ie("REFERENCE_MISSING","index");if(!Er(t.point))return ie("SCHEMA_INVALID","point");const s=o.durationSec;return qn(e,n.partId,t.actorId,i=>{const r=i.path.waypoints,l=r[t.index],c=yu(i.start.position,r);let d=t.index,u=t.index;if(t.index>=c){for(;d-1>=c&&Ot(r[d-1],l)<=xd;)d-=1;for(;u+1<r.length&&Ot(r[u+1],l)<=xd;)u+=1}let p=r.map((f,h)=>h>=d&&h<=u?{...f,x:t.point.x,y:t.point.y}:f);if(i.positionKeys.length<2)for(const f of Ai(i,s))f.first-1<=u&&d<=f.last&&(p=F0(p,f));return{...i,path:{waypoints:p}}})}function XB(e,t,n){const a=e.parts.find(s=>s.partId===n.partId)?.actors.find(s=>s.id===t.actorId);return a?Eu(a,t.index)?qn(e,n.partId,t.actorId,s=>({...s,path:{waypoints:s.path.waypoints.filter((i,r)=>r!==t.index)}})):ie("REFERENCE_MISSING","index"):ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId})}function YB(e,t,n){const o=e.parts.find(s=>s.partId===n.partId),a=o?.actors.find(s=>s.id===t.actorId);return!o||!a?ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId}):Eu(a,t.index)?!Number.isFinite(t.pauseSec)||t.pauseSec<0||t.pauseSec>o.durationSec?ie("LIMIT_EXCEEDED","pauseSec"):qn(e,n.partId,t.actorId,s=>({...s,path:{waypoints:s.path.waypoints.map((i,r)=>r===t.index?{...i,pauseSec:t.pauseSec}:i)}})):ie("REFERENCE_MISSING","index")}function qB(e,t,n){const o=e.parts.find(i=>i.partId===n.partId),a=o?.actors.find(i=>i.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(!Eu(a,t.index))return ie("REFERENCE_MISSING","index");if(t.atSec!==null){if(!Number.isFinite(t.atSec)||t.atSec<0||t.atSec>o.durationSec)return ie("LIMIT_EXCEEDED","atSec");const i=[...a.path.waypoints.slice(0,t.index)].reverse().find(l=>l.atSec!==void 0),r=a.path.waypoints.slice(t.index+1).find(l=>l.atSec!==void 0);if(i&&t.atSec<=i.atSec||r&&t.atSec>=r.atSec)return ie("WAYPOINT_TIME_ORDER","atSec")}return qn(e,n.partId,t.actorId,i=>({...i,path:{waypoints:i.path.waypoints.map((r,l)=>{if(l!==t.index)return r;if(t.atSec===null){const{atSec:c,...d}=r;return d}return{...r,atSec:t.atSec}})}}))}
2function ZB(e,t,n){const o=e.parts.find(s=>s.partId===n.partId);if(!o||!o.actors.some(s=>s.id===t.actorId))return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(t.waypoints.length>Mt.waypointsPerActor)return ie("LIMIT_EXCEEDED","waypoints");let a;for(const s of t.waypoints){if(!Er(s))return ie("SCHEMA_INVALID","waypoints[].position");if(s.atSec!==void 0){if(!Number.isFinite(s.atSec)||s.atSec<0||s.atSec>o.durationSec)return ie("LIMIT_EXCEEDED","waypoints[].atSec");if(a!==void 0&&s.atSec<=a)return ie("WAYPOINT_TIME_ORDER","waypoints[].atSec");a=s.atSec}}return qn(e,n.partId,t.actorId,s=>({...s,path:{waypoints:t.waypoints}}))}function JB(e,t,n){if(!Er(t.delta))return ie("SCHEMA_INVALID","delta");const a=e.parts.find(c=>c.partId===n.partId)?.actors.find(c=>c.id===t.actorId);if(!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});const s=c=>({...c,x:c.x+t.delta.x,y:c.y+t.delta.y}),i=s(a.start.position),r=a.path.waypoints.map(s),l=a.positionKeys.map(s);return[i,...r,...l].every(bS)?qn(e,n.partId,t.actorId,c=>({...c,start:{...c.start,position:i},path:{waypoints:r},positionKeys:l})):ie("LIMIT_EXCEEDED","delta")}function QB(e,t,n){const o=e.parts.find(r=>r.partId===n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(o.actors.length>=Mt.actorsPerPart)return ie("LIMIT_EXCEEDED","actors");if(!Er(t.position))return ie("SCHEMA_INVALID","position");const s={id:n.idFactory("actor"),...t.refId?{refId:t.refId}:{},name:ar(t.name,o.actors.map(r=>r.name)),aliases:[],color:LB,species:t.species,bodyType:t.bodyType,movementMode:"walking",start:{position:IB(t.position,Vt({species:t.species}),e.room,o),headingDeg:0,pose:"stand"},path:{waypoints:[]},positionKeys:[],facingKeys:[],poseKeys:[]};return{ok:!0,snapshot:Rn(e,n.partId,r=>({...r,actors:[...r.actors,s],castRefIds:t.refId&&!r.castRefIds.includes(t.refId)?[...r.castRefIds,t.refId]:r.castRefIds}))}}const dg=.02,e_=.001,t_={minX:-1e6,minY:-1e6,maxX:1e6,maxY:1e6};function Ef(e,t,n,o){return n.some(a=>Ga(e,t,a,o)!==null)}function n_(e,t){const n=e.depthM/2+t+dg,o=e.widthM/2+t+dg;return[[1,1],[1,-1],[-1,1],[-1,-1]].map(([s,i])=>Bi(e,{x:s*n,y:i*o}))}function ug(e,t,n){if(!t.some(s=>ya(e,s,n)))return e;const a=t.map((s,i)=>({kind:"rect",rect:s,id:`o${i}`}));return Ya(e,n,a,t_)??e}function o_(e,t,n){const o=[e[0]];let a=1;for(;a<e.length-1;){const s=o[o.length-1],i=e[a+1];if(!Ef(s,i,t,n)){a+=1;continue}o.push(e[a]),a+=1}return o.push(e[e.length-1]),o}function a_(e,t){const n=e.length,o=new Array(n).fill(1/0),a=new Array(n).fill(-1),s=new Array(n).fill(!1);o[0]=0;for(let l=0;l<n;l+=1){let c=-1;for(let d=0;d<n;d+=1)!s[d]&&(c===-1||o[d]<o[c])&&(c=d);if(c===-1||o[c]===1/0||(s[c]=!0,c===1))break;for(let d=0;d<n;d+=1){if(s[d]||d===c||!t(c,d))continue;const u=Math.hypot(e[d].x-e[c].x,e[d].y-e[c].y);o[c]+u<o[d]&&(o[d]=o[c]+u,a[d]=c)}}if(o[1]===1/0)return null;const i=[];let r=1;for(;r!==-1;)i.unshift(r),r=a[r];return i}function Cl(e,t,n,o){const a=ug(e,n,o),s=ug(t,n,o);if(!Ef(a,s,n,o))return[a,s];const i=n.flatMap(p=>n_(p,o)),r=[a,s,...i].filter((p,f)=>f<2||!n.some(h=>ya(p,h,o-e_))),l=new Map,d=a_(r,(p,f)=>{const h=p<f?`${p}:${f}`:`${f}:${p}`,b=l.get(h);if(b!==void 0)return b;const I=!Ef(r[p],r[f],n,o);return l.set(h,I),I});if(!d)return null;const u=d.map(p=>r[p]);return o_(u,n,o)}const s_=.5,i_={minX:-1e6,minY:-1e6,maxX:1e6,maxY:1e6};function r_(e,t){return`parts[${Math.max(e,0)}].actors[${Math.max(t,0)}].path`}function xf(e,t,n){const o=e.parts.findIndex(K=>K.partId===t),a=e.parts[o],s=a?a.actors.findIndex(K=>K.id===n):-1,i=a&&s>=0?a.actors[s]:void 0,r=r_(o,s);if(!a||!i)return{ok:!1,issue:Le("REFERENCE_MISSING",{path:r,targetId:n})};if(i.positionKeys.length>=2)return{ok:!1,issue:Le("AUTO_DETOUR_POSITION_KEYS",{path:r,targetId:n})};const l=Ra(e.room,a,i),c=Vt(i),d=i.path.waypoints;let u=i.start.position;const p=[],f=l.map(K=>({kind:"rect",rect:K,id:K.id})),h=K=>{if(!l.some(B=>mr(K,c,B)))return K;const F=Ya(K,c,f,i_);return F&&Ot(F,K)<=s_?F:null},b=()=>({ok:!1,issue:Le("AUTO_DETOUR_UNREACHABLE",{path:r,targetId:n})}),I=h(u);if(!I)return b();I!==u&&(p.push({type:"actor.moveStart",actorId:n,position:I}),u=I);const y=[];for(const K of d){const F=h(K);if(!F)return b();y.push(F===K?K:{...K,x:F.x,y:F.y})}const w=y.some((K,F)=>K!==d[F]),M=[u,...y.map(K=>({x:K.x,y:K.y}))],x=d.map((K,F)=>l.find(B=>Ga(M[F],M[F+1],B,c)!==null));let _=y;for(const K of Ai(i,a.durationSec))x.some((F,B)=>F&&B>=K.first&&B<=K.last)&&(_=F0(_,K));const O=[u],A=[];let N=null;for(let K=0;K<d.length;K+=1){const F=M[K],B=M[K+1],j=x[K];if(j){const ee=Cl(F,B,l,c);if(!ee)return{ok:!1,issue:Le("AUTO_DETOUR_UNREACHABLE",{path:r,targetId:n})};N||(N={obstacleId:j.id,segmentIndex:K,points:ee});for(const D of ee.slice(1,-1))O.push(D),A.push({x:D.x,y:D.y,pauseSec:0})}O.push(B),A.push(_[K])}for(let K=0;K<O.length-1;K+=1){const F=O[K],B=O[K+1];if(l.some(j=>Ga(F,B,j,c)!==null))return b()}return!N&&!w?p.length===0?{ok:!0,commands:[],preview:M,obstacleId:"",segmentIndex:-1,points:[]}:{ok:!0,commands:p,preview:O,obstacleId:"",segmentIndex:-1,points:[]}:(p.push({type:"actor.replacePath",actorId:n,waypoints:A}),{ok:!0,commands:p,preview:O,obstacleId:N?.obstacleId??"",segmentIndex:N?.segmentIndex??-1,points:N?.points??[]})}const pg=.9;function Bl(e){return e.startsWith("window")?"window":e==="glass-door"?"glass-door":"door"}
2function vS(e,t,n){const o=t/2,a=n/2,s=e.defaultProps.filter(l=>{const c=Tt(l.kind),d=c?.widthM??.6,u=c?.depthM??.6,p=l.headingDeg*Math.PI/180,f=(Math.abs(Math.cos(p))*u+Math.abs(Math.sin(p))*d)/2,h=(Math.abs(Math.sin(p))*u+Math.abs(Math.cos(p))*d)/2;return Math.abs(l.x)+f<=o+1e-9&&Math.abs(l.y)+h<=a+1e-9}),i=l=>l==="north"||l==="south"?t:n,r=e.defaultOpenings.filter(l=>l.widthM<=i(l.wall)).map(l=>({...l,offsetM:Math.min(Math.max(0,l.offsetM),i(l.wall)-l.widthM)}));return{...e,widthM:t,depthM:n,defaultProps:s,defaultOpenings:r}}function Pf(e,t){const n=Jo[e.kind];return{id:t,kind:Bl(e.kind),wall:e.wall,offsetM:e.offsetM,widthM:e.widthM,heightM:n?.heightM??2.05}}function l_(e){if(e.defaultOpenings.length>0)return e;const{north:t,east:n,south:o,west:a}=e.walls;return!t&&!n&&!o&&!a?e:{...e,defaultOpenings:[{kind:"door",wall:"south",offsetM:(e.widthM-pg)/2,widthM:pg}]}}function Qm(e,t){if(t)return{room:t,issues:[]};const n=[],o=Ym(e),a=o??Qc;o||n.push(Le("ROOM_PRESET_MISSING",{path:"room.kind"}));const s=l_(a),i=s.defaultOpenings.map((l,c)=>Pf(l,`opening-${c}`));return{room:{kind:s.kind,widthM:s.widthM,depthM:s.depthM,walls:s.walls,openings:i,props:[]},issues:n,preset:s}}const c_=["문","ëì´","ì¶ì
문","íê´ë¬¸","ì 리문","창문","door","window","entrance"],d_=.3,u_=-.6,p_=.6,fg=.8,mg=2.5,hg=3.5,f_=1.5,m_={minX:-1e6,minY:-1e6,maxX:1e6,maxY:1e6};function h_(e){return[e.text.ko,e.text.en].filter(t=>!!t)}function b_(e){const t=Tt(e.catalogKey??e.kind),n=[e.name,...t?[t.labels.ko,t.labels.en,...t.aliases]:[]];return[...new Set(n.filter(o=>!!o))]}function g_(e,t,n,o){if(e.actionClass!=="movement"||!sS.has(e.actionType))return null;const a=h_(e);let s=null;for(const i of t)for(const r of b_(i))a.some(l=>l.includes(r))&&(!s||r.length>s.length)&&(s={id:i.id,length:r.length});if(s)return{kind:"prop",id:s.id};if(n.length>0&&a.some(i=>c_.some(r=>i.includes(r))))return{kind:"opening",id:n[0].id};for(const i of o){if(i.id===e.actorId)continue;const r=[i.name,...i.aliases];if(a.some(l=>r.some(c=>
2l.includes(c))))return{kind:"actor",id:i.id}}return e.actionType==="exit"&&n.length>0?{kind:"opening",id:n[0].id}:null}function ed(e,t){return[...qs(e),...t.filter(n=>(n.heightM??.75)>=d_)]}function v_(e,t){return e.actors.filter(n=>n.id!==e.actor.id).map(n=>({kind:"circle",center:mn(n,t).position,radius:Vt(n),id:n.id}))}function Mc(e,t,n,o,a,s){const i=k_(a),r={minX:i.minX+t,minY:i.minY+t,maxX:i.maxX-t,maxY:i.maxY-t},l=[...n.map((c,d)=>({kind:"rect",rect:{...c,widthM:c.widthM+t*2,depthM:c.depthM+t*2},id:`s${d}`})),...o.map(c=>({...c,radius:c.radius+t}))];return Ya(e,y_,l,r,{maxRadiusM:s})}const y_=1e-6,bg=1.5;function k_(e){return e.walls.north||e.walls.east||e.walls.south||e.walls.west?{minX:-e.widthM/2,minY:-e.depthM/2,maxX:e.widthM/2,maxY:e.depthM/2}:m_}const S_=[.6,.8,1,1.2],gg=16;function yS(e,t,n,o){const a=n.filter(r=>ya(e,r,o));if(a.length===0)return null;const s=n.filter(r=>!a.includes(r));let i=null;for(const r of S_){for(let l=0;l<gg;l+=1){const c=2*Math.PI*l/gg,d={x:e.x+r*Math.cos(c),y:e.y+r*Math.sin(c)};if(n.some(p=>ya(d,p,o))||s.some(p=>Ga(e,d,p,o)!==null))continue;const u=r+Ot(d,t);(!i||u<i.score)&&(i={p:d,score:u})}if(i)return i.p}return null}function mp(e,t,n){return t.some(o=>ya(e,o,n))?yS(e,e,t,n)!==null:!0}function vg(e,t){const n=Ss(e,t);return Math.hypot(Math.max(0,Math.abs(n.x)-e.depthM/2),Math.max(0,Math.abs(n.y)-e.widthM/2))}const Cf=(e,t)=>Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI,I_=["in-front-of","beside-left","beside-right","behind"],w_=.2;function M_(e,t,n){const{room:o,props:a,actors:s,action:i}=e,r=v_(e,i.endSec);if(t.kind==="prop"){const b=a.find(O=>O.id===t.id);if(!b)return null;const I=Vt(e.actor);if(e.seat==="lie"){const O=Zm(b);if(O)return{position:O.position,headingDeg:O.headingDeg,seatPropId:b.id}}const y=e.seat==="sit"?Ql(b,o,I,r.map(O=>O.center),[],n):null;if(y?.seatPropId)return{position:y.position,headingDeg:y.headingDeg,seatPropId:y.seatPropId};const w=ed(o,a),M=[];let x=null;for(const O of I_){const A=_d(O,{kind:"prop",prop:b},o,I);if(!A)continue;const N=Mc(A.position,I,w,r,o);if(N){if(N===A.position&&O==="in-front-of"){x=N;break}M.push(N)}}if(!x&&M.length>0){const O=Math.min(...M.map(A=>vg(b,A)));x=M.filter(A=>vg(b,A)<=O+w_).sort((A,N)=>Ot(n,A)-Ot(n,N))[0]}const _=x??_d("in-front-of",{kind:"prop",prop:b},o,I).position;return{position:_,headingDeg:Cf(_,b.center)}}if(t.kind==="opening"){const b=o.openings.find(_=>_.id===t.id);if(!b)return null;const I=i.actionType==="exit"?u_:p_,y=vi(o,b,I),w=Vt(e.actor),M=ed(o,a);return i.actionType==="enter"?{position:Mc(y.position,w,M,r,o,bg)??y.position,headingDeg:null}:i.actionType==="exit"?{position:y.position,headingDeg:null}:{position:Mc(y.position,w,M,r,o,bg)??y.position,headingDeg:y.headingDeg+180}}const l=s.find(b=>b.id===t.id);if(!l)return null;const c=mn(l,i.endSec).position,d=n.x-c.x,u=n.y-c.y,p=Math.hypot(d,u)||1,f={x:c.x+d/p*fg,y:c.y+u/p*fg},h=Mc(f,Vt(e.actor),ed(o,a),r,o)??f;return{position:h,headingDeg:Cf(h,c),lookAtId:l.id}}const $_=1.5,E_=1,$c=e=>e.reduce((t,n,o)=>o===0?0:t+Ot(e[o-1],n),0);function Ec(e,t){return mu(e)?!0:Math.abs(t.x)<=e.widthM/2+.1&&Math.abs(t.y)<=e.depthM/2+.1}const x_=.1,yg=4;function P_(e,t,n){const{action:o,room:a}=e,s=Vt(e.actor),i=mn(e.actor,o.startSec).position,r=[];for(const l of e.actors){if(l.id===e.actor.id||l.id===t)continue;const c=Array.from({length:yg+1},(f,h)=>mn(l,o.startSec+(o.endSec-o.startSec)*h/yg)),d=c[0].position;if(c.some(f=>Ot(f.position,d)>x_)||ys(a,d))continue;const u=Vt(l),p={center:d,widthM:u*2,depthM:u*2,headingDeg:0};ya(i,p,s)||ya(n,p,s)||r.push(p)}return r}function C_(e,t){const{room:n,action:o}=e;if(!mu(n))return null;const a=d0(n,t);if(o.actionType==="exit")return{position:a.position,headingDeg:null};if(o.actionType!=="enter"||!ys(n,t))return null;const s=(a.headingDeg+180)*Math.PI/180,i=Ji+f_;return{position:{x:t.x+Math.cos(s)*i,y:t.y+Math.sin(s)*i},headingDeg:null}}function B_(e){const{actor:t,action:n,target:o}=e,a=[],s=mn(t,n.startSec).position,i=o?M_(e,o,s):C_(e,s);if(!i)return a.push(Le("PATH_GOAL_UNRESOLVED",{path:"parts[].actors",targetId:t.id})),{actor:{...t},issues:a};const r=Vt(t),l=ed(e.room,e.props).filter(N=>N.id!==i.seatPropId),c=P_(e,i.lookAtId,i.position),d=(N,K)=>K&&K.slice(1,-1).every(F=>Ec(e.room,F))&&(!Ec(e.room,N)||Ec(e.room,K[0]))?K:null,u=N=>{const K=c.length>0?Cl(N,i.position,[...l,...c],r):null,F=d(N,Cl(N,i.position,l,r)),B=n.endSec-n.startSec,j=n.actionType==="run"?hg:mg;return K&&K.slice(1,-1).every(ee=>Ec(e.room,ee))&&(!F||$c(K)<=$c(F)*$_+E_||$c(K)<=B*j)?K:F},p=yS(s,i.position,l,r);let f=p?u(p):null;f?f=[s,...f]:f=u(s),f||(f=[s,i.position],a.push(Le("PATH_UNREACHABLE",{path:"parts[].actors",targetId:t.id}))),Ot(f[0],s)>1e-6&&(f=[s,...f]);const h=$c(f),b=n.endSec-n.startSec,I=n.actionType==="run",y=I?Math.min(b,h/hg):b,w=n.startSec+y,M=f.map((N,K)=>K===0?{x:N.x,y:N.y,atSec:n.startSec,pauseSec:0}:K===f.length-1?{x:N.x,y:N.y,atSec:w,pauseSec:0}:{x:N.x,y:N.y,pauseSec:0}),x=[...t.facingKeys],_=f.find(N=>Ot(N,s)>1e-6);_&&x.push({atSec:n.startSec,headingDeg:Cf(s,_),travel:!0}),i.headingDeg!==null&&x.push({atSec:w,headingDeg:i.headingDeg,...i.lookAtId?{targetId:i.lookAtId}:{}}),x.sort((N,K)=>N.atSec-K.atSec);const O=I?$l.running:mg;return b>0&&h/b>O&&t.movementMode==="walking"&&a.push(Le("UNREALISTIC_SPEED",{path:"parts[].actors",targetId:t.id,timeRange:{startSec:n.startSec,endSec:n.endSec},params:{distM:Math.round(h*10)/10,sec:b}})),{actor:{...t,path:{waypoints:[...t.path.waypoints,...M]},facingKeys:x},issues:a,...i.seatPropId?{seatPropId:i.seatPropId}:{}}}const hp=.3,ll=.12,kS=["north","east","south","west"],SS={north:90,east:180,south:270,west:0};function IS(e,t,n,o){const a=e.widthM/2,s=e.depthM/2;switch(t){case"north":return{x:-a+n,y:-s+ll+o};case"south":return{x:-a+n,y:s-ll-o};case"west":return{x:-a+ll+o,y:-s+n};case"east":return{x:a-ll-o,y:-s+n}}}function bp(e){return e in Jo}const kg=1,er=.3,__=.1,Sg=.25,Ig=.3,gp=.3,A_=1.8,T_=.3,wg=e=>gi(Bl(e)),R_=e=>!!Tt(e.catalogKey??e.kind)?.seat,Bf=e=>(e.heightM??.75)>=T_;function D_(e,t,n,o){if(!Bf(e))return!1;
2const a=[...o,...n.filter(Bf)],s=[...a,e],i=n.filter(r=>R_(r)&&Math.hypot(r.center.x-e.center.x,r.center.y-e.center.y)<=A_);return t&&!mp(e.center,s,gp)?!0:i.some(r=>mp(r.center,a,gp)&&!mp(r.center,s,gp))}const O_=(e,t)=>t==="north"||t==="south"?e.widthM:e.depthM;function wS(e,t){return t.kind==="window"?null:{center:IS(e,t.wall,t.offsetM+t.widthM/2,kg/2-ll),widthM:t.widthM+.2,depthM:kg,headingDeg:SS[t.wall]}}function N_(e,t,n,o){const a=Jo[t]?.widthM??.9,s=r=>n.filter(l=>l.wall===r).length,i=[...kS].sort((r,l)=>s(r)-s(l));for(const r of i){const l=O_(e,r);for(let c=er;c+a<=l-er+1e-9;c+=__){if(n.some(p=>p.wall===r&&c<p.offsetM+p.widthM+er&&p.offsetM<c+a+er))continue;const u=wS(e,{kind:Bl(t),wall:r,offsetM:c,widthM:a});if(!(u&&o.some(p=>Va(u,p)!==null)))return{wall:r,offsetM:Math.round(c*100)/100,widthM:a}}}return null}function L_(e,t,n,o=()=>!0){const a=e.widthM/2-er-t.widthM/2,s=e.depthM/2-er-t.depthM/2;if(a<0||s<0)return null;const i=[];for(let l=-s;l<=s+1e-9;l+=Sg)for(let c=-a;c<=a+1e-9;c+=Sg)i.push({x:c,y:l,wallDist:Math.min(a-Math.abs(c),s-Math.abs(l))});i.sort((l,c)=>l.wallDist-c.wallDist);const r={widthM:t.widthM+Ig*2,depthM:t.depthM+Ig*2};for(const l of i){const c={center:{x:l.x,y:l.y},...r,headingDeg:0};if(!n.some(d=>Va(c,d)!==null)&&o(l))return{x:l.x,y:l.y}}return null}function eh(e,t,n){const o=[],a=new Map,s=t.defaultProps.map(f=>{const h=Tt(f.kind);return{id:n("prop"),kind:f.kind,name:f.label??h?.labels.ko??f.kind,center:{x:f.x,y:f.y},widthM:h?.widthM??.6,depthM:h?.depthM??.6,headingDeg:f.headingDeg,heightM:h?.heightM,catalogKey:h?.key,claimed:!1}}),i=new Set(s.map(f=>f.id)),r=t.defaultOpenings.map(f=>({entity:Pf(f,n("opening")),variant:f.kind,claimed:!1})),l=t.walls.north||t.walls.east||t.walls.south||t.walls.west,c=()=>r.map(f=>wS(t,f.entity)).filter(f=>f!==null),d=[...e.filter(f=>bp(f.kind)),...e.filter(f=>!bp(f.kind))];for(const f of d){let h=!1;if(bp(f.kind)){const K=r.find(B=>!B.claimed&&B.variant===f.kind)??r.find(B=>!B.claimed&&Bl(B.variant)===Bl(f.kind))??(wg(f.kind)?r.find(B=>!B.claimed&&wg(B.variant)):void 0);if(K){K.claimed=!0,K.entity={...K.entity,sourceId:f.id},a.set(f.id,K.entity.id);continue}const F=l?N_(t,f.kind,r.map(B=>B.entity),s):null;if(F){const B={...Pf({kind:f.kind,...F},n("opening")),sourceId:f.id};r.push({entity:B,variant:f.kind,claimed:!0}),a.set(f.id,B.id);continue}h=l}else{const N=f.roomPropIndex!==void 0&&f.roomPropIndex<t.defaultProps.length?s[f.roomPropIndex]:void 0,K=(N&&!N.claimed?N:void 0)??s.find(F=>!F.claimed&&F.kind===f.kind);if(K){K.claimed=!0,K.sourceId=f.id,K.name=f.label,a.set(f.id,K.id);continue}}const b=Tt(f.kind)??Tt("generic"),I=[...s,...c()],y=l?qs({kind:t.kind,widthM:t.widthM,depthM:t.depthM,walls:t.walls,openings:r.map(N=>N.entity)}):[],w=(N,K)=>D_({center:N,widthM:b.widthM,depthM:b.depthM,headingDeg:K,heightM:b.heightM},!!b.seat,s,y),M=N=>SS[N];let x=null,_=0;for(const N of kS){const K=M(N),F=N==="north"||N==="south"?t.widthM:t.depthM;let B=hp+b.widthM/2,j=null;for(;B+b.widthM/2<=F-hp+1e-9;){const ee=IS(t,N,B,b.depthM/2),D={center:ee,widthM:b.widthM,depthM:b.depthM,headingDeg:K};if(!I.some(Z=>Va(D,Z)!==null)&&!w(ee,K)){j=ee;break}B+=b.widthM+hp}if(j){x=j,_=K;break}}x||(x=L_(t,b,I,N=>!w(N,0)),_=0);const O=x??{x:0,y:0},A={id:n("prop"),kind:f.kind,name:f.label,center:O,widthM:b.widthM,depthM:b.depthM,headingDeg:_,heightM:b.heightM,catalogKey:b.key,sourceId:f.id,claimed:!0};s.push(A),a.set(f.id,A.id),h&&o.push(Le("OPENING_NO_SPACE",{path:"room.openings",targetId:A.id,params:{kind:f.kind}})),o.push(Le(x?"PROP_UNPLACED":"PROP_NO_SPACE",{path:"room.props",targetId:A.id,params:{kind:f.kind}}))}for(let f=s.length-1;f>=0;f-=1){const h=s[f];if(!i.has(h.id)||!Bf(h)||!c().some(I=>Va(I,h)!==null))continue;const b=Ya(h.center,Math.hypot(h.widthM,h.depthM)/2,[...s.filter(I=>I!==h),...c()].map((I,y)=>({kind:"rect",rect:I,id:`o${y}`})),{minX:-t.widthM/2,minY:-t.depthM/2,maxX:t.widthM/2,maxY:t.depthM/2});b?s[f]={...h,center:b}:h.claimed||s.splice(f,1)}const u=s.map(({claimed:f,...h})=>h),p=r.map(f=>f.entity);return{props:u,openings:p,propIdMap:a,issues:o}}const K_={x:0,y:0};function F_(e,t,n){if(!e)return null;const o=t.get(e);if(!o)return null;const a=n.props.find(i=>i.id===o);if(a)return{kind:"prop",prop:a};const s=n.openings.find(i=>i.id===o);return s?{kind:"opening",opening:s}:null}function H_(e,t,n,o){const a=[],s=[],i={},r=[],l=qs(n).map(I=>({kind:"rect",rect:I,id:I.id})),c=n.props.map(I=>({kind:"rect",rect:I,id:I.id})),d=[],p=n.walls.north||n.walls.east||n.walls.south||n.walls.west?{minX:-n.widthM/2,minY:-n.depthM/2,maxX:n.widthM/2,maxY:n.depthM/2}:{minX:-1e6,minY:-1e6,maxX:1e6,maxY:1e6},f=new Map(t.map(I=>[I.sourceId,I])),h=new Set,b=(I,y)=>{const w=y?.relation??"unspecified",M=y?F_(y.targetPropId,o,n):null,x=y?.pose??"stand",_=w==="seated-on"&&M?.kind==="prop"&&x!=="sit"?{...Zm(M.prop)??{position:M.prop.center,headingDeg:M.prop.headingDeg},...x==="lie"?{}:{headingDeg:M.prop.headingDeg},seatPropId:M.prop.id}:null,O=!_&&w==="seated-on"&&M?.kind==="prop"&&!Tt(M.prop.catalogKey??M.prop.kind)?.seat?Ql(M.prop,n,I.radiusM,r.map(V=>V.kind==="circle"?V.center:V.rect.center),d):null,A=w==="unspecified"?null:_??O??_d(w,M,n,I.radiusM,{takenSlots:d});let N=null;w==="unspecified"?N="PLACEMENT_UNSPECIFIED":A||(N="PLACEMENT_UNRESOLVED");const K=A??{position:K_,headingDeg:0},F=w==="seated-on"&&M?.kind==="prop"?A?.seatPropId??M.prop.id:null,j=x==="sit"&&!!K.seatPropId?[]:c.filter(V=>V.id!==F),ee=[...l,...j,...r],D=Ya(K.position,I.radiusM,ee,p)??K.position,Z={position:D,headingDeg:K.headingDeg,pose:x};K.seatPropId&&(Z.seatPropId=K.seatPropId),i[I.id]=Z,r.push({kind:"circle",center:D,radius:I.radiusM,id:I.id}),K.slotKey&&d.push(K.slotKey),N&&a.push(Le(N,{path:"parts[].actors",targetId:I.id}));
2const L={id:I.id,kind:"actor",source:"inferred",codes:N?[N]:[]};y?.facingNote&&(L.note=y.facingNote),s.push(L),h.add(I.id)};for(const I of e){const y=f.get(I.characterId);y&&b(y,I)}for(const I of t)h.has(I.id)||b(I,null);return{starts:i,issues:a,report:{entries:s}}}const z_=.4,j_={minX:-1e6,minY:-1e6,maxX:1e6,maxY:1e6};function U_(e,t,n=z_,o=[]){const a=(n-fS)/2,s=t.map((i,r)=>({kind:"circle",center:i,radius:a,id:`camera-${r}`}));return Ya(e,a,[...s,...o],j_)??e}const Td="[ë¸ë¡í¹ë³´ë íì¤]";function G_(e){return e.label!==void 0||e.lensMm!==void 0||e.moveType!==void 0||e.angle!==void 0||e.description!==void 0||e.lighting!==void 0||e.sound!==void 0||e.beat!==void 0||e.note!==void 0}function V_(e,t){const n=[`${Td} CUT ${e.label??""}`.trimEnd()];e.description&&n.push(`[ì¥ë©´] ${e.description.replace(/\n/g," ")}`);for(const o of t)n.push(`[ëì¬] ${o.speaker}${o.direction?`(${o.direction})`:""} "${o.line}"`);return e.cameraNote&&n.push(`[ì¹´ë©ë¼] ${e.cameraNote}`),e.lighting&&n.push(`[ì¡°ëª ] ${e.lighting}`),e.sound&&n.push(`[ì¬ì´ë] ${e.sound}`),e.beat&&n.push(`[ë¹í¸] ${e.beat}`),e.note&&n.push(`[ë©ëª¨] ${e.note}`),n.join(` 3`)}function _f(e,t){const n={};for(const o of t){const a=e[o];a?.ko?.startsWith(Td)&&(n[o]=a)}return n}const W_={ë®:"day",주ê°:"day",ì¤ì :"day",ì¤í:"day",ë°¤:"night",ì¼ê°:"night",ìë²½:"dawn",ì ë :"dusk",í´ì§ë :"dusk",day:"day",night:"night",dawn:"dawn",dusk:"dusk",evening:"dusk"};function X_(e){const t=e?.trim().toLowerCase();return t?W_[t]??null:null}function Y_(e){return du.includes(e)}const q_=.5;function Z_(e,t,n,o){if(e.targetPropId!==void 0){const s=t.get(e.targetPropId);return s?n.openings.some(i=>i.id===s)?{kind:"opening",id:s}:{kind:"prop",id:s}:null}const a=e.targetCharacterId!==void 0?o.get(e.targetCharacterId):null;return a?{kind:"actor",id:a}:null}function J_(e,t){const n={...e};if(t.moveType!==void 0&&(n.move={type:t.moveType}),t.angle!==void 0){const o=dS[t.angle];n.pitchDeg=o.pitch,n.rollDeg=o.roll}return n}const Q_=.6;function eA(e,t){if(e===0)return[Q_,0];const n=Math.min(.5,t/2);return e<=2?[1.05,e===1?n:-n]:[1.05+.6*(e-2),0]}const hl=.25;function tA(e,t,n){const o=e.openings.filter(a=>gi(a.kind)).map(a=>({id:a.id,d:Ot(t,vi(e,a,0).position)})).sort((a,s)=>a.d-s.d);return(o.find(a=>n(a.id))??o[0])?.id??null}function nA(e,t,n,o){const a=mn(e,n);if(!ys(t,a.position))return a;for(let s=n+hl;s<o;s+=hl){const i=mn(e,s);if(!ys(t,i.position))return i}return a}function oA(e){return[...qs(e),...e.props.map(t=>({...t,heightM:t.heightM??.75}
3))]}function aA(e,t,n){const o=[...n],a=new Set,s={room:e,parts:[{partId:t.id,durationSec:t.durationSec,props:[],actors:o}]};for(let i=0;i<o.length;i+=1){const r=o[i];if(r.path.waypoints.length===0)continue;const l=xf(s,t.id,r.id);if(!l.ok)continue;a.add(r.id);let c=r;for(const d of l.commands)d.type==="actor.moveStart"?c=Ad(c,d.position,t.durationSec):d.type==="actor.replacePath"&&(c={...c,path:{waypoints:d.waypoints}});o[i]=c}return{actors:o,clear:a}}function sA(e,t){const{charByDraftId:n,room:o,propIdMap:a,idFactory:s,dialogueLang:i}=t,r=[],l=new Map;let c=e.castIds.map((L,V)=>{const pe=n.get(L),le=s("actor");return l.set(L,le),{id:le,refId:pe.refId,name:pe.draft.name,aliases:pe.draft.aliases,color:Xm(V),species:MS(pe.draft),bodyType:Y_(pe.draft.bodyType)?pe.draft.bodyType:"other",movementMode:"walking",start:{position:{x:0,y:0},headingDeg:0,pose:"stand"},path:{waypoints:[]},positionKeys:[],facingKeys:[],poseKeys:[]}});const d=c.map((L,V)=>({id:L.id,sourceId:e.castIds[V],name:L.name,radiusM:Vt({species:L.species})})),u=H_(e.placements,d,o,a);r.push(...u.issues),c=c.map(L=>{const V=u.starts[L.id];return{...L,start:V,poseKeys:[{atSec:0,pose:V.pose,...V.seatPropId?{seatPropId:V.seatPropId}:{}}]}});const p=L=>{const V=e.actions.filter(pe=>pe.characterId===e.castIds[L]&&pe.actionClass==="movement").sort((pe,le)=>pe.startSec-le.startSec)[0];return V?.actionType==="enter"?V.startSec:null},f=L=>{const V=e.placements.find(le=>le.characterId===e.castIds[L]);if(V?.relation!=="at-entrance"||p(L)===null)return null;const pe=V.targetPropId?a.get(V.targetPropId):void 0;return o.openings.find(le=>le.id===pe&&gi(le.kind))??o.openings.find(le=>gi(le.kind))??null},h=(L,V)=>c.filter((pe,le)=>{if(le===L||f(le)?.id!==V)return!1;const me=p(le),oe=p(L);return me<oe||me===oe&&le<L}).length;c=c.map((L,V)=>{if(e.placements.find(oe=>oe.characterId===e.castIds[V])?.relation!=="at-entrance"||p(V)===null)return L;const le=f(V);if(le){const[oe,fe]=eA(h(V,le.id),le.widthM),X=vi(o,le,-oe),re=X.headingDeg*Math.PI/180,Se={x:X.position.x-Math.sin(re)*fe,y:X.position.y+Math.cos(re)*fe};return{...L,start:{...L.start,position:Se,headingDeg:X.headingDeg}}}if(!mu(o))return L;const me=d0(o,L.start.position);return{...L,start:{...L.start,position:me.position,headingDeg:me.headingDeg+180}}});const b=new Map,I=new Set,y=new Set,w=e.actions.map(L=>{const V=L.targetPropId!==void 0||L.targetCharacterId!==void 0?Z_(L,a,o,l):g_({actionClass:L.actionClass,actionType:L.actionType,text:L.text,actorId:l.get(L.characterId)??null},o.props,o.openings,c),pe=s("action");if(V?.kind==="actor"&&b.set(pe,V.id),L.doorAuto&&y.add(pe),L.targetPropId!==void 0||L.targetCharacterId!==void 0){const le=l.get(L.characterId);le&&I.add(le)}return{id:pe,actorId:l.get(L.characterId)??null,startSec:L.startSec,endSec:L.endSec,actionType:L.actionType,actionClass:L.actionClass,text:L.text,source:"explicit",...V?.kind==="prop"?{targetPropId:V.id}:{},...V?.kind==="opening"?{targetOpeningId:V.id}:{}}}),M=(L,V)=>e.propEvents.some(pe=>pe.open&&a.get(pe.targetPropId)===L&&pe.startSec<=V&&V<=pe.endSec),x=new Map,_=new Map;e.actions.forEach((L,V)=>{if(L.actionClass==="movement"&&_.set(L.characterId,V),L.pose!=="sit"&&L.pose!=="lie")return;const pe=_.get(L.characterId);pe!==void 0&&(_.delete(L.characterId),w[pe].targetPropId!==void 0&&x.set(w[pe].id,V))});const O=new Map,A=w.filter(L=>L.actionClass==="movement").sort((L,V)=>L.startSec-V.startSec);for(let L of A){if(y.has(L.id)){const oe=c.find(X=>X.id===L.actorId),fe=oe?tA(o,mn(oe,L.startSec).position,X=>M(X,L.startSec)):null;if(fe){const X=w.indexOf(L);L={...L,targetOpeningId:fe},w[X]=L}}const V=b.get(L.id),pe=L.targetPropId!==void 0?{kind:"prop",id:L.targetPropId}:L.targetOpeningId!==void 0?{kind:"opening",id:L.targetOpeningId}:V!==void 0?{kind:"actor",id:V}:null,le=c.findIndex(oe=>oe.id===L.actorId);if(le===-1)continue;const me=B_({actor:c[le],action:L,target:pe,room:o,props:o.props,actors:c,seat:x.has(L.id)?e.actions[x.get(L.id)].pose:void 0});c[le]=me.actor,r.push(...me.issues),me.seatPropId&&O.set(x.get(L.id),me.seatPropId)}for(let L=0;L<c.length;L+=1){const V=c[L],pe=V.path.waypoints[0];if(!I.has(V.id)||!pe||Math.hypot(pe.x-V.start.position.x,pe.y-V.start.position.y)<1e-6)continue;const le={x:V.start.position.x,y:V.start.position.y,atSec:Math.max(0,(pe.atSec??
30)-q_),pauseSec:0};c[L]={...V,path:{waypoints:[le,...V.path.waypoints]}}}e.actions.forEach((L,V)=>{if(L.pose===void 0)return;const pe=c.findIndex(X=>X.id===w[V].actorId);if(pe===-1)return;const le=c[pe],me=O.get(V),oe={atSec:L.startSec,pose:L.pose,...me?{seatPropId:me}:{}},fe=[...le.poseKeys,oe].sort((X,re)=>X.atSec-re.atSec);c[pe]={...le,poseKeys:fe}}),c=c.map(L=>{let V=L.poseKeys;const pe=L.path.waypoints;return pe.forEach((le,me)=>{const oe=pe[me+1];if(le.atSec===void 0||!oe||Math.hypot(oe.x-le.x,oe.y-le.y)<1e-6)return;const fe=le.atSec+le.pauseSec,X=mn({...L,poseKeys:V},fe).pose;Q0.includes(X)&&(V=[...V,{atSec:fe,pose:"stand"}].sort((re,Se)=>re.atSec-Se.atSec))}),V===L.poseKeys?L:{...L,poseKeys:V}});const N=aA(o,e,c);c=N.actors;for(let L=r.length-1;L>=0;L-=1)r[L].code==="PATH_UNREACHABLE"&&N.clear.has(r[L].targetId)&&r.splice(L,1);const K=e.dialogues.map(L=>({id:s("dialogue"),actorId:l.get(L.characterId),startSec:L.startSec,endSec:L.endSec,line:L.line,lang:i,mode:L.mode,timeSource:L.timeSource})),F=e.propEvents.map(L=>{const V=a.get(L.targetPropId);return V||r.push(Le("REFERENCE_MISSING",{path:"parts[].timeline.propEvents",targetId:L.id})),{id:s("propEvent"),targetId:V??L.targetPropId,startSec:L.startSec,endSec:L.endSec,state:{open:L.open}}}),B=[],j=[],ee=[],D={};for(const L of e.cuts){const V=G_(L),pe=L.subjectIds.map(Q=>l.get(Q)).filter(Q=>!!Q),le=c.map(Q=>({actor:{id:Q.id,name:Q.name,species:Q.species,bodyType:Q.bodyType},state:nA(Q,o,L.startSec,L.endSec)})),me=[.25,.5,.75,1].map(Q=>{const $e=Math.min(L.startSec+(L.endSec-L.startSec)*Q,L.endSec-hl/10);return c.map(Fe=>({actor:{id:Fe.id,name:Fe.name,species:Fe.species,bodyType:Fe.bodyType},state:mn(Fe,$e)})).filter(Fe=>!ys(o,Fe.state.position))}),{camera:oe,warnings:fe}=yB({cut:{id:L.id,startSec:L.startSec,shotType:L.shotType,subjectIds:pe,...V&&L.lensMm!==void 0?{lensMm:L.lensMm}:{},...V&&L.angle!==void 0?{pitchDeg:dS[L.angle].pitch}:{}},later:me,peoplePath:c.flatMap(Q=>Array.from({length:Math.floor((L.endSec-L.startSec)/hl)+1},($e,Fe)=>mn(Q,L.startSec+Fe*hl).position).filter($e=>!ys(o,$e))),subjects:le,room:o,solids:oA(o),cameras:B,idFactory:s});r.push(...fe);const X=V?J_(oe,L):oe;B.push(X);const re={id:s("coverage"),cameraId:X.id,startSec:L.startSec,endSec:L.endSec,shotType:L.shotType,subject:X.subject??{targetIds:[]},timingMode:"absolute",shotIntent:{type:L.intent,confidence:.5,source:"derived"}};j.push(re);const Se=s("cut");if(V){const Q=e.dialogues.filter($e=>$e.startSec>=L.startSec&&$e.startSec<L.endSec).map($e=>({speaker:n.get($e.characterId)?.draft.name??$e.characterId,...$e.direction?{direction:$e.direction}:{},line:$e.line}));D[Se]={ko:V_(L,Q)}}ee.push({id:Se,inSec:L.startSec,outSec:L.endSec,coverageId:re.id,cameraId:X.id})}return{part:{partId:e.id,title:e.title,durationSec:e.durationSec,castRefIds:e.castIds.map(L=>n.get(L).refId),actors:c,props:[],cameras:B,timeline:{actions:w,dialogues:K,propEvents:F,coverages:j,cuts:ee},prompt:{blocks:{},cutTexts:D},placementReport:u.report},issues:r}}function iA(e,t){const n=t.defaultProps.map(r=>{const l=Tt(r.kind);return[r.label,l?.labels.ko,...l?.aliases??[]].filter(c=>!!c?.trim())}),o=new Set(e.props.map(r=>r.roomPropIndex)),a=[],s=new Map,i=e.parts.map(r=>({...r,placements:r.placements.map(l=>{const c=l.targetName;if(l.targetPropId!==null||!c)return l;const d=`${l.characterId}\0${c.text}`;let u=s.get(d);if(!u){let f=-1,h=0;for(let I=0;I<n.length;I+=1){if(o.has(I))continue;const y=Math.max(0,...n[I].filter(w=>c.text.includes(w)).map(w=>w.length));y>h&&(f=I,h=y)}if(f===-1)return l;const b=t.defaultProps[f];o.add(f),u=`room-prop-${f}`,a.push({id:u,kind:b.kind,label:b.label??Tt(b.kind)?.labels.ko??b.kind,roomPropIndex:f}),s.set(d,u)}const p=l.pose==="stand"&&c.relation==="seated-on"?"near":c.relation;return{...l,relation:p,targetPropId:u}})}
3));return a.length>0?{...e,props:[...e.props,...a],parts:i}:e}function MS(e){return e.species&&Dm(e.species)?e.species:"human"}function _l(e,t){const n=t.idFactory,o=t.roomPreset?iA(e,t.roomPreset):e,a=[],s=t.roomPreset?{room:{kind:t.roomPreset.kind,widthM:t.roomPreset.widthM,depthM:t.roomPreset.depthM,walls:t.roomPreset.walls,openings:[],props:[]},issues:[],preset:t.roomPreset}:Qm(o.location.kind,t.roomOverride);a.push(...s.issues);let i=s.room,r=new Map,l=s.preset;const{widthM:c,depthM:d}=o.location;if(!t.roomOverride&&!t.roomPreset&&l&&c!==void 0&&d!==void 0){const I=Math.min(bi,Math.max(hi,c)),y=Math.min(bi,Math.max(hi,d));(I!==c||y!==d)&&a.push(Le("ROOM_SIZE_CLAMPED",{path:"room",params:{widthM:I,depthM:y}})),l=vS(l,I,y),i={...i,widthM:I,depthM:y}}if(!t.roomOverride&&l){const I=eh(o.props,l,n);i={...i,props:I.props,openings:I.openings},r=I.propIdMap,a.push(...I.issues)}const u=o.characters.map((I,y)=>{const w=I.notes.trim().slice(0,ur),M=MS(I)!=="human";return{id:n("ref"),tag:`@Image${y+1}`,name:I.name,aliases:I.aliases,...w?{description:w}:{},...M&&I.speciesName?{speciesName:I.speciesName}:{},...M&&I.speciesName&&I.speciesNameEn?{speciesNameEn:I.speciesNameEn}:{}}}),p=new Map(o.characters.map((I,y)=>[I.id,{draft:I,refId:u[y].id}])),f=[{id:n("ref"),tag:`@Image${u.length+1}`,name:o.location.label||o.location.kind,aliases:[]}],h=[];for(const I of o.parts){const{part:y,issues:w}=sA(I,{charByDraftId:p,room:i,propIdMap:r,idFactory:n,dialogueLang:t.dialogueLang??"ko-KR"});h.push(y),a.push(...w)}const b={schemaVersion:Ha,...Sr(),projectId:t.projectId,name:t.name,scene:{sceneId:o.sceneId,title:o.title},room:i,refs:{characters:u,backgrounds:f,props:[]},parts:h,activePartId:h[0].partId,settings:{fps:24,lightTime:X_(o.timeOfDay)??"day",lightDirectionDeg:45,easing:"smooth"},source:null};return Mr(b,a,"scene-draft")}function Af(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function $S(e,t){const n=Af(e.widthM)?e.widthM:t?.widthM,o=Af(e.depthM)?e.depthM:t?.depthM,a=[];return n===void 0&&a.push("widthM"),o===void 0&&a.push("depthM"),n===void 0||o===void 0?{ok:!1,missing:a}:{ok:!0,widthM:n,depthM:o}}function ES(e,t){const n=[];for(const o of e){const a=o.params?.name;o.code===t&&typeof a=="string"&&n.push(a)}return n}function rA(e){return ES(e,"PROP_SIZE_UNKNOWN")}function xS(e){const t=[e.widthM,e.depthM].filter(Af);return t.length>0?Math.max(...t):null}function lA(e){return ES(e,"OPENING_SIZE_UNKNOWN")}const cA=.3,dA=["door","door-entrance","glass-door","window","window-wide"],uA=.6,pA=1.55,fA=["wall","box","generic"],mA=/^#[0-9a-f]{6}$/i,hA=["refOrder","usesRefs","mode","cuts_ref","status","model","_note_for_board"];function bA(e,t){const n=t.widthM/2,o=t.depthM/2;return[{wall:"north",along:e.x+n,distance:Math.abs(e.y+o)},{wall:"south",along:e.x+n,distance:Math.abs(e.y-o)},{wall:"west",along:e.y+o,distance:Math.abs(e.x+n)},{wall:"east",along:e.y+o,distance:Math.abs(e.x-n)}].reduce((s,i)=>i.distance<s.distance?i:s)}function gA(e,t){const n=e,o=t.idFactory,a=[],s=new Set,i=n.room,r={x:i.centerPx?.[0]??Cd.x,y:i.centerPx?.[1]??Cd.y},l=i.widthPx/Da,c=i.depthPx/Da,d=aS(i.kind??"room"),u=[],p=[],f=new Map;for(const[N,K]of i.items.entries()){const F=rs({x:K.x,y:K.y},r);let B=qm(K.kind);const j=fA.includes(B)&&K.name?Tt(K.name):null;j&&(B=j.kind);const ee={widthM:typeof K.w=="number"?K.w/Da:void 0,depthM:typeof K.h=="number"?K.h/Da:void 0},D=Qt((K.angle??0)+90),Z=String(K.id);if(dA.includes(B)){const le=bA(F,{widthM:l,depthM:c});if(le.distance<=cA){const me=xS(ee);if(me===null){a.push(Le("OPENING_SIZE_UNKNOWN",{path:`room.items[${N}]`,params:{sourceId:Z,name:K.name??B,kind:B}}));continue}const oe={id:o("opening"),kind:B==="glass-door"?"glass-door":B==="door"||B==="door-entrance"?"door":"window",wall:le.wall,offsetM:le.along-me/2,widthM:me,heightM:Jo[B]?.heightM??2.05,sourceId:Z};p.push(oe),f.set(Z,oe.id);continue}}const L=j??Tt(B),V=$S(ee,L);if(!V.ok){a.push(Le("PROP_SIZE_UNKNOWN",{path:`room.items[${N}]`,params:{sourceId:Z,name:K.name??B,kind:B,axes:V.missing}}));continue}const pe={id:o("prop"),kind:B,name:K.name??B,center:F,widthM:V.widthM,depthM:V.depthM,headingDeg:D,...L?{heightM:L.heightM,catalogKey:L.key}:{},sourceId:Z};u.push(pe),f.set(Z,pe.id)}const h={kind:d,widthM:l,depthM:c,walls:{north:!0,east:!0,south:!0,west:!0},openings:p,props:u},b=new Map,I=(n.refs.characters??[]).map(N=>{const K=o("ref");return N.id&&b.set(N.id,K),{id:K,tag:N.tag,name:N.name,aliases:N.aliases??[]}}),y=(n.refs.backgrounds??[]).map(N=>({id:o("ref"),tag:N.tag,name:N.name,aliases:N.aliases??[]})),w=(n.refs.props??[]).map(N=>({id:o("ref"),tag:N.tag,name:N.name,aliases:N.aliases??[]})),M=new Map;let x=0;const _=N=>{const K=M.get(N);if(K)return K;const F=(n.refs.characters??[]).find(j=>j.id===N)?.color,B=F&&mA.test(F)?F:Xm(x++);return M.set(N,B),B},O=n.parts.map(N=>{for(const oe of hA)oe in N&&s.add(oe);const K=new Map,F=N.appears.map(oe=>{const fe=N.blocking[oe],X=o("actor");K.set(oe,X);const re=rs({x:fe.x,y:fe.y},r),Se=oS(fe.pose);fe.visibility&&s.add("visibility");let Q;if(Se==="sit"){let Fe=null;for(const Ze of u){if(!Tt(Ze.catalogKey??Ze.kind)?.seat)continue;const ue=Ot(re,Ze.center);ue<=uA&&(!Fe||ue<Fe.dist)&&(Fe={id:Ze.id,dist:ue})}Q=Fe?.id}const $e=(fe.path??[]).map(Fe=>{const Ze=rs(Fe,r);return{x:Ze.x,y:Ze.y,pauseSec:0}});return{id:X,refId:b.get(oe),name:oe,aliases:[],color:_(oe),species:"human",bodyType:"other",movementMode:"walking",start:{position:re,headingDeg:fe.angle,pose:Se,...Q?{seatPropId:Q}:{}},path:{waypoints:$e},positionKeys:[],facingKeys:[],poseKeys:[],sourceId:oe}}),B=(N.cameras??[]).map(oe=>{const fe=rs({x:oe.x,y:oe.y},r),X=FP[oe.fov],re=X??xl(G0(oe.fov));let Se=null;if(oe.subject){const Q=K.get(oe.subject)??null;Q||a.push(Le("REFERENCE_MISSING",{path:"parts[].cameras[].subject",targetId:oe.cutRef})),Se=Q}return{id:o("cam"),name:oe.cutRef,position:fe,heightM:pA,headingDeg:Qt
3(oe.angle),pitchDeg:0,rollDeg:0,lensMm:re,...X?{}:{fovOverrideDeg:oe.fov},move:{type:"static"},keys:[],subject:Se?{targetIds:[Se]}:null,sourceId:oe.cutRef}}),j=[],ee=[],D={};let Z=0;for(const oe of N.prompt?.cuts??[]){const fe=W2(oe.tc);if(!fe){a.push(Le("CUT_TIME_UNPARSED",{path:"parts[].timeline.cuts",params:{tc:oe.tc}}));continue}const X=fe.startSec??Z,re=fe.endSec;Z=re;const Se=oe.lb.trim().split(/\s+/)[0],Q=B.find(ye=>ye.name===Se);if(!Q){a.push(Le("REFERENCE_MISSING",{path:"parts[].timeline.cuts",params:{label:Se}}));continue}const $e=(N.cameras??[]).find(ye=>ye.cutRef===Se),Fe=If($e.shotSize),Ze={id:o("coverage"),cameraId:Q.id,startSec:X,endSec:re,shotType:Fe,subject:Q.subject??{targetIds:[]},timingMode:"absolute"};j.push(Ze);const ue={id:o("cut"),inSec:X,outSec:re,coverageId:Ze.id,cameraId:Q.id};ee.push(ue),(oe.ko!==void 0||oe.en!==void 0)&&(D[ue.id]={...oe.ko!==void 0?{ko:oe.ko}:{},...oe.en!==void 0?{en:oe.en}:{}})}const L=(N.actions??[]).map(oe=>({id:o("action"),actorId:K.get(oe.actorId)??null,startSec:oe.start,endSec:oe.end,actionType:z2(oe.actionType),actionClass:sS.has(oe.actionType)?"movement":"performance",text:{ko:oe.text},source:"explicit"})),V=(N.dialogueSchedule??[]).map(oe=>({id:o("dialogue"),actorId:K.get(oe.actorId),startSec:oe.start,endSec:oe.end,line:oe.line,lang:"ko-KR",mode:"blocking",timeSource:"explicit"})),pe=(N.propActions??[]).map(oe=>{const fe=f.get(oe.targetId);return fe||a.push(Le("REFERENCE_MISSING",{path:"parts[].timeline.propEvents",targetId:oe.targetId})),{id:o("propEvent"),targetId:fe??oe.targetId,startSec:oe.start,endSec:oe.end,state:{open:oe.actionType==="open_door"}}}),le={};for(const oe of N.prompt?.blocks??[])le[oe.n]=oe.en??oe.ko??oe.headEn??oe.headKo??"";const me={blocks:le,cutTexts:D};return{partId:N.partId,title:N.partId,durationSec:N.duration,castRefIds:N.appears.map(oe=>b.get(oe)).filter(oe=>!!oe),actors:F,props:[],cameras:B,timeline:{actions:L,dialogues:V,propEvents:pe,coverages:j,cuts:ee},prompt:me}});s.size>0&&a.push(Le("LEGACY_FIELD_IGNORED",{path:"root",params:{fields:[...s].join(",")}}));const A={schemaVersion:Ha,...Sr(),projectId:t.projectId,name:t.name,scene:{sceneId:n.sceneId,title:n.title},room:h,refs:{characters:I,backgrounds:y,props:w},parts:O,activePartId:O[0].partId,settings:{fps:24,lightTime:"day",lightDirectionDeg:45,easing:"smooth"},source:null};return Mr(A,a,"scene-v1")}const vA=.3,yA=["door","door-entrance","glass-door","window","window-wide"],kA=15,SA=1.55,IA=["beats","videoIR","performanceMap","sceneBundle","promptEditor","_motionIRPreviewBackup"],wA=["motionMarkers","motion","visibleRanges","promptDirected","promptFrameVisibility"],MA={주ê°:"day",ì¼ê°:"night",ìë²½:"dawn",ì ë
:"dusk"};function $A(e,t){const n=t.widthM/2,o=t.depthM/2;return[{wall:"north",along:e.x+n,distance:Math.abs(e.y+o)},{wall:"south",along:e.x+n,distance:Math.abs(e.y-o)},{wall:"west",along:e.y+o,distance:Math.abs(e.x+n)},{wall:"east",along:e.y+o,distance:Math.abs(e.x-n)}].reduce((s,i)=>i.distance<s.distance?i:s)}function EA(e){return e==="glass-door"?"glass-door":e==="door"||e==="door-entrance"?"door":"window"}function xA(e,t){const n=e,o=t.idFactory,a=[],s=new Set;for(const pe of IA)n.state[pe]!==void 0&&s.add(pe);const i=n.cutLen??kA,r=n.fps??24,l=MA[n.light?.time??""]??"day",c=n.easing==="linear"?"linear":"smooth",d=n.state.items??[],u=d.find(pe=>pe.type==="room"),p=u?{x:u.x,y:u.y}:Cd,f=u?aS(u.kind??"room"):Qc.kind,h=u?.w?u.w/Da:Qc.widthM,b=u?.h?u.h/Da:Qc.depthM,I=lu.includes(f),y={north:!I,east:!I,south:!I,west:!I},w=[],M=[],x=[],_=new Map,O=X2(),A=new Map,N=[],K=[];for(const[pe,le]of d.entries()){for(const me of wA)le[me]!==void 0&&s.add(me);if(le.type!=="room"&&le.type==="prop"){const me=rs({x:le.x,y:le.y},p),oe=qm(le.kind??""),fe=String(le.id),X={widthM:typeof le.w=="number"?le.w/Da:void 0,depthM:typeof le.h=="number"?le.h/Da:void 0};if(yA.includes(oe)){const $e=$A(me,{widthM:h,depthM:b});if($e.distance<=vA){const Fe=xS(X);if(Fe===null){a.push(Le("OPENING_SIZE_UNKNOWN",{path:`state.items[${pe}]`,params:{sourceId:fe,name:le.name??oe,kind:oe}}));continue}const Ze={id:o("opening"),kind:EA(oe),wall:$e.wall,offsetM:$e.along-Fe/2,widthM:Fe,heightM:Jo[oe]?.heightM??2.05,sourceId:fe};x.push(Ze),_.set(fe,Ze.id);continue}}const re=Tt(oe),Se=$S(X,re);if(!Se.ok){a.push(Le("PROP_SIZE_UNKNOWN",{path:`state.items[${pe}]`,params:{sourceId:fe,name:le.name??oe,kind:oe,axes:Se.missing}}));continue}const Q={id:o("prop"),kind:oe,name:le.name??oe,center:me,widthM:Se.widthM,depthM:Se.depthM,headingDeg:Qt
3((le.angle??0)+90),...re?{heightM:re.heightM,catalogKey:re.key}:{},sourceId:fe};_.set(fe,Q.id),le.layer==="perf"?M.push(Q):w.push(Q)}}const F={kind:f,widthM:h,depthM:b,walls:y,openings:x,props:w};for(const pe of d){if(pe.type!=="actor")continue;const le=rs({x:pe.x,y:pe.y},p),me=o("actor");O.register("actor",String(pe.id),me,{name:pe.name}),pe.name&&A.set(pe.name,me);const oe=(pe.path??[]).map(X=>{const re=rs(X,p);return{x:re.x,y:re.y,...X.t!=null?{atSec:X.t*i}:{},pauseSec:X.pause??0}}),fe=(pe.keys??[]).map(X=>{const re=rs(X,p);return{atSec:X.t*i,x:re.x,y:re.y}});N.push({id:me,name:pe.name??"",aliases:[],color:pe.color??"#4f8cff",species:"human",bodyType:"other",movementMode:"walking",start:{position:le,headingDeg:Qt(pe.angle??0),pose:oS(pe.pose)},path:{waypoints:oe},positionKeys:fe,facingKeys:[],poseKeys:[],sourceId:String(pe.id)})}for(const pe of d){if(pe.type!=="camera")continue;const le=rs({x:pe.x,y:pe.y},p),me=If(pe.shotSize),oe=pe.lensMm?xl(pe.lensMm):pe.fovOverride?xl(G0(pe.fovOverride)):uS[me].lensMm,fe=pe.lensMm?void 0:pe.fovOverride;let X=null;pe.subjectId!==void 0&&pe.subjectId!==null&&(X=O.resolve("actor",pe.subjectId),X||a.push(Le("REFERENCE_MISSING",{path:"state.items[].subjectId",targetId:String(pe.subjectId)}))),K.push({id:o("cam"),name:pe.name??pe.cutRef??String(pe.id),position:le,heightM:pe.camHeight??SA,headingDeg:Qt(pe.angle??0),pitchDeg:pe.camPitch??0,rollDeg:pe.roll??0,lensMm:oe,...fe!==void 0?{fovOverrideDeg:fe}:{},move:{type:"static"},keys:[],subject:X?{targetIds:[X]}:null,sourceId:String(pe.id)})}const B=[],j=[];for(const pe of d){if(pe.type!=="camera"||pe.tIn==null)continue;const le=K.find(X=>X.sourceId===String(pe.id)),me=pe.tIn*i,oe=(pe.tOut??1)*i,fe={id:o("coverage"),cameraId:le.id,startSec:me,endSec:oe,shotType:If(pe.shotSize),subject:le.subject??{targetIds:[]},timingMode:"absolute"};B.push(fe),j.push({id:o("cut"),inSec:me,outSec:oe,coverageId:fe.id,cameraId:le.id})}const ee=(n.state.dialogue??[]).map(pe=>{const le=A.get(pe.who)??null;return le||a.push(Le("REFERENCE_MISSING",{path:"state.dialogue[].who",targetId:pe.who})),{id:o("dialogue"),actorId:le??pe.who,startSec:pe.t0*i,endSec:pe.t1*i,line:pe.line,lang:"ko-KR",mode:pe.mode==="concurrent"?"concurrent":"blocking",timeSource:"explicit"}});n.state.actionTimeline!==void 0&&s.add("actionTimeline"),n.state.propTimeline!==void 0&&s.add("propTimeline");const D=[],Z=[],L={partId:o("part"),title:"A",durationSec:i,castRefIds:[],actors:N,props:M,cameras:K,timeline:{actions:D,dialogues:ee,propEvents:Z,coverages:B,cuts:j},prompt:{blocks:{},cutTexts:{}}};s.size>0&&a.push(Le("LEGACY_FIELD_IGNORED",{path:"root",params:{fields:[...s].join(",")}}));const V={schemaVersion:Ha,...Sr(),projectId:t.projectId,name:t.name,scene:{sceneId:t.projectId,title:t.name},room:F,refs:{characters:[],backgrounds:[],props:[]},parts:[L],activePartId:L.partId,settings:{fps:r,lightTime:l,lightDirectionDeg:45,easing:c},source:null};return Mr(V,a,"preset-v2")}const PA=15;function Mg(e,t){if(e===void 0||!Number.isFinite(e))return{value:t,clamped:!1};const n=Math.min(bi,Math.max(hi,e));return{value:n,clamped:n!==e}}function CA(e,t,n){const o=pr(e),a=1e-9;return o.minX>=-t/2-a&&o.maxX<=t/2+a&&o.minY>=-n/2-a&&o.maxY<=n/2+a}function xu(e){const t=Qm(e.roomKind),n=[...t.issues],o=Mg(e.widthM,t.room.widthM),a=Mg(e.depthM,t.room.depthM);(o.clamped||a.clamped)&&n.push(Le("ROOM_SIZE_CLAMPED",{path:"room",params:{widthM:o.value,depthM:a.value}}));const s=e.furnish===!1?{props:[],openings:t.room.openings}:t.preset?eh([],t.preset,e.idFactory):{props:t.room.props,openings:t.room.openings},i=s.props.filter(u=>CA(u,o.value,a.value));i.length<s.props.length&&n.push(Le("BLANK_PROPS_DROPPED",{path:"room.props",params:{count:s.props.length-i.length}}));const r={widthM:o.value,depthM:a.value,openings:s.openings},l={...t.room,widthM:o.value,depthM:a.value,props:i,openings:Qk(r)},c=e.idFactory("part");return{snapshot:{schemaVersion:Ha,...Sr(),projectId:e.projectId,name:e.name,scene:{sceneId:e.projectId,title:e.name},room:l,refs:{characters:[],backgrounds:[],props:[]},parts:[{partId:c,title:e.name,durationSec:PA,castRefIds:[],actors:[],props:[],cameras:[],timeline:{actions:[],dialogues:[],propEvents:[],coverages:[],cuts:[]},prompt:{blocks:{},cutTexts:{}}}],activePartId:c,settings:{fps:24,lightTime:"day",lightDirectionDeg:45,easing:"smooth"},source:null},issues:n}}const BA=new Set(g0),_A=new Set(["blocking-board/1","blocking-board/2"]);function AA(e){if(typeof e!="object"||e===null)return e;const{storageKey:t,...n}=e;return{...n,fileName:"",anchors:[]}}function PS(e){const t=typeof e=="object"&&e!==null?e.schemaVersion:void 0;if(t===Ha)return{ok:!0,value:e};if(BA.has(t)){const n=e,o={...n,schemaVersion:Ha};
3if(_A.has(t)&&"background"in n&&(o.background=AA(n.background)),t==="blocking-board/4"){const a=n.styleDirection;o.styleDirection={ko:typeof a?.ko=="string"?a.ko:""}}else Object.assign(o,Sr());return{ok:!0,value:o}}return{ok:!1,issue:Le("UNSUPPORTED_SCHEMA_VERSION",{path:"schemaVersion",params:{value:String(t)}})}}function TA(e,t){const n=PS(e);return n.ok?Mr(n.value,[],"snapshot"):{snapshot:e,issues:[n.issue],format:"snapshot"}}function Rd(e){const{snapshot:t,issues:n}=e,o=t.parts.find(s=>s.partId===t.activePartId)??t.parts[0],a=s=>n.filter(i=>i.severity===s).length;return{roomSize:{widthM:t.room.widthM,depthM:t.room.depthM},propCount:t.room.props.length+(o?.props.length??0),actorCount:o?.actors.length??0,cameraCount:o?.cameras.length??0,partCount:t.parts.length,issuesBySeverity:{error:a("error"),warning:a("warning"),info:a("info")}}}function RA(e){return e.parts.find(t=>t.partId===e.activePartId)??e.parts[0]}function $g(e,t,n){const o=e.map(s=>({...s})),a=new Map;for(const s of t){const i=s.sourceId!=null?o.findIndex(c=>c.sourceId===s.sourceId):-1,r=i>=0?o[i].id:s.id;a.set(s.id,r);const l=n(s,r);i>=0?o[i]=l:o.push(l)}return{list:o,idRemap:a}}function Eg(e,t){return e?{...e,targetIds:e.targetIds.map(n=>t.get(n)??n)}:null}function DA(e,t,n){const o=[],a=new Set([...n.props.map(y=>y.id),...n.openings.map(y=>y.id),...e.props.map(y=>y.id)]),{list:s,idRemap:i}=$g(e.actors,t.actors,(y,w)=>{if(w!==y.id){const _=e.actors.find(O=>O.id===w);return{...y,id:w,refId:_.refId}}const{refId:M,...x}=y;return x}),{list:r,idRemap:l}=$g(e.cameras,t.cameras,(y,w)=>({...y,id:w,subject:Eg(y.subject,i)})),c=[...e.timeline.coverages,...t.timeline.coverages.map(y=>({...y,cameraId:l.get(y.cameraId)??y.cameraId,subject:Eg(y.subject,i)??y.subject}))];let d=0;const u=[...e.timeline.cuts];for(const y of t.timeline.cuts){const w={startSec:y.inSec,endSec:y.outSec},M=y.outSec>e.durationSec,x=u.some(_=>xm(w,{startSec:_.inSec,endSec:_.outSec}));if(M||x){d+=1,o.push(Le("CUT_OVERLAP",{path:"parts[].timeline.cuts",targetId:y.id}));continue}u.push({...y,cameraId:l.get(y.cameraId)??y.cameraId})}const p=[...e.timeline.actions,...t.timeline.actions.map(y=>({...y,actorId:y.actorId?i.get(y.actorId)??y.actorId:y.actorId}))],f=[...e.timeline.dialogues,...t.timeline.dialogues.map(y=>({...y,actorId:i.get(y.actorId)??y.actorId}))],h=[...e.timeline.propEvents,...t.timeline.propEvents.filter(y=>a.has(y.targetId))],b=_f(t.prompt.cutTexts,u.slice(e.timeline.cuts.length).map(y=>y.id));
3return{part:{...e,actors:s,cameras:r,timeline:{actions:p,dialogues:f,propEvents:h,coverages:c,cuts:u},...Object.keys(b).length>0?{prompt:{...e.prompt,cutTexts:{...e.prompt.cutTexts,...b}}}:{}},meta:{skippedCuts:d,issues:o}}}function OA(e,t){const n=new Map;for(const a of[...e.props,...e.openings])a.sourceId&&n.set(a.id,a.sourceId);const o=new Map;for(const a of[...t.props,...t.openings])a.sourceId&&o.set(a.sourceId,a.id);return{oldIdToSourceId:n,sourceIdToNewId:o}}function Yr(e,t,n){if(!e)return e;const o=t.oldIdToSourceId.get(e),a=o?t.sourceIdToNewId.get(o):void 0;return a||n(),a}function NA(e,t,n){const o=OA(t,n),a=[],s=(r,l)=>a.push(Le("REFERENCE_MISSING",{path:r,...l?{targetId:l}:{}}));return{parts:e.map(r=>{const l=r.actors.map(u=>{const p=Yr(u.start.seatPropId,o,()=>s("parts[].actors[].start.seatPropId",u.id)),f={...u.start,seatPropId:p};p||delete f.seatPropId;const h=u.poseKeys.map(b=>{if(!b.seatPropId)return b;const I=Yr(b.seatPropId,o,()=>s("parts[].actors[].poseKeys[].seatPropId",u.id)),y={...b,seatPropId:I};return I||delete y.seatPropId,y});return{...u,start:f,poseKeys:h}}),c=r.timeline.actions.map(u=>{const p={...u};if(p.targetPropId){const f=Yr(p.targetPropId,o,()=>s("parts[].timeline.actions[].targetPropId",u.id));f?p.targetPropId=f:delete p.targetPropId}if(p.targetOpeningId){const f=Yr(p.targetOpeningId,o,()=>s("parts[].timeline.actions[].targetOpeningId",u.id));f?p.targetOpeningId=f:delete p.targetOpeningId}return p}),d=[];for(const u of r.timeline.propEvents){const p=Yr(u.targetId,o,()=>s("parts[].timeline.propEvents[].targetId",u.id));p&&d.push({...u,targetId:p})}return{...r,actors:l,timeline:{...r.timeline,actions:c,propEvents:d}}}),issues:a}}function LA(e,t,n){if(n==="replace-project")return{ok:!0,snapshot:{...t.snapshot,projectId:e.projectId,name:e.name},meta:{skippedCuts:0,issues:[]}};if(n==="merge-part"){const o=e.parts.findIndex(c=>c.partId===e.activePartId),a=o>=0?o:0,s=RA(t.snapshot),{part:i,meta:r}=DA(e.parts[a],s,e.room),l=e.parts.map((c,d)=>d===a?i:c);return{ok:!0,snapshot:{...e,parts:l},meta:r}}if(n==="replace-room"){const o=t.snapshot.room,{parts:a,issues:s}=NA(e.parts,e.room,o);return{ok:!0,snapshot:{...e,room:o,parts:a},meta:{skippedCuts:0,issues:s}}}return{ok:!1,issue:Le("SCHEMA_INVALID",{path:"mode"})}}const KA=xn,FA=["actor","prop","camera","action","dialogue","propEvent","cut"];function CS(e,t){const n=e.parts.find(a=>a.partId===e.activePartId)??e.parts[0],o=t.parts.find(a=>a.partId===n.partId)??t.parts.find(a=>a.partId===t.activePartId)??t.parts[0];return{currentPart:n,incomingPart:o}}function hr(e,t){if(Array.isArray(e))return e.map(n=>hr(n,t));if(e!==null&&typeof e=="object"){const n={};for(const[o,a]of Object.entries(e))n[o]=hr(a,t);return n}return typeof e=="string"&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e}function sr(e,t){if(typeof e=="number"&&typeof t=="number")return Math.abs(e-t)<=KA;if(Array.isArray(e)||Array.isArray(t))return!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length?!1:e.every((n,o)=>sr(n,t[o]));if(e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"){const n=e,o=t;for(const a of new Set([...Object.keys(n),...Object.keys(o)]))if(!sr(n[a],o[a]))return!1;return!0}return e===t}function ir(e,t){const n=e.room.props.find(a=>a.id===t);if(n)return n.name;const o=e.room.openings.find(a=>a.id===t);if(o)return o.kind;for(const a of e.parts){const s=a.actors.find(c=>c.id===t)??a.cameras.find(c=>c.id===t)??a.props.find(c=>c.id===t);if(s)return s.name;const i=a.timeline.actions.find(c=>c.id===t);if(i)return i.actorId?`${ir(e,i.actorId)} · ${i.actionType}`:i.actionType;const r=a.timeline.dialogues.find(c=>c.id===t);if(r)return`${ir(e,r.actorId)} · ${r.line}`;const l=a.timeline.propEvents.find(c=>c.id===t);if(l)return ir(e,l.targetId)}return t}function Hs(e,t){const n=new Set;return e.map((o,a)=>{const s=t[a];return!s||n.has(s)?{item:o,i:a,key:null}:(n.add(s),{item:o,i:a,key:s})})}function vp(e,t){const n=e.map(()=>null),o=new Map;return e.map((a,s)=>({x:a,i:s})).sort((a,s)=>a.x.startSec-s.x.startSec||a.i-s.i).forEach(({x:a,i:s})=>{const i=t(a);if(i===null)return;const r=o.get(i)??0;o.set(i,r+1),n[s]=`${i}#${r}`}),n}function xg(e,t,n){const o=n==="replace-project"?[...e.room.props,...t.props]:[],a=new Map(t.actors.map(c=>[c.id,c.sourceId])),s=new Map([...e.room.props,...e.room.openings,...t.props].map(c=>[c.id,c.sourceId])),{actions:i,dialogues:r,propEvents:l}=t.timeline;return{props:Hs(o,o.map(c=>
3c.sourceId)),actors:Hs(t.actors,t.actors.map(c=>c.sourceId)),cameras:Hs(t.cameras,t.cameras.map(c=>c.sourceId)),actions:Hs(i,vp(i,c=>{const d=c.actorId?a.get(c.actorId):void 0;return d?`${d}#${c.actionType}`:null})),dialogues:Hs(r,vp(r,c=>a.get(c.actorId)||null)),propEvents:Hs(l,vp(l,c=>s.get(c.targetId)||null))}}function Os(e,t,n){const o=new Map(e.filter(a=>a.key).map(a=>[a.key,a.item.id]));for(const a of t){const s=a.key?o.get(a.key):void 0;s!==void 0&&(n[a.item.id]=s)}}const HA=[["name",e=>({name:e.name,aliases:e.aliases})],["look",e=>({color:e.color,species:e.species,bodyType:e.bodyType,movementMode:e.movementMode})],["position",e=>e.start.position],["heading",e=>e.start.headingDeg],["pose",e=>({pose:e.start.pose,seatPropId:e.start.seatPropId})],["path",e=>e.path],["keys",e=>({p:e.positionKeys,f:e.facingKeys,k:e.poseKeys})]],zA=[["name",e=>({name:e.name,kind:e.kind,catalogKey:e.catalogKey})],["position",e=>e.center],["heading",e=>e.headingDeg],["size",e=>({w:e.widthM,d:e.depthM,h:e.heightM,e:e.elevationM??0})],["support",e=>e.supportPropId]],jA=[["name",e=>e.name],["position",e=>({position:e.position,heightM:e.heightM})],["heading",e=>({h:e.headingDeg,p:e.pitchDeg,r:e.rollDeg})],["lens",e=>({lensMm:e.lensMm,fov:e.fovOverrideDeg})],["move",e=>e.move],["keys",e=>e.keys],["subject",e=>e.subject]],th=e=>({s:e.startSec,e:e.endSec}),UA=[["time",th],["type",e=>({t:e.actionType,c:e.actionClass,s:e.source})],["text",e=>e.text],["target",e=>({p:e.targetPropId,o:e.targetOpeningId})],["motion",e=>e.motionId]],GA=[["time",th],["line",e=>({line:e.line,lang:e.lang})],["mode",e=>({mode:e.mode,timeSource:e.timeSource})]],VA=[["time",th],["state",e=>e.state]];function WA(e,t,n){return e.filter(([,o])=>!sr(o(t),o(n))).map(([o])=>o)}function Pg(e){return[...e].sort((t,n)=>t.inSec-n.inSec)}function Cg(e){return[...e].sort((t,n)=>t.startSec-n.startSec||(t.cameraId<n.cameraId?-1:t.cameraId>n.cameraId?1:0)).map(({id:t,...n})=>n)}function XA(e,t){const n=Pg(e.timeline.cuts),o=Pg(t.timeline.cuts),a=[];n.length!==o.length&&a.push("count");const s=r=>r.map(l=>[l.inSec,l.outSec]);sr(s(n),s(o))||a.push("time");const i=r=>r.map(l=>l.cameraId);return sr(i(n),i(o))||a.push("camera"),sr(Cg(e.timeline.coverages),Cg(t.timeline.coverages))||a.push("coverage"),a}function Ui(e,t,n,o,a,s){const i=new Map(n.filter(c=>c.key).map(c=>[c.key,c])),r=new Set,l=[];for(const c of t){if(!c.key)continue;const d=i.get(c.key),u={key:`${e}:${c.key}`,kind:e,sourceId:c.key,currentId:c.item.id};if(!d){l.push({...u,incomingId:null,status:"removed-in-source",fields:[],label:s("current",c.item.id)});continue}r.add(d);const p=WA(a,c.item,o[d.i]);l.push({...u,incomingId:d.item.id,status:p.length>0?"changed":"same",fields:p,label:s("current",c.item.id)})}for(const c of n)r.has(c)||l.push({key:c.key?`${e}:${c.key}`:`${e}:+${c.item.id}`,kind:e,sourceId:c.key??"",currentId:null,incomingId:c.item.id,status:"added",fields:[],label:s("incoming",c.item.id)});return l}function BS(e,t,n){const o=t.snapshot,{currentPart:a,incomingPart:s}=CS(e,o),i=xg(e,a,n),r=xg(o,s,n),l={},c=y=>Hs(y.room.props,y.room.props.map(w=>w.sourceId)),d=y=>Hs(y.room.openings,y.room.openings.map(w=>w.sourceId));Os(d(e),d(o),l),n==="replace-project"?Os(i.props,r.props,l):Os(c(e),c(o),l),Os(i.actors,r.actors,l),Os(i.cameras,r.cameras,l);let u=r.propEvents;if(n==="merge-part"){const y=new Set([...e.room.props,...e.room.openings,...a.props].map(w=>w.id));u=u.filter(w=>y.has(l[w.item.targetId]??w.item.targetId))}Os(i.actions,r.actions,l),Os(i.dialogues,r.dialogues,l),Os(i.propEvents,u,l);const p=hr(s,l),f=(y,w)=>ir(y==="current"?e:o,w),h=n==="replace-project"?hr([...o.room.props,...s.props],l):[],b=[...Ui("actor",i.actors,r.actors,p.actors,HA,f),...Ui("prop",i.props,r.props,h,zA,f),...Ui("camera",i.cameras,r.cameras,p.cameras,jA,f),...Ui("action",i.actions,r.actions,p.timeline.actions,UA,f),...Ui("dialogue",i.dialogues,r.dialogues,p.timeline.dialogues,GA,f),...Ui("propEvent",i.propEvents,u,p.timeline.propEvents,VA,f)],I={current:a.timeline.cuts.length,incoming:s.timeline.cuts.length};if(I.current>0||I.incoming>0){const y=XA(a,p);b.push({key:"cut:cuts",kind:"cut",sourceId:"cuts",currentId:null,incomingId:null,status:y.length>0?"changed":"same",fields:y,label:"",counts:I})}
3return{mode:n,partId:a.partId,incomingPartId:s.partId,items:b,idRemap:l}}function _S(e){return"update"}function AS(e){const t={};for(const n of e.items)n.status!=="same"&&(t[n.key]=_S());return t}function YA(e,t,n){const o={...t};for(const a of e.items)a.status!=="same"&&(o[a.key]=n);return o}function qA(e){return e.items.some(t=>t.status!=="same")}const ZA=[/^room\.props\[(\d+)\]/,/^parts\[(\d+)\]\.(actors|props|cameras)\[(\d+)\]/,/^parts\[(\d+)\]\.timeline\.(actions|dialogues|propEvents|coverages|cuts)\[(\d+)\]/];function JA(e,t){const[n,o,a]=ZA.map(c=>c.exec(t));if(n)return e.room.props[Number(n[1])]?.id??null;const s=o??a;if(!s)return null;const i=e.parts[Number(s[1])];return(o?i:i?.timeline)?.[s[2]]?.[Number(s[3])]?.id??null}function Dd(e,t){switch(t){case"actor":return e.actors;case"camera":return e.cameras;case"action":return e.timeline.actions;case"dialogue":return e.timeline.dialogues;case"propEvent":return e.timeline.propEvents}}const TS=["actor","camera","action","dialogue","propEvent"];function Fs(e){return JSON.parse(JSON.stringify(e))}function RS(e){const t=new Set(e.cameras.filter(n=>!n.sourceId).map(n=>n.id));return e.timeline.coverages.filter(n=>t.has(n.cameraId))}function QA(e,t,n,o,a,s){const i=Fs(e),r=i.parts.find(d=>d.partId===t),l=hr(CS(e,n.snapshot).incomingPart,o.idRemap);for(const d of TS){const u=Dd(r,d),p=Dd(l,d);for(const f of o.items){if(f.kind!==d||!f.incomingId)continue;const h=o.idRemap[f.incomingId]??f.incomingId,b={...p.find(I=>I.id===h)};if(f.status==="changed"&&a(f)==="update"){const I=u.findIndex(y=>y.id===f.currentId);if(b.id=f.currentId,d==="actor"){const y=u[I].refId;y?b.refId=y:delete b.refId}u[I]=b}else f.status==="added"&&(d==="actor"&&delete b.refId,u.push(b))}}const c=o.items.find(d=>d.kind==="cut");if(c&&a(c)==="update"){r.timeline.coverages=[...RS(r),...l.timeline.coverages];const d=r.timeline.cuts.map(f=>f.id);r.timeline.cuts=l.timeline.cuts.filter(f=>f.outSec<=r.durationSec?!0:(s.push(Le("CUT_OVERLAP",{path:"parts[].timeline.cuts",targetId:f.id})),!1));const u=_f(r.prompt.cutTexts,d),p=_f(l.prompt.cutTexts,r.timeline.cuts.map(f=>f.id));if(Object.keys(u).length+Object.keys(p).length>0){const f={...r.prompt.cutTexts};for(const h of Object.keys(u))delete f[h];r.prompt={...r.prompt,cutTexts:{...f,...p}}}}return i}function eT(e,t,n,o,a,s){const i=hr(n.snapshot,o.idRemap),r={...Fs(i),projectId:e.projectId,name:e.name},l=r.parts.find(f=>f.partId===o.incomingPartId),c=e.parts.find(f=>f.partId===t),d=[["prop",r.room.props,e.room.props],["prop",l.props,c.props],...TS.map(f=>[f,Dd(l,f),Dd(c,f)])];for(const[f,h,b]of d){const I=o.items.filter(w=>w.kind===f),y=new Set(I.filter(w=>w.status==="changed"||w.status==="same").map(w=>w.currentId));for(const w of I){if(!y.has(w.currentId)||a(w)!=="keep")continue;const M=h.findIndex(O=>O.id===w.currentId),x=b.find(O=>O.id===w.currentId);if(M<0||!x)continue;const _=Fs(x);if(f==="actor"){const O=h[M].refId;O?_.refId=O:delete _.refId}h[M]=_}for(const w of b)y.has(w.id)||h.push(Fs(w))}const u=o.items.find(f=>f.kind==="cut");!u||a(u)==="keep"?(l.timeline.coverages=Fs(c.timeline.coverages),l.timeline.cuts=Fs(c.timeline.cuts)):l.timeline.coverages=[...Fs(RS(c)),...l.timeline.coverages];const p=new Set(Object.values(o.idRemap));for(const f of e.room.openings)p.has(f.id)||(r.room.openings.push(Fs(f)),s.push({id:f.id,kind:"opening"}));return r}function DS(e,t,n,o,a){if(t!==o.partId)return{snapshot:e,issues:[Le("SCHEMA_INVALID",{path:"partId"})]};const s=p=>p.status==="same"?"keep":a[p.key]??_S(),i=[],r=[];for(const p of o.items)p.status==="added"&&s(p)==="keep"&&p.incomingId&&r.push({id:o.idRemap[p.incomingId]??p.incomingId,kind:p.kind}),p.status==="removed-in-source"&&s(p)==="update"&&p.currentId&&r.push({id:p.currentId,kind:p.kind});let l=o.mode==="merge-part"?QA(e,t,n,o,s,i):eT(e,t,n,o,s,r);const c=new Set(r.map(p=>p.id)),d=new Set,u=[];for(const{id:p}of r)for(const f of GE(l,p)){const h=JA(l,f.path);if(!h||h===p||c.has(h))continue;const b=`${h}\0${p}`;if(d.has(b))continue;d.add(b);const I=Le("REFERENCE_MISSING",{path:f.path,targetId:h,params:{referencedId:p,field:f.edge,ownerLabel:ir(l,h),missingLabel:ir(l,p)}});I.severity="warning",u.push(I)}for(const{id:p,kind:f}
3of r){if(f==="propEvent"){l.parts.forEach(b=>{b.timeline.propEvents=b.timeline.propEvents.filter(I=>I.id!==p)});continue}const h=ia(l,p);h.kind!=="unknown"&&(l=Ci(l,h))}if(o.mode==="replace-project"){const p=new Set(l.refs.characters.map(h=>h.id)),f=l.parts.find(h=>h.partId===o.incomingPartId);for(const h of f.actors)h.refId&&!p.has(h.refId)&&delete h.refId}return{snapshot:l,issues:[...u,...i]}}const Bg=5*1024*1024,_g=1024*1024;function tT(e){return new TextEncoder().encode(e).length}function OS(e){return e<=Bg?null:Le("IMPORT_TOO_LARGE",{path:"import",params:{sizeMb:Math.ceil(e/_g*10)/10,maxMb:Bg/_g}})}function NS(e){return e.name.toLowerCase().endsWith(".json")||e.type==="application/json"}function nT(e){if(!NS(e))return{ok:!1,reason:"notJson"};const t=OS(e.size);return t?{ok:!1,reason:"tooLarge",issue:t}:{ok:!0}}function Kn(e,t){if(t?.startsWith("ko"))return e.ko;const n=e.en;return n?n.charAt(0).toUpperCase()+n.slice(1):e.ko}const oT={"scene-draft":"tool.blockingBoard.import.formatSceneDraft","scene-v1":"tool.blockingBoard.import.formatSceneV1","preset-v2":"tool.blockingBoard.import.formatPresetV2",snapshot:"tool.blockingBoard.import.formatSnapshot",unknown:"tool.blockingBoard.import.formatUnknown"},td="blocking-board/scene-draft/1",aT=["in-front-of","behind","beside-left","beside-right","seated-on","near","at-entrance","unspecified"],sT=["stand","sit","kneel","crouch","lie"],iT=["wide","full","medium","close-up","extreme-close-up","insert"],rT=["movement","performance"],lT=["blocking","concurrent"],cT=["explicit","estimated"],dT=["open","closed"],Tf={targetPartDurationSec:15,maxParts:5,genre:"",tone:"",dialogueLang:"ko-KR"},dn={scriptMinChars:40,scriptMaxChars:2e4,briefMinChars:5,briefMaxChars:2e3,maxPartDurationMinSec:4,maxPartDurationMaxSec:60,partDurationMinSec:3,partDurationMaxSec:60,maxPartsCeiling:12,maxCharacters:12,maxPropsPerScene:40,maxCutsPerPart:40,maxActionsPerPart:60,maxDialoguesPerPart:40,genreMaxChars:200,toneMaxChars:200},uT=["ko-KR","en-US","ja-JP"];function pT(e){return e.map(t=>t.kind==="prop"?{name:t.name,kind:"prop"}:t.species?{name:t.name,kind:"animal",species:t.species,...t.speciesName?{speciesName:t.speciesName}:{}}:{name:t.name,kind:"person"})}function fT(){return{issues:[],ids:new Set}}function fo(e,t,n,o,a){return e.issues.push(Le("SCHEMA_INVALID",{path:t,targetId:o,params:{detail:n,...a}})),null}function ba(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:null}function ga(e,t,n,o){const a=t[n];return typeof a!="string"?fo(e,`${o}.${n}`,"must be a string"):a.length>dn.scriptMaxChars?fo(e,`${o}.${n}`,"is too long"):a}function oa(e,t){const n=e[t];return typeof n=="string"?n:""}function Is(e,t,n,o){const a=t[n];return typeof a!="number"||!Number.isFinite(a)?fo(e,`${o}.${n}`,"must be a finite number"):a}function ki(e,t,n,o,a){const s=t[n];return typeof s!="string"||!a.includes(s)?fo(e,`${o}.${n}`,`must be one of: ${a.join(", ")}`,void 0,{kind:"enum",value:typeof s=="string"?s:String(s),allowed:[...a]}):s}function Si(e,t,n,o){const a=t[n];return qk(a)?e.ids.has(a)?(e.issues.push(Le("DUPLICATE_ID",{path:`${o}.${n}`,targetId:a})),null):(e.ids.add(a),a):fo(e,`${o}.${n}`,"is not a valid id",void 0,{kind:"id",value:typeof a=="string"?a:String(a)})}function Od(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function Pu(e,t,n,o,a,s){const i=xn;return t<-i||n>o+i||n-t<=i?(e.issues.push(Le("INVALID_RANGE",{path:a,targetId:s,params:{startSec:t,endSec:n,durationSec:o}})),!1):!0}const yp=xn;function mT(e,t,n,o){const a=ba(t);if(!a)return fo(e,n,"must be an object");const s=Si(e,a,"id",n),i=Is(e,a,"startSec",n),r=Is(e,a,"endSec",n),l=ki(e,a,"shotType",n,iT);return s===null||i===null||r===null||l===null?null:(Pu(e,i,r,o,n,s),{id:s,startSec:i,endSec:r,shotType:l,subjectIds:Od(a.subjectIds),cameraNote:oa(a,"cameraNote"),intent:oa(a,"intent")})}function hT(e,t,n,o){const a=ba(t);if(!a)return fo(e,n,"must be an object");const s=Si(e,a,"id",n),i=ga(e,a,"characterId",n),r=Is(e,a,"startSec",n),l=Is(e,a,"endSec",n),c=ki(e,a,"actionClass",n,rT),d=ga(e,a,"actionType",n);if(s===null||i===null||r===null||l===null||c===null||d===null)return null;Pu(e,r,l,o,n,s);const u=ba(a.text)??{};return{id:s,characterId:i,startSec:r,endSec:l,actionType:d,actionClass:c,text:{ko:typeof u.ko=="string"?u.ko:"",en:typeof u.en=="string"?u.en:void 0}}}function bT(e,t,n,o){const a=ba(t);if(!a)return fo(e,n,"must be an object");const s=Si(e,a,"id",n),i=ga(e,a,"characterId",n),r=Is(e,a,"startSec",n),l=Is(e,a,"endSec",n),c=ga(e,a,"line",n
3),d=ki(e,a,"mode",n,lT),u=ki(e,a,"timeSource",n,cT);return s===null||i===null||r===null||l===null||c===null||d===null||u===null?null:(Pu(e,r,l,o,n,s),{id:s,characterId:i,startSec:r,endSec:l,line:c,mode:d,timeSource:u})}function gT(e,t,n,o){const a=ba(t);if(!a)return fo(e,n,"must be an object");const s=Si(e,a,"id",n),i=ga(e,a,"targetPropId",n),r=Is(e,a,"startSec",n),l=Is(e,a,"endSec",n),c=ki(e,a,"state",n,dT);return s===null||i===null||r===null||l===null||c===null?null:(Pu(e,r,l,o,n,s),{id:s,targetPropId:i,startSec:r,endSec:l,open:c==="open"})}function vT(e,t,n,o){if(t.length===0){e.issues.push(Le("CUT_TRACK_EMPTY",{path:o,timeRange:{startSec:0,endSec:n}}));return}const a=[...t].sort((i,r)=>i.startSec-r.startSec);let s=0;for(const i of a)i.startSec>s+yp?e.issues.push(Le("CUT_GAP",{path:o,targetId:i.id,timeRange:{startSec:s,endSec:i.startSec}})):i.startSec<s-yp&&e.issues.push(Le("CUT_OVERLAP",{path:o,targetId:i.id,timeRange:{startSec:i.startSec,endSec:Math.min(s,i.endSec)}})),s=Math.max(s,i.endSec);n-s>yp&&e.issues.push(Le("CUT_GAP",{path:o,timeRange:{startSec:s,endSec:n}}))}function yT(e,t,n){const o=ba(t);if(!o)return fo(e,n,"must be an object");const a=Si(e,o,"id",n),s=ga(e,o,"title",n),i=Is(e,o,"durationSec",n);if(a===null||s===null||i===null)return null;if(i<=0||i>dn.partDurationMaxSec)return e.issues.push(Le("LIMIT_EXCEEDED",{path:`${n}.durationSec`,targetId:a,params:{durationSec:i,maxSec:dn.partDurationMaxSec}})),null;const r=f=>Array.isArray(o[f])?o[f]:[],l=r("cuts").slice(0,dn.maxCutsPerPart).map((f,h)=>mT(e,f,`${n}.cuts[${h}]`,i)).filter(f=>f!==null);vT(e,l,i,`${n}.cuts`);const c=r("actions").slice(0,dn.maxActionsPerPart).map((f,h)=>hT(e,f,`${n}.actions[${h}]`,i)).filter(f=>f!==null),d=r("dialogues").slice(0,dn.maxDialoguesPerPart).map((f,h)=>bT(e,f,`${n}.dialogues[${h}]`,i)).filter(f=>f!==null),u=r("propEvents").map((f,h)=>gT(e,f,`${n}.propEvents[${h}]`,i)).filter(f=>f!==null),p=r("placements").map((f,h)=>{const b=`${n}.placements[${h}]`,I=ba(f);if(!I)return fo(e,b,"must be an object");const y=ga(e,I,"characterId",b),w=ki(e,I,"relation",b,aT),M=ki(e,I,"pose",b,sT);if(y===null||w===null||M===null)return null;const x=I.targetPropId;return{characterId:y,relation:w,targetPropId:typeof x=="string"&&x?x:null,pose:M,facingNote:oa(I,"facingNote")}}).filter(f=>f!==null);return{id:a,title:s,durationSec:i,castIds:Od(o.castIds),placements:p,cuts:l,actions:c,dialogues:d,propEvents:u}}function kT(e,t){const n=new Set(t.characters.map(s=>s.id)),o=new Set(t.props.map(s=>s.id)),a=(s,i,r)=>e.issues.push(Le("REFERENCE_MISSING",{path:s,targetId:i,params:{referencedId:r}}));t.parts.forEach((s,i)=>{const r=`parts[${i}]`;s.castIds.forEach((l,c)=>{n.has(l)||a(`${r}.castIds[${c}]`,s.id,l)}),s.placements.forEach((l,c)=>{const d=`${r}.placements[${c}]`;n.has(l.characterId)||a(`${d}.characterId`,s.id,l.characterId),l.targetPropId&&!o.has(l.targetPropId)&&a(`${d}.targetPropId`,s.id,l.targetPropId)}),s.actions.forEach((l,c)=>{n.has(l.characterId)||a(`${r}.actions[${c}].characterId`,l.id,l.characterId)}
3),s.dialogues.forEach((l,c)=>{n.has(l.characterId)||a(`${r}.dialogues[${c}].characterId`,l.id,l.characterId)}),s.propEvents.forEach((l,c)=>{o.has(l.targetPropId)||a(`${r}.propEvents[${c}].targetPropId`,l.id,l.targetPropId)}),s.cuts.forEach((l,c)=>{l.subjectIds.forEach((d,u)=>{!n.has(d)&&!o.has(d)&&a(`${r}.cuts[${c}].subjectIds[${u}]`,l.id,d)})})})}function ST(e){const t=oa(e,"species").trim();if(!t||!Dm(t))return{};if(t==="human")return{species:t};const n=oa(e,"speciesName").trim().slice(0,Il),o=oa(e,"speciesNameEn").trim().slice(0,Il);return{species:t,...n?{speciesName:n}:{},...n&&o?{speciesNameEn:o}:{}}}function IT(e,t){const n=fT(),o=ba(e);if(!o)return fo(n,"$","response must be a JSON object"),{draft:null,issues:n.issues};o.version!==td&&n.issues.push(Le("UNSUPPORTED_SCHEMA_VERSION",{path:"version",params:{expected:td,actual:String(o.version??"")}}));const a=ga(n,o,"sceneId","$"),s=ga(n,o,"title","$"),i=ba(o.location);if(a===null||s===null||!i)return i||fo(n,"location","must be an object"),{draft:null,issues:n.issues};const r=(Array.isArray(o.characters)?o.characters:[]).slice(0,dn.maxCharacters).map((p,f)=>{const h=`characters[${f}]`,b=ba(p);if(!b)return fo(n,h,"must be an object");const I=Si(n,b,"id",h),y=ga(n,b,"name",h);return I===null||y===null?null:{id:I,name:y,aliases:Od(b.aliases),bodyType:oa(b,"bodyType")||"other",notes:oa(b,"notes"),...ST(b)}}).filter(p=>p!==null);r.length===0&&fo(n,"characters","at least one character is required");const l=(Array.isArray(o.props)?o.props:[]).slice(0,dn.maxPropsPerScene).map((p,f)=>{const h=`props[${f}]`,b=ba(p);if(!b)return fo(n,h,"must be an object");const I=Si(n,b,"id",h),y=ga(n,b,"kind",h);if(I===null||y===null)return null;const w=b.roomPropIndex;return{id:I,kind:y,label:oa(b,"label")||y,...typeof w=="number"&&Number.isInteger(w)&&w>=0?{roomPropIndex:w}:{}}}).filter(p=>p!==null),c=(Array.isArray(o.parts)?o.parts:[]).map((p,f)=>yT(n,p,`parts[${f}]`)).filter(p=>p!==null);if(c.length===0)return fo(n,"parts","at least one part is required"),{draft:null,issues:n.issues};t?.maxParts!==void 0&&c.length>t.maxParts&&n.issues.push(Le("LIMIT_EXCEEDED",{path:"parts",params:{limit:"maxParts",max:t.maxParts,actual:c.length}}));const d={version:td,sceneId:a,title:s,location:{kind:oa(i,"kind")||"unspecified",label:oa(i,"label"),notes:oa(i,"notes")},characters:r,props:l,parts:c,warnings:Od(o.warnings)};return kT(n,d),{draft:n.issues.some(p=>p.severity==="error")?null:d,issues:n.issues}}const nh=[{id:"gemini",providerId:aE,modelId:z$.GEMN_38_FLSH,labelKey:"tool.blockingBoard.modelGemini",supp
3ortsStructuredOutput:!0},{id:"claude",providerId:iE,modelId:sE,labelKey:"tool.blockingBoard.modelClaude",supportsStructuredOutput:!1}],LS="gemini";function wT(e){return nh.find(t=>t.id===e)}const MT={INVALID_INPUT:"invalidInput",MODEL_UNAVAILABLE:"modelUnavailable",PROVIDER_FAILED:"providerFailed",PROVIDER_TIMEOUT:"providerTimeout",RESPONSE_TRUNCATED:"responseTruncated",RESPONSE_NOT_JSON:"responseNotJson",DRAFT_INVALID:"draftInvalid",PART_TOO_LONG:"partTooLong"};function KS(e){return`tool.blockingBoard.failure.${MT[e]}`}function $T(e,t){if(typeof e!="string")return!1;const[n,o]=t==="brief"?[dn.briefMinChars,dn.briefMaxChars]:[dn.scriptMinChars,dn.scriptMaxChars];return e.length>=n&&e.length<=o}const FS=`S#8. 0ê³¼ ì¬ë¬´ì¤ â ì침 (ì¤ë´) 4 5ê³µê°: ì°½ë¬¸ì´ ìë ì¬ë¬´ì¤. ê°ì´ë° ê³µë ë°ì¤í¬, ìì ë¤ ê°, ë¨ìª½ì ë무 ì¶ì 문. 6 7ë±ì¥: ì´íì°(20ë ë¨ì, ì ì ), ë°©ëí(40ë ë¨ì, íì¥) 8 90-4ì´ 10ë°©ëíì ê³µë ë°ì¤í¬ ì쪽 ììì ìì ìë¥ë¥¼ ì½ê³ ìë¤. 11ì´íì°ê° ì¶ì 문ì ì´ê³ ë¤ì´ì ë°ì¤í¬ ìê¹ì§ 걸ì´ê°ë¤. 12 134-7ì´ 14ì´íì°ê° ë°©ëíì í¥í´ 목ë¡íë¤. ë°©ëíì ìë¥ìì ëì ë¼ì§ ìëë¤. 15 167-10ì´ 179ì´ ì§ì ìì ë°©ëíì´ ê³ ê°ë¥¼ ë¤ì´ ì´íì°ë¥¼ 본ë¤. 18ë°©ëí: "ìë¤, ëë¹ì ì ë¡ ììíë¤ë©°." 19`,ET=/(\d+)\s*[-~â]\s*(\d+)\s*ì´|(\d+)\s*s/g;function xT(e){let t=null;for(const n of e.matchAll(ET))for(const o of[n[1],n[2],n[3]]){if(o===void 0)continue;const a=Number(o);(t===null||a>t)&&(t=a)}return t}function PT(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64");const t=new TextEncoder().encode(e);let n="";for(const o of t)n+=String.fromCharCode(o);return btoa(n)}function CT(e,t,n){switch(e){case"scene-draft":return _l(t,n);case"scene-v1":return gA(t,n);case"preset-v2":return xA(t,n);case"snapshot":return TA(t);case"unknown":throw new Error("useBlockingBoardImport: cannot import an unknown format")}}function HS(e,t){return{ok:!0,format:e.format,preview:Rd(e),result:e,raw:t}}function zS(e,t){const n=OS(tT(e));if(n)return{ok:!1,reason:"tooLarge",issue:n};let o;try{o=JSON.parse(e)}catch{return{ok:!1,reason:"invalidJson"}}const a=K2(o);return a==="unknown"?{ok:!1,reason:"unknownFormat"}:HS(CT(a,o,t),e)}function nd(e,t){return HS(_l(e,t),JSON.stringify(e))}function BT(e,t){return t==="new"?{kind:"create"}:e?{kind:"dispatch",mode:t}:{kind:"create"}}function _T(e,t,n){return n==="blank"?null:t==="merge-part"||t==="replace-project"?t:null}function jS(e){return e.empty?["new"]:["new","replace-project","merge-part","replace-room"]}function AT(e){function t(i){return{projectId:e.session.snapshot.value.projectId,name:i,idFactory:e.idFactory}}async function n(i,r){return zS(i,t(r.name))}function o(i,r){return nd(i,t(r.name))}const a=jS;async function s(i,r,l){const c={type:"import.apply",mode:r,result:i.result},d=e.session.dispatch(l?{...c,choices:l}:c);if(!d.ok)return{ok:!1,issue:d.issue,sourceUploaded:!1};let u=!1;try{const p=`data:application/json;base64,${PT(i.raw)}`,f=await e.project.uploadAsset("source",p),h=await e.sha256(i.raw),b={format:i.format,storageKey:f,sha256:h};e.session.dispatch({type:"source.set",source:b}),u=!0}catch{u=!1}return{ok:!0,sourceUploaded:u}}return{parseText:n,fromDraft:o,availableModes:a,apply:s}}function US(e){return e.sort((t,n)=>n.text.length-t.text.length)}function GS(e,t){const n=[],o=new Set,a=s=>{s.text===""||o.has(s.text)||(o.add(s.text),n.push(s))};for(const s of e){a({text:s.name,kind:"character",id:s.id});for(const i of s.aliases)a({text:i,kind:"character",id:s.id})}for(const s of t)a({text:s.baseName,kind:"prop",id:s.id});return US(n)}function oh(e,t,n){for(const o of e)if(t.startsWith(o.text,n))return{entry:o,from:n,to:n+o.text.length};return null}function VS(e,t){return e.find(n=>n.text===t)??null}function ah(e){return{characters:[],props:[],index:[],issues:[],diagnostics:[],marks:[],lines:e}}function lo(e,t,n,o,a,s,i=[]){const r={line:n,...s},l=Le(t,{path:`board-script:line:${n}`,params:r});e.issues.push(l),e.diagnostics.push({lineNo:n,from:o,to:a,lineText:e.lines[n-1]?.text??"",severity:Em[t].severity,messageKey:l.messageKey,params:r,fixes:i})}function sh(e,t,n,o){const a=`ch-${e.characters.length+1}`;return e.characters.push({id:a,name:t,aliases:[],bodyType:"other",notes:"",lineNo:n,nameFrom:o,nameTo:o+t.length}),e.index.push({text:t,kind:"character",id:a}),US(e.index),lo(e,"BS_AUTO_CAST",n,o,o+t.length,{name:t},[{type:"addCastMember",name:t,labelKey:"tool.blockingBoard.boardScript.fix.addCast"}]),a}const Ws=e=>!!e&&e.kind in Jo;function WS(e,t,n){for(const o of e.index){if(o.kind!=="prop"||o.id===n)continue;const a=t.indexOf(o.text);if(a<0)continue;const s=e.props.find(i=>i.id===o.id);if(s)return{prop:s,from:a,to:a+o.text.length}}return null}function Rf(e,t){for(const n of e)for(const o of n.words){const a=t.indexOf(o);if(a>=0)return{entry:n,from:a,to:a+o.length}}return null}function XS(e,t,n){const o=e.text.indexOf(":");if(o<0)return null;const a=e.text.slice(0,o).trim();if(a==="")return null;const s=e.col+(e.text.length-e.text.trimStart().length),i=oh(t.index,e.text.trimStart(),0),r=i&&i.to===a.length?i.entry:VS(t.index,a);let l,c;if(r&&(r.kind==="character"||n))l=r.id,c=r.kind;else{if(r)return null;l=sh(t,a,e.lineNo,s),c="character"}t.marks.push({lineNo:e.lineNo,from:s,to:s+a.length,kind:"name"});const d=e.text.slice(o+1),u=d.trim(),p=e.col+o+1+(d.length-d.trimStart().length);return{id:l,kind:c,value:u,valueCol:p}}function TT(e,t){const n=new Map,o=new Set,a=s=>s.col+s.text.trimEnd().length;for(const s of e){const i=XS(s,t,!1);if(!i){lo(t,"BS_POSITION_UNREAD",s.lineNo,s.col,a(s));continue}const{value:r,valueCol:l}=i,c=WS(t,r),d=c?r.slice(0,c.from)+" ".repeat(c.to-c.from)+r.slice(c.to):r,u=Rf(lS,d),p=Rf(cS,d);let f=u?.entry.relation??null,h=c?.prop??null;const b=p?.entry.pose??"stand",I=/(^|\s)ì/.test(d),y=!!h&&(I||p?.entry.pose==="lie"&&Mu(h)||!!p&&$u
19(h));if(h&&f===null&&p?.entry.pose==="sit"||h&&f===null&&y?f="seated-on":h&&f===null&&(f="near"),h&&Ws(h)&&(f==="in-front-of"||f==="near")&&(f="at-entrance"),f!==null&&f!=="at-entrance"&&!h&&(f=null),f==="at-entrance"&&h&&!Ws(h)&&(h=null),f==="at-entrance"&&!h&&(h=t.props.find(x=>Ws(x))??null),f===null&&!p){lo(t,"BS_POSITION_UNREAD",s.lineNo,l,a(s));continue}h&&f==="seated-on"&&(h=t.props.filter(_=>_.baseName===h.baseName).find(_=>!o.has(_.id))??h,o.add(h.id));for(const x of[c,u,p])x&&t.marks.push({lineNo:s.lineNo,from:l+x.from,to:l+x.to,kind:x===c?"name":"moveToken"});let w=d;for(const x of[u,p])x&&(w=w.slice(0,x.from)+" ".repeat(x.to-x.from)+w.slice(x.to));const M=!h&&f!=="at-entrance"&&w.trim()!==""?{text:w.trim(),relation:u?.entry.relation??(p?.entry.pose==="sit"||p?.entry.pose==="lie"||I?"seated-on":"near")}:null;n.set(i.id,{characterId:i.id,relation:f??"unspecified",targetPropId:h?.id??null,pose:f==="seated-on"&&!(y&&p?.entry.pose!=="sit")?"sit":b,...M?{targetName:M}:{},lineNo:s.lineNo})}return[...n.values()]}const bl=e=>Math.ceil(e*2-1e-9)/2;function RT(e){return(e.match(/[ê°-í£]/g)?.length??0)+Math.ceil((e.match(/[A-Za-z0-9]/g)?.length??0)/3)}function YS(e){return Math.max(1,RT(e)/Mf.syllablesPerSec)}function DT(e,t){const n=e.length,o=n>0?e.reduce((a,s)=>a+bl(YS(s)),0)+.5*(n+1):0;return bl(Math.max(Mf.minCutSec,o,t*Mf.secPerSentence))}function OT(e,t,n){let o=.5;const a=e.map(i=>{const r=i.explicitStart!==null,l=r?Math.round(i.explicitStart*2)/2:bl(o),c=l+bl(YS(i.line));return o=c,{startSec:l,endSec:c,timeSource:r?"explicit":"estimated"}}),s=a.reduce((i,r)=>Math.max(i,r.endSec),0);if(s<=t)return{placed:a,cutDurationSec:t,overflow:!1};if(!n)return{placed:a,cutDurationSec:bl(s),overflow:!1};for(const i of a)i.endSec=Math.min(i.endSec,t),i.startSec>=t&&(i.startSec=Math.max(0,t-.5)),i.endSec<=i.startSec&&(i.endSec=i.startSec+.5);return{placed:a,cutDurationSec:t,overflow:!0}}const pa=.5;function NT(e,t){const n=i=>Math.min(Math.max(i,0),t),o=new Map;for(const i of e)i.kind==="move"&&i.startSec===null&&i.characterId&&o.set(i.characterId,(o.get(i.characterId)??0)+1);const a=new Map,s=new Map;return e.map(i=>{let r,l;if(i.kind==="move")if(i.startSec===null){const c=o.get(i.characterId??"")??1,d=a.get(i.characterId??"")??0;a.set(i.characterId??"",d+1),r=t*d/c,l=t*(d+1)/c}else r=i.startSec,l=i.endSec??t;else r=i.startSec??(i.characterId?s.get(i.characterId)??0:0),l=i.endSec??r+pa;return r=n(r),l=n(l),l-r<pa/2&&(l=Math.min(t,r+pa),r=Math.max(0,l-pa)),i.kind==="move"&&i.characterId&&s.set(i.characterId,l),{startSec:r,endSec:l}})}const kp={relation:"unspecified",targetPropId:null,pose:"stand"},LT={kind:"pose",actionType:"stand-up",pose:"stand",targetPropId:null,targetCharacterId:null,startSec:null,endSec:null,text:"ì¼ì´ì ë¤"};function KT(e,t,n){if(t.kind==="pose"){const o=t.pose??e.pose;return e.relation==="seated-on"&&o==="stand"?{...e,relation:"near",pose:o}:o==="sit"&&e.relation==="in-front-of"&&e.targetPropId?{...e,relation:"seated-on",pose:o}:{...e,pose:o}}return t.kind!=="move"?e:t.actionType==="exit"||t.targetPropId&&n(t.targetPropId)?{relation:"at-entrance",targetPropId:t.targetPropId,pose:"stand"}:t.targetPropId?{relation:"in-front-of",targetPropId:t.targetPropId,pose:"stand"}:t.actionType==="enter"?{relation:"at-entrance",targetPropId:null,pose:"stand"}:{...e,pose:"stand"}}const Vo=e=>Math.round(e*1e3)/1e3,Ag=(e,t)=>{const n=(e??[]).map(o=>o.text).filter(o=>o!=="");return n.length>0?n.join(t):void 0};function FT(e){const{heading:t,state:n,tree:o,cuts:a,groups:s,missing:i,hints:r,positions:l,roomSize:c}=e,d=A=>Ws(n.props.find(N=>N.id===A)),u=n.props.find(A=>Ws(A))?.id??null,p=new Map,f=new Map(l.map(A=>[A.characterId,{relation:A.relation,targetPropId:A.targetPropId,pose:A.pose,...A.targetName?{targetName:A.targetName}:{}}])),h=(t.place||`S${t.sceneNo}`)+(t.timeOfDay?` / ${t.timeOfDay}`:""),b=[],I=[],y=[],w={},M={};let x=0;const _=[];s.forEach((A,N)=>A.forEach(K=>_[K]=N)),s.forEach((A,N)=>{const K=`p${N+1}`,F=A[0],B=(de,Ce)=>de.title!==""?de.title:String.fromCharCode(65+Ce%26),j=o.partBreaks.find(de=>de.beforeCutIndex===F),ee=o.partBreaks.filter(de=>de.beforeCutIndex<F),D=ee[ee.length-1],Z=D?s.findIndex(de=>de.includes(D.beforeCutIndex)):-1,L=j?B(j,N):D&&Z>=0?`${B(D,Z)}-${N-Z+1}`:`${h} ${N+1}/${s.length}`,V=[],pe=[],le=[],me=[],oe=[],fe=[],X=new Set;let re=0;const Se=new Map,Q=(de,Ce)=>{let Ye=Se.get(de);if(Ye)return Ye;const tt=f.get(de)??kp,ht=Ce.kind==="move"&&Ce.actionType==="enter"&&tt.relation!=="at-entrance",Et=ht?u:tt.relation==="at-entrance"?tt.targetPropId??u:tt.targetPropId&&d(tt.targetPropId)?tt.targetPropId:null;return Ye={pose:ht?"stand":tt.pose,poseAt:null,door:Et},Se.set(de,Ye),Ye};
19let $e=0,Fe=0,Ze=0;A.forEach((de,Ce)=>{const Ye=a[de],tt=Vo($e),ht=Vo($e+Ye.durationSec);$e=ht;const Et=`${K}-c${Ce+1}`,{values:It,note:Xt}=Ye.camera,yt={id:Et,startSec:tt,endSec:ht,shotType:It.shotType??"medium",subjectIds:Ye.subjects.map(Xe=>Xe.id),cameraNote:Xt,intent:Ag(Ye.node.sections.beat," ")??""};yt.label=Ye.label,It.lensMm!==void 0&&(yt.lensMm=It.lensMm),It.moveType!==void 0&&(yt.moveType=It.moveType),It.angle!==void 0&&(yt.angle=It.angle);const Ie=(Xe,ne)=>Ag(Ye.node.sections[Xe],ne),Be=Ie("scene",` 20`);Be!==void 0&&(yt.description=Be);const lt=Ie("lighting"," ");lt!==void 0&&(yt.lighting=lt);const Ke=Ie("sound"," ");Ke!==void 0&&(yt.sound=Ke);const ct=Ie("beat"," ");ct!==void 0&&(yt.beat=ct);const xt=Ie("note"," ");xt!==void 0&&(yt.note=xt),V.push(yt),M[Et]=Ye.node.head.lineNo,w[`${Et}.durationSec`]=Ye.durationSource,It.shotType===void 0&&(w[`${Et}.shotType`]="default");for(const Xe of Ye.subjects)Xe.kind==="character"&&X.add(Xe.id);for(const Xe of Ye.dialogues){Fe+=1;const ne=`${K}-d${Fe}`,W={id:ne,characterId:Xe.characterId,startSec:Vo(tt+Xe.startSec),endSec:Vo(tt+Xe.endSec),line:Xe.line,mode:"concurrent",timeSource:Xe.timeSource};Xe.direction!==null&&(W.direction=Xe.direction),pe.push(W),X.add(Xe.characterId),M[ne]=Xe.lineNo,w[`${ne}.startSec`]=Xe.timeSource==="explicit"?"written":"estimated",I.push({kind:"dialogue",lineNo:Xe.lineNo,nameTo:Xe.nameTo,startInCut:Xe.startSec,endInCut:Xe.endSec,timeSource:Xe.timeSource}),x+=1}const jt=new Map;for(const Xe of Ye.sentences){if(Xe.characterId===null)continue;X.add(Xe.characterId);const ne=jt.get(Xe.characterId)??[];ne.push(Xe),jt.set(Xe.characterId,ne)}for(const[Xe,ne]of jt){Ze+=1;const W=`${K}-a${Ze}`;le.push({id:W,characterId:Xe,startSec:tt,endSec:ht,actionType:"act",actionClass:"performance",text:{ko:ne.map(ve=>ve.text).join(" ")}}),M[W]=ne[0].lineNo,w[`${W}.interpretation`]="default"}const Jt=NT(Ye.moves,Ye.durationSec),Mn=Vo(tt+Ye.durationSec),At=(Xe,ne,W,ve=!1)=>{Ze+=1;const we=`${K}-a${Ze}`,Re={id:we,characterId:Xe.characterId,startSec:ne,endSec:W,actionType:Xe.actionType,actionClass:Xe.kind==="move"?"movement":"performance",text:{ko:Xe.text}};Xe.targetPropId&&(Re.targetPropId=Xe.targetPropId),Xe.targetCharacterId&&(Re.targetCharacterId=Xe.targetCharacterId),Xe.pose&&(Re.pose=Xe.pose),le.push(Re),M[we]=Xe.lineNo,ve&&(w[`${we}.interpretation`]="default"),oe.push(Xe)},Ae=Ye.moves.map((Xe,ne)=>({m:Xe,t:Jt[ne]})).sort((Xe,ne)=>Xe.t.startSec-ne.t.startSec);for(const{m:Xe,t:ne}of Ae){let W=Vo(tt+ne.startSec),ve=Vo(tt+ne.endSec);if(Xe.characterId&&X.add(Xe.characterId),Xe.targetCharacterId&&X.add(Xe.targetCharacterId),Xe.kind==="door"){fe.push({doorId:Xe.targetPropId,atSec:W,open:Xe.open,lineNo:Xe.lineNo});continue}const we=Xe.characterId,Re=Q(we,Xe);if(Xe.kind==="pose"){Re.pose=Xe.pose??Re.pose,Re.poseAt=W,At(Xe,W,ve);continue}const ut=Xe.doorFallback&&Re.door?{...Xe,targetPropId:Re.door}:Xe;if(Re.pose!=="stand"){const bn=Vo(Math.max(tt,Math.min(W,Mn-2*pa)));At({...LT,characterId:we,lineNo:Xe.lineNo},bn,Vo(bn+pa),!0),Re.pose="stand",Re.poseAt=bn}Re.poseAt!==null&&W<Re.poseAt+pa&&(W=Vo(Math.min(Re.poseAt+pa,Mn-pa)),ve<W+pa&&(ve=Vo(Math.min(Mn,W+pa)))),Re.door=ut.targetPropId&&d(ut.targetPropId)?ut.targetPropId:null,At(ut,W,ve),ut===Xe&&Xe.doorFallback&&Xe.actionType==="exit"&&(le[le.length-1].doorAuto=!0)}const Ve=i.find(Xe=>Xe.cutIndex===de);I.push({kind:"cutHead",lineNo:Ye.node.head.lineNo,cutIndex:de,durationSec:Ye.durationSec,durationSource:Ye.durationSource,missing:Ve?.fields??[],firstInPart:Ce===0})});const ue=n.characters.filter(de=>X.has(de.id)).map(de=>de.id),ye=ue.map(de=>{const Ce=f.get(de)??kp,ht=oe.find(Et=>Et.kind==="move"&&Et.characterId===de)?.actionType==="enter"&&Ce.relation!=="at-entrance"?{relation:"at-entrance",targetPropId:u,pose:"stand"}:Ce;return w[`${de}.placement`]=ht.relation==="unspecified"?"default":"written",{characterId:de,...ht,facingNote:""}});for(const de of oe)de.characterId&&f.set(de.characterId,KT(f.get(de.characterId)??kp,de,d));const Ue=Vo($e),te=new Map;for(const[de,Ce]of p)te.set(de,{atSec:0,lineNo:Ce});const q=(de,Ce,Ye,tt)=>{if(Ye-Ce<=0)return;re+=1;const ht=`${K}-e${re}`;me.push({id:ht,targetPropId:de,startSec:Ce,endSec:Ye,open:!0}),M[ht]=tt};for(const de of[...fe].sort((Ce,Ye)=>Ce.atSec-Ye.atSec)){const Ce=te.get(de.doorId);de.open?Ce||te.set(de.doorId,{atSec:de.atSec,lineNo:de.lineNo}
20):(q(de.doorId,Ce?.atSec??0,de.atSec,Ce?.lineNo??de.lineNo),te.delete(de.doorId))}p.clear();for(const[de,Ce]of te)q(de,Ce.atSec,Ue,Ce.lineNo),p.set(de,Ce.lineNo);b.push({id:K,title:L,durationSec:Ue,castIds:ue,placements:ye,cuts:V,actions:le,dialogues:pe,propEvents:me}),I.push({kind:"partBreak",lineNo:j?j.lineNo:a[F].node.head.lineNo,partIndex:N,title:L,durationSec:Ue})});for(const A of r)I.push({kind:"hint",lineNo:A.lineNo,word:A.word});a.forEach((A,N)=>{const K=A.node.head.lineNo,F=A.node.endLineNo;y.push({index:N,label:A.label,lineNo:K,endLineNo:F,durationSec:A.durationSec,durationSource:A.durationSource,partIndex:_[N]??0,problemCount:n.diagnostics.filter(B=>B.lineNo>=K&&B.lineNo<=F&&(B.severity==="warning"||B.severity==="error")).length,camera:A.camera.values})});for(const A of n.characters)M[A.id]=A.lineNo;for(const A of n.props)M[A.id]=A.lineNo;const O={version:td,sceneId:`s${t.sceneNo}`,title:h,location:{kind:t.locationKind,label:t.place,notes:"",...c?{widthM:c.widthM,depthM:c.depthM}:{}},characters:n.characters.map(A=>({id:A.id,name:A.name,aliases:A.aliases,bodyType:A.bodyType,notes:A.notes})),props:n.props.map(A=>({id:A.id,kind:A.kind,label:A.baseName})),parts:b,warnings:[]};return t.timeOfDay!==null&&(O.timeOfDay=t.timeOfDay),{draft:O,annotations:I,cuts:y,provenance:w,sourceMap:M,summary:{cutCount:a.length,characterCount:n.characters.length,dialogueCount:x,totalSec:Vo(b.reduce((A,N)=>A+N.durationSec,0)),parts:b.map(A=>({id:A.id,title:A.title,durationSec:A.durationSec,cutCount:A.cuts.length}))}}}const HT=["scene","subject","camera","lighting","sound"];function zT(e,t){const n=[];return e.cuts.forEach((o,a)=>{const s=HT.filter(i=>(o.sections[i]?.length??0)===0);s.length>0&&n.push({cutIndex:a,cutLabel:t[a]??"",lineNo:o.head.lineNo,fields:s})}),n}function jT(e){const t=[];for(const n of e){const o=eB.find(a=>n.text.includes(a));o&&t.push({lineNo:n.lineNo,sentence:n.text,word:o})}return t}const UT=/\(\s*(\d+(?:\.\d+)?)\s*(?:ì´|s)?\s*(?:[~\-â]\s*(\d+(?:\.\d+)?)\s*(?:ì´|s)?\s*)?\)/,GT=/->|â/;function VT(e,t){const n=[],o=a=>a.col+a.text.trimEnd().length;for(const a of e){const s=XS(a,t,!0);if(!s){lo(t,"BS_MOVE_UNREAD",a.lineNo,a.col,o(a));continue}const{value:i,valueCol:r}=s,l=()=>lo(t,"BS_MOVE_UNREAD",a.lineNo,r,o(a)),c=(Z,L,V)=>t.marks.push({lineNo:a.lineNo,from:r+Z,to:r+L,kind:V});let d=i,u=null,p=null;const f=UT.exec(i);f&&(u=Number(f[1]),p=f[2]!==void 0?Number(f[2]):null,c(f.index,f.index+f[0].length,"time"),d=i.slice(0,f.index)+" ".repeat(f[0].length)+i.slice(f.index+f[0].length));const h=GT.exec(d),b=h?d.slice(0,h.index):d,I=Rf(Pl,b);if(!I){l();continue}c(I.from,I.to,"moveToken");const y=I.entry,w=h?d.slice(h.index+h[0].length):d,M=h?h.index+h[0].length:0,x=h?w:w.slice(0,I.from)+" ".repeat(I.to-I.from)+w.slice(I.to),_=WS(t,x,s.kind==="prop"?s.id:void 0),O=_?null:WT(t,x,s.id),A=_??O;A&&c(M+A.from,M+A.to,"name");const N=d.replace(/\s+/g," ").trim(),K={startSec:u,endSec:p,text:N,lineNo:a.lineNo};if(y.kind==="door"){const Z=s.kind==="prop"?t.props.find(L=>L.id===s.id):_?.prop??void 0;if(!Ws(Z)){l();continue}n.push({...K,characterId:s.kind==="character"?s.id:null,kind:"door",actionType:y.open?"open-door":"close-door",open:y.open,targetPropId:Z.id,targetCharacterId:null});continue}if(s.kind!=="character"){l();continue}if(y.kind==="pose"){n.push({...K,characterId:s.id,kind:"pose",actionType:y.actionType,pose:y.pose,targetPropId:null,targetCharacterId:null});continue}const F=y.actionType==="exit",B=_&&Ws(_.prop)?_.prop.id:null,j=t.props.find(Z=>Ws(Z))?.id??null,ee=F?!B:y.actionType==="enter"&&!A,D=F&&B?B:ee?j:null;if(y.needsTarget&&!A){lo(t,"BS_MOVE_NO_TARGET",a.lineNo,r,o(a));continue}n.push({...K,characterId:s.id,kind:"move",actionType:y.actionType,targetPropId:D??(!F&&_?_.prop.id:null),targetCharacterId:!F&&O?O.id:null,...ee&&j?{doorFallback:!0}:{}})}return n}function WT(e,t,n){for(const o of e.index){if(o.kind!=="character"||o.id===n)continue;const a=t.indexOf(o.text);if(a>=0)return{id:o.id,from:a,to:a+o.text.length}}return null}function Cu(e,t){const n=[];let o=0,a=0;const s=i=>{const r=e.slice(a,i),l=r.trim();l!==""&&n.push({text:l,offset:a+(r.length-r.trimStart().length)})};for(let i=0;i<e.length;i++){const r=e[i];r==="("?o++:r===")"?o=Math.max(0,o-1):o===0&&t.includes(r)&&(s(i),a=i+1)}return s(e.length),n}function XT(e,t){let n=0;for(const o of e)if(o==="(")n++;else if(o===")")n=Math.max(0,n-1);else if(n===0&&o===t)return!0;return!1}const YT=/^(\d{1,3})\s*mm$/i,ih=e=>e.toLowerCase().replace(/\./g,"").replace(/\s+/g," ").trim(),qT=rS.flatMap(e=>
20e.words.map(t=>({norm:ih(t),kind:e.kind,value:e.value}))).sort((e,t)=>t.norm.length-e.norm.length),xc=e=>e!==void 0&&/[a-z0-9]/.test(e);function ZT(e){let t=Ys[0];for(const n of Ys){const o=Math.abs(n-e),a=Math.abs(t-e);(o<a||o===a&&n<t)&&(t=n)}return t}function JT(e){const t=ih(e),n=new Array(t.length).fill(!1),o=[];for(const a of qT){if(a.norm==="")continue;let s=t.indexOf(a.norm);for(;s>=0;){const i=s+a.norm.length,r=n.slice(s,i).some(Boolean),l=!xc(a.norm[0])||!xc(t[s-1]),c=!xc(a.norm[a.norm.length-1])||!xc(t[i]);if(!r&&l&&c){for(let d=s;d<i;d++)n[d]=!0;o.push(a);break}s=t.indexOf(a.norm,s+1)}}return o}function qS(e,t){const n={composition:[]},o=e.map(s=>s.text).join(" / "),a=(s,i,r,l,c)=>{const d=n[s];d===void 0?n[s]=i:d!==i&&lo(t,"BS_CAMERA_CONFLICT",r,l,c)};for(const s of e)for(const i of Cu(s.text,"/")){const r=i.text,l=s.col+i.offset,c=l+r.length,d=YT.exec(r);if(d){const p=Number(d[1]),f=ZT(p);f!==p&&lo(t,"BS_LENS_SNAPPED",s.lineNo,l,c,{written:p,lens:f}),a("lensMm",f,s.lineNo,l,c),t.marks.push({lineNo:s.lineNo,from:l,to:c,kind:"cameraToken"});continue}if(ih(r).replace(/ /g,"")==="ws"){lo(t,"BS_AMBIGUOUS_TOKEN",s.lineNo,l,c,void 0,[{type:"replaceRange",lineNo:s.lineNo,from:l,to:c,text:"ì¨ì´ì¤í¸ì·",labelKey:"tool.blockingBoard.boardScript.fix.toWaist"},{type:"replaceRange",lineNo:s.lineNo,from:l,to:c,text:"ìì´ëì·",labelKey:"tool.blockingBoard.boardScript.fix.toWide"}]);continue}const u=JT(r);if(u.length!==0){t.marks.push({lineNo:s.lineNo,from:l,to:c,kind:"cameraToken"});for(const p of u)p.kind==="composition"?n.composition.includes(r)||n.composition.push(r):p.kind==="shot"?a("shotType",p.value,s.lineNo,l,c):p.kind==="angle"?a("angle",p.value,s.lineNo,l,c):a("moveType",p.value,s.lineNo,l,c)}}return{values:n,note:o}}const QT=/^(.+?)\s*(?:\(([^)]*)\))?\s*(?::\s*(.*))?$/;function eR(e){return e in wf||/^\d+ë$/.test(e)||/\s/.test(e)&&e.length>=7}function ZS(e,t){for(const n of e){const o=XT(n.text,":")?[{text:n.text.trim(),offset:n.text.length-n.text.trimStart().length}]:Cu(n.text,",");for(const a of o){const s=QT.exec(a.text);if(!s)continue;const i=(s[1]??"").trim();if(i==="")continue;const r=[],l=[];for(const u of(s[2]??"").split(",").map(p=>p.trim()))u!==""&&(eR(u)?r.push(u):l.push(u));for(const u of(s[3]??"").split(",").map(p=>p.trim()))u!==""&&r.push(u);const c=r.find(u=>u in wf),d=n.col+a.offset;t.characters.push({id:`ch-${t.characters.length+1}`,name:i,aliases:l,bodyType:c?wf[c]:"other",notes:r.join(", "),lineNo:n.lineNo,nameFrom:d,nameTo:d+i.length}),t.marks.push({lineNo:n.lineNo,from:d,to:d+i.length,kind:"name"})}}t.index.length=0,t.index.push(...GS(t.characters,t.props))}const JS=/^\(?\s*(\d+(?:\.\d+)?)\s*(?:m\s*)?[xÃX*]\s*(\d+(?:\.\d+)?)\s*(?:m\s*)?\)?$/;function Tg(e){const t=JS.exec(e.trim());if(!t)return null;const n=Number(t[1]),o=Number(t[2]);return n>0&&o>0?{widthM:n,depthM:o}:null}const tR=/^##\s*(?:íí¸|PART)(?=\s|$)\s*(.*)$/i,nR=/^(?:S\s*#?\s*\d+|#\d+(?![\d-])|ì¬\s*\d+|SCENE\s*\d+)/i,oR=/^(?:INT\.?\s*\/\s*EXT|I\/E|INT|EXT|EST)(?=[.\s]|$)/i,QS=/^(?:CUT|ì»·|C#|SHOT)\s*#?\s*\d[0-9A-Za-z]*(?:-[0-9A-Za-z]+)?/i,eI=/^#?\d+-\d+[A-Za-z]?(?=\s|$|[·(])/,aR=/^[-â¢*·]\s+(.+)$/,sR={"ï¼":":","ï¼":"(","ï¼":")","â":'"',"â":'"',"ï¼":'"'};function xr(e){return e.split(` 21`).map((t,n)=>{const o=(t.endsWith("\r")?t.slice(0,-1)+" ":t).replace(/[ï¼ï¼ï¼ââï¼]/g,a=>sR[a]??a);return{lineNo:n+1,text:o,indent:o.length-o.trimStart().length}})}const iR=iS.flatMap(e=>e.aliases.map(t=>({alias:t,lower:t.toLowerCase(),key:e.key}))).sort((e,t)=>t.alias.length-e.alias.length);function Bu(e){const t={...e,kind:"text"},n=e.text.trim();if(n==="")return{...t,kind:"blank"};const o=tR.exec(n);if(o)return{...t,kind:"partHead",partTitle:(o[1]??"").trim()};if(nR.test(n)||oR.test(n))return{...t,kind:"sceneHead"};if(QS.test(n)||eI.test(n))return{...t,kind:"cutHead"};const a=n.toLowerCase();for(const{alias:i,lower:r,key:l}of iR){if(!a.startsWith(r))continue;const c=n.slice(i.length),d=l==="props"&&/^\s/.test(c)&&JS.test(c.trim());if(c!==""&&!/^\s*:/.test(c)&&!d)continue;
21const u={...t,kind:"label",label:l,labelFrom:e.indent,labelTo:e.indent+i.length};if(d)return u.inlineValue=c.trim(),u.inlineCol=e.indent+i.length+(c.length-c.trimStart().length),u;const p=c.indexOf(":");if(p>=0){const f=c.slice(p+1),h=f.trim();h!==""&&(u.inlineValue=h,u.inlineCol=e.indent+i.length+p+1+(f.length-f.trimStart().length))}return u}const s=aR.exec(n);if(s){const i=(s[1]??"").trim(),r=e.indent+n.indexOf(s[1],1);return{...t,kind:"listItem",itemText:i,itemCol:r}}return t}const Df=/(\d+(?:\.\d+)?)\s*(?:ì´|s)(?![A-Za-z])/,rR=/^\s*(?:·\s*)?(\d+(?:\.\d+)?)\s*$/;function br(e,t){const n=e.text.trim(),o=QS.exec(n)??eI.exec(n),a=o?o[0]:"",s=a.replace(/^(?:CUT|ì»·|C#|SHOT)\s*#?\s*|^#/i,"").trim(),i=e.indent+a.length;let r=null,l=null,c=null;const d=e.text.slice(i),u=Df.exec(d),p=u?null:rR.exec(d),f=u??p;f&&(r=Number(f[1]),l=i+f.index+f[0].indexOf(f[1]),c=l+(f[1]??"").length);const h=t?.[0];if(h){const b=Df.exec(h.text);b&&(r=Number(b[1]))}return{label:s,durationSec:r,restFrom:i,durationFrom:l,durationTo:c}}const lR=[/^([^\s(:"]+)\s*(?:\(|:|(?="))/,/^([^\s(:"]+)\s+"/],cR=/^(\d+(?:\.\d+)?)\s*ì´$/;function dR(e,t){const n=[],o=[];let a=!1;const s=(i,r,l)=>{const c=i.text.slice(l),d=i.col,u=i.col+l;t.marks.push({lineNo:i.lineNo,from:d,to:u,kind:"name"});let p=null;const f=[],h=/^(\s*)\(([^)]*)\)/.exec(c);let b=c;if(h){b=c.slice(h[0].length);const y=h[2]??"",w=i.col+l+(h[1]??"").length+1;let M=0;for(const x of y.split(",")){const _=x.trim(),O=w+M+(x.length-x.trimStart().length),A=cR.exec(_);A?(p=Number(A[1]),t.marks.push({lineNo:i.lineNo,from:O,to:O+_.length,kind:"time"})):_!==""&&f.push(_),M+=x.length+1}}const I=b.replace(/^\s*:?\s*/,"").trim().replace(/^"/,"").replace(/"$/,"").trim();n.push({characterId:r,line:I,direction:f.length>0?f.join(", "):null,explicitStart:p,lineNo:i.lineNo,nameFrom:d,nameTo:u})};for(const i of e){const r=i.text,l=oh(t.index,r,0),c=l?r[l.to]:void 0;if(l&&l.entry.kind==="character"&&(c===void 0||/\s/.test(c)||c==="("||c===":"||c==='"')){s(i,l.entry.id,l.to),a=!0;continue}let d=null;for(const u of lR){const p=u.exec(r);if(p){d=p[1];break}}if(d){const u=sh(t,d,i.lineNo,i.col);s(i,u,d.length),a=!0;continue}if(a&&!r.startsWith('"')){const u=n[n.length-1];u.line=`${u.line} ${r}`;continue}a=!1,o.push({lineNo:i.lineNo,text:r,reason:"unknownSpeaker"})}return{items:n,unread:o}}const uR=/^(?:S\s*#?\s*\d+|#\d+(?![\d-])|ì¬\s*\d+|SCENE\s*\d+)/i,pR=/^(?:INT\.?\s*\/\s*EXT|I\/E|INT|EXT|EST)(?=[.\s]|$)/i,fR=Ti.flatMap(e=>[e.labels.ko,e.labels.en].map(t=>({label:t.toLowerCase(),kind:e.kind}))).sort((e,t)=>t.label.length-e.label.length);function mR(e){const t=e.toLowerCase(),n=t.split(/\s+/);for(const{label:o,kind:a}of fR)if(o.length>=2?t.includes(o):n.includes(o))return a;return"unspecified"}function rh(e){const t=e.text.trim();let n="1",o=null,a="";const s=uR.exec(t);if(s)n=/\d+/.exec(s[0])[0],a=t.slice(s[0].length);else{const c=pR.exec(t);if(c){const d=c[0].toUpperCase(),u=d.includes("INT"),p=d.includes("EXT");o=u&&!p?"int":p&&!u?"ext":null,a=t.slice(c[0].length)}}a=a.replace(/^[.)]+/,"").trim();let i="",r=null;const l=q2.map(c=>c.toLowerCase());for(const c of a.split(/\s*[/,]\s*|\s+-\s+/)){const d=c.trim();if(d==="")continue;const u=d.toLowerCase(),p=Object.entries(Z2).find(([f])=>f.toLowerCase()===u);l.includes(u)?r===null&&(r=d):p?o=p[1]:i===""&&(i=d)}return{sceneNo:n,place:i,timeOfDay:r,interior:o,locationKind:mR(i)}}const Rg=/\s*(?:[ÃxX]\s*(\d+)|(\d+)\s*ê°|(í|ë|ì¸|ë¤|ë¤ì¯|ì¬ì¯|ì¼ê³±|ì¬ë|ìí|ì´)\s*ê°)\s*$/;function hR(e,t){if(t&&(aa.some(a=>a.key===t)||t in Jo))return t;const n=Tt(e)?.key;if(n)return n;const o=e.split(/\s+/);return Tt(o[o.length-1])?.key??null}function bR(e,t){for(const n of e)for(const o of Cu(n.text,",")){let a=o.text,s=1;const i=y=>y[1]?Number(y[1]):y[2]?Number(y[2]):Q2[y[3]]??1,r=Rg.exec(a);r&&(s=i(r),a=a.slice(0,r.index).trim());const l=a.indexOf("=");let c=(l>=0?a.slice(0,l):a).trim();const d=r?null:Rg.exec(c);d&&(s=i(d),c=c.slice(0,d.index).trim());const u=l>=0?a.slice(l+1).trim():void 0;if(c==="")continue;const p=hR(c,u),f=p??"generic",h=n.col+o.offset;if(!p){const y=Object.entries(tB).filter(([w])=>c.includes(w)).slice(0,3).map(([,w])=>({type:"setPropKind",lineNo:n.lineNo,name:c,kind:w,labelKey:"tool.blockingBoard.boardScript.fix.setPropKind"}));lo(t,"BS_PROP_GENERIC",n.lineNo,h,h+c.length,{name:c},y)}const b=Math.max(1,Math.min(s,40));let I=t.props.filter(y=>y.kind===f).length;for(let y=1;y<=b;y++)I+=1,t.props.push({id:`pr-${f}-${I}`,kind:f,label:b>=2?`${c} ${y}`:c,baseName:c,lineNo:n.lineNo})}t.index.length=0,t.index.push(...GS(t.characters,t.props))}const Dg=".?!â¦";function gR(e){const t=[];for(const n of e){const o=n.text;let a=0,s=!1;const i=r=>{const l=o.slice(a,r),c=l.trim();c!==""&&t.push({text:c,lineNo:n.lineNo,col:n.col+a+(l.length-l.trimStart().length)}),a=r};for(let r=0;r<o.length;r++){const l=o[r];if(l==='"')s=!s;else if(!s&&Dg.includes(l)){for(;r+1<o.length&&Dg.includes(o[r+1]);)r++;i(r+1)}}i(o.length)}return t}function vR(e,t){const n=oh(e,t.text,0);if(!n||n.entry.kind!=="character")return null;const o=t.text.slice(n.to);return/^\s/.test(o)||J2.some(s=>o.startsWith(s)&&(o.length===s.length||/\s/.test(o[s.length])))?{characterId:n.entry.id,from:t.col,to:t.col+n.to}:null}function yR(e,t){const n=[];for(const o of e)for(const a of Cu(o.text,"/,")){const s=o.col+a.offset,i=VS(t.index,a.text);let r,l;i?(r=i.id,l=i.kind):(r=sh(t,a.text,o.lineNo,s),l="character"),t.marks.push({lineNo:o.lineNo,from:s,to:s+a.text.length,kind:"name"}),!n.some(c=>c.id===r)&&n.push({id:r,kind:l,lineNo:o.lineNo,from:s,to:s+a.text.length})}return n}function kR(e,t,n){const o=e.length,a=[...new Set(t.filter(l=>l>=1&&l<o))].sort((l,c)=>l-c),s=[];if(a.length>0){let l=0;for(const c of[...a,o])s.push(Array.from({length:c-l},(d,u)=>l+u)),l=c;return s}let i=[],r=0;return e.forEach((l,c)=>{i.length>0&&r+l>n+1e-9&&(s.push(i),i=[],r=0),i.push(c),r+=l}),i.length>0&&s.push(i),s}const Og=e=>e==="cast"||e==="props"||e==="position";
21function ec(e){const t={sceneHead:null,sceneSections:{},cuts:[],partBreaks:[],unread:[],secondSceneLineNo:null,lineSections:{},lineCutIndex:{}};let n="PRELUDE";const o={open:null,cut:null};let a=!1;const s=(c,d)=>{const u={lineNo:c.lineNo,text:c.text.trim(),reason:d};t.unread.push(u)},i=c=>{o.cut&&(o.cut.endLineNo=c),o.cut=null},r=(c,d)=>{t.lineSections[c]=d,o.cut&&d!=="sceneHead"&&d!=="partHead"&&(t.lineCutIndex[c]=t.cuts.length-1)},l=(c,d)=>{var u,p;const f=Og(d)?(u=t.sceneSections)[d]??(u[d]=[]):(p=o.cut.sections)[d]??(p[d]=[]);o.open={key:d,pieces:f},c.inlineValue!==void 0&&f.push({lineNo:c.lineNo,col:c.inlineCol??0,text:c.inlineValue}),r(c.lineNo,d)};for(const c of e){if(a){c.kind!=="blank"&&s(c,"secondScene");continue}if(c.kind==="blank"){o.open&&r(c.lineNo,o.open.key);continue}if(n==="PRELUDE"){c.kind==="sceneHead"?(t.sceneHead=c,r(c.lineNo,"sceneHead"),n="SCENE"):s(c,"beforeScene");continue}if(c.kind==="sceneHead"){t.secondSceneLineNo=c.lineNo,a=!0,o.open=null,i(c.lineNo-1),s(c,"secondScene");continue}if(c.kind==="label"){const p=c.label;if(Og(p))n==="SCENE"?l(c,p):(o.open=null,s(c,"labelOutOfPlace"));else if(!o.cut)o.open=null,s(c,"labelOutsideCut");else{const f=o.cut,h=(f.sections[p]?.length??0)>0;l(c,p),h&&!f.repeatedLabels.includes(p)&&f.repeatedLabels.push(p)}continue}if(c.kind==="cutHead"){o.open=null,i(c.lineNo-1),o.cut={head:c,sections:{},repeatedLabels:[],endLineNo:c.lineNo},t.cuts.push(o.cut),n="CUT",r(c.lineNo,"cutHead");continue}if(c.kind==="partHead"){o.open=null,i(c.lineNo-1),t.partBreaks.push({beforeCutIndex:t.cuts.length,title:c.partTitle??"",lineNo:c.lineNo}),r(c.lineNo,"partHead");continue}const d=o.open;if(!d){s(c,"noSection");continue}const u=c.kind==="listItem"?{lineNo:c.lineNo,col:c.itemCol??0,text:c.itemText??""}:{lineNo:c.lineNo,col:c.indent,text:c.text.trim()};d.pieces.push(u),r(c.lineNo,d.key)}return i(e.length>0?e[e.length-1].lineNo:0),t}const SR=`ì¥ë©´ 22 23í¼ì¬ì²´: 24ì¹´ë©ë¼: 25ì¡°ëª : 26ì¬ì´ë: `;function Di(e){return xr(e).map(Bu)}function qo(e,t){let n=0;for(let o=1;o<t;o++){const a=e.indexOf(` 27`,n);if(a<0)return e.length;n=a+1}return n}function lh(e){const t=Math.round(e*2)/2;return Number.isInteger(t)?String(t):t.toFixed(1)}function tI(e,t){return[...t].sort((n,o)=>o.from-n.from).reduce((n,o)=>n.slice(0,o.from)+o.insert+n.slice(o.to),e)}const no=(e,t,n,o)=>({changes:[{from:e,to:t,insert:n}],cursor:o}),IR=e=>e.kind==="cutHead"||e.kind==="partHead"||e.kind==="sceneHead";function nI(e,t){for(let n=t+1;n<=e.length;n++)if(IR(e[n-1]))return n-1;return e.length}function oI(e,t,n){for(let o=n;o>t;o--)if(e[o-1].kind!=="blank")return o;return t}
27function aI(e,t,n){const o=Di(e),a=o[t-1];if(!a)return{changes:[],cursor:0};const s=qo(e,t),i=lh(n),l=ec(o).cuts.find(h=>h.head.lineNo===t)?.sections.duration?.[0],c=l?Df.exec(l.text):null;if(l&&c){const h=qo(e,l.lineNo)+l.col+c.index;return no(h,h+(c[1]??"").length,i,h+i.length)}const{durationFrom:d,durationTo:u}=br(a,void 0);if(d!==null&&u!==null){const h=s+d;return no(h,s+u,i,h+i.length)}const p=s+a.text.trimEnd().length,f=` · ${i}ì´`;return no(p,p,f,p+f.length)}function wR(e,t,n){const o=Di(e),a=nI(o,t),s=Yi(n),i=Y2.includes(n),r=eg.indexOf(n);for(let d=t+1;d<=a;d++){const u=o[d-1];if(u.kind!=="label")continue;if(eg.indexOf(u.label)>r){const f=qo(e,d);return i?no(f,f,`${s} 28 29`,f+s.length+1):no(f,f,`${s}: 30`,f+s.length+2)}}const l=oI(o,t,a),c=qo(e,l)+o[l-1].text.trimEnd().length;return i?no(c,c,` 31${s} 32`,c+s.length+2):no(c,c,` 33${s}: `,c+s.length+3)}function MR(e,t,n,o){const a=qo(e,t),s=xr(e)[t-1]?.text??"",i=`${lh(o)}ì´`;let r=n;for(;s[r]===" ";)r++;if(s[r]==="("){const d=s.indexOf(")",r),u=d<0?s.length:d,p=s.slice(r+1,u),f=/\d+(?:\.\d+)?\s*ì´/.exec(p);if(f){const b=a+r+1+f.index;return no(b,b+f[0].length,i,b+i.length)}const h=a+r+1;return no(h,h,`${i}, `,h+i.length+2)}const l=a+n,c=` (${i})`;return no(l,l,c,l+c.length)}function $R(e,t,n){const o=qo(e,t),a=`## íí¸ ${n} 34`;return no(o,o,a,o+a.length)}function ER(e){const t=Di(e).filter(a=>a.kind==="partHead").map(a=>a.partTitle??""),n=t[t.length-1];if(n&&/^[A-Y]$/.test(n))return String.fromCharCode(n.charCodeAt(0)+1);const o=t.length+1;return o<=26?String.fromCharCode(64+o):String(o)}function ch(e,t){const n=Di(e),o=n.filter(r=>r.kind==="cutHead"&&r.lineNo<=t),a=o[o.length-1];if(a){const r=/^(\d+)-(\d+)$/.exec(br(a,void 0).label);if(r)return`${r[1]}-${Number(r[2])+1}`}const s=n.find(r=>r.kind==="sceneHead");return`${s?rh(s).sceneNo:"1"}-${o.length+1}`}function lbe(e,t){const n=Di(e),o=[...n].reverse().find(d=>d.kind==="cutHead"&&d.lineNo<=t),a=o?o.lineNo:Math.min(Math.max(t,1),n.length),s=o?nI(n,o.lineNo):a,i=oI(n,a,s),r=qo(e,i)+(n[i-1]?.text.trimEnd().length??0),l=ch(e,n.length),c=` 35 36CUT ${l} 37ì¥ë©´ 38`;return no(r,r,` 39 40CUT ${l} 41${SR}`,r+c.length)}function sI(e){const t=Di(e),n=t.filter(l=>l.kind==="cutHead"),o=t.find(l=>l.kind==="sceneHead"),a=n[0]?br(n[0],void 0).label:"",s=o?rh(o).sceneNo:a.includes("-")?a.slice(0,a.indexOf("-")):"1",i=[];let r=0;return n.forEach((l,c)=>{const{label:d,restFrom:u}=br(l,void 0),p=`${s}-${c+1}`;if(d===p)return;const f=qo(e,l.lineNo)+u-d.length;i.push({from:f,to:f+d.length,insert:p}),r=f+p.length}),{changes:i,cursor:r}}function xR(e){return sI(e).changes.length>0}function cbe(e,t){if(t.type==="replaceRange"){const l=qo(e,t.lineNo);return no(l+t.from,l+t.to,t.text,l+t.from+t.text.length)}if(t.type==="insertCutHeadAbove"){const l=qo(e,t.lineNo),c=`CUT ${ch(e,t.lineNo)} 42`;return no(l,l,c,l+c.length)}if(t.type==="setPropKind"){const l=qo(e,t.lineNo),c=xr(e)[t.lineNo-1]?.text??"",d=c.indexOf(t.name);if(d<0)return{changes:[],cursor:l};const u=d+t.name.length,p=`=${t.kind}`;if(c[u]==="="){let f=u+1;for(;f<c.length&&!/[,Ã\s]/.test(c[f]);)f++;return no(l+u,l+f,p,l+u+p.length)}return no(l+u,l+u,p,l+u+p.length)}const n=Di(e),o=ec(n),a=`- ${t.name} () : `,s=o.sceneSections.cast;let i=-1;if(s&&s.length>0)i=s[s.length-1].lineNo;else for(let l=n.length;l>=1;l--)if(o.lineSections[l]==="cast"&&n[l-1].kind==="label"){i=l;break}if(i>0){const l=qo(e,i)+n[i-1].text.trimEnd().length;return no(l,l,` 43${a}`,l+a.length+1)}if(o.sceneHead){const l=o.sceneHead.lineNo,c=qo(e,l)+n[l-1].text.trimEnd().length,d=` 44 45ë±ì¥ 46${a}`;return no(c,c,d,c+d.length)}const r=`ë±ì¥ 47${a} 48`;return no(0,0,r,r.length-1)}const PR=`S#8. 0ê³¼ ì¬ë¬´ì¤ / ë°¤ / ì¤ë´ 49 50ë±ì¥ 51- ì´íì° (íì°) : ë¨, 20ë, ì ì ìì. ì ì ì½í¸ 52- ë°©ëí (ëí, íì¥) : ë¨, 40ë, íì¥. ë¥íì´ë¥¼ ëì¨íê² ë§¨ 53- ìì§ì (ì§ì) : ì¬, 30ë, ë¶ìê´. ìê²½ 54- ê°ëì¤ (ëì¤) : ë¨, 30ë, íì¥ ìì. íì ë¶ë 55- ì¤ë¯¼ì (민ì) : ì¬, 20ë, ë§ë´ 기ì ìì 56 57ê³µê°: 12Ã8m 58- ë무 ì¶ì 문=door 59- ë¹ì문=door 60- 창문=window 61- ê³µë ë°ì¤í¬ 62- íì¥ì± ì 63- ì± ì Ã2 64- ìì Ã5 65- ìí 66- ì»¤í¼ í ì´ë¸ 67- íì´í¸ë³´ë 68- ì ì기 69- ì½í¸ë 70- ì± ì¥ 71- íë¶ 72- ì¤í ëì¡°ëª 73 74ìì¹ 75- ë°©ëí : ììì ìì 76- ìì§ì : íì´í¸ë³´ë ì 77- ê°ëì¤ : ìíì ìì 78- ì¤ë¯¼ì : ì ì기 ì 79- ì´íì° : ì 구 80 81## íí¸ A 82CUT 8-1 · 4ì´ 83ì¥ë©´ 84ë무 ì¶ì ë¬¸ì´ ìê±± ì´ë¦¬ê³ ì´íì°ê° ë¤ì´ì¨ë¤. 85ë°©ëíì ììì ìì ìë¥ë¥¼ ë긴ë¤. 86ëì 87- ë무 ì¶ì 문 : ì´ë¦¼ (0ì´) 88- ì´íì° : ë¤ì´ì¨ë¤ (0.5~2.5ì´) 89- ë무 ì¶ì 문 : ë«í (3.5ì´) 90í¼ì¬ì²´: ì´íì° / ë°©ëí 91ì¹´ë©ë¼: íì· / 24mm / ìì´ë 벨 / ê³ ì 92ì¡°ëª : ë¡ì íê´ë±ì í¸ë¥¸ë¹, ì± ìë§ë¤ ë ¸ë ì¤í ë ë¶ë¹ 93ì¬ì´ë: 문 경첩 ìê±±ì´ë ì리, ë¹ì리 94 95CUT 8-2 5 96ì¥ë©´ 97ì´íì°ê° ì ì ì½í¸ë¥¼ ë²ì´ ì½í¸ëì ê±´ë¤. 98ì¤ë¯¼ìê° ì¢ ì´ì»µì ë ì± ì´íì°ìê² ë¤ê°ê°ë¤. 99ëì 100- ì´íì° : ê±·ëë¤ -> ì½í¸ë 101- ì¤ë¯¼ì : ì´íì°ìê² ë¤ê°ê°ë¤ 102í¼ì¬ì²´: ì´íì° / ì¤ë¯¼ì 103ëì¬ 104민ì (ìê²) "ì ë°°, ë¹ ë§ìì´ì?" 105ì¹´ë©ë¼: 미ëì / 50mm / ìì´ë 벨 / í¸ëí¹ / í¬ì· 106ì¡°ëª : ì½í¸ìì ë¨ì´ì§ë 물방ì¸ì ì¤í ë ë¶ë¹ì´ 맺íë¤ 107ì¬ì´ë: ë¹ì리, ì¢ ì´ì»µ 구겨ì§ë ì리 108 109CUT 8-3 (8ì´) 110ì¥ë©´ 111ë°©ëíì´ ìë¥ë¥¼ ë´ë ¤ëê³ ìììì ì¼ì´ëë¤. 112ë ì¬ëì´ ê³µë ë°ì¤í¬ë¥¼ ì¬ì´ì ëê³ ë§ì£¼ ì ë¤. 113ëì
114- ë°©ëí : ì¼ì´ì ë¤ (1ì´) 115- ë°©ëí : ê±·ëë¤ -> ê³µë ë°ì¤í¬ (1.5~5ì´) 116- ì´íì° : ê³µë ë°ì¤í¬ë¡ 걸ì´ê°ë¤ (2~5.5ì´) 117í¼ì¬ì²´: ë°©ëí / ì´íì° 118ëì¬ 119ëí (ìë¥ìì ëì ë¼ì§ ìê³ , 2ì´) "ìë¤, ëë¹ì ì ë¡ ììíë¤ë©°." 120íì° (í리를 í´ë©°, 4.5ì´) "ë¤. ì¤ëë¶í° ì¶ê·¼íê² ë ì´íì°ì ëë¤." 121ì¹´ë©ë¼: ì¤ë²ìë / ì¨ì´ì¤í¸ì· / 50mm / ë¡ì° / í¸ëí¬ë 122ì¡°ëª : ì¼êµ´ ì¼ìª½ì ì¤í ë ë¶ë¹, ì¤ë¥¸ìª½ì íê´ë±ì í¸ë¥¸ ê·¸ë 123ì¬ì´ë: ë²½ìê³ ì´ì¹¨, ì¢ ì´ ë기ë ì리 124ë¹í¸: ëíì ì ì ì ìííê³ , íì°ë 첫ì¸ìì ì§í¤ë ¤ íë¤ 125 126## íí¸ B 127CUT 8-4 · 6ì´ 128ì¥ë©´ 129ê°ëì¤ì´ ìíì ëë¬ëì ë¤ê° 몸ì ì¼ì¼í¨ë¤. 130ìì§ìê° ì¬ì§ ëì¹ë¥¼ ë¤ê³ ì»¤í¼ í ì´ë¸ë¡ ê°ì 무ë¦ì ê¿ëë¤. 131ëì 132- ê°ëì¤ : ëëë¤ (0ì´) 133- ìì§ì : ê±·ëë¤ -> ì»¤í¼ í ì´ë¸ (0.5~3.5ì´) 134- ìì§ì : ë¬´ë¦ ê¿ëë¤ (4ì´) 135- ê°ëì¤ : ì¼ì´ì ë¤ (4.5ì´) 136í¼ì¬ì²´: ìì§ì / ê°ëì¤ 137ì¹´ë©ë¼: ë²ì¦ìì´ / ì¸ìí¸ / 85mm / ê³ ì 138ì¡°ëª : ì¬ì§ ìë¡ ì¤í ëì ë¥ê·¼ ë¹ ì ë©ì´ 139ì¬ì´ë: ì¬ì§ ë기ë ì리, ìí ì¤íë§ ìê±±ì 140 141CUT 8-5 (6ì´) 142ì¥ë©´
143ê°ëì¤ì´ ì»¤í¼ í ì´ë¸ ê³ì ìª¼ê·¸ë ¤ ìì ì¬ì§ í ì¥ì ì§ì´ ë ë¤. 144ëì 145- ê°ëì¤ : ê±·ëë¤ -> ì»¤í¼ í ì´ë¸ (0~2ì´) 146- ê°ëì¤ : ìª¼ê·¸ë ¤ ìëë¤ (2.5ì´) 147í¼ì¬ì²´: ê°ëì¤ / ìì§ì 148ëì¬ 149ëì¤ (ì¬ì§ì íë¤ë©°, 1ì´) "ì´ ë²í¸í, ì´ì ë¶ëìì 본 ì°¨ì¼." 150ì§ì (ê³ ê°ë¥¼ ë¤ë©°, 5ì´) "íì¤í´ì?" 151ì¹´ë©ë¼: í´ë¡ì¦ì / 85mm / ìì´ë 벨 / í¸ëí¬ë 152ì¡°ëª : ê°ëì¤ì ì¼êµ´ ì ë°ë§ ì¤í ë ë¶ë¹ì ë°ëë¤ 153ì¬ì´ë: íê´ë± ì ì 거림 154 155CUT 8-6 · 8ì´ 156ì¥ë©´ 157ë°©ëíì´ íì´í¸ë³´ëë¡ ë¬ë ¤ê° ì§ëì íì ê½ëë¤. 158ì¤ë¯¼ìê° ë ¸í¸ë¶ì ìê³ ì± ìì¼ë¡ ë°ì´ê° ìëë¤. 159ëì 160- ë°©ëí : ë´ë¤ -> íì´í¸ë³´ë (0~2ì´) 161- ì¤ë¯¼ì : ë°ì´ê°ë¤ -> ì± ì (0.5~3ì´) 162- ì¤ë¯¼ì : ìëë¤ (3.5ì´) 163í¼ì¬ì²´: ë°©ëí / ì¤ë¯¼ì 164ëì¬ 165ëí (íì ë르며, 2.5ì´) "ë¶ë ì°½ê³ . ì¤ë ë°¤ ìì ëë¸ë¤." 166민ì (ìíì ëë리며, 5ì´) "CCTV ì°ê²°ëì´ì. ì¼ ë² ê²ì´í¸ì ëë¤." 167ì¹´ë©ë¼: ìì´ë / 24mm / ëì¹ / í©í¬ 168ì¡°ëª : íì´í¸ë³´ë ì ì§ëì ì°½ë° ë²ê°ê° ë²ì©ì¸ë¤ 169ì¬ì´ë: ì²ë¥, í¤ë³´ë ëë리ë ì리 170ë©ëª¨: ë²ê°ë ëì¬ ì¬ì´ 공백ì ë§ì¶ë¤ 171 172CUT 8-7 173ì¥ë©´ 174ë°©ëíì´ íìë¤ì í ì¬ëì© ëì본ë¤. 175í¼ì¬ì²´: ë°©ëí 176ëì¬ 177ëí (íì¨ì ìì´) "ê°ëì¤, ì´íì°. ëì´ ê°ë¤. ìì§ìë 무ì ë기." 178ì¹´ë©ë¼: í´ë¡ì¦ì / 85mm / íì´ / ì¤ 179ì¡°ëª : ë°©ëíì ì¼êµ´ì ë²ê° ë¹ì´ ì¤ì¹ë¤ 180ì¬ì´ë: ìê³ ì´ì¹¨ 181 182## íí¸ C 183CUT 8-8 · 6ì´ 184ì¥ë©´ 185ê°ëì¤ì´ ì½í¸ë¥¼ 걸ì¹ë©° ë¹ì문ì¼ë¡ 걸ì´ê°ë¤. 186ìì§ìê° ì¼ì´ë ê·¸ ìì¼ë¡ ë¤ê°ì ë¤. 187ëì 188- ê°ëì¤ : ê±·ëë¤ -> ë¹ì문 (0.5~3.5ì´) 189- ìì§ì : ê°ëì¤ìê² ë¤ê°ì ë¤ (1.5~4ì´) 190í¼ì¬ì²´: ê°ëì¤ / ìì§ì 191ëì¬ 192ì§ì (íì ë¶ì¡ì¼ë©°, 4ì´) "ê·¸ íë¡ë 못 ê°ì." 193ì¹´ë©ë¼: í¬ì· / 미ëì / 50mm / ìì´ë 벨 / ìí¬ 194ì¡°ëª : ë³µë ì´ë¡ ë¹ìë±ì´ ë ì¬ëì ìì¼êµ´ì ê°ë¥¸ë¤ 195ì¬ì´ë: ë¹ìë¦¬ê° ë¤ì ê±°ì¸ì§ë¤ 196ë¹í¸: ëì¤ì ì¦ëª íê³ ì¶ê³ , ì§ìë ìê³ ì¶ì§ ìë¤ 197 198CUT 8-9 · 6ì´ 199ì¥ë©´ 200ì´íì°ê° ìì¼ë¡ ëìë©° ìì ë ë¤. 201ëì 202- ì´íì° : ë¤ê°ê°ë¤ -> ê°ëì¤ (0~4ì´) 203í¼ì¬ì²´: ì´íì° / ê°ëì¤ 204ëì¬ 205íì° (4ì´) "ì ê° ê°ê² ìµëë¤." 206ì¹´ë©ë¼: ë¡ì° / íì· / 35mm / í¸ì ì¸ 207ì¡°ëª : íê´ë± ìë ì´íì°ë§ ë°ë¤ 208ì¬ì´ë: ë¹ìë¦¬ê° ë ëê¸°ë¯ ì ì 209 210CUT 8-10 · 6ì´ 211ì¥ë©´ 212ê°ëì¤ì´ ë¹ì문ì ë°ì´ ì´ê³ ëê°ë¤. ì´íì°ê° ë¤ë°ë¥¸ë¤. 213ëì 214- ë¹ì문 : ì´ë¦¼ (0.5ì´) 215- ê°ëì¤ : ëê°ë¤ (1~3ì´) 216- ì´íì° : ëê°ë¤ (2~4.5ì´) 217- ë¹ì문 : ë«í (5.5ì´) 218í¼ì¬ì²´: ê°ëì¤ / ì´íì° 219ì¹´ë©ë¼: 롱 / 24mm / ìì´ë 벨 / íë°± 220ì¡°ëª : 문íì¼ë¡ ë³µëì ì°¨ê°ì´ í°ë¹ì´ ìì´ ë ë¤ 221ì¬ì´ë: 문 경첩 ì리, ë©ì´ì§ë ë°ì리, ì¾ ë«íë ì리 222 223CUT 8-11 · 7ì´ 224ì¥ë©´ 225ìì§ìê° ê³µë ë°ì¤í¬ë¡ ê° í¤ëì ì ì°ê³ ìëë¤. 226ë°©ëíì ì°½ê°ì ìì ë¹ ë´ë¦¬ë ë°ì ë´ë ¤ë¤ë³¸ë¤. 227ëì 228- ìì§ì : ê±·ëë¤ -> ê³µë ë°ì¤í¬ (0~4ì´) 229- ìì§ì : ìëë¤ (4.5ì´) 230- ë°©ëí : 창문 ìì¼ë¡ 걸ì´ê°ë¤ (0~4ì´) 231í¼ì¬ì²´: ìì§ì / ë°©ëí / ì¤ë¯¼ì 232ëì¬ 233ì§ì (í¤ëì ë§ì´í¬ë¥¼ ë¹ê¸°ë©°, 5ì´) "무ì íì¸. ë¤ë ¤ì?" 234ì¹´ë©ë¼: ìµì¤í¸ë¦¼ 롱 / 16mm / íì´ / í¸í¸ 235ì¡°ëª : 모ëí°ì í¸ë¥¸ë¹ë§ ë¨ëë¤ 236ì¬ì´ë: 무ì ì¡ì, ë¹ì리 237ë©ëª¨: ë¤ì ì¬ì¼ë¡ 무ì ìë¦¬ê° ë¨¼ì ëì´ê°ë¤ 238`,CR=["scene","subject","camera","lighting","sound"],BR={subject:"subject",camera:"camera",lighting:"lighting",sound:"sound"},Pc=e=>e.kind==="sceneHead"||e.kind==="cutHead"||e.kind==="partHead";function _R(e,t){const n=xr(e).map(Bu),o=n[t-1];if(!o||o.kind!=="blank")return null;const a=TR(n),s=(y,w=null)=>({insert:y,hint:w,names:a});let i=null;for(let y=t-1;y>=1&&!i;y--)Pc(n[y-1])&&(i=n[y-1]);const r=n[t-2];let l=null;for(let y=t-1;y>=1&&!l;y--)n[y-1].kind!=="blank"&&(l=n[y-1]);const c=n.slice(t).some(Pc),d=n.slice(t).some(y=>y.kind==="cutHead"),u=()=>d?null:s(`CUT ${ch(e,t)}`);
238if(!i)return n.some(y=>y.kind==="sceneHead")?null:s("S#1. ","sceneHead");if(i.kind==="partHead")return u();if(i.kind==="sceneHead"){const y=n.findIndex((A,N)=>N>=i.lineNo&&Pc(A)),w=n.slice(i.lineNo,y<0?n.length:y),M=A=>w.some(N=>N.kind==="label"&&N.label===A);let x=null;for(let A=t-1;A>i.lineNo&&!x;A--)n[A-1].kind==="label"&&(x=n[A-1]);const _={cast:"castItem",props:"propItem",position:"positionItem"},O=x?.label==="cast"||x?.label==="props"||x?.label==="position"?x.label:null;return O&&r&&r.kind!=="blank"?s("- ",_[O]):M("cast")?M("props")?!M("position")&&!c?s(Yi("position")):c?null:u():s(Yi("props")):s(Yi("cast"))}const p=n.findIndex((y,w)=>w>=i.lineNo&&Pc(y)),f=n.slice(i.lineNo,p<0?n.length:p),h=new Set(f.filter(y=>y.kind==="label").map(y=>y.label));if(l&&l.kind==="label"&&l.inlineValue===void 0&&(l.label==="scene"||l.label==="dialogue"))return s("",l.label==="scene"?"sceneText":"dialogueLine");let b=null;for(let y=t-1;y>i.lineNo&&!b;y--)n[y-1].kind==="label"&&(b=n[y-1]);if(b?.label==="blocking"&&r&&r.kind!=="blank")return s("- ","blockingItem");if(b?.label==="scene"&&l?.kind==="text"&&!h.has("blocking")&&f.some(y=>y.kind==="text"&&AR(y.text)))return s(Yi("blocking"));const I=CR.find(y=>!h.has(y));if(I){const y=Yi(I);return s(I==="scene"?y:`${y}: `,BR[I]??null)}return c?null:u()}const AR=e=>Pl.some(t=>t.kind!=="door"&&t.words.some(n=>e.includes(n)));function TR(e){const t=ec(e),n=ah(e);return ZS(t.sceneSections.cast??[],n),n.characters.slice(0,2).map(o=>o.name)}const RR=/^(?:S\s*#?\s*\d+|#\d+|ì¬\s*\d+|SCENE\s*\d+)\.?/i,DR=["place","timeOfDay","interior"],OR=["shot","lens","angle","move"],NR=["subject","camera","lighting","sound","beat","note"],LR={lighting:"lighting",sound:"sound",beat:"beat",note:"note"};function iI(e,t){const n=xr(e).map(Bu),o=n[t-1];return!o||o.kind==="blank"?null:{line:o,section:ec(n).lineSections[t]}}function Ng(e,t,n){if(e.trim()==="")return Us(t,n);const o=e.split(n.trim());if(o[o.length-1].trim()===""){const i=t.slice(o.length-1);return i.length===0?null:[...e.endsWith(" ")?[]:[{text:" "}],...Us(i,n)]}const s=t.slice(o.length);return s.length>0?[{text:rI(e,n)},...Us(s,n)]:null}const rI=(e,t)=>e.endsWith(" ")?t.trimStart():t;function Us(e,t){return e.flatMap((n,o)=>o===0?[{slot:n}]:[{text:t},{slot:n}])}function KR(e){const t=br(e,void 0);return t.durationSec!==null||/[(·]/.test(e.text.slice(t.restFrom))}function dbe(e,t){const n=iI(e,t);if(!n)return null;const{line:o,section:a}=n,s=o.text.trimEnd(),i=o.text.length>s.length?o.text.slice(s.length):"",r=s.trimStart()+i;if(o.kind==="sceneHead"){const l=RR.exec(r);if(!l)return null;const c=r.slice(l[0].length),d=Ng(c.trimStart()===""?"":c,DR," / ");return d&&c===""?[{text:" "},...d]:d}if(o.kind==="cutHead")return KR(o)?null:[...r.endsWith(" ")?[]:[{text:" "}],{slot:"duration"}];if(o.kind==="label"&&o.label==="props"&&o.inlineValue===void 0)return[{text:r.includes(":")?" ":": "},{slot:"roomSize"}];if(o.kind==="listItem"&&a==="position"){const l=o.itemText??"",c=l.indexOf(":");return c<0?[{text:" : "},{slot:"where"}]:l.slice(c+1).trim()===""?[{slot:"where"}]:null}if(o.kind==="listItem"&&a==="blocking"){const l=o.itemText??"",c=l.indexOf(":"),d=[{slot:"move"},{text:" -> "},{slot:"dest"},{text:" ("},{slot:"time"},{text:")"}];if(c<0)return[{text:" : "},...d];const u=l.slice(c+1);if(u.trim()==="")return d;const p=[],f=HR(Pl,u);return f?.kind==="move"&&f.needsTarget&&!/->|â/.test(u)&&p.push({text:" -> "},{slot:"dest"}),f&&!u.includes("(")&&p.push({text:" ("},{slot:"time"},{text:")"}),p.length>0?p:null}if(o.kind==="listItem"&&a==="cast"){const l=o.itemText??"",c=l.indexOf(":");return c<0?l.includes("(")&&!l.includes(")")?null:[...l.includes(")")?[{text:" : "}]:[{text:" ("},{slot:"nickname"},{text:") : "}],...Us(["gender","description"],", ")]:Ng(l.slice(c+1),["gender","description"],", ")}if(o.kind==="label"&&o.label&&NR.includes(o.label)){const l=o.label,c=r.indexOf(":");if(c<0)return[{text:": "},...Lg(l,"")];const d=r.slice(c+1),u=d===""?[{text:" "}]:[],p=Lg(l,d);return p?[...u,...p]:null}return o.kind==="text"&&a==="dialogue"?r.includes('"')||r.includes(":")||r.includes("(")&&!r.includes(")")?null:[...r.includes(")")?[{text:' "'}]:[{text:" ("},{slot:"direction"},{text:') "'}],{slot:"line"},{text:'"'}]:null}function Lg(e,t){const n=LR[e];if(n)return t.trim()===""?[{slot:n}]:null;if(e==="subject")return t.trim()===""?Us(["name","name"]," / "):null;if(e==="camera"){const o=qS([{lineNo:1,col:0,text:t}],ah([])).values,a=new Set;o.shotType&&a.add("shot"),o.lensMm&&a.add("lens"),o.angle&&a.add("angle"),o.moveType&&a.add("move");const s=OR.filter(r=>!a.has(r));return s.length===0?null:t.trim()===""?Us(s," / "):/\/\s*$/.test(t)?[...t.endsWith(" ")?[]:[{text:" "}],...Us(s," / ")]:[{text:rI(t," / ")},...Us(s," / ")]}return null}function FR(e,t){const n=iI(e,t);if(!n)return null;const{line:o,section:a}=n;return o.kind==="sceneHead"?"sceneHead":o.kind==="cutHead"?"cutHead":o.kind==="partHead"?"partHead":o.kind==="label"&&o.label?o.label==="cast"?"castItem":o.label==="position"?"position":o.label==="blocking"?"blocking":o.label==="props"?"props":o.label==="scene"?"sceneText":o.label==="dialogue"?"dialogue":o.label==="duration"?"cutHead":o.label:a==="cast"?"castItem":a==="position"?"position":a==="blocking"?"blocking":a==="props"?"propItem":a==="scene"?"sceneText":a==="dialogue"?"dialogue":null}function HR(e,t){return e.find(n=>n.words.some(o=>t.includes(o)))??null}const ls=e=>e.text.trimEnd().length;function zR(e,t){let o=Qm(e.location.kind).preset;if(!o)return;const{widthM:a,depthM:s}=e.location;if(a!==void 0&&s!==void 0){const c=d=>Math.min(bi,Math.max(hi,d));o=vS(o,c(a),c(s))}let i=0;const r=eh(e.props,o,c=>`${c}-fit-${++i}`),l=new Set;
238for(const c of r.issues){if(c.code!=="PROP_NO_SPACE"&&c.code!=="OPENING_NO_SPACE")continue;const d=r.props.find(f=>f.id===c.targetId)?.sourceId,u=t.props.find(f=>f.id===d)?.lineNo;if(u===void 0||l.has(u))continue;l.add(u);const p=t.lines[u-1];lo(t,"BS_ROOM_FULL",u,p?.indent??0,p?ls(p):0)}}function jR(e,t,n){let o=0;const{snapshot:a,issues:s}=_l(e,{projectId:"fit",name:"",idFactory:d=>`${d}-fit-${++o}`}),i=(d,u)=>{for(const[p,f]of a.parts.entries()){let h=-1,b=-.25;if(f.timeline.actions.forEach((M,x)=>{if(M.actorId!==d||M.actionClass!=="movement")return;const _=Math.min(M.endSec,u.endSec)-Math.max(M.startSec,u.startSec);_>b&&(b=_,h=x)}),h<0)continue;const I=e.parts[p].actions[h],y=e.parts[p].cuts.find(M=>M.startSec<=I.startSec&&I.startSec<M.endSec),w=n[I.id];return w===void 0?null:{lineNo:w,inCutSec:I.startSec-(y?.startSec??0)}}return null},r=(d,u,p,f=[])=>{if(!u)return;const h=t.lines[u.lineNo-1];lo(t,d,u.lineNo,h?.indent??0,h?ls(h):0,p,f)};for(const d of s)d.code!=="UNREALISTIC_SPEED"||!d.timeRange||r("BS_MOVE_TOO_FAST",i(d.targetId,d.timeRange),{distM:d.params?.distM??0,sec:d.params?.sec??0});const l=new Set;a.parts.forEach(d=>{for(const u of z0(d,fs(d),"")){const p=u.timeRange?i(u.targetId,u.timeRange):null;!p||l.has(p.lineNo)||(l.add(p.lineNo),r("BS_MOVE_TOO_SLOW",p,{distM:u.params?.distM??0,sec:u.params?.sec??0}))}}),a.parts.forEach(d=>{for(const u of D0(d,fs(d),a.room,{},"")){if(!u.timeRange)continue;const p=i(u.targetId,u.timeRange),f=a.room.openings.find(I=>I.id===u.params?.doorId)?.sourceId,h=t.props.find(I=>I.id===f)?.label;if(!p||!h)continue;const b=t.lines[p.lineNo-1]?.text.match(/^\s*/)?.[0]??"";r("BS_DOOR_CLOSED",p,{door:h},[{type:"replaceRange",lineNo:p.lineNo,from:0,to:0,text:`${b}- ${h} : ì´ë¦¼ (${lh(p.inCutSec)}ì´) 239`,labelKey:"tool.blockingBoard.boardScript.fix.insertDoorOpen"}])}});const c=new Set;a.parts.forEach(d=>{for(const u of R0(d,fs(d),a.room,{},"")){if(!u.timeRange||u.timeRange.endSec<=u.timeRange.startSec)continue;const p=i(u.targetId,u.timeRange);!p||c.has(p.lineNo)||(c.add(p.lineNo),r("BS_PATH_BLOCKED",p,{}))}})}function UR(e){const t=[];for(const n of e)n.kind==="sceneHead"||n.kind==="cutHead"||n.kind==="partHead"?t.push({lineNo:n.lineNo,from:n.indent,to:ls(n),kind:n.kind}):n.kind==="label"&&t.push({lineNo:n.lineNo,from:n.labelFrom,to:n.labelTo,kind:"label"});return t}function Kg(e,t){const n=[];for(const o of e){if(o.reason==="secondScene")continue;const a=t[o.lineNo-1],s=o.reason==="labelOutsideCut"?[{type:"insertCutHeadAbove",lineNo:o.lineNo,labelKey:"tool.blockingBoard.boardScript.fix.insertCutHead"}]:[];n.push({lineNo:o.lineNo,from:a?.indent??0,to:a?ls(a):0,lineText:a?.text??"",severity:"warning",messageKey:`tool.blockingBoard.boardScript.unread.${o.reason}`,fixes:s})}return n}const GR=(e,t)=>e.lineNo-t.lineNo;function VR(e,t){const n=xr(e).map(Bu),o=ec(n),a=UR(n),s=[];n.some(j=>j.kind==="sceneHead")||s.push("scene"),n.some(j=>j.kind==="cutHead")||s.push("cut");const i=s.length===0&&o.sceneHead!==null&&o.cuts.length>0,r={missingHeads:s,lineSections:o.lineSections,lineCutIndex:o.lineCutIndex};if(!i)return{...r,isStandard:!1,draft:null,issues:[],unread:o.unread,missing:[],hints:[],marks:a,diagnostics:Kg(o.unread,n),annotations:[],cuts:[],summary:{cutCount:0,characterCount:0,dialogueCount:0,totalSec:0,parts:[]},provenance:{},sourceMap:{}};const l=ah(n);if(o.secondSceneLineNo!==null){const j=n[o.secondSceneLineNo-1];lo(l,"BS_SECOND_SCENE",j.lineNo,j.indent,ls(j))}const c=rh(o.sceneHead);ZS(o.sceneSections.cast??[],l);const d=o.sceneSections.props??[],u=d.find(j=>n[j.lineNo-1]?.kind==="label"&&Tg(j.text)!==null),p=u?Tg(u.text):null;u&&l.marks.push({lineNo:u.lineNo,from:u.col,to:u.col+u.text.length,kind:"time"}),bR(d.filter(j=>j!==u),l);const f=TT(o.sceneSections.position??[],l),h=[],b=o.cuts.map(j=>{const ee=br(j.head,j.sections.duration);ee.durationFrom!==null&&ee.durationTo!==null&&l.marks.push({lineNo:j.head.lineNo,from:ee.durationFrom,to:ee.durationTo,kind:"time"});const D=yR(j.sections.subject??[],l),Z=VT(j.sections.blocking??[],l),L=qS(j.sections.camera??[],l),V=dR(j.sections.dialogue??[],l);h.push(...V.unread);const pe=gR(j.sections.scene??[]).map(fe=>{const X=vR(l.index,fe);return X&&l.marks.push({lineNo:fe.lineNo,from:X.from,to:X.to,kind:"name"}),{...fe,characterId:X?.characterId??null}}),le=ee.durationSec!==null&&ee.durationSec>0;let me=le?ee.durationSec:DT(V.items.map(fe=>fe.line),pe.length);const oe=OT(V.items,me,le);return me=oe.cutDurationSec,oe.overflow&&lo(l,"BS_DIALOGUE_OVERFLOW",j.head.lineNo,j.head.indent,ls(j.head)),{node:j,label:ee.label,durationSec:me,durationSource:le?"written":"estimated",subjects:D,moves:Z,camera:L,dialogues:V.items.map((fe,X)=>({...fe,...oe.placed[X]})),sentences:pe}}),I=kR(b.map(j=>j.durationSec),o.partBreaks.map(j=>j.beforeCutIndex),t.targetPartDurationSec);for(const j of b){const ee=j.node.head;j.durationSec>dn.partDurationMaxSec?lo(l,"BS_CUT_TOO_LONG",ee.lineNo,ee.indent,ls(ee)):j.durationSec>t.targetPartDurationSec&&lo(l,"BS_CUT_LONGER_THAN_PART",ee.lineNo,ee.indent,ls(ee))}const y=dn.maxCharacters;for(const j of l.characters.slice(y))lo(l,"BS_CAST_LIMIT",j.lineNo,j.nameFrom,j.nameTo,{max:y});const w=dn.maxPartsCeiling,M=I[w];if(M){const j=b[M[0]].node.head;lo(l,"BS_PART_LIMIT",j.lineNo,j.indent,ls(j),{max:w})}const x=zT(o,b.map(j=>j.label)),_=jT(b.flatMap(j=>j.sentences)),O=FT({heading:c,state:l,tree:o,cuts:b,groups:I,missing:x,hints:_,positions:f,roomSize:p}),A=IT({...O.draft,parts:O.draft.parts.map(j=>({...j,propEvents:j.propEvents.map(({open:ee,...D})=>({...D,state:ee?"open":"closed"}))}))},{maxParts:w}),N=l.issues.some(j=>j.severity==="error"),K=N?[]:A.issues.filter(j=>!(j.code==="SCHEMA_INVALID"&&j.path==="characters")),F=N||K.some(j=>j.severity==="error");
239O.draft&&!F&&(zR(O.draft,l),jR(O.draft,l,O.sourceMap));const B=[...o.unread,...h].sort(GR);return{...r,isStandard:!0,draft:F?null:O.draft,issues:[...l.issues,...K],unread:B,missing:x,hints:_,marks:[...a,...l.marks].sort((j,ee)=>j.lineNo-ee.lineNo||j.from-ee.from),diagnostics:[...l.diagnostics,...Kg(B,n)],annotations:O.annotations,cuts:O.cuts,summary:O.summary,provenance:O.provenance,sourceMap:O.sourceMap}}const Sp="bb.boardScript.draft.v1",WR=10080*60*1e3;function Fg(e){const t=()=>{try{e?.removeItem(Sp)}catch{}};return{load(n=Date.now()){try{const o=e?.getItem(Sp);if(o==null)return null;const s=JSON.parse(o);return!s||typeof s.text!="string"||typeof s.savedAt!="number"||n-s.savedAt>WR?(t(),null):{text:s.text,savedAt:s.savedAt}}catch{return t(),null}},save(n,o=Date.now()){if(n.trim()==="")return t();try{e?.setItem(Sp,JSON.stringify({text:n,savedAt:o}))}catch{}},clear:t}}function XR(){try{return Fg(typeof localStorage>"u"?void 0:localStorage)}catch{return Fg(void 0)}}function lI(e={}){const t=e.storage??XR(),n=e.debounceMs??300,o=e.saveDebounceMs??1e3,a=e.now??Date.now,s=G(""),i=G({targetPartDurationSec:15}),r=Sn(null),l=G(""),c=G("edit"),d=Sn(null),u=G(null);let p=!1;function f(){const N=e.maxPartDurationSec?.()??null;return N===null?i.value:{...i.value,targetPartDurationSec:Math.min(i.value.targetPartDurationSec,N)}}function h(){l.value=s.value,r.value=s.value.trim()?VR(s.value,f()):null}function b(){c.value="edit",d.value=null}function I(){h();const N=r.value;return!N?.isStandard||!N.draft?!1:(d.value=N,c.value="result",!0)}function y(N,K){const F=d.value?.cuts[N];if(!F)return;const B=aI(s.value,F.lineNo,K);p=!0,s.value=tI(s.value,B.changes),p=!1,h(),r.value?.draft?d.value=r.value:b()}Je(s,()=>{c.value==="result"&&!p&&b()},{flush:"sync"});let w=null,M=null;Je(s,()=>{w&&clearTimeout(w),w=setTimeout(h,n),M&&clearTimeout(M),M=setTimeout(()=>t.save(s.value,a()),o)}),Kk()&&Fk(()=>{w&&clearTimeout(w),M&&clearTimeout(M)}),Je(i,()=>{h(),c.value==="result"&&(r.value?.draft?d.value=r.value:b())},{deep:!0});const x=t.load(a());x&&s.value===""&&(u.value=x);function _(){u.value&&(s.value=u.value.text,u.value=null,h())}function O(){t.clear(),u.value=null}function A(){w&&clearTimeout(w),M&&clearTimeout(M),s.value="",r.value=null,l.value="",b(),u.value=null,t.clear()}return{script:s,options:i,analysis:r,analyzedText:l,state:c,result:d,restorable:u,analyzeNow:h,convert:I,backToEdit:b,setCutDurationFromResult:y,restore:_,discardRestore:O,reset:A,clearSaved:()=>t.clear()}}const YR="/api/v2/work/blocking-board/script-to-scene";function Hg(){return{code:"PROVIDER_FAILED",messageKey:KS("PROVIDER_FAILED")}}function qR(){const e=G(""),t=G({...Tf}),n=G(LS),o=G("empty"),a=G(null),s=G([]),i=G(null),r=G(null);let l=null;async function c(){o.value="converting",i.value=null;const h=new AbortController;l=h;let b;try{b=await $fetch(YR,{method:"POST",body:{script:e.value,options:t.value,model:n.value},signal:h.signal})}catch{if(l!==h)return;i.value=Hg(),s.value=[],o.value="error";return}if(l===h){if("draft"in b){a.value=b.draft,s.value=b.issues,r.value=b.meta,i.value=null,o.value="result";return}if("failure"in b){i.value=b.failure,s.value=b.issues,r.value=b.meta,o.value="error";return}i.value=Hg(),s.value=[],o.value="error"}}function d(){o.value==="converting"&&(l?.abort(),l=null,o.value="empty")}async function u(){await c()}function p(){o.value="empty",a.value=null,s.value=[],i.value=null,r.value=null}function f(){o.value!=="converting"&&(p(),e.value="")}return Je(e,()=>{o.value==="result"&&(o.value="empty",a.value=null,s.value=[],r.value=null)},{flush:"sync"}),{script:e,options:t,model:n,state:o,draft:a,issues:s,failure:i,meta:r,convert:c,cancel:d,retry:u,reconvert:p,reset:f}}const ZR=1024*1024;function cI(e){return/\.(txt|md)$/i.test(e.name)||e.type==="text/plain"||e.type==="text/markdown"}async function dI(e){if(!cI(e))return{ok:!1,reason:"unsupported"};if(e.size>ZR)return{ok:!1,reason:"tooLarge"};try{return{ok:!0,text:await e.text()}}catch{return{ok:!1,reason:"unreadable"}}}const JR={role:"tablist",class:"bb-part-strip"},QR=["aria-selected","onClick"],eD={class:"bb-part-strip-title"},tD={class:"bb-part-strip-meta"},nD=nt({__name:"BbPartStrip",props:{parts:{},activePartId:{}},emits:["select"],setup(e,{emit:t}){const n=t;return(o,a)=>(v(),k("div",JR,[(v(!0),k(ae,null,Me(e.parts,s=>(v(),k("button",{key:s.id,type:"button",role:"tab",class:qe(["bb-part-strip-item",{active:s.id===e.activePartId}]),"aria-selected":s.id===e.activePartId?"true":"false",onClick:i=>n("select",s.id)},[m("span",eD,S(s.title),1),m("span",tD," · "+S(o.$t("tool.blockingBoard.partDuration",{seconds:s.durationSec}))+" · "+S(o.$t("tool.blockingBoard.partCutCount",{count:s.cuts.length})),1)],10,QR))),128))]))}}),uI=Object.assign(ot(nD,[["__scopeId","data-v-564fb95d"]]),{__name:"BbPartStrip"}),qr="tool.blockingBoard.boardScript.cursor";function oD(e){return[e.shotType,e.lensMm!==void 0?`${e.lensMm}mm`:void 0,e.angle,e.moveType,...e.composition].filter(t=>t!==void 0&&t!=="").join(" · ")}function aD(e,t){const n={key:`${qr}.none`,params:{}},o=e?.lineSections[t];if(!e||o===void 0)return n;if(o==="cutHead"){const a=e.cuts.find(s=>s.lineNo===t);if(a)return{key:`${qr}.cutHead`,params:{label:a.label,sec:a.durationSec,source:a.durationSource,part:a.partIndex+1}}}if(o==="camera"){const a=e.cuts[e.lineCutIndex[t]??-1],s=a?oD(a.camera):"";if(s!=="")return{key:`${qr}.camera`,params:{values:s}}}if(o==="dialogue"){const a=e.annotations.find(s=>s.kind==="dialogue"&&s.lineNo===t);if(a&&a.kind==="dialogue")return{key:`${qr}.dialogue`,params:{start:a.startInCut,end:a.endInCut}}}return{key:`${qr}.section`,params:{section:o}}}const sD=["value","disabled","aria-label","aria-describedby"],iD=nt({__name:"BbBoardScriptEditorFallback",props:{modelValue:{},disabled:{type:Boolean},describedBy:{}},emits:["update:modelValue","cursor-line"],setup(e,{expose:t,emit:n}){const o=e,a=n,s=G(null);function i(){const c=s.value;c&&a("cursor-line",c.value.slice(0,c.selectionStart).split(` 240`).length)}function r(c){a("update:modelValue",c.target.value),i()}function l(c){hn(()=>{s.value?.setSelectionRange(c,c),i()})}return t({replaceAll(c){a("update:modelValue",c)},applyEdit(c){const d=Array.isArray(c)?c:c.changes;a("update:modelValue",tI(o.modelValue,d)),Array.isArray(c)||l(c.cursor)},revealLine(c){const d=s.value;if(!d)return;const u=d.value.split(` 241`),p=Math.min(Math.max(c,1),u.length),f=u.slice(0,p-1).reduce((h,b)=>h+b.length+1,0);d.focus(),d.setSelectionRange(f,f+u[p-1].length),i()},insertAtCursor(c){const d=s.value,u=d?.selectionStart??o.modelValue.length,p=d?.selectionEnd??u;a("update:modelValue",o.modelValue.slice(0,u)+c+o.modelValue.slice(p)),l(u+c.length),d?.focus()},focus(){s.value?.focus()}}),(c,d)=>(v(),k("textarea",{id:"bb-board-script-textarea",ref_key:"el",ref:s,class:"bb-bs-fallback",value:e.modelValue,disabled:e.disabled,"aria-label":c.$t("tool.blockingBoard.boardScript.editor.label"),"aria-describedby":e.describedBy,spellcheck:"false",onInput:r,onKeyup:i,onClick:i,onSelect:i},null,40,sD))}}),rD=Object.assign(ot(iD,[["__scopeId","data-v-6026d9ad"]]),{__name:"BbBoardScriptEditorFallback"}),lD={key:0,class:"bb-bs-editor-notice",role:"status"},cD={key:0,class:"bb-bs-editor-placeholder"},dD=["aria-label","onKeydown"],uD={key:0,class:"bb-bs-cursor-format","data-bs":"cursor-format"},Cc="tool.blockingBoard.boardScript.",pD=nt({__name:"BbBoardScriptEditor",props:{modelValue:{},analysis:{},analyzedText:{},disabled:{type:Boolean},forceFallback:{type:Boolean}},emits:["update:modelValue","cursor-line"],setup(e,{expose:t,emit:n}){const o=e,a=n,s=Hk(),i=(ee,D)=>s.proxy.$t(ee,D),r=`bb-bs-cursor-${j$()}`,l=G(!!o.forceFallback||!1),c=G(!1),d=G(!1),u=G(null),p=G(null),f=G(null),h=G(1);let b=null,I=o.modelValue,y=!1;const w=()=>b?I:o.modelValue;function M(ee){h.value=ee,a("cursor-line",ee)}function x(ee){I=ee,a("update:modelValue",ee)}const _=G(null),O=G(null);function A(ee){b?b.applyEdit(ee):f.value?.applyEdit(ee)}function N(ee){const D=w();if(ee.action==="addSection"&&ee.key){A(wR(D,ee.lineNo,ee.key));return}if(ee.action==="splitPart"){A($R(D,ee.lineNo,ER(D)));return}if(ee.action!=="editDuration"&&ee.action!=="editDialogueTime")return;const Z=ee.annotation,L=p.value?.getBoundingClientRect();_.value={kind:ee.action,lineNo:ee.lineNo,nameTo:Z.kind==="dialogue"?Z.nameTo:0,value:String(Z.kind==="cutHead"?Z.durationSec:Z.kind==="dialogue"?Z.startInCut:""),left:ee.rect.left-(L?.left??0),top:ee.rect.bottom-(L?.top??0)+4},hn(()=>{O.value?.focus(),O.value?.select()})}function K(){const ee=_.value;if(!ee)return;_.value=null;const D=Number(ee.value);if(!Number.isFinite(D)||D<.5||D>60)return;const Z=w();A(ee.kind==="editDuration"?aI(Z,ee.lineNo,D):MR(Z,ee.lineNo,ee.nameTo,D))}function F(ee){ee.stopPropagation(),ee.preventDefault(),_.value=null}Jn(async()=>
241{if(!l.value)try{const ee=await xi(()=>import("./S8NYqUhz.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]),import.meta.url);if(y||!u.value)return;b=ee.createBoardScriptEditor(u.value,{doc:o.modelValue,onChange:x,onCursorLine:M,onAnnot:N,getResult:()=>({analysis:o.analysis,lines:o.analyzedText.split(` 242`)}),t:i,describedBy:r,editable:!o.disabled}),d.value=!0,b.refresh()}catch{b=null,c.value=!0,l.value=!0}}),wn(()=>{y=!0,b?.destroy(),b=null}),Je(()=>o.modelValue,ee=>{b&&ee!==I&&(I=ee,b.replaceAll(ee))}),Je(()=>[o.analysis,o.analyzedText],()=>b?.refresh()),Je(()=>o.disabled,ee=>b?.setEditable(!ee));const B=C(()=>{const ee=FR(o.modelValue,h.value);return ee?i(`${Cc}format.${ee}`):""}),j=C(()=>{if((o.modelValue.split(` 243`)[h.value-1]??"").trim()===""){const L=_R(o.modelValue,h.value);return L&&L.insert!==""?i(`${Cc}cursor.tab`,{text:L.insert.trim()}):""}const D=aD(o.analysis,h.value);if(B.value!==""&&(D.key.endsWith(".section")||D.key.endsWith(".none")))return"";const Z={...D.params};return typeof Z.section=="string"&&(Z.section=i(`${Cc}section.${Z.section}`)),typeof Z.source=="string"&&(Z.source=i(`${Cc}cursor.source.${Z.source}`)),i(D.key,Z)});return t({replaceAll(ee){b?(I=ee,b.replaceAll(ee)):f.value?.replaceAll(ee)},applyEdit:A,revealLine(ee){b?b.revealLine(ee):f.value?.revealLine(ee)},insertAtCursor(ee){b?b.insertAtCursor(ee):f.value?.insertAtCursor(ee)},focus(){b?b.focus():f.value?.focus()}}),(ee,D)=>(v(),k("div",{ref_key:"wrapEl",ref:p,class:"bb-bs-editor"},[c.value?(v(),k("p",lD,S(ee.$t("tool.blockingBoard.boardScript.editor.loadFailed")),1)):H("",!0),l.value?(v(),et(rD,{key:1,ref_key:"fallbackRef",ref:f,"model-value":e.modelValue,disabled:e.disabled,"described-by":r,"onUpdate:modelValue":D[0]||(D[0]=Z=>a("update:modelValue",Z)),onCursorLine:M},null,8,["model-value","disabled"])):(v(),k("div",{key:2,ref_key:"hostEl",ref:u,class:"bb-bs-editor-host"},[d.value?H("",!0):(v(),k("div",cD))],512)),_.value?Zt((v(),k("input",{key:3,ref_key:"annotInputEl",ref:O,"onUpdate:modelValue":D[1]||(D[1]=Z=>_.value.value=Z),type:"number",step:"0.5",min:"0.5",max:"60",class:"bb-bs-annot-input",style:wt({left:`${_.value.left}px`,top:`${_.value.top}px`}),"aria-label":ee.$t("tool.blockingBoard.boardScript.annot.durationInput"),onKeydown:[fi(un(K,["prevent"]),["enter"]),fi(F,["esc"])],onBlur:K},null,44,dD)),[[Nn,_.value.value]]):H("",!0),m("p",{id:r,class:"bb-bs-cursor-line","aria-live":"off"},[B.value?(v(),k("span",uD,S(B.value),1)):H("",!0),m("span",null,S(j.value),1)])],512))}}),fD=Object.assign(ot(pD,[["__scopeId","data-v-e9508e16"]]),{__name:"BbBoardScriptEditor"}),mD=["aria-label"],hD={class:"bb-bs-guide-head"},bD={role:"tablist",class:"bb-bs-guide-tabs"},gD=["aria-selected","onClick"],vD={key:0,class:"bb-bs-guide-body"},yD={class:"bb-bs-guide-chips"},kD=["onClick"],SD={key:1,class:"bb-bs-guide-body"},ID={class:"bb-bs-guide-chips"},wD=["onClick"],MD={key:2,class:"bb-bs-guide-body"},$D=["placeholder","aria-label"],ED={class:"bb-bs-guide-chips"},xD=["onClick"],PD={class:"bb-bs-guide-chips","data-bs":"guide-props"},CD=["onClick"],BD={key:3,class:"bb-bs-guide-body"},to="tool.blockingBoard.boardScript.",_D=nt({__name:"BbBoardScriptGuide",props:{open:{type:Boolean}},emits:["close","insert"],setup(e,{emit:t}){const n=e,o=t,a=[{key:"camera",labelKey:`${to}guide.tabCamera`},{key:"blocking",labelKey:`${to}guide.tabBlocking`},{key:"places",labelKey:`${to}guide.tabPlaces`},{key:"writing",labelKey:`${to}guide.tabWriting`}],s=["shot","angle","move","composition"],i=["visible","present","nameFirst","oneAction"],r=G("camera"),l=[{key:"relation",words:lS.map(M=>M.words[0])},{key:"pose",words:cS.map(M=>M.words[0])},{key:"move",words:Pl.filter(M=>M.kind!=="door").map(M=>M.words[0])},{key:"door",words:Pl.filter(M=>M.kind==="door").map(M=>M.words[1])}],c=G(""),d=G(null),u=G(null),p=C(()=>s.map(M=>({kind:M,words:rS.filter(x=>x.kind===M).map(x=>x.words[0])}))),f=typeof mo=="function"?mo().locale:null,h=M=>Kn(M,f?.value??"ko"),b=M=>M.toLowerCase().includes(c.value.trim().toLowerCase()),I=C(()=>Ti.map(M=>h(M.labels)).filter(b)),y=C(()=>[...new Set(aa.map(M=>h(M.labels)))].filter(b));function w(M){M.stopPropagation(),M.preventDefault(),o("close")}return Je(()=>n.open,M=>{M&&hn(()=>u.value?.focus())},{immediate:!0,flush:"post"}),(M,x)=>e.open?(v(),k("aside",{key:0,ref_key:"rootEl",ref:d,class:"bb-bs-guide",role:"dialog","aria-label":M.$t(`${to}guide.title`),onKeydown:fi(w,["esc"])}
243,[m("header",hD,[m("h3",null,S(M.$t(`${to}guide.title`)),1),m("button",{ref_key:"closeEl",ref:u,type:"button",class:"bb-bs-guide-close",onClick:x[0]||(x[0]=_=>o("close"))},S(M.$t(`${to}guide.close`)),513)]),m("div",bD,[(v(),k(ae,null,Me(a,_=>m("button",{key:_.key,type:"button",role:"tab","aria-selected":r.value===_.key,onClick:O=>r.value=_.key},S(M.$t(_.labelKey)),9,gD)),64))]),r.value==="camera"?(v(),k("div",vD,[(v(!0),k(ae,null,Me(p.value,_=>(v(),k("section",{key:_.kind},[m("h4",null,S(M.$t(`${to}guide.cameraKind.${_.kind}`)),1),m("div",yD,[(v(!0),k(ae,null,Me(_.words,O=>(v(),k("button",{key:O,type:"button",class:"bb-bs-guide-btn","data-bs":"guide-insert",onClick:A=>o("insert",O)},S(O),9,kD))),128))])]))),128))])):r.value==="blocking"?(v(),k("div",SD,[m("p",null,S(M.$t(`${to}guide.blockingHelp`)),1),(v(),k(ae,null,Me(l,_=>m("section",{key:_.key},[m("h4",null,S(M.$t(`${to}guide.blockingKind.${_.key}`)),1),m("div",ID,[(v(!0),k(ae,null,Me(_.words,O=>(v(),k("button",{key:O,type:"button",class:"bb-bs-guide-btn","data-bs":"guide-insert",onClick:A=>o("insert",O)},S(O),9,wD))),128))])])),64))])):r.value==="places"?(v(),k("div",MD,[Zt(m("input",{"onUpdate:modelValue":x[1]||(x[1]=_=>c.value=_),type:"search","data-bs":"guide-search",class:"bb-bs-guide-search",placeholder:M.$t(`${to}guide.search`),"aria-label":M.$t(`${to}guide.search`)},null,8,$D),[[Nn,c.value]]),m("section",null,[m("h4",null,S(M.$t(`${to}guide.rooms`)),1),m("div",ED,[(v(!0),k(ae,null,Me(I.value,_=>(v(),k("button",{key:_,type:"button",class:"bb-bs-guide-btn","data-bs":"guide-insert",onClick:O=>o("insert",_)},S(_),9,xD))),128))])]),m("section",null,[m("h4",null,S(M.$t(`${to}guide.props`)),1),m("div",PD,[(v(!0),k(ae,null,Me(y.value,_=>(v(),k("button",{key:_,type:"button",class:"bb-bs-guide-btn",onClick:O=>o("insert",_)},S(_),9,CD))),128))])])])):(v(),k("div",BD,[(v(),k(ae,null,Me(i,_=>m("section",{key:_},[m("h4",null,S(M.$t(`${to}guide.rule.${_}`)),1),m("p",null,[m("strong",null,S(M.$t(`${to}guide.good`)),1),We(" "+S(M.$t(`${to}guide.example.${_}.good`)),1)]),m("p",null,[m("strong",null,S(M.$t(`${to}guide.avoid`)),1),We(" "+S(M.$t(`${to}guide.example.${_}.avoid`)),1)])])),64))]))],40,mD)):H("",!0)}}),AD=Object.assign(ot(_D,[["__scopeId","data-v-5b8e9513"]]),{__name:"BbBoardScriptGuide"}),TD=["open"],RD={class:"bb-bs-problems-where"},DD={class:"bb-bs-problems-text"},OD=["onClick"],Ip="tool.blockingBoard.boardScript.",zg=30,ND=nt({__name:"BbBoardScriptProblems",props:{diagnostics:{},revealable:{type:Boolean}},emits:["reveal"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.diagnostics.filter(r=>r.severity==="warning"||r.severity==="error").sort((r,l)=>r.lineNo-l.lineNo||r.from-l.from)),s=C(()=>a.value.some(r=>r.severity==="error")),i=r=>{const l=r.trim();return l.length>zg?`${l.slice(0,zg)}â¦`:l};return(r,l)=>a.value.length>0?(v(),k("details",{key:0,class:"bb-bs-problems",open:s.value},[m("summary",null,S(r.$t(`${Ip}check.problems`,{count:a.value.length})),1),m("ul",null,[(v(!0),k(ae,null,Me(a.value,(c,d)=>(v(),k("li",{key:d,"data-bs":"problem",class:qe({"bb-bs-problems-error":c.severity==="error"})},[m("span",RD,[We(S(r.$t(`${Ip}check.line`,{n:c.lineNo}))+" ",1),m("span",DD,S(i(c.lineText)),1)]),m("span",null,S(r.$t(c.messageKey,c.params)),1),e.revealable?(v(),k("button",{key:0,type:"button",class:"bb-bs-problems-link",onClick:u=>o("reveal",c.lineNo)},S(r.$t(`${Ip}check.view`)),9,OD)):H("",!0)],2))),128))])],8,TD)):H("",!0)}}),pI=Object.assign(ot(ND,[["__scopeId","data-v-18dd3bf3"]]),{__name:"BbBoardScriptProblems"}),LD={key:0,class:"bb-bs-result"},KD={class:"bb-bs-result-head"},FD={class:"bb-bs-result-summary"},HD={role:"tablist",class:"bb-bs-result-tabs"},zD=["aria-selected","onClick"],jD={key:0,class:"bb-bs-result-table"},UD={"data-bs":"cut-row"},GD=["value","onChange"],VD={key:0,class:"bb-bs-result-source"},WD={key:0,class:"bb-bs-result-source"},XD={"data-col":"lens"},YD=["aria-expanded","aria-label","title","onClick"],qD={key:0,class:"bb-bs-result-extra"},ZD={colspan:"8"},JD={key:1,class:"bb-bs-result-table"},QD={key:2,class:"bb-bs-result-table"},eO={key:0,"data-bs":"action-type"},tO={key:1},nO={class:"bb-bs-result-source"},Cn="tool.blockingBoard.boardScript.",oO=nt({__name:"BbBoardScriptResult",props:{result:{},activePartId:{}},emits:["update:activePartId","set-cut-duration","back"],setup(e,{emit:t}){const n=e,o=t,a=[{key:"cuts",labelKey:`${Cn}result.tabCuts`},{key:"dialogues",labelKey:`${Cn}result.tabDialogues`},{key:"actions",labelKey:`${Cn}result.tabActions`}],s=G("cuts"),i=G(new Set),r=C(()=>n.result.draft),l=C(()=>r.value?.parts.find(y=>y.id===n.activePartId)??r.value?.parts[0]),c=C(()=>{const y=r.value?.parts??[];let w=0;const M=[];
243for(const x of y)x.id===l.value?.id&&x.cuts.forEach((_,O)=>M.push({cut:_,index:w+O})),w+=x.cuts.length;return M}),d=y=>y.replace(/-([a-z])/g,(w,M)=>M.toUpperCase()),u=C(()=>{const y=l.value;if(!y)return[];const w=[...y.actions.map(x=>({id:x.id,startSec:x.startSec,endSec:x.endSec,who:p(x.characterId),typeKey:x.actionType==="act"?null:x.actionType,text:x.text.ko??"",target:x.targetPropId??x.targetCharacterId??null})),...y.propEvents.map(x=>({id:x.id,startSec:x.startSec,endSec:x.endSec,who:p(x.targetPropId),typeKey:x.open?"open-door":"close-door",text:"",target:null}))],M=x=>x.typeKey?.endsWith("-door")?0:1;return w.sort((x,_)=>x.startSec-_.startSec||M(x)-M(_))}),p=y=>r.value?.characters.find(w=>w.id===y)?.name??r.value?.props.find(w=>w.id===y)?.label??y,f=y=>n.result.provenance[`${y}.durationSec`]==="estimated",h=y=>n.result.provenance[`${y}.shotType`]==="default";function b(y,w){const M=Number(y.target.value);!Number.isFinite(M)||M<.5||M>60||o("set-cut-duration",w,M)}function I(y){const w=new Set(i.value);w.has(y)?w.delete(y):w.add(y),i.value=w}return(y,w)=>{const M=vn;return r.value?(v(),k("div",LD,[m("header",KD,[m("h3",null,S(r.value.title),1),m("button",{type:"button",class:"bb-bs-result-back",onClick:w[0]||(w[0]=x=>o("back"))},S(y.$t(`${Cn}result.back`)),1),m("p",FD,S(y.$t(`${Cn}result.summary`,{place:r.value.location.label||r.value.title,characters:r.value.characters.length,parts:r.value.parts.length,seconds:e.result.summary.totalSec})),1)]),m("div",HD,[(v(),k(ae,null,Me(a,x=>m("button",{key:x.key,type:"button",role:"tab","aria-selected":s.value===x.key,onClick:_=>s.value=x.key},S(y.$t(x.labelKey)),9,zD)),64))]),s.value==="cuts"?(v(),k("table",jD,[m("thead",null,[m("tr",null,[m("th",null,S(y.$t(`${Cn}result.colLabel`)),1),m("th",null,S(y.$t(`${Cn}result.colDuration`)),1),m("th",null,S(y.$t(`${Cn}result.colShot`)),1),m("th",null,S(y.$t(`${Cn}result.colLens`)),1),m("th",null,S(y.$t(`${Cn}result.colAngle`)),1),m("th",null,S(y.$t(`${Cn}result.colMove`)),1),m("th",null,S(y.$t(`${Cn}result.colSubject`)),1),w[1]||(w[1]=m("th",null,null,-1))])]),m("tbody",null,[(v(!0),k(ae,null,Me(c.value,x=>(v(),k(ae,{key:x.cut.id},[m("tr",UD,[m("td",null,S(x.cut.label??x.cut.id),1),m("td",null,[m("input",{type:"number","data-bs":"cut-duration",class:"bb-bs-result-input",step:"0.5",min:"0.5",max:"60",value:x.cut.endSec-x.cut.startSec,onChange:_=>b(_,x.index)},null,40,GD),f(x.cut.id)?(v(),k("span",VD,S(y.$t(`${Cn}result.provenanceEstimated`)),1)):H("",!0)]),m("td",null,[We(S(y.$t(`tool.blockingBoard.shotType.${d(x.cut.shotType)}`))+" ",1),h(x.cut.id)?(v(),k("span",WD,S(y.$t(`${Cn}result.provenanceDefault`)),1)):H("",!0)]),m("td",XD,S(x.cut.lensMm!==void 0?`${x.cut.lensMm}mm`:"â"),1),m("td",null,S(x.cut.angle?y.$t(`${Cn}angle.${x.cut.angle}`):"â"),1),m("td",null,S(x.cut.moveType?y.$t(`tool.blockingBoard.move.${d(x.cut.moveType)}`):"â"),1),m("td",null,S(x.cut.subjectIds.map(p).join(", ")),1),m("td",null,[m("button",{type:"button",class:"bb-bs-result-expand","aria-expanded":i.value.has(x.cut.id),"aria-label":y.$t(`${Cn}result.expand`),title:y.$t(`${Cn}result.expand`),onClick:_=>I(x.cut.id)},[ce(M,{name:"i-lucide-chevron-down",class:qe(["bb-bs-result-expand-icon",{"bb-bs-result-expand-icon--open":i.value.has(x.cut.id)}])},null,8,["class"])],8,YD)])]),i.value.has(x.cut.id)?(v(),k("tr",qD,[m("td",ZD,[m("dl",null,[(v(!0),k(ae,null,Me([["colComposition",x.cut.cameraNote],["colLighting",x.cut.lighting],["colSound",x.cut.sound],["colBeat",x.cut.beat],["colDescription",x.cut.description]],([_,O])=>(v(),k(ae,{key:_},[O?(v(),k(ae,{key:0},[m("dt",null,S(y.$t(`${Cn}result.${_}`)),1),m("dd",null,S(O),1)],64)):H("",!0)],64))),128))])])])):H("",!0)],64))),128))])])):s.value==="dialogues"?(v(),k("table",JD,[m("thead",null,[m("tr",null,[m("th",null,S(y.$t(`${Cn}result.colTime`)),1),m("th",null,S(y.$t(`${Cn}result.colSpeaker`)),1),m("th",null,S(y.$t(`${Cn}result.colDirection`)),1),m("th",null,S(y.$t(`${Cn}result.colLine`)),1)])]),m("tbody",null,[(v(!0),k(ae,null,Me(l.value?.dialogues??[],x=>(v(),k("tr",{key:x.id,"data-bs":"dialogue-row"},[m("td",null,S(x.startSec)+"â"+S(x.endSec),1),m("td",null,S(p(x.characterId)),1),m("td",null,S(x.direction??""),1),m("td",null,S(x.line),1)]))),128))])])):(v(),k("table",QD,[m("thead",null,[m("tr",null,[m("th",
243null,S(y.$t(`${Cn}result.colTime`)),1),m("th",null,S(y.$t(`${Cn}result.colActor`)),1),m("th",null,S(y.$t(`${Cn}result.colText`)),1),m("th",null,S(y.$t(`${Cn}result.colTarget`)),1)])]),m("tbody",null,[(v(!0),k(ae,null,Me(u.value,x=>(v(),k("tr",{key:x.id,"data-bs":"action-row"},[m("td",null,S(x.startSec)+"~"+S(x.endSec),1),m("td",null,S(x.who),1),x.typeKey?(v(),k("td",eO,S(y.$t(`${Cn}result.actionType.${x.typeKey}`)),1)):(v(),k("td",tO,[We(S(x.text)+" ",1),m("span",nO,S(y.$t(`${Cn}result.uninterpreted`)),1)])),m("td",null,S(x.target?p(x.target):""),1)]))),128))])]))])):H("",!0)}}}),aO=Object.assign(ot(oO,[["__scopeId","data-v-844413f7"]]),{__name:"BbBoardScriptResult"}),sO={class:"bb-bs-side"},iO={key:0,class:"bb-bs-side-field"},rO={class:"bb-bs-side-label"},lO=["value","disabled"],cO={key:1,class:"bb-bs-side-error","data-bs":"part-length-range",role:"status"},dO={key:2,class:"bb-bs-side-help","data-bs":"part-preview"},uO={key:3,class:"bb-bs-side-error","data-bs":"blocked",role:"status"},pO=["disabled"],fO={key:5,class:"bb-bs-side-section","data-bs":"not-standard"},mO={class:"bb-bs-side-section"},hO={"data-bs":"summary","aria-live":"polite"},bO={class:"bb-bs-side-cuts"},gO=["data-cut-index","onClick"],vO={class:"bb-bs-side-cut-head"},yO={class:"bb-bs-side-cut-sec"},kO={key:0,class:"bb-bs-side-cut-ok","data-bs":"cut-status"},SO={key:0,class:"bb-bs-side-cut-status","data-bs":"cut-status"},IO={key:0,class:"bb-bs-side-details"},wO={class:"bb-bs-side-help"},MO=["onClick"],$O={class:"bb-bs-side-help"},ro="tool.blockingBoard.boardScript.",jg=3,Ug=60,Gg=30,EO=nt({__name:"BbBoardScriptSidePanel",props:{options:{},analysis:{},disabled:{type:Boolean},embedded:{type:Boolean}},emits:["update:options","convert","reveal","send-to-ai"],setup(e,{emit:t}){const n=e,o=t,a=G(!1),s=G(String(n.options.targetPartDurationSec));Je(()=>n.options.targetPartDurationSec,h=>s.value=String(h));function i(h){const b=h.target.value;s.value=b;const I=Number(b);if(b.trim()===""||!Number.isFinite(I)||I<jg||I>Ug){a.value=!0;return}a.value=!1,o("update:options",{...n.options,targetPartDurationSec:I})}const r=C(()=>!!n.analysis?.isStandard),l=C(()=>r.value&&!n.analysis?.draft),c=C(()=>!n.disabled&&!!(n.analysis?.isStandard&&n.analysis.draft)),d=C(()=>(n.analysis?.summary.parts??[]).map(h=>h.durationSec)),u=C(()=>new Map((n.analysis?.missing??[]).map(h=>[h.cutIndex,h.fields]))),p=C(()=>(n.analysis?.cuts??[]).map(h=>({cut:h,missing:u.value.get(h.index)??[]}))),f=h=>{const b=h.trim();return b.length>Gg?`${b.slice(0,Gg)}â¦`:b};return(h,b)=>(v(),k("div",sO,[e.embedded?H("",!0):(v(),k("label",iO,[m("span",rO,S(h.$t(`${ro}panel.partLength`)),1),m("input",{type:"number","data-bs":"part-length",class:"bb-bs-side-input",min:"3",max:"60",step:"0.5",value:s.value,disabled:e.disabled,onInput:b[0]||(b[0]=I=>s.value=I.target.value),onChange:i},null,40,lO)])),a.value&&!e.embedded?(v(),k("p",cO,S(h.$t(`${ro}panel.partLengthRange`,{min:jg,max:Ug})),1)):H("",!0),r.value&&e.analysis?(v(),k("p",dO,S(h.$t(`${ro}panel.partPreview`,{cuts:e.analysis.summary.cutCount,parts:e.analysis.summary.parts.length,list:d.value.map(I=>h.$t(`${ro}panel.partSec`,{sec:I})).join(" · ")})),1)):H("",!0),l.value?(v(),k("p",uO,S(h.$t(`${ro}panel.blocked`)),1)):H("",!0),e.embedded?H("",!0):(v(),k("button",{key:4,type:"button",class:"bb-bs-side-convert","data-bs":"convert",disabled:!c.value,onClick:b[1]||(b[1]=I=>o("convert"))},S(h.$t("tool.blockingBoard.convert")),9,pO)),e.analysis&&!e.analysis.isStandard?(v(),k("section",fO,[m("strong",null,S(h.$t(`${ro}check.notStandard`)),1),(v(!0),k(ae,null,Me(e.analysis.missingHeads,I=>(v(),k("span",{key:I,class:"bb-bs-side-help"},S(h.$t(I==="scene"?`${ro}check.missingScene`:`${ro}check.missingCut`)),1))),128)),m("button",{type:"button",class:"bb-bs-side-btn","data-bs":"send-to-ai",onClick:b[2]||(b[2]=I=>o("send-to-ai"))},S(h.$t(`${ro}check.sendToAi`)),1)])):e.analysis&&r.value?(v(),k(ae,{key:6},[m("section",mO,[m("strong",hO,S(h.$t(`${ro}check.summary`,{cuts:e.analysis.summary.cutCount,characters:e.analysis.summary.characterCount,dialogues:e.analysis.summary.dialogueCount,seconds:e.analysis.summary.totalSec})),1),m("ul",bO,[(v(!0),k(ae,null,Me(p.value,I=>(v(),k("li",{key:I.cut.index},[m("button",{type:"button",class:"bb-bs-side-cut","data-bs":"cut-row","data-cut-index":I.cut.index,onClick:y=>o("reveal",I.cut.lineNo)},[m("span",vO,[m("strong",null,S(I.cut.label),1),m("span",yO,[We(S(h.$t(`${ro}panel.partSec`,{sec:I.cut.durationSec}))+" ",1),I.cut.durationSource==="estimated"?(v(),k(ae,{key:0},[We(" · "+S(h.$t(`${ro}result.provenanceEstimated`)),1)],64)):H("",!0)]),I.missing.length===0?(v(),k("span",kO,S(h.$t(`${ro}
243check.ok`)),1)):H("",!0)]),I.missing.length>0?(v(),k("span",SO,S(I.missing.map(y=>h.$t(`${ro}section.${y}`)).join("·"))+" "+S(h.$t(`${ro}check.missing`)),1)):H("",!0)],8,gO)]))),128))])]),ce(pI,{diagnostics:e.analysis.diagnostics,revealable:"",onReveal:b[3]||(b[3]=I=>o("reveal",I))},null,8,["diagnostics"]),e.analysis.hints.length>0?(v(),k("details",IO,[m("summary",null,S(h.$t(`${ro}check.hints`,{count:e.analysis.hints.length})),1),m("p",wO,S(h.$t(`${ro}check.hintExample`)),1),m("ul",null,[(v(!0),k(ae,null,Me(e.analysis.hints,(I,y)=>(v(),k("li",{key:y,"data-bs":"hint"},[m("button",{type:"button",class:"bb-bs-side-hint",onClick:w=>o("reveal",I.lineNo)},[We(S(h.$t(`${ro}check.line`,{n:I.lineNo}))+" · "+S(I.word)+" ",1),m("span",$O,S(f(I.sentence)),1)],8,MO)]))),128))])])):H("",!0)],64)):H("",!0)]))}}),xO=Object.assign(ot(EO,[["__scopeId","data-v-06a0dbfd"]]),{__name:"BbBoardScriptSidePanel"}),PO={class:"bb-bs-tab"},CO={class:"bb-bs-stage"},BO={class:"bb-bs-toolbar"},_O=["aria-expanded"],AO={key:0,class:"bb-bs-notice","data-bs":"restore"},TO={key:1,class:"bb-bs-notice bb-bs-notice--confirm",role:"alert"},RO={key:2,class:"bb-bs-file-notice",role:"status"},DO={class:"bb-bs-editor-col"},OO={class:"bb-bs-panel"},da="tool.blockingBoard.boardScript.",NO=nt({__name:"BbBoardScriptTab",props:{bs:{},disabled:{type:Boolean},embedded:{type:Boolean},forceFallbackEditor:{type:Boolean}},emits:["send-to-ai"],setup(e,{expose:t,emit:n}){const o=e,a=n,s=G(null),i=G(null),r=G(""),l=G(!1),c=G(null),d=G(null),u=C({get:()=>o.bs.script.value,set:_=>{o.bs.script.value=_}}),p=C(()=>o.bs.analysis.value),f=C(()=>o.bs.result.value),h=C(()=>o.bs.state.value==="result"&&f.value?.draft),b=C(()=>xR(o.bs.analyzedText.value));Je(()=>o.bs.result.value,_=>{r.value=_?.draft?.parts[0]?.id??""},{immediate:!0});function I(_){c.value=null,d.value=null,s.value?s.value.replaceAll(_):o.bs.script.value=_,o.bs.analyzeNow()}function y(_){o.bs.script.value.trim()===""?I(_):c.value=_}async function w(_){const O=_.target,A=O.files?.[0];if(O.value="",!A)return;const N=await dI(A);"text"in N?y(N.text):d.value=`${da}file.${N.reason}`}function M(){s.value?.applyEdit(sI(o.bs.script.value))}function x(){o.bs.convert()}return t({loadText(_){y(_)}}),(_,O)=>{const A=vn;return v(),k("div",PO,[m("div",{class:qe(["bb-bs-grid",{"bb-bs-grid--result":h.value}])},[m("div",CO,[h.value?f.value?(v(),et(aO,{key:1,result:f.value,"active-part-id":r.value,"onUpdate:activePartId":O[8]||(O[8]=N=>r.value=N),onSetCutDuration:e.bs.setCutDurationFromResult,onBack:O[9]||(O[9]=N=>e.bs.backToEdit())},null,8,["result","active-part-id","onSetCutDuration"])):H("",!0):(v(),k(ae,{key:0},[m("div",BO,[m("button",{type:"button",class:"bb-bs-btn",onClick:O[0]||(O[0]=N=>y(g(PR)))},S(_.$t(`${da}toolbar.insertExample`)),1),m("button",{type:"button",class:"bb-bs-btn",onClick:O[1]||(O[1]=N=>i.value?.click())},S(_.$t(`${da}toolbar.openFile`)),1),m("input",{ref_key:"fileInputRef",ref:i,type:"file",accept:".txt,.md,text/plain,text/markdown",class:"sr-only",onChange:w},null,544),b.value?(v(),k("button",{key:0,type:"button",class:"bb-bs-btn",onClick:M},S(_.$t(`${da}toolbar.renumber`)),1)):H("",!0),m("button",{type:"button",class:"bb-bs-btn bb-bs-btn--guide","aria-expanded":l.value,onClick:O[2]||(O[2]=N=>l.value=!l.value)},[ce(A,{name:"i-lucide-info",class:"size-[14px]"}),We(" "+S(_.$t(`${da}toolbar.guide`)),1)],8,_O)]),e.bs.restorable.value?(v(),k("div",AO,[m("span",null,S(_.$t(`${da}restore.message`,{date:new Date(e.bs.restorable.value.savedAt).toLocaleString()})),1),m("button",{type:"button",class:"bb-bs-btn",onClick:O[3]||(O[3]=N=>e.bs.restore())},S(_.$t(`${da}restore.continue`)),1),m("button",{type:"button",class:"bb-bs-btn",onClick:O[4]||(O[4]=N=>e.bs.discardRestore())},S(_.$t(`${da}restore.discard`)),1)])):H("",!0),c.value!==null?(v(),k("div",TO,[m("span",null,S(_.$t(`${da}toolbar.replaceConfirm`)),1),m("button",{type:"button",class:"bb-bs-btn",onClick:O[5]||(O[5]=N=>I(c.value))},S(_.$t(`${da}toolbar.replace`)),1),m("button",{type:"button",class:"bb-bs-btn",onClick:O[6]||(O[6]=N=>c.value=null)},S(_.$t(`${da}toolbar.cancel`)),1)])):H("",!0),d.value?(v(),k("p",RO,S(_.$t(d.value)),1)):H("",!0),m("div",DO,[ce(fD,{ref_key:"editorRef",ref:s,modelValue:u.value,"onUpdate:modelValue":O[7]||(O[7]=N=>u.value=N),analysis:p.value,"analyzed-text":e.bs.analyzedText.value,disabled:e.disabled,"force-fallback":e.forceFallbackEditor},null,8,["modelValue","analysis","analyzed-text","disabled","force-fallback"])])],64))]),m("div",OO,[h.value?f.value?(v(),et(pI,{key:1,diagnostics:f.value.diagnostics},null,8,["diagnostics"])):H("",!0):(v(),et(xO,{key:0,options:e.bs.options.value,analysis:p.value,disabled:e.disabled,embedded:e.embedded,"onUpdate:options":O[10]||(O[10]=N=>e.bs.options.value=N),onConvert:x,onReveal:O[11]||(O[11]=N=>s.value?.revealLine(N)),onSendToAi:O[12]||(O[12]=N=>a("send-to-ai",e.bs.script.value))},null,8,["options","analysis","disabled","embedded"]))]),h.value&&f.value?.draft?(v(),et(uI,{key:0,class:"bb-bs-strip",parts:f.value.draft.parts,"active-part-id":r.value,onSelect:O[13]||(O[13]=N=>r.value=N)},null,8,["parts","active-part-id"])):H("",!0)],2),ce(AD,{open:l.value,onClose:O[14]||(O[14]=N=>l.value=!1),onInsert:O[15]||(O[15]=N=>s.value?.insertAtCursor(N))},null,8,["open"])])}}}),fI=Object.assign(ot(NO,[["__scopeId","data-v-b63ee03f"]]),{__name:"BbBoardScriptTab"}),LO={class:"bb-script-stage flex flex-col"},KO={key:0,role:"alert",class:"bb-script-failure-banner"},FO={class:"bb-script-failure-msg"},HO={for:"bb-script-textarea",class:"bb-script-label"},zO=["value","disabled","placeholder"],jO={class:"bb-script-footer flex items-center justify-between"},UO={class:"bb-script-footer-left flex items-center gap-8"},GO={class:"bb-script-char-count"},VO={key:0,class:"bb-script-warning"},WO={key:1,class:"bb-script-warning"},XO=["disabled"],YO=nt({__name:"BbScriptStage",props:{script:{},disabled:{type:Boolean},failure:{},minChars:{},maxChars:{}},emits:["update:script","fill-sample","retry"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.script.length),s=C(()=>
243n.minChars??dn.scriptMinChars),i=C(()=>n.maxChars??dn.scriptMaxChars),r=C(()=>a.value>0&&a.value<s.value),l=C(()=>a.value>i.value);function c(d){o("update:script",d.target.value)}return(d,u)=>(v(),k("div",LO,[e.failure?(v(),k("div",KO,[m("p",FO,S(d.$t(e.failure.messageKey)),1),m("button",{type:"button",class:"bb-script-retry-btn",onClick:u[0]||(u[0]=p=>o("retry"))},S(d.$t("tool.blockingBoard.retry")),1)])):H("",!0),m("label",HO,S(d.$t("tool.blockingBoard.scriptLabel")),1),m("textarea",{id:"bb-script-textarea",class:"txta-fild bb-script-textarea w-full",value:e.script,disabled:e.disabled,placeholder:d.$t("tool.blockingBoard.scriptPlaceholder"),onInput:c},null,40,zO),m("div",jO,[m("div",UO,[m("span",GO,S(d.$t("tool.blockingBoard.charCount",{count:g(a)})),1),g(r)?(v(),k("span",VO,S(d.$t("tool.blockingBoard.scriptTooShort",{min:g(s)})),1)):g(l)?(v(),k("span",WO,S(d.$t("tool.blockingBoard.scriptTooLong",{max:g(i)})),1)):H("",!0)]),m("button",{type:"button",class:"bb-script-sample-btn",disabled:e.disabled,onClick:u[1]||(u[1]=p=>o("fill-sample"))},S(d.$t("tool.blockingBoard.fillSample")),9,XO)])]))}}),mI=Object.assign(ot(YO,[["__scopeId","data-v-9002f1df"]]),{__name:"BbScriptStage"}),qO=["aria-label"],ZO=["aria-checked","aria-disabled","tabindex","onClick","onKeydown"],JO=nt({__name:"BbModelToggle",props:{model:{},options:{},disabled:{type:Boolean,default:!1}},emits:["update:model"],setup(e,{emit:t}){const n=e,o=t,a=G([]);function s(l){return l.id===n.model}function i(l){n.disabled||o("update:model",l.id)}function r(l,c){if(!n.disabled){if(l.key===" "||l.key==="Enter"){l.preventDefault();const d=n.options[c];d&&i(d);return}if(l.key==="ArrowRight"||l.key==="ArrowLeft"){l.preventDefault();const d=n.options.length;if(d===0)return;const u=l.key==="ArrowRight"?1:-1,p=(c+u+d)%d,f=n.options[p];f&&(i(f),a.value[p]?.focus())}}}return(l,c)=>(v(),k("div",{class:"bb-model-toggle",role:"radiogroup","aria-label":l.$t("tool.blockingBoard.modelLabel")},[(v(!0),k(ae,null,Me(e.options,(d,u)=>(v(),k("div",{key:d.id,ref_for:!0,ref_key:"optionEls",ref:a,class:qe(["bb-model-toggle-option",{active:s(d)}]),role:"radio","aria-checked":s(d)?"true":"false","aria-disabled":e.disabled?"true":"false",tabindex:s(d)?"0":"-1",onClick:p=>i(d),onKeydown:p=>r(p,u)},S(l.$t(d.labelKey)),43,ZO))),128))],8,qO))}}),hI=Object.assign(ot(JO,[["__scopeId","data-v-31f5f888"]]),{__name:"BbModelToggle"}),QO={class:"bb-settings-panel flex flex-col"},eN={class:"bb-settings-row"},tN={class:"bb-settings-field"},nN={for:"bb-option-part-length",class:"bb-settings-label"},oN=["value","disabled","min","max"],aN={key:0,class:"bb-settings-error"},sN={class:"bb-settings-field"},iN={for:"bb-option-max-parts",class:"bb-settings-label"},rN=["value","disabled","max"],lN={key:0,class:"bb-settings-error"},cN={key:0,class:"bb-settings-warning"},dN={class:"bb-settings-help"},uN={class:"bb-settings-row"},pN={class:"bb-settings-field"},fN={for:"bb-option-genre",class:"bb-settings-label"},mN=["value","disabled","maxlength"],hN={class:"bb-settings-field"},bN={for:"bb-option-tone",class:"bb-settings-label"},gN=["value","disabled","maxlength"],vN={class:"bb-settings-field"},yN={for:"bb-option-dialogue-lang",class:"bb-settings-label"},kN=["value","disabled"],SN=["value"],IN={key:1,class:"bb-settings-field"},wN={class:"bb-settings-label"},MN=["disabled"],$N=nt({__name:"BbSettingsPanel",props:{options:{},model:{},disabled:{type:Boolean},script:{},partLengthMax:{},embedded:{type:Boolean}},emits:["update:options","update:model","convert"],setup(e,{emit:t}){const n=e,o=t,a=G(!1),s=C(()=>n.partLengthMax??dn.partDurationMaxSec),i=G(!1);function r(b){const I=b.target.value,y=Number(I);if(I===""||!Number.isFinite(y)||y<dn.partDurationMinSec||y>s.value){a.value=!0;return}a.value=!1,o("update:options",{...n.options,targetPartDurationSec:y})}function l(b){const I=b.target.value,y=Number(I);if(I===""||!Number.isInteger(y)||y<1||y>dn.maxPartsCeiling){i.value=!0;return}i.value=!1,o("update:options",{...n.options,maxParts:y})}function c(b){const I=b.target.value;I.length>dn.genreMaxChars||o("update:options",{...n.options,genre:I})}function d(b){const I=b.target.value;I.length>dn.toneMaxChars||o("update:options",{...n.options,tone:I})}function u(b){const I=b.target.value;o("update:options",{...n.options,dialogueLang:I})}const p=C(()=>n.options.maxParts*n.options.targetPartDurationSec),f=C(()=>xT(n.script??"")),h=C(()=>f.value!==null&&f.value>p.value);return(b,I)=>
243(v(),k("div",QO,[m("div",eN,[m("div",tN,[m("label",nN,S(b.$t("tool.blockingBoard.optionPartLength")),1),m("input",{id:"bb-option-part-length",type:"number",class:"inpt-fild bb-settings-input w-full",value:e.options.targetPartDurationSec,disabled:e.disabled,min:g(dn).partDurationMinSec,max:s.value,onInput:r},null,40,oN),g(a)?(v(),k("p",aN,S(b.$t("tool.blockingBoard.optionOutOfRange",{min:g(dn).partDurationMinSec,max:s.value})),1)):H("",!0)]),m("div",sN,[m("label",iN,S(b.$t("tool.blockingBoard.optionMaxParts")),1),m("input",{id:"bb-option-max-parts",type:"number",class:"inpt-fild bb-settings-input w-full",value:e.options.maxParts,disabled:e.disabled,min:"1",max:g(dn).maxPartsCeiling,onInput:l},null,40,rN),g(i)?(v(),k("p",lN,S(b.$t("tool.blockingBoard.optionOutOfRange",{min:1,max:g(dn).maxPartsCeiling})),1)):H("",!0)])]),h.value?(v(),k("p",cN,S(b.$t("tool.blockingBoard.optionMaxPartsOverflow",{estimate:f.value,capacity:p.value})),1)):H("",!0),m("p",dN,S(b.$t("tool.blockingBoard.optionMaxPartsHelp",{sec:e.options.targetPartDurationSec})),1),m("div",uN,[m("div",pN,[m("label",fN,S(b.$t("tool.blockingBoard.optionGenre")),1),m("input",{id:"bb-option-genre",type:"text",class:"inpt-fild bb-settings-input w-full",value:e.options.genre,disabled:e.disabled,maxlength:g(dn).genreMaxChars,onInput:c},null,40,mN)]),m("div",hN,[m("label",bN,S(b.$t("tool.blockingBoard.optionTone")),1),m("input",{id:"bb-option-tone",type:"text",class:"inpt-fild bb-settings-input w-full",value:e.options.tone,disabled:e.disabled,maxlength:g(dn).toneMaxChars,onInput:d},null,40,gN)])]),m("div",vN,[m("label",yN,S(b.$t("tool.blockingBoard.optionDialogueLang")),1),m("select",{id:"bb-option-dialogue-lang",class:"inpt-fild bb-settings-input w-full",value:e.options.dialogueLang,disabled:e.disabled,onChange:u},[(v(!0),k(ae,null,Me(g(uT),y=>(v(),k("option",{key:y,value:y},S(y),9,SN))),128))],40,kN)]),e.embedded?H("",!0):(v(),k("div",IN,[m("span",wN,S(b.$t("tool.blockingBoard.modelLabel")),1),ce(hI,{model:e.model,options:g(nh),disabled:e.disabled,"onUpdate:model":I[0]||(I[0]=y=>o("update:model",y))},null,8,["model","options","disabled"])])),e.embedded?H("",!0):(v(),k("button",{key:2,type:"button",class:"bb-settings-convert-btn",disabled:e.disabled,onClick:I[1]||(I[1]=y=>o("convert"))},S(b.$t("tool.blockingBoard.convert")),9,MN))]))}}),bI=Object.assign(ot($N,[["__scopeId","data-v-b0c0767c"]]),{__name:"BbSettingsPanel"}),EN={class:"bb-converting-stage flex flex-col items-center justify-center"},xN={class:"bb-converting-title"},PN={class:"bb-converting-model"},CN={class:"bb-converting-step"},BN={class:"bb-converting-elapsed"},_N=nt({__name:"BbConvertingStage",props:{startedAt:{},modelLabelKey:{}},emits:["cancel"],setup(e,{emit:t}){const n=e,o=t,a=G(0);function s(){a.value=Math.max(0,Math.floor((Date.now()-n.startedAt)/1e3))}let i;return Jn(()=>{s(),i=Lk(s,1e3)}),Xi(()=>{i&&clearInterval(i)}),(r,l)=>(v(),k("div",EN,[m("p",xN,S(r.$t("tool.blockingBoard.converting")),1),m("p",PN,S(r.$t(e.modelLabelKey)),1),m("p",CN,S(r.$t("tool.blockingBoard.convertingStep")),1),m("p",BN,S(r.$t("tool.blockingBoard.elapsed",{seconds:g(a)})),1),m("button",{type:"button",class:"bb-converting-cancel-btn",onClick:l[0]||(l[0]=c=>o("cancel"))},S(r.$t("tool.blockingBoard.cancel")),1)]))}}),AN=Object.assign(ot(_N,[["__scopeId","data-v-793f5a04"]]),{__name:"BbConvertingStage"}),TN={class:"bb-result-stage flex flex-col"},RN={role:"note",class:"bb-result-draft-notice"},DN={class:"bb-result-summary-grid"},ON={class:"bb-result-summary-item"},NN={class:"bb-result-summary-item"},LN={class:"bb-result-summary-item"},KN={class:"bb-result-summary-item"},FN={class:"bb-result-summary-item"},HN={role:"tablist",class:"bb-result-detail-tablist"},zN=["aria-selected","onClick"],jN={class:"bb-result-detail-body"},UN={key:0,class:"bb-result-table"},GN={key:1,class:"bb-result-table"},VN={key:2,class:"bb-result-table"},WN={role:"note",class:"bb-result-placement-notice"},XN={role:"note",class:"bb-result-placement-notice"},YN={class:"bb-result-table"},qN=nt({__name:"BbResultStage",props:{draft:{},activePartId:{}},emits:["update:activePartId"],setup(e){const t=e,n=["cuts","actions","dialogues","placements"],o={cuts:"tool.blockingBoard.tabCuts",actions:"tool.blockingBoard.tabActions",dialogues:"tool.blockingBoard.tabDialogues",placements:"tool.blockingBoard.tabPlacements"},a=G("cuts"),s=C(()=>t.draft.location.label||t.draft.location.kind),i=C(()=>t.draft.parts.reduce((w,M)=>w+M.durationSec,0)),r=C(()=>{const w=new Map;for(const M of t.draft.characters)w.set(M.id,M.name);for(const M of t.draft.props)w.set(M.id,M.label);return w});function l(w){return r.value.get(w)??w}function c(w){return w.map(l).join(", ")}function d(w,M){return`${w.toFixed(1)}sâ${M.toFixed(1)}s`}const u=C(()=>t.draft.parts.find(w=>w.id===t.activePartId)??null),p=C(()=>u.value?[...u.value.cuts].sort((w,M)=>w.startSec-M.startSec):[]),f=C(()=>u.value?[...u.value.actions].sort((w,M)=>w.startSec-M.startSec):[]),h=C(()=>u.value?[...u.value.dialogues].sort((w,M)=>w.startSec-M.startSec):[]),b=C(()=>u.value?.placements??[]),I={"in-front-of":"inFrontOf",behind:"behind","beside-left":"besideLeft","beside-right":"besideRight","seated-on":"seatedOn",near:"near","at-entrance":"atEntrance",unspecified:"unspecified"};function y(w){return`tool.blockingBoard.relation.${I[w]}`}return(w,M)=>(v(),k("div",TN,[m("p",RN,S(w.$t("tool.blockingBoard.draftNotice")),1),m("dl",DN,[m("div",ON,[m("dt",null,S(w.$t("tool.blockingBoard.summaryScene")),1),m("dd",null,S(e.draft.title),
2431)]),m("div",NN,[m("dt",null,S(w.$t("tool.blockingBoard.summaryLocation")),1),m("dd",null,S(g(s)),1)]),m("div",LN,[m("dt",null,S(w.$t("tool.blockingBoard.summaryCast")),1),m("dd",null,S(e.draft.characters.length),1)]),m("div",KN,[m("dt",null,S(w.$t("tool.blockingBoard.summaryParts")),1),m("dd",null,S(e.draft.parts.length),1)]),m("div",FN,[m("dt",null,S(w.$t("tool.blockingBoard.summaryDuration")),1),m("dd",null,S(w.$t("tool.blockingBoard.partDuration",{seconds:g(i)})),1)])]),m("div",HN,[(v(),k(ae,null,Me(n,x=>m("button",{key:x,type:"button",role:"tab",class:"bb-result-detail-tab","aria-selected":g(a)===x?"true":"false",onClick:_=>a.value=x},S(w.$t(o[x])),9,zN)),64))]),m("div",jN,[g(a)==="cuts"?(v(),k("table",UN,[m("thead",null,[m("tr",null,[m("th",null,S(w.$t("tool.blockingBoard.colTime")),1),m("th",null,S(w.$t("tool.blockingBoard.colShot")),1),m("th",null,S(w.$t("tool.blockingBoard.colSubject")),1),m("th",null,S(w.$t("tool.blockingBoard.colIntent")),1)])]),m("tbody",null,[(v(!0),k(ae,null,Me(g(p),x=>(v(),k("tr",{key:x.id},[m("td",null,S(d(x.startSec,x.endSec)),1),m("td",null,S(x.shotType),1),m("td",null,S(c(x.subjectIds)),1),m("td",null,S(x.intent),1)]))),128))])])):g(a)==="actions"?(v(),k("table",GN,[m("thead",null,[m("tr",null,[m("th",null,S(w.$t("tool.blockingBoard.colActor")),1),m("th",null,S(w.$t("tool.blockingBoard.colTime")),1),m("th",null,S(w.$t("tool.blockingBoard.colActionType")),1),m("th",null,S(w.$t("tool.blockingBoard.colText")),1)])]),m("tbody",null,[(v(!0),k(ae,null,Me(g(f),x=>(v(),k("tr",{key:x.id},[m("td",null,S(l(x.characterId)),1),m("td",null,S(d(x.startSec,x.endSec)),1),m("td",null,S(x.actionType),1),m("td",null,S(x.text.ko),1)]))),128))])])):g(a)==="dialogues"?(v(),k("table",VN,[m("thead",null,[m("tr",null,[m("th",null,S(w.$t("tool.blockingBoard.colSpeaker")),1),m("th",null,S(w.$t("tool.blockingBoard.colTime")),1),m("th",null,S(w.$t("tool.blockingBoard.colMode")),1),m("th",null,S(w.$t("tool.blockingBoard.colLine")),1)])]),m("tbody",null,[(v(!0),k(ae,null,Me(g(h),x=>(v(),k("tr",{key:x.id},[m("td",null,S(l(x.characterId)),1),m("td",null,S(d(x.startSec,x.endSec)),1),m("td",null,S(x.mode),1),m("td",null,S(x.line),1)]))),128))])])):g(a)==="placements"?(v(),k(ae,{key:3},[m("p",WN,S(w.$t("tool.blockingBoard.placementStartNotice")),1),m("p",XN,S(w.$t("tool.blockingBoard.noCoordinatesNotice")),1),m("table",YN,[m("thead",null,[m("tr",null,[m("th",null,S(w.$t("tool.blockingBoard.colCharacter")),1),m("th",null,S(w.$t("tool.blockingBoard.colRelation")),1),m("th",null,S(w.$t("tool.blockingBoard.colPose")),1)])]),m("tbody",null,[(v(!0),k(ae,null,Me(g(b),x=>(v(),k("tr",{key:x.characterId},[m("td",null,S(l(x.characterId)),1),m("td",{class:qe({"bb-result-relation-unspecified":x.relation==="unspecified"})},S(w.$t(y(x.relation),{prop:x.targetPropId?l(x.targetPropId):""})),3),m("td",null,S(x.pose),1)]))),128))])])],64)):H("",!0)])]))}}),ZN=Object.assign(ot(qN,[["__scopeId","data-v-2f93b1fb"]]),{__name:"BbResultStage"}),JN={parts:"íí¸",cuts:"ì»·",actors:"ì¸ë¬¼",props:"ìí",actions:"íë",dialogues:"ëì¬",placements:"ë°°ì¹",openings:"ê°êµ¬ë¶",cameras:"ì¹´ë©ë¼",events:"ì´ë²¤í¸"};function gI(e){const t=[],n=/([A-Za-z][A-Za-z0-9]*)\[(\d+)\]/g;let o;for(;(o=n.exec(e))!==null;)t.push(`${JN[o[1]]??o[1]} ${Number(o[2])+1}`);return t.join(" · ")}function QN(e){return(e.split(".").pop()??e).replace(/\[\d+\]$/,"")}function Zr(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Jr(e){return String(Math.round(e*100)/100)}function Vg(e){const t="tool.blockingBoard.issue.s2s.",n=gI(e.path),o=e.params??{},a={key:e.messageKey,params:o};switch(e.code){case"SCHEMA_INVALID":return o.kind==="enum"?{key:`${t}enumInvalid`,params:{where:n,field:QN(e.path),value:String(o.value??""),allowed:Array.isArray(o.allowed)?o.allowed.join(", "):String(o.allowed??"")}}:o.kind==="id"?{key:`${t}idInvalid`,params:{where:n,value:String(o.value??"")}}:a;case"DUPLICATE_ID":return e.targetId?{key:`${t}duplicateId`,params:{value:e.targetId}}:a;case"REFERENCE_MISSING":return typeof o.referencedId=="string"?{key:`${t}referenceMissing`,params:{where:n,value:o.referencedId}}:a;case"CUT_GAP":case"CUT_OVERLAP":return e.timeRange?{key:`${t}${e.code==="CUT_GAP"?"cutGap":"cutOverlap"}`,params:{where:n,start:Jr(e.timeRange.startSec),end:Jr(e.timeRange.endSec)}}:a;case"INVALID_RANGE":{const s=Zr(o.startSec),i=Zr(o.endSec),r=Zr(o.durationSec);return s===null||i===null||r===null?a:{key:`${t}invalidRange`,params:{where:n,start:Jr(s),end:Jr(i),duration:Jr(r)}}}case"LIMIT_EXCEEDED":{const s=Zr(o.max),i=Zr(o.actual);return o.limit!=="maxParts"||s===null||i===null?a:{key:`${t}tooManyParts`,params:{max:s,actual:i}}}default:return a}}const eL={class:"bb-validation-panel flex flex-col"},tL={key:0,class:"bb-validation-empty"},nL={key:0,class:"bb-validation-group"},oL={class:"bb-validation-simple-list"},aL={class:"bb-validation-detail"},sL={class:"bb-validation-path"},iL={key:1,class:"bb-validation-fixed"},rL={class:"bb-validation-group-title"},lL={class:"bb-validation-simple-list"},cL={class:"bb-validation-path"},dL={class:"bb-validation-summary"},uL={class:"sr-only"}
243,pL={key:0,class:"bb-validation-running"},fL={class:"bb-validation-list"},mL={key:0,class:"bb-validation-empty"},hL=["data-code"],bL=["aria-expanded","onClick"],gL=["aria-label"],vL={class:"bb-issue-group-text"},yL={class:"bb-issue-group-badge"},kL={class:"bb-issue-list"},SL=["title","onClick"],IL={class:"bb-issue-row-name"},wL={key:0,class:"bb-issue-row-time"},ML=["onClick"],$L={key:2,class:"bb-issue-row-hint"},EL={key:2,class:"bb-validation-group"},xL={class:"bb-validation-group-title"},PL={class:"bb-validation-simple-list"},CL=nt({__name:"BbValidationPanel",props:{report:{},issues:{default:()=>[]},warnings:{default:()=>[]},running:{type:Boolean,default:!1},selectedId:{default:null},entityLabels:{}},emits:["navigate","auto-detour"],setup(e,{emit:t}){const n=e,o=t,a=["error","warning","info"],s={error:"tool.blockingBoard.issueSeverityError",warning:"tool.blockingBoard.issueSeverityWarning",info:"tool.blockingBoard.issueSeverityInfo"},i={error:0,warning:1,info:2},r={error:"â",warning:"â³",info:"â"},l=C(()=>n.issues.filter(M=>M.code==="DRAFT_NORMALIZED")),c=C(()=>{const M=new Map;for(const x of a)M.set(x,[]);for(const x of n.issues)x.code!=="DRAFT_NORMALIZED"&&M.get(x.severity)?.push(x);return M}),d=C(()=>{if(!n.report)return[];const M=new Map;for(const x of n.report.issues){const _=M.get(x.code);_?_.issues.push(x):M.set(x.code,{code:x.code,severity:x.severity,messageKey:x.messageKey,issues:[x]})}return[...M.values()].sort((x,_)=>i[x.severity]-i[_.severity])}),u=G({});function p(M){return u.value[M.code]??M.severity==="error"}function f(M){u.value={...u.value,[M.code]:!p(M)}}function h(M){return`tool.blockingBoard.hint.${M.toLowerCase().replace(/_([a-z])/g,(_,O)=>O.toUpperCase())}`}function b(M){if(n.report)return Object.entries(n.report.byPart).find(([,x])=>x.includes(M))?.[0]}function I(M){const x=M.params?.name;return typeof x=="string"?{text:x}:M.targetId?n.entityLabels?n.entityLabels[M.targetId]??{key:"tool.blockingBoard.validation.unknownTarget"}:{text:M.targetId}:{key:"tool.blockingBoard.validation.noTarget"}}function y(M){return M.timeRange?`${M.timeRange.startSec.toFixed(1)}â${M.timeRange.endSec.toFixed(1)}s`:null}function w(M){o("navigate",{targetId:M.targetId,timeSec:M.timeRange?.startSec,partId:b(M),path:M.path})}return(M,x)=>{const _=vn;return v(),k("div",eL,[e.report?(v(),k(ae,{key:1},[m("div",dL,[m("span",uL,S(M.$t("tool.blockingBoard.validation.summary")),1),m("span",{class:qe(["bb-validation-chip bb-validation-chip--error",{"bb-validation-chip--on":e.report.errorCount>0}])},S(M.$t("tool.blockingBoard.validation.errors",{count:e.report.errorCount})),3),m("span",{class:qe(["bb-validation-chip bb-validation-chip--warning",{"bb-validation-chip--on":e.report.warningCount>0}])},S(M.$t("tool.blockingBoard.validation.warnings",{count:e.report.warningCount})),3),e.running?(v(),k("span",pL,S(M.$t("tool.blockingBoard.validation.running")),1)):H("",!0)]),m("div",fL,[e.report.issues.length===0?(v(),k("p",mL,S(M.$t("tool.blockingBoard.noIssues")),1)):H("",!0),(v(!0),k(ae,null,Me(d.value,O=>(v(),k("div",{key:O.code,class:qe(["bb-issue-group",`bb-issue-group--${O.severity}`]),"data-code":O.code},[m("button",{type:"button",class:"bb-issue-group-title","aria-expanded":p(O),onClick:A=>f(O)},[m("span",{class:"bb-issue-group-icon",role:"img","aria-label":M.$t(s[O.severity])},S(r[O.severity]),9,gL),m("span",vL,S(M.$t(O.messageKey)),1),m("span",yL,S(O.issues.length),1),ce(_,{name:p(O)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"bb-issue-group-chevron"},null,8,["name"])],8,bL),m("ul",kL,[(v(!0),k(ae,null,Me(O.issues,A=>Zt((v(),k("li",{key:`${A.code}-${A.path}-${A.timeRange?.startSec??""}`,class:qe(["bb-issue-row",{"bb-issue-row--selected":A.targetId===e.selectedId}]),title:M.$t(h(A.code)),onClick:N=>w(A)},[m("span",IL,["text"in I(A)?(v(),k(ae,{key:0},[We(S(I(A).text),1)],64)):I(A).params?(v(),k(ae,{key:1},[We(S(M.$t(I(A).key,I(A).params)),1)],64)):(v(),k(ae,{key:2},[We(S(M.$t(I(A).key)),1)],64))]),y(A)?(v(),k("span",wL,S(y(A)),1)):H("",!0),A.code==="PHYSICAL_IMPOSSIBILITY"&&A.targetId?(v(),k("button",{key:1,type:"button",class:"bb-validation-auto-detour",onClick:un(N=>o("auto-detour",{actorId:A.targetId,partId:b(A)}),["stop"])},S(M.$t("tool.blockingBoard.validation.autoDetour")),9,ML)):H("",!0),A.targetId===e.selectedId?(v(),k("span",$L,S(M.$t(h(A.code))),1)):H("",!0)],10,SL)),[[cr,p(O)]])),128))])],10,hL))),128))])],64)):(v(),k(ae,{key:0},[e.issues.length===0?(v(),k("p",tL,S(M.$t("tool.blockingBoard.noIssues")),1)):H("",!0),(v(),k(ae,null,Me(a,O=>(v(),k(ae,{key:O},[c.value.get(O).length>0?(v(),k("div",nL,[m("h3",{class:qe(["bb-validation-group-title",`bb-validation-group-title--${O}`])},S(M.$t(s[O])),3),m("ul",oL,[(v(!0),k(ae,null,Me(c.value.get(O),A=>(v(),k("li",{key:`${A.code}-${A.path}`,class:"bb-validation-item"},[m("span",null,S(M.$t(g(Vg)(A).key,g(Vg)(A).params)),1),m("details",aL,[m("summary",null,S(M.$t("tool.blockingBoard.s2s.path")),1),m("span",sL,S(A.path),1)])]))),128))])])):H("",!0)],64))),64)),l.value.length>0?(v(),k("details",iL,[m("summary",rL,S(M.$t("tool.blockingBoard.s2s.normalizedSummary",{n:l.value.length})),1),m("ul",lL,[(v(!0),k(ae,null,Me(l.value,(O,A)=>(v(),k("li",{key:`${O.path}-${A}`,class:"bb-validation-item"},[m("span",null,S(M.$t(O.messageKey,O.params??{})),1),m("span",cL,S(g(gI)(O.path)),1)]))),128))])])):H("",!0)],64)),e.warnings.length>0?(v(),k("div",EL,[m("h3",xL,S(M.$t("tool.blockingBoard.modelWarnings")),1),m("ul",PL,[(v(!0),k(ae,null,Me(e.warnings,(O,A)=>(v(),k("li",{key:A,class:"bb-validation-item"},S(O),1))),128))])])):H("",!0)])}}}
243),Of=Object.assign(ot(CL,[["__scopeId","data-v-499d386d"]]),{__name:"BbValidationPanel"}),BL={class:"bb-import-header"},_L=["aria-label"],AL={class:"bb-import-main"},TL={role:"tablist","aria-orientation":"vertical",class:"bb-import-tabs"},RL=["aria-selected","disabled","onClick"],DL={class:"bb-import-content"},OL={key:0,class:"bb-import-drop-notice"},NL={key:1,class:"bb-import-drop-notice bb-import-bg-notice"},LL={class:"bb-import-body"},KL={key:0,class:"bb-import-draft-wrap"},FL={role:"radiogroup",class:"bb-import-draft-modes","data-draft-modes":""},HL=["aria-checked","data-draft-mode","disabled","onClick"],zL={key:1,class:"bb-import-draft"},jL={class:"bb-import-draft-stage"},UL={class:"bb-import-draft-panel"},GL={key:1,class:"bb-import-blank"},VL={class:"bb-import-field"},WL={class:"bb-import-field-label"},XL=["value"],YL={class:"bb-import-field"},qL={class:"bb-import-field-label"},ZL=["placeholder"],JL={class:"bb-import-field"},QL={class:"bb-import-field-label"},eK=["placeholder"],tK={key:2,class:"bb-import-json"},nK=["placeholder"],oK={key:0,class:"bb-import-error"},aK={key:1,class:"bb-import-preview"},sK={class:"bb-import-preview-format"},iK={"data-preview":"partCount"},rK={key:0,class:"bb-import-size-unknown"},lK={key:1,class:"bb-import-opening-size-unknown"},cK={class:"bb-import-footer"},dK={key:0,class:"bb-import-footer-note bb-import-apply-reason",role:"status"},uK={key:1,class:"bb-import-footer-note"},pK={key:2,class:"bb-import-modes"},fK={class:"sr-only"},mK=["value"],hK={key:3,class:"bb-import-confirm",role:"alert"},bK={class:"bb-import-confirm-text"},gK={key:4,class:"bb-import-confirm",role:"alert"},vK={class:"bb-import-confirm-text"},yK=["disabled"],Bc=0,Wg=1,kK=2,SK=nt({__name:"BbImportModal",props:{open:{type:Boolean},currentEmpty:{type:Boolean},initialTab:{},hasBackground:{type:Boolean},maxPartDurationSec:{}},emits:["apply","close"],setup(e,{emit:t}){const n=e,o=t,a=[{key:"draft",labelKey:"tool.blockingBoard.import.tabDraft"},{key:"json",labelKey:"tool.blockingBoard.import.tabJson"},{key:"blank",labelKey:"tool.blockingBoard.import.tabBlank"}],s=[{key:"ai",labelKey:"tool.blockingBoard.import.draftModeAi"},{key:"standard",labelKey:"tool.blockingBoard.import.draftModeStandard"}],i=["office","room","living-room","kitchen","bathroom","hallway","executive-office","cafe","restaurant","classroom","hospital-room","convenience-store","rooftop","parking-lot","alley","road","park","forest","outdoor","neighborhood","river","bridge","palace-yard","abandoned-house"];function r(Ae){return`${Ae}-${crypto.randomUUID().slice(0,8)}`}const l=G(0),c=C(()=>l.value===kK),d=G("ai"),u=C(()=>l.value===Bc&&d.value==="standard"),p=G(""),f=G(null),h=G(null),b=G(null),I=C(()=>f.value?rA(f.value.result.issues):[]),y=C(()=>f.value?lA(f.value.result.issues):[]);function w(Ae,Ve){h.value=Ae,b.value=Ve??null,f.value=null}function M(){const Ae=zS(p.value,{projectId:"pending-import",name:"",idFactory:r});if(!Ae.ok){Ae.issue?w(Ae.issue.messageKey,Ae.issue.params):w(`tool.blockingBoard.import.${Ae.reason}`);return}h.value=null,b.value=null,f.value=Ae}const x=G(null);async function _(Ae){const Ve=nT(Ae);if(!Ve.ok){Ve.reason==="tooLarge"?w(Ve.issue.messageKey,Ve.issue.params):w("tool.blockingBoard.import.dropJsonOnly");return}try{p.value=await Ae.text()}catch{h.value="tool.blockingBoard.import.invalidJson",b.value=null;return}M()}function O(Ae){const Ve=Ae.target,Xe=Ve.files?.[0];Ve.value="",Xe&&_(Xe)}const A=G(0),N=C(()=>A.value>0);function K(Ae){return Ae.dataTransfer?.types.includes("Files")??!1}function F(Ae){!K(Ae)||oe.value||(Ae.preventDefault(),A.value++)}function B(Ae){K(Ae)&&Ae.preventDefault()}function j(Ae){K(Ae)&&(A.value=Math.max(0,A.value-1))}async function ee(Ae){if(Ae.preventDefault(),A.value=0,oe.value)return;const Ve=[...Ae.dataTransfer?.files??[]];if(u.value){const ne=Ve.find(cI);if(ne){const W=await dI(ne);"text"in W?pe.value?.loadText(W.text):D.value=`tool.blockingBoard.boardScript.file.${W.reason}`;return}}const Xe=Ve.find(NS);if(!Xe){w("tool.blockingBoard.import.dropJsonOnly"),l.value=Wg;return}l.value=Wg,await _(Xe)}const D=G(null),Z=qR(),L=G("");Je(Z.draft,Ae=>{L.value=Ae?.parts[0]?.id??"",Ae&&(f.value=nd(Ae,{projectId:"pending-import",name:"",idFactory:r}),h.value=null,b.value=null)});const V=lI({maxPartDurationSec:()=>n.maxPartDurationSec??null}),pe=G(null),le=C(()=>V.state.value==="result"&&V.result.value?.draft?nd(V.result.value.draft,{projectId:"pending-import",name:"",idFactory:r}):null);function me(Ae){Z.script.value=Ae,d.value="ai"}const oe=C(()=>Z.state.value==="converting"),fe=C(()=>Z.script.value.length>
243=dn.scriptMinChars&&Z.script.value.length<=dn.scriptMaxChars),X=C(()=>oe.value||!fe.value),re=C(()=>wT(Z.model.value)?.labelKey??""),Se=G(0);function Q(){Se.value=Date.now(),Z.convert()}function $e(){Se.value=Date.now(),Z.retry()}function Fe(){Z.script.value=FS}const Ze=G(!1);function ue(){Ze.value=!1,Z.reconvert()}const ye=typeof mo=="function"?mo().locale:null,Ue=C(()=>i.map(Ae=>{const Ve=Ym(Ae);return{kind:Ae,label:Ve?Kn(Ve.labels,ye?.value??"ko"):Ae,widthM:Ve?.widthM,depthM:Ve?.depthM}})),te=G(i[0]),q=G(null),de=G(null),Ce=C(()=>Ue.value.find(Ae=>Ae.kind===te.value)),Ye=["new","replace-project"],tt=C(()=>{const Ae=jS({empty:n.currentEmpty}).filter(Ve=>!(n.hasBackground&&Ve==="replace-project"));return c.value?Ae.filter(Ve=>Ye.includes(Ve)):Ae}),ht=G("new"),Et=C(()=>tt.value.length===1&&tt.value[0]==="new");Je(tt,Ae=>{Ae.includes(ht.value)||(ht.value=Ae[0])});const It=G(!1);Je([l,ht,d],()=>{It.value=!1,Ze.value=!1});const Xt={new:"modeNew","replace-project":"modeReplaceProject","merge-part":"modeMergePart","replace-room":"modeReplaceRoom"};function yt(Ae){return Xt[Ae]}const Ie=C(()=>{const Ae=V.analysis.value;return!!(Ae?.isStandard&&Ae.draft)}),Be=C(()=>{if(!u.value||le.value||Ie.value)return null;const Ae=V.analysis.value;return!Ae||!V.script.value.trim()?"tool.blockingBoard.import.createNeedsScript":Ae.isStandard?"tool.blockingBoard.boardScript.panel.blocked":"tool.blockingBoard.boardScript.check.notStandard"}),lt=C(()=>u.value?!!le.value||Ie.value:c.value||!!f.value?.ok);function Ke(){l.value=Bc,p.value="";const Ae=Z.draft.value;f.value=Ae?nd(Ae,{projectId:"pending-import",name:"",idFactory:r}):null,h.value=null,b.value=null,D.value=null,te.value=i[0],q.value=null,de.value=null,ht.value="new",It.value=!1,Ze.value=!1}Je(()=>n.open,(Ae,Ve)=>{Ve&&!Ae&&Ke()}),Je(()=>n.open,Ae=>{if(!Ae||!n.initialTab)return;const Ve=a.findIndex(Xe=>Xe.key===n.initialTab);Ve>=0&&(l.value=Ve)},{immediate:!0});function ct(){if(!oe.value){if(It.value||Ze.value){It.value=!1,Ze.value=!1;return}o("close")}}Qo("importModal",()=>n.open,Ae=>Ae.id==="overlay.close"&&ct());let xt=!1;function jt(Ae){xt=Ae.target===Ae.currentTarget}function Jt(Ae){Ae.target!==Ae.currentTarget||!xt||(xt=!1,ct())}function Mn(Ae){return ht.value==="new"||!Ae.snapshot.sceneBackground?Ae:{...Ae,snapshot:{...Ae.snapshot,sceneBackground:null}}}function At(Ae){if(ht.value==="replace-project"&&!It.value){It.value=!0;return}if(It.value=!1,u.value){if(!le.value&&!V.convert())return;const Ve=le.value;if(!Ve)return;o("apply",Ve.result,ht.value),V.reset(),Z.reset();return}if(c.value){const Ve=xu({projectId:"pending-import",name:Ae,roomKind:te.value,widthM:Number.isFinite(q.value)?q.value:void 0,depthM:Number.isFinite(de.value)?de.value:void 0,idFactory:r});o("apply",{...Ve,format:"blank"},ht.value);return}f.value?.ok&&(o("apply",Mn(f.value.result),ht.value),l.value===Bc&&(V.reset(),Z.reset(),f.value=null))}return(Ae,Ve)=>{const Xe=vn;return e.open?(v(),k("div",{key:0,class:"bb-import-modal",onPointerdown:jt,onClick:Jt,onDragover:Ve[18]||(Ve[18]=un(()=>{},["prevent"])),onDrop:Ve[19]||(Ve[19]=un(()=>{},["prevent"]))},[m("div",{class:"bb-import-dialog shadow-smd1",onDragenter:F,onDragover:B,onDragleave:j,onDrop:ee},[m("div",BL,[m("h2",null,S(Ae.$t(Et.value?"tool.blockingBoard.import.titleNew":"tool.blockingBoard.import.title")),1),m("button",{type:"button",class:"bb-import-close btn-md","aria-label":Ae.$t("tool.blockingBoard.close"),onClick:Ve[0]||(Ve[0]=ne=>Ae.$emit("close"))},[ce(Xe,{name:"i-lucide-x",class:"size-[16px]"})],8,_L)]),m("div",AL,[m("div",TL,[(v(),k(ae,null,Me(a,(ne,W)=>m("button",{key:ne.key,type:"button",role:"tab","aria-selected":g(l)===W,disabled:oe.value,onClick:ve=>l.value=W},S(Ae.$t(ne.labelKey)),9,RL)),64))]),m("div",DL,[g(D)?(v(),k("p",OL,S(Ae.$t(g(D))),1)):H("",!0),e.hasBackground?(v(),k("p",NL,S(Ae.$t("tool.blockingBoard.import.backgroundLocksReplace")),1)):H("",!0),m("div",LL,[g(l)===Bc?(v(),k("div",KL,[m("div",FL,[(v(),k(ae,null,Me(s,ne=>m("button",{key:ne.key,type:"button",role:"radio","aria-checked":g(d)===ne.key,"data-draft-mode":ne.key,disabled:oe.value,onClick:W=>d.value=ne.key},S(Ae.$t(ne.labelKey)),9,HL)),64))]),g(d)==="standard"?(v(),et(fI,{key:0,ref_key:"boardScriptTabRef",ref:pe,class:"bb-import-draft-fill",bs:g(V),disabled:oe.value,onSendToAi:me},null,8,["bs","disabled"])):(v(),k("div",zL,[m("div",jL,[g(Z).state.value==="converting"?(v(),et(AN,{key:0,"started-at":g(Se),"model-label-key":re.value,onCancel:g(Z).cancel},null,8,["started-at","model-label-key","onCancel"])):g(Z).state.value==="result"&&g(Z).draft.value?(v(),et(ZN,{key:1,draft:g(Z).draft.value,"active-part-id":g(L),"onUpdate:activePartId":Ve[1]||(Ve[1]=ne=>L.value=ne)},null,8,["draft","active-part-id"])):(v(),et(mI,{key:2,script:g(Z).script.value,disabled:oe.value,failure:g(Z).failure.value,"onUpdate:script":Ve[2]||(Ve[2]=ne=>g(Z).script.value=ne),onFillSample:Fe,onRetry:$e},null,8,["script","disabled","failure"])),g(Z).state.value==="error"?(v(),et(Of,{key:3,issues:g(Z).issues.value,warnings:[]},null,8,["issues"])):H("",!0),g(Z).state.value==="result"?(v(),k("button",{key:4,type:"button",class:"bb-import-reconvert bb-import-secondary",onClick:Ve[3]||(Ve[3]=ne=>Ze.value=!0)},S(Ae.$t("tool.blockingBoard.s2s.reconvertWithSettings")),1)):H("",!0)]),m("div",UL,[g(Z).state.value!=="result"?(v(),et(bI,{key:0,options:g(Z).options.value,model:g(Z).model.value,script:g(Z).script.value,disabled:X.value,"onUpdate:options":Ve[4]||(Ve[4]=ne=>g(Z).options.value=ne),"onUpdate:model":Ve[5]||(Ve[5]=ne=>g(Z).model.value=ne),onConvert:Q},null,8,["options","model","script","disabled"])):(v(),et(Of,{key:1,issues:g(Z).issues.value,warnings:g(Z).draft.value?.warnings??[]},null,8,["issues","warnings"]))]),g(Z).state.value==="result"&&g(Z).draft.value?(v(),et(uI,{key:0,class:"bb-import-draft-strip",parts:g(Z).draft.value.parts,"active-part-id":g(L),onSelect:Ve[6]||(Ve[6]=ne=>L.value=ne)},null,8,["parts","active-part-id"])):H("",!0)]))])):c.value?(v(),k("div",GL,[m("label",VL,[m("span",WL,S(Ae.$t("tool.blockingBoard.import.roomKind")),1),Zt(m("select",{"onUpdate:modelValue":Ve[7]||(Ve[7]=ne=>js(te)?te.value=ne:null),name:"roomKind",class:"bb-import-input"},[(v(!0),k(ae,null,Me(Ue.value,ne=>(v(),k("option",{key:ne.kind,value:ne.kind},S(ne.label),9,XL))),128))],512),[[ps,g(te)]])]),m("label",YL,[m("span",qL,S(Ae.$t("tool.blockingBoard.import.roomWidth")),1),Zt(m("input",{"onUpdate:modelValue":Ve[8]||(Ve[8]=ne=>js(q)?q.value=ne:null),type:"number",name:"roomWidth",min:"1",class:"bb-import-input",placeholder:String(Ce.value?.widthM??"")},null,8,ZL),[[Nn,g(q),void 0,{number:!0}]])]),m("label",JL,[m("span",QL,S(Ae.$t("tool.blockingBoard.import.roomDepth")),1
243),Zt(m("input",{"onUpdate:modelValue":Ve[9]||(Ve[9]=ne=>js(de)?de.value=ne:null),type:"number",name:"roomDepth",min:"1",class:"bb-import-input",placeholder:String(Ce.value?.depthM??"")},null,8,eK),[[Nn,g(de),void 0,{number:!0}]])])])):(v(),k("div",tK,[m("div",{class:qe(["bb-import-drop",{"bb-import-drop--over":N.value}])},[ce(Xe,{name:"i-lucide-upload",class:"size-[16px]"}),m("span",null,S(Ae.$t("tool.blockingBoard.import.dropZone")),1),m("input",{ref_key:"jsonFileRef",ref:x,type:"file",accept:"application/json,.json",class:"sr-only",onChange:O},null,544),m("button",{type:"button",class:"bb-import-file bb-import-secondary",onClick:Ve[10]||(Ve[10]=ne=>g(x)?.click())},S(Ae.$t("tool.blockingBoard.import.chooseFile")),1)],2),Zt(m("textarea",{"onUpdate:modelValue":Ve[11]||(Ve[11]=ne=>js(p)?p.value=ne:null),class:"bb-import-text",placeholder:Ae.$t("tool.blockingBoard.import.dropFile")},null,8,nK),[[Nn,g(p)]]),m("button",{type:"button",class:"bb-import-parse bb-import-secondary",onClick:M},S(Ae.$t("tool.blockingBoard.import.preview")),1),g(h)?(v(),k("p",oK,S(g(b)?Ae.$t(g(h),g(b)):Ae.$t(g(h))),1)):H("",!0),g(f)&&g(f).ok?(v(),k("div",aK,[m("div",sK,S(Ae.$t(g(oT)[g(f).format])),1),m("div",null,S(Ae.$t("tool.blockingBoard.import.previewRoom"))+": "+S(g(f).preview.roomSize.widthM)+"Ã"+S(g(f).preview.roomSize.depthM),1),m("div",null,S(Ae.$t("tool.blockingBoard.import.previewProps"))+": "+S(g(f).preview.propCount),1),m("div",null,S(Ae.$t("tool.blockingBoard.import.previewActors"))+": "+S(g(f).preview.actorCount),1),m("div",null,S(Ae.$t("tool.blockingBoard.import.previewCameras"))+": "+S(g(f).preview.cameraCount),1),m("div",null,[We(S(Ae.$t("tool.blockingBoard.import.previewParts"))+": ",1),m("span",iK,S(g(f).preview.partCount),1)]),m("div",null,S(Ae.$t("tool.blockingBoard.import.previewIssues"))+": "+S(g(f).preview.issuesBySeverity.error)+"/"+S(g(f).preview.issuesBySeverity.warning)+"/"+S(g(f).preview.issuesBySeverity.info),1),I.value.length>0?(v(),k("div",rK,S(Ae.$t("tool.blockingBoard.import.sizeUnknownProps",{names:I.value.join(", ")})),1)):H("",!0),y.value.length>0?(v(),k("div",lK,S(Ae.$t("tool.blockingBoard.import.sizeUnknownOpenings",{names:y.value.join(", ")})),1)):H("",!0)])):H("",!0)]))])])]),m("div",cK,[Be.value?(v(),k("p",dK,S(Ae.$t(Be.value)),1)):(v(),k("p",uK,S(Ae.$t("tool.blockingBoard.optionMaxPartsHelp",{sec:g(Z).options.value.targetPartDurationSec})),1)),tt.value.length>1?(v(),k("label",pK,[m("span",fK,S(Ae.$t("tool.blockingBoard.import.apply")),1),Zt(m("select",{"onUpdate:modelValue":Ve[12]||(Ve[12]=ne=>js(ht)?ht.value=ne:null),name:"bb-import-mode",class:"bb-import-input"},[(v(!0),k(ae,null,Me(tt.value,ne=>(v(),k("option",{key:ne,value:ne},S(Ae.$t(`tool.blockingBoard.import.${yt(ne)}`)),9,mK))),128))],512),[[ps,g(ht)]])])):H("",!0),g(Ze)?(v(),k("div",hK,[m("div",bK,[m("strong",null,S(Ae.$t("tool.blockingBoard.s2s.reconvertWithSettings")),1),m("span",null,S(Ae.$t("tool.blockingBoard.s2s.confirmReconvertBody")),1)]),m("button",{type:"button",class:"bb-import-confirm-yes btn-md",onClick:ue},S(Ae.$t("tool.blockingBoard.reconvert")),1),m("button",{type:"button",class:"bb-import-confirm-no btn-md",onClick:Ve[13]||(Ve[13]=ne=>Ze.value=!1)},S(Ae.$t("tool.blockingBoard.cancel")),1)])):g(It)?(v(),k("div",gK,[m("div",vK,[m("strong",null,S(Ae.$t("tool.blockingBoard.import.confirmReplaceTitle")),1),m("span",null,S(Ae.$t("tool.blockingBoard.import.confirmReplaceBody")),1)]),m("button",{type:"button",class:"bb-import-confirm-yes btn-md",onClick:Ve[14]||(Ve[14]=ne=>At(Ae.$t("tool.blockingBoard.import.blankDefaultName")))},S(Ae.$t("tool.blockingBoard.import.confirmReplace")),1),m("button",{type:"button",class:"bb-import-confirm-no btn-md",onClick:Ve[15]||(Ve[15]=ne=>It.value=!1)},S(Ae.$t("tool.blockingBoard.cancel")),1)])):(v(),k(ae,{key:5},[m("button",{type:"button",class:"bb-import-cancel",onClick:Ve[16]||(Ve[16]=ne=>Ae.$emit("close"))},S(Ae.$t("tool.blockingBoard.cancel")),1),m("button",{type:"button",class:"bb-import-apply",disabled:!lt.value,onClick:Ve[17]||(Ve[17]=ne=>At(Ae.$t("tool.blockingBoard.import.blankDefaultName")))},S(Et.value?Ae.$t("tool.blockingBoard.import.createProject"):Ae.$t("tool.blockingBoard.import.apply")),9,yK)],64))])],32)],32)):H("",!0)}}}),IK=Object.assign(ot(SK,[["__scopeId","data-v-a5b6d86b"]]),{__name:"BbImportModal"}),wK={class:"bb-rim-dialog shadow-smd1",role:"dialog","aria-modal":"true","aria-labelledby":"bb-rim-title"},MK={class:"bb-rim-header"},$K={id:"bb-rim-title"},EK={class:"bb-rim-body-text"},xK={class:"bb-rim-all"},PK={class:"bb-rim-body"},CK=["data-kind"],BK={class:"bb-rim-group-title"},_K=["data-key","data-status"],AK={class:"bb-rim-text"},TK={class:"bb-rim-label"},RK={class:"bb-rim-status"}
243,DK={key:0,class:"bb-rim-fields"},OK=["aria-pressed","onClick"],NK=["aria-pressed","onClick"],LK={key:0,class:"bb-rim-same-count"},KK={key:0,class:"bb-rim-warnings",role:"alert"},FK={class:"bb-rim-warnings-title"},HK={class:"bb-rim-footer"},zK=nt({__name:"BbReimportConflictModal",props:{open:{type:Boolean},diff:{},current:{},incoming:{}},emits:["apply","cancel"],setup(e,{emit:t}){const n=e,o=t,a=G({});Je(()=>[n.open,n.diff],([b,I])=>{b&&I&&(a.value=AS(I))},{immediate:!0});const s=C(()=>{const b=n.diff;return b?FA.map(I=>{const y=b.items.filter(w=>w.kind===I);return{kind:I,rows:y.filter(w=>w.status!=="same"),sameCount:y.filter(w=>w.status==="same").length}}).filter(I=>I.rows.length>0):[]}),i=C(()=>{const{current:b,incoming:I,diff:y}=n;return!b||!I||!y?[]:DS(b,y.partId,I,y,a.value).issues.filter(w=>w.code==="REFERENCE_MISSING")}),r={changed:"changed",added:"added","removed-in-source":"removedInSource"};function l(b){return b.status==="added"?{keep:"skip",update:"add"}:b.status==="removed-in-source"?{keep:"keep",update:"remove"}:{keep:"keep",update:"update"}}function c(b,I){a.value={...a.value,[b]:I}}function d(b){n.diff&&(a.value=YA(n.diff,a.value,b))}function u(){o("apply",{...a.value})}Qo("reimportConflict",()=>n.open,b=>b.id==="overlay.close"&&o("cancel"));let p=!1;function f(b){p=b.target===b.currentTarget}function h(b){b.target!==b.currentTarget||!p||(p=!1,o("cancel"))}return(b,I)=>e.open&&e.diff?(v(),k("div",{key:0,class:"bb-rim-modal",onPointerdown:f,onClick:h},[m("div",wK,[m("div",MK,[m("h2",$K,S(b.$t("tool.blockingBoard.reimport.title")),1),m("p",EK,S(b.$t("tool.blockingBoard.reimport.body")),1),m("div",xK,[m("button",{type:"button",class:"bb-rim-all-update btn-md",onClick:I[0]||(I[0]=y=>d("update"))},S(b.$t("tool.blockingBoard.reimport.allUpdate")),1),m("button",{type:"button",class:"bb-rim-all-keep btn-md",onClick:I[1]||(I[1]=y=>d("keep"))},S(b.$t("tool.blockingBoard.reimport.allKeep")),1)])]),m("div",PK,[(v(!0),k(ae,null,Me(s.value,y=>(v(),k("section",{key:y.kind,class:"bb-rim-group","data-kind":y.kind},[m("h3",BK,S(b.$t(`tool.blockingBoard.reimport.kind.${y.kind}`))+" ("+S(y.rows.length)+") ",1),(v(!0),k(ae,null,Me(y.rows,w=>(v(),k("div",{key:w.key,class:"bb-rim-row","data-key":w.key,"data-status":w.status},[m("div",AK,[m("span",TK,S(w.kind==="cut"?b.$t("tool.blockingBoard.reimport.cutGroup",{current:w.counts?.current??0,incoming:w.counts?.incoming??0}):w.label),1),m("span",RK,S(b.$t(`tool.blockingBoard.reimport.status.${r[w.status]}`)),1),w.status==="changed"?(v(),k("span",DK,S(w.fields.map(M=>b.$t(`tool.blockingBoard.reimport.field.${M}`)).join(", ")),1)):H("",!0)]),m("button",{type:"button",class:"bb-rim-keep btn-md","aria-pressed":a.value[w.key]==="keep"?"true":"false",onClick:M=>c(w.key,"keep")},S(b.$t(`tool.blockingBoard.reimport.${l(w).keep}`)),9,OK),m("button",{type:"button",class:"bb-rim-update btn-md","aria-pressed":a.value[w.key]==="update"?"true":"false",onClick:M=>c(w.key,"update")},S(b.$t(`tool.blockingBoard.reimport.${l(w).update}`)),9,NK)],8,_K))),128)),y.sameCount>0?(v(),k("p",LK,S(b.$t("tool.blockingBoard.reimport.sameCount",{n:y.sameCount})),1)):H("",!0)],8,CK))),128))]),i.value.length>0?(v(),k("div",KK,[m("strong",FK,S(b.$t("tool.blockingBoard.reimport.warningsTitle")),1),(v(!0),k(ae,null,Me(i.value,(y,w)=>(v(),k("span",{key:w,class:"bb-rim-warning"},S(b.$t("tool.blockingBoard.reimport.brokenRef",{owner:y.params?.ownerLabel,missing:y.params?.missingLabel})),1))),128))])):H("",!0),m("div",HK,[m("button",{type:"button",class:"bb-rim-cancel btn-md",onClick:I[2]||(I[2]=y=>o("cancel"))},S(b.$t("tool.blockingBoard.cancel")),1),m("button",{type:"button",class:"bb-rim-apply btn-md",onClick:u},S(b.$t("tool.blockingBoard.reimport.apply")),1)])])],32)):H("",!0)}}),jK=Object.assign(ot(zK,[["__scopeId","data-v-f3e86a22"]]),{__name:"BbReimportConflictModal"});function Oa(e,t,n){const o=e.parts.find(u=>u.partId===t),a=[];e.sceneBackground&&a.push({key:"background",kind:"background",name:e.scene?.title??"",media:e.sceneBackground});for(const u of o?.castRefIds??[]){const p=e.refs.characters.find(f=>f.id===u);p?.media&&a.push({key:`char:${p.id}`,kind:"character",name:p.name,media:p.media})}const s=new Set;for(const u of[...e.room.props,...o?.props??[]]){if(!u.refId||s.has(u.refId))continue;const p=e.refs.props.find(f=>f.id===u.refId);p?.media&&(s.add(u.refId),a.push({key:`prop:${p.id}`,kind:"prop",name:p.name,media:p.media}))}const i=new Set(a.map(u=>u.key.slice(u.key.indexOf(":")+1))),r=[...e.refs.characters.map(u=>({ref:u,kind:"character"})),...e.refs.props.map(u=>({ref:u,kind:"prop"}))];for(const{ref:u,kind:p}of r)!u.standalone||!u.media||i.has(u.id)||a.push({key:`extra:${u.id}`,kind:p,name:u.name,media:u.media});let l=0;const c=a.map(u=>({...u,tag:n.excluded.has(u.key)?null:`@Image${++l}`})),d=bx(e.targetVideoModel);return{items:c,imageCount:l,limits:d,overImageLimit:!!d&&l>d.image,recording:UK(e,d,o?.durationSec)}}function UK(e,t,n){if(!t?.videoSec||t.video<1)return{allowed:!1,reason:"no-limit"};const o=za(e.targetVideoModel),a=n??0,s=Math.max(t.videoSec.eachMin,o?.minSec??0),i=Math.min(t.videoSec.eachMax,o?.maxSec??1/0);return a<s||a>i?{allowed:!1,reason:"out-of-range"}:{allowed:!0,reason:"ok"}}const od={forwardM:.25,heightRatio:1/1.7,dropForwardM:.4,scale2d:.6};function GK(e){return[...e.carryKeys??[]].sort((t,n)=>t.atSec-n.atSec)}function Xg(e,t,n){const o=In(t);return{x:e.x+o.x*n,y:e.y+o.y*n}}function Al(e,t,n){const o=new Map,a=e.parts.find(i=>i.partId===t);if(!a)return o;const s=(i,r)=>mn(i,r,{durationSec:a.durationSec});for(const i of a.actors){let r=null;for(const c of GK(i)){if(c.atSec>n)break;if(r!==null&&r!==c.propId){const d=s(i,c.atSec);o.set(r,{center:Xg(d.position,d.bodyDeg,od.dropForwardM),baseHeightM:0,
243carried:!1})}r=c.propId}if(r===null)continue;const l=s(i,n);o.set(r,{center:Xg(l.position,l.bodyDeg,od.forwardM),baseHeightM:wo(i)*od.heightRatio,carried:!0})}return o}const ma={bipedStrideFactor:.8,quadStrideFactor:1.1,hopStrideFactor:.5,walkAmpDeg:25,runAmpDeg:40,fullAmpSpeedMps:1.3,runSpeedMps:2.5,movingMinMps:.05};function vI(e){if(e==="horse")return"walk4";const t=ks(e);return t==="quadruped"?"trot":t==="bird"?"hop":"biped"}function VK(e){const t=vI(e.species);if(t==="biped")return ma.bipedStrideFactor*wo(e);const n=2*Vt(e);return t==="hop"?ma.hopStrideFactor*n:ma.quadStrideFactor*n}function WK(e,t){return(e/t%1+1)%1}const XK=.2;function YK(e,t){return e.loop?t%e.durationSec:Math.min(t,e.durationSec)}function qK(e,t,n){const o=t-e;if(o<=0)return 0;const a=Math.min(XK,o/2),s=Math.min((n-e)/a,(t-n)/a);return Math.max(0,Math.min(1,s))}function dh(e,t,n){const o={};for(const s of t.actions){if(!s.actorId)continue;const i=e.actors.find(c=>c.id===s.actorId);if(!i)continue;const r=Rm(s);if(!r||!La[r].figureKinds.includes(ks(i.species))||!mi({startSec:s.settledStartSec,endSec:s.settledEndSec},n))continue;const l=o[i.id];l&&s.settledStartSec<l.action.settledStartSec||(o[i.id]={action:s,motionId:r})}const a={};for(const[s,{action:i,motionId:r}]of Object.entries(o)){const l=Math.max(0,n-i.settledStartSec);a[s]={motionId:r,actionId:i.id,localSec:YK(La[r],l),weight:qK(i.settledStartSec,i.settledEndSec,n)}}return a}function ZK(e,t){return t.speedMps>ma.movingMinMps||t.poseFrom!=="stand"||t.poseTo!=="stand"?0:e}function yI(e){return(e.subject===null||e.subject===void 0)&&e.keys.length===0}const Xo={ok:!1,code:"HOMOGRAPHY_DEGENERATE"},JK=[[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]],QK=[[0,1,2],[0,1,3],[0,2,3],[1,2,3]];function Nf(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function e5(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(n.x-e.x)*(t.y-e.y))/2}function Nd(e){for(const[i,r]of JK)if(Nf(e[i],e[r])<1e-6)return!0;const t=e.map(i=>i.x),n=e.map(i=>i.y),o=Math.max(...t)-Math.min(...t),a=Math.max(...n)-Math.min(...n),s=o*o+a*a;for(const[i,r,l]of QK)if(e5(e[i],e[r],e[l])<1e-6*s)return!0;return!1}function Ld(e){const t=e.reduce((s,i)=>s+i.x,0)/e.length,n=e.reduce((s,i)=>s+i.y,0)/e.length,o=e.reduce((s,i)=>s+Math.hypot(i.x-t,i.y-n),0)/e.length,a=o>1e-12?Math.SQRT2/o:1;return{T:[a,0,-a*t,0,a,-a*n,0,0,1],points:e.map(s=>({x:a*(s.x-t),y:a*(s.y-n)}))}}function Kd(e,t){const n=new Array(9).fill(0);for(let o=0;o<3;o++)for(let a=0;a<3;a++)for(let s=0;s<3;s++)n[o*3+a]+=e[o*3+s]*t[s*3+a];return n}function kI(e,t){const o=e.map((r,l)=>[...r,t[l]]);let a=1/0,s=0;for(let r=0;r<8;r++){let l=r,c=Math.abs(o[r][r]);for(let u=r+1;u<8;u++){const p=Math.abs(o[u][r]);p>c&&(c=p,l=u)}if(l!==r){const u=o[r];o[r]=o[l],o[l]=u}const d=o[r][r];if(Math.abs(d)<1e-12)return null;a=Math.min(a,Math.abs(d)),s=Math.max(s,Math.abs(d));for(let u=r+1;u<8;u++){const p=o[u][r]/d;if(p!==0)for(let f=r;f<=8;f++)o[u][f]-=p*o[r][f]}}if(s/a>1e8)return null;const i=new Array(8).fill(0);for(let r=7;r>=0;r--){let l=o[r][8];for(let c=r+1;c<8;c++)l-=o[r][c]*i[c];i[r]=l/o[r][r]}return i}function SI(e,t){if(e.length!==4||t.length!==4||Nd(e)||Nd(t))return Xo;const n=Ld(e),o=Ld(t),a=[],s=[];for(let p=0;p<4;p++){const{x:f,y:h}=n.points[p],{x:b,y:I}=o.points[p];a.push([f,h,1,0,0,0,-b*f,-b*h]),s.push(b),a.push([0,0,0,f,h,1,-I*f,-I*h]),s.push(I)}const i=kI(a,s);if(!i)return Xo;const r=[i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],1],l=_u(o.T);if(!l)return Xo;const c=Kd(Kd(l,r),n.T),d=c[8];if(!Number.isFinite(d)||Math.abs(d)<1e-12)return Xo;const u=c.map(p=>p/d);return u.every(p=>Number.isFinite(p))?{ok:!0,H:u}:Xo}const t5=16;function n5(e,t){const n=e.length;for(let o=0;o<n;o++)for(let a=o+1;a<n;a++)for(let s=a+1;s<n;s++)for(let i=s+1;i<n;i++){const r=[o,a,s,i];if(!Nd(r.map(l=>e[l]))&&!Nd(r.map(l=>t[l])))return!0}return!1}function o5(e,t){if(e.length!==t.length||e.length<4||e.length>t5)return Xo;if(e.length===4)return SI(e,t);for(let f=0;f<e.length;f++)for(let h=f+1;h<e.length;h++)if(Nf(e[f],e[h])<1e-6||Nf(t[f],t[h])<1e-6)return Xo;if(!n5(e,t))return Xo;const n=Ld(e),o=Ld(t),a=Array.from({length:8},()=>new Array(8).fill(0)),s=new Array(8).fill(0),i=(f,h)=>{for(let b=0;b<8;b++){s[b]+=f[b]*h;for(let I=0;I<8;I++)a[b][I]+=f[b]*f[I]}};for(let f=0;f<e.length;f++){const{x:h,y:b}=n.points[f],{x:I,y}=o.points[f];i([h,b,1,0,0,0,-I*h,-I*b],I),i([0,0,0,h,b,1,-y*h,-y*b],y)}const r=kI(a,s);if(!r)return Xo;const l=[r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],1],c=_u(o.T);if(!c)return Xo;const d=Kd(Kd(c,l),n.T),u=d[8];if(!Number.isFinite(u)||Math.abs(u)<1e-12)return Xo;const p=d.map(f=>f/u);return p.every(f=>Number.isFinite(f))?{ok:!0,H:p}:Xo}function uh(e,t){const[n,o,a,s,i,r,l,c,d]=e,u=l*t.x+c*t.y+d;return{x:(n*t.x+o*t.y+a)/u,y:(s*t.x+i*t.y+r)/u}}
243function _u(e){const[t,n,o,a,s,i,r,l,c]=e,d=t*(s*c-i*l)-n*(a*c-i*r)+o*(a*l-s*r);if(!Number.isFinite(d)||Math.abs(d)<1e-12)return null;const u=1/d;return[(s*c-i*l)*u,(o*l-n*c)*u,(n*i-o*s)*u,(i*r-a*c)*u,(t*c-o*r)*u,(o*a-t*i)*u,(a*l-s*r)*u,(n*r-t*l)*u,(t*s-n*a)*u]}function a5(e,t){const[n,o,a,s,i,r,l,c,d]=e,u=t*n,p=t*s,f=l,h=t*o,b=t*i,I=c,y=t*a,w=t*r;return`matrix3d(${u},${p},0,${f},${h},${b},0,${I},0,0,1,0,${y},${w},0,${d})`}const s5=60,i5=/^@Image([1-9]\d*)$/,$n={cameraHeightM:{min:.05,max:30},cameraPitchDeg:{min:-90,max:90},cameraRollDeg:{min:-180,max:180},fovOverrideDeg:{min:Mt.fovOverrideMinDeg,max:Mt.fovOverrideMaxDeg},propSizeM:{min:.05,max:30},propElevationM:{min:0,max:10},roomSizeM:{min:hi,max:bi},partDurationSec:{min:3,max:Mt.partDurationMaxSec},coordinateAbsM:{min:-100,max:Mt.coordinateAbsMaxM}},r5=[{path:"durationSec",kind:"duration"},{path:"actors[].path.waypoints[].atSec",kind:"instant"},{path:"actors[].path.waypoints[].pauseSec",kind:"duration"},{path:"actors[].positionKeys[].atSec",kind:"instant"},{path:"actors[].facingKeys[].atSec",kind:"instant"},{path:"actors[].poseKeys[].atSec",kind:"instant"},{path:"cameras[].keys[].atSec",kind:"instant"},{path:"timeline.actions[].startSec",kind:"instant"},{path:"timeline.actions[].endSec",kind:"instant"},{path:"timeline.dialogues[].startSec",kind:"instant"},{path:"timeline.dialogues[].endSec",kind:"instant"},{path:"timeline.propEvents[].startSec",kind:"instant"},{path:"timeline.propEvents[].endSec",kind:"instant"},{path:"timeline.coverages[].startSec",kind:"instant"},{path:"timeline.coverages[].endSec",kind:"instant"},{path:"timeline.coverages[].anchor.offsetSec",kind:"duration"},{path:"timeline.cuts[].inSec",kind:"instant"},{path:"timeline.cuts[].outSec",kind:"instant"}];function Lf(e,t,n,o){if(t.length===0||e===null||typeof e!="object")return e;const[a,...s]=t,i=a.endsWith("[]"),r=i?a.slice(0,-2):a,l=e;if(!(r in l))return e;const c=l[r];let d;if(i){if(!Array.isArray(c))return e;d=c.map(u=>Lf(u,s,n,o))}else if(s.length===0){if(typeof c!="number")return e;d=o(c,n)}else d=Lf(c,s,n,o);return{...l,[r]:d}}function l5(e){return e.split(".")}function c5(e,t){let n=e;for(const o of r5)n=Lf(n,l5(o.path),o,t);return n}function d5(e,t){if(!Number.isFinite(t)||t<=0)throw new RangeError("scalePartTime factor must be a finite number greater than 0.");return c5(e,n=>n*t)}function u5(e,t){const n=e.parts.findIndex(r=>r.partId===t);if(n<0)return null;const o=e.parts[n],a=fs(o),s=wr(o,a),i=Y0(o,a,e.room,{fps:e.settings.fps});return{part:o,partIndex:n,settled:a,resolved:s,tracks:i}}const p5=90;function ph(e,t){const n={};for(const o of e.timeline.propEvents)mi({startSec:o.startSec,endSec:o.endSec},t)&&(n[o.targetId]={open:o.state.open,openAngleDeg:o.state.openAngleDeg??p5});return n}function f5(e,t,n){return{...Wa(e.part,e.settled,e.resolved,t.room,n,{easing:t.settings.easing,tracks:e.tracks}),openings:ph(e.part,n),motionClips:dh(e.part,e.settled,n)}}const Ns="tool.blockingBoard.";function m5(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Fd=e=>Number(e.toFixed(2));function Oi(e){const t=e.map((n,o)=>({c:n,i:o})).sort((n,o)=>n.c.inSec-o.c.inSec||n.i-o.i);return new Map(t.map(({c:n},o)=>[n.id,o+1]))}function Tl(e){const t=e.name?.trim();return t&&t!==e.id?e.name:null}function ui(e,t){return Tl(e)??t}function ka(e){const t={},{room:n}=e;t.room={key:`${Ns}tree.roomLabel`,params:{w:Fd(n.widthM),d:Fd(n.depthM)}};for(const o of n.openings)t[o.id]={key:`${Ns}openingKind.${o.kind.replace("-","")}`};for(const o of n.props)t[o.id]=o.name?.trim()?{text:o.name}:{key:`${Ns}inspector.prop`};for(const o of[...e.refs.characters,...e.refs.backgrounds,...e.refs.props])t[o.id]={text:o.name};for(const o of e.parts){t[o.partId]={text:o.title};for(const s of o.actors)t[s.id]={text:s.name};for(const s of o.props)t[s.id]=s.name?.trim()?{text:s.name}:{key:`${Ns}inspector.prop`};o.cameras.forEach((s,i)=>{const r=Tl(s);t[s.id]=r?{text:r}:{key:`${Ns}cameraFallback`,params:{n:i+1}}});const a=Oi(o.timeline.cuts);for(const s of o.timeline.cuts)t[s.id]={key:`${Ns}cutLabel`,params:{n:a.get(s.id)}};for(const s of o.timeline.coverages)t[s.id]={key:`${Ns}shotType.${m5(s.shotType)}`};for(const s of o.timeline.actions)t[s.id]={text:s.actionType};for(const s of o.timeline.dialogues)t[s.id]={text:s.line}}for(const o of e.parts)for(const a of o.timeline.propEvents)t[a.id]=t[a.targetId]??{key:`${Ns}validation.unknownTarget`};return t}function fh(e){const t=e.params,n=t?.otherId??t?.obstacleId??t?.blockerId??t?.doorId;return typeof n=="string"?n:null}function II(e,t){const n=fh(e);if(n===null)return null;if(n in t)return t[n];const o=fu(n);return o?{wallSide:o}:null}function wI(e,t){const n=e.filter(s=>{const i=/^parts\[(\d+)\]/.exec(s.path);return!i||Number(i[1])===t}),o=new Set,a=[];for(const s of n){const i=`${s.code}|${JSON.stringify(s.params??{})}`;o.has(i)||(o.add(i),a.push(s))}return a}function MI(e,t,n,o){const a=e.map(n),s=new Map;return e.forEach((i,r)=>{const l=a[r],c=t(i);!l||c===null||(s.has(l)||s.set(l,new Set),s.get(l).add(c))}),e.map((i,r)=>{const l=a[r],c=t(i);if(!l||c===null||(s.get(l)?.size??0)<2)return l;const d=o(c);return d?`${l} (${Fd(d.x)}m, ${Fd(d.y)}m)`:l})}function h5(e,t){const n=/c(\d+)$/i.exec(e);return`C${n?n[1]:t+1}`}const b5={actor:"tool.blockingBoard.inspector.actor",camera:"tool.blockingBoard.inspector.camera",prop:"tool.blockingBoard.inspector.prop",o
243pening:"tool.blockingBoard.inspector.opening",room:"tool.blockingBoard.inspector.room",action:"tool.blockingBoard.inspector.action",dialogue:"tool.blockingBoard.inspector.dialogue",coverage:"tool.blockingBoard.inspector.coverage",cut:"tool.blockingBoard.inspector.cut",part:"tool.blockingBoard.tree.part",reference:"tool.blockingBoard.inspector.ref"};function $I(e){const t=C(()=>e().selection?.primary??null),n=C(()=>{const s=e().snapshot,i=t.value;if(!s||!i)return"room";const r=s.parts.find(d=>d.partId===e().partId);if(r?.partId===i)return"part";if(r?.actors.some(d=>d.id===i))return"actor";if(r?.cameras.some(d=>d.id===i))return"camera";if([...s.room.props,...r?.props??[]].some(d=>d.id===i))return"prop";if(s.room.openings.some(d=>d.id===i))return"opening";if(r?.timeline.actions.some(d=>d.id===i))return"action";if(r?.timeline.dialogues.some(d=>d.id===i))return"dialogue";if(r?.timeline.coverages.some(d=>d.id===i))return"coverage";if(r?.timeline.cuts.some(d=>d.id===i))return"cut";const c=s.refs;return[...c.characters,...c.backgrounds,...c.props].some(d=>d.id===i)?"reference":"room"}),o=C(()=>{const s=e().snapshot;return s?ka(s)[n.value==="room"?"room":t.value]??null:null}),a=C(()=>{if(n.value==="actor"){const i=e().snapshot?.parts.find(r=>r.partId===e().partId)?.actors.find(r=>r.id===t.value);if(i&&i.species!=="human")return"tool.blockingBoard.inspector.animal"}return b5[n.value]});return{kind:n,kindKey:a,titleLabel:o}}function g5(e,t){return t.min!==void 0&&e<t.min?"below":t.max!==void 0&&e>t.max?"above":"ok"}const v5=4;function Qr(e){return String(Number(e.toFixed(v5)))}function y5(e,t,n){const o=Qr(n);return e.min!==void 0&&e.max!==void 0?{key:"tool.blockingBoard.field.outOfRange",params:{min:Qr(e.min),max:Qr(e.max),unit:t,prev:o}}:e.min!==void 0?{key:"tool.blockingBoard.field.belowMin",params:{min:Qr(e.min),unit:t,prev:o}}:{key:"tool.blockingBoard.field.aboveMax",params:{max:Qr(e.max??0),unit:t,prev:o}}}const Yg="tool.blockingBoard.fieldInvalid",k5=/[+*/()]|(?!^-)-/;function qg(e){const t=e.trim();if(t==="")return!1;const n=t.replace(/^[+-]/,"");return k5.test(n)}class _c extends Error{}function S5(e){let t=0;function n(){return e[t]}function o(){for(;n()===" ";)t++}function a(){o();const c=t;for(;t<e.length&&/[0-9.]/.test(e[t]);)t++;const d=e.slice(c,t);if(d===""||!/^\d*\.?\d+$|^\d+\.?\d*$/.test(d))throw new _c;return Number(d)}function s(){if(o(),n()==="-")return t++,-s();if(n()==="+")return t++,s();if(n()==="("){t++;const c=r();if(o(),n()!==")")throw new _c;return t++,c}return a()}function i(){let c=s();for(;;){o();const d=n();if(d==="*"||d==="/"){t++;const u=s();if(d==="*")c*=u;else{if(u===0)throw new _c;c/=u}}else break}return c}function r(){let c=i();for(;;){o();const d=n();if(d==="+"||d==="-"){t++;const u=i();c=d==="+"?c+u:c-u}else break}return c}const l=r();if(o(),t!==e.length)throw new _c;return l}function Zg(e){if(typeof e!="string"||e.trim()===""||!/^[0-9+\-*/().\s]+$/.test(e))return null;try{const t=S5(e);return Number.isFinite(t)?Number(t.toFixed(10)):null}catch{return null}}const I5={m:2,"°":1,s:2,mm:0},Jg=4;function w5(e,t){return t||!e?Jg:I5[e]??Jg}function M5(e,t,n){const o=10**w5(t,n),a=Math.round(Math.abs(e)*o*(1+1e-12))/o;return String(e<0&&a!==0?-a:a)}const $5=3,wp={m:{perPx:.01,snapStep:.1},s:{perPx:.01,snapStep:.1},"°":{perPx:.5,snapStep:5}},E5=4;function x5(e){const t=e.slow?e.perPx*.1:e.perPx;let n=e.start+e.dxPx*t;return e.snap&&e.snapStep&&(n=Math.round(n/e.snapStep)*e.snapStep),e.min!==void 0&&(n=Math.max(e.min,n)),e.max!==void 0&&(n=Math.min(e.max,n)),Number(n.toFixed(E5))}const P5=["data-state","aria-label","title"],C5=nt({__name:"BbKeyDiamond",props:{state:{}},emits:["toggle"],setup(e,{emit:t}){const n=e,o=t;return(a,s)=>(v(),k("button",{type:"button",class:"bb-key-diamond","data-state":n.state,"aria-label":n.state==="here"?a.$t("tool.blockingBoard.inspector.keyRemove"):a.$t("tool.blockingBoard.inspector.keyAdd"),title:n.state==="here"?a.$t("tool.blockingBoard.inspector.keyRemove"):a.$t("tool.blockingBoard.inspector.keyAdd"),onClick:s[0]||(s[0]=i=>o("toggle"))},null,8,P5))}}),EI=Object.assign(ot(C5,[["__scopeId","data-v-ddd2df97"]]),{__name:"BbInspectorBbKeyDiamond"}),B5=["disabled"],_5=["value","disabled","title"],A5=["checked","disabled"],T5=["value","disabled"],R5={key:3,class:"bb-field-value-row"},D5={key:0,class:"bb-field-prefix","aria-hidden":"true"},O5=["inputmode","value","placeholder","min","max","step","disabled","readonly"],N5=["aria-label","t
243itle"],L5={key:4,class:"bb-field-error"},K5=4,F5=nt({__name:"BbField",props:{modelValue:{type:[String,Number,Boolean,null]},type:{default:"text"},label:{},options:{default:()=>[]},min:{default:void 0},max:{default:void 0},step:{default:void 0},unit:{default:void 0},placeholder:{default:void 0},allowEmpty:{type:Boolean,default:!1},error:{default:null},disabled:{type:Boolean,default:!1},compact:{type:Boolean,default:!1},inputClass:{default:void 0},scrubUnit:{default:void 0},keyState:{default:void 0},defaultValue:{default:void 0},prefix:{default:void 0},bare:{type:Boolean,default:!1}},emits:["commit","key-toggle"],setup(e,{emit:t}){const n=e,o=t,a=G(null),s=G(!1);function i(Q,$e=!1){return Q===null?"":n.type==="number"&&typeof Q=="number"&&Number.isFinite(Q)?M5(Q,n.unit,s.value||$e):String(Q)}const r=G(!1),l=G(i(n.modelValue)),c=G(n.modelValue),d=G(null),u=G(!1),p=G(!1),f=G("idle"),h=G(0),b=G(0),I=G(!1);Je(()=>n.modelValue,Q=>{c.value=Q,!r.value&&(l.value=i(Q),d.value=null,u.value=!1,p.value=!1)});const y=C(()=>d.value?.key??n.error??null),w=C(()=>d.value?.params);function M(Q){if(n.min===void 0&&n.max===void 0||g5(Q,{min:n.min,max:n.max})==="ok")return null;const Fe=typeof n.modelValue=="number"?n.modelValue:Q;return y5({min:n.min,max:n.max},n.unit??"",Fe)}function x(Q){return typeof Q=="number"&&typeof n.modelValue=="number"?Math.abs(Q-n.modelValue)<1e-9:Q===n.modelValue}function _(){r.value=!0}function O(){r.value=!1}function A(Q){l.value=Q.target.value,p.value=!0,d.value=null,u.value=!1}function N(){hn(()=>{r.value||p.value||(l.value=i(n.modelValue))})}function K(Q){if(qg(Q))return Zg(Q);const $e=Number(Q);return Number.isFinite($e)?$e:null}function F(){if(!(r.value||!p.value)){if(n.type==="number"){if(l.value.trim()===""){if(n.allowEmpty){d.value=null,u.value=!1,p.value=!1,o("commit",null),N();return}d.value={key:Yg};return}const Q=K(l.value);if(Q===null){d.value={key:Yg};return}const $e=M(Q);if($e){d.value=$e,u.value=!0,l.value=i(n.modelValue),p.value=!1;return}if(x(Q)){d.value=null,u.value=!1,p.value=!1;return}d.value=null,u.value=!1,p.value=!1,o("commit",Q),N();return}if(x(l.value)){d.value=null,p.value=!1;return}d.value=null,p.value=!1,o("commit",l.value),N()}}function B(){s.value=!0,!(n.type!=="number"||p.value||r.value)&&f.value==="idle"&&(l.value=i(n.modelValue),a.value&&(a.value.value=l.value))}function j(){F(),s.value=!1,n.type==="number"&&!p.value&&!r.value&&f.value==="idle"&&(l.value=i(n.modelValue))}wn(()=>{if(!(r.value||!p.value)){if(n.type==="number"){if(l.value.trim()===""){n.allowEmpty&&o("commit",null);return}const Q=K(l.value);if(Q===null||M(Q))return;o("commit",Q);return}o("commit",l.value)}});const ee=C(()=>n.scrubUnit?wp[n.scrubUnit]:n.unit&&n.unit in wp?wp[n.unit]:{perPx:n.step??.01,snapStep:n.step??.1});function D(){l.value=i(n.modelValue),f.value="idle",I.value=!1,a.value?.blur()}function Z(Q){if(n.type!=="number"||n.disabled||Q.button!==0||document.activeElement===a.value)return;Q.preventDefault(),a.value?.setPointerCapture?.(Q.pointerId),f.value="pressing",h.value=Q.clientX;const $e=n.placeholder?Number(n.placeholder):Number.NaN;b.value=typeof n.modelValue=="number"?n.modelValue:Number.isFinite($e)?$e:0}function L(Q){if(f.value==="idle")return;const $e=Q.clientX-h.value;if(f.value==="pressing"){if(Math.abs($e)<=$5)return;f.value="scrubbing",I.value=!0,hn(()=>a.value?.focus({preventScroll:!0}))}const Fe=ee.value,Ze=x5({start:b.value,dxPx:$e,perPx:Fe.perPx,slow:Q.shiftKey,snap:Q.ctrlKey||Q.metaKey,snapStep:Fe.snapStep,min:n.min,max:n.max});l.value=i(Ze,!0)}function V(){if(f.value==="scrubbing"){const Q=Number(l.value);f.value="idle",I.value=!1,Number.isFinite(Q)&&Math.abs(Q-b.value)>1e-9&&o("commit",Q),a.value?.blur();return}f.value==="pressing"&&(f.value="idle",a.value?.focus(),a.value?.select())}function pe(){f.value==="scrubbing"?D():f.value="idle"}function le(Q){if(Q.key==="Escape"){if(f.value==="scrubbing"){D();return}if(r.value||Q.isComposing)return;l.value=i(n.modelValue),p.value=!1,d.value=null,u.value=!1;return}Q.key==="Enter"&&(r.value||Q.isComposing||F())}function me(){const Q=c.value;o("commit",Q),hn(()=>{c.value=n.modelValue})}function oe(Q){const $e=Q.target;o("commit",$e.checked),hn(()=>{$e.checked=!!n.modelValue})}const fe=C(()=>
243{if(n.type!=="number"||!p.value||!qg(l.value))return null;const Q=Zg(l.value);if(Q===null)return"";const $e=Number(Q.toFixed(K5));return n.unit?`= ${$e} ${n.unit}`:`= ${$e}`}),X=C(()=>fe.value??(n.bare?void 0:n.unit));function re(){o("commit",n.defaultValue)}const Se=C(()=>n.defaultValue===void 0?!1:n.defaultValue===null?n.modelValue!==null:typeof n.modelValue!="number"?!0:Math.abs(n.modelValue-n.defaultValue)>1e-9);return(Q,$e)=>{const Fe=vn;return v(),k("label",{class:qe(["bb-field",[`bb-field--${e.type}`,{"bb-field--row":!e.compact,"bb-field--bare":e.bare,"bb-field--out-of-range":u.value,"bb-field--scrubbing":f.value==="scrubbing","bb-field--key-other":e.keyState==="other","bb-field--key-here":e.keyState==="here"}]])},[m("span",{class:qe(["bb-field-label",{"sr-only":e.compact}])},S(Q.$t(e.label)),3),e.type==="select"?Zt((v(),k("select",{key:0,"onUpdate:modelValue":$e[0]||($e[0]=Ze=>c.value=Ze),class:qe(["bb-field-select",e.inputClass]),disabled:e.disabled,onChange:me},[(v(!0),k(ae,null,Me(e.options,Ze=>(v(),k("option",{key:String(Ze.value),value:Ze.value,disabled:Ze.disabled,title:Ze.title},S(Ze.label),9,_5))),128))],42,B5)),[[ps,c.value]]):e.type==="checkbox"?(v(),k("input",{key:1,type:"checkbox",class:"bb-field-checkbox bb-switch",role:"switch",checked:!!e.modelValue,disabled:e.disabled,onChange:oe},null,40,A5)):e.type==="color"?(v(),k("input",{key:2,type:"color",class:"bb-field-color",value:l.value,disabled:e.disabled,onInput:A,onChange:j},null,40,T5)):(v(),k("span",R5,[m("span",{class:qe(["bb-field-input-group",{"bb-field-input-group--reset":Se.value}])},[e.prefix?(v(),k("span",D5,S(e.prefix),1)):H("",!0),m("input",{ref_key:"inputRef",ref:a,class:qe(["bb-field-input",[{"bb-field-input--unit":X.value,"bb-field-input--prefix":e.prefix},e.inputClass]]),type:"text",inputmode:e.type==="number"?"decimal":void 0,value:l.value,placeholder:e.placeholder,min:e.min,max:e.max,step:e.step,disabled:e.disabled,readonly:I.value,onInput:A,onFocus:B,onBlur:j,onKeydown:le,onCompositionstart:_,onCompositionend:O,onPointerdown:Z,onPointermove:L,onPointerup:V,onLostpointercapture:pe},null,42,O5),X.value!==void 0&&X.value!==null?(v(),k("span",{key:1,class:qe(["bb-field-unit",{"bb-field-unit--expr":fe.value!==null}])},S(X.value),3)):H("",!0),f.value==="scrubbing"&&e.min!==void 0&&e.max!==void 0?(v(),k("div",{key:2,class:"bb-field-scrub-fill",style:wt({width:`${Math.min(100,Math.max(0,(Number(l.value)-e.min)/(e.max-e.min)*100))}%`})},null,4)):H("",!0),Se.value?(v(),k("button",{key:3,type:"button",class:"bb-field-reset","aria-label":Q.$t("tool.blockingBoard.inspector.resetDefault"),title:Q.$t("tool.blockingBoard.inspector.resetDefault"),onClick:re},[ce(Fe,{name:"i-lucide-rotate-ccw",class:"size-[12px]"})],8,N5)):H("",!0)],2),e.keyState?(v(),et(EI,{key:0,state:e.keyState,onToggle:$e[1]||($e[1]=Ze=>o("key-toggle"))},null,8,["state"])):H("",!0)])),y.value?(v(),k("span",L5,S(Q.$t(y.value,w.value)),1)):H("",!0)],2)}}}),ft=Object.assign(ot(F5,[["__scopeId","data-v-775575b8"]]),{__name:"BbInspectorBbField"}),H5=["aria-label"],z5=["data-severity"],j5=nt({__name:"BbInspectorAction",props:{snapshot:{},partId:{},actionId:{},issues:{}}
243,emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.parts.find(_=>_.partId===n.partId)),s=C(()=>a.value?.timeline.actions.find(_=>_.id===n.actionId)),i=C(()=>[...n.snapshot.room.props,...a.value?.props??[]]),r=C(()=>n.issues?.filter(_=>_.targetId===n.actionId)??[]);function l(_){return _.messageKey.replace(".issue.",".hint.")}function c(_){o("command",{type:"action.trim",actionId:n.actionId,..._})}function d(_){o("command",{type:"action.setField",actionId:n.actionId,patch:_})}function u(_){d({actorId:_})}function p(_){d({actionClass:_})}function f(_){const O=_===""?null:_;!s.value||O===(s.value.motionId??null)||o("command",{type:"action.setMotion",actionId:n.actionId,motionId:O})}function h(_){d({targetPropId:_===""?void 0:_})}function b(_){d({targetOpeningId:_===""?void 0:_})}const I=C(()=>(a.value?.actors??[]).map(_=>({value:_.id,label:_.name})));function y(_){return o0.map(O=>({value:O,label:_(`tool.blockingBoard.actionClass.${O}`)}))}function w(_){const O=s.value;if(!O)return[];const A=f0(O.actionType),N=O.actorId?a.value?.actors.find(B=>B.id===O.actorId):void 0,K=O.actorId?ks(N?.species):null,F=[{value:"",label:A?_("tool.blockingBoard.motionClip.auto",{name:_(La[A].labelKey)}):_("tool.blockingBoard.motionClip.autoEmpty")},{value:p0,label:_("tool.blockingBoard.motionClip.none")},...Tm.map(B=>({value:B,label:_(La[B].labelKey),disabled:K!==null&&!La[B].figureKinds.includes(K)}))];return O.motionId!==void 0&&!bu(O.motionId)&&F.push({value:O.motionId,label:_("tool.blockingBoard.motionClip.unknown",{id:O.motionId}),disabled:!0}),F}const M=C(()=>[{value:"",label:"â"},...i.value.map(_=>({value:_.id,label:_.name}))]);function x(_){return[{value:"",label:"â"},...n.snapshot.room.openings.map(O=>({value:O.id,label:`${_(`tool.blockingBoard.openingKind.${O.kind.replace("-","")}`)} · ${_(`tool.blockingBoard.inspector.${O.wall}`)}`}))]}return(_,O)=>g(s)?(v(),k("div",{key:0,class:"bb-inspector bb-inspector-action","aria-label":_.$t("tool.blockingBoard.inspector.action")},[(v(!0),k(ae,null,Me(g(r),A=>(v(),k("div",{key:A.code+A.path,class:"bb-inspector-issue","data-severity":A.severity},S(_.$t(A.messageKey))+" · "+S(_.$t(l(A))),9,z5))),128)),ce(ft,{"data-field":"actorId",type:"select","model-value":g(s).actorId??"",options:g(I),label:"tool.blockingBoard.inspector.actor",onCommit:O[0]||(O[0]=A=>u(A))},null,8,["model-value","options"]),ce(ft,{"data-field":"startSec",type:"number","model-value":g(s).startSec,min:0,max:g(a)?.durationSec,unit:"s",label:"tool.blockingBoard.inspector.startSec",onCommit:O[1]||(O[1]=A=>c({startSec:A}))},null,8,["model-value","max"]),ce(ft,{"data-field":"endSec",type:"number","model-value":g(s).endSec,min:0,max:g(a)?.durationSec,unit:"s",label:"tool.blockingBoard.inspector.endSec",onCommit:O[2]||(O[2]=A=>c({endSec:A}))},null,8,["model-value","max"]),ce(ft,{"data-field":"actionType",type:"text","model-value":g(s).actionType,label:"tool.blockingBoard.inspector.actionType",onCommit:O[3]||(O[3]=A=>d({actionType:A}))},null,8,["model-value"]),ce(ft,{"data-field":"actionClass",type:"select","model-value":g(s).actionClass,options:y(_.$t),label:"tool.blockingBoard.inspector.actionClass",onCommit:O[4]||(O[4]=A=>p(A))},null,8,["model-value","options"]),ce(ft,{"data-field":"motionClip",type:"select","model-value":g(s).motionId??"",options:w(_.$t),label:"tool.blockingBoard.inspector.motionClip",onCommit:O[5]||(O[5]=A=>f(A))},null,8,["model-value","options"]),ce(ft,{"data-field":"textKo",type:"text","model-value":g(s).text.ko??"",label:"tool.blockingBoard.inspector.textKo",onCommit:O[6]||(O[6]=A=>d({text:{...g(s).text,ko:A}}))},null,8,["model-value"]),ce(ft,{"data-field":"textEn",type:"text","model-value":g(s).text.en??"",label:"tool.blockingBoard.inspector.textEn",onCommit:O[7]||(O[7]=A=>d({text:{...g(s).text,en:A}}))},null,8,["model-value"]),ce(ft,{"data-field":"targetPropId",type:"select","model-value":g(s).targetPropId??"",options:g(M),label:"tool.blockingBoard.inspector.targetProp",onCommit:O[8]||(O[8]=A=>h(A))},null,8,["model-value","options"]),ce(ft,{"data-field":"targetOpeningId",type:"select","model-value":g(s).targetOpeningId??"",options:x(_.$t),label:"tool.blockingBoard.inspector.targetOpening",onCommit:O[9]||(O[9]=A=>b(A))}
243,null,8,["model-value","options"])],8,H5)):H("",!0)}}),U5=Object.assign(ot(j5,[["__scopeId","data-v-b6daccc3"]]),{__name:"BbInspectorAction"}),G5=["n","ne","e","se","s","sw","w","nw"],V5=.05,W5=.5,X5=5,Y5=15,q5=.1,Qg=.05,ev=30;function Tn(e){return Math.round(e*1e6)/1e6||0}function Kf(e,t){return Tn(Math.round(e/t)*t)}function si(e,t){if(!t.snap)return e;const n=t.shift?W5:V5;return{x:Kf(e.x,n),y:Kf(e.y,n)}}function xI(e,t){const n=t.shift?Y5:X5;return Qt(t.snap?Kf(e,n):e)}function Z5(e,t){const n={x:t.includes("e")?e.depthM/2:t.includes("w")?-e.depthM/2:0,y:t.includes("s")?e.widthM/2:t.includes("n")?-e.widthM/2:0};return Bi({...e,headingDeg:e.headingDeg??0},n)}const J5=8,Q5=6,e3=["ne","se","sw","nw"];function t3(e,t){if(Math.min(e.widthM,e.depthM)*t>=J5*3)return G5.map(s=>({handle:s,point:Z5(e,s)}));const o=Q5/t,a={...e,headingDeg:e.headingDeg??0};return e3.map(s=>{const i=s.includes("e")?1:-1,r=s.includes("s")?1:-1,l={x:i*(e.depthM/2+o),y:r*(e.widthM/2+o)};return{handle:s,point:Bi(a,l)}})}function n3(e,t){const n=In(t),o=ho(t);return{x:e.x*n.x+e.y*n.y,y:e.x*o.x+e.y*o.y}}function o3(e,t,n){let o=e.widthM,a=e.depthM;return t.includes("e")&&(a+=n.x),t.includes("w")&&(a-=n.x),t.includes("s")&&(o+=n.y),t.includes("n")&&(o-=n.y),{widthM:Math.min(ev,Math.max(Qg,o)),depthM:Math.min(ev,Math.max(Qg,a))}}function a3(e,t,n){const o=o3(e,t,n),a=t.includes("e")?1:t.includes("w")?-1:0,s=t.includes("s")?1:t.includes("n")?-1:0,i=a*((o.depthM-e.depthM)/2),r=s*((o.widthM-e.widthM)/2),l=Bi({center:e.center,widthM:e.widthM,depthM:e.depthM,headingDeg:e.headingDeg},{x:i,y:r});return{center:{x:Tn(l.x),y:Tn(l.y)},...o}}function s3(e,t,n=q5){const o=pr(e),a=(o.maxX-o.minX)/2,s=(o.maxY-o.minY)/2;let i=e.center.x,r=e.center.y,l=n,c=n;for(const d of t){const u=pr(d),p=[[o.maxX,u.minX,-1],[o.minX,u.maxX,1],[o.maxX,u.maxX,-1],[o.minX,u.minX,1]];for(const[h,b,I]of p){const y=Math.abs(h-b);y<l&&(l=y,i=Tn(b+I*a))}const f=[[o.maxY,u.minY,-1],[o.minY,u.maxY,1],[o.maxY,u.maxY,-1],[o.minY,u.minY,1]];for(const[h,b,I]of f){const y=Math.abs(h-b);y<c&&(c=y,r=Tn(b+I*s))}}return{x:i,y:r}}function mh(e,t,n){const o=t.wall==="north"||t.wall==="south",a=o?n.x+e.widthM/2:n.y+e.depthM/2,s=o?e.widthM:e.depthM;return Math.min(Math.max(a-t.widthM/2,0),Math.max(0,s-t.widthM))}function i3(e,t){return Math.hypot(e,t)<3}function tr(e,t){return Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI}function r3(e){return e.displayed?.headingDeg??e.authored.headingDeg}function l3(e){return e.displayed?.position??e.authored.position}function tv(e,t,n,o){return xI(e+(n-t),o)}function hh(e,t,n){const o=t.x-e.start.position.x,a=t.y-e.start.position.y;return Math.hypot(o,a)<1e-6?{type:"actor.moveStart",actorId:e.id,position:n}:{type:"actor.translate",actorId:e.id,delta:{x:Tn(n.x-t.x),y:Tn(n.y-t.y)}}}function cl(e,t,n,o){return zm(e,t,n,o).position}function PI(e,t,n){if(!t)return e;const o=new Set([t.id,...Es(t,n).map(a=>a.id)]);return e.filter(a=>!o.has(a.id))}function CI(e,t,n){return jm(e,t,n).center}function c3(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)}function d3(e){const t=Mt.coordinateAbsMaxM;return Math.abs(e.x)<=t&&Math.abs(e.y)<=t}function BI(e,t,n,o){const a=e.parts.find(s=>s.partId===t);return a?!!(a.actors.some(s=>s.id===o&&s.id!==n)||a.cameras.some(s=>s.id===o)||e.room.props.some(s=>s.id===o)||a.props.some(s=>s.id===o)):!1}function _I(e){return[...e].sort((t,n)=>t.atSec-n.atSec)}function u3(e,t,n){const o=e.parts.find(c=>c.partId===n.partId),a=o?.actors.find(c=>c.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(!t.travel&&t.targetId!==void 0){if(t.targetId===t.actorId)return ie("SCHEMA_INVALID","targetId");if(!BI(e,n.partId,t.actorId,t.targetId))return ie("REFERENCE_MISSING","targetId",{referencedId:t.targetId})}if(a.facingKeys.length>=Mt.keysPerTrack)return ie("LIMIT_EXCEEDED","facingKeys");const s=Yn(t.atSec,0,o.durationSec),i=Qt(t.headingDeg),r={atSec:s,headingDeg:i,...t.travel?{travel:!0}:t.targetId!==void 0?{targetId:t.targetId}:{}},l=1/n.fps;return qn(e,n.partId,t.actorId,c=>({...c,facingKeys:_I([...c.facingKeys.filter(d=>Math.abs(d.atSec-s)>=l),r])}))}function p3(e,t,n){const o=e.parts.find(r=>r.partId===n.partId),a=o?.actors.find(r=>r.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(t.index<0||t.index>=a.facingKeys.length)return ie("REFERENCE_MISSING","index",{referencedId:t.index});const s=Yn(t.atSec,0,o.durationSec),i=1/n.fps;return qn(e,n.partId,t.actorId,r=>{const l={...r.facingKeys[t.index],atSec:s},c=r.facingKeys.filter((d,u)=>u!==t.index&&Math.abs(d.atSec-s)>=i);return{...r,facingKeys:_I([...c,l])}})}function f3(e,t,n){const o=e.parts.find(s=>s.partId===n.partId),a=o?.actors.find(s=>s.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(t.index<0||t.index>=a.facingKeys.length)return ie("REFERENCE_MISSING","index",{referencedId:t.index});if(t.patch.targetId!==void 0&&t.patch.targetId!==null){if(t.patch.targetId===t.actorId)return ie("SCHEMA_INVALID","patch.targetId");if(!BI(e,n.partId,t.actorId,t.patch.targetId))return ie("REFERENCE_MISSING","patch.targetId",{referencedId:t.patch.targetId})}return qn(e,n.partId,t.actorId,s=>({...s,facingKeys:s.facingKeys.map((i,r)=>{if(r!==t.index)return i;const l={...i};return(t.patch.headingDeg!==void 0||t.patch.targetId)&&delete l.travel,t.patch.headingDeg!==void 0&&(l.headingDeg=Qt
243(t.patch.headingDeg)),t.patch.targetId===null?delete l.targetId:t.patch.targetId!==void 0&&(l.targetId=t.patch.targetId),l})}))}function m3(e,t,n){const o=e.parts.find(s=>s.partId===n.partId),a=o?.actors.find(s=>s.id===t.actorId);return!o||!a?ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId}):t.index<0||t.index>=a.facingKeys.length?ie("REFERENCE_MISSING","index",{referencedId:t.index}):qn(e,n.partId,t.actorId,s=>({...s,facingKeys:s.facingKeys.filter((i,r)=>r!==t.index)}))}function h3(e,t,n){const o=e.parts.find(s=>s.partId===n.partId),a=o?.actors.find(s=>s.id===t.actorId);return!o||!a?ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId}):t.index<0||t.index>=a.positionKeys.length?ie("REFERENCE_MISSING","index",{referencedId:t.index}):c3(t.point)?d3(t.point)?qn(e,n.partId,t.actorId,s=>({...s,positionKeys:s.positionKeys.map((i,r)=>r===t.index?{...i,x:t.point.x,y:t.point.y}:i)})):ie("LIMIT_EXCEEDED","point"):ie("SCHEMA_INVALID","point")}function b3(e,t,n){const o=e.parts.find(s=>s.partId===n.partId),a=o?.actors.find(s=>s.id===t.actorId);return!o||!a?ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId}):qn(e,n.partId,t.actorId,s=>({...s,positionKeys:[]}))}function g3(e,t,n){const o=e.parts.find(d=>d.partId===n.partId),a=o?.actors.find(d=>d.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});const s=gS(e,n.partId,t.pose,t.seatPropId);if(!s.ok)return s;const i=Yn(t.atSec,0,o.durationSec),r=1/n.fps,l=a.poseKeys.filter(d=>Math.abs(d.atSec-i)>=r);if(l.length>=Mt.keysPerTrack)return ie("LIMIT_EXCEEDED","poseKeys");const c=s.seatPropId!==void 0?{atSec:i,pose:t.pose,seatPropId:s.seatPropId}:{atSec:i,pose:t.pose};return qn(e,n.partId,t.actorId,d=>({...d,poseKeys:[...l,c].sort((u,p)=>u.atSec-p.atSec)}))}function v3(e,t,n){const o=e.parts.find(s=>s.partId===n.partId),a=o?.actors.find(s=>s.id===t.actorId);return!o||!a?ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId}):t.index<0||t.index>=a.poseKeys.length?ie("REFERENCE_MISSING","index",{referencedId:t.index}):qn(e,n.partId,t.actorId,s=>({...s,poseKeys:s.poseKeys.filter((i,r)=>r!==t.index)}))}const y3=1e-6,nv=1e-9;function k3(e,t,n){const o=e.parts.find(b=>b.partId===n.partId),a=o?.actors.find(b=>b.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(!Number.isFinite(t.fromSec)||!Number.isFinite(t.deltaSec))return ie("SCHEMA_INVALID","deltaSec");const s=t.fromSec-y3,i=o.durationSec;let r=!1;const l=b=>{const I=b+t.deltaSec;return(I<-nv||I>i+nv)&&(r=!0),Yn(I,0,i)},c=b=>b.map(I=>I.atSec>=s?{...I,atSec:l(I.atSec)}:I).sort((I,y)=>I.atSec-y.atSec),d=c(a.poseKeys),u=c(a.facingKeys),p=a.carryKeys?c(a.carryKeys):void 0,f=o.timeline.actions.map(b=>b.actorId===t.actorId&&b.startSec>=s?{...b,startSec:l(b.startSec),endSec:l(b.endSec)}:b);return r?ie("LIMIT_EXCEEDED","deltaSec"):{ok:!0,snapshot:Rn(e,n.partId,b=>({...b,actors:b.actors.map(I=>I.id===t.actorId?{...I,poseKeys:d,facingKeys:u,...p?{carryKeys:p}:{}}:I),timeline:{...b.timeline,actions:f}}))}}function S3(e,t,n){const o=e.parts.find(c=>c.partId===n.partId),a=o?.actors.find(c=>c.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(t.propId!==null&&!qa(e,n.partId,t.propId))return ie("REFERENCE_MISSING","propId",{referencedId:t.propId});const s=Yn(t.atSec,0,o.durationSec),i=1/n.fps,r=(a.carryKeys??[]).filter(c=>Math.abs(c.atSec-s)>=i);if(r.length>=Mt.keysPerTrack)return ie("LIMIT_EXCEEDED","carryKeys");const l={atSec:s,propId:t.propId};return qn(e,n.partId,t.actorId,c=>({...c,carryKeys:[...r,l].sort((d,u)=>d.atSec-u.atSec)}))}function I3(e,t,n){const o=e.parts.find(i=>i.partId===n.partId),a=o?.actors.find(i=>i.id===t.actorId);if(!o||!a)return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});const s=a.carryKeys??[];return t.index<0||t.index>=s.length?ie("REFERENCE_MISSING","index",{referencedId:t.index}):qn(e,n.partId,t.actorId,i=>({...i,carryKeys:s.filter((r,l)=>l!==t.index)}))}const w3=1,M3=8e3,$3=.2,E3=1;function AI(e,t){return e.background?{ok:!0,snapshot:{...e,background:t(e.background)}}:ie("REFERENCE_MISSING","background")}function ov(e){return Number.isFinite(e)&&e>=w3&&e<=M3}function x3(e,t,n){return e.length===0?!0:e.length<b0||e.length>wl?!1:e.every(o=>Number.isFinite(o.photo.x)&&Number.isFinite(o.photo.y)&&Number.isFinite(o.board.x)&&Number.isFinite(o.board.y)&&o.photo.x>=0&&o.photo.x<=t&&o.photo.y>=0&&o.photo.y<=n)}function P3(e,t){if(t.fileName.length>gu)return ie("SCHEMA_INVALID","fileName");if(!ov(t.widthPx))return ie("SCHEMA_INVALID","widthPx");if(!ov(t.heightPx))return ie("SCHEMA_INVALID","heightPx");const n={fileName:t.fileName,widthPx:t.widthPx,heightPx:t.heightPx,homography:null,anchors:[],opacity:.6,visible:!0};return{ok:!0,snapshot:{...e,background:n}}}function C3(e,t){if(t.H.length!==9||!t.H.every(a=>Number.isFinite(a)))return ie("SCHEMA_INVALID","H");const n=e.background;if(!n)return ie("REFERENCE_MISSING","background");const o=t.anchors??[];return x3(o,n.widthPx,n.heightPx)?{ok:!0,snapshot:{...e,background:{...n,homography:[...t.H],anchors:o.map(a=>({photo:{...a.photo},board:{...a.board}}))}}}:ie("SCHEMA_INVALID","anchors")}function B3(e,t){return Number.isFinite(t.opacity)?AI(e,n=>({...n,opacity:Yn(t.opacity,$3,E3)})):ie("SCHEMA_INVALID","opacity")}function _3(e,t){return AI(e,n=>({...n,visible:t.visible}))}function A3(e){if(!e.background)return ie("REFERENCE_MISSING","background");const{background:t,...n}=e;return{ok:!0,snapshot:n}}const T3=.45,R3=["name","position","heightM","headingDeg","pitchDeg","rollDeg","lensMm","fovOverrideDeg","move","subject"],D3=new Set(["position","heightM","headingDeg","pitchDeg"]),{min:O3,max:N3}=$n.cameraHeightM,{min:L3,max:K3}=$n.cameraPitchDeg,{min:F3,max:H3}=$n.cameraRollDeg;function Ls(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function z3(e,t,n){const a=e.parts.find(s=>s.partId===n.partId)?.cameras.find(s=>s.id===t.cameraId);return a?a.keys.length>0?ie("CAMERA_HAS_KEYS","position"):!Number.isFinite(t.position.x)||!Number.isFinite(t.position.y)?ie("SCHEMA_INVALID","position"):Jm(e,n.partId,t.cameraId,s=>({...s,position:t.position})):ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId})}function j3(e,t,n){const o=t.patch,a=e.parts.find(i=>i.partId===n.partId),s=a?.cameras.find(i=>i.id===t.cameraId);if(!s||!a)return ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId});if(s.keys.length>0&&Object.keys(o).some(i=>D3.has(i)))return ie("CAMERA_HAS_KEYS","patch");if(Ls(o,"heightM")&&o.heightM!==void 0){const i=o.heightM;if(!Number.isFinite(i)||i<O3||i>N3)return ie("LIMIT_EXCEEDED","patch.heightM")}if(Ls(o,"pitchDeg")&&o.pitchDeg!==void 0){const i=o.pitchDeg;if(!Number.isFinite(i)||i<L3||i>K3)return ie("LIMIT_EXCEEDED","patch.pitchDeg")}if(Ls(o,"rollDeg")&&o.rollDeg!==void 0){const i=o.rollDeg;if(!Number.isFinite(i)||i<F3||i>H3)return ie("LIMIT_EXCEEDED","patch.rollDeg")}if(Ls(o,"lensMm")&&o.lensMm!==void 0&&!Ys.includes(o.lensMm))return ie("SCHEMA_INVALID","patch.lensMm");if(Ls(o,"fovOverrideDeg")&&o.fovOverrideDeg!==void 0){const i=o.fovOverrideDeg;if(!Number.isFinite(i)||i<Mt.fovOverrideMinDeg||i>Mt.fovOverrideMaxDeg)return ie("LIMIT_EXCEEDED","patch.fovOverrideDeg")}if(Ls(o,"subject")&&o.subject!==void 0&&o.subject!==null){const i=o.subject;for(const r of i.targetIds){const l=a.actors.some(d=>d.id===r)||a.props.some(d=>d.id===r),c=e.room.props.some(d=>d.id===r);if(!l&&!c)return ie("REFERENCE_MISSING","patch.subject.targetIds",{referencedId:r})}}if(Ls(o,"move")&&o.move!==void 0){const i=o.move;if(!Cm.includes(i.type))return ie("SCHEMA_INVALID","patch.move.type")}return Jm(e,n.partId,t.cameraId,i=>{const r={...i};for(const l of R3){if(!Ls(o,l))continue;const c=o[l];if(l==="fovOverrideDeg"&&c===void 0){delete r.fovOverrideDeg;continue}
243if(l==="headingDeg"){r.headingDeg=Qt(c);continue}r[l]=c}return r})}function U3(e,t,n){const o=e.parts.find(r=>r.partId===n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(o.cameras.length>=Mt.camerasPerPart)return ie("LIMIT_EXCEEDED","cameras");if(!Number.isFinite(t.position.x)||!Number.isFinite(t.position.y))return ie("SCHEMA_INVALID","position");const a=n.idFactory("cam"),s={id:a,name:a,position:U_(t.position,o.cameras.map(r=>r.position),void 0,o.actors.map(r=>({kind:"circle",center:r.start.position,radius:T3,id:r.id}))),heightM:1.55,headingDeg:Qt(t.headingDeg??0),pitchDeg:0,rollDeg:0,lensMm:t.lensMm??50,move:{type:"static"},keys:[],subject:null};return{ok:!0,snapshot:Rn(e,n.partId,r=>({...r,cameras:[...r.cameras,s]}))}}function G3(e){const t=(i,r)=>Math.hypot(i.x-r.x,i.y-r.y),n=(i,r)=>({center:{x:(i.x+r.x)/2,y:(i.y+r.y)/2},radius:t(i,r)/2}),o=(i,r,l)=>{const c=r.x-i.x,d=r.y-i.y,u=l.x-i.x,p=l.y-i.y,f=2*(c*p-d*u);if(Math.abs(f)<1e-9)return[n(i,r),n(i,l),n(r,l)].reduce((w,M)=>M.radius>w.radius?M:w);const h=(p*(c*c+d*d)-d*(u*u+p*p))/f,b=(c*(u*u+p*p)-u*(c*c+d*d))/f,I={x:i.x+h,y:i.y+b};return{center:I,radius:t(I,i)}},a=(i,r)=>t(i.center,r)<=i.radius+1e-9;let s={center:e[0],radius:0};for(let i=1;i<e.length;i+=1)if(!a(s,e[i])){s={center:e[i],radius:0};for(let r=0;r<i;r+=1)if(!a(s,e[r])){s=n(e[i],e[r]);for(let l=0;l<r;l+=1)a(s,e[l])||(s=o(e[i],e[r],e[l]))}}return s}function V3(e){if(e.length===1)return e[0];const t=G3(e),n=e.reduce((o,a)=>o+a.h,0)/e.length;return{x:t.center.x,y:t.center.y,h:n}}function W3(e,t,n){const o=e.parts.find(p=>p.partId===n.partId),a=o?.cameras.find(p=>p.id===t.cameraId);if(!a||!o)return ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId});if(a.keys.length>0)return ie("CAMERA_HAS_KEYS","targetIds");if(t.targetIds.length===0)return ie("SCHEMA_INVALID","targetIds");const s=[];for(const p of t.targetIds){const f=o.actors.find(b=>b.id===p);if(f){const b=mn(f,n.timeSec);s.push({x:b.position.x,y:b.position.y,h:Fa(wo(f),b.pose)});continue}const h=qa(e,n.partId,p);if(h){s.push({x:h.center.x,y:h.center.y,h:h.heightM??1});continue}return ie("REFERENCE_MISSING","targetIds",{referencedId:p})}const i=V3(s),r=i.x-a.position.x,l=i.y-a.position.y,c=Qt(Math.atan2(l,r)*180/Math.PI),d=Math.hypot(r,l),u=Math.atan2(i.h-a.heightM,d)*180/Math.PI;return Jm(e,n.partId,t.cameraId,p=>({...p,headingDeg:c,pitchDeg:u,subject:{targetIds:t.targetIds}}))}function tc(e,t){return e.parts.find(n=>n.partId===t)??null}function Au(e,t,n,o){const a=tc(e,t);return!a||!a.cameras.some(i=>i.id===n)?ie("REFERENCE_MISSING","cameraId",{referencedId:n}):{ok:!0,snapshot:Rn(e,t,i=>({...i,cameras:i.cameras.map(r=>r.id===n?{...r,keys:o(r.keys)}:r)}))}}function X3(e,t,n,o){const a=Object.fromEntries((n.subject?.targetIds??[]).flatMap(i=>{const r=t.actors.find(l=>l.id===i);return r?[[i,mn(r,o,{durationSec:t.durationSec})]]:[]})),s=di(t,{coverages:[]},a,n.id,o,{easing:e.settings.easing,room:e.room});return{x:s.position.x,y:s.position.y,heightM:s.heightM,headingDeg:s.headingDeg,pitchDeg:s.pitchDeg,rollDeg:s.rollDeg,lensMm:xl(s.lensMm)}}function Y3(e,t,n){const o=tc(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});const a=o.cameras.find(r=>r.id===t.cameraId);if(!a)return ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId});if(t.atSec<0||t.atSec>o.durationSec)return ie("INVALID_RANGE","atSec");const s=Yn(t.atSec,0,o.durationSec),i={atSec:s,...X3(e,o,a,s),...t.value};return Au(e,n.partId,t.cameraId,r=>[...r.filter(l=>l.atSec!==s),i].sort((l,c)=>l.atSec-c.atSec))}function q3(e,t,n){const o=tc(e,n.partId),a=o?.cameras.find(i=>i.id===t.cameraId);if(!o||!a)return ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId});if(t.index<0||t.index>=a.keys.length)return ie("REFERENCE_MISSING","index",{referencedId:t.index});const s=Yn(t.atSec,0,o.durationSec);return Au(e,n.partId,t.cameraId,i=>i.map((r,l)=>l===t.index?{...r,atSec:s}:r).sort((r,l)=>r.atSec-l.atSec))}function Z3(e,t,n){const o=tc(e,n.partId),a=o?.cameras.find(s=>s.id===t.cameraId);return!o||!a?ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId}):t.index<0||t.index>=a.keys.length?ie("REFERENCE_MISSING","index",{referencedId:t.index}):t.patch.lensMm!==void 0&&!Ys.includes(t.patch.lensMm)?ie("SCHEMA_INVALID","patch.lensMm"):Au(e,n.partId,t.cameraId,s=>s.map((i,r)=>r===t.index?Ri(i,t.patch):i))}function J3(e,t,n){const o=tc(e,n.partId),a=o?.cameras.find(s=>s.id===t.cameraId);return!o||!a?ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId}):t.index<0||t.index>=a.keys.length?ie("REFERENCE_MISSING","index",{referencedId:t.index}):Au(e,n.partId,t.cameraId,s=>s.filter((i,r)=>r!==t.index))}function xs(e,t){return e.parts.find(n=>n.partId===t)??null}function ws(e,t,n){return{ok:!0,snapshot:Rn(e,t,a=>({...a,timeline:{...a.timeline,cuts:n(a.timeline.cuts)}}))}}function Q3(e,t,n){const o=xs(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});const a=o.timeline.coverages.find(l=>l.id===t.coverageId);if(!a)return ie("REFERENCE_MISSING","coverageId",{referencedId:t.coverageId});if(!(t.outSec>t.inSec))return ie("INVALID_RANGE","outSec");const s=Yn(t.inSec,a.startSec,a.endSec),i=Yn(t.outSec,a.startSec,a.endSec);if(!(i>s))return ie("INVALID_RANGE","outSec");const r={id:n.idFactory("cut"),inSec:s,outSec:i,coverageId:a.id,cameraId:a.cameraId};return ws(e,n.partId,l=>[...l,r])}function TI(e,t){const n=e.timeline.coverages.find(o=>o.id===t.coverageId);return n?{startSec:n.startSec,endSec:n.endSec}:null}function e8(e,t,n){const o=xs(e,n.partId),a=o?.timeline.cuts.find(l=>l.id===t.cutId);if(!o||!a)return ie("REFERENCE_MISSING","cutId",{referencedId:t.cutId});const s=TI(o,a);if(!s)return ie("REFERENCE_MISSING","coverageId",{referencedId:a.c
243overageId});const{startSec:i,endSec:r}=$r(t.inSec,a.outSec-a.inSec,s);return ws(e,n.partId,l=>l.map(c=>c.id===t.cutId?{...c,inSec:i,outSec:r}:c))}function t8(e,t,n){const o=xs(e,n.partId),a=o?.timeline.cuts.find(r=>r.id===t.cutId);if(!o||!a)return ie("REFERENCE_MISSING","cutId",{referencedId:t.cutId});const s=TI(o,a);if(!s)return ie("REFERENCE_MISSING","coverageId",{referencedId:a.coverageId});const i=yi({startSec:a.inSec,endSec:a.outSec},{startSec:t.inSec,endSec:t.outSec},s,n.fps);return i?ws(e,n.partId,r=>r.map(l=>l.id===t.cutId?{...l,inSec:i.startSec,outSec:i.endSec}:l)):ie("INVALID_RANGE","outSec")}function n8(e,t,n){const o=xs(e,n.partId);return!o||!o.timeline.cuts.some(a=>a.id===t.cutId)?ie("REFERENCE_MISSING","cutId",{referencedId:t.cutId}):ws(e,n.partId,a=>a.filter(s=>s.id!==t.cutId))}function o8(e,t,n){const o=xs(e,n.partId),a=o?.timeline.cuts.find(u=>u.id===t.cutId);if(!o||!a)return ie("REFERENCE_MISSING","cutId",{referencedId:t.cutId});const s=1/n.fps,i=t.atSec-a.inSec,r=a.outSec-t.atSec;if(i<s-xn||r<s-xn)return ie("INVALID_RANGE","atSec");const l=new Set(o.timeline.cuts.map(u=>u.id));let c=n.idFactory("cut");for(;l.has(c);)c=n.idFactory("cut");const d={id:c,inSec:t.atSec,outSec:a.outSec,coverageId:a.coverageId,cameraId:a.cameraId};return ws(e,n.partId,u=>u.flatMap(p=>p.id===t.cutId?[{...p,outSec:t.atSec},d]:[p]))}function a8(e,t,n){const o=xs(e,n.partId),a=o?.timeline.cuts.find(d=>d.id===t.cutId),s=o?.timeline.cuts.find(d=>d.id===t.withCutId);if(!o||!a||!s)return ie("REFERENCE_MISSING","cutId",{referencedId:t.cutId});if(a.coverageId!==s.coverageId||!(gd(a.outSec,s.inSec)||gd(s.outSec,a.inSec)))return ie("INVALID_RANGE","withCutId");const r=a.inSec<=s.inSec?a:s,l=r===a?s:a,c={...r,inSec:Math.min(a.inSec,s.inSec),outSec:Math.max(a.outSec,s.outSec)};return ws(e,n.partId,d=>d.filter(u=>u.id!==l.id).map(u=>u.id===c.id?c:u))}function s8(e,t,n){const o=xs(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(t.side==="left"){const i=o.timeline.cuts.find(l=>gd(l.outSec,t.gap.startSec));if(!i)return ie("REFERENCE_MISSING","gap",{referencedId:"left"});const r=o.timeline.coverages.find(l=>l.id===i.coverageId);return!r||!vd({startSec:r.startSec,endSec:r.endSec},{startSec:t.gap.startSec,endSec:t.gap.endSec})?ie("CUT_OUTSIDE_COVERAGE","gap",{referencedId:i.coverageId}):ws(e,n.partId,l=>l.map(c=>c.id===i.id?{...c,outSec:t.gap.endSec}:c))}const a=o.timeline.cuts.find(i=>gd(i.inSec,t.gap.endSec));if(!a)return ie("REFERENCE_MISSING","gap",{referencedId:"right"});const s=o.timeline.coverages.find(i=>i.id===a.coverageId);return!s||!vd({startSec:s.startSec,endSec:s.endSec},{startSec:t.gap.startSec,endSec:t.gap.endSec})?ie("CUT_OUTSIDE_COVERAGE","gap",{referencedId:a.coverageId}):ws(e,n.partId,i=>i.map(r=>r.id===a.id?{...r,inSec:t.gap.startSec}:r))}function i8(e,t,n){if(!xs(e,n.partId)?.timeline.cuts.some(s=>s.id===t.cutId))return ie("REFERENCE_MISSING","cutId",{referencedId:t.cutId});const a=t.text.trim();return a.length>Nm?ie("LIMIT_EXCEEDED","direction"):ws(e,n.partId,s=>s.map(i=>{if(i.id!==t.cutId)return i;const{direction:r,...l}=i;return a?{...l,direction:a}:l}))}function r8(e,t,n){const o=xs(e,n.partId),a=o?.timeline.cuts.find(u=>u.id===t.cutId);if(!o||!a)return ie("REFERENCE_MISSING","cutId",{referencedId:t.cutId});if(!o.cameras.some(u=>u.id===t.cameraId))return ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId});if(a.cameraId===t.cameraId)return{ok:!0,snapshot:e};const s={startSec:a.inSec,endSec:a.outSec},i=o.timeline.coverages.filter(u=>u.cameraId===t.cameraId),r=i.find(u=>vd(u,s));let l=o.timeline.coverages,c=r?.id;if(!r){if(i.some(f=>Pi(f,s)))return ie("COVERAGE_OVERLAP","cameraId",{referencedId:t.cameraId});const u=o.timeline.coverages.find(f=>f.id===a.coverageId),p={id:n.idFactory("cov"),cameraId:t.cameraId,startSec:a.inSec,endSec:a.outSec,shotType:u?.shotType??"medium",subject:u?{...u.subject,targetIds:[...u.subject.targetIds]}:{targetIds:[]},timingMode:"absolute"};l=[...l,p],c=p.id}return{ok:!0,snapshot:Rn(e,n.partId,u=>({...u,timeline:{...u.timeline,coverages:l,cuts:u.timeline.cuts.map(p=>p.id===t.cutId?{...p,coverageId:c,cameraId:t.cameraId}:p)}}))}}const l8=64,c8={x:.5,y:.5};function d8(e,t){const n=ia(e,t.id);return n.kind==="unknown"?ie("REFERENCE_MISSING","id",{referencedId:t.id}):{ok:!0,snapshot:Ci(e,n),meta:{removed:n}}}function u8(e,t,n){const o=e.parts.find(d=>d.partId===n.partId);if(!o)return ie("REFERENCE_MISSING","id",{referencedId:t.id});const a=t.offset??c8,s=o.actors.find(d=>d.id===t.id);if(s){if(o.actors.length>=Mt.actorsPerPart)return ie("LIMIT_EXCEEDED","actors");const{sourceId:d,...u}=s,p={...u,id:n.idFactory("actor"),name:ar(fp(s.name),o.actors.map(h=>h.name)),start:{...s.start,position:{x:s.start.position.x+a.x,y:s.start.position.y+a.y}},path:{waypoints:s.path.waypoints.map(h=>({...h,x:h.x+a.x,y:h.y+a.y}))},positionKeys:s.positionKeys.map(h=>({...h,x:h.x+a.x,y:h.y+a.y})),facingKeys:[...s.facingKeys],poseKeys:[...s.poseKeys]};return{ok:!0,snapshot:Rn(e,n.partId,h=>({...h,actors:[...h.actors,p]}
243))}}const i=o.cameras.find(d=>d.id===t.id);if(i){if(o.cameras.length>=Mt.camerasPerPart)return ie("LIMIT_EXCEEDED","cameras");const{sourceId:d,...u}=i,p={...u,id:n.idFactory("cam"),name:ar(fp(i.name),o.cameras.map(h=>h.name)),position:{x:i.position.x+a.x,y:i.position.y+a.y},keys:i.keys.map(h=>({...h,x:h.x+a.x,y:h.y+a.y}))};return{ok:!0,snapshot:Rn(e,n.partId,h=>({...h,cameras:[...h.cameras,p]}))}}const r=(d,u)=>{const{sourceId:p,...f}=d,h={x:d.center.x+a.x,y:d.center.y+a.y};let b=h;if(!d.supportPropId){const I=[...e.room.props,...o.props].map(O=>({center:O.center,widthM:O.widthM,depthM:O.depthM,headingDeg:O.headingDeg})),y={center:h,widthM:d.widthM,depthM:d.depthM,headingDeg:d.headingDeg},w=O=>O*Math.PI/180,M=(Math.abs(Math.cos(w(d.headingDeg)))*d.widthM+Math.abs(Math.sin(w(d.headingDeg)))*d.depthM)/2,x=(Math.abs(Math.sin(w(d.headingDeg)))*d.widthM+Math.abs(Math.cos(w(d.headingDeg)))*d.depthM)/2;(!(Math.abs(h.x)+M<=e.room.widthM/2+1e-9&&Math.abs(h.y)+x<=e.room.depthM/2+1e-9)||I.some(O=>Va(y,O)!==null))&&(b=Ya(h,Math.hypot(d.widthM,d.depthM)/2,I.map((O,A)=>({kind:"rect",rect:O,id:String(A)})),{minX:-e.room.widthM/2,maxX:e.room.widthM/2,minY:-e.room.depthM/2,maxY:e.room.depthM/2})??h)}return{...f,id:n.idFactory("prop"),name:ar(fp(d.name),u.map(I=>I.name)),center:b}},l=e.room.props.find(d=>d.id===t.id);if(l){const d=r(l,e.room.props);return{ok:!0,snapshot:Ia(e,p=>({...p,props:[...p.props,d]}))}}const c=o.props.find(d=>d.id===t.id);if(c){const d=r(c,o.props);return{ok:!0,snapshot:Rn(e,n.partId,p=>({...p,props:[...p.props,d]}))}}return ie("REFERENCE_MISSING","id",{referencedId:t.id})}function p8(e,t,n){if(typeof t.name!="string")return ie("LIMIT_EXCEEDED","name");const o=t.name.trim();if(o.length<1||o.length>l8)return ie("LIMIT_EXCEEDED","name");const a=i=>ar(o,i.filter(r=>r.id!==t.id).map(r=>r.name)),s=e.parts.find(i=>i.partId===n.partId);if(s?.actors.some(i=>i.id===t.id)){const i=a(s.actors);return{ok:!0,snapshot:Rn(e,n.partId,l=>({...l,actors:l.actors.map(c=>c.id===t.id?{...c,name:i}:c)}))}}if(s?.cameras.some(i=>i.id===t.id)){const i=a(s.cameras);return{ok:!0,snapshot:Rn(e,n.partId,l=>({...l,cameras:l.cameras.map(c=>c.id===t.id?{...c,name:i}:c)}))}}if(s?.props.some(i=>i.id===t.id)){const i=a(s.props);return{ok:!0,snapshot:Rn(e,n.partId,l=>({...l,props:l.props.map(c=>c.id===t.id?{...c,name:i}:c)}))}}if(e.room.props.some(i=>i.id===t.id)){const i=a(e.room.props);return{ok:!0,snapshot:Ia(e,l=>({...l,props:l.props.map(c=>c.id===t.id?{...c,name:i}:c)}))}}return ie("REFERENCE_MISSING","id",{referencedId:t.id})}function f8(e,t){if(t.choices){if(t.mode!=="merge-part"&&t.mode!=="replace-project")return{ok:!1,issue:Le("SCHEMA_INVALID",{path:"mode"})};const o=BS(e,t.result,t.mode),a=DS(e,e.activePartId,t.result,o,t.choices);return{ok:!0,snapshot:a.snapshot,meta:a.issues.length>0?{importIssues:a.issues}:void 0}}const n=LA(e,t.result,t.mode);return n.ok?{ok:!0,snapshot:n.snapshot,meta:n.meta.issues.length>0?{importIssues:n.meta.issues}:void 0}:{ok:!1,issue:n.issue}}function m8(e,t){return{ok:!0,snapshot:{...e,source:t.source}}}const RI=.3,DI=.5,h8=["kind","widthM","heightM","sillM"];function OI(e,t,n,o){return e<n+o&&n<e+t}function b8(e,t,n){if(!uu.includes(t.kind))return ie("SCHEMA_INVALID","kind");const o=vs(e.room,t.wall);if(!Number.isFinite(t.offsetM)||t.offsetM<0||t.offsetM+t.widthM>o)return ie("OPENING_OUT_OF_WALL","offsetM");if(e.room.openings.some(r=>r.wall===t.wall&&OI(r.offsetM,r.widthM,t.offsetM,t.widthM)))return ie("OPENING_OVERLAP","wall");const s={id:n.idFactory("opening"),kind:t.kind,wall:t.wall,offsetM:t.offsetM,widthM:t.widthM,heightM:t.heightM,...t.sillM!==void 0?{sillM:t.sillM}:{}};return{ok:!0,snapshot:Ia(e,r=>({...r,openings:[...r.openings,s]}))}}function NI(e,t,n,o,a){return e.room.openings.some(s=>s.id!==t.id&&s.wall===n&&OI(s.offsetM,s.widthM,o,a))}function g8(e,t){const n=e.room.openings.find(r=>r.id===t.openingId);if(!n)return ie("REFERENCE_MISSING","openingId",{referencedId:t.openingId});const o=t.wall??n.wall,a=vs(e.room,o);if(n.widthM>a)return ie("OPENING_OUT_OF_WALL","wall");const s=Yn(t.offsetM,0,Math.max(0,a-n.widthM));return NI(e,n,o,s,n.widthM)?ie("OPENING_OVERLAP","wall"):{ok:!0,snapshot:Ia(e,r=>
243({...r,openings:r.openings.map(l=>l.id===t.openingId?{...l,wall:o,offsetM:s}:l)}))}}function v8(e,t){const n=t.patch,o=e.room.openings.find(i=>i.id===t.openingId);if(!o)return ie("REFERENCE_MISSING","openingId",{referencedId:t.openingId});if("kind"in n&&!uu.includes(n.kind))return ie("SCHEMA_INVALID","patch.kind");const a=(i,r)=>{if(!(i in n)||n[i]===void 0)return!0;const l=n[i];return typeof l=="number"&&Number.isFinite(l)&&l>=r};if(!a("widthM",RI))return ie("SCHEMA_INVALID","patch.widthM");if(!a("heightM",DI))return ie("SCHEMA_INVALID","patch.heightM");if(!a("sillM",0))return ie("SCHEMA_INVALID","patch.sillM");if(typeof n.widthM=="number"){if(o.offsetM+n.widthM>vs(e.room,o.wall))return ie("OPENING_OUT_OF_WALL","patch.widthM");if(NI(e,o,o.wall,o.offsetM,n.widthM))return ie("OPENING_OVERLAP","patch.widthM")}return{ok:!0,snapshot:Ia(e,i=>({...i,openings:i.openings.map(r=>r.id!==t.openingId?r:Ri(r,n,h8))}))}}function ii(e,t){const n=10**t;return Math.round(e*n)/n}function y8(e){return(e%360+360)%360}function av(e,t,n){return Math.min(n,Math.max(t,e))}function k8(e,t){return typeof t!="number"?t:e==="x"||e==="y"||e.endsWith("M")||e==="amount"||e.endsWith("Sec")?ii(t,4):e==="pitchDeg"?ii(av(t,-90,90),3):e==="rollDeg"?ii(av(t,-180,180),3):e.endsWith("Deg")?ii(y8(t),3):e==="opacity"||e==="confidence"?ii(t,3):t}function Pe(e){return[e,t=>k8(e,t)]}function St(e,t){return[e,t]}function jn(e){return t=>Array.isArray(t)?t.map(e):t}function LI(e){return t=>t===null?null:e(t)}function sv(e){return t=>{if(typeof t!="object"||t===null)return t;const n={};for(const[o,a]of Object.entries(t))n[o]=e(a);return n}}function Ii(e){return e}function Kt(e,t){if(typeof e!="object"||e===null)return e;const n=e,o={};for(const[a,s]of t)a in n&&(o[a]=s(n[a]));return o}const S8=[Pe("ko"),Pe("en")],bh=e=>Kt(e,S8),I8=[Pe("x"),Pe("y")],Rl=e=>Kt(e,I8),w8=[Pe("id"),Pe("kind"),Pe("wall"),Pe("offsetM"),Pe("widthM"),Pe("heightM"),Pe("sillM"),Pe("sourceId")],KI=[Pe("id"),Pe("kind"),Pe("name"),St("center",Rl),Pe("widthM"),Pe("depthM"),Pe("headingDeg"),Pe("heightM"),Pe("catalogKey"),Pe("supportPropId"),Pe("elevationM"),Pe("sourceId"),Pe("refId")],M8=[Pe("north"),Pe("east"),Pe("south"),Pe("west")],$8=[Pe("kind"),Pe("widthM"),Pe("depthM"),St("walls",e=>Kt(e,M8)),St("openings",jn(e=>Kt(e,w8))),St("props",jn(e=>Kt(e,KI)))],FI=[Pe("mdiaId"),Pe("url"),Pe("wdth"),Pe("hegt")],E8=[...FI,Pe("duraSec"),Pe("grayscale"),Pe("boardKey")],HI=e=>e==null?e:Kt(e,FI),Mp=[Pe("id"),Pe("tag"),Pe("name"),St("aliases",Ii),St("media",HI),Pe("description"),Pe("handoffName"),Pe("standalone"),Pe("species"),Pe("speciesName"),Pe("speciesNameEn")],x8=[St("characters",jn(e=>Kt(e,Mp))),St("backgrounds",jn(e=>Kt(e,Mp))),St("props",jn(e=>Kt(e,Mp)))],P8=[Pe("x"),Pe("y"),Pe("atSec"),Pe("pauseSec")],C8=[Pe("atSec"),Pe("x"),Pe("y")],B8=[Pe("atSec"),Pe("headingDeg"),Pe("targetId"),Pe("travel")],_8=[Pe("atSec"),Pe("pose"),Pe("seatPropId")],A8=[Pe("atSec"),Pe("propId")],T8=[St("position",Rl),Pe("headingDeg"),Pe("pose"),Pe("seatPropId")],R8=[Pe("id"),Pe("refId"),Pe("name"),St("aliases",Ii),Pe("color"),Pe("species"),Pe("bodyType"),Pe("movementMode"),St("start",e=>Kt(e,T8)),St("path",e=>Kt(e,[St("waypoints",jn(t=>Kt(t,P8)))])),St("positionKeys",jn(e=>Kt(e,C8))),St("facingKeys",jn(e=>Kt(e,B8))),St("poseKeys",jn(e=>Kt(e,_8))),St("carryKeys",jn(e=>Kt(e,A8))),Pe("sourceId")],D8=[St("targetIds",Ii),Pe("nodePath")],zI=e=>Kt(e,D8),O8=[Pe("type"),Pe("amount"),Pe("direction")],N8=[Pe("atSec"),Pe("x"),Pe("y"),Pe("heightM"),Pe("headingDeg"),Pe("pitchDeg"),Pe("rollDeg"),Pe("lensMm")],L8=[Pe("id"),Pe("name"),St("position",Rl),Pe("heightM"),Pe("headingDeg"),Pe("pitchDeg"),Pe("rollDeg"),Pe("lensMm"),Pe("fovOverrideDeg"),St("move",e=>Kt(e,O8)),St("keys",jn(e=>Kt(e,N8))),St("subject",LI(zI)),Pe("sourceId")],K8=[Pe("type"),Pe("confidence"),Pe("source"),St("text",bh)],jI=e=>Kt(e,K8),F8=[Pe("id"),Pe("actorId"),Pe("startSec"),Pe("endSec"),Pe("actionType"),Pe("actionClass"),St("text",bh),Pe("source"),Pe("motionId"),Pe("targetPropId"),Pe("targetOpeningId")],H8=[Pe("id"),Pe("actorId"),Pe("startSec"),Pe("endSec"),Pe("line"),Pe("lang"),Pe("mode"),Pe("timeSource")],z8=[Pe("id"),Pe("targetId"),Pe("startSec"),Pe("endSec"),St("state",e=>Kt(e,[Pe("open"),Pe("openAngleDeg")]))],j8=[Pe("targetId"),Pe("eventType"),Pe("offsetSec")],U8=[Pe("id"),Pe("cameraId"),Pe("startSec"),Pe("endSec"),Pe("shotType"),St("subject",zI),St("anchor",e=>e===void 0?e:Kt(e,j8)),Pe("timingMode"),St("shotIntent",e=>e===void 0?e:jI(e))],G8=[Pe("id"),Pe("inSec"),Pe("outSec"),Pe("coverageId"),Pe("cameraId"),St("shotIntent",e=>e===void 0?e:jI(e)),Pe("direction")],V8=[St("actions",jn(e=>Kt(e,F8))),St("dialogues",jn(e=>Kt(e,H8))),St("propEvents",jn(e=>Kt(e,z8))),St("coverages",jn(e=>Kt(e,U8))),St("cuts",jn(e=>Kt(e,G8)))],W8=[St("blocks",sv(Ii)),St("cutTexts",sv(bh))],X8=[Pe("id"),Pe("kind"),Pe("source"),St("codes",Ii),Pe("note")],Y8=[St("entries",jn(e=>Kt(e,X8)))],q8=[Pe("partId"),Pe("title"),Pe("durationSec"),St("castRefIds",Ii),St("actors",jn(e=>Kt(e,R8))),St("props",jn(e=>Kt(e,KI))),St("cameras",jn(e=>Kt(e,L8))),St("timeline",e=>Kt(e,V8)),St("prompt",e=>Kt(e,W8)),St("placementReport",e=>e===void 0?e:Kt(e,Y8)),St("handoffRecording",e=>e==null?e:Kt(e,E8)),St("handoffProse",Ii)],Z8=[Pe("sceneId"),Pe("title")],J8=[Pe("fps"),Pe("lightTime"),Pe("lightDirectionDeg"),Pe("easing")],Q8=[Pe("format"),Pe("storageKey"),Pe("sha256")],eF=[St("photo",Rl),St("board",Rl)],tF=[Pe("fileName"),Pe("widthPx"),Pe("heightPx"),St("homography",e=>e===null?null:e.map(t=>ii(t,8))),St("anchors",jn(e=>
243Kt(e,eF))),Pe("opacity"),Pe("visible")],nF=[Pe("schemaVersion"),Pe("projectId"),Pe("name"),St("scene",e=>Kt(e,Z8)),St("room",e=>Kt(e,$8)),St("refs",e=>Kt(e,x8)),St("parts",jn(e=>Kt(e,q8))),Pe("activePartId"),St("settings",e=>Kt(e,J8)),St("source",LI(e=>Kt(e,Q8))),St("background",e=>e===void 0?e:Kt(e,tF)),St("sceneBackground",HI),St("styleDirection",e=>Kt(e,[Pe("ko")])),Pe("targetVideoModel")];function Dl(e){return JSON.stringify(Kt(e,nF))}const UI=7e5,oF=9e5;function GI(e){const t=new TextEncoder().encode(Dl(e)).length,n=t>oF?"too-large":t>UI?"large":"ok";return{bytes:t,level:n}}const{min:aF,max:sF}=$n.partDurationSec;function iF(e,t){return typeof t.title!="string"||t.title.trim().length<1?ie("SCHEMA_INVALID","title"):e.parts.some(o=>o.partId===t.partId)?{ok:!0,snapshot:Rn(e,t.partId,o=>({...o,title:t.title}))}:ie("REFERENCE_MISSING","partId",{referencedId:t.partId})}function rF(e,t){if(!Number.isFinite(t.durationSec)||t.durationSec<aF||t.durationSec>sF)return ie("LIMIT_EXCEEDED","durationSec");const n=za(e.targetVideoModel);if(n&&(t.durationSec<n.minSec||t.durationSec>n.maxSec))return ie("DURATION_OUT_OF_MODEL_RANGE","durationSec",{minSec:n.minSec,maxSec:n.maxSec});const o=e.parts.find(i=>i.partId===t.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:t.partId});if(t.mode==="keep")return{ok:!0,snapshot:Rn(e,t.partId,r=>({...r,durationSec:t.durationSec}))};const a=d5(o,t.durationSec/o.durationSec);return{ok:!0,snapshot:Rn(e,t.partId,()=>a)}}function lF(e,t){return e.parts.some(o=>o.partId===t.partId)?{ok:!0,snapshot:Rn(e,t.partId,o=>({...o,handoffRecording:t.recording}))}:ie("REFERENCE_MISSING","partId",{referencedId:t.partId})}function cF(e,t){if(!e.parts.some(a=>a.partId===t.partId))return ie("REFERENCE_MISSING","partId",{referencedId:t.partId});let n=Rn(e,t.partId,a=>({...a,handoffProse:t.value}));const o=n.parts.filter(a=>a.partId!==t.partId&&a.handoffProse).sort((a,s)=>a.handoffProse.createdAt-s.handoffProse.createdAt);for(const a of o){if(GI(n).bytes<=UI)break;n=Rn(n,a.partId,s=>({...s,handoffProse:null}))}return{ok:!0,snapshot:n}}const{min:dF,max:uF}=$n.propSizeM,pF=["name","kind","catalogKey","supportPropId"];function $p(e){return Number.isFinite(e)&&e>=dF&&e<=uF}function fF(e,t,n){return!Number.isFinite(t.center.x)||!Number.isFinite(t.center.y)?ie("SCHEMA_INVALID","center"):Js(e,n.partId,t.propId,o=>({...o,center:t.center}))}function mF(e,t,n){const o=Qt(t.headingDeg);return Js(e,n.partId,t.propId,a=>({...a,headingDeg:o}))}function hF(e,t,n){return $p(t.widthM)?$p(t.depthM)?t.heightM!==void 0&&!$p(t.heightM)?ie("LIMIT_EXCEEDED","heightM"):t.center!==void 0&&(!Number.isFinite(t.center.x)||!Number.isFinite(t.center.y))?ie("SCHEMA_INVALID","center"):Js(e,n.partId,t.propId,o=>({...o,widthM:t.widthM,depthM:t.depthM,...t.heightM!==void 0?{heightM:t.heightM}:{},...t.center!==void 0?{center:t.center}:{}})):ie("LIMIT_EXCEEDED","depthM"):ie("LIMIT_EXCEEDED","widthM")}function bF(e,t,n){if(!Number.isFinite(t.center.x)||!Number.isFinite(t.center.y))return ie("SCHEMA_INVALID","center");const o=Tt(t.catalogKey??t.kind),a=o?.widthM??.6,s=o?.depthM??.6,i=o?.heightM??.75,r=e.parts.find(y=>y.partId===n.partId),l=[...e.room.props,...r?.props??[]].map(y=>({center:y.center,widthM:y.widthM,depthM:y.depthM,headingDeg:y.headingDeg})),c={center:t.center,widthM:a,depthM:s,headingDeg:0},d=l.some(y=>Va(c,y)!==null);let u=t.center,p=!1;if(d){const y=l.map((M,x)=>({kind:"rect",rect:M,id:String(x)})),w=Ya(t.center,Math.max(a,s)/2,y,TB(e));w&&(u=w,p=!0)}const h={id:n.idFactory("prop"),kind:t.kind,name:o?.labels.ko??t.kind,center:u,widthM:a,depthM:s,headingDeg:0,heightM:i,...o?.key?{catalogKey:o.key}:{}},b=p?{adjusted:!0}:void 0;return t.scope==="room"?{ok:!0,snapshot:Ia(e,w=>({...w,props:[...w.props,h]})),meta:b}:r?{ok:!0,snapshot:Rn(e,n.partId,y=>({...y,props:[...y.props,h]})),meta:b}:ie("REFERENCE_MISSING","partId",{referencedId:n.partId})}function VI(e,t){const n=e.parts.find(o=>o.partId===t);return[...e.room.props,...n?.props??[]]}function WI(e,t,n,o){if(n===t)return ie("SUPPORT_CYCLE",o);if(!e.some(i=>i.id===n))return ie("REFERENCE_MISSING",o,{referencedId:n});let a=n;const s=new Set;for(;a;){if(a===t)return ie("SUPPORT_CYCLE",o);if(s.has(a))break;s.add(a),a=e.find(i=>i.id===a)?.supportPropId}return null}function gF(e,t,n){if(!Number.isFinite(t.center.x)||!Number.isFinite(t.center.y))return ie("SCHEMA_INVALID","center");const o=VI(e,n.partId),a=o.find(u=>u.id===t.propId);if(!a)return ie("REFERENCE_MISSING","propId",{referencedId:t.propId});if(typeof t.supportPropId=="string"){const u=WI(o,t.propId,t.supportPropId,"supportPropId");if(u)return u}const s={x:t.center.x-a.center.x,y:t.center.y-a.center.y},i=new Map(o.map(u=>[u.id,u])),r=new Set(o.filter(u=>Es(u,i).some(p=>p.id===t.propId)).map(u=>u.id)),l=u=>{if(u.id===t.propId){const p={...u,center:t.center};return t.supportPropId===null?delete p.supportPropId:t.supportPropId!==void 0&&(p.supportPropId=t.supportPropId),p}return r.has(u.id)?{...u,center:{x:u.center.x+s.x,y:u.center.y+s.y}}:u},c=Ia(e,u=>({...u,props:u.props.map(l)}));return{ok:!0,snapshot:c.parts.some(u=>u.partId===n.partId)?Rn(c,n.partId,u=>({...u,props:u.props.map(l)})):c}}function vF(e,t,n){const o=t.elevationM;return o!==null&&(!Number.isFinite(o)||o<0||o>$n.propElevationM.max)?ie("LIMIT_EXCEEDED","elevationM"):Js(e,n.partId,t.propId,a=>{const s={...a};return o===null||o===0?delete s.elevationM:s.elevationM=o,s})}
243function yF(e,t,n){const o=Tt(t.catalogKey);return o?Js(e,n.partId,t.propId,a=>({...a,catalogKey:o.key,kind:o.kind,widthM:o.widthM,depthM:o.depthM,heightM:o.heightM})):ie("SCHEMA_INVALID","catalogKey")}function kF(e,t,n){const o=t.patch;if("supportPropId"in o&&o.supportPropId!==void 0){const a=WI(VI(e,n.partId),t.propId,o.supportPropId,"patch.supportPropId");if(a)return a}return Js(e,n.partId,t.propId,a=>Ri(a,o,pF))}function XI(e){const t=e;return!!t&&typeof t=="object"&&typeof t.mdiaId=="string"&&t.mdiaId!==""&&typeof t.url=="string"&&t.url!==""}function wi(e){const t=new Set;for(const o of[...e.refs.characters,...e.refs.backgrounds,...e.refs.props]){const a=i5.exec(o.tag);a&&t.add(Number(a[1]))}let n=1;for(;t.has(n);)n++;return`@Image${n}`}function Ep(e,t){return{...e,media:t}}function gh(e,t){const n=e.refs.characters.find(a=>a.id===t);if(n)return{list:"characters",ref:n};const o=e.refs.props.find(a=>a.id===t);return o?{list:"props",ref:o}:null}function vh(e){if(typeof e!="string")return null;const t=e.trim();return t!==""&&t.length<=s5?t:null}function SF(e,t,n){if(t.media!==null&&!XI(t.media))return ie("SCHEMA_INVALID","media");const o=t.media?{mdiaId:t.media.mdiaId,url:t.media.url,wdth:t.media.wdth??null,hegt:t.media.hegt??null}:null;if(t.target?.kind==="actor"){const{actorId:a}=t.target,s=e.parts.find(d=>d.partId===n.partId),i=s?.actors.find(d=>d.id===a);if(!s||!i)return ie("REFERENCE_MISSING","target.actorId",{referencedId:a});const r=i.refId?e.refs.characters.find(d=>d.id===i.refId):void 0;if(r){const d={...e.refs,characters:e.refs.characters.map(u=>u.id===r.id?Ep(u,o):u)};return{ok:!0,snapshot:{...e,refs:d}}}if(!o)return{ok:!0,snapshot:e};const l={id:n.idFactory("ref"),tag:wi(e),name:i.name,aliases:[],media:o};return{ok:!0,snapshot:Rn({...e,refs:{...e.refs,characters:[...e.refs.characters,l]}},s.partId,d=>({...d,actors:d.actors.map(u=>u.id===a?{...u,refId:l.id}:u),castRefIds:d.castRefIds.includes(l.id)?d.castRefIds:[...d.castRefIds,l.id]}))}}if(t.target?.kind==="ref"){const a=gh(e,t.target.refId);if(!a)return ie("REFERENCE_MISSING","target.refId",{referencedId:t.target.refId});if(!o&&a.ref.standalone)return ie("SCHEMA_INVALID","media");const s={...e.refs,[a.list]:e.refs[a.list].map(i=>i.id===a.ref.id?Ep(i,o):i)};return{ok:!0,snapshot:{...e,refs:s}}}if(t.target?.kind==="prop"){const{propId:a}=t.target,s=e.parts.find(c=>c.partId===n.partId),i=e.room.props.find(c=>c.id===a)??s?.props.find(c=>c.id===a);if(!i)return ie("REFERENCE_MISSING","target.propId",{referencedId:a});const r=i.refId?e.refs.props.find(c=>c.id===i.refId):void 0;if(r){const c={...e.refs,props:e.refs.props.map(d=>d.id===r.id?Ep(d,o):d)};return{ok:!0,snapshot:{...e,refs:c}}}if(!o)return{ok:!0,snapshot:e};const l={id:n.idFactory("ref"),tag:wi(e),name:i.name,aliases:[],media:o};return Js({...e,refs:{...e.refs,props:[...e.refs.props,l]}},n.partId,a,c=>({...c,refId:l.id}))}return ie("SCHEMA_INVALID","target")}function Ff(e,t,n,o){const a=e.parts.find(i=>i.partId===o);if(t==="actor"){const i=a?.actors.find(r=>r.id===n);return!a||!i?null:{list:"characters",ref:i.refId?e.refs.characters.find(r=>r.id===i.refId):void 0,name:i.name,link:(r,l)=>Rn({...r,refs:{...r.refs,characters:[...r.refs.characters,l]}},a.partId,c=>({...c,actors:c.actors.map(d=>d.id===n?{...d,refId:l.id}:d),castRefIds:c.castRefIds.includes(l.id)?c.castRefIds:[...c.castRefIds,l.id]}))}}const s=e.room.props.find(i=>i.id===n)??a?.props.find(i=>i.id===n);return s?{list:"props",ref:s.refId?e.refs.props.find(i=>i.id===s.refId):void 0,name:s.name,link:(i,r)=>{const l=Js({...i,refs:{...i.refs,props:[...i.refs.props,r]}},o,n,c=>({...c,refId:r.id}));return l.ok?l.snapshot:i}}:null}function iv(e,t){const n={...e};for(const o of["description","handoffName"]){const a=t[o];a!==void 0&&(a===null?delete n[o]:n[o]=a)}return t.name!==void 0&&(n.name=t.name),n}function YI(e,t,n,o){const{ref:a,list:s}=t;if(a){const r={...e.refs,[s]:e.refs[s].map(l=>l.id===a.id?iv(l,n):l)};return{...e,refs:r}}if(!n.description&&!n.handoffName)return e;const i=iv({id:o.idFactory("ref"),tag:wi(e),name:t.name,aliases:[]},n);return t.link(e,i)}function qI(e){if(e===null)return null;if(typeof e!="string")return"invalid";const t=e.trim();return t===""?null:t.length>
243Yl||!y0.test(t)?"invalid":t}function ZI(e,t,n){const o=t.toLowerCase();return[...e.refs.characters,...e.refs.props].some(a=>a.id!==n&&a.handoffName?.toLowerCase()===o)}function JI(e,t){if(typeof e!="string")return ie("SCHEMA_INVALID",t);const n=e.trim();return n.length>ur?ie("SUBJECT_DESCRIPTION_TOO_LONG",t,{max:ur}):n}function IF(e,t,n){const o=t.target?.kind;let a;if(o==="ref"){const c=gh(e,t.target.id);a=c?{list:c.list,ref:c.ref,name:c.ref.name,link:d=>d}:null}else if(o==="actor"||o==="prop")a=Ff(e,o,t.target.id,t.target.partId);else return ie("SCHEMA_INVALID","target");if(!a)return ie("REFERENCE_MISSING","target.id",{referencedId:t.target.id});const s={},{description:i,handoffName:r,name:l}=t.patch??{};if(l!==void 0){const c=vh(l);if(!a.ref?.standalone||c===null)return ie("SCHEMA_INVALID","patch.name");s.name=c}if(i!==void 0){const c=JI(i,"patch.description");if(typeof c!="string")return c;s.description=c===""?null:c}if(r!==void 0){const c=qI(r);if(c==="invalid")return ie("HANDOFF_NAME_INVALID","patch.handoffName",{max:Yl});if(c!==null&&ZI(e,c,a.ref?.id))return ie("HANDOFF_NAME_DUPLICATE","patch.handoffName",{value:c});s.handoffName=c}return{ok:!0,snapshot:YI(e,a,s,n)}}function wF(e,t,n){if(t.kind!=="character"&&t.kind!=="prop")return ie("SCHEMA_INVALID","kind");const o=vh(t.name);if(o===null)return ie("SCHEMA_INVALID","name");if(!XI(t.media))return ie("SCHEMA_INVALID","media");let a="";if(t.description!==void 0){const r=JI(t.description,"description");if(typeof r!="string")return r;a=r}const s=t.kind==="character"?"characters":"props";if(e.refs[s].length>=Mt.refsPerKind)return ie("LIMIT_EXCEEDED",`refs.${s}`);const i={id:n.idFactory("ref"),tag:wi(e),name:o,aliases:[],media:{mdiaId:t.media.mdiaId,url:t.media.url,wdth:t.media.wdth??null,hegt:t.media.hegt??null},...a?{description:a}:{},standalone:!0};return{ok:!0,snapshot:{...e,refs:{...e.refs,[s]:[...e.refs[s],i]}},meta:{createdRefId:i.id}}}function MF(e,t){const n=gh(e,t.refId);if(!n)return ie("REFERENCE_MISSING","refId",{referencedId:t.refId});if(!n.ref.standalone)return ie("SCHEMA_INVALID","refId");const o={...e.refs,[n.list]:e.refs[n.list].filter(a=>a.id!==t.refId)};return{ok:!0,snapshot:{...e,refs:o}}}function $F(e,t,n){if(!e.parts.some(a=>a.partId===t.partId))return ie("REFERENCE_MISSING","partId",{referencedId:t.partId});let o=e;for(const[a,s]of Object.entries(t.names??{})){const i=qI(s);if(i===null||i==="invalid")continue;const r=o.refs.characters.find(d=>d.id===a),l=o.refs.props.find(d=>d.id===a),c=r||l?{list:r?"characters":"props",ref:r??l,name:(r??l).name,link:d=>d}:Ff(o,"actor",a,t.partId)??Ff(o,"prop",a,t.partId);!c||c.ref?.handoffName||ZI(o,i,c.ref?.id)||(o=YI(o,c,{handoffName:i},n))}return{ok:!0,snapshot:o}}function EF(e,t){return!Number.isFinite(t.widthM)||t.widthM<hi||t.widthM>bi?ie("LIMIT_EXCEEDED","widthM"):!Number.isFinite(t.depthM)||t.depthM<hi||t.depthM>bi?ie("LIMIT_EXCEEDED","depthM"):{ok:!0,snapshot:Ia(e,o=>{const a={...o,widthM:t.widthM,depthM:t.depthM};return{...a,openings:Qk(a)}})}}function xF(e,t){return{ok:!0,snapshot:Ia(e,o=>({...o,walls:{...o.walls,[t.wall]:t.visible}}))}}function PF(e,t){return{ok:!0,snapshot:Ia(e,o=>({...o,kind:t.kind}))}}function CF(e,t){if(!v0(t.targetVideoModel))return ie("SCHEMA_INVALID","targetVideoModel",{value:String(t.targetVideoModel)});const n=za(t.targetVideoModel),o=n?e.parts.filter(a=>a.durationSec<n.minSec||a.durationSec>n.maxSec).map(a=>a.partId):[];return{ok:!0,snapshot:{...e,targetVideoModel:t.targetVideoModel},meta:{outOfRangeParts:o}}}function BF(e,t){const{ko:n}=t.patch;if(n!==void 0&&(typeof n!="string"||n.length>dr))return ie("LIMIT_EXCEEDED","patch.ko",{max:dr});const o={...e.styleDirection,...n!==void 0?{ko:n}:{}};return{ok:!0,snapshot:{...e,styleDirection:o}}}function oo(e,t){return e.parts.find(n=>n.partId===t)??null}function ao(e,t,n){return{ok:!0,snapshot:Rn(e,t,a=>({...a,timeline:n(a.timeline)}))}}function _F(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!o.actors.some(r=>r.id===t.actorId))return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});if(t.motionId!==void 0&&!bu(t.motionId))return ie("REFERENCE_MISSING","motionId",{referencedId:t.motionId});const a=Yn(t.startSec,0,o.durationSec),s=Yn(t.endSec??t.startSec+1,0,o.durationSec),i={id:n.idFactory("act"),actorId:t.actorId,startSec:a,endSec:s,actionType:t.actionType??"",actionClass:t.actionClass??"performance",text:{},source:"user",...t.motionId!==void 0?{motionId:t.motionId}:{}};return ao(e,n.partId,r=>({...r,actions:[...r.actions,i]}))}function AF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.actions.find(r=>r.id===t.actionId);if(!o||!a)return ie("REFERENCE_MISSING","actionId",{referencedId:t.actionId});const{startSec:s,endSec:i}=$r(t.startSec,a.endSec-a.startSec,{startSec:0,endSec:o.durationSec});return ao(e,n.partId,r=>({...r,actions:r.actions.map(l=>l.id===t.actionId?{...l,startSec:s,endSec:i}:l)}))}function TF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.actions.find(i=>i.id===t.actionId);if(!o||!a)return ie("REFERENCE_MISSING","actionId",{referencedId:t.actionId});const s=yi(a,t,{startSec:0,endSec:o.durationSec},n.fps);return s?ao(e,n.partId,i=>({...i,actions:i.actions.map(r=>r.id===t.actionId?{...r,...s}:r)})):ie("INVALID_RANGE","endSec")}
243function RF(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!o.timeline.actions.some(r=>r.id===t.actionId))return ie("REFERENCE_MISSING","actionId",{referencedId:t.actionId});const{actorId:a,targetPropId:s,targetOpeningId:i}=t.patch;return a!==void 0&&!o.actors.some(r=>r.id===a)?ie("REFERENCE_MISSING","patch.actorId",{referencedId:a}):s!==void 0&&![...e.room.props,...o.props].some(r=>r.id===s)?ie("REFERENCE_MISSING","patch.targetPropId",{referencedId:s}):i!==void 0&&!e.room.openings.some(r=>r.id===i)?ie("REFERENCE_MISSING","patch.targetOpeningId",{referencedId:i}):ao(e,n.partId,r=>({...r,actions:r.actions.map(l=>l.id===t.actionId?Ri(l,t.patch):l)}))}function DF(e,t,n){const o=oo(e,n.partId);return o?o.timeline.actions.some(a=>a.id===t.actionId)?t.motionId!==null&&!bu(t.motionId)?ie("REFERENCE_MISSING","motionId",{referencedId:t.motionId}):ao(e,n.partId,a=>({...a,actions:a.actions.map(s=>{if(s.id!==t.actionId)return s;if(t.motionId===null){const{motionId:i,...r}=s;return r}return{...s,motionId:t.motionId}})})):ie("REFERENCE_MISSING","actionId",{referencedId:t.actionId}):ie("REFERENCE_MISSING","partId",{referencedId:n.partId})}function OF(e,t){const n=ia(e,t.actionId);return n.kind==="unknown"?ie("REFERENCE_MISSING","actionId",{referencedId:t.actionId}):{ok:!0,snapshot:Ci(e,n),meta:{removed:n}}}function NF(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!o.actors.some(r=>r.id===t.actorId))return ie("REFERENCE_MISSING","actorId",{referencedId:t.actorId});const a=Yn(t.startSec,0,o.durationSec),s=Yn(t.endSec??t.startSec+1,0,o.durationSec),i={id:n.idFactory("dlg"),actorId:t.actorId,startSec:a,endSec:s,line:t.line??"",lang:t.lang??"ko-KR",mode:t.mode??"blocking",timeSource:"explicit"};return ao(e,n.partId,r=>({...r,dialogues:[...r.dialogues,i]}))}function LF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.dialogues.find(r=>r.id===t.dialogueId);if(!o||!a)return ie("REFERENCE_MISSING","dialogueId",{referencedId:t.dialogueId});const{startSec:s,endSec:i}=$r(t.startSec,a.endSec-a.startSec,{startSec:0,endSec:o.durationSec});return ao(e,n.partId,r=>({...r,dialogues:r.dialogues.map(l=>l.id===t.dialogueId?{...l,startSec:s,endSec:i}:l)}))}function KF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.dialogues.find(i=>i.id===t.dialogueId);if(!o||!a)return ie("REFERENCE_MISSING","dialogueId",{referencedId:t.dialogueId});const s=yi(a,t,{startSec:0,endSec:o.durationSec},n.fps);return s?ao(e,n.partId,i=>({...i,dialogues:i.dialogues.map(r=>r.id===t.dialogueId?{...r,...s}:r)})):ie("INVALID_RANGE","endSec")}function FF(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!o.timeline.dialogues.some(s=>s.id===t.dialogueId))return ie("REFERENCE_MISSING","dialogueId",{referencedId:t.dialogueId});const{actorId:a}=t.patch;return a!==void 0&&!o.actors.some(s=>s.id===a)?ie("REFERENCE_MISSING","patch.actorId",{referencedId:a}):ao(e,n.partId,s=>({...s,dialogues:s.dialogues.map(i=>i.id===t.dialogueId?Ri(i,t.patch):i)}))}function HF(e,t){const n=ia(e,t.dialogueId);return n.kind==="unknown"?ie("REFERENCE_MISSING","dialogueId",{referencedId:t.dialogueId}):{ok:!0,snapshot:Ci(e,n),meta:{removed:n}}}function QI(e,t,n){return e.room.openings.some(o=>o.id===n)||e.room.props.some(o=>o.id===n)||t.props.some(o=>o.id===n)}function zF(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!QI(e,o,t.targetId))return ie("REFERENCE_MISSING","targetId",{referencedId:t.targetId});const a=Yn(t.startSec,0,o.durationSec),s=Yn(t.endSec??t.startSec+1,0,o.durationSec),i={id:n.idFactory("pev"),targetId:t.targetId,startSec:a,endSec:s,state:t.state??{open:!0}};return ao(e,n.partId,r=>({...r,propEvents:[...r.propEvents,i]}))}function jF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.propEvents.find(r=>r.id===t.propEventId);if(!o||!a)return ie("REFERENCE_MISSING","propEventId",{referencedId:t.propEventId});const{startSec:s,endSec:i}=$r(t.startSec,a.endSec-a.startSec,{startSec:0,endSec:o.durationSec});return ao(e,n.partId,r=>
243({...r,propEvents:r.propEvents.map(l=>l.id===t.propEventId?{...l,startSec:s,endSec:i}:l)}))}function UF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.propEvents.find(i=>i.id===t.propEventId);if(!o||!a)return ie("REFERENCE_MISSING","propEventId",{referencedId:t.propEventId});const s=yi(a,t,{startSec:0,endSec:o.durationSec},n.fps);return s?ao(e,n.partId,i=>({...i,propEvents:i.propEvents.map(r=>r.id===t.propEventId?{...r,...s}:r)})):ie("INVALID_RANGE","endSec")}function GF(e,t,n){const o=oo(e,n.partId);return o?o.timeline.propEvents.some(a=>a.id===t.propEventId)?t.patch.targetId!==void 0&&!QI(e,o,t.patch.targetId)?ie("REFERENCE_MISSING","patch.targetId",{referencedId:t.patch.targetId}):ao(e,n.partId,a=>({...a,propEvents:a.propEvents.map(s=>s.id===t.propEventId?Ri(s,t.patch):s)})):ie("REFERENCE_MISSING","propEventId",{referencedId:t.propEventId}):ie("REFERENCE_MISSING","partId",{referencedId:n.partId})}function VF(e,t,n){const o=oo(e,n.partId);return!o||!o.timeline.propEvents.some(a=>a.id===t.propEventId)?ie("REFERENCE_MISSING","propEventId",{referencedId:t.propEventId}):ao(e,n.partId,a=>({...a,propEvents:a.propEvents.filter(s=>s.id!==t.propEventId)}))}function WF(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!o.cameras.some(r=>r.id===t.cameraId))return ie("REFERENCE_MISSING","cameraId",{referencedId:t.cameraId});if(!(t.endSec>t.startSec))return ie("INVALID_RANGE","endSec");const a=Yn(t.startSec,0,o.durationSec),s=Yn(t.endSec,0,o.durationSec),i={id:n.idFactory("cov"),cameraId:t.cameraId,startSec:a,endSec:s,shotType:t.shotType??"medium",subject:t.subject??{targetIds:[]},timingMode:"absolute"};return ao(e,n.partId,r=>({...r,coverages:[...r.coverages,i]}))}function XF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.coverages.find(r=>r.id===t.coverageId);if(!o||!a)return ie("REFERENCE_MISSING","coverageId",{referencedId:t.coverageId});const{startSec:s,endSec:i}=$r(t.startSec,a.endSec-a.startSec,{startSec:0,endSec:o.durationSec});return ao(e,n.partId,r=>({...r,coverages:r.coverages.map(l=>l.id===t.coverageId?{...l,startSec:s,endSec:i}:l)}))}function YF(e,t,n){const o=oo(e,n.partId),a=o?.timeline.coverages.find(i=>i.id===t.coverageId);if(!o||!a)return ie("REFERENCE_MISSING","coverageId",{referencedId:t.coverageId});const s=yi(a,t,{startSec:0,endSec:o.durationSec},n.fps);return s?ao(e,n.partId,i=>({...i,coverages:i.coverages.map(r=>r.id===t.coverageId?{...r,...s}:r)})):ie("INVALID_RANGE","endSec")}function qF(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!o.timeline.coverages.some(s=>s.id===t.coverageId))return ie("REFERENCE_MISSING","coverageId",{referencedId:t.coverageId});const a=t.patch.subject;return a&&!a.targetIds.every(s=>o.actors.some(i=>i.id===s))?ie("REFERENCE_MISSING","patch.subject.targetIds"):ao(e,n.partId,s=>({...s,coverages:s.coverages.map(i=>i.id===t.coverageId?Ri(i,t.patch):i)}))}function ZF(e,t){const n=ia(e,t.coverageId);return n.kind==="unknown"?ie("REFERENCE_MISSING","coverageId",{referencedId:t.coverageId}):{ok:!0,snapshot:Ci(e,n),meta:{removed:n}}}function JF(e,t,n){const o=oo(e,n.partId);if(!o)return ie("REFERENCE_MISSING","partId",{referencedId:n.partId});if(!o.timeline.coverages.some(a=>a.id===t.coverageId))return ie("REFERENCE_MISSING","coverageId",{referencedId:t.coverageId});if(t.anchor){const{targetId:a,eventType:s}=t.anchor,i=s.startsWith("action"),r=s.startsWith("dialogue");if(!(i?o.timeline.actions.some(c=>c.id===a):r?o.timeline.dialogues.some(c=>c.id===a):!0))return ie("REFERENCE_MISSING","anchor.targetId",{referencedId:a})}return ao(e,n.partId,a=>({...a,coverages:a.coverages.map(s=>{if(s.id!==t.coverageId)return s;if(!t.anchor){const{anchor:i,...r}=s;return r}return{...s,anchor:t.anchor}})}))}function rv(e,t,n){switch(t.type){case"actor.moveStart":return KB(e,t,n);case"actor.setHeading":return HB(e,t,n);case"actor.setField":return zB(e,t,n);case"actor.setPose":return GB(e,t,n);case"actor.addWaypoint":return VB(e,t,n);case"actor.moveWaypoint":return WB(e,t,n);case"actor.removeWaypoint":return XB(e,t,n);case"actor.setWaypointPause":return YB(e,t,n);case"actor.setWaypointTime":return qB(e,t,n);
243case"actor.replacePath":return ZB(e,t,n);case"actor.translate":return JB(e,t,n);case"actor.add":return QB(e,t,n);case"actor.addFacingKey":return u3(e,t,n);case"actor.moveFacingKey":return p3(e,t,n);case"actor.setFacingKey":return f3(e,t,n);case"actor.removeFacingKey":return m3(e,t,n);case"actor.movePositionKey":return h3(e,t,n);case"actor.clearPositionKeys":return b3(e,t,n);case"actor.addPoseKey":return g3(e,t,n);case"actor.removePoseKey":return v3(e,t,n);case"actor.shiftTimeline":return k3(e,t,n);case"actor.addCarryKey":return S3(e,t,n);case"actor.removeCarryKey":return I3(e,t,n);case"entity.remove":return d8(e,t);case"entity.duplicate":return u8(e,t,n);case"entity.rename":return p8(e,t,n);case"prop.move":return fF(e,t,n);case"prop.place":return gF(e,t,n);case"prop.rotate":return mF(e,t,n);case"prop.resize":return hF(e,t,n);case"prop.add":return bF(e,t,n);case"prop.setField":return kF(e,t,n);case"prop.setElevation":return vF(e,t,n);case"prop.setCatalog":return yF(e,t,n);case"camera.move":return z3(e,t,n);case"camera.setField":return j3(e,t,n);case"camera.add":return U3(e,t,n);case"camera.aimAt":return W3(e,t,n);case"room.setSize":return EF(e,t);case"room.setWall":return xF(e,t);case"room.setKind":return PF(e,t);case"opening.add":return b8(e,t,n);case"opening.move":return g8(e,t);case"opening.setField":return v8(e,t);case"import.apply":return f8(e,t);case"source.set":return m8(e,t);case"part.setTitle":return iF(e,t);case"part.setDuration":return rF(e,t);case"part.setHandoffRecording":return lF(e,t);case"part.setHandoffProse":return cF(e,t);case"scene.setTargetModel":return CF(e,t);case"scene.setStyle":return BF(e,t);case"ref.setMedia":return SF(e,t,n);case"ref.setInfo":return IF(e,t,n);case"ref.addStandalone":return wF(e,t,n);case"ref.removeStandalone":return MF(e,t);case"refs.fillHandoffNames":return $F(e,t,n);case"action.add":return _F(e,t,n);case"action.move":return AF(e,t,n);case"action.trim":return TF(e,t,n);case"action.setField":return RF(e,t,n);case"action.setMotion":return DF(e,t,n);case"action.remove":return OF(e,t);case"dialogue.add":return NF(e,t,n);case"dialogue.move":return LF(e,t,n);case"dialogue.trim":return KF(e,t,n);case"dialogue.setField":return FF(e,t,n);case"dialogue.remove":return HF(e,t);case"propEvent.add":return zF(e,t,n);case"propEvent.move":return jF(e,t,n);case"propEvent.trim":return UF(e,t,n);case"propEvent.setField":return GF(e,t,n);case"propEvent.remove":return VF(e,t,n);case"coverage.add":return WF(e,t,n);case"coverage.move":return XF(e,t,n);case"coverage.trim":return YF(e,t,n);case"coverage.setField":return qF(e,t,n);case"coverage.remove":return ZF(e,t);case"coverage.setAnchor":return JF(e,t,n);case"cut.add":return Q3(e,t,n);case"cut.move":return e8(e,t,n);case"cut.trim":return t8(e,t,n);case"cut.remove":return n8(e,t,n);case"cut.split":return o8(e,t,n);case"cut.merge":return a8(e,t,n);case"cut.fillGap":return s8(e,t,n);case"cut.setDirection":return i8(e,t,n);case"cut.setCamera":return r8(e,t,n);case"camera.addKey":return Y3(e,t,n);case"camera.moveKey":return q3(e,t,n);case"camera.setKeyField":return Z3(e,t,n);case"camera.removeKey":return J3(e,t,n);case"background.set":return P3(e,t);case"background.setHomography":return C3(e,t);case"background.setOpacity":return B3(e,t);case"background.setVisible":return _3(e,t);case"background.remove":return A3(e);default:return ie("SCHEMA_INVALID","command.type")}}const Tu={"actor.moveStart":"tool.blockingBoard.history.cmd.actorMoveStart","actor.setHeading":"tool.blockingBoard.history.cmd.actorSetHeading","actor.setField":"tool.blockingBoard.history.cmd.actorSetField","actor.setPose":"tool.blockingBoard.history.cmd.actorSetPose","actor.addWaypoint":"tool.blockingBoard.history.cmd.actorAddWaypoint","actor.moveWaypoint":"tool.blockingBoard.history.cmd.actorMoveWaypoint","actor.removeWaypoint":"tool.blockingBoard.history.cmd.actorRemoveWaypoint","actor.setWaypointPause":"tool.blockingBoard.history.cmd.actorSetWaypointPause","actor.setWaypointTime":"tool.blockingBoard.history.cmd.actorSetWaypointTime","actor.replacePath":"tool.blockingBoard.history.cmd.actorReplacePath","actor.translate":"tool.blockingBoard.history.cmd.actorTranslate","actor.addFacingKey":"tool.blockingBoard.history.cmd.actorAddFacingKey","actor.moveFacingKey":"tool.blockingBoard.history.cmd.actorMoveFacingKey","actor.setFacingKey":"tool.blockingBoard.history.cmd.actorSetFacingKey","actor.removeFacingKey":"tool.blockingBoard.history.cmd.actorRemoveFacingKey","actor.movePositionKey":"tool.blockingBoard.history.cmd.actorMovePositionKey","actor.clearPositionKeys":"tool.blockingBoard.history.cmd.actorClearPositionKeys","actor.addPoseKey":"tool.blockingBoard.history.cmd.addPoseKey","actor.removePoseKey":"tool.blockingBoard.history.cmd.removePoseKey","actor.shiftTimeline":"tool.blockingBoard.history.cmd.shiftTimeline","actor.addCarryKey":"tool.blockingBoard.history.cmd.addCarryKey","actor.removeCarryKey":"tool.blockingBoard.history.cmd.removeCarryKey","actor.add":"tool.blockingBoard.history.cmd.actorAdd","entity.remove":"tool.blockingBoard.history.cmd.entityRemove","entity.duplicate":"tool.blockingBoard.history.cmd.entityDuplicate","entity.rename":"tool.blockingBoard.history.cmd.entityRename","prop.move":"tool.blockingBoard.history.cmd.propMove","prop.place":"tool.blockingBoard.history.cmd.propPlace","prop.rotate":"tool.blockingBoard.history.cmd.propRotate","prop.resize":"tool.blockingBoard.history.cmd.propResize","prop.add":"tool.blockingBoard.history.cmd.propAdd","prop.setField":"tool.blockingBoard.history.cmd.propSetField","prop.setElevation":"tool.blockingBoard.history.cmd.propSetElevation","prop.setCatalog":"tool.blockingBoard.history.cmd.propSetCatalog","camera.move":"tool.blockingBoard.history.cmd.cameraMove","camera.setField":"tool.blockingBoard.history.cmd.cameraSetField","camera.add":"tool.blockingBoard.history.cmd.cameraAdd","camera.aimAt":"tool.blockingBoard.history.cmd.cameraAimAt","room.setSize":"tool.blockingBoard.history.cmd.roomSetSize","room.setWall":"tool.blockingBoard.history.cmd.roomSetWall","room.setKind":"tool.blockingBoard.history.cmd.roomSetKind","opening.add":"tool.blockingBoard.history.cmd.openingAdd","opening.move":"tool.blockingBoard.history.cmd.openingMove","opening.setField":"tool.blockingBoard.history.cmd.openingSetField","import.apply":"tool.blockingBoard.history.cmd.importApply","source.set":"tool.blockingBoard.history.cmd.sourceSet","part.setTitle":"tool.blockingBoard.history.cmd.partSetTitle","part.setDuration":"tool.blockingBoard.history.cmd.partSetDuration","part.setHandoffRecording":"tool.blockingBoard.history.cmd.partSetHandoffRecording","part.setHandoffProse":"tool.blockingBoard.history.cmd.partSetHandoffProse","scene.setTargetModel":"tool.blockingBoard.history.cmd.sceneSetTargetModel","scene.setStyle":"tool.blockingBoard.history.cmd.sceneSetStyle","ref.setMedia":"tool.blockingBoard.history.cmd.refSetMedia","ref.setInfo":"tool.blockingBoard.history.cmd.refSetInfo","ref.addStandalone":"tool.blockingBoard.history.cmd.refAddStandalone","ref.removeStandalone":"tool.blockingBoard.history.cmd.refRemoveStandalone","refs.fillHandoffNames":"tool.blockingBoard.history.cmd.refsFillHandoffNames","action.add":"tool.blockingBoard.history.cmd.actionAdd","action.move":"tool.blockingBoard.history.cmd.actionMove","action.trim":"tool.blockingBoard.history.cmd.actionTrim","action.setField":"tool.blockingBoard.history.cmd.actionSetField","action.setMotion":"tool.blockingBoard.history.cmd.actionSetMotion","action.remove":"tool.blockingBoard.history.cmd.actionRemove","dialogue.add":"tool.blockingBoard.history.cmd.dialogueAdd","dialogue.move":"tool.blockingBoard.history.cmd.dialogueMove","dialogue.trim":"tool.blockingBoard.history.cmd.dialogueTrim","dialogue.setField":"tool.blockingBoard.history.cmd.dialogueSetField","dialogue.remove":"tool.blockingBoard.history.cmd.dialogueRemove","propEvent.add":"tool.blockingBoard.history.cmd.propEventAdd","propEvent.move":"tool.blockingBoard.history.cmd.propEventMove","propEvent.trim":"tool.blockingBoard.history.cmd.propEventTrim","propEvent.setField":"tool.blockingBoard.history.cmd.propEventSetField","propEvent.remove":"tool.blockingBoard.history.cmd.propEventRemove","coverage.add":"tool.blockingBoard.history.cmd.coverageAdd","coverage.move":"tool.blockingBoard.history.cmd.coverageMove","coverage.trim":"tool.blockingBoard.history.cmd.coverageTrim","coverage.setField":"tool.blockingBoard.history.cmd.coverageSetField","coverage.remove":"tool.blockingBoard.history.cmd.coverageRemove","coverage.setAnchor":"tool.blockingBoard.history.cmd.coverageSetAnchor","cut.add":"tool.blockingBoard.history.cmd.cutAdd","cut.move":"tool.blockingBoard.history.cmd.cutMove","cut.trim":"tool.blockingBoard.history.cmd.cutTrim","cut.remove":"tool.blockingBoard.history.cmd.cutRemove","cut.split":"tool.blockingBoard.history.cmd.cutSplit","cut.setDirection":"tool.blockingBoard.history.cmd.cutSetDirection","cut.setCamera":"tool.blockingBoard.history.cmd.cutSetCamera","cut.merge":"tool.blockingBoard.history.cmd.cutMerge","cut.fillGap":"tool.blockingBoard.history.cmd.cutFillGap","camera.addKey":"tool.blockingBoard.history.cmd.cameraAddKey","camera.moveKey":"tool.blockingBoard.history.cmd.cameraMoveKey","camera.setKeyField":"tool.blockingBoard.history.cmd.cameraSetKeyField","camera.removeKey":"tool.blockingBoard.history.cmd.cameraRemoveKey","background.set":"tool.blockingBoard.history.cmd.backgroundSet","background.setHomography":"tool.blockingBoard.history.cmd.backgroundSetHomography","background.setOpacity":"tool.blockingBoard.history.cmd.backgroundSetOpacity","background.setVisible":"tool.blockingBoard.history.cmd.backgroundSetVisible","background.remove":"tool.blockingBoard.history.cmd.backgroundRemove"},QF=new Set(["cut.add","cut.move","cut.trim","cut.remove","cut.split","cut.merge","cut.fillGap","cut.setDirection","cut.setCamera"]),e4=new Set(["room.setSize","room.setWall","room.setKind","import.apply","source.set","background.set","background.setHomography","background.setOpacity","background.setVisible","background.remove"]);function t4(e){return e.endsWith(".remove")}function n4(e,t){const n=new Set(Object.keys(ka(e))),o=ka(t),a=Object.keys(o).filter(s=>!n.has(s));return a.length===1?a[0]:null}function o4(e){const t=e,n=t.actorId??t.propId??t.cameraId??t.openingId??t.id??t.actionId??t.dialogueId??t.propEventId??t.coverageId??t.cutId;return typeof n=="string"?n:null}function lv(e,t,n){return e.type.endsWith(".add")?n4(t,n):o4(e)}function a4(e,t,n,o){const a=Tu[e.type];if(e4.has(e.type))return{key:a};if(QF.has(e.type)){const d=(e.type==="cut.remove"||e.type==="cut.merge"?t:n).parts.find(f=>f.partId===o),u=lv(e,t,n),p=d&&u?Oi(d.timeline.cuts).get(u):void 0;return p===void 0?{key:a}:{key:a,params:{n:p}}}const s=lv(e,t,n);if(!s)return{key:a};const r=ka(t4(e.type)?t:n)[s];return r?{key:a,name:r}:{key:a}}function cv(e,t,n,o){const a=e[0];return a?e.length>1&&e.every(s=>s.type==="entity.remove")?{key:"tool.blockingBoard.history.removeMany",params:{n:e.length}}:a4(a,t,n,o):{key:Tu["entity.remove"]}}function s4(e){return{entries:[...e.undo,...e.redo].map(t=>({label:t.label})),index:e.undo.length,truncated:e.truncated}}function i4(e,t){return t<e?{undo:e-t,redo:0}:t>e?{undo:0,redo:t-e}:{undo:0,redo:0}}const r4=["e","se","s","sw","w","nw","n","ne"];function l4(e){const t=(e%360+360)%360;return r4[Math.round(t/45)%8]}function c4(e,t){const n=e.x<-t.widthM/6?"w":e.x>t.widthM/6?"e":"";return(e.y<-t.depthM/6?"n":e.y>t.depthM/6?"s":"")+n||"c"}const d4=.6;function u4(e,t){let n=null,o=1/0;for(const a of t){if(Tt(a.catalogKey??a.kind)?.walkable||$u(a))continue;const s=Ss(a,e),i=Math.hypot(Math.max(Math.abs(s.x)-a.depthM/2,0),Math.max(Math.abs(s.y)-a.widthM/2,0)
243);i<=d4&&i<o&&(n=a.id,o=i)}return n}const p4=1e-9;function Ru(e,t,n){const o=e.parts.find(s=>s.partId===t);return o?o.actors.some(s=>s.id===n)?[...e.room.props,...o.props].filter(s=>Tt(s.catalogKey??s.kind)?.seat):[]:[]}function f4(e,t){let n=null,o=1/0;for(const a of t){const s=Math.hypot(a.center.x-e.x,a.center.y-e.y);s<o-p4&&(n=a,o=s)}return n?.id??null}function dv(e,t){return t<0?0:Tn(Math.min(t,Math.max(-t,e)))}function xp(e){const{at:t,room:n,halfSizeM:o}=e;return{x:dv(t.x,n.widthM/2-o.x),y:dv(t.y,n.depthM/2-o.y)}}function m4(e,t,n){const o=e.widthM/2,a=e.depthM/2,s=[{wall:"north",d:Math.abs(t.y+a)},{wall:"south",d:Math.abs(t.y-a)},{wall:"west",d:Math.abs(t.x+o)},{wall:"east",d:Math.abs(t.x-o)}];let i=s[0];for(const r of s)r.d<i.d&&(i=r);return{wall:i.wall,offsetM:Tn(mh(e,{wall:i.wall,widthM:n},t))}}function Ms(e,t){const n=t.x-e.x,o=t.y-e.y;return Math.hypot(n,o)<1e-9?0:Qt(Math.atan2(o,n)*180/Math.PI)}const Mi={slow:.8,normal:1.4,fast:2,run:4},$i=.05,rr=.01,h4=.3,b4=1,Ei=1e-6,yh=1e-6,g4="tool.blockingBoard.history.cmd.intentMove",Ac="tool.blockingBoard.inspector.act.row.",_n=e=>({ok:!1,reason:e}),ha=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y);function Za(e,t,n){const o=e.parts.find(s=>s.partId===t),a=o?.actors.find(s=>s.id===n);return o&&a?{part:o,actor:a}:null}function Xa(e,t,n){return mn(e,n,{durationSec:t.durationSec})}function kh(e){let t;for(let n=0;n<e.length;n++){const o=e[n].atSec;o!==void 0&&(t!==void 0&&o<=t&&(e[n]={...e[n],atSec:t+$i}),t=e[n].atSec)}}function e1(e){return Math.max(0,...e.map(t=>t.atSec??0))}const Hf=(e,t)=>e.atSec===void 0?e:{...e,atSec:e.atSec+t};function v4(e,t){if(t<=e.durationSec+1e-9)return null;const n=Math.ceil(t-1e-9)+1;return{command:{type:"part.setDuration",partId:e.partId,durationSec:n,mode:"keep"},durationSec:n}}function Du(e){const t=za(e.targetVideoModel)?.maxSec;return Math.min(Mt.partDurationMaxSec,t??1/0)}function Sh(e,t,n){const o=v4(e,t);return o?t>n+1e-9?"tooLong":o.durationSec<=n?o:{command:{type:"part.setDuration",partId:e.partId,durationSec:n,mode:"keep"},durationSec:n}:null}function Lo(e,t,n,o=null){return{ok:!0,commands:o?[o.command,...e]:e,label:t,endSec:n,extendedTo:o?o.durationSec:null}}const t1=e=>({key:g4,name:{text:e.name}}),sa=(e,t)=>({key:Tu[e],name:{text:t.name}});function n1(e,t){return t==="run"&&e.movementMode==="walking"?[{type:"actor.setField",actorId:e.id,patch:{movementMode:"running"}}]:[]}function o1(e){let t="slow",n=1/0;for(const o of Object.keys(Mi)){const a=Math.abs(Mi[o]-e);a<n&&(t=o,n=a)}return t}const y4={slow:"slow",normal:"normal",brisk:"fast",run:"fast"};function k4(e,t,n){const o=Ai(e,t).find(a=>a.departSec<n-1e-9&&n<a.arriveSec-1e-9);return o?y4[Pd(o.distanceM/(o.arriveSec-o.departSec))]:"normal"}function a1(e,t){const n=ku(e,t),o=e.path.waypoints.map((a,s)=>({...a,atSec:n[s].atSec}));return kh(o),o}function $s(e,t){return Ai(e,t).map(n=>({first:n.first,last:n.last,departSec:n.departSec,arriveSec:n.arriveSec,lengthM:n.distanceM,mps:n.distanceM/Math.max(1e-6,n.arriveSec-n.departSec)}))}const S4=new Set(["sit","lie","kneel","crouch"]),I4=1e-6,w4=.1;function uv(e,t){let n=0;for(const o of e)t+n>=o.fromSec-1e-6&&(n+=o.deltaSec);return n}function s1(e,t,n,o,a,s,i){const r=n.path.waypoints,l=a1(n,t.durationSec),c={...n.start.position,atSec:0,pauseSec:0};let d,u;if(i==="append"){const oe=l.at(-1)??c;d=Math.max(e.playheadSec,oe.atSec+oe.pauseSec),u=l.length}else d=e.playheadSec,u=l.findIndex(oe=>oe.atSec>d+1e-9),u<0&&(u=l.length);const p=r.slice(0,u),f=l.slice(u),h=l[u-1]??c,b=Xa(n,t,d),I=i==="append"?{x:h.x,y:h.y}:b.position,y=S4.has(b.pose),w=y?d+bf:null,M=oe=>ha(oe,I)<=I4,x=!M(h),_=d+Math.max(y?bf:0,x?rr:0);let O=d;x?p.push({x:I.x,y:I.y,atSec:d,pauseSec:_-d}):(O=Math.max(d,h.atSec+h.pauseSec),p.length>0?p[p.length-1]={...h,pauseSec:_-h.atSec}:_>Ei&&p.push({x:I.x,y:I.y,atSec:0,pauseSec:_}));const A=new Set(s);y&&b.seatPropId&&A.add(b.seatPropId);const N=Ra(e.snapshot.room,t,n).filter(oe=>!A.has(oe.id)),K=Vt(n),F=Cl(I,o,N,K);if(!F)return _n("noRoute");const B=Mi[a],j=p.length;let ee=0;for(let oe=1;oe<F.length;oe++)ee+=ha(F[oe-1],F[oe]),p.push(oe===F.length-1?{x:F[oe].x,y:F[oe].y,atSec:_+ee/B,pauseSec:rr}:{x:F[oe].x,y:F[oe].y,pauseSec:0});const D=p.length-1,Z=p[D].atSec,L=Z+rr-d,V=[];let pe=null,le=null,me=null;if(i==="insert"){V.push({fromSec:d,deltaSec:L});const oe=t.timeline.actions.filter(re=>re.actorId===n.id&&re.actionClass==="movement"),fe=oe.find(re=>re.startSec<d-1e-6&&re.endSec>d+1e-6);
243fe&&(pe={actionId:fe.id,endSec:d});let X=0;for(;X<f.length&&M(f[X]);)O=f[X].atSec+f[X].pauseSec,X++;if(X<f.length){const re=Ai(n,t.durationSec).find(q=>q.first<=u+X&&u+X<=q.last),Se=re?re.last-u:X,Q=f[Se];let $e=ha(I,f[X]);for(let q=X+1;q<=Se;q++)$e+=ha(f[q-1],f[q]);const Fe=Q.atSec-O,Ze=O+L;p[D]={...p[D],pauseSec:Ze-Z};const ue=Fe>Ei&&$e>1e-6?Cl(p[D],Q,N,K):null;let ye=0;if(ue){const q=$e/Fe;let de=0;for(let Ce=1;Ce<ue.length;Ce++)de+=ha(ue[Ce-1],ue[Ce]),p.push(Ce===ue.length-1?{x:ue[Ce].x,y:ue[Ce].y,atSec:Ze+de/q,pauseSec:Q.pauseSec}:{x:ue[Ce].x,y:ue[Ce].y,pauseSec:0});ye=de/q-Fe}else{for(let q=X;q<Se;q++)p.push(Hf(r[u+q],L));p.push({...r[u+Se],atSec:Q.atSec+L})}for(let q=Se+1;q<f.length;q++)p.push(Hf(r[u+q],L+ye));const Ue=Q.atSec+L+ye,te=Math.abs(ye)>yh;if(te&&V.push({fromSec:Q.atSec+L,deltaSec:ye}),fe)le={startSec:Ze,endSec:Ue,actionType:fe.actionType};else if(te){const q=oe.find(de=>de.startSec>=d-1e-6&&Math.abs(de.startSec-O)<$i&&Math.abs(de.endSec-Q.atSec)<$i);q&&(me={actionId:q.id,endSec:Ue})}}}return p.length>Mt.waypointsPerActor?_n("tooManyWaypoints"):(kh(p),{waypoints:p,arriveSec:p[D].atSec,departSec:_,firstStepDeg:F.length>1?Ms(I,F[1]):null,insertFirst:j,insertLast:D,shifts:V,standUpAtSec:w,cutAction:pe,restAction:le,fitAction:me})}function i1(e,t,n,o,a,s=[]){const{shifts:i,cutAction:r}=n,l=y=>y+uv(i,y),c=e.timeline.actions.filter(y=>y.actorId===t.id),d=Math.max(e1(n.waypoints),...t.poseKeys.map(y=>l(y.atSec)),...t.facingKeys.map(y=>l(y.atSec)),...(t.carryKeys??[]).map(y=>l(y.atSec)),...c.filter(y=>y.id!==r?.actionId).map(y=>y.endSec+uv(i,y.startSec)),n.restAction?.endSec??0);if(d>Mt.partDurationMaxSec+1e-9)return _n("partTooLong");const u=Sh(e,d,a);if(u==="tooLong")return _n("partTooLong");const p=i.length>0&&[...t.poseKeys.map(y=>y.atSec),...t.facingKeys.map(y=>y.atSec),...(t.carryKeys??[]).map(y=>y.atSec),...c.filter(y=>y.id!==r?.actionId).map(y=>y.startSec)].some(y=>y>=i[0].fromSec-1e-6),f=[];if(r){const y=c.find(w=>w.id===r.actionId);f.push(r.endSec-y.startSec<w4?{type:"action.remove",actionId:y.id}:{type:"action.trim",actionId:y.id,endSec:r.endSec})}for(const y of p?i:[])Math.abs(y.deltaSec)>yh&&f.push({type:"actor.shiftTimeline",actorId:t.id,...y});n.fitAction&&f.push({type:"action.trim",actionId:n.fitAction.actionId,endSec:n.fitAction.endSec}),f.push({type:"actor.replacePath",actorId:t.id,waypoints:n.waypoints}),f.push(...n1(t,o)),n.standUpAtSec!==null&&f.push({type:"actor.addPoseKey",actorId:t.id,atSec:n.standUpAtSec,pose:"stand"});const h=M4({id:t.id,facingKeys:t.facingKeys.map(y=>({...y,atSec:l(y.atSec)}))},n.departSec,n.firstStepDeg);h&&f.push(h),f.push(...s);let b=Mt.actionsPerPart-e.timeline.actions.length;const I=[{startSec:n.departSec,endSec:n.arriveSec,actionType:o==="run"?"run":"walk"},...n.restAction?[n.restAction]:[]];for(const y of I){if(b<=0)break;f.push({type:"action.add",actorId:t.id,actionClass:"movement",...y}),b--}return{commands:f,ext:u,lookAhead:h!==null}}function M4(e,t,n){if(n===null||e.facingKeys.length>=Mt.keysPerTrack)return null;const o=[...e.facingKeys].sort((a,s)=>a.atSec-s.atSec).filter(a=>a.atSec<=t+1e-9).at(-1);return!o||o.travel?null:{type:"actor.addFacingKey",actorId:e.id,atSec:t,headingDeg:n,travel:!0}}function $4(e,t,n){if(e.facingKeys.length+2>Mt.keysPerTrack)return null;const o=$s(e,t).find(i=>i.departSec>n+1e-9);if(!o||e.facingKeys.some(i=>i.atSec>n+1e-9&&i.atSec<=o.departSec+1e-9))return null;const a=o.first===0?e.start.position:e.path.waypoints[o.first-1],s=e.path.waypoints[o.first];return{type:"actor.addFacingKey",actorId:e.id,atSec:o.departSec,headingDeg:Ms(a,s),travel:!0}}function Ol(e,t,n,o={}){const a=Za(e.snapshot,e.partId,e.actorId);if(!a)return _n("noActor");const{part:s,actor:i}=a;if(i.positionKeys.length>=2)return _n("positionKeys");const r=n!=="walk"?n:o.mode==="append"?"normal":k4(i,s.durationSec,e.playheadSec),l=s1(e,s,i,t,r,o.ignoreIds??[],o.mode??"insert");if("ok"in l)return l;const c=i1(s,i,l,r,Du(e.snapshot));return"ok"in c?c:r1(i,l,c)}function r1(e,t,n){return{...Lo(n.commands,t1(e),t.arriveSec+rr,n.ext),departSec:t.departSec,lookAhead:n.lookAhead,move:{departSec:t.departSec,arriveSec:t.arriveSec,insertFirst:t.insertFirst,insertLast:t.insertLast}}}function l1(e,t){const n=Za(e.snapshot,e.partId,e.actorId);if(!n)return _n("noActor");const{part:o,actor:a}=n,s=qa(e.snapshot,e.partId,t);
243if(!s)return _n("noSeat");const i=e.playheadSec,r=o.actors.filter(h=>h.id!==a.id).map(h=>Xa(h,o,i).position),l=Xa(a,o,i).position,c=Ql(s,e.snapshot.room,Vt(a),r,[],l);if(!c)return _n("noSeat");const d=c.seatPropId??t;if(ha(l,c.position)<=h4)return i<=Ei?Lo([{type:"actor.setPose",actorId:a.id,pose:"sit",seatPropId:d}],sa("actor.setPose",a),0):Lo([{type:"actor.addPoseKey",actorId:a.id,atSec:i,pose:"sit",seatPropId:d}],sa("actor.addPoseKey",a),i);if(a.positionKeys.length>=2)return _n("positionKeys");const u=s1(e,o,a,c.position,"normal",[d,t],"insert");if("ok"in u)return u;const p=u.arriveSec,f=i1(o,a,u,"normal",Du(e.snapshot),[{type:"actor.addPoseKey",actorId:a.id,atSec:p,pose:"sit",seatPropId:d},{type:"actor.addFacingKey",actorId:a.id,atSec:p,headingDeg:c.headingDeg}]);return"ok"in f?f:r1(a,u,f)}function c1(e,t){if(e.playheadSec>Ei)return l1(e,t);const n=Za(e.snapshot,e.partId,e.actorId);if(!n)return _n("noActor");const{part:o,actor:a}=n;if(a.positionKeys.length>=2)return _n("positionKeys");const s=qa(e.snapshot,e.partId,t);if(!s)return _n("noSeat");const i=Xa(a,o,0).position,r=o.actors.filter(d=>d.id!==a.id).map(d=>Xa(d,o,0).position),l=Ql({...s,name:""},e.snapshot.room,Vt(a),r,[],i);if(!l)return _n("noSeat");const c=l.seatPropId??s.id;return Lo([{type:"actor.moveStart",actorId:a.id,position:l.position},{type:"actor.setPose",actorId:a.id,pose:"sit",seatPropId:c},{type:"actor.setHeading",actorId:a.id,headingDeg:l.headingDeg}],sa("actor.setPose",a),0)}function d1(e){const t=Za(e.snapshot,e.partId,e.actorId);if(!t)return _n("noActor");const{part:n,actor:o}=t,a=Xa(o,n,e.playheadSec).position,s=Ru(e.snapshot,e.partId,o.id).slice().sort((i,r)=>ha(i.center,a)-ha(r.center,a));for(const i of s){const r=c1(e,i.id);if(r.ok||r.reason!=="noSeat")return r}return _n("noSeat")}function u1(e){const t=Za(e.snapshot,e.partId,e.actorId);if(!t)return _n("noActor");const{part:n,actor:o}=t,a=e.playheadSec;return Xa(o,n,a).pose==="stand"?_n("alreadyStanding"):zf(o,a,"stand")}function zf(e,t,n,o){const a=o!==void 0?{seatPropId:o}:{};return t<=Ei?Lo([{type:"actor.setPose",actorId:e.id,pose:n,...a}],sa("actor.setPose",e),0):Lo([{type:"actor.addPoseKey",actorId:e.id,atSec:t,pose:n,...a}],sa("actor.addPoseKey",e),t)}function E4(e,t,n,o){const a=t.actors.find(r=>r.id===n);if(a)return Xa(a,t,o).position;const s=qa(e,t.partId,n);if(s)return s.center;const i=t.cameras.find(r=>r.id===n);return i?i.position:null}function pv(e,t){const n=Za(e.snapshot,e.partId,e.actorId);if(!n)return _n("noActor");const{part:o,actor:a}=n,s=e.playheadSec,i="id"in t?E4(e.snapshot,o,t.id,s):t.point;if(!i)return _n("noActor");const r=Ms(Xa(a,o,s).position,i);return s<=Ei?Lo([{type:"actor.setHeading",actorId:a.id,headingDeg:r}],sa("actor.setHeading",a),0):Lo([{type:"actor.addFacingKey",actorId:a.id,atSec:s,headingDeg:r,..."id"in t?{targetId:t.id}:{}}],sa("actor.addFacingKey",a),s)}function p1(e,t){const n=Za(e.snapshot,e.partId,e.actorId);if(!n)return _n("noActor");const{part:o,actor:a}=n,s=e.playheadSec;if(t==="kneel"||t==="crouch")return zf(a,s,t);if(t==="lie"){const l=Xa(a,o,s).position,c=[...e.snapshot.room.props,...o.props].filter(d=>Mu(d)&&ha(d.center,l)<=b4).sort((d,u)=>ha(d.center,l)-ha(u.center,l))[0];return zf(a,s,"lie",c?.id)}const i=s+(lx(t)?.durationSec??1),r=Sh(o,i,Du(e.snapshot));return r==="tooLong"?_n("partTooLong"):Lo([{type:"action.add",actorId:a.id,startSec:s,endSec:i,actionType:t,motionId:t}],sa("action.add",a),i,r)}function Ih(e,t,n){return e.timeline.actions.find(o=>o.actorId===t&&o.actionClass==="movement"&&Math.abs(o.startSec-n.departSec)<$i&&Math.abs(o.endSec-n.arriveSec)<$i)}function f1(e,t,n){const o=Za(e.snapshot,e.partId,e.actorId);if(!o)return _n("noActor");const{part:a,actor:s}=o;if(s.positionKeys.length>=2)return _n("positionKeys");const i=$s(s,a.durationSec).find(w=>w.last===t);if(!i)return _n("noRoute");const r=Ih(a,s.id,i),l=Mi[n],c=i.departSec+i.lengthM/l,d=c-i.arriveSec,u=ku(s,a.durationSec),p=s.path.waypoints.map((w,M)=>{if(M<i.first-1)return w;if(M===i.first-1)return{...w,atSec:u[M].atSec};if(M<i.last){const{atSec:x,..._}=w;return _}return M===i.last?{...w,atSec:c}:Hf(w,d)});kh(p);const f=Math.abs(d)>yh,h=i.arriveSec-1e-6,b=w=>f&&w>=h?w+d:w,I=Math.max(e1(p),...s.poseKeys.map(w=>b(w.atSec)),...s.facingKeys.map(w=>b(w.atSec)),...a.timeline.actions.filter(w=>w.actorId===s.id).map(w=>f&&w.startSec>=h?w.endSec+d:w.endSec)),y=Sh(a,I,Du(e.snapshot));return y==="tooLong"?_n("partTooLong"):Lo([{type:"actor.replacePath",actorId:s.id,wayp
243oints:p},...f?[{type:"actor.shiftTimeline",actorId:s.id,fromSec:i.arriveSec,deltaSec:d}]:[],...n1(s,n),...r?[{type:"action.trim",actionId:r.id,endSec:c}]:[]],t1(s),c+rr,y)}function x4(e,t){const n=Za(e.snapshot,e.partId,e.actorId);if(!n)return _n("noActor");const{part:o,actor:a}=n,s=a.id;switch(t.kind){case"move":{const i=$s(a,o.durationSec).find(l=>l.first===t.first&&l.last===t.last),r=i?Ih(o,s,i):void 0;return Lo([{type:"actor.replacePath",actorId:s,waypoints:a.path.waypoints.filter((l,c)=>c<t.first||c>t.last)},...r?[{type:"action.remove",actionId:r.id}]:[]],sa("actor.replacePath",a),0)}case"pose":return Lo([{type:"actor.removePoseKey",actorId:s,index:t.index}],sa("actor.removePoseKey",a),0);case"look":return Lo([{type:"actor.removeFacingKey",actorId:s,index:t.index}],sa("actor.removeFacingKey",a),0);case"action":return Lo([{type:"action.remove",actionId:t.actionId}],sa("action.remove",a),0)}}const fv={move:0,pose:1,look:2,action:3};function P4(e,t,n){const o=Za(e,t,n);if(!o)return[];const{part:a,actor:s}=o,i=[],r=s.path.waypoints,l=new Set,c=Gm(s,a.durationSec).spans;for(const d of $s(s,a.durationSec)){const u=Ih(a,n,d),p=c.find(I=>I.last===d.last);u&&l.add(u.id);const f=r[d.last],h=d.mps>=3,b=u4(f,[...e.room.props,...a.props]);i.push({kind:"move",atSec:d.departSec,endSec:d.arriveSec,labelKey:`${Ac}${b?h?"runToProp":"walkToProp":h?"runToZone":"walkToZone"}`,params:b?{target:b}:{zone:c4(f,e.room)},ref:{kind:"move",first:d.first,last:d.last},speed:{mps:d.mps,preset:o1(d.mps),over:d.mps>$l[s.movementMode],cls:p?.cls??Pd(d.mps),problem:p?.problem??null}})}s.poseKeys.forEach((d,u)=>{d.atSec<=Ei||i.push({kind:"pose",atSec:d.atSec,labelKey:`${Ac}pose`,params:{pose:d.pose},ref:{kind:"pose",index:u}})}),s.facingKeys.forEach((d,u)=>{d.travel||i.push({kind:"look",atSec:d.atSec,labelKey:`${Ac}${d.targetId?"look":"lookDir"}`,params:d.targetId?{target:d.targetId}:{dir:l4(d.headingDeg)},ref:{kind:"look",index:u}})});for(const d of a.timeline.actions)d.actorId!==n||l.has(d.id)||i.push({kind:"action",atSec:d.startSec,endSec:d.endSec,labelKey:`${Ac}action`,params:{motion:d.motionId??d.actionType,text:d.text.ko??d.text.en??""},ref:{kind:"action",actionId:d.id}});return i.sort((d,u)=>Math.abs(d.atSec-u.atSec)>1e-9?d.atSec-u.atSec:fv[d.kind]-fv[u.kind])}const C4={heightM:1.55,pitchDeg:0,rollDeg:0,lensMm:50,fovOverrideDeg:null},B4={pauseSec:0};function pi(e,t,n){if(e==="camera")return C4[t];if(e==="waypoint")return B4[t];const o=n;if(t==="widthM"||t==="depthM"||t==="heightM"){const a=Tt(o.catalogKey??o.kind);return a?a[t]:t==="heightM"?_0:void 0}}const _4="bb.view.";function m1(e){return`${_4}${e}`}function va(){return{hidden:[],locked:[]}}function mv(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Hd(e){return[...new Set(e)]}function A4(e){if(e==null)return va();let t;try{t=JSON.parse(e)}catch{return va()}if(typeof t!="object"||t===null)return va();const{hidden:n,locked:o}=t;return!mv(n)||!mv(o)?va():{hidden:Hd(n),locked:Hd(o)}}function h1(){try{return typeof window>"u"?void 0:window.localStorage}catch{return}}function T4(e,t){const n=t===void 0?h1():t;if(!n)return va();try{return A4(n.getItem(m1(e)))}catch{return va()}}function R4(e,t,n){const o=n===void 0?h1():n;if(o)try{o.setItem(m1(e),JSON.stringify({hidden:[...t.hidden],locked:[...t.locked]}))}catch{}}function b1(e,t){return{hidden:Hd([...e.hidden,...t]),locked:e.locked}}function g1(e,t){const n=new Set(t);return{hidden:e.hidden.filter(o=>!n.has(o)),locked:e.locked}}function D4(e){return{hidden:[],locked:e.locked}}function O4(e,t){return e.hidden.includes(t)?g1(e,[t]):b1(e,[t])}function v1(e,t){return{hidden:e.hidden,locked:Hd([...e.locked,...t])}}function y1(e,t){const n=new Set(t);return{hidden:e.hidden,locked:e.locked.filter(o=>!n.has(o))}}function N4(e,t){return e.locked.includes(t)?y1(e,[t]):v1(e,[t])}function Xs(e,t){return e.hidden.includes(t)}function lr(e,t){return e.locked.includes(t)}function L4(e,t){return!Xs(e,t)&&!lr(e,t)}function hv(e,t){return t.filter(n=>L4(e,n))}function Pp(e,t){return e.filter(n=>!Xs(t,n.id))}function K4(e,t){return{hidden:e.hidden.filter(n=>t.has(n)),locked:e.locked.filter(n=>t.has(n))}}
243function F4(e){const t=new Set;for(const n of e.room.openings)t.add(n.id);for(const n of e.room.props)t.add(n.id);for(const n of e.parts){for(const o of n.actors)t.add(o.id);for(const o of n.props)t.add(o.id);for(const o of n.cameras)t.add(o.id)}return t}function H4(e,t,n){if(e.room.openings.some(a=>a.id===n))return"opening";if(e.room.props.some(a=>a.id===n))return"prop";const o=e.parts.find(a=>a.partId===t);if(o){if(o.props.some(a=>a.id===n))return"prop";if(o.actors.some(a=>a.id===n))return"actor";if(o.cameras.some(a=>a.id===n))return"camera"}return null}function k1(e,t,n){return n.filter(o=>H4(e,t,o)!==null)}function bv(e,t){return e.includes(t)?e.filter(n=>n!==t):[...e,t]}function z4(e,t,n){const o=e.findIndex(s=>s.key===t);if(n.id==="outliner.move"){const{to:s}=n.arg;let i;return s==="first"?i=0:s==="last"?i=e.length-1:s==="prev"?i=Math.max(0,o-1):i=Math.min(e.length-1,o+1),{focusKey:e[i]?.key??null,toggleKey:null}}const a=o>=0?e[o]:void 0;if(!a)return{focusKey:null,toggleKey:null};if(n.arg.expand){if(a.hasChildren&&!a.expanded)return{focusKey:null,toggleKey:a.key};const s=e[o+1];return s&&s.parentKey===a.key?{focusKey:s.key,toggleKey:null}:{focusKey:null,toggleKey:null}}return a.hasChildren&&a.expanded?{focusKey:null,toggleKey:a.key}:{focusKey:a.parentKey,toggleKey:null}}function S1(e,t){const n=new Map,o=e.parts.find(a=>a.partId===t)??e.parts[0];for(const a of[e.room.props,o?.props??[]]){const s=new Map;for(const r of a)s.set(r.name,(s.get(r.name)??0)+1);const i=new Map;for(const r of a){if((s.get(r.name)??0)<2)continue;const l=(i.get(r.name)??0)+1;i.set(r.name,l),n.set(r.id,`${r.name} ${l}`)}}return n}function j4(e,t){switch(e.kind){case"room":return"i-lucide-square";case"opening":return t.room.openings.find(o=>o.id===e.id)?.kind==="window"?"i-lucide-app-window":"i-lucide-door-open";case"prop":{const n=t.room.props.find(o=>o.id===e.id)??t.parts.flatMap(o=>o.props).find(o=>o.id===e.id);return n?Tt(n.catalogKey??n.kind)?.seat?"i-lucide-armchair":fr.has(Ua(n))?"i-lucide-table":"i-lucide-box":"i-lucide-box"}case"camera":return"i-lucide-video";case"ref":return"i-lucide-image";default:return""}}function jf(e){const t=e.name?.trim();return t&&t!==e.id?e.name:""}function U4(e){return e==="room"||e==="opening"||e==="prop"||e==="ref"||e==="actor"||e==="camera"}function gv(e,t,n,o,a,s,i,r,l,c){const d=new Set(t.map(f=>f.id)),u=new Map;for(const f of t)if(f.supportPropId&&f.supportPropId!==f.id&&d.has(f.supportPropId)){const h=u.get(f.supportPropId)??[];h.push(f),u.set(f.supportPropId,h)}function p(f,h,b,I){const y=u.get(f.id)??[],w=f.id,M=!s.has(w),x=l.get(f.id);if(e.push({key:w,kind:"prop",id:f.id,label:x?{text:x}:r[f.id]??{text:f.name},depth:h,parentKey:b,hasChildren:y.length>0,expanded:M,shared:c,hidden:Xs(i,f.id),locked:lr(i,f.id),hideable:!0,supportId:I,canRename:!0,renameValue:jf(f),searchText:`${f.name} ${f.kind}${x?` ${x}`:""}`.toLowerCase()}),y.length>0&&M)for(const _ of y)p(_,h+1,w,void 0)}for(const f of t){if(f.supportPropId!==void 0&&f.supportPropId!==f.id&&d.has(f.supportPropId))continue;let b;f.supportPropId&&!d.has(f.supportPropId)&&n.has(f.supportPropId)&&(b=f.supportPropId),p(f,o,a,b)}}function G4(e,t){const{snapshot:n,partId:o,viewState:a,activeCameraId:s}=e,i=n.room,r=n.parts.find(N=>N.partId===o)??n.parts[0],l=ka(n),c=S1(n,o),d=new Set(t),u=[],p=new Set(i.props.map(N=>N.id)),f=new Set(r?.props.map(N=>N.id)??[]),h=new Set([...p,...f]);u.push({key:"group:space",kind:"group",depth:0,parentKey:null,hasChildren:!0,expanded:!0,shared:!0,hidden:!1,locked:!1,hideable:!1,count:i.openings.length+i.props.length,canRename:!1,renameValue:"",searchText:""});const b=i.openings.length>0,I=!d.has("room");if(u.push({key:"room",kind:"room",id:"room",label:l.room,depth:1,parentKey:"group:space",hasChildren:b,expanded:I,shared:!0,hidden:!1,locked:!1,hideable:!1,canRename:!1,renameValue:"",searchText:i.kind.toLowerCase()}),b&&I)for(const N of i.openings)u.push({key:N.id,kind:"opening",id:N.id,label:l[N.id]??{text:N.id},depth:2,parentKey:"room",hasChildren:!1,expanded:!0,shared:!0,hidden:Xs(a,N.id),locked:lr(a,N.id),hideable:!0,canRename:!1,renameValue:"",searchText:`${N.kind} ${N.wall}`.toLowerCase()});gv(u,i.props,h,1,"group:space",d,a,l,c,!0),u.push({key:"group:part",kind:"group",depth:0,parentKey:null,hasChildren:!0,expanded:!0,shared:!1,hidden:!1,locked:!1,hideable:!1,
243count:(r?.props.length??0)+(r?.actors.length??0)+(r?.cameras.length??0),canRename:!1,renameValue:"",searchText:""});const y=r?.props??[],w=r?.actors??[],M=r?.cameras??[],x=!d.has("sub:props");u.push({key:"sub:props",kind:"subgroup",depth:1,parentKey:"group:part",hasChildren:y.length>0,expanded:x,shared:!1,hidden:!1,locked:!1,hideable:!1,count:y.length,canRename:!1,renameValue:"",searchText:""}),x&&gv(u,y,h,2,"sub:props",d,a,l,c,!1);const _=!d.has("sub:actors");if(u.push({key:"sub:actors",kind:"subgroup",depth:1,parentKey:"group:part",hasChildren:w.length>0,expanded:_,shared:!1,hidden:!1,locked:!1,hideable:!1,count:w.length,canRename:!1,renameValue:"",searchText:""}),_)for(const N of w)u.push({key:N.id,kind:"actor",id:N.id,label:l[N.id]??{text:N.name},depth:2,parentKey:"sub:actors",hasChildren:!1,expanded:!0,shared:!1,hidden:Xs(a,N.id),locked:lr(a,N.id),hideable:!0,color:N.color,canRename:!0,renameValue:jf(N),searchText:`${N.name} ${N.species}`.toLowerCase()});const O=!d.has("sub:cameras");if(u.push({key:"sub:cameras",kind:"subgroup",depth:1,parentKey:"group:part",hasChildren:M.length>0,expanded:O,shared:!1,hidden:!1,locked:!1,hideable:!1,count:M.length,canRename:!1,renameValue:"",searchText:""}),O)for(const N of M)u.push({key:N.id,kind:"camera",id:N.id,label:l[N.id]??{text:N.name},depth:2,parentKey:"sub:cameras",hasChildren:!1,expanded:!0,shared:!1,hidden:Xs(a,N.id),locked:lr(a,N.id),hideable:!0,inUse:N.id===s,canRename:!0,renameValue:jf(N),searchText:N.name.toLowerCase()});const A=[...n.refs.characters,...n.refs.backgrounds,...n.refs.props];u.push({key:"group:refs",kind:"group",depth:0,parentKey:null,hasChildren:!0,expanded:!0,shared:!0,hidden:!1,locked:!1,hideable:!1,count:A.length,canRename:!1,renameValue:"",searchText:""});for(const N of A)u.push({key:N.id,kind:"ref",id:N.id,label:l[N.id]??{text:N.name},depth:1,parentKey:"group:refs",hasChildren:!1,expanded:!0,shared:!0,hidden:!1,locked:!1,hideable:!1,canRename:!1,renameValue:"",searchText:`${N.name} ${N.tag}`.toLowerCase()});return u}function vv(e){const{searchText:t,...n}=e;return n}function V4(e){const t=e.filter.trim()!==""||e.chipKind!==null,n=G4(e,t?[]:e.collapsed);if(!t)return n.map(vv);const o=e.filter.trim().toLowerCase(),a=l=>e.labelText&&l.label?`${l.searchText} ${e.labelText(l.label).toLowerCase()}`:l.searchText,s=new Set;for(const l of n)U4(l.kind)&&(e.chipKind&&l.kind!==e.chipKind||o&&!a(l).includes(o)||s.add(l.ke
243y));if(s.size===0)return[];const i=new Map(n.map(l=>[l.key,l])),r=new Set;for(const l of s){let c=l;for(;c;)r.add(c),c=i.get(c)?.parentKey??null}return n.filter(l=>r.has(l.key)).map(l=>{const c=vv(l);return s.has(l.key)||(c.context=!0),c})}const Uf={talk:"talk",nod:"nod",bow:"bow",wave:"wave",point:"point","pick-up":"pickUp","open-door":"openDoor",lie:"lie",kneel:"kneel",crouch:"crouch"},W4=new Set(["enter","exit","walk","run","approach","sit-down","stand-up","lie-down","kneel","crouch"]);function I1(e,t){const n=Uf[e];return n?{key:`tool.blockingBoard.inspector.act.motions.${n}`}:W4.has(e)?{key:`tool.blockingBoard.boardScript.result.actionType.${e}`}:{text:t||e}}function X4(e){return I1(e.motionId??e.actionType,e.text?.ko??e.text?.en)}const Gf="bb.propSections";function Y4(e,t,n=!0){if(!e)return n;try{const o=e.getItem(Gf);if(o===null)return n;const a=JSON.parse(o);return typeof a!="object"||a===null?n:a[t]??n}catch{return n}}function q4(e,t,n){if(e)try{const o=e.getItem(Gf),a=o?JSON.parse(o):{};a[t]=n,e.setItem(Gf,JSON.stringify(a))}catch{}}const Z4=["data-section"],J4={class:"bb-prop-section-head"},Q4=["aria-expanded"],e6={class:"bb-inspector-section-title"},t6={key:0,class:"bb-prop-section-summary"},n6={class:"bb-prop-section-actions"},o6={class:"bb-prop-section-body"},a6=nt({__name:"BbPropSection",props:{storageId:{},section:{},title:{},summary:{default:void 0},defaultOpen:{type:Boolean,default:!0},openOnDetail:{type:Boolean,default:!1}},setup(e){const t=e,n=G(t.defaultOpen);function o(){try{return typeof localStorage<"u"?localStorage:void 0}catch{return}}function a(){n.value=!0}Jn(()=>{n.value=Y4(o(),t.storageId,t.defaultOpen),t.openOnDetail&&window.addEventListener("bb:detail-open",a)}),wn(()=>{t.openOnDetail&&window.removeEventListener("bb:detail-open",a)});function s(){n.value=!n.value,q4(o(),t.storageId,n.value)}return(i,r)=>{const l=vn;return v(),k("section",{class:"bb-inspector-section bb-prop-section","data-section":e.section},[m("div",J4,[m("button",{type:"button",class:"bb-prop-section-toggle","aria-expanded":n.value,onClick:s},[ce(l,{name:"i-lucide-chevron-down",class:qe(["bb-prop-section-chevron size-[14px]",{"bb-prop-section-chevron--closed":!n.value}])},null,8,["class"]),m("span",e6,S(i.$t(e.title)),1)],8,Q4),e.summary?(v(),k("span",t6,S(e.summary),1)):H("",!0),m("span",n6,[cs(i.$slots,"actions",{},void 0,!0)])]),Zt(m("div",o6,[cs(i.$slots,"default",{},void 0,!0)],512),[[cr,n.value]])],8,Z4)}}}),Bo=Object.assign(ot(a6,[["__scopeId","data-v-07e72db8"]]),{__name:"BbInspectorBbPropSection"}),s6={class:"bb-act-grid"},i6=["data-act","aria-pressed","onClick"],r6={class:"bb-act-btn-label"},l6={key:0,class:"bb-act-motions",role:"group"},c6=["data-motion","onClick"],d6={key:1,class:"bb-act-list-title"},u6={key:2,class:"bb-act-list"},p6=["data-kind"],f6=["onClick"],m6={class:"bb-act-row-time"},h6=["title"],b6={key:0,class:"bb-act-speed"},g6=["data-speed-class","aria-expanded","onClick"],v6={key:0,class:"bb-act-speed-menu",role:"menu"},y6=["data-speed","aria-checked","onClick"],k6=["aria-label","title","onClick"],S6=nt({__name:"BbActorActs",props:{snapshot:{},partId:{},actor:{},playheadSec:{},picking:{}},emits:["pick","intent","seek"],setup(e,{emit:t}){const n=e,o=t,a=[{kind:"walk",icon:"i-lucide-footprints"},{kind:"run",icon:"i-lucide-zap"},{kind:"sit",icon:"i-lucide-armchair"},{kind:"stand",icon:"i-lucide-arrow-up-from-line"},{kind:"look",icon:"i-lucide-eye"},{kind:"motion",icon:"i-lucide-hand"}],s=Object.keys(Uf),i=Object.keys(Mi),r=G(!1),l=G(null),c={move:"i-lucide-footprints",pose:"i-lucide-person-standing",look:"i-lucide-eye",action:"i-lucide-hand"};function d(x){l.value=l.value===x?null:x}function u(x){const _=x.target;_ instanceof Element&&_.closest(".bb-act-speed")||(l.value=null)}Je(l,(x,_)=>{x!==null&&_===null?document.addEventListener("pointerdown",u,!0):x===null&&_!==null&&document.removeEventListener("pointerdown",u,!0)}),wn(()=>document.removeEventListener("pointerdown",u,!0));const p=C(()=>({snapshot:n.snapshot,partId:n.partId,actorId:n.actor.id,playheadSec:n.playheadSec})),f=C(()=>P4(n.snapshot,n.partId,n.actor.id)),h=C(()=>ka(n.snapshot));function b(x){x==="stand"?o("intent",u1(p.value)):x==="motion"?r.value=!r.value:o("pick",x)}function I(x){o("intent",p1(p.value,x))}function y(x,_){l.value=null,x.ref.kind==="move"&&o("intent",f1(p.value,x.ref.last,_))}function w(x){o("intent",x4(p.value,x.ref))}function M(x,_){const O={...x.params};if(x.kind==="pose"&&(O.pose=_(`tool.blockingBoard.pose.${x.params.pose}`)),(x.kind==="look"||x.kind==="move")&&x.params.target!==void 0){const A=h.value[String(x.params.target)];A&&(O.target="text"in A?A.text:_(A.key,A.params))}if(x.labelKey.endsWith("lookDir")&&(O.dir=_(`tool.blockingBoard.inspector.act.dir.${x.params.dir}`)),x.kind==="move"&&x.params.zone!==void 0&&(O.zone=_(`tool.blockingBoard.inspector.act.zone.${x.params.zone}`)),x.kind==="action"){const A=I1(String(x.params.motion),String(x.params.text??""));O.motion="key"in A?_(A.key,A.params):A.text}return _(x.labelKey,O)}return(x,_)=>{const O=vn;return v(),et(Bo,{"storage-id":"actor.act",section:"act",title:"tool.blockingBoard.inspector.act.t
243itle"},{default:rn(()=>[m("div",s6,[(v(),k(ae,null,Me(a,A=>m("button",{key:A.kind,type:"button",class:"bb-act-btn btn-md","data-act":A.kind,"aria-pressed":A.kind==="motion"?r.value:A.kind==="stand"?void 0:e.picking===A.kind,onClick:N=>b(A.kind)},[ce(O,{name:A.icon,class:"size-[16px]"},null,8,["name"]),m("span",r6,S(x.$t(`tool.blockingBoard.inspector.act.${A.kind}`)),1)],8,i6)),64))]),r.value?(v(),k("div",l6,[(v(!0),k(ae,null,Me(g(s),A=>(v(),k("button",{key:A,type:"button",class:"bb-act-motion btn-md","data-motion":A,onClick:N=>I(A)},S(x.$t(`tool.blockingBoard.inspector.act.motions.${g(Uf)[A]}`)),9,c6))),128))])):H("",!0),f.value.length>0?(v(),k("p",d6,S(x.$t("tool.blockingBoard.inspector.act.listTitle")),1)):H("",!0),f.value.length>0?(v(),k("ol",u6,[(v(!0),k(ae,null,Me(f.value,(A,N)=>(v(),k("li",{key:N,class:"bb-act-row","data-kind":A.kind},[m("button",{type:"button",class:"bb-act-row-body",onClick:K=>o("seek",A.atSec)},[m("span",m6,S(A.atSec.toFixed(1))+"s",1),ce(O,{name:c[A.kind],class:"bb-act-row-icon"},null,8,["name"]),m("span",{class:"bb-act-row-name",title:M(A,x.$t)},S(M(A,x.$t)),9,h6)],8,f6),A.speed?(v(),k("span",b6,[m("button",{type:"button",class:qe(["bb-act-speed-toggle",{"bb-act-speed-toggle--over":A.speed.problem}]),"data-speed-class":A.speed.cls,"aria-haspopup":"menu","aria-expanded":l.value===N,onClick:K=>d(N)},[We(S(x.$t(`tool.blockingBoard.speed.class.${A.speed.cls}`)),1),A.speed.problem?(v(),k(ae,{key:0},[We("!")],64)):H("",!0),ce(O,{name:"i-lucide-chevron-down",class:"size-[12px]"})],10,g6),l.value===N?(v(),k("span",v6,[(v(!0),k(ae,null,Me(g(i),K=>(v(),k("button",{key:K,type:"button",role:"menuitemradio",class:qe(["bb-speed-chip",{"bb-speed-chip--over":A.speed.over&&A.speed.preset===K}]),"data-speed":K,"aria-checked":A.speed.preset===K,onClick:F=>y(A,K)},[We(S(x.$t(`tool.blockingBoard.speed.${K}`)),1),A.speed.over&&A.speed.preset===K?(v(),k(ae,{key:0},[We("!")],64)):H("",!0)],10,y6))),128))])):H("",!0)])):H("",!0),m("button",{type:"button",class:"bb-act-row-remove","aria-label":x.$t("tool.blockingBoard.inspector.act.remove"),title:x.$t("tool.blockingBoard.inspector.act.remove"),onClick:K=>w(A)}," Ã ",8,k6)],8,p6))),128))])):H("",!0)]),_:1})}}}),I6=Object.assign(ot(S6,[["__scopeId","data-v-1445b62b"]]),{__name:"BbInspectorBbActorActs"}),w6={class:"bb-ref-info"},M6={class:"bb-ref-info-row","data-field":"handoffName"},$6={class:"bb-ref-info-label"},E6=["maxlength","placeholder"],x6={class:"bb-ref-info-row","data-field":"description"},P6={class:"bb-ref-info-label"},C6=["maxlength","placeholder"],B6=nt({__name:"BbRefInfoFields",props:{kind:{},id:{},partId:{},entry:{}},emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=G(n.entry?.handoffName??""),s=G(n.entry?.description??"");Je(()=>n.entry?.handoffName??"",c=>{a.value=c}),Je(()=>n.entry?.description??"",c=>{s.value=c});function i(c){o("command",{type:"ref.setInfo",target:{kind:n.kind,id:n.id,partId:n.partId},patch:c})}function r(){const c=a.value;c!==(n.entry?.handoffName??"")&&i({handoffName:c.trim()===""?null:c})}function l(){const c=s.value;c!==(n.entry?.description??"")&&i({description:c})}return(c,d)=>(v(),k("div",w6,[m("label",M6,[m("span",$6,S(c.$t("tool.blockingBoard.inspector.handoffName")),1),Zt(m("input",{"onUpdate:modelValue":d[0]||(d[0]=u=>a.value=u),type:"text",class:"bb-ref-info-input",maxlength:g(Yl),placeholder:c.$t("tool.blockingBoard.inspector.handoffNamePlaceholder"),onBlur:r},null,40,E6),[[Nn,a.value]])]),m("label",x6,[m("span",P6,S(c.$t("tool.blockingBoard.inspector.description")),1),Zt(m("textarea",{"onUpdate:modelValue":d[1]||(d[1]=u=>s.value=u),class:"bb-ref-info-input bb-ref-info-textarea",rows:"3",maxlength:g(ur),placeholder:c.$t("tool.blockingBoard.inspector.descriptionPlaceholder"),onBlur:l},null,40,C6),[[Nn,s.value]])])]))}}),wh=Object.assign(ot(B6,[["__scopeId","data-v-e85ef1ae"]]),{__name:"BbInspectorBbRefInfoFields"}),_6={class:"bb-ref-image","data-field":"refImage"},A6={class:"bb-ref-image-label"},T6={class:"bb-ref-image-body"},R6={class:"bb-ref-image-row"},D6=["src","alt"],O6={class:"bb-ref-image-actions"},N6=["disabled"],L6=["disabled"],K6=["accept"],F6={class:"bb-ref-image-count"},H6={key:0,class:"bb-ref-image-over"},z6={key:1,class:"bb-ref-image-error"},j6=20*1024*1024,U6=nt({__name:"BbRefImageField",props:{target:{},media:{},count:{},limit:{}},emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=["image/jpeg","image/png","image/webp"];let s=null;try{s=$m().stageImgFile}catch{s=null}const i=G(null),r=G(!1),l=G(null),c=C(()=>n.limit!==null&&n.count>=n.limit);function d(){i.value?.click()}async function u(f){const h=f.target,b=h.files?.[0];if(b){if(l.value=null,!a.includes(b.type))l.value="tool.blockingBoard.refImage.badType";else if(b.size>j6)l.value="tool.blockingBoard.refImage.tooLarge";else{r.value=!0;const I=s?await s(b):null;r.value=!1,I?.url&&I.tempMdiaId?o("command",{type:"ref.setMedia",target:n.target,media:{mdiaId:I.tempMdiaId,url:I.url,wdth:I.wdth??null,hegt:I.hegt??null}}):l.value="tool.blockingBoard.refImage.failed"}try{h.value=""}catch{}}}function p(){l.value=null,o("command",{type:"ref.setMedia",target:n.target,media:null})}return(f,h)=>(v(),k("div",_6,[m("span",A6,S(f.$t("tool.blockingBoard.refImage.label")),1),m("div",T6,[m("div",R6,[e.media?(v(),k("img",{key:0,class:"bb-ref-image-thumb",src:e.media.url,alt:f.$t("tool.blockingBoard.refImage.label")},null,8,D6)):H("",!0),m("div",O6,[m("button",{type:"button",class:"bb-ref-image-btn bb-ref-image-upload",disabled:r.value,onClick:d},S(r.value?f.$t("tool.blockingBoard.refImage.uploading"):e.media?f.$t("tool.blockingBoard.refImage.replace"):f.$t("tool.blockingBoard.refImage.upload")),9,N6),e.media?(v(),k("button",{key:0,t
243ype:"button",class:"bb-ref-image-btn bb-ref-image-remove",disabled:r.value,onClick:p},S(f.$t("tool.blockingBoard.refImage.remove")),9,L6)):H("",!0)]),m("input",{ref_key:"input",ref:i,class:"bb-ref-image-input",type:"file",accept:a.join(","),hidden:"",onChange:u},null,40,K6)]),m("p",F6,S(f.$t("tool.blockingBoard.refImage.count",{n:e.count,max:e.limit??"â"})),1),c.value?(v(),k("p",H6,S(f.$t("tool.blockingBoard.refImage.over")),1)):H("",!0),l.value?(v(),k("p",z6,S(f.$t(l.value)),1)):H("",!0)])]))}}),w1=Object.assign(ot(U6,[["__scopeId","data-v-c2a01a12"]]),{__name:"BbInspectorBbRefImageField"}),G6={key:0,class:"bb-inspector bb-inspector-actor"},V6=["data-severity"],W6={class:"bb-inspector-issue-text"},X6={class:"bb-inspector-issue-title"},Y6={class:"bb-inspector-issue-hint"},q6={class:"bb-detail-sections","data-section":"detail"},Z6={class:"bb-pose-seg",role:"group","data-field":"pose"},J6=["data-pose","aria-pressed","onClick"],Q6={class:"bb-pose-sit-hint"},eH={class:"bb-inspector-pair"},tH=["disabled","title"],nH=["aria-label","title"],oH={key:0,class:"bb-data-table bb-waypoint-table"},aH=["onClick"],sH={"data-field":"atSec"},iH=["aria-label","title","onClick"],rH=["aria-label","title"],lH={key:0,class:"bb-data-table bb-gaze-table"},cH=["aria-label","title","onClick"],yv=1,kv=.3,dH=64,uH=nt({__name:"BbInspectorActor",props:{snapshot:{},partId:{},actorId:{},issues:{},timeSec:{},frameState:{},authoredSecOf:{type:Function},picking:{}},emits:["command","focus-waypoint","auto-detour","pick","intent","seek","notice"],setup(e,{emit:t}){const n=e,o=t,a=cu.filter(Ie=>Ie!=="kneel"&&Ie!=="crouch"),s=C(()=>n.snapshot.parts.find(Ie=>Ie.partId===n.partId)),i=C(()=>s.value?.actors.find(Ie=>Ie.id===n.actorId)),r=typeof mo=="function"?mo().locale:null,l=C(()=>r?.value??"ko"),c=C(()=>{const Ie=i.value?.refId;return Ie?n.snapshot.refs.characters.find(Be=>Be.id===Ie)?.media??null:null}),d=C(()=>{const Ie=i.value?.refId;return Ie?n.snapshot.refs.characters.find(Be=>Be.id===Ie)??null:null}),u=C(()=>Oa(n.snapshot,n.partId,{excluded:new Set})),p=C(()=>u.value.imageCount),f=C(()=>u.value.limits?.image??null),h=C(()=>Object.keys(Ao)),b=C(()=>Ru(n.snapshot,n.partId,n.actorId)),I=C(()=>n.snapshot.parts.findIndex(Ie=>Ie.partId===n.partId)),y=C(()=>{const Ie=n.issues?.filter(Be=>Be.targetId===n.actorId)??[];return wI(Ie,I.value)});function w(Ie){return Ie.messageKey.replace(".issue.",".hint.")}const M=C(()=>(n.issues??[]).filter(Ie=>Ie.code==="PHYSICAL_IMPOSSIBILITY"&&Ie.targetId===n.actorId).length),x=C(()=>ka(n.snapshot));function _(Ie,Be){const lt=II(Ie,x.value);return lt===null?"":"wallSide"in lt?Be("tool.blockingBoard.viewport.wallName",{side:Be(`tool.blockingBoard.inspector.${lt.wallSide}`)}):"text"in lt?lt.text:Be(lt.key,lt.params)}function O(Ie){const Be=[...n.snapshot.room.props,...s.value?.props??[]];return MI(y.value,lt=>fh(lt),lt=>_(lt,Ie),lt=>Be.find(Ke=>Ke.id===lt)?.center??null)}const A=C(()=>{const Ie=s.value;return Ie?[...Ie.actors.filter(Be=>Be.id!==n.actorId).map(Be=>Be.id),...Ie.cameras.map(Be=>Be.id),...n.snapshot.room.props.map(Be=>Be.id),...Ie.props.map(Be=>Be.id)]:[]});function N(Ie,Be){const lt=x.value[Ie];return lt?"text"in lt?lt.text:Be(lt.key,lt.params):Ie}function K(Ie){const Be=n.frameState?.actors[n.actorId];if(Be)return Be.headingDeg;const lt=n.snapshot.parts.find(Ke=>Ke.partId===n.partId);return mn(i.value,Ie,{durationSec:lt?.durationSec}).headingDeg}function F(Ie,Be){o("command",{type:"actor.moveFacingKey",actorId:n.actorId,index:Ie,atSec:Be})}function B(Ie,Be){o("command",{type:"actor.setFacingKey",actorId:n.actorId,index:Ie,patch:{headingDeg:Be}})}function j(Ie,Be){o("command",{type:"actor.setFacingKey",actorId:n.actorId,index:Ie,patch:{targetId:Be===""?null:Be}})}function ee(Ie){o("command",{type:"actor.removeFacingKey",actorId:n.actorId,index:Ie})}function D(){const Ie=n.authoredSecOf?.(n.actorId)??n.timeSec??0;o("command",{type:"actor.addFacingKey",actorId:n.actorId,atSec:Ie,headingDeg:K(Ie)})}function Z(){o("auto-detour",n.actorId)}const L=G(null);function V(Ie){const Be=String(Ie);if(Be.trim()===""){L.value="tool.blockingBoard.field.nameEmpty";return}if(Be.length>dH){L.value="tool.blockingBoard.field.nameTooLong";return}L.value=null,o("command",{type:"entity.rename",id:n.actorId,name:Be})}Je(()=>n.actorId,()=>L.value=null);function pe(Ie,Be){o("command",{type:"actor.setField",actorId:n.actorId,patch:{[Ie]:Be}})}function le(Ie){const Be=i.value;o("command",{type:"actor.moveStart",actorId:n.actorId,position:{x:Number(Ie),y:Be.start.position.y}})}function me(Ie){const Be=i.value;o("command",{type:"actor.moveStart",actorId:n.actorId,position:{x:Be.start.position.x,y:Number(Ie)}})}function oe(Ie){o("command",{type:"actor.setHeading",actorId:n.actorId,headingDeg:Number(Ie)})}function fe(Ie){let Be=!0;
243if(Ie==="sit"){const lt=d1({...re(),playheadSec:0});o("intent",lt),Be=lt.ok}else o("command",{type:"actor.setPose",actorId:n.actorId,pose:Ie});Be&&(n.timeSec??0)>1e-6&&o("notice","tool.blockingBoard.inspector.startPoseChanged")}function X(Ie){o("intent",c1(re(),Ie))}function re(){return{snapshot:n.snapshot,partId:n.partId,actorId:n.actorId,playheadSec:n.timeSec??0}}function Se(Ie){pe("refId",Ie===""?void 0:Ie)}function Q(Ie){pe("species",Ie)}function $e(Ie){pe("bodyType",Ie)}function Fe(Ie){pe("movementMode",Ie)}const Ze=C(()=>b.value.map(Ie=>({value:Ie.id,label:Ie.name}))),ue=C(()=>[{value:"",label:"â"},...n.snapshot.refs.characters.filter(Ie=>!Ie.standalone).map(Ie=>({value:Ie.id,label:Ie.name}))]),ye=C(()=>h.value.map(Ie=>({value:Ie,label:Kn(Ao[Ie].labels,l.value)})));function Ue(Ie){return["male","female","child","other"].map(Be=>({value:Be,label:Ie(`tool.blockingBoard.bodyType.${Be}`)}))}function te(Ie){return e0.map(Be=>({value:Be,label:Ie(`tool.blockingBoard.movementMode.${Be}`)}))}const q=C(()=>S1(n.snapshot,n.partId)),de=C(()=>new Set(n.snapshot.room.props.map(Ie=>Ie.id)));function Ce(Ie){const Be=A.value.map(Ke=>({value:Ke,label:q.value.get(Ke)??N(Ke,Ie)})),lt=new Map;for(const Ke of Be)lt.set(Ke.label,(lt.get(Ke.label)??0)+1);for(const Ke of Be){if((lt.get(Ke.label)??0)<2||!q.value.has(Ke.value))continue;const ct=de.value.has(Ke.value)?"scopeRoom":"scopePart";Ke.label=`${Ke.label} · ${Ie(`tool.blockingBoard.inspector.${ct}`)}`}return[{value:"",label:Ie("tool.blockingBoard.inspector.gazeTargetNone")},...Be]}function Ye(Ie,Be){const Ke=i.value.path.waypoints[Ie];o("command",{type:"actor.moveWaypoint",actorId:n.actorId,index:Ie,point:{x:Number(Be),y:Ke.y}})}function tt(Ie,Be){const Ke=i.value.path.waypoints[Ie];o("command",{type:"actor.moveWaypoint",actorId:n.actorId,index:Ie,point:{x:Ke.x,y:Number(Be)}})}function ht(Ie,Be){o("command",{type:"actor.setWaypointPause",actorId:n.actorId,index:Ie,pauseSec:Number(Be)})}function Et(Ie,Be){o("command",{type:"actor.setWaypointTime",actorId:n.actorId,index:Ie,atSec:Be})}function It(Ie){o("command",{type:"actor.removeWaypoint",actorId:n.actorId,index:Ie})}function Xt(){const Ie=i.value,Be=[Ie.start.position,...Ie.path.waypoints.map(Ve=>({x:Ve.x,y:Ve.y}))],lt=Be[Be.length-1],Ke=Be.length>=2?Be[Be.length-2]:null,ct=Ke?lt.x-Ke.x:0,xt=Ke?lt.y-Ke.y:0,jt=Math.hypot(ct,xt),Jt=jt>1e-9?{x:ct/jt,y:xt/jt}:In(Ie.start.headingDeg),Mn=n.snapshot.room,At=(Ve,Xe)=>Math.min(Xe-kv,Math.max(-Xe+kv,Ve)),Ae=si({x:At(lt.x+Jt.x*yv,Mn.widthM/2),y:At(lt.y+Jt.y*yv,Mn.depthM/2)},{snap:!0,shift:!1});o("command",{type:"actor.addWaypoint",actorId:n.actorId,point:Ae})}function yt(Ie){o("focus-waypoint",{actorId:n.actorId,index:Ie})}return(Ie,Be)=>{const lt=vn;return g(i)?(v(),k("div",G6,[(v(!0),k(ae,null,Me(O(Ie.$t),(Ke,ct)=>(v(),k("div",{key:g(y)[ct].code+g(y)[ct].path,class:"bb-inspector-issue","data-severity":g(y)[ct].severity},[ce(lt,{name:"i-lucide-triangle-alert",class:"bb-inspector-issue-icon"}),m("span",W6,[m("span",X6,[We(S(Ie.$t(g(y)[ct].messageKey)),1),Ke?(v(),k(ae,{key:0},[We(": "+S(Ke),1)],64)):H("",!0)]),m("span",Y6,S(Ie.$t(w(g(y)[ct]))),1)])],8,V6))),128)),ce(ft,{"data-field":"name",type:"text","model-value":g(i).name,error:L.value,label:"tool.blockingBoard.inspector.name",onCommit:V},null,8,["model-value","error"]),ce(wh,{kind:"actor",id:e.actorId,"part-id":e.partId,entry:g(d),onCommand:Be[0]||(Be[0]=Ke=>o("command",Ke))},null,8,["id","part-id","entry"]),ce(w1,{target:{kind:"actor",actorId:e.actorId},media:g(c),count:g(p),limit:g(f),onCommand:Be[1]||(Be[1]=Ke=>o("command",Ke))},null,8,["target","media","count","limit"]),ce(I6,{snapshot:e.snapshot,"part-id":e.partId,actor:g(i),"playhead-sec":e.timeSec??0,picking:e.picking??null,onPick:Be[2]||(Be[2]=Ke=>o("pick",Ke)),onIntent:Be[3]||(Be[3]=Ke=>o("intent",Ke)),onSeek:Be[4]||(Be[4]=Ke=>o("seek",Ke))},null,8,["snapshot","part-id","actor","playhead-sec","picking"]),m("div",q6,[ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"actor.pose",section:"pose",title:"tool.blockingBoard.inspector.sectionStartPose"},{default:rn(()=>[m("div",Z6,[(v(!0),k(ae,null,Me(g(a),Ke=>
243(v(),k("button",{key:Ke,type:"button","data-pose":Ke,class:"btn-md","aria-pressed":g(i).start.pose===Ke,onClick:ct=>fe(Ke)},S(Ie.$t(`tool.blockingBoard.pose.${Ke}`)),9,J6))),128))]),m("p",Q6,S(Ie.$t("tool.blockingBoard.inspector.startPoseHint")),1),g(i).start.pose==="sit"?(v(),et(ft,{key:0,"data-field":"seatPropId",type:"select","model-value":g(i).start.seatPropId,options:g(Ze),label:"tool.blockingBoard.inspector.seat",onCommit:Be[5]||(Be[5]=Ke=>X(Ke))},null,8,["model-value","options"])):H("",!0)]),_:1}),ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"actor.placement",section:"placement",title:"tool.blockingBoard.inspector.sectionPlaceHeading"},{default:rn(()=>[m("div",eH,[ce(ft,{"data-field":"x",type:"number",unit:"m","model-value":g(i).start.position.x,label:"tool.blockingBoard.inspector.x",onCommit:Be[6]||(Be[6]=Ke=>le(Ke))},null,8,["model-value"]),ce(ft,{"data-field":"y",type:"number",unit:"m","model-value":g(i).start.position.y,label:"tool.blockingBoard.inspector.y",onCommit:Be[7]||(Be[7]=Ke=>me(Ke))},null,8,["model-value"])]),ce(ft,{"data-field":"headingDeg",type:"number","model-value":g(i).start.headingDeg,unit:"°",title:Ie.$t("tool.blockingBoard.inspector.headingHint"),label:"tool.blockingBoard.inspector.heading",onCommit:Be[8]||(Be[8]=Ke=>oe(Ke))},null,8,["model-value","title"]),ce(ft,{"data-field":"movementMode",type:"select","model-value":g(i).movementMode,options:te(Ie.$t),label:"tool.blockingBoard.inspector.movementMode",onCommit:Be[9]||(Be[9]=Ke=>Fe(Ke))},null,8,["model-value","options"])]),_:1}),ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"actor.waypoints",section:"waypoints",title:"tool.blockingBoard.inspector.waypoints",summary:Ie.$t("tool.blockingBoard.inspector.waypointCount",{n:g(i).path.waypoints.length})},{actions:rn(()=>[m("button",{type:"button",class:"bb-inspector-auto-detour",disabled:g(M)===0,title:`${Ie.$t("tool.blockingBoard.inspector.blockedCount",{count:g(M)})} · ${Ie.$t("tool.blockingBoard.inspector.autoDetour")}`,onClick:Z},[m("span",{class:qe(["bb-detour-dot",g(M)===0?"bb-detour-dot--ok":"bb-detour-dot--blocked"])},null,2),We(" "+S(g(M)===0?Ie.$t("tool.blockingBoard.inspector.detourOk"):Ie.$t("tool.blockingBoard.inspector.blockedCount",{count:g(M)})),1)],8,tH),m("button",{type:"button",class:"bb-waypoint-add bb-section-add","aria-label":Ie.$t("tool.blockingBoard.inspector.addWaypoint"),title:Ie.$t("tool.blockingBoard.inspector.addWaypoint"),onClick:Xt},[ce(lt,{name:"i-lucide-plus",class:"size-[14px]"})],8,nH)]),default:rn(()=>[g(i).path.waypoints.length>0?(v(),k("table",oH,[Be[18]||(Be[18]=m("colgroup",null,[m("col",{style:{width:"20px"}}),m("col"),m("col"),m("col"),m("col"),m("col",{style:{width:"24px"}})],-1)),m("thead",null,[m("tr",null,[Be[14]||(Be[14]=m("th",null,"#",-1)),Be[15]||(Be[15]=m("th",null,"X (m)",-1)),Be[16]||(Be[16]=m("th",null,"Y (m)",-1)),m("th",null,S(Ie.$t("tool.blockingBoard.inspector.waypointTime"))+" (s)",1),m("th",null,S(Ie.$t("tool.blockingBoard.inspector.waypointPause"))+" (s)",1),Be[17]||(Be[17]=m("th",null,null,-1))])]),m("tbody",null,[(v(!0),k(ae,null,Me(g(i).path.waypoints,(Ke,ct)=>(v(),k("tr",{key:`${g(i).path.waypoints.length}:${ct}`,class:"bb-waypoint-row bb-table-row"},[m("td",{class:"bb-waypoint-index",onClick:xt=>yt(ct)},S(ct+1),9,aH),m("td",null,[ce(ft,{compact:"",bare:"","data-field":"x",type:"number",unit:"m","model-value":Ke.x,label:"tool.blockingBoard.inspector.x",onCommit:xt=>Ye(ct,xt)},null,8,["model-value","onCommit"])]),m("td",null,[ce(ft,{compact:"",bare:"","data-field":"y",type:"number",unit:"m","model-value":Ke.y,label:"tool.blockingBoard.inspector.y",onCommit:xt=>tt(ct,xt)},null,8,["model-value","onCommit"])]),m("td",sH,[ce(ft,{compact:"",bare:"",type:"number","allow-empty":"",unit:"s","model-value":Ke.atSec??null,label:"tool.blockingBoard.inspector.waypointTime",onCommit:xt=>Et(ct,xt)},null,8,["model-value","onCommit"])]),m("td",null,[ce(ft,{compact:"",bare:"","data-field":"pauseSec",type:"number",unit:"s","model-value":Ke.pauseSec,"default-value":g(pi)("waypoint","pauseSec",Ke),label:"tool.blockingBoard.inspector.waypointPause",onCommit:xt=>ht(ct,xt)},null,8,["model-value","default-value","onCommit"])]),m("td",null,[m("button",{type:"button",class:"bb-waypoint-remove bb-table-remove","aria-label":Ie.$t("tool.blockingBoard.inspector.removeWaypoint",{n:ct+1}),title:Ie.$t("tool.blockingBoard.inspector.removeWaypoint",{n:ct+1}),onClick:un(xt=>It(ct),["stop"])}," à ",8,iH)])]))),128))])])):H("",!0)]),_:1},8,["summary"]),ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"actor.gaze",section:"gaze",title:"tool.blockingBoard.inspector.gazeSection",summary:Ie.$t("tool.blockingBoard.inspector.gazeKeyCount",{n:g(i).facingKeys.length})},{actions:rn(()=>[m("button",{type:"button",class:"bb-inspector-gaze-add bb-section-add","aria-label":Ie.$t("tool.blockingBoard.inspector.gazeKeyAdd"),title:Ie.$t("tool.blockingBoard.inspector.gazeKeyAdd"),onClick:D},[ce(lt,{name:"i-lucide-plus",class:"size-[14px]"})],8,rH)]),default:rn(()=>[g(i).facingKeys.length>0?(v(),k("table",lH,[Be[20]||(Be[20]=m("colgroup",null,[m("col",{style:{width:"56px"}}),m("col",{style:{width:"56px"}}),m("col"),m("col",{style:{width:"24px"}}
243)],-1)),m("thead",null,[m("tr",null,[m("th",null,S(Ie.$t("tool.blockingBoard.inspector.gazeKeyTime"))+" (s)",1),m("th",null,S(Ie.$t("tool.blockingBoard.inspector.gazeKeyAngle"))+" (°)",1),m("th",null,S(Ie.$t("tool.blockingBoard.inspector.gazeTarget")),1),Be[19]||(Be[19]=m("th",null,null,-1))])]),m("tbody",null,[(v(!0),k(ae,null,Me(g(i).facingKeys,(Ke,ct)=>(v(),k("tr",{key:ct,class:"bb-table-row bb-inspector-gaze-key"},[m("td",null,[ce(ft,{compact:"",bare:"","data-field":"atSec",type:"number","model-value":Ke.atSec,unit:"s",label:"tool.blockingBoard.inspector.gazeKeyTime",onCommit:xt=>F(ct,xt)},null,8,["model-value","onCommit"])]),m("td",null,[ce(ft,{compact:"",bare:"","data-field":"headingDeg",type:"number","model-value":Ke.headingDeg,unit:"°",label:"tool.blockingBoard.inspector.gazeKeyAngle",onCommit:xt=>B(ct,xt)},null,8,["model-value","onCommit"])]),m("td",null,[ce(ft,{compact:"","data-field":"targetId",type:"select","input-class":"bb-inspector-gaze-target","model-value":Ke.targetId??"",options:Ce(Ie.$t),label:"tool.blockingBoard.inspector.gazeTarget",onCommit:xt=>j(ct,xt)},null,8,["model-value","options","onCommit"])]),m("td",null,[m("button",{type:"button",class:"bb-inspector-gaze-remove bb-table-remove","aria-label":Ie.$t("tool.blockingBoard.inspector.gazeKeyRemove"),title:Ie.$t("tool.blockingBoard.inspector.gazeKeyRemove"),onClick:xt=>ee(ct)}," à ",8,cH)])]))),128))])])):H("",!0)]),_:1},8,["summary"]),ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"actor.basic",section:"basic",title:"tool.blockingBoard.inspector.sectionLook"},{default:rn(()=>[ce(ft,{"data-field":"refId",type:"select","model-value":g(i).refId??"",options:g(ue),label:"tool.blockingBoard.inspector.ref",onCommit:Be[10]||(Be[10]=Ke=>Se(Ke))},null,8,["model-value","options"]),ce(ft,{"data-field":"species",type:"select","model-value":g(i).species,options:g(ye),label:"tool.blockingBoard.inspector.species",onCommit:Be[11]||(Be[11]=Ke=>Q(Ke))},null,8,["model-value","options"]),ce(ft,{"data-field":"bodyType",type:"select","model-value":g(i).bodyType,options:Ue(Ie.$t),label:"tool.blockingBoard.inspector.bodyType",onCommit:Be[12]||(Be[12]=Ke=>$e(Ke))},null,8,["model-value","options"]),ce(ft,{"data-field":"color",type:"color","model-value":g(i).color,label:"tool.blockingBoard.inspector.color",onCommit:Be[13]||(Be[13]=Ke=>pe("color",Ke))},null,8,["model-value"])]),_:1})])])):H("",!0)}}}),pH=Object.assign(ot(uH,[["__scopeId","data-v-85bdb511"]]),{__name:"BbInspectorActor"});function Mh(e,t,n){if(e.keys.length===0)return{state:"none",index:null};const o=.5/n,a=e.keys.findIndex(s=>Math.abs(s.atSec-t)<=o);return a===-1?{state:"other",index:null}:{state:"here",index:a}}function fH(e,t,n){const{state:o,index:a}=Mh(e,t,n);return o==="here"&&a!==null?{type:"camera.removeKey",cameraId:e.id,index:a}:{type:"camera.addKey",cameraId:e.id,atSec:t}}function mH(e,t,n,o,a){const{state:s,index:i}=Mh(e,t,n);return s==="here"&&i!==null?{type:"camera.setKeyField",cameraId:e.id,index:i,patch:{[o]:a}}:s==="other"?{type:"camera.addKey",cameraId:e.id,atSec:t,value:{[o]:a}}:o==="x"?{type:"camera.setField",cameraId:e.id,patch:{position:{x:a,y:e.position.y}}}:o==="y"?{type:"camera.setField",cameraId:e.id,patch:{position:{x:e.position.x,y:a}}}:o==="lensMm"?{type:"camera.setField",cameraId:e.id,patch:{lensMm:a,fovOverrideDeg:void 0}}:{type:"camera.setField",cameraId:e.id,patch:{[o]:a}}}function hH(e,t,n){if(e.keys.length===0)return{x:e.position.x,y:e.position.y,heightM:e.heightM,headingDeg:e.headingDeg,pitchDeg:e.pitchDeg,rollDeg:e.rollDeg,lensMm:e.lensMm};if(e.keys.length===1){const a=e.keys[0];return{x:a.x,y:a.y,heightM:a.heightM,headingDeg:a.headingDeg,pitchDeg:a.pitchDeg,rollDeg:a.rollDeg,lensMm:a.lensMm}}const o=Wm(e,t,{subjects:[],subjectHeights:[],easing:n});return{x:o.position.x,y:o.position.y,heightM:o.heightM,headingDeg:o.headingDeg,pitchDeg:o.pitchDeg,rollDeg:o.rollDeg,lensMm:o.lensMm}}const bH=["dolly-in","pull-back","truck","crane","tracking"],gH=["pan","tilt","arc","whip-pan"];function vH(e){return bH.includes(e)?"m":gH.includes(e)?"°":e==="zoom"?"mm":null}const M1=new Map;function yH(e,t){M1.set(e,t)}function kH(e){return M1.get(e)??null}const SH=["data-id"],IH={class:"bb-subject-chip-label"},wH=["aria-label","onClick"],MH={class:"bb-subject-add-wrap"},$H={key:0,class:"bb-subject-picker"},EH=["data-group"],xH={class:"bb-subject-picker-group-title"},PH=["data-id","checked","onChange"],CH=nt({__name:"BbSubjectChips",props:{modelValue:{},groups:{}},emits:["change"],setup(e,{emit:t}){const n=e,o=t,a=G(!1),s=G(null);Qo("subjectPicker",()=>a.value,h=>h.id==="overlay.close"?(a.value=!1,!0):!1);function i(){return n.groups.flatMap(h=>h.items)}function r(h){return i().find(b=>b.id===h)?.label??h}function l(h){return i().find(b=>b.id===h)?.color}function c(){a.value=!0}function d(){a.value=!1}function u(h){o("change",n.modelValue.filter(b=>b!==h))}function p(h){const b=n.modelValue,I=b.includes(h)?b.filter(y=>y!==h):[...b,h];o("change",I)}function f(h){if(!a.value)return;const b=h.target;s.value&&!s.value.contains(b)&&d()}return Jn(()=>{document.addEventListener("pointerdown",f,!0)}),wn(()=>{document.removeEventListener("pointerdown",f,!0)}),(h,b)=>(v(),k("div",{ref_key:"rootEl",ref:s,class:"bb-subject-chips"},[(v(!0),k(ae,null,Me(e.modelValue,I=>(v(),k("span",{key:I,class:"bb-subject-chip","data-id":I},[l(I)?(v(),k("span",{key:0,class:"bb-subject-chip-dot",style:wt({background:l(I)})},null,4)):H("",!0),m("span",IH,S(r(I)),1),m("button",{type:"button",class:"bb-subject-chip-remove","aria-label":h.$t("tool.blockingBoard.inspector.subjectRemove",{name:r(I)}),onClick:y=>u(I)}
243," à ",8,wH)],8,SH))),128)),m("span",MH,[m("button",{type:"button",class:"bb-subject-add",onClick:c},S(h.$t("tool.blockingBoard.inspector.subjectAdd")),1),a.value?(v(),k("div",$H,[(v(!0),k(ae,null,Me(e.groups,I=>(v(),k("div",{key:I.key,class:"bb-subject-picker-group","data-group":I.key},[m("div",xH,S(h.$t(I.title)),1),(v(!0),k(ae,null,Me(I.items,y=>(v(),k("label",{key:y.id,class:"bb-subject-picker-item"},[m("input",{type:"checkbox","data-id":y.id,checked:e.modelValue.includes(y.id),onChange:w=>p(y.id)},null,40,PH),We(" "+S(y.label),1)]))),128))],8,EH))),128))])):H("",!0)])],512))}}),$1=Object.assign(ot(CH,[["__scopeId","data-v-83b3a6d2"]]),{__name:"BbInspectorBbSubjectChips"}),BH={key:0,class:"bb-inspector bb-inspector-camera"},_H=["data-severity"],AH={"data-field":"lensMm",class:"bb-lens-grid"},TH=["data-mm","aria-pressed","onClick"],RH={class:"bb-inspector-fov-row"},DH=["aria-pressed","title"],OH={class:"bb-detail-sections","data-section":"detail"},NH={key:0,class:"bb-camera-keys-note"},LH={class:"bb-inspector-pair"},KH={"data-field":"subject"},FH=["disabled"],HH={"data-field":"freeAim",class:"bb-field-checkbox-row"},zH=["checked"],jH={key:0,class:"bb-free-aim-hint"},UH={key:0,class:"bb-camera-no-cuts"},GH=["onClick"],VH={class:"bb-camera-cut-badge"},WH={class:"bb-camera-cut-shot"},XH={class:"bb-camera-cut-time"},YH=64,qH=nt({__name:"BbInspectorCamera",props:{snapshot:{},partId:{},cameraId:{},issues:{},timeSec:{}},emits:["command","select","look-through"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.parts.find(X=>X.partId===n.partId)),s=C(()=>a.value?.cameras.find(X=>X.id===n.cameraId)),i=C(()=>Math.max(0,a.value?.cameras.findIndex(X=>X.id===n.cameraId)??0)),r=C(()=>n.timeSec??0),l=C(()=>n.snapshot.settings.fps),c=C(()=>n.snapshot.settings.easing),d=C(()=>(s.value?.subject?.targetIds.length??0)>0),u=C(()=>d.value);Je(()=>[n.cameraId,s.value?.subject],([X,re])=>{re&&re.targetIds.length>0&&yH(X,re)},{immediate:!0});const p=G(!1);Je(()=>n.cameraId,()=>{p.value=!1});const f=C(()=>n.issues?.filter(X=>X.targetId===n.cameraId)??[]);function h(X){return X.messageKey.replace(".issue.",".hint.")}function b(X){o("command",{type:"camera.setField",cameraId:n.cameraId,patch:X})}const I=G(null);function y(X){const re=String(X);if(re.trim()===""){I.value="tool.blockingBoard.field.nameEmpty";return}if(re.length>YH){I.value="tool.blockingBoard.field.nameTooLong";return}I.value=null,o("command",{type:"entity.rename",id:n.cameraId,name:re})}Je(()=>n.cameraId,()=>I.value=null);const w=C(()=>s.value?Mh(s.value,r.value,l.value):{state:"none",index:null}),M=C(()=>w.value.state),x=C(()=>s.value?hH(s.value,r.value,c.value):null);function _(X,re){s.value&&o("command",mH(s.value,r.value,l.value,X,re))}function O(){s.value&&o("command",fH(s.value,r.value,l.value))}const A=C(()=>x.value?U0(x.value.lensMm).horizontalDeg.toFixed(1):void 0);function N(X){_("lensMm",X)}function K(X){b({move:{...s.value.move,type:X}})}function F(X){b({move:{...s.value.move,amount:Number(X)}})}function B(X){if(X===""){const{direction:re,...Se}=s.value.move;b({move:Se});return}b({move:{...s.value.move,direction:X}})}function j(X){return Cm.map(re=>({value:re,label:X(`tool.blockingBoard.move.${re.replace(/-([a-z])/g,(Se,Q)=>Q.toUpperCase())}`)}))}function ee(X){return[{value:"",label:X("tool.blockingBoard.inspector.moveDirectionNone")},...t0.map(re=>({value:re,label:X(`tool.blockingBoard.direction.${re}`)}))]}const D=C(()=>vH(s.value?.move.type??"static")),Z=C(()=>[{key:"actors",title:"tool.blockingBoard.inspector.subjectGroupActors",items:(a.value?.actors??[]).map(X=>({id:X.id,label:X.name,color:X.color}))},{key:"props",title:"tool.blockingBoard.inspector.subjectGroupProps",items:[...n.snapshot.room.props,...a.value?.props??[]].map(X=>({id:X.id,label:X.name}))}]);function L(X){if(X.length===0){b({subject:null});return}b({subject:{...s.value.subject??{},targetIds:X}})}function V(X){const re=X.target;if(re.checked){p.value=!1,b({subject:null});return}const Se=kH(n.cameraId);if(!Se){p.value=!0,hn(()=>{re.checked=!0});return}p.value=!1,b({subject:Se})}function pe(){const X=s.value?.subject?.targetIds;!X||X.length===0||o("command",{type:"camera.aimAt",cameraId:n.cameraId,targetIds:X})}const le=C(()=>{const X=a.value?.timeline.cuts??[],re=Oi(X);return X.map(Se=>({cut:Se,number:re.get(Se.id)??0})).filter(Se=>Se.cut.cameraId===n.cameraId).sort((Se,Q)=>Se.cut.inSec-Q.cut.inSec)});function me(X,re){o("select",{id:X,seekSec:re})}function oe(X){return X.replace(/-([a-z])/g,(re,Se)=>Se.toUpperCase())}function fe(X,re){const Se=a.value?.timeline.coverages.find(Q=>Q.id===X.coverageId)?.shotType;return Se?re(`tool.blockingBoard.shotType.${oe(Se)}`):""}return(X,re)=>{const Se=vn;return s.value&&x.value?(v(),k("div",BH,[(v(!0),k(ae,null,Me(f.value,Q=>(v(),k("div",{key:Q.code+Q.path,class:"bb-inspector-issue","data-severity":Q.severity},S(X.$t(Q.messageKey))+" · "+S(X.$t(h(Q))),9,_H))),128)),ce(Bo,{"storage-id":"camera.basic",section:"basic",title:"tool.blockingBoard.inspector.sectionBasic"},{default:rn(()=>[ce(ft,{"data-field":"name",type:"text","model-value":g(Tl)(s.value)??"",placeholder:X.$t("tool.blockingBoard.cameraFallback",{n:i.value+1}),error:I.value,label:"tool.blockingBoard.inspector.name",onCommit:y},null,8,["model-value","placeholder","error"])]),_:1}),ce(Bo,{"storage-id":"camera.lens",section:"lens",title:"tool.blockingBoard.inspector.sectionLens"},{default:rn(()=>[m("div",AH,[(v(!0),k(ae,null,Me(g(Ys),Q=>(v(),k("button",{key:Q,type:"button",class:"bb-lens-btn","data-mm":Q,"aria-pressed":x.value.lensMm===Q,onClick:$e=>N(Q)},S(Q),9,TH))),128)),ce(EI,{state:w.value.state,onToggle:O},null,8,["state"])]),m("div",RH,[ce(ft,{"data-field":"fovOverrideDeg",class:"bb-inspector-fov-field",type:"number","model-value":s.value.fovOverrideDeg??null,min:g($n).fovOverrideDeg.min,max:g($n).fovOverrideDeg.max,"allow-empty":"",placeholder:A.value,unit:"°",label:"tool.blockingBoard.inspector.fov",onCommit:re[0]||(re[0]=Q=>b({fovOverrideDeg:Q??void 0}))},null,8,["model-value","min","max","placeholder"]),m("button",{type:"button",class:qe(["bb-inspector-fov-auto",{"bb-on":s.value.fovOverrideDeg===void 0}]),"aria-pressed":s.value.fovOverrideDeg===void 0,title:s.value.fovOverrideDeg===void 0?void 0:X.$t("tool.blockingBoard.inspector.fovClear"),onClick:re[1]||(re[1]=Q=>s.value.fovOverrideDeg!==void 0&&b({fovOverrideDeg:void 0}))},S(X.$t("tool.blockingBoard.inspector.fovAuto")),11,DH)])]),_:1}),m("button",{type:"button",class:"bb-camera-look-through btn-md","data-action":"look-through",onClick:re[2]||(re[2]=Q=>o("look-through",e.cameraId))},S(X.$t("tool.blockingBoard.viewport.lookThrough",{name:g(Tl)(s.value)??X.$t("tool.blockingBoard.cameraFallback",{n:i.value+1})})),1),m("div",OH,[ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"camera.placement",section:"placement",title:"tool.blockingBoard.inspector.sectionPlaceAngle",summary:w.value.state!=="none"?X.$t("tool.blockingBoard.inspector.keyCount",{n:s.value.keys.length,t:r.value.toFixed(2)}):void 0},{default:rn(()=>[w.value.state!=="none"?(v(),k("div",NH,S(X.$t("tool.blockingBoard.inspector.cameraKeysHint")),1)):H("",!0),m("div",LH,[ce(ft,{"data-field":"x",type:"number",unit:"m","model-value":x.value.x,"key-state":M.value,onCommit:re[3]||(re[3]=Q=>_("x",Q)),onKeyToggle:O,label:"tool.blockingBoard.inspector.x"},null,8,["model-value","key-state"]),ce(ft,{"data-field":"y",type:"number",unit:"m","model-value":x.value.y,"key-state":M.value,onCommit:re[4]||(re[4]=Q=>_("y",Q)),onKeyToggle:O,label:"tool.blockingBoard.inspector.y"},null,8,["model-value","key-state"])]),ce(ft,{"data-field":"heightM",type:"number","model-value":x.value.heightM,min:g($n).cameraHeightM.min,max:g($n).cameraHeightM.max,unit:"m","key-state":M.value,"default-value":g(pi)("camera","heightM",s.value),label:"tool.blockingBoard.inspector.height",title:X.$t("tool.blockingBoard.inspector.heightTip"),onCommit:re[5]||(re[5]=Q=>_("heightM",Q)),onKeyToggle:O},null,8,["model-value","min","max","key-state","default-value","title"]),ce(ft,{"data-field":"headingDeg",type:"number","model-value":x.value.headingDeg,unit:"°",title:X.$t("tool.blockingBoard.inspector.headingHint"),disabled:u.value,"key-state":M.value,label:"tool.blockingBoard.inspector.heading",onCommit:re[6]||(re[6]=Q=>_("headingDeg",Q)),onKeyToggle:O},null,8,["model-value","title","disabled","key-state"]),ce(ft,{"data-field":"pitchDeg",type:"number","model-value":x.value.pitchDeg,min:g($n).cameraPitchDeg.min,max:g($n).cameraPitchDeg.max,unit:"°",disabled:u.value,"key-state":M.value,"default-value":g(pi)("camera","pitchDeg",s.value),label:"tool.blockingBoard.inspector.pitch",onCommit:re[7]||(re[7]=Q=>_("pitchDeg",Q)),onKeyToggle:O},null,8,["model-value","min","max","disabled","key-state","default-value"]),ce(ft,{"data-field":"rollDeg",type:"number","model-value":x.value.rollDeg,min:g($n).cameraRollDeg.min,max:g($n).cameraRollDeg.max,unit:"°","key-state":M.value,"default-value":g(pi)("camera","rollDeg",s.value),label:"tool.blockingBoard.inspector.roll",onCommit:re[8]||(re[8]=Q=>_("rollDeg",Q)),onKeyToggle:O},null,8,["model-value","min","max","key-state","default-value"])]),_:1},8,["summary"]),ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"camera.subject",section:"subject",title:"tool.blockingBoard.inspector.sectionSubject"},{default:rn(()=>[m("div",KH,[ce($1,{"model-value":s.value.subject?.targetIds??[],groups:Z.value,onChange:L},null,8,["model-value","groups"])]),m("button",{type:"button",class:"bb-aim-at btn-md",disabled:!d.value,onClick:pe},[ce(Se,{name:"i-lucide-crosshair",class:"size-[14px]"}),We(" "+S(X.$t("tool.blockingBoard.inspector.aimAt")),1)],8,FH),m("label",HH,[m("input",{type:"checkbox",class:"bb-switch",role:"switch",checked:!d.value,onChange:V},null,40,zH),We(" "+S(X.$t("tool.blockingBoard.inspector.freeAim")),1)]),p.value?(v(),k("div",jH,S(X.$t("tool.blockingBoard.inspector.freeAimNeedsSubject")),1)):H("",!0)]),_:1}),ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"camera.move",section:"move",title:"tool.blockingBoard.inspector.sectionMotion"},{default:rn(()=>[ce(ft,{"data-field":"moveType",type:"select","model-value":s.value.move.type,options:j(X.$t),label:"tool.blockingBoard.inspector.move",onCommit:re[9]||(re[9]=Q=>K(Q))}
243,null,8,["model-value","options"]),D.value?(v(),et(ft,{key:0,"data-field":"moveAmount",type:"number",unit:D.value,"model-value":s.value.move.amount??0,label:"tool.blockingBoard.inspector.moveAmount",onCommit:re[10]||(re[10]=Q=>F(Q))},null,8,["unit","model-value"])):H("",!0),ce(ft,{"data-field":"moveDirection",type:"select","model-value":s.value.move.direction??"",options:ee(X.$t),label:"tool.blockingBoard.inspector.moveDirection",onCommit:re[11]||(re[11]=Q=>B(Q))},null,8,["model-value","options"])]),_:1}),ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"camera.cuts",section:"cuts",title:"tool.blockingBoard.inspector.sectionCameraCuts"},{default:rn(()=>[le.value.length===0?(v(),k("p",UH,S(X.$t("tool.blockingBoard.inspector.cameraNoCuts")),1)):H("",!0),(v(!0),k(ae,null,Me(le.value,({cut:Q,number:$e})=>(v(),k("button",{key:Q.id,type:"button",class:"bb-camera-cut-row",onClick:Fe=>me(Q.id,Q.inSec)},[m("span",VH,S(X.$t("tool.blockingBoard.inspector.cutNumber",{n:String($e).padStart(2,"0")})),1),m("span",WH,S(fe(Q,X.$t)),1),m("span",XH,S(Q.inSec.toFixed(1))+"â"+S(Q.outSec.toFixed(1))+"s",1)],8,GH))),128))]),_:1})])])):H("",!0)}}}),ZH=Object.assign(ot(qH,[["__scopeId","data-v-25846b39"]]),{__name:"BbInspectorCamera"}),JH=["aria-label"],QH=["data-severity"],ez={"data-field":"cameraId",class:"bb-field bb-field-readonly bb-field--row"},tz={class:"bb-field-label"},nz={"data-field":"subject"},oz={class:"bb-field-label"},Cp="",az=nt({__name:"BbInspectorCoverage",props:{snapshot:{},partId:{},coverageId:{},issues:{}}
243,emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=["action-start","action-end","dialogue-start","dialogue-end"];function s(B){return B.replace(/-([a-z])/g,(j,ee)=>ee.toUpperCase())}const i=C(()=>n.snapshot.parts.find(B=>B.partId===n.partId)),r=C(()=>i.value?.timeline.coverages.find(B=>B.id===n.coverageId)),l=C(()=>i.value?.cameras.find(B=>B.id===r.value?.cameraId)),c=C(()=>Math.max(0,i.value?.cameras.findIndex(B=>B.id===r.value?.cameraId)??0)),d=C(()=>l.value?Tl(l.value):null),u=C(()=>n.issues?.filter(B=>B.targetId===n.coverageId)??[]);function p(B){return B.messageKey.replace(".issue.",".hint.")}function f(B){o("command",{type:"coverage.trim",coverageId:n.coverageId,...B})}function h(B){o("command",{type:"coverage.setField",coverageId:n.coverageId,patch:B})}function b(B){h({shotType:B})}function I(B){h({timingMode:B})}function y(B){h({subject:{...r.value.subject,targetIds:B}})}const w=C(()=>[{key:"actors",title:"tool.blockingBoard.inspector.subjectGroupActors",items:(i.value?.actors??[]).map(B=>({id:B.id,label:B.name,color:B.color}))}]);function M(B){return n0.map(j=>({value:j,label:B(`tool.blockingBoard.shotType.${s(j)}`)}))}function x(B){return s0.map(j=>({value:j,label:B(`tool.blockingBoard.timingMode.${s(j)}`)}))}function _(B){return[{value:Cp,label:B("tool.blockingBoard.inspector.anchorNone")},...a.map(j=>({value:j,label:B(`tool.blockingBoard.anchorEvent.${s(j)}`),disabled:O(j).length===0,title:O(j).length===0?B("tool.blockingBoard.inspector.anchorNoTarget"):void 0}))]}function O(B){return B.startsWith("action")?(i.value?.timeline.actions??[]).map(j=>({id:j.id,label:j.actionType})):B.startsWith("dialogue")?(i.value?.timeline.dialogues??[]).map(j=>({id:j.id,label:j.line})):[]}function A(B){const j=r.value?.anchor,ee=B.eventType??j?.eventType??a[0],D=O(ee),Z=B.targetId??(D.some(V=>V.id===j?.targetId)?j.targetId:D[0]?.id);if(!Z)return;const L=B.offsetSec??j?.offsetSec??0;o("command",{type:"coverage.setAnchor",coverageId:n.coverageId,anchor:{targetId:Z,eventType:ee,offsetSec:L}})}function N(B){if(B===Cp){o("command",{type:"coverage.setAnchor",coverageId:n.coverageId,anchor:null});return}A({eventType:B})}function K(B){A({targetId:B})}function F(){return r.value?.anchor?O(r.value.anchor.eventType).map(B=>({value:B.id,label:B.label})):[]}return(B,j)=>g(r)?(v(),k("div",{key:0,class:"bb-inspector bb-inspector-coverage","aria-label":B.$t("tool.blockingBoard.inspector.coverage")},[(v(!0),k(ae,null,Me(g(u),ee=>(v(),k("div",{key:ee.code+ee.path,class:"bb-inspector-issue","data-severity":ee.severity},S(B.$t(ee.messageKey))+" · "+S(B.$t(p(ee))),9,QH))),128)),m("span",ez,[m("span",tz,S(B.$t("tool.blockingBoard.inspector.camera")),1),m("span",null,S(g(d)??B.$t("tool.blockingBoard.cameraFallback",{n:g(c)+1})),1)]),ce(ft,{"data-field":"startSec",type:"number","model-value":g(r).startSec,min:0,max:g(i)?.durationSec,unit:"s",label:"tool.blockingBoard.inspector.startSec",onCommit:j[0]||(j[0]=ee=>f({startSec:ee}))},null,8,["model-value","max"]),ce(ft,{"data-field":"endSec",type:"number","model-value":g(r).endSec,min:0,max:g(i)?.durationSec,unit:"s",label:"tool.blockingBoard.inspector.endSec",onCommit:j[1]||(j[1]=ee=>f({endSec:ee}))},null,8,["model-value","max"]),ce(ft,{"data-field":"shotType",type:"select","model-value":g(r).shotType,options:M(B.$t),label:"tool.blockingBoard.inspector.shotType",onCommit:j[2]||(j[2]=ee=>b(ee))},null,8,["model-value","options"]),m("div",nz,[m("span",oz,S(B.$t("tool.blockingBoard.inspector.coverageSubject")),1),ce($1,{"model-value":g(r).subject.targetIds,groups:g(w),onChange:y},null,8,["model-value","groups"])]),ce(ft,{"data-field":"timingMode",type:"select","model-value":g(r).timingMode,options:x(B.$t),label:"tool.blockingBoard.inspector.timingMode",onCommit:j[3]||(j[3]=ee=>I(ee))},null,8,["model-value","options"]),ce(ft,{"data-field":"anchorEvent",type:"select","model-value":g(r).anchor?.eventType??Cp,options:_(B.$t),label:"tool.blockingBoard.inspector.anchorEvent",onCommit:j[4]||(j[4]=ee=>N(ee))},null,8,["model-value","options"]),g(r).anchor?(v(),et(ft,{key:0,"data-field":"anchorTarget",type:"select","model-value":g(r).anch
243or.targetId,options:F(),label:"tool.blockingBoard.inspector.anchorTarget",onCommit:j[5]||(j[5]=ee=>K(ee))},null,8,["model-value","options"])):H("",!0),g(r).anchor?(v(),et(ft,{key:1,"data-field":"anchorOffset",type:"number","model-value":g(r).anchor.offsetSec,unit:"s",label:"tool.blockingBoard.inspector.anchorOffset",onCommit:j[6]||(j[6]=ee=>A({offsetSec:ee}))},null,8,["model-value"])):H("",!0)],8,JH)):H("",!0)}}),sz=Object.assign(ot(az,[["__scopeId","data-v-36a8df08"]]),{__name:"BbInspectorCoverage"}),iz={class:"bb-cut-direction","data-field":"cutDirection"},rz={class:"bb-cut-direction-label"},lz=["maxlength","placeholder"],cz=nt({__name:"BbInspectorCutDirection",props:{snapshot:{},partId:{},cutId:{}},emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.parts.find(r=>r.partId===n.partId)?.timeline.cuts.find(r=>r.id===n.cutId)?.direction??""),s=G(a.value);Je(a,r=>{s.value=r});function i(){s.value!==a.value&&o("command",{type:"cut.setDirection",cutId:n.cutId,text:s.value})}return wn(()=>i()),(r,l)=>(v(),k("label",iz,[m("span",rz,S(r.$t("tool.blockingBoard.inspector.cutDirection")),1),Zt(m("textarea",{"onUpdate:modelValue":l[0]||(l[0]=c=>s.value=c),class:"bb-cut-direction-input",rows:"3",maxlength:g(Nm),placeholder:r.$t("tool.blockingBoard.inspector.cutDirectionPlaceholder"),onBlur:l[1]||(l[1]=c=>i())},null,40,lz),[[Nn,s.value]])]))}}),dz=Object.assign(ot(cz,[["__scopeId","data-v-55e1e82a"]]),{__name:"BbInspectorCutDirection"}),uz={key:0,class:"bb-field bb-field-readonly bb-field--row","data-field":"cutNotes"},pz={class:"bb-field-label"},fz={class:"bb-cut-notes"},mz=nt({__name:"BbInspectorCutNotes",props:{snapshot:{},partId:{},cutId:{}},setup(e){const t=e,n=C(()=>{const a=t.snapshot.parts.find(s=>s.partId===t.partId)?.prompt.cutTexts[t.cutId]?.ko;return a?.startsWith(Td)?a.slice(Td.length).trimStart():null});return(o,a)=>n.value!==null?(v(),k("div",uz,[m("span",pz,S(o.$t("tool.blockingBoard.inspector.cutNotes")),1),m("pre",fz,S(n.value),1)])):H("",!0)}}),hz=Object.assign(ot(mz,[["__scopeId","data-v-2746f181"]]),{__name:"BbInspectorCutNotes"}),bz=["aria-label"],gz=["data-severity"],vz={key:0,"data-field":"shotIntent",class:"bb-field bb-field-readonly bb-field--row"},yz={class:"bb-field-label"},kz=nt({__name:"BbInspectorCut",props:{snapshot:{},partId:{},cutId:{},issues:{}}
243,emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.parts.find(p=>p.partId===n.partId)),s=C(()=>a.value?.timeline.cuts.find(p=>p.id===n.cutId)),i=C(()=>a.value?.timeline.coverages.find(p=>p.id===s.value?.coverageId)),r=C(()=>n.issues?.filter(p=>p.targetId===n.cutId)??[]);function l(p){return p.messageKey.replace(".issue.",".hint.")}function c(p){return p.replace(/-([a-z])/g,(f,h)=>h.toUpperCase())}const d=new Set(["deliver-dialogue","show-reaction","follow-action","establish-context"]);function u(p){o("command",{type:"cut.trim",cutId:n.cutId,...p})}return(p,f)=>g(s)?(v(),k("div",{key:0,class:"bb-inspector bb-inspector-cut","aria-label":p.$t("tool.blockingBoard.inspector.cut")},[(v(!0),k(ae,null,Me(g(r),h=>(v(),k("div",{key:h.code+h.path,class:"bb-inspector-issue","data-severity":h.severity},S(p.$t(h.messageKey))+" · "+S(p.$t(l(h))),9,gz))),128)),ce(ft,{"data-field":"inSec",type:"number","model-value":g(s).inSec,min:g(i)?.startSec,max:g(i)?.endSec,unit:"s",label:"tool.blockingBoard.inspector.inSec",onCommit:f[0]||(f[0]=h=>u({inSec:h}))},null,8,["model-value","min","max"]),ce(ft,{"data-field":"outSec",type:"number","model-value":g(s).outSec,min:g(i)?.startSec,max:g(i)?.endSec,unit:"s",label:"tool.blockingBoard.inspector.outSec",onCommit:f[1]||(f[1]=h=>u({outSec:h}))},null,8,["model-value","min","max"]),g(s).shotIntent?(v(),k("span",vz,[m("span",yz,S(p.$t("tool.blockingBoard.inspector.shotIntent")),1),m("span",null,S(g(d).has(g(s).shotIntent.type)?p.$t(`tool.blockingBoard.shotIntent.${c(g(s).shotIntent.type)}`):g(s).shotIntent.type),1)])):H("",!0),ce(dz,{snapshot:e.snapshot,"part-id":e.partId,"cut-id":e.cutId,onCommand:f[2]||(f[2]=h=>o("command",h))},null,8,["snapshot","part-id","cut-id"]),ce(hz,{snapshot:e.snapshot,"part-id":e.partId,"cut-id":e.cutId},null,8,["snapshot","part-id","cut-id"])],8,bz)):H("",!0)}}),Sz=Object.assign(ot(kz,[["__scopeId","data-v-d1f54d3e"]]),{__name:"BbInspectorCut"}),Iz=["aria-label"],wz=["data-severity"],Mz={"data-field":"timeSource",class:"bb-field bb-field-readonly bb-field--row"},$z={class:"bb-field-label"},Ez=nt({__name:"BbInspectorDialogue",props:{snapshot:{},partId:{},dialogueId:{},issues:{}}
243,emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.parts.find(h=>h.partId===n.partId)),s=C(()=>a.value?.timeline.dialogues.find(h=>h.id===n.dialogueId)),i=C(()=>n.issues?.filter(h=>h.targetId===n.dialogueId)??[]);function r(h){return h.messageKey.replace(".issue.",".hint.")}function l(h){o("command",{type:"dialogue.trim",dialogueId:n.dialogueId,...h})}function c(h){o("command",{type:"dialogue.setField",dialogueId:n.dialogueId,patch:h})}function d(h){c({actorId:h})}function u(h){c({mode:h})}const p=C(()=>(a.value?.actors??[]).map(h=>({value:h.id,label:h.name})));function f(h){return a0.map(b=>({value:b,label:h(`tool.blockingBoard.dialogueMode.${b}`)}))}return(h,b)=>g(s)?(v(),k("div",{key:0,class:"bb-inspector bb-inspector-dialogue","aria-label":h.$t("tool.blockingBoard.inspector.dialogue")},[(v(!0),k(ae,null,Me(g(i),I=>(v(),k("div",{key:I.code+I.path,class:"bb-inspector-issue","data-severity":I.severity},S(h.$t(I.messageKey))+" · "+S(h.$t(r(I))),9,wz))),128)),ce(ft,{"data-field":"actorId",type:"select","model-value":g(s).actorId,options:g(p),label:"tool.blockingBoard.inspector.actor",onCommit:b[0]||(b[0]=I=>d(I))},null,8,["model-value","options"]),ce(ft,{"data-field":"startSec",type:"number","model-value":g(s).startSec,min:0,max:g(a)?.durationSec,unit:"s",label:"tool.blockingBoard.inspector.startSec",onCommit:b[1]||(b[1]=I=>l({startSec:I}))},null,8,["model-value","max"]),ce(ft,{"data-field":"endSec",type:"number","model-value":g(s).endSec,min:0,max:g(a)?.durationSec,unit:"s",label:"tool.blockingBoard.inspector.endSec",onCommit:b[2]||(b[2]=I=>l({endSec:I}))},null,8,["model-value","max"]),ce(ft,{"data-field":"line",type:"text","model-value":g(s).line,label:"tool.blockingBoard.inspector.line",onCommit:b[3]||(b[3]=I=>c({line:I}))},null,8,["model-value"]),ce(ft,{"data-field":"lang",type:"text","model-value":g(s).lang,label:"tool.blockingBoard.inspector.lang",onCommit:b[4]||(b[4]=I=>c({lang:I}))},null,8,["model-value"]),ce(ft,{"data-field":"mode",type:"select","model-value":g(s).mode,options:f(h.$t),label:"tool.blockingBoard.inspector.dialogueMode",onCommit:b[5]||(b[5]=I=>u(I))},null,8,["model-value","options"]),m("span",Mz,[m("span",$z,S(h.$t("tool.blockingBoard.inspector.timeSource")),1),m("span",null,S(h.$t(`tool.blockingBoard.timeSource.${g(s).timeSource}`)),1)])],8,Iz)):H("",!0)}}),xz=Object.assign(ot(Ez,[["__scopeId","data-v-3844df52"]]),{__name:"BbInspectorDialogue"}),Pz={class:"bb-inspector-header"},Cz={class:"bb-inspector-header-text"},Bz={class:"bb-inspector-kind"},_z={key:1,class:"bb-inspector-sep","aria-hidden":"true"},Az=["title"],Tz=["aria-label","title"],Rz=nt({__name:"BbInspectorHeader",props:{kind:{},title:{},color:{}},emits:["collapse"],setup(e,{emit:t}){const n=t;return(o,a)=>{const s=vn;return v(),k("header",Pz,[m("div",Cz,[e.color?(v(),k("span",{key:0,class:"bb-inspector-dot",style:wt({background:e.color})},null,4)):H("",!0),m("span",Bz,S(o.$t(e.kind)),1),e.title?(v(),k("span",_z,"·")):H("",!0),e.title?(v(),k("span",{key:2,class:"bb-inspector-title",title:e.title},S(e.title),9,Az)):H("",!0)]),m("button",{type:"button",class:"bb-inspector-collapse","aria-label":o.$t("tool.blockingBoard.inspector.float.collapse"),title:o.$t("tool.blockingBoard.inspector.float.collapse"),onClick:a[0]||(a[0]=i=>n("collapse"))},[ce(s,{name:"i-lucide-panel-right-close",class:"size-[14px]"})],8,Tz)])}}}),E1=Object.assign(ot(Rz,[["__scopeId","data-v-01aa6e7f"]]),{__name:"BbInspectorHeader"}),Dz={key:0,class:"bb-inspector bb-inspector-opening"},Oz=["data-severity"],Nz={class:"bb-detail-sections","data-section":"detail"},Lz=nt({__name:"BbInspectorOpening",props:{snapshot:{},openingId:{},issues:{}}
243,emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.room.openings.find(w=>w.id===n.openingId)),s=C(()=>a.value?Math.max(0,vs(n.snapshot.room,a.value.wall)-a.value.widthM):void 0),i=C(()=>a.value?vs(n.snapshot.room,a.value.wall)-a.value.offsetM:void 0),r=C(()=>n.issues?.filter(w=>w.targetId===n.openingId)??[]);function l(w){return w.messageKey.replace(".issue.",".hint.")}function c(w){o("command",{type:"opening.setField",openingId:n.openingId,patch:w})}function d(w){c({kind:w})}function u(w){const M=w;o("command",{type:"opening.move",openingId:n.openingId,wall:M,offsetM:a.value.offsetM})}function p(w){return uu.map(M=>({value:M,label:w(`tool.blockingBoard.openingKind.${M.replace("-","")}`)}))}function f(w){return Pm.map(M=>({value:M,label:w(`tool.blockingBoard.inspector.${M}`)}))}function h(w){o("command",{type:"opening.move",openingId:n.openingId,offsetM:Number(w)})}function b(w){c({widthM:Number(w)})}function I(w){c({heightM:Number(w)})}function y(w){c({sillM:Number(w)})}return(w,M)=>g(a)?(v(),k("div",Dz,[(v(!0),k(ae,null,Me(g(r),x=>(v(),k("div",{key:x.code+x.path,class:"bb-inspector-issue","data-severity":x.severity},S(w.$t(x.messageKey))+" · "+S(w.$t(l(x))),9,Oz))),128)),ce(ft,{"data-field":"kind",type:"select","model-value":g(a).kind,options:p(w.$t),label:"tool.blockingBoard.inspector.kind",onCommit:M[0]||(M[0]=x=>d(x))},null,8,["model-value","options"]),ce(ft,{"data-field":"widthM",type:"number","model-value":g(a).widthM,min:g(RI),max:g(i),unit:"m",label:"tool.blockingBoard.inspector.openingWidth",onCommit:M[1]||(M[1]=x=>b(x))},null,8,["model-value","min","max"]),g(a).kind==="window"?(v(),et(ft,{key:0,"data-field":"sillM",type:"number","model-value":g(a).sillM??g(i0),min:0,unit:"m",label:"tool.blockingBoard.inspector.openingSill",onCommit:M[2]||(M[2]=x=>y(x))},null,8,["model-value"])):H("",!0),m("div",Nz,[ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"opening.position",section:"position",title:"tool.blockingBoard.inspector.sectionPlacement"},{default:rn(()=>[ce(ft,{"data-field":"wall",type:"select","model-value":g(a).wall,options:f(w.$t),label:"tool.blockingBoard.inspector.wall",onCommit:M[3]||(M[3]=x=>u(x))},null,8,["model-value","options"]),ce(ft,{"data-field":"offsetM",type:"number","model-value":g(a).offsetM,min:0,max:g(s),unit:"m",label:"tool.blockingBoard.inspector.offset",onCommit:M[4]||(M[4]=x=>h(x))},null,8,["model-value","max"]),ce(ft,{"data-field":"heightM",type:"number","model-value":g(a).heightM,min:g(DI),unit:"m",label:"tool.blockingBoard.inspector.openingHeight",onCommit:M[5]||(M[5]=x=>I(x))},null,8,["model-value","min"])]),_:1})])])):H("",!0)}}),Kz=Object.assign(ot(Lz,[["__scopeId","data-v-6dcdbd1a"]]),{__name:"BbInspectorOpening"}),Fz={key:0,class:"bb-inspector bb-inspector-part"},Hz={key:0,class:"bb-duration-mode-modal","data-field":"durationMode"},zz={class:"bb-duration-mode-summary"},jz={class:"bb-duration-mode-hint"},Uz={class:"bb-duration-mode-hint"},Gz=nt({__name:"BbInspectorPart",props:{snapshot:{},partId:{}},emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.parts.find(d=>d.partId===n.partId)),s=G(null);Je(()=>n.partId,()=>{s.value=null});function i(d){o("command",{type:"part.setTitle",partId:n.partId,title:String(d)})}function r(d){if(d===a.value?.durationSec){s.value=null;return}s.value=d}function l(d){s.value!==null&&(o("command",{type:"part.setDuration",partId:n.partId,durationSec:s.value,mode:d}),s.value=null)}function c(){s.value=null}return(d,u)=>g(a)?(v(),k("div",Fz,[ce(ft,{"data-field":"title",type:"text","model-value":g(a).title,label:"tool.blockingBoard.inspector.partTitle",onCommit:u[0]||(u[0]=p=>i(p))},null,8,["model-value"]),ce(ft,{"data-field":"durationSec",type:"number","model-value":g(s)??g(a).durationSec,min:3,max:600,unit:"s",label:"tool.blockingBoard.inspector.partDuration",onCommit:u[1]||(u[1]=p=>r(p))},null,8,["model-value"]),g(s)!==null?(v(),k("div",Hz,[m("p",zz,S(d.$t("tool.blockingBoard.inspector.durationConfirm",{from:g(a).durationSec,to:g(s)})),1),m("button",{type:"button",class:"bb-duration-mode-scale",onClick:u[2]||(u[2]=p=>l("scale"))},S(d.$t("tool.blockingBoard.inspector.durationModeScale")),1),m("span",jz,S(d.$t("tool.blockingBoard.inspector.durationModeScaleHint")),1),m("button",{type:"button",class:"bb-duration-mode-keep",onClick:u[3]||(u[3]=p=>l("keep"))},S(d.$t("tool.blockingBoard.inspector.durationModeKeep")),1),m("span",Uz,S(d.$t("tool.blockingBoard.inspector.durationModeKeepHint")),1),m("button",{type:"button",class:"bb-duration-mode-cancel",onClick:c},S(d.$t("tool.blockingBoard.cancel")),1)])):H("",!0)])):H("",!0)}}),Vz=Object.assign(ot(Gz,[["__scopeId","data-v-e9e63ea2"]]),{__name:"BbInspectorPart"}),Tc=.05,Sv=e=>Math.round(e*1e6)/1e6;function Vf(e,t,n){const o=e.parts.find(h=>h.partId===t);if(!o)return null;const a=[...e.room.props,...o.props],s=a.find(h=>h.id===n);if(!s||!s.supportPropId)return null;const i=a.find(h=>h.id===s.supportPropId),r={type:"prop.place",propId:n,center:{...s.center},supportPropId:null};if(!i)return r;const l=pr(i),c=pr(s),d=(c.maxX-c.minX)/2,u=(c.maxY-c.minY)/2,p=[{x:l.maxX+Tc+d,y:s.center.y},{x:l.minX-Tc-d,y:s.center.y},{x:s.center.x,y:l.maxY+Tc+u},{x:s.center.x,y:l.minY-Tc-u}].map(h=>({x:Sv(h.x),y:Sv(h.y)})).sort((h,b)=>Math.hypot(h.x-s.center.x,h.y-s.center.y)-Math.hypot(b.x-s.center.x,b.y-s.center.y)),f=vu(e.room,o,s);for(const h of p){const b=jm(s,h,f).center;if(Math.hypot(b.x-h.x,b.y-h.y)<1e-6)return{type:"prop.place",propId:n,center:h,supportPropId:null}}return r}const Wz={key:0,class:"bb-inspector bb-inspector-prop"},Xz=["data-severity"],Yz={class:"bb-detail-sections","data-section":"detail"},qz={class:"bb-inspector-pair"},Zz={key:2,class:"bb-inspector-note","data-note":"support"},Jz=64,Qz=nt({__name:"BbInspectorProp",props:{snapshot:{},partId:{},propId:{},issues:{}}
243,emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=typeof mo=="function"?mo().locale:null,s=C(()=>a?.value??"ko"),i=C(()=>n.snapshot.parts.find(me=>me.partId===n.partId)),r=C(()=>[...n.snapshot.room.props,...i.value?.props??[]]),l=C(()=>r.value.find(me=>me.id===n.propId)),c=C(()=>{const me=l.value?.refId;return me?n.snapshot.refs.props.find(oe=>oe.id===me)?.media??null:null}),d=C(()=>{const me=l.value?.refId;return me?n.snapshot.refs.props.find(oe=>oe.id===me)??null:null}),u=C(()=>Oa(n.snapshot,n.partId,{excluded:new Set})),p=C(()=>u.value.imageCount),f=C(()=>u.value.limits?.image??null),h=C(()=>{const me=l.value;return me?me.catalogKey??Tt(me.kind)?.key??"":""}),b=C(()=>{const me=l.value;if(!me)return[];const oe=new Map(r.value.map(re=>[re.id,re])),fe=aP(me,r.value,oe),X=me.supportPropId?oe.get(me.supportPropId):void 0;return X&&!fe.some(re=>re.id===X.id)?[X,...fe]:fe}),I=C(()=>!!l.value&&(Hm(l.value)||!!l.value.supportPropId)),y=C(()=>!!l.value&&!!Tt(l.value.catalogKey??l.value.kind)?.walkable),w=C(()=>n.snapshot.parts.findIndex(me=>me.partId===n.partId)),M=C(()=>{const me=n.issues?.filter(oe=>oe.targetId===n.propId)??[];return wI(me,w.value)});function x(me){return me.messageKey.replace(".issue.",".hint.")}const _=C(()=>ka(n.snapshot));function O(me,oe){const fe=II(me,_.value);return fe===null?"":"wallSide"in fe?oe("tool.blockingBoard.viewport.wallName",{side:oe(`tool.blockingBoard.inspector.${fe.wallSide}`)}):"text"in fe?fe.text:oe(fe.key,fe.params)}function A(me){return MI(M.value,oe=>fh(oe),oe=>O(oe,me),oe=>r.value.find(fe=>fe.id===oe)?.center??null)}const N=G(null);function K(me){const oe=String(me);if(oe.trim()===""){N.value="tool.blockingBoard.field.nameEmpty";return}if(oe.length>Jz){N.value="tool.blockingBoard.field.nameTooLong";return}N.value=null,o("command",{type:"entity.rename",id:n.propId,name:oe})}Je(()=>n.propId,()=>N.value=null);function F(me){me===""||me===h.value||o("command",{type:"prop.setCatalog",propId:n.propId,catalogKey:me})}function B(me){const oe=l.value;if(me===""){const X=Vf(n.snapshot,n.partId,oe.id);X&&o("command",X);return}const fe=r.value.find(X=>X.id===me);fe&&o("command",{type:"prop.place",propId:oe.id,center:{...fe.center},supportPropId:fe.id})}const j=C(()=>Ta.flatMap(me=>aa.filter(oe=>oe.category===me.key).map(oe=>({value:oe.key,label:`${Kn(me.labels,s.value)} · ${Kn(oe.labels,s.value)}`}))));function ee(me){return h.value===""?[{value:"",label:me("tool.blockingBoard.inspector.customProp"),disabled:!0},...j.value]:j.value}const D=C(()=>[{value:"",label:"â"},...b.value.map(me=>({value:me.id,label:me.name}))]);function Z(me){const oe=l.value;o("command",{type:"prop.move",propId:n.propId,center:{x:Number(me),y:oe.center.y}})}function L(me){const oe=l.value;o("command",{type:"prop.move",propId:n.propId,center:{x:oe.center.x,y:Number(me)}})}function V(me){const oe=l.value;o("command",{type:"prop.resize",propId:n.propId,widthM:me.widthM??oe.widthM,depthM:me.depthM??oe.depthM,heightM:me.heightM??oe.heightM})}function pe(me){o("command",{type:"prop.setElevation",propId:n.propId,elevationM:me===0?null:me})}function le(me){o("command",{type:"prop.rotate",propId:n.propId,headingDeg:Number(me)})}return(me,oe)=>g(l)?(v(),k("div",Wz,[(v(!0),k(ae,null,Me(A(me.$t),(fe,X)=>(v(),k("div",{key:g(M)[X].code+g(M)[X].path,class:"bb-inspector-issue","data-severity":g(M)[X].severity},[We(S(me.$t(g(M)[X].messageKey)),1),fe?(v(),k(ae,{key:0},[We(": "+S(fe),1)],64)):H("",!0),We(" · "+S(me.$t(x(g(M)[X]))),1)],8,Xz))),128)),ce(Bo,{"storage-id":"prop.main",section:"basic",title:"tool.blockingBoard.inspector.sectionBasic"},{default:rn(()=>[ce(ft,{"data-field":"name",type:"text","model-value":g(l).name,error:N.value,label:"tool.blockingBoard.inspector.name",onCommit:K},null,8,["model-value","error"]),ce(wh,{kind:"prop",id:e.propId,"part-id":e.partId,entry:g(d),onCommand:oe[0]||(oe[0]=fe=>o("command",fe))},null,8,["id","part-id","entry"]),ce(w1,{target:{kind:"prop",propId:e.propId},media:g(c),count:g(p),limit:g(f),onCommand:oe[1]||(oe[1]=fe=>o("command",fe))},null,8,["target","media","count","limit"]),ce(ft,{"data-field":"kind",type:"select","model-value":g(h),options:ee
243(me.$t),label:"tool.blockingBoard.inspector.kind",onCommit:oe[2]||(oe[2]=fe=>F(fe))},null,8,["model-value","options"]),ce(ft,{"data-field":"widthM",type:"number","model-value":g(l).widthM,min:g($n).propSizeM.min,max:g($n).propSizeM.max,unit:"m","default-value":g(pi)("prop","widthM",g(l)),label:"tool.blockingBoard.inspector.width",onCommit:oe[3]||(oe[3]=fe=>V({widthM:fe}))},null,8,["model-value","min","max","default-value"]),ce(ft,{"data-field":"depthM",type:"number","model-value":g(l).depthM,min:g($n).propSizeM.min,max:g($n).propSizeM.max,unit:"m","default-value":g(pi)("prop","depthM",g(l)),label:"tool.blockingBoard.inspector.depth",onCommit:oe[4]||(oe[4]=fe=>V({depthM:fe}))},null,8,["model-value","min","max","default-value"]),ce(ft,{"data-field":"headingDeg",type:"number","model-value":g(l).headingDeg,unit:"°",title:me.$t("tool.blockingBoard.inspector.headingHint"),label:"tool.blockingBoard.inspector.heading",onCommit:oe[5]||(oe[5]=fe=>le(fe))},null,8,["model-value","title"])]),_:1}),m("div",Yz,[ce(Bo,{"default-open":!1,"open-on-detail":"","storage-id":"prop.position",section:"position",title:"tool.blockingBoard.inspector.sectionPlacement"},{default:rn(()=>[m("div",qz,[ce(ft,{"data-field":"x",type:"number",unit:"m","model-value":g(l).center.x,min:-e.snapshot.room.widthM/2,max:e.snapshot.room.widthM/2,label:"tool.blockingBoard.inspector.x",onCommit:oe[6]||(oe[6]=fe=>Z(fe))},null,8,["model-value","min","max"]),ce(ft,{"data-field":"y",type:"number",unit:"m","model-value":g(l).center.y,min:-e.snapshot.room.depthM/2,max:e.snapshot.room.depthM/2,label:"tool.blockingBoard.inspector.y",onCommit:oe[7]||(oe[7]=fe=>L(fe))},null,8,["model-value","min","max"])]),ce(ft,{"data-field":"heightM",type:"number","model-value":g(l).heightM??null,placeholder:String(g(Ko)(g(l))),min:g($n).propSizeM.min,max:g($n).propSizeM.max,unit:"m","default-value":g(l).heightM===void 0?void 0:g(pi)("prop","heightM",g(l)),label:"tool.blockingBoard.inspector.propHeight",onCommit:oe[8]||(oe[8]=fe=>V({heightM:fe}))},null,8,["model-value","placeholder","min","max","default-value"]),g(y)?H("",!0):(v(),et(ft,{key:0,"data-field":"elevationM",type:"number","model-value":g(l).elevationM??0,min:g($n).propElevationM.min,max:g($n).propElevationM.max,unit:"m","default-value":0,label:"tool.blockingBoard.inspector.elevation",title:me.$t("tool.blockingBoard.inspector.elevationTip"),onCommit:oe[9]||(oe[9]=fe=>pe(fe))},null,8,["model-value","min","max","title"])),g(I)?(v(),et(ft,{key:1,"data-field":"supportPropId",type:"select","model-value":g(l).supportPropId??"",options:g(D),label:"tool.blockingBoard.inspector.support",onCommit:oe[10]||(oe[10]=fe=>B(fe))},null,8,["model-value","options"])):(v(),k("p",Zz,S(me.$t("tool.blockingBoard.inspector.supportNotStackable")),1))]),_:1})])])):H("",!0)}}),ej=Object.assign(ot(Qz,[["__scopeId","data-v-c6329bb5"]]),{__name:"BbInspectorProp"}),tj={key:0,class:"bb-inspector bb-inspector-reference"},nj={class:"bb-ref-name","data-field":"name"},oj={class:"bb-ref-rows"},aj={class:"bb-ref-row","data-field":"image"},sj=["src","alt"],ij={key:1,class:"bb-ref-no-image"},rj={class:"bb-ref-row","data-field":"tag"},lj={class:"bb-ref-pending"},cj={class:"bb-ref-row","data-field":"kind"},dj={class:"bb-ref-row","data-field":"usedBy"},uj={key:1,class:"bb-ref-unused"},pj=nt({__name:"BbInspectorReference",props:{snapshot:{},refId:{},partId:{}},emits:["command"],setup(e,{emit:t}){const n=e,o=t,a={characters:"tool.blockingBoard.inspector.refKindCharacter",backgrounds:"tool.blockingBoard.inspector.refKindBackground",props:"tool.blockingBoard.inspector.refKindProp"},s=C(()=>{for(const l of["characters","backgrounds","props"]){const c=n.snapshot.refs[l].find(d=>d.id===n.refId);if(c)return{entry:c,kindKey:a[l]}}return null}),i=C(()=>{const l=[...n.snapshot.parts].sort((u,p)=>+(p.partId===n.partId)-+(u.partId===n.partId));for(const u of l){const p=u.actors.find(h=>h.refId===n.refId);if(p)return{kind:"actor",id:p.id,partId:u.partId};const f=(u.props??[]).find(h=>h.refId===n.refId);if(f)return{kind:"prop",id:f.id,partId:u.partId}}const c=n.snapshot.room.props.find(u=>u.refId===n.refId),d=n.partId??l[0]?.partId;return c&&d?{kind:"prop",id:c.id,partId:d}:null}),r=C(()=>{const l=n.snapshot.parts.flatMap(c=>c.actors.filter(d=>d.refId===n.refId).map(d=>d.name));return[...new Set(l)]});return(l,c)=>s.value?(v(),k("div",tj,[m("p",nj,S(s.value.entry.name),1),m("dl",oj,[m("div",aj,[m("dt",null,S(l.$t("tool.blockingBoard.refCard.image")),1),m("dd",null,[s.value.entry.media?(v(),k("img",{key:0,class:"bb-ref-thumb",src:s.value.entry.media.url,alt:s.value.entry.name},null,8,sj)):(v(),k("span",ij,S(l.$t("tool.blockingBoard.refCard.noImage")),1))])]),m("div",rj,[m("dt",null,S(l.$t("tool.blockingBoard.inspector.refTag")),1),m("dd",lj,S(l.$t("tool.blockingBoard.refCard.pendingTag")),1)]),m("div",cj,[m("dt",null,S(l.$t("tool.blockingBoard.inspector.refKind")),1),m("dd",null,S(l.$t(s.value.kindKey)),1)]),m("div",dj,[m("dt",null,S(l.$t("tool.blockingBoard.inspector.refUsedBy")),1),m("dd",null,[r.value.length>0?(v(),k(ae,{key:0},[We(S(r.value.join(", ")),1)],64)):(v(),k("span",uj,S(l.$t("tool.blockingBoard.inspector.refUnused")),1))])])]),i.value?(v(),et(wh,{key:0,kind:i.value.kind,id:i.value.id,"part-id":i.value.partId,entry:s.value.entry,onCommand:c[0]||(c[0]=d=>o("command",d))},null,8,["kind","id","part-id","entry"])):H("",!0)])):H("",!0)}}),fj=Object.assign(ot(pj,[["__scopeId","data-v-aa3de771"]]),{__name:"BbInspectorReference"}),mj={class:"bb-inspector bb-inspector-room"},hj={class:"bb-inspector-walls"},bj=["data-field"],gj=["checked","onChange"],vj=nt({__name:"BbInspectorRoom",props:{snapshot:{}},emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.snapshot.room),s=typeof mo=="function"?mo().locale:null,i=C(()=>s?.value??"ko");function r(u){o("command",{type:"room.setKind",kind:u})}const l=C(()=>Ti.map(u=>({value:u.kind,label:Kn(u.labels,i.value)})));function c(u){o("command",{type:"room.setSize",widthM:u.widthM??a.value.widthM,depthM:u.depthM??a.value.depthM})}function d(u,p){const f=p.target,h=f.checked;o("command",{type:"room.setWall",wall:u,visible:h}),hn(()=>{f.checked=a.value.walls[u]})}return(u,p)=>(v(),k("div",mj,[ce(ft,{"data-field":"kind",type:"select","model-value":g(a).kind,options:g(l),label:"tool.blockingBoard.inspector.kind",onCommit:p[0]||(p[0]=f=>r(f))}
243,null,8,["model-value","options"]),ce(ft,{"data-field":"widthM",type:"number","model-value":g(a).widthM,min:g($n).roomSizeM.min,max:g($n).roomSizeM.max,unit:"m",label:"tool.blockingBoard.inspector.width",onCommit:p[1]||(p[1]=f=>c({widthM:f}))},null,8,["model-value","min","max"]),ce(ft,{"data-field":"depthM",type:"number","model-value":g(a).depthM,min:g($n).roomSizeM.min,max:g($n).roomSizeM.max,unit:"m",label:"tool.blockingBoard.inspector.depth",onCommit:p[2]||(p[2]=f=>c({depthM:f}))},null,8,["model-value","min","max"]),m("fieldset",hj,[m("legend",null,S(u.$t("tool.blockingBoard.inspector.walls")),1),(v(!0),k(ae,null,Me(g(Pm),f=>(v(),k("label",{key:f,"data-field":f,class:"bb-field-checkbox-row"},[m("input",{type:"checkbox",checked:g(a).walls[f],onChange:h=>d(f,h)},null,40,gj),We(" "+S(u.$t(`tool.blockingBoard.inspector.${f}`)),1)],8,bj))),128))])]))}}),yj=Object.assign(ot(vj,[["__scopeId","data-v-4c1585bc"]]),{__name:"BbInspectorRoom"}),kj={class:"bb-inspector-panel"},Sj={key:1,class:"bb-prop-multi-note"},Ij=nt({__name:"BbInspector",props:{snapshot:{},partId:{},selection:{},issues:{},timeSec:{},frameState:{},authoredSecOf:{type:Function},hideHeader:{type:Boolean},picking:{}},emits:["command","focus-waypoint","auto-detour","collapse","select","look-through","pick","intent","seek","notice"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.selection?.primary??null),{kind:s,kindKey:i,titleLabel:r}=$I(()=>({snapshot:n.snapshot,partId:n.partId,selection:n.selection})),l=C(()=>n.selection?.ids.length??0),c=C(()=>s.value!=="actor"||!a.value?null:n.snapshot.parts.find(h=>h.partId===n.partId)?.actors.find(h=>h.id===a.value)?.color??null);function d(f){o("command",f)}function u(f){o("focus-waypoint",f)}function p(f){o("auto-detour",f)}return(f,h)=>(v(),k("div",kj,[e.hideHeader?H("",!0):(v(),et(E1,{key:0,kind:g(i),color:c.value??void 0,title:g(r)?"text"in g(r)?g(r).text:g(r).params?f.$t(g(r).key,g(r).params):f.$t(g(r).key):void 0,onCollapse:h[0]||(h[0]=b=>o("collapse"))},null,8,["kind","color","title"])),l.value>1?(v(),k("p",Sj,S(f.$t("tool.blockingBoard.inspector.multiSelected",{n:l.value,name:g(r)?"text"in g(r)?g(r).text:f.$t(g(r).key,g(r).params):""})),1)):H("",!0),g(s)==="actor"?(v(),et(pH,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,"actor-id":a.value,issues:e.issues,"time-sec":e.timeSec,"frame-state":e.frameState,"authored-sec-of":e.authoredSecOf,picking:e.picking??null,onCommand:d,onFocusWaypoint:u,onAutoDetour:p,onPick:h[1]||(h[1]=b=>o("pick",b)),onIntent:h[2]||(h[2]=b=>o("intent",b)),onSeek:h[3]||(h[3]=b=>o("seek",b)),onNotice:h[4]||(h[4]=b=>o("notice",b))},null,8,["snapshot","part-id","actor-id","issues","time-sec","frame-state","authored-sec-of","picking"])):g(s)==="camera"?(v(),et(ZH,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,"camera-id":a.value,issues:e.issues,"time-sec":e.timeSec,onCommand:d,onSelect:h[5]||(h[5]=b=>o("select",b)),onLookThrough:h[6]||(h[6]=b=>o("look-through",b))},null,8,["snapshot","part-id","camera-id","issues","time-sec"])):g(s)==="prop"?(v(),et(ej,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,"prop-id":a.value,issues:e.issues,onCommand:d},null,8,["snapshot","part-id","prop-id","issues"])):g(s)==="opening"?(v(),et(Kz,{key:a.value??"room",snapshot:e.snapshot,"opening-id":a.value,issues:e.issues,onCommand:d},null,8,["snapshot","opening-id","issues"])):g(s)==="action"?(v(),et(U5,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,"action-id":a.value,issues:e.issues,onCommand:d},null,8,["snapshot","part-id","action-id","issues"])):g(s)==="dialogue"?(v(),et(xz,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,"dialogue-id":a.value,issues:e.issues,onCommand:d},null,8,["snapshot","part-id","dialogue-id","issues"])):g(s)==="coverage"?(v(),et(sz,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,"coverage-id":a.value,issues:e.issues,onCommand:d},null,8,["snapshot","part-id","coverage-id","issues"])):g(s)==="cut"?(v(),et(Sz,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,"cut-id":a.value,issues:e.issues,onCommand:d},null,8,["snapshot","part-id","cut-id","issues"])):g(s)==="part"?(v(),et(Vz,{key:a.value??"room",snapshot:e.snapshot,"part-id":e.partId,onCommand:d},null,8,["snapshot","part-id"])):g(s)==="reference"?(v(),et(fj,{key:a.value??"room",snapshot:e.snapshot,"ref-id":a.value,"part-id":e.partId,onCommand:d},null,8,["snapshot","ref-id","part-id"])):(v(),et(yj,{key:a.value??"room",snapshot:e.snapshot,onCommand:d},null,8,["snapshot"]))]))}}),wj=Object.assign(ot(Ij,[["__scopeId","data-v-1024f90a"]]),{__name:"BbInspector"}),Mj={class:"bb-inspector bb-inspector-background"},$j=["src"],Ej={key:1,class:"bb-sch-inspector-missing"},xj={key:2,class:"bb-bg-status bb-bg-status--warn"},Pj={"data-field":"opacity",class:"bb-field bb-field--row"},Cj={class:"bb-field-label"},Bj={class:"bb-bg-opacity-row"},_j=["value"],Aj={class:"bb-bg-opacity-value"},Tj={"data-field":"visible",class:"bb-bg-toggle-row"},Rj=["checked"],Dj={class:"bb-inspector-actions"}
243,Oj=["disabled"],Bp=.2,Iv=1,Nj=nt({__name:"BbInspectorBackground",props:{background:{},photoLoaded:{type:Boolean,default:!0},photoUrl:{default:null}},emits:["command","realign","replace","collapse"],setup(e,{emit:t}){const n=e,o=t,a=G(n.background.opacity),s=G(!1);Je(()=>n.background.opacity,b=>{s.value||(a.value=b)});const i=C(()=>`${(a.value-Bp)/(Iv-Bp)*100}%`),r=C(()=>`${Math.round(a.value*100)}%`);function l(b){s.value=!0,a.value=Number(b.target.value)}function c(){s.value=!1,o("command",{type:"background.setOpacity",opacity:a.value})}function d(b){o("command",{type:"background.setVisible",visible:b.target.checked})}function u(){o("command",{type:"background.remove"})}function p(){o("realign")}const f=G(null);function h(b){const I=b.target,y=I.files?.[0];y&&o("replace",y),I.value=""}return(b,I)=>{const y=vn;return v(),k("div",Mj,[ce(E1,{kind:"tool.blockingBoard.stage.backgroundPhoto",title:e.background.fileName||void 0,onCollapse:I[0]||(I[0]=w=>o("collapse"))},null,8,["title"]),e.photoUrl?(v(),k("img",{key:0,class:"bb-bg-preview",src:e.photoUrl,alt:""},null,8,$j)):H("",!0),e.photoLoaded?H("",!0):(v(),k("div",Ej,S(b.$t("tool.blockingBoard.align.photoMissing")),1)),e.background.homography?H("",!0):(v(),k("div",xj,[ce(y,{name:"i-lucide-triangle-alert",class:"size-[14px]"}),We(" "+S(b.$t("tool.blockingBoard.align.notAligned")),1)])),m("label",Pj,[m("span",Cj,S(b.$t("tool.blockingBoard.align.opacity")),1),m("span",Bj,[m("input",{class:"bb-bg-opacity",type:"range",min:Bp,max:Iv,step:"0.01",value:a.value,style:wt({"--bb-ui-range-fill":i.value}),onInput:l,onChange:c},null,44,_j),m("span",Aj,S(r.value),1)])]),m("label",Tj,[m("span",null,S(b.$t("tool.blockingBoard.align.visible")),1),m("input",{class:"bb-bg-visible bb-switch",type:"checkbox",role:"switch",checked:e.background.visible,onChange:d},null,40,Rj)]),m("div",Dj,[m("button",{type:"button",class:"bb-bg-realign bb-bg-btn--primary",disabled:!e.photoLoaded,onClick:p},S(b.$t("tool.blockingBoard.align.realign")),9,Oj),m("button",{type:"button",class:"bb-bg-replace",onClick:I[1]||(I[1]=w=>f.value?.click())},S(b.$t("tool.blockingBoard.imagePath.photoChange")),1),m("input",{ref_key:"fileInput",ref:f,type:"file",accept:"image/jpeg,image/png",class:"bb-bg-file",onChange:h},null,544)]),m("button",{type:"button",class:"bb-bg-remove bb-bg-btn--danger",onClick:u},[ce(y,{name:"i-lucide-trash-2",class:"size-[14px]"}),We(" "+S(b.$t("tool.blockingBoard.align.removePhoto")),1)])])}}}),Lj=Object.assign(ot(Nj,[["__scopeId","data-v-f69c4067"]]),{__name:"BbInspectorBackground"}),Kj=["aria-label"],Fj=["aria-label","title"],Hj=["aria-label","title","onClick"],zj=nt({__name:"BbInspectorRail",props:{items:{}},emits:["expand"],setup(e,{emit:t}){const n=t;return(o,a)=>{const s=vn;return v(),k("nav",{class:"bb-inspector-rail","aria-label":o.$t("tool.blockingBoard.inspector.rail.label")},[m("button",{type:"button",class:"bb-inspector-rail-btn","aria-label":o.$t("tool.blockingBoard.inspector.float.expand"),title:o.$t("tool.blockingBoard.inspector.float.expand"),onClick:a[0]||(a[0]=i=>n("expand",null))},[ce(s,{name:"i-lucide-panel-right-open",class:"size-[16px]"})],8,Fj),(v(!0),k(ae,null,Me(e.items,i=>(v(),k("button",{key:i.section,type:"button",class:"bb-inspector-rail-btn","aria-label":o.$t(i.labelKey),title:o.$t(i.labelKey),onClick:r=>n("expand",i.section)},[ce(s,{name:i.icon,class:"size-[16px]"},null,8,["name"])],8,Hj))),128))],8,Kj)}}}),jj=Object.assign(ot(zj,[["__scopeId","data-v-ca387507"]]),{__name:"BbInspectorRail"}),it=40;function fn(e){return{x:e.x*it,y:e.y*it}}function ad(e){return{x:e.x/it,y:e.y/it}}function $h(e){return{transform:`translate(${e.center.x*it} ${e.center.y*it}) rotate(${e.headingDeg})`,x:-e.depthM/2*it,y:-e.widthM/2*it,width:e.depthM*it,height:e.widthM*it}}function is(e,t=1){const n=(e.widthM+t*2)*it,o=(e.depthM+t*2)*it;return{x:-n/2,y:-o/2,w:n,h:o}}const Uj=.25,Gj=4,wv=1.1;function Mv(e,t,n){const o=e.getScreenCTM?.();if(!o)return null;const a=e.createSVGPoint();return a.x=t,a.y=n,a.matrixTransform(o.inverse())}function $v(e,t,n,o){const a=o/Gj,s=o/Uj,i=Math.min(s,Math.max(a,e.w/n)),r=i/e.w,l=e.h*r;return{x:t.x-(t.x-e.x)*r,y:t.y-(t.y-e.y)*r,w:i,h:l}}function Vj(e,t){const n=e.x+e.w/2,o=e.y+e.h/2;return{x:n-t.w/2,y:o-t.h/2,w:t.w,h:t.h}}
243function sd(e,t){return t.w<=0||t.h<=0?1:1/Math.min(t.w/e.w,t.h/e.h)}function Ev(e,t,n,o){return{...e,x:e.x-t*o,y:e.y-n*o}}const Wj=[-1,-.5,.5,1];function Xj(e,t){return Wj.filter(n=>e+n>=0&&e+n<=t)}function Yj(e,t){return Xj(e,t).sort((n,o)=>n-o)}function qj(e){return Math.abs(e)>=1?.18:.35}function zd(e,t,n){return t===1?e*16:t===2?e*n:e}const xv=1.5;function Pv(e){return Math.min(xv,Math.max(1/xv,e))}function Zj(e,t){const n=e.deltaMode??0,o=zd(e.deltaX,n,t),a=zd(e.deltaY,n,t);return o===0&&a===0?{kind:"none"}:e.ctrlKey?{kind:"zoom",factor:Pv(1.1**(-a/10))}:e.shiftKey&&o===0?{kind:"pan",dxPx:a,dyPx:0}:Math.abs(o)>Math.abs(a)?{kind:"pan",dxPx:o,dyPx:a}:{kind:"zoom",factor:Pv(1.1**(-a/100))}}const Jj=.05,Qj=.5,eU=5,tU=15,nU=.1,oU=.5,aU=10,sU=.05,iU=30;function jd(e,t){return Tn(Math.round(e/t)*t)}function rU(e,t,n){if(n.numeric!==null)return n.axis==="y"?{x:0,y:n.numeric}:{x:n.numeric,y:0};let o=t.x-e.x,a=t.y-e.y;if(n.snap){const s=n.shift?Qj:Jj;o=jd(o,s),a=jd(a,s)}return n.axis==="x"&&(a=0),n.axis==="y"&&(o=0),{x:o,y:a}}function lU(e,t,n,o){if(o.numeric!==null)return o.numeric;let a=tr(e,n)-tr(e,t);return a=Qt(a),a>180&&(a-=360),o.snap&&(a=jd(a,o.shift?tU:eU)),a||0}function cU(e,t,n,o){if(o.numeric!==null)return o.numeric;const a=Math.max(Math.hypot(t.x-e.x,t.y-e.y),o.minRefM),s=Math.hypot(n.x-e.x,n.y-e.y)/a;return o.snap?jd(s,o.shift?oU:nU):s}function Cv(e){return Tn(Math.min(iU,Math.max(sU,e)))}function dU(e,t,n){return{widthM:n==="x"?e.widthM:Cv(e.widthM*t),depthM:n==="y"?e.depthM:Cv(e.depthM*t)}}function uU(e,t){return e===t?null:t}function pU(e,t){return t==="Backspace"?e.slice(0,-1):t==="-"?e.startsWith("-")?e.slice(1):`-${e}`:t==="."?e.includes(".")?e:`${e}.`:/^[0-9]$/.test(t)?e+t:e}function fU(e){if(!/^-?(\d+\.?\d*|\.\d+)$/.test(e))return null;const t=Number(e);return Number.isFinite(t)?t:null}function x1(e,t){return t.ctrl?!e:e}function Eh(e,t){return e.parts.find(n=>n.partId===t)??e.parts[0]}function P1(e,t){return[...e.room.props,...Eh(e,t).props]}function id(e){const{snapshot:t,partId:n,ids:o,mode:a,displayed:s}=e,i=Eh(t,n),r=P1(t,n),l=new Map(r.map(h=>[h.id,h])),c=new Set(e.lockedIds??[]),d=new Set(o.filter(h=>!c.has(h))),u=[];let p=!1;for(const h of o){if(c.has(h))continue;const b=l.get(h);if(b){const w=e.carried?.get(h);if(a==="move"&&w){p=!0;continue}if(a==="move"&&Es(b,l).some(M=>d.has(M.id)))continue;u.push({id:h,kind:"prop",position:w??b.center,headingDeg:b.headingDeg,widthM:b.widthM,depthM:b.depthM});continue}if(a==="scale")continue;const I=i.actors.find(w=>w.id===h);if(I){const w=s.get(h);u.push({id:h,kind:"actor",position:w?.position??I.start.position,headingDeg:w?.headingDeg??I.start.headingDeg});continue}const y=i.cameras.find(w=>w.id===h);if(y){if(a==="move"&&y.keys.length>0||a==="rotate"&&!yI(y))continue;const w=s.get(h);u.push({id:h,kind:"camera",position:w?.position??y.position,headingDeg:w?.headingDeg??y.headingDeg})}}const f=u.length>0?null:a==="scale"?"tool.blockingBoard.xfm.nothingToScale":p?"tool.blockingBoard.stage.carriedNoMove":"tool.blockingBoard.xfm.nothingToMove";return{targets:u,notice:f,carriedSkipped:p}}function mU(e){return e.length===0?{x:0,y:0}:{x:e.reduce((t,n)=>t+n.position.x,0)/e.length,y:e.reduce((t,n)=>t+n.position.y,0)/e.length}}function hU(e){return{x:Tn(e.x),y:Tn(e.y)}}function Wf(e){const{snapshot:t,partId:n,targets:o,mode:a,axis:s,value:i,timeSec:r}=e,l=Eh(t,n),c=t.room,d=P1(t,n),u=new Map(d.map(b=>[b.id,b])),p=new Set(o.map(b=>b.id)),f=[],h=[];for(const b of o){if(a==="move"){const y=i,w=hU({x:b.position.x+y.x,y:b.position.y+y.y});if(b.kind==="actor"){const M=l.actors.find(N=>N.id===b.id);if(!M)continue;const x=Ra(c,l,M).filter(N=>!p.has(N.id)),_=zm(b.position,w,Vt(M),x).position,O=Math.hypot(b.position.x-M.start.position.x,b.position.y-M.start.position.y)<1e-6,A={id:b.id,position:_};O||(A.routeDelta={x:Tn(_.x-b.position.x),y:Tn(_.y-b.position.y)}),f.push(A),h.push(hh(M,b.position,_))}else if(b.kind==="prop"){const M=u.get(b.id);if(!M)continue;const x=d.filter(K=>!p.has(K.id)),_=Id({...M,center:w},x,u),O=PI(vu(c,l,M).filter(K=>!p.has(K.id)),_,u),A=jm(M,w,O).center,N=Id({...M,center:A},x,u);f.push({id:b.id,position:A}),h.push({type:"prop.place",propId:b.id,center:A,supportPropId:N?.id??null})}else f.push({id:b.id,position:w}),h.push({type:"camera.move",cameraId:b.id,position:w});continue}if(a==="rotate"){const y=Qt(b.headingDeg+i);if(f.push({id:b.id,heading:y}),b.kind==="prop")h.push({type:"prop.rotate",propId:b.id,headingDeg:y});else if(b.kind==="camera")h.push({type:"camera.setField",cameraId:b.id,patch:{headingDeg:y}});else{const w=l.actors.find(x=>x.id===b.id);if(!w)continue;const M=e.authoredSecOf?.(b.id)??r;h.push(xh(w,b.position,y,r,M))}continue}if(b.kind!=="prop"||b.widthM===void 0||b.depthM===void 0)continue;const I=dU({widthM:b.widthM,depthM:b.depthM},i,s);f.push({id:b.id,size:I}),h.push({type:"prop.resize",propId:b.id,widthM:I.widthM,depthM:I.depthM})}return{previews:f,commands:h}}const bU={move:"tool.blockingBoard.history.xfmMove",rotate:"tool.blockingBoard.history.xfmRotate",scale:"tool.blockingBoard.history.xfmScale",nudge:"tool.blockingBoard.history.nudge"};function Xf(e,t){return{key:bU[e],params:{n:t}}}function gU(e){return e.path.waypoints.length===0&&e.positionKeys.length<2&&e.facingKeys.length===0}function xh(e,t,n,o,a){const s=e.start.position;return Math.hypot(t.x-s.x,t.y-s.y)<1e-6&&o===0||gU(e)?{type:"actor.setHeading",actorId:e.id,headingDeg:n}:{type:"actor.addFacingKey",actorId:e.id,atSec:a,headingDeg:n}}const vU={move:{x:0,y:0},rotate:0,scale:1};function yU(e,t){if(e==="move")return Math.hypot(t.x,t.y)<1e-6;if(e==="rotate"){const n=Qt(t);return n<1e-6||360-n<1e-6}return Math.abs(t-1)<1e-6}function kU(e){const t=Sn(null),n=C(()=>{const c=t.value;if(!c)return null;const d={snap:x1(e.snapOption(),{ctrl:c.ctrl}),shift:c.shift,numeric:fU(c.buffer)};
243return!c.anchored&&d.numeric===null?vU[c.mode]:c.mode==="move"?rU(c.startCursor,c.cursor,{...d,axis:c.axis}):c.mode==="rotate"?lU(c.pivot,c.startCursor,c.cursor,d):cU(c.pivot,c.startCursor,c.cursor,{...d,minRefM:aU*e.metersPerPx()})}),o=C(()=>{const c=t.value,d=n.value;return!c||d===null?{previews:[],commands:[]}:Wf({snapshot:e.snapshot(),partId:e.partId(),targets:c.targets,mode:c.mode,axis:c.axis,value:d,timeSec:e.timeSec(),authoredSecOf:e.authoredSecOf})}),a=C(()=>t.value!==null),s=C(()=>{const c=t.value,d=n.value;return!c||d===null?null:{mode:c.mode,axis:c.axis,buffer:c.buffer,value:d}}),i=C(()=>o.value.previews),r=C(()=>t.value?.pivot??null);function l(c){t.value&&(t.value={...t.value,...c})}return{active:a,status:s,previews:i,pivot:r,start(c,d){const{targets:u,notice:p,carriedSkipped:f}=id({snapshot:e.snapshot(),partId:e.partId(),ids:e.selectionIds(),mode:c,displayed:e.displayed(),lockedIds:e.lockedIds?.(),carried:e.carried?.()});if(p)return{ok:!1,notice:p};const h=mU(u),b=d??h;return t.value={mode:c,targets:u,pivot:h,startCursor:b,cursor:b,axis:null,buffer:"",shift:!1,ctrl:!1,anchored:d!==null},f?{ok:!0,notice:"tool.blockingBoard.stage.carriedNoMove"}:{ok:!0}},pointer(c,d){if(t.value&&!t.value.anchored){l({startCursor:c,cursor:c,anchored:!0,shift:d.shift,ctrl:d.ctrl});return}l({cursor:c,shift:d.shift,ctrl:d.ctrl})},axis(c){const d=t.value;!d||d.mode==="rotate"||l({axis:uU(d.axis,c)})},typeChar(c){const d=t.value;d&&l({buffer:pU(d.buffer,c)})},confirm(){const c=t.value;if(!c)return null;const d=n.value,u=d!==null&&yU(c.mode,d)?[]:o.value.commands;return t.value=null,{commands:u,label:Xf(c.mode,c.targets.length)}},cancel(){t.value=null}}}const Rc=.3;function SU(e,t,n,o){const a=e.parts.find(c=>c.partId===t)??e.parts[0],s=e.room,i=[...s.props,...a?.props??[]];let r=null;const l=c=>{r=r?{minX:Math.min(r.minX,c.minX),minY:Math.min(r.minY,c.minY),maxX:Math.max(r.maxX,c.maxX),maxY:Math.max(r.maxY,c.maxY)}:c};for(const c of n){const d=a?.actors.find(h=>h.id===c);if(d){const h=o.get(c)??d.start.position,b=Vt(d);l({minX:h.x-b,minY:h.y-b,maxX:h.x+b,maxY:h.y+b});continue}const u=i.find(h=>h.id===c);if(u){l(pr(u));continue}const p=a?.cameras.find(h=>h.id===c);if(p){const h=p.position;l({minX:h.x-Rc,minY:h.y-Rc,maxX:h.x+Rc,maxY:h.y+Rc});continue}const f=s.openings.find(h=>h.id===c);if(f){const h=s.widthM/2,b=s.depthM/2;if(f.wall==="north"||f.wall==="south"){const I=f.wall==="north"?-b:b,y=-h+f.offsetM;l({minX:y,minY:I,maxX:y+f.widthM,maxY:I})}else{const I=f.wall==="west"?-h:h,y=-b+f.offsetM;l({minX:I,minY:y,maxX:I,maxY:y+f.widthM})}}}return r}function IU(e,t,n,o=1){const a=t.w/t.h,s=(e.maxX-e.minX+o*2)*it,i=(e.maxY-e.minY+o*2)*it,r=Math.min(n.w*4,Math.max(n.w/4,s,i*a)),l=r/a,c=(e.minX+e.maxX)/2*it,d=(e.minY+e.maxY)/2*it;return{x:c-r/2,y:d-l/2,w:r,h:l}}function Yf(e,t){const n=e.path.waypoints,o=[e.start.position,...n],a=yu(e.start.position,n);if(n.length===0)return 0;if(a===n.length)return n.length;let s=a,i=1/0;for(let r=a;r<o.length-1;r+=1){const l=o[r],c=o[r+1],d=c.x-l.x,u=c.y-l.y,p=d*d+u*u,f=p>0?Math.min(1,Math.max(0,((t.x-l.x)*d+(t.y-l.y)*u)/p)):0,h=Math.hypot(t.x-(l.x+d*f),t.y-(l.y+u*f));h<i&&(i=h,s=r)}return s}const wU=1e-6;function MU(e,t,n,o){const a=[e.start.position,...e.path.waypoints,...e.positionKeys],s=pu/2+o+wU,i=(r,l,c)=>{const d=Math.min(-l+s-Math.min(...r),0),u=Math.max(l-s-Math.max(...r),0);return Math.min(u,Math.max(d,c))};return{x:i(a.map(r=>r.x),n.widthM/2,t.x),y:i(a.map(r=>r.y),n.depthM/2,t.y)}}function _p(e,t,n){if(e.type!=="actor.translate"||lu.includes(t.room.kind))return e;const o=t.parts.find(s=>s.partId===n)?.actors.find(s=>s.id===e.actorId);if(!o)return e;const a=MU(o,e.delta,t.room,Vt(o));return{...e,delta:{x:Math.round(a.x*1e6)/1e6,y:Math.round(a.y*1e6)/1e6}}}function Bv(e,t){const n=(e%360+360)%360;return n>=210&&n<=330?{place:"below",dy:34}:t!==void 0&&t<0?{place:"below",dy:34}:{place:"above",dy:-30}}function $U(e,t,n){return e?"ignore":t.button===1?"middle-pan":t.button===2||n&&t.button===0&&t.ctrlKey?"context":t.button===0?"start":"ignore"}function el(e,t){return e!==null&&e.pointerId===t}function EU(e){return e.pointerType?e.pointerType==="mouse"&&e.buttons===0:!1}function _v(e=typeof navigator<"u"?navigator:void 0){return e?/Mac/i.test(e.platform??"")||/Macintosh/i.test(e.userAgent??""):!1}
243const xU=4352,PU=.6,CU=16;function gr(e,t){let n=0;for(const o of e)n+=(o.codePointAt(0)??0)>=xU?1:PU;return n*t}const Av=(e,t)=>Math.min(e.x1,t.x1)-Math.max(e.x0,t.x0)>0&&Math.min(e.y1,t.y1)-Math.max(e.y0,t.y0)>0;function BU(e,t,n,o="above"){const a=[],s={};for(const i of e){const r=gr(i.text,t)/2,l={x0:i.x-r,x1:i.x+r,y0:i.y-i.radius-n-t,y1:i.y-i.radius-n},c={x0:i.x-r,x1:i.x+r,y0:i.y+i.radius+n,y1:i.y+i.radius+n+t},d=o==="above"?"below":"above",u=f=>f==="above"?l:c,p=a.some(f=>Av(u(o),f))?a.some(f=>Av(u(d),f))?o:d:o;s[i.id]=p,a.push(p==="above"?l:c)}return s}const C1=11;function _U(e){return gr(e,C1)+8}const qf=11,AU=16,TU=4;function B1(e,t,n){const o=it/n,a=e.headingDeg*Math.PI/180,s=Math.abs(Math.sin(a))*(e.depthM/2)+Math.abs(Math.cos(a))*(e.widthM/2),i=e.center.x*o,r=e.center.y*o,l=gr(t,qf)+10;return{x:i-l/2,y:r+s*o+TU,w:l,h:AU,anchorX:i,anchorY:r}}function _1(e){const t=e.elevationM??0;return t>0?`${e.name} â${t.toFixed(1)}m`:e.name}function A1(e,t){return Math.min(e.widthM,e.depthM)*t>=CU}const RU=3;function DU(e){const t=new Map;for(const n of e)t.set(n.name,(t.get(n.name)??0)+1);return new Set([...t].filter(([,n])=>n>=RU).map(([n])=>n))}const OU={actor:3,camera:2,prop:1};function tl(e,t=0){return OU[e]*100+t}function NU(e,t,n,o){const a=e.y+t,s=n.y+o,i=Math.min(e.x+e.w,n.x+n.w)-Math.max(e.x,n.x),r=Math.min(a+e.h,s+n.h)-Math.max(a,s);return i>0&&r>0}function LU(e,t){return!!e.fixed!=!!t.fixed?e.fixed?-1:1:e.priority!==t.priority?t.priority-e.priority:e.id<t.id?-1:e.id>t.id?1:0}function KU(e,t={maxShift:3,gap:2}){const n=[...e].sort(LU),o=[];for(const a of n){if(a.fixed){o.push({...a,dy:0,state:"visible"});continue}const s=a.h+t.gap;let i=null;for(let r=0;r<=t.maxShift;r+=1){const l=r*s;if(!o.some(d=>d.state==="visible"&&NU(a,l,d,d.dy))){i=l;break}}o.push(i===null?{...a,dy:0,state:"collapsed"}:{...a,dy:i,state:"visible"})}return o}function FU(e,t,n){const o=e.filter(s=>s.state==="visible"&&n(s)),a=new Map;for(const s of e){if(s.state!=="collapsed"||!t(s)||o.length===0)continue;let i=o[0].id,r=1/0;for(const c of o){const d=s.anchorX-c.anchorX,u=s.anchorY-c.anchorY,p=d*d+u*u;p<r&&(r=p,i=c.id)}const l=a.get(i)??[];l.push(s.id),a.set(i,l)}return a}const HU=14,Tv={base:12,height:8},zU=20,jU=.05;function dl(e,t){return Math.max(e*it,HU*t)}function Zf(e){const t=[...e.trim()][0];return t?t.toUpperCase():""}function UU(e,t,n){const o=In(t),a=ho(t),s=Tv.base*n/2,i=e+Tv.height*n;return[{x:o.x*i,y:o.y*i},{x:o.x*e+a.x*s,y:o.y*e+a.y*s},{x:o.x*e-a.x*s,y:o.y*e-a.y*s}]}function GU(e,t){return Math.abs(Io(e,t))>zU}function VU(e,t){return{time:`${e.toFixed(1)}s`,pauseSec:t>=jU?t:null}}function T1(e,t){return Math.hypot(e.x-t.x,e.y-t.y)<.3}function R1(e,t,n=!0){return e&&t>1e-6&&n}function WU(e,t,n,o=()=>!1){let s=null;e.forEach((r,l)=>{o(l)||r<=n+1e-6||(!s||r<s.at-1e-6)&&(s={kind:"waypoint",index:l,at:r})}),t.forEach((r,l)=>{r.travel||r.atSec<=n+1e-6||(!s||r.atSec<s.at-1e-6)&&(s={kind:"key",index:l,at:r.atSec})});const i=s;return i?{kind:i.kind,index:i.index}:null}function Jf(e,t,n){const o=e.path.waypoints;if(t<0||t>=o.length)return 0;const a=_i(e,n),i=a.length===o.length?t:t+1;return a[i]?.atSec??0}const XU={key:0,class:"bb-bg-layer",style:{"pointer-events":"none"}},YU=["src"],qU={key:0,class:"bb-bg-badge"},ZU=["viewBox"],JU=["data-index","cx","cy"],QU={class:"bb-sch-missing","data-sch":"photo-missing"},eG={key:0,class:"bb-sch-missing-file"},tG=.3,nG=nt({__name:"BbBoardBackground",props:{background:{},viewBox:{},containerSize:{},photoUrl:{}},setup(e){const t=e;function n(r,l){const c=Math.min(l.w/r.w,l.h/r.h),d=(l.w-r.w*c)/2-r.x*c,u=(l.h-r.h*c)/2-r.y*c;return`matrix(${c},0,0,${c},${d},${u})`}function o(r,l){const c=r.widthPx/r.heightPx,d=l.w/l.h,u=c>d?l.w:l.h*c,p=c>d?l.w/c:l.h,f=u/r.widthPx,h=l.x+(l.w-u)/2,b=l.y+(l.h-p)/2;return`matrix(${f},0,0,${f},${h},${b})`}const a=C(()=>`${t.viewBox.x} ${t.viewBox.y} ${t.viewBox.w} ${t.viewBox.h}`),s=C(()=>(t.background?.anchors??[]).map(r=>fn(r.board))),i=C(()=>{const r=t.background;if(!r)return null;const l=n(t.viewBox,t.containerSize),c=r.homography?a5(r.homography,it):o(r,t.viewBox);return{position:"absolute",left:"0",top:"0",width:`${r.widthPx}px`,height:`${r.heightPx}px`,transformOrigin:"0 0",transform:`${l} ${c}`,opacity:r.homography?r.opacity:tG}});return(r,l)=>e.background?.visible?(v(),k("div",XU,[e.photoUrl?(v(),k(ae,{key:0},[m("img",{class:"bb-bg-img",src:e.photoUrl,style:wt(g(i)),alt:""},null,12,YU),e.background.homography?H("",!0):(v(),k("div",qU,S(r.$t("tool.blockingBoard.align.notAligned")),1))],64)):(v(),k(ae,{key:1},[(v(),k("svg",{class:"bb-sch-anchors",viewBox:g(a),preserveAspectRatio:"xMidYMid meet",width:"100%",height:"100%"},[(v(!0),k(ae,null,Me(g(s),(c,d)=>(v(),k("circle",{key:d,class:"bb-sch-anchor","data-index":d,cx:c.x,cy:c.y,r:"6"},null,8,JU))),128))],8,ZU)),m("div",QU,[We(S(r.$t("tool.blockingBoard.align.photoMissing"))+" ",1),e.background.fileName?(v(),k("div",eG,S(r.$t("tool.blockingBoard.align.photoMissingFile",{name:e.background.fileName})),1)):H("",!0)])],64))])):H("",!0)}}),oG=Object.assign(ot(nG,[["__scopeId","data-v-542a27af"]]),{__name:"BbBoardBackgroun
243d"}),aG={class:"bb-room"},sG=["x","y","width","height"],iG=["data-id","transform","x","y","width","height"],rG=["data-id","transform"],lG=["x2","stroke-width"],cG=["y1","x2","y2"],dG=["y1","x2","y2"],uG=["x2"],pG=["x2"],fG=["x1","y1","x2","y2"],mG=["x1","y1","x2","y2"],hG=["x2"],bG=["d"],gG=["d"],vG=["transform","x2"],yG=["transform","x2"],kG=["x2"],SG=["d"],IG=["transform","x2"],wG=nt({__name:"BbBoardRoom",props:{room:{},doorStates:{},floorOpaque:{type:Boolean,default:!0},labelScale:{default:1},openingPreview:{default:null},hiddenOpeningIds:{default:()=>[]}},setup(e){const t=e,n=C(()=>qs(t.room).map(s=>({solid:s,svg:$h(s)}))),o=C(()=>t.room.openings.filter(s=>!t.hiddenOpeningIds?.includes(s.id)).map(s=>{const i=t.openingPreview,r=i&&i.id===s.id?{...s,offsetM:i.offsetM}:s,l=Xl(t.room,r),c=ho(l.headingDeg),d={x:l.center.x+c.x*l.widthM/2,y:l.center.y+c.y*l.widthM/2},u=t.doorStates?.[s.id],p=u?.open?u.openAngleDeg:0,f=l.widthM*it;return{opening:s,isWindow:s.kind==="window",isWideWindow:s.kind==="window"&&Am(s).bottomM<.3,transform:`translate(${d.x*it} ${d.y*it}) rotate(${l.headingDeg-90})`,leafTransform:`rotate(${p})`,rightLeafTransform:`translate(${f} 0) rotate(${-p})`,slideShiftPx:u?.open?f*.45:0,lengthPx:f}})),a=C(()=>({x:-t.room.widthM/2*it,y:-t.room.depthM/2*it,width:t.room.widthM*it,height:t.room.depthM*it}));return(s,i)=>(v(),k("g",aG,[m("rect",{class:qe(["bb-floor",{"bb-floor--transparent":!e.floorOpaque}]),x:g(a).x,y:g(a).y,width:g(a).width,height:g(a).height},null,10,sG),(v(!0),k(ae,null,Me(g(n),r=>(v(),k("rect",{key:r.solid.id,class:"bb-wall","data-id":r.solid.id,transform:r.svg.transform,x:r.svg.x,y:r.svg.y,width:r.svg.width,height:r.svg.height},null,8,iG))),128)),(v(!0),k(ae,null,Me(g(o),r=>(v(),k("g",{key:r.opening.id,class:"bb-opening","data-id":r.opening.id,transform:r.transform},[m("line",{class:"bb-opening-hit",x1:"0",y1:"0",x2:r.lengthPx,y2:"0","stroke-width":12*e.labelScale},null,8,lG),r.isWindow?(v(),k(ae,{key:0},[r.isWideWindow?(v(),k(ae,{key:0},[m("line",{class:"bb-window-line",x1:"0",y1:-2*e.labelScale,x2:r.lengthPx,y2:-2*e.labelScale},null,8,cG),m("line",{class:"bb-window-line",x1:"0",y1:2*e.labelScale,x2:r.lengthPx,y2:2*e.labelScale},null,8,dG)],64)):(v(),k("line",{key:1,class:"bb-window-line",x1:"0",y1:"0",x2:r.lengthPx,y2:"0"},null,8,uG))],64)):r.opening.kind==="sliding-door"?(v(),k(ae,{key:1},[m("line",{class:"bb-opening-frame",x1:"0",y1:"0",x2:r.lengthPx,y2:"0"},null,8,pG),m("line",{class:"bb-slide-panel",x1:r.slideShiftPx,y1:-3*e.labelScale,x2:r.slideShiftPx+r.lengthPx*.55,y2:-3*e.labelScale},null,8,fG),m("line",{class:"bb-slide-panel",x1:r.lengthPx*.45,y1:3*e.labelScale,x2:r.lengthPx,y2:3*e.labelScale},null,8,mG)],64)):r.opening.kind==="double-door"?(v(),k(ae,{key:2},[m("line",{class:"bb-opening-frame",x1:"0",y1:"0",x2:r.lengthPx,y2:"0"},null,8,hG),m("path",{class:"bb-door-arc",d:`M ${r.lengthPx/2} 0 A ${r.lengthPx/2} ${r.lengthPx/2} 0 0 1 0 ${r.lengthPx/2}`},null,8,bG),m("path",{class:"bb-door-arc",d:`M ${r.lengthPx/2} 0 A ${r.lengthPx/2} ${r.lengthPx/2} 0 0 0 ${r.lengthPx} ${r.lengthPx/2}`},null,8,gG),m("line",{class:"bb-door-leaf",transform:r.leafTransform,x1:"0",y1:"0",x2:r.lengthPx/2,y2:"0"},null,8,vG),m("line",{class:"bb-door-leaf",transform:r.rightLeafTransform,x1:"0",y1:"0",x2:-r.lengthPx/2,y2:"0"},null,8,yG)],64)):(v(),k(ae,{key:3},[m("line",{class:"bb-opening-frame",x1:"0",y1:"0",x2:r.lengthPx,y2:"0"},null,8,kG),m("path",{class:"bb-door-arc",d:`M ${r.lengthPx} 0 A ${r.lengthPx} ${r.lengthPx} 0 0 1 0 ${r.lengthPx}`},null,8,SG),m("line",{class:qe(["bb-door-leaf",{"bb-door-leaf--glass":r.opening.kind==="glass-door"}]),transform:r.leafTransform,x1:"0",y1:"0",x2:r.lengthPx,y2:"0",style:wt(r.opening.kind==="glass-door"?{strokeWidth:2*e.labelScale}:void 0)},null,14,IG)],64))],8,rG))),128))]))}}),MG=Object.assign(ot(wG,[["__scopeId","data-v-880188d2"]]),{__name:"BbBoardRoom"});function Dc(e){return`M ${e} 0 A ${e} ${e} 0 1 0 ${-e} 0 A ${e} ${e} 0 1 0 ${e} 0`}function Rv(e){return`M ${-e} 0 L ${e} 0 M 0 ${-e} L 0 ${e}`}function po(e,t,n,o){return`M ${e} ${t} L ${n} ${t} L ${n} ${o} L ${e} ${o} Z`}function Dv(e,t){const n=e*.7,o=Math.min(e,t)*.35;return`M ${-n} 0 L ${n} 0 M ${n-o} ${-o} L ${n} 0 L ${n-o} ${o}`}function Ph(e,t,n){const o=n/2,a=t/2,s=Math.min(t,n);switch(e){case"box":return"";case"chair":case"stool":case"wheelchair":{if(e==="stool")return Dc(.35*s);if(e==="wheelchair"){const r=.45*t,l=-o*.8;return`M ${-o*.6} ${-r} L ${o*.6} ${-r} M ${-o*.6} ${r} L ${o*.6} ${r} M ${l} ${-a*.5} L ${l} ${a*.5}`}const i=-o+.2*n;return`M ${i} ${-a*.8} L ${i} ${a*.8} `+po(-o*.8,-a*.8,o*.8,a*.8)}case"table":return po(-o*.85,-a*.85,o*.85,a*.85);case"counter":{const i=o*.85;return`M ${i} ${-a*.85} L ${i} ${a*.85}`}case"sofa":{const i=-o+.25*n,r=o*.6;return`M ${r} ${-a} L ${i} ${-a} L ${i} ${a} L ${r} ${a}`}case"bed":case"hospital-bed":{const i=-o+.15*n,r=-o+.3*n;let l=po(-o,-a*.9,i,-a*.1)+" "+po(-o,a*.1,i,a*.9)+` M ${r} ${-a} L ${r} ${a}`;return e==="hospital-bed"&&(l+=` M ${-o*.9} ${-a*.95} L ${o*.9} ${-a*.95}`,l+=` M ${-o*.9} ${a*.95} L ${o*.9} ${a*.95}`),l}case"cabinet":return`M 0 0 L ${o} 0`;case"open-shelf":{let i="";for(const r of[-o*.5,0,o*.5])i+=` M ${r} ${-a*.85} L ${r} ${a*.85}`;return i.trim()}case"piano":{const i=o-.2*n;return`M ${i} ${-a} L ${i} ${a}`}case"toilet":{const i=-o+.3*n,r=.35*n,l=i+r,c=a*.75;return po(-o,-a*.8,i,a*.8)+` M ${l-r} 0 A ${r} ${c} 0 1 0 ${l+r} 0 A ${r} ${c} 0 1 0 ${l-r} 0`}case"bathtub":return po(-o*.8,-a*.8,o*.8,a*.8)+" "+Rv(Math.min(.03*n,.03*t));case"booth":return`M ${-o} ${-a} L ${o} ${a} M ${-o*.5} ${-a} L ${o} ${a*.5}`;
243case"plant":case"tree":return Dc(.4*s)+" "+Dc(.4*.6*s);case"vehicle":{const i=o-.3*n,r=-o+.3*n;return`M ${i} ${-a*.8} L ${i} ${a*.8} M ${r} ${-a*.8} L ${r} ${a*.8}`}case"motorbike":case"bicycle":{const i=.4*n;return`M ${-i} ${-a*.3} L ${-i} ${a*.3} M ${i} ${-a*.3} L ${i} ${a*.3} M ${-i} 0 L ${i} 0`}case"stairs":{let r="";for(let l=-o+.25/2;l<o;l+=.25)r+=` M ${l} ${-a*.85} L ${l} ${a*.85}`;return(r.trim()||`M 0 ${-a*.85} L 0 ${a*.85}`)+" "+Dv(o,a)}case"platform":return po(-o*.85,-a*.85,o*.85,a*.85);case"ramp":return`M ${-o} ${-a} L ${o} ${-a} M ${-o} ${a} L ${o} ${a} `+Dv(o,a);case"archway":{const i=a*.25;return po(-o,-a,o,-a+i)+" "+po(-o,a-i,o,a)}case"door-leaf":{const i=Math.min(t,n);return`M ${-o+i} ${-a} A ${i} ${i} 0 0 1 ${-o} ${-a+i}`}case"cone":case"bin":case"cup":case"umbrella":case"pole":return Dc(.35*s)+" "+Rv(.05*s);case"pillar":return`M ${-o} ${-a} L ${o} ${a} M ${-o} ${a} L ${o} ${-a}`;case"rug":return po(-o*.9,-a*.9,o*.9,a*.9);case"curtain":{let r=`M ${-o*.3} ${-a}`;for(let l=1;l<=6;l++){const c=-a+2*a*l/6,d=l%2===0?-o*.3:o*.3;r+=` L ${d} ${c}`}return r}case"panel":case"board":return`M 0 ${-a*.9} L 0 ${a*.9}`;case"fence":{let i=`M 0 ${-a} L 0 ${a}`;for(const r of[-a*.8,0,a*.8])i+=` M ${-o*.15} ${r} L ${o*.15} ${r}`;return i}case"shelter":{const i=-o*.9,r=o*.7,l=5;let c=`M ${i} ${-a} L ${i} ${a}`;for(let d=0;d<l;d++){const u=-a+2*a*d/l,p=u+2*a/l*.6;c+=` M ${r} ${u} L ${r} ${p}`}return c}case"long-gun":return`M ${-o*.7} 0 L ${o*.7} 0 M ${-o*.7} 0 L ${-o*.4} ${a*.3}`;case"handgun":return`M ${-o*.3} 0 L ${o*.3} 0 M ${o*.1} 0 L ${o*.1} ${a*.5}`;case"bag":return po(-o*.4,-a*.6,o*.4,a*.6)+` M ${-o*.2} ${-a*.6} A ${o*.2} ${a*.25} 0 0 1 ${o*.2} ${-a*.6}`;case"case":return po(-o*.4,-a*.6,o*.4,a*.6)+` M ${-o*.15} ${-a*.6} L ${-o*.15} ${-a*.8} L ${o*.15} ${-a*.8} L ${o*.15} ${-a*.6}`;case"book":return po(-o*.4,-a*.5,o*.4,a*.5)+` M 0 ${-a*.5} L 0 ${a*.5}`;case"flat-device":return po(-o*.45,-a*.45,o*.45,a*.45)+" "+po(-o*.3,-a*.3,o*.3,a*.3);case"tube":return`M ${-o*.7} 0 L ${o*.7} 0`;case"building":return`M ${-o} ${-a} L ${o} ${a} M ${-o} ${a} L ${o} ${-a}`;case"screen":return po(-o*.45,-a*.45,o*.45,a*.45)+" "+po(-o*.3,-a*.3,o*.3,a*.3);default:return""}}const $G=["data-label-for","transform"],EG=["x","y","width","height","rx"],xG=["x","y","font-size"],PG={key:0,class:"bb-prop-lift"},CG=["data-id","transform","tabindex","aria-label","aria-pressed"],BG=["transform","x","y","width","height"],_G=["transform","x","y","width","height"],AG=["d","transform","stroke-width"],TG=["x","y","width","height","rx"],RG=["x","y","font-size"],DG={key:0,class:"bb-prop-lift"},OG=["cx","cy","r"],NG=["data-handle","x","y","width","height"],LG=.3,KG=nt({__name:"BbBoardProp",props:{prop:{},selected:{type:Boolean},labels:{type:Boolean},labelScale:{},focusable:{type:Boolean},locked:{type:Boolean},pickable:{type:Boolean},carried:{type:Boolean},labelDy:{},labelHidden:{type:Boolean},layer:{}},setup(e){const t=e;function n(I){return Math.round(I*100)/100}const o=C(()=>t.labelScale??1),a=C(()=>$h(t.prop)),s=C(()=>{if(!t.carried)return;const I=t.prop.center.x*it,y=t.prop.center.y*it;return`translate(${I} ${y}) scale(${od.scale2d}) translate(${-I} ${-y})`}),i=C(()=>`color-mix(in srgb, ${Sl(t.prop)} 45%, var(--bb-solid, #d6d1c6))`),r=C(()=>{const I=Math.max(t.prop.depthM*it,24*o.value)/2,y=Math.max(t.prop.widthM*it,24*o.value)/2;return{x:-I,y:-y,width:I*2,height:y*2}}),l=C(()=>{const I=B1(t.prop,_1(t.prop),o.value),y=o.value;return{x:I.x*y,y:I.y*y+(t.labelDy??0),w:I.w*y,h:I.h*y}}),c=C(()=>A1(t.prop,it/o.value)),d=C(()=>t.labels!==!1&&c.value&&!t.labelHidden),u=C(()=>c.value?Ph(Ua(t.prop),t.prop.widthM,t.prop.depthM):""),p=C(()=>`${a.value.transform} scale(${it})`),f=C(()=>`color-mix(in srgb, ${Sl(t.prop)} 55%, black)`),h=C(()=>t3(t.prop,it/o.value).map(({handle:I,point:y})=>({handle:I,x:y.x*it,y:y.y*it}))),b=C(()=>{const I=Math.max(LG,18*o.value/it),y={x:0,y:-(t.prop.widthM/2+I)},w=Bi(t.prop,y);return{x:w.x*it,y:w.y*it}});return(I,y)=>e.layer==="label"?(v(),k("g",{key:0,class:"bb-prop-label-item","data-label-for":e.prop.id,transform:g(s),"aria-hidden":"true"},[g(d)?(v(),k(ae,{key:0},[m("rect",{class:"bb-prop-label-pill",x:g(l).x,y:g(l).y,width:g(l).w,height:g(l).h,rx:4*g(o)},null,8,EG),m("text",{class:"bb-prop-label",x:g(l).x+g(l).w/2,y:g(l).y+g(l).h/2,"font-size":g(qf)*g(o),"dominant-baseline":"central"},[We(S(e.prop.name)+" ",1),(e.prop.elevationM??0)>0?(v(),k("tspan",PG," â"+S((e.prop.elevationM??0).toFixed(1))+"m",1)):H("",!0)],8,xG)],64)):H("",!0)],8,$G)):(v(),k("g",{key:1,class:qe(["bb-prop",{"bb-prop--selected":e.selected,"bb-locked":e.locked,"bb-prop--pickable":e.pickable}]),"data-id":e.prop.id,transform:g(s),role:"button",tabindex:e.focusable!==!1?0:-1,"aria-label":`${I.$t("tool.blockingBoard.inspector.prop")} ${e.prop.name} (${n(e.prop.center.x)}m, ${n(e.prop.center.y)}m)`,"aria-pressed":e.selected},[m("rect",{class:"bb-hit",transform:g(a).transform,x:g(r).x,y:g(r).y,width:g(r).width,height:g(r).height},null,8,BG),m("rect",{class:"bb-prop-body",transform:g(a).transform,x:g(a).x,y:g(a).y,width:g(a).width,height:g(a).height,style:wt({fill:g(i)})},null,12,_G),g(u)?(v(),k("path",{key:0,class:"bb-prop-glyph",d:g(u),transform:g(p),"stroke-width":1.2*g(o),style:wt({stroke:g(f)})},null,12,AG)):H("",!0),g(d)&&e.layer!=="body"?(v(),k(ae,{key:1},[m("rect",{class:"bb-prop-label-pill",x:g(l).x,y:g(l).y,width:g(l).w,height:g(l).h,rx:4*g(o)},null,8,TG),m("text",{class:"bb-prop-label",x:g(l).x+g(l).w/2,y:g(l).y+g(l).h/2,"font-size":g(qf)*g(o),"dominant-baseline":"central"},[We(S(e.prop.name)+" ",1),(e.prop.elevationM??0)>0?(v(),k("tspan",DG," â"+S((e.prop.elevationM??0).toFixed(1))+"m",1)):H("",!0)],8,RG)],64)):H("",!0),e.selected&&!e.locked?(v(),k(ae,{key:2},[m("circle",{class:"bb-handle-rotate",cx:g(b).x,cy:g(b).y,r:6*g(o)},null,8,OG),(v(!0),k(ae,null,Me(g(h),w=>(v(),k("rect",{key:w.handle,class:qe(["bb-handle-resize",`bb-handle-resize--${w.handle}`]),"data-handle":w.handle,x:w.x-4*g(o),y:w.y-4*g(o),width:8*g(o),height:8*g(o)},null,10,NG))),128))],64)):H("",!0)],10,CG))}}),Ov=Object.assign(ot(KG,[["__scopeId","data-v-2dddc025"]]),{__name:"BbBoardProp"}
243),FG=["data-id","data-pose","tabindex","aria-label","aria-pressed"],HG=["points","stroke-width"],zG=["points","stroke","stroke-width","stroke-dasharray","stroke-opacity"],jG={key:0,class:"bb-speed-segs"},UG=["x1","y1","x2","y2","stroke-width"],GG=["data-seg","data-speed-class","data-problem","x1","y1","x2","y2","stroke-width","onPointerenter"],VG=["points","stroke","stroke-width"],WG={key:2,class:"bb-actor-start-group"},XG=["cx","cy","r","fill"],YG=["x","y","width","height","rx"],qG=["x","y","font-size"],ZG=["cx","cy","r"],JG=["transform"],QG=["d","data-axis-deg"],eV=["x2","y2","stroke","stroke-width"],tV=["r"],nV=["r","fill","stroke-width"],oV=["points","fill"],aV=["font-size"],sV=["r"],iV=["r"],rV=["r"],lV=["transform"],cV=["font-size"],dV=["y","font-size","stroke-width","dominant-baseline"],uV=["data-index","transform","onPointerenter"],pV=["r"],fV=["transform","fill"],mV=["y","font-size","stroke-width"],hV=["y","font-size"],bV=["aria-label","data-last","data-seg","data-merged","transform","onPointerenter","onFocus","onKeydown"],gV=["r","stroke-width"],vV=["font-size"],yV=["data-index","transform","onPointerenter"],kV=["x2","y2"],SV=["x2","y2"],IV=["cx","cy","r"],wV=["x","y","font-size"],MV={key:5,class:"bb-handle-rotate-group"},$V=["cx","cy","r"],EV=["transform"],xV=["data-place","transform"],PV=["data-act","transform","onClick"],CV=["d"],BV=.9,Nv=30,_V=11,AV=nt({__name:"BbBoardActor",props:{actor:{},state:{},selected:{type:Boolean},paused:{type:Boolean},radiusM:{},labels:{type:Boolean},paths:{type:Boolean},labelScale:{},labelPlacement:{},originShift:{},startPoint:{},facingKeyPoints:{},facingKeyTargetPoints:{},blockedFromSec:{},blockedAtPoint:{},pathSplit:{},focusable:{type:Boolean},locked:{type:Boolean},timeSec:{},arrivals:{},initial:{},speed:{},bar:{type:Boolean},detail:{type:Boolean},nowSec:{},barTopY:{}},emits:["act","speed-hover","speed-open"],setup(e,{emit:t}){const n=e,o=t,a={stand:"",sit:"â",kneel:"â",crouch:"â",lie:"â"};function s(te){const q=te.currentTarget.getBoundingClientRect();return{clientX:q.left+q.width/2,clientY:q.top+q.height/2}}function i(te,q){te.key!=="Enter"&&te.key!==" "||(te.preventDefault(),te.stopPropagation(),o("speed-open",{seg:q,...s(te)}))}function r(te){return Math.round(te*100)/100}const l=te=>({x:te.x*it,y:te.y*it}),c=C(()=>l(n.state.position)),d=C(()=>l(n.startPoint??n.actor.start.position)),u=C(()=>n.actor.path.waypoints.length>0||n.actor.positionKeys.length>=2),p=C(()=>n.labelScale??1),f=C(()=>dl(n.radiusM,p.value)),h=C(()=>n.initial??Zf(n.actor.name)),b=C(()=>n.selected===!0||n.detail===!0),I=C(()=>R1(u.value,n.timeSec??0,b.value)),y=C(()=>n.labelPlacement??"above"),w=C(()=>y.value==="below"?f.value+4*p.value:-(f.value+4*p.value)),M=C(()=>n.state.bodyDeg??n.state.headingDeg),x=C(()=>UU(f.value,M.value,p.value).map(te=>`${te.x},${te.y}`).join(" ")),_=C(()=>{if(n.selected||!GU(M.value,n.state.headingDeg))return null;const te=In(n.state.headingDeg),q=f.value*2.2;return{x:te.x*q,y:te.y*q}}),O=C(()=>{const te=BV*it,q=In(n.state.headingDeg-Nv),de=In(n.state.headingDeg+Nv);return`M 0 0 L ${q.x*te} ${q.y*te} A ${te} ${te} 0 0 1 ${de.x*te} ${de.y*te} Z`}),A=C(()=>f.value+6*p.value),N=C(()=>Math.max(n.radiusM*it,12*p.value));function K(te){const q=In(te),de=Math.max((n.radiusM+.6)*it,30*p.value);return{x:q.x*de,y:q.y*de}}function F(te){const q=n.facingKeyPoints?.[te]??n.actor.start.position;return l(q)}function B(te){const q=n.facingKeyTargetPoints?.[te];if(!q)return null;const de=F(te),Ce=l(q);return{x:Ce.x-de.x,y:Ce.y-de.y}}const j=C(()=>{const te=In(n.state.headingDeg),q=Math.max((n.radiusM+.6)*it,30*p.value);return{x:c.value.x+te.x*q,y:c.value.y+te.y*q}}),ee=C(()=>[n.actor.start.position,...n.actor.path.waypoints].map(q=>`${q.x*it},${q.y*it}`).join(" "));function D(te,q){let de=0,Ce=1/0;for(let Ye=0;Ye<q.length-1;Ye+=1){const tt=q[Ye],ht=q[Ye+1],Et=ht.x-tt.x,It=ht.y-tt.y,Xt=Et*Et+It*It,yt=Xt>0?Math.min(1,Math.max(0,((te.x-tt.x)*Et+(te.y-tt.y)*It)/Xt)):0,Ie=Math.hypot(te.x-(tt.x+Et*yt),te.y-(tt.y+It*yt));Ie<Ce&&(Ce=Ie,de=Ye)}return de}const Z=te=>te.map(q=>l(q)).map(q=>`${q.x},${q.y}`).join(" "),L=C(()=>{const te=[n.actor.start.position,...n.actor.path.waypoints];if(te.length<2)return[];if(n.blockedAtPoint){const q=D(n.blockedAtPoint,te),de=[...te.slice(0,q+1),n.blockedAtPoint],Ce=[n.blockedAtPoint,...te.slice(q+1)],Ye=[];return de.length>=2&&Ye.push({points:Z(de),classes:["bb-actor-path"]}),Ce.length>=2&&Ye.push({points:Z(Ce),classes:["bb-actor-path","bb-actor-path--blocked"]}),Ye}if(n.pathSplit&&n.pathSplit.past.length>=2){const q=[{points:Z(n.pathSplit.past),classes:["bb-actor-path","bb-actor-path--past"]}];return n.pathSplit.future.length>=2&&q.push({points:Z(n.pathSplit.future),classes:["bb-actor-path"]}),q}return[{points:ee.value,classes:["bb-actor-path"]}]}),V=C(()=>n.actor.positionKeys.length>=2?0:yu(n.actor.start.position,n.actor.path.waypoints)),pe=C(()=>
243{if(V.value===0)return null;const te=n.actor.path.waypoints[V.value-1];return((te.atSec??0)+te.pauseSec).toFixed(1)});function le(te){return te("tool.blockingBoard.stage.startAt",{t:pe.value??0 .toFixed(1)})}function me(te){return pe.value===null?te("tool.blockingBoard.board.originLabel"):te("tool.blockingBoard.board.originDepart",{n:pe.value})}function oe(te){return(gr(te,10)+10)*p.value}const fe=C(()=>{const te=p.value,q=T1(n.startPoint??n.actor.start.position,n.state.position),de=q?c.value.x:d.value.x,Ce=q?c.value.y+(y.value==="below"?w.value+16*te:f.value+4*te):d.value.y+9*te;return{x:de,y:Ce+(n.originShift?.dy??0),h:15*te}}),X=C(()=>n.actor.path.waypoints.map((te,q)=>({index:q,isEnd:q===n.actor.path.waypoints.length-1,near:Math.hypot(te.x-n.state.position.x,te.y-n.state.position.y)<.05,at:n.arrivals?.[q]??0,...l(te),...VU(n.arrivals?.[q]??0,te.pauseSec)})).filter(te=>te.index>=V.value)),re=C(()=>{if(!n.selected||n.detail)return null;const te=n.nowSec??n.timeSec??0,q=new Map(X.value.map(de=>[de.index,de]));return WU(n.actor.path.waypoints.map((de,Ce)=>n.arrivals?.[Ce]??0),n.actor.facingKeys,te,de=>!q.has(de)||q.get(de).near)}),Se=G(null),Q=G(null);function $e(te){return n.detail||Se.value===te?!0:re.value?.kind==="waypoint"&&re.value.index===te}function Fe(te){return n.detail||Q.value===te?!0:re.value?.kind==="key"&&re.value.index===te}const Ze=C(()=>n.speed?L.value.filter(te=>te.classes.includes("bb-actor-path--blocked")):[]),ue=[{kind:"walk",tip:"tool.blockingBoard.inspector.act.walk",d:"M -5 0 H 4 M 1 -3 L 4 0 L 1 3"},{kind:"look",tip:"tool.blockingBoard.inspector.act.look",d:"M -5 0 Q 0 -4 5 0 Q 0 4 -5 0 Z M 1.4 0 A 1.4 1.4 0 1 0 -1.4 0 A 1.4 1.4 0 1 0 1.4 0"},{kind:"sit",tip:"tool.blockingBoard.board.actorBar.sit",d:"M -4 -5 V 4 M -4 0 H 4 V 4"}],ye=C(()=>{const te=Bv(n.state.headingDeg);if(te.place!=="above"||n.barTopY===void 0)return te;const q=c.value.y-f.value+(te.dy-_V)*p.value;return Bv(n.state.headingDeg,q-n.barTopY)}),Ue=C(()=>ye.value.place==="above"?-f.value+ye.value.dy*p.value:f.value+ye.value.dy*p.value);return(te,q)=>(v(),k("g",{class:qe(["bb-actor",{"bb-actor--selected":e.selected,"bb-actor--paused":e.paused,"bb-locked":e.locked}]),"data-id":e.actor.id,"data-pose":e.state.pose,role:"button",tabindex:e.focusable!==!1?0:-1,"aria-label":`${te.$t("tool.blockingBoard.inspector.actor")} ${e.actor.name} (${r(e.state.position.x)}m, ${r(e.state.position.y)}m)`,"aria-pressed":e.selected},[e.paths!==!1?(v(),k("polyline",{key:0,class:"bb-actor-path-hit","data-role":"path",points:g(ee),"stroke-width":10*g(p)},[m("title",null,S(te.$t("tool.blockingBoard.board.pathHint")),1)],8,HG)):H("",!0),e.paths!==!1?(v(),k(ae,{key:1},[(v(!0),k(ae,null,Me(g(L),(de,Ce)=>(v(),k("polyline",{key:`path-seg-${Ce}`,class:qe(de.classes),points:de.points,stroke:e.actor.color,"stroke-width":(e.selected?2:1)*g(p),"stroke-dasharray":e.selected||!e.detail?void 0:"4 3","stroke-opacity":e.selected?void 0:e.detail?.5:.25},null,10,zG))),128)),e.speed?(v(),k("g",jG,[(v(!0),k(ae,null,Me(e.speed.segs,(de,Ce)=>(v(),k(ae,{key:`speed-${Ce}`},[de.problem?(v(),k("line",{key:0,class:qe(["bb-speed-halo",{"bb-speed-seg--past":de.past}]),x1:de.a.x*g(it),y1:de.a.y*g(it),x2:de.b.x*g(it),y2:de.b.y*g(it),"stroke-width":10*g(p)},null,10,UG)):H("",!0),m("line",{class:qe(["bb-speed-seg",[`bb-speed-seg--${de.problem?"bad":de.cls}`,{"bb-speed-seg--past":de.past}]]),"data-seg":de.seg??Ce,"data-speed-class":de.cls,"data-problem":de.problem??void 0,x1:de.a.x*g(it),y1:de.a.y*g(it),x2:de.b.x*g(it),y2:de.b.y*g(it),"stroke-width":4*g(p),onPointerenter:Ye=>o("speed-hover",{seg:de.seg??Ce,clientX:Ye.clientX,clientY:Ye.clientY}),onPointerleave:q[0]||(q[0]=Ye=>o("speed-hover",null))},null,42,GG)],64))),128))])):H("",!0),(v(!0),k(ae,null,Me(g(Ze),(de,Ce)=>(v(),k("polyline",{key:`path-over-${Ce}`,class:qe([...de.classes,"bb-actor-path--over"]),points:de.points,stroke:e.actor.color,"stroke-width":2*g(p)},null,10,VG))),128))],64)):H("",!0),g(u)?(v(),k("g",WG,[g(I)?(v(),k(ae,{key:0},[m("circle",{class:"bb-actor-origin",cx:g(d).x,cy:g(d).y,r:6*g(p),fill:e.actor.color,"fill-opacity":".2"},null,8,XG),e.detail&&!e.originShift?.hidden?(v(),k("rect",{key:0,class:"bb-actor-origin-pill",x:g(fe).x-oe(me(te.$t))/2,y:g(fe).y,width:oe(me(te.$t)),height:g(fe).h,rx:4*g(p)},null,8,YG)):H("",!0),e.detail&&!e.originShift?.hidden?(v(),k("text",{key:1,class:"bb-actor-origin-label",x:g(fe).x,y:g(fe).y+g(fe).h/2,"font-size":10*g(p),"dominant-baseline":"central"},S(me(te.$t)),9,qG)):H("",!0)],64)):H("",!0),m("circle",{class:"bb-actor-start-hit","data-role":"start",cx:g(d).x,cy:g(d).y,r:g(N)},[m("title",null,` 244 `+S(g(I)?`${le(te.$t)} 245${te.$t("tool.blockingBoard.board.startHint")}`:te.$t("tool.blockingBoard.board.startHint"))+` 246 `,1)],8,ZG)])):H("",!0),m("g",{class:"bb-actor-now",transform:`translate(${g(c).x} ${g(c).y})`},[e.selected?(v(),k("path",{key:0,class:"bb-actor-gaze",d:g(O),"data-axis-deg":e.state.headingDeg.toFixed(1)},null,8,QG)):H("",!0),g(_)?(v(),k("line",{key:1,class:"bb-actor-gaze-hint",x1:"0",y1:"0",x2:g(_).x,y2:g(_).y,stroke:e.actor.color,"stroke-width":g(p),"stroke-dasharray":"3 2","stroke-opacity":".7"},null,8,eV)):H("",!0),m("circle",{class:"bb-hit",r:g(A)},null,8,tV),m("circle",{class:"bb-actor-token",r:g(f),fill:e.actor.color,stroke:"#fff","stroke-width":2*g(p)},null,8,nV),m("polygon",{class:"bb-actor-dir",points:g(x),fill:e.actor.color},null,8,oV),g(h)?(v(),k("text",{key:2,class:"bb-actor-initial","text-anchor":"middle","dominant-baseline":"central","font-size":13*g(p)},S(g(h)),9,aV)):H("",!0),e.paused?(v(),k("circle",{key:3,class:"bb-actor-paused-ring",r:g(f)+3*g(p)},null,8,sV)):H("",!0),e.selected?(v(),k("circle",{key:4,class:"bb-actor-select-ring",r:g(f)+3*g(p),"pointer-events":"none"},null,8,iV)):H("",!0),m("circle",{class:"bb-actor-focus-ring",r:g(f)+3*g(p),"pointer-events":"none"},null,8,rV),e.state.pose&&a[e.state.pose]?(v(),k("g",{key:5,class:"bb-actor-pose-badge",transform:`translate(${g(f)*.7} ${-g(f)*.7})`},[m("text",{class:"bb-actor-pose-icon","text-anchor":"middle","dominant-baseline":"middle","font-size":10*g(p)},S(a[e.state.pose]),9,cV)],8,lV)):H("",!0),e.labels!==!1?(v(),k("text",{key:6,class:"bb-actor-label",y:g(w),"font-size":12*g(p),"stroke-width":3*g(p),"dominant-baseline":g(y)==="below"?"hanging":void 0},S(e.actor.name),9,dV)):H("",!0)],8,JG),e.paths!==!1&&g(b)?(v(!0),k(ae,{key:3},Me(g(X),de=>(v(),k("g",{key:de.index,class:qe(["bb-waypoint",{"bb-path-end":de.isEnd}]),"data-index":de.index,transform:`translate(${de.x} ${de.y})`,onPointerenter:Ce=>Se.value=de.index,onPointerleave:q[1]||(q[1]=Ce=>Se.value=null)},[de.near?H("",!0):(v(),k("circle",{key:0,class:"bb-waypoint-dot",r:6*g(p)},null,8,pV)),de.isEnd?(v(),k("path",{key:1,class:"bb-waypoint-flag",d:"M0 0 V-14 L10 -10 L0 -6 Z",transform:`scale(${g(p)})`,fill:e.actor.color},null,8,fV)):H("",!0),e.selected&&!de.near&&$e(de.index)?(v(),k("text",{key:2,class:"bb-waypoint-time",y:-9*g(p),"font-size":10*g(p),"stroke-width":3*g(p)},S(te.$t("tool.blockingBoard.board.waypointTime",{t:de.at.toFixed(1)})),9,mV)):H("",!0),e.selected&&!de.near&&de.pauseSec!==null&&$e(de.index)?(v(),k("text",{key:3,class:"bb-waypoint-pause",y:16*g(p),"font-size":10*g(p)},S(te.$t("tool.blockingBoard.board.pauseShort",{n:de.pauseSec.toFixed(1)})),9,hV)):H("",!0)],42,uV))),128)):H("",!0),(v(!0),k(ae,null,Me(e.paths!==!1?e.speed?.flags??[]:[],de=>(v(),k("g",{key:`flag-${de.last}`,class:"bb-speed-flag",role:"img",tabindex:"0","aria-label":`${te.$t(`tool.blockingBoard.speed.tip.${de.problem}`)} · ${te.$t("tool.blockingBoard.speed.tip.change")}`,"data-last":de.last,"data-seg":de.seg,"data-merged":de.segs&&de.segs.length>1?de.segs.length:void 0,transform:`translate(${de.at.x*g(it)} ${de.at.y*g(it)})`,onPointerenter:Ce=>o("speed-hover",{seg:de.seg,segs:de.segs,clientX:Ce.clientX,clientY:Ce.clientY}),onPointerleave:q[2]||(q[2]=Ce=>o("speed-hover",null)),onFocus:Ce=>o("speed-hover",{seg:de.seg,segs:de.segs,...s(Ce)}),onBlur:q[3]||(q[3]=Ce=>o("speed-hover",null)),onKeydown:Ce=>i(Ce,de.seg)},[m("circle",{class:"bb-speed-flag-dot",r:7*g(p),"stroke-width":1.5*g(p)},null,8,gV),m("text",{class:"bb-speed-flag-mark","text-anchor":"middle","dominant-baseline":"central","font-size":10*g(p),"aria-hidden":"true"},"!",8,vV)],40,bV))),128)),e.selected&&!e.locked?(v(!0),k(ae,{key:4},Me(e.actor.facingKeys,(de,Ce)=>(v(),k(ae,{key:`facing-${Ce}`},[de.travel?H("",!0):(v(),k("g",{key:0,class:"bb-facing-key","data-index":Ce,transform:`translate(${F(Ce).x} ${F(Ce).y})`,onPointerenter:Ye=>Q.value=Ce,onPointerleave:q[4]||(q[4]=Ye=>Q.value=null)},[m("title",null,S(te.$t("tool.blockingBoard.board.facingKeyTip")),1),B(Ce)?(v(),k("line",{key:0,class:"bb-facing-key-target","pointer-events":"none",x1:"0",y1:"0",x2:B(Ce).x,y2:B(Ce).y},null,8,kV)):H("",!0),m("line",{class:"bb-facing-key-line","pointer-events":"none",x1:"0",y1:"0",x2:K(de.headingDeg).x,y2:K(de.headingDeg).y},null,8,SV),m("circle",{class:"bb-facing-key-handle",cx:K(de.headingDeg).x,cy:K(de.headingDeg).y,r:3.6*g(p)},null,8,IV),Fe(Ce)?(v(),k("text",{key:1,class:"bb-facing-key-time","pointer-events":"none",x:K(de.headingDeg).x+6*g(p),y:K(de.headingDeg).y+3*g(p),"font-size":10*g(p)},S(te.$t("tool.blockingBoard.board.facingKeyTime",{t:de.atSec.toFixed(1)})),9,wV)):H("",!0)],40,yV))],64))),128)):H("",!0),e.selected&&!e.locked?(v(),k("g",MV,[m("title",null,S(te.$t("tool.blockingBoard.board.gazeHandleTip")),1),m("circle",{class:"bb-handle-rotate",cx:g(j).x,cy:g(j).y,r:6*g(p)},null,8,$V),m("path",{class:"bb-handle-rotate-eye","pointer-events":"none",fill:"none",d:"M -4 0 Q 0 -3.5 4 0 Q 0 3.5 -4 0 Z M 1.2 0 A 1.2 1.2 0 1 0 -1.2 0 A 1.2 1.2 0 1 0 1.2 0",transform:`translate(${g(j).x} ${g(j).y}) scale(${g(p)})`},null,8,EV)])):H("",!0),e.bar?(v(),k("g",{key:6,class:"bb-actor-bar","data-place":g(ye).place,transform:`translate(${g(c).x} ${g(c).y+g(Ue)})`},[(v(),k(ae,null,Me(ue,(de,Ce)=>m("g",{key:de.kind,class:"bb-actor-bar-btn",role:"button","data-act":de.kind,transform:`translate(${(Ce-1)*24*g(p)} 0) scale(${g(p)})`,onPointerdown:q[5]||(q[5]=un(()=>{},["stop"])),onClick:un(Ye=>o("act",de.kind),["stop"])},[m("title",null,S(te.$t(de.tip)),1),q[6]||(q[6]=m("rect",{x:"-11",y:"-11",width:"22",height:"22",rx:"4"},null,-1)),m("path",{d:de.d,fill:"none"},null,8,CV)],40,PV)),64))],8,xV)):H("",!0)],10,FG))}}),TV=Object.assign(ot(AV,[["__scopeId","data-v-cdf62147"]]),{__name:"BbBoardActor"}),RV={key:0,class:"bb-actor-path-hits"},DV=["data-actor-id"],OV=["points","stroke-width"],NV=nt({__name:"BbActorPathHits",props:{actors:{},labelScale:{default:1},visible:{type:Boolean,default:!0}},setup(e){const t=e;function n(o){return[o.start.position,...o.path.waypoints].map(s=>`${s.x*it},${s.y*it}`).join(" ")}return(o,a)=>t.visible!==!1?(v(),k("g",RV,[(v(!0),k(ae,null,Me(t.actors,s=>(v(),k("g",{key:s.id,"data-actor-id":s.id},[m("polyline",{class:"bb-actor-path-hit","data-role":"path",points:n(s),"stroke-width":10*(t.labelScale??1)},[m("title",null,S(o.$t("tool.blockingBoard.board.pathHint")),1)],8,OV)],8,DV))),128))])):H("",!0)}}),LV=Object.assign(ot(NV,[["__scopeId","data-v-7130748f"]]),{__name:"BbBoardBbActorPathHits"}),KV=["data-id","tabindex","aria-label","aria-pressed"],FV=["data-fov","transform","d"],HV=["x1","y1","x2","y2"],zV=["transform"],jV=["x","y","font-size"],UV=["x1","y1","x2","y2"],GV=["x","y","font-size","stroke-width"],VV=["cx","cy","r"],WV=["cx","cy","r"],XV=["cx","cy","r"],YV=4,qV=1.2,ZV=nt({__name:"BbBoardCamera",props:{camera:{},selected:{type:Boolean},active:{type:Boolean},viewing:{type:Boolean},labels:{type:Boolean},showFan:{type:Boolean},aimPoint:{},labelScale:{},displayName:{},labelDy:{},labelHidden:{type:Boolean},focusable:{type:Boolean},locked:{type:Boolean}
246,shortLabel:{},detail:{type:Boolean}},setup(e){const t=e;function n(h){return Math.round(h*100)/100}const o=h=>({x:h.x*it,y:h.y*it}),a=C(()=>t.labelScale??1),s=C(()=>o(t.camera.position)),i=C(()=>Su(t.camera).horizontalDeg),r=C(()=>t.displayName??t.camera.name),l=C(()=>yI(t.camera)),c=C(()=>{const h=In(t.camera.headingDeg),b=Math.max(qV,30*a.value/it);return{x:s.value.x+h.x*b*it,y:s.value.y+h.y*b*it}}),d=C(()=>{const h=YV*it,b=i.value/2,I=In(t.camera.headingDeg-b),y=In(t.camera.headingDeg+b),w=i.value>180?1:0;return`M 0 0 L ${I.x*h} ${I.y*h} A ${h} ${h} 0 ${w} 1 ${y.x*h} ${y.y*h} Z`}),u=C(()=>t.aimPoint?o(t.aimPoint):null),p=C(()=>t.labelDy??0),f=C(()=>s.value.y+20*a.value+p.value);return(h,b)=>(v(),k("g",{class:qe(["bb-camera",{"bb-camera--selected":e.selected,"bb-camera--active":e.active,"bb-camera--viewing":e.viewing,"bb-locked":e.locked}]),"data-id":e.camera.id,role:"button",tabindex:e.focusable!==!1?0:-1,"aria-label":`${h.$t("tool.blockingBoard.inspector.camera")} ${g(r)} (${n(e.camera.position.x)}m, ${n(e.camera.position.y)}m)`,"aria-pressed":e.selected},[m("title",null,S(`${g(r)} · ${e.camera.lensMm}mm`),1),e.showFan!==!1?(v(),k("path",{key:0,class:qe(["bb-camera-fan",e.selected||e.active?"bb-camera-fan--filled":"bb-camera-fan--outline"]),"data-fov":g(i).toFixed(1),transform:`translate(${g(s).x} ${g(s).y})`,d:g(d),"pointer-events":"none"},null,10,FV)):H("",!0),g(u)?(v(),k("line",{key:1,class:"bb-camera-aim",x1:g(s).x,y1:g(s).y,x2:g(u).x,y2:g(u).y,"pointer-events":"none"},null,8,HV)):H("",!0),m("g",{class:"bb-camera-icon",transform:`translate(${g(s).x} ${g(s).y}) rotate(${e.camera.headingDeg}) scale(${g(a)})`},[...b[0]||(b[0]=[m("circle",{class:"bb-camera-reel",cx:"-6",cy:"-9",r:"4"},null,-1),m("circle",{class:"bb-camera-reel",cx:"4",cy:"-9",r:"4"},null,-1),m("rect",{class:"bb-camera-body",x:"-11",y:"-7",width:"22",height:"14",rx:"2"},null,-1),m("path",{class:"bb-camera-lens",d:"M11 -4 L19 -7 L19 7 L11 4 Z"},null,-1)])],8,zV),e.shortLabel?(v(),k("text",{key:2,class:"bb-camera-short",x:g(s).x,y:g(s).y,"font-size":10*g(a),"text-anchor":"middle","dominant-baseline":"central","pointer-events":"none"},S(e.shortLabel),9,jV)):H("",!0),e.detail&&e.labels!==!1&&!e.labelHidden&&g(p)>0?(v(),k("line",{key:3,class:"bb-camera-label-leader",x1:g(s).x,y1:g(s).y,x2:g(s).x,y2:g(f)},null,8,UV)):H("",!0),e.detail&&e.labels!==!1&&!e.labelHidden?(v(),k("text",{key:4,class:"bb-camera-label",x:g(s).x,y:g(f),"font-size":11*g(a),"stroke-width":3*g(a)},S(`${g(r)} · ${e.camera.lensMm}mm`),9,GV)):H("",!0),m("circle",{class:"bb-camera-hit",cx:g(s).x,cy:g(s).y,r:14*g(a)},null,8,VV),m("circle",{class:"bb-camera-focus",cx:g(s).x,cy:g(s).y,r:14*g(a),"pointer-events":"none"},null,8,WV),e.selected&&g(l)&&!e.locked?(v(),k("circle",{key:5,class:"bb-handle-rotate",cx:g(c).x,cy:g(c).y,r:6*g(a)},null,8,XV)):H("",!0)],10,KV))}}),JV=Object.assign(ot(ZV,[["__scopeId","data-v-c089e6f9"]]),{__name:"BbBoardCamera"}),QV={class:"bb-xfm-hud",role:"status"},e9={class:"bb-xfm-hud-mode"},t9={key:0,class:"bb-xfm-hud-outside"},n9={key:2,class:"bb-xfm-hud-buffer"},o9={key:3,class:"bb-xfm-hud-hint"},a9=nt({__name:"BbXfmHud",props:{status:{}},setup(e){const t=e;function n(a,s){const i=a.toFixed(s);return Number(i)===0?0 .toFixed(s):a>0?`+${i}`:i}const o=C(()=>{const{mode:a,value:s}=t.status;if(a==="move"){const i=s;return[`X ${n(i.x,2)} m`,`Y ${n(i.y,2)} m`]}return a==="rotate"?[`${n(s,Number.isInteger(s)?0:1)}°`]:[`Ã${s.toFixed(2)}`]});return(a,s)=>(v(),k("div",QV,[m("span",e9,S(a.$t(`tool.blockingBoard.xfm.${e.status.mode}`)),1),(v(!0),k(ae,null,Me(o.value,(i,r)=>(v(),k("span",{key:r,class:"bb-xfm-hud-value"},S(i),1))),128)),e.status.outside?(v(),k("span",t9,S(a.$t("tool.blockingBoard.xfm.outside")),1)):H("",!0),e.status.axis?(v(),k("span",{key:1,class:qe(["bb-xfm-hud-axis",`bb-xfm-hud-axis--${e.status.axis}`])},S(a.$t(e.status.axis==="x"?"tool.blockingBoard.xfm.axisX":"tool.blockingBoard.xfm.axisY")),3)):H("",!0),e.status.buffer?(v(),k("span",n9,S(e.status.buffer),1)):(v(),k("span",o9,S(a.$t("tool.blockingBoard.xfm.numericHint")),1))]))}}),s9=Object.assign(ot(a9,[["__scopeId","data-v-5659f4f2"]]),{__name:"BbBoardBbXfmHud"}),i9=["data-tool","aria-pressed","title","aria-label","disabled","onClick"],r9=nt({__name:"BbToolStrip",props:{active:{},canTransform:{type:Boolean},canScale:{type:Boolean}},emits:["tool"],setup(e,{emit:t}){const n=e,o=t,a=[{tool:"select",icon:"i-lucide-mouse-pointer-2"},{tool:"move",icon:"i-lucide-move"},{tool:"rotate",icon:"i-lucide-rotate-cw"},{tool:"scale",icon:"i-lucide-scaling"}];function s(r){return r==="select"?!1:r==="scale"?!n.canScale:!n.canTransform}function i(r){r!=="select"&&!s(r)&&o("tool",r)}return(r,l)=>{const c=vn;return v(),k("div",{class:"bb-tool-strip",role:"toolbar",onPointerdown:l[0]||(l[0]=u
246n(()=>{},["stop"]))},[(v(),k(ae,null,Me(a,d=>m("button",{key:d.tool,type:"button",class:"bb-tool-strip-btn","data-tool":d.tool,"aria-pressed":e.active===d.tool?"true":"false",title:r.$t(`tool.blockingBoard.xfm.tool.${d.tool}`),"aria-label":r.$t(`tool.blockingBoard.xfm.tool.${d.tool}`),disabled:s(d.tool),onClick:u=>i(d.tool)},[ce(c,{name:d.icon,class:"bb-tool-strip-icon"},null,8,["name"])],8,i9)),64))],32)}}}),l9=Object.assign(ot(r9,[["__scopeId","data-v-1d289998"]]),{__name:"BbBoardBbToolStrip"}),Oc=8;function Ch(e,t,n,o,a,s){return{left:Math.max(Oc,Math.min(e,a-n-Oc)),top:Math.max(Oc,Math.min(t,s-o-Oc))}}const c9="tool.blockingBoard.board.";function Lv(e){return{key:`${c9}speedMenuCurrent`,params:{mps:e.toFixed(1)}}}const d9={key:0,class:"bb-speed-menu-current","aria-disabled":"true"},u9=["data-speed","aria-checked","aria-selected","onPointerenter","onClick"],p9={class:"bb-speed-menu-mps"},f9=nt({__name:"BbSpeedMenu",props:{x:{},y:{},current:{},mps:{}},emits:["pick","close"],setup(e,{emit:t}){const n=e,o=t,a=Object.keys(Mi);Qo("speedMenu",()=>!0,u=>{if(u.id!=="overlay.close")return!1;o("close")});const s=G(Math.max(0,a.indexOf(n.current))),i=G(n.x),r=G(n.y);function l(u){const p=a.length-1;if(u.key==="ArrowDown")s.value=Math.min(s.value+1,p);else if(u.key==="ArrowUp")s.value=Math.max(s.value-1,0);else if(u.key==="Enter"){const f=a[s.value];f&&o("pick",f)}else return;u.preventDefault(),u.stopPropagation()}const c=G(null);function d(u){const p=u.target;p instanceof Node&&c.value?.contains(p)||o("close")}return Jn(()=>{document.addEventListener("pointerdown",d,!0);const u=c.value;if(u){const p=u.getBoundingClientRect(),f=Ch(n.x,n.y,p.width,p.height,window.innerWidth,window.innerHeight);i.value=f.left,r.value=f.top}u?.focus()}),wn(()=>document.removeEventListener("pointerdown",d,!0)),(u,p)=>(v(),et(wm,{to:"body"},[m("div",{ref_key:"root",ref:c,class:"bb-speed-menu bb-ui",role:"menu",tabindex:"-1",style:wt({left:`${i.value}px`,top:`${r.value}px`}),onKeydown:l,onContextmenu:p[0]||(p[0]=un(()=>{},["prevent"]))},[e.mps!==void 0?(v(),k("div",d9,S(u.$t(g(Lv)(e.mps).key,g(Lv)(e.mps).params)),1)):H("",!0),(v(!0),k(ae,null,Me(g(a),(f,h)=>(v(),k("button",{key:f,type:"button",role:"menuitemradio",class:"bb-speed-menu-item","data-speed":f,"aria-checked":f===e.current,"aria-selected":h===s.value,onPointerenter:b=>s.value=h,onClick:b=>o("pick",f)},[m("span",null,S(u.$t(`tool.blockingBoard.speed.${f}`)),1),m("span",p9,S(g(Mi)[f].toFixed(1))+" m/s",1)],40,u9))),128))],36)]))}}),m9=Object.assign(ot(f9,[["__scopeId","data-v-814f7c2e"]]),{__name:"BbBoardBbSpeedMenu"}),h9=.6,b9=.5,Kv=.9,g9=3,v9=1e-6,y9="board.drop.noSpot",k9=["bed","hospital-bed"];function Qs(e){return e.snapshot.parts.find(t=>t.partId===e.partId)}function D1(e){return[...e.snapshot.room.props,...Qs(e)?.props??[]]}function Nl(e,t,n){return mn(e,n,{durationSec:t.durationSec}).position}const Bh=e=>e.catalogKey??e.kind,Ap=e=>k9.includes(Bh(e)),Qf=e=>!!Tt(Bh(e))?.seat;function Fv(e){return $u(e)||!!Tt(Bh(e))?.walkable}function O1(e,t){const n=new Set([t]),o=e.find(s=>s.id===t);if(o){const s=new Map(e.map(i=>[i.id,i]));for(const i of Es(o,s))n.add(i.id)}const a=[t];for(;a.length>0;){const s=a.shift();for(const i of e)i.supportPropId===s&&!n.has(i.id)&&(n.add(i.id),a.push(i.id))}return n}function _h(e){return e<=v9}function N1(e,t){switch(e.type){case"actor.moveStart":return e.position;case"actor.translate":return{x:t.x+e.delta.x,y:t.y+e.delta.y};case"actor.moveWaypoint":return e.point;case"prop.place":case"prop.move":return e.center;default:return t}}function L1(e){if(e.supportPicked)return null;const t=new Set;for(let n=Tp(e,e.displayed,t);n;n=Tp(e,e.displayed,t))t.add(n.id);return Tp(e,e.rawPoint,t)}function Tp(e,t,n){const o=Qs(e);if(!o)return null;const a=D1(e).filter(p=>!n.has(p.id)),s=p=>p.sort((f,h)=>f.d-h.d)[0],i=(p,f)=>{const h=s(f);return h?{kind:p,id:h.id}:null};if(e.dragged.kind==="actor"){const p=o.actors.find(M=>M.id===e.dragged.id);if(!p)return null;const f=Vt(p),h=e.snapshot.room.openings.filter(M=>gi(M.kind)&&!n.has(M.id)).map(M=>({id:M.id,d:Ot(vi(e.snapshot.room,M,0).position,t)})).filter(M=>M.d<=h9),b=i("door",h);if(b)return b;const I=o.actors.filter(M=>M.id!==p.id&&!n.has(M.id)).map(M=>({a:M,p:Nl(M,o,e.timeSec)})).filter(({a:M,p:x})=>Ot(x,t)<f+Vt(M)).map(({a:M,p:x})=>({id:M.id,d:Ot(x,t)}
246)),y=i("actor",I);if(y)return y;const w=a.filter(M=>!Fv(M)&&mr(t,f,M)).map(M=>({p:M,id:M.id,d:Ot(M.center,t)}));return i("seat",w.filter(M=>Qf(M.p)&&!Ap(M.p)))??i("bed",w.filter(M=>Ap(M.p)))??i("prop",w.filter(M=>!Qf(M.p)&&!Ap(M.p)))}const r=a.find(p=>p.id===e.dragged.id);if(!r)return null;const l={center:t,widthM:r.widthM,depthM:r.depthM,headingDeg:r.headingDeg},c=o.actors.filter(p=>!n.has(p.id)).map(p=>({a:p,p:Nl(p,o,e.timeSec)})).filter(({a:p,p:f})=>mr(f,Vt(p),l)).map(({a:p,p:f})=>({id:p.id,d:Ot(f,t)})),d=i("actor",c);if(d)return d;const u=O1(a,r.id);return i("prop",a.filter(p=>!u.has(p.id)&&!Fv(p)&&Va(l,p)!==null).map(p=>({id:p.id,d:Ot(p.center,t)})))}function K1(e,t){if(t||e.dragged.kind!=="actor"||e.moveCommand.type!=="actor.translate")return null;const n=Qs(e)?.actors.find(o=>o.id===e.dragged.id);return!n||n.positionKeys.length>=2?null:{kind:"route",id:e.dragged.id}}function S9(e){const t=Qs(e),n=t?.actors.find(a=>a.id===e.dragged.id);if(!t||!n)return!0;const o=a1(n,t.durationSec).at(-1);return!o||e.timeSec>=o.atSec+o.pauseSec-1e-6}function I9(e,t,n){if(t.kind==="route")return[S9(e)?"walkHere":"walkAfter","moveRoute","cancel"];const o=[];if(e.dragged.kind==="actor")switch(t.kind){case"door":o.push("passDoor","standAtDoor");break;case"actor":o.push("faceEachOther","standBeside");break;case"seat":o.push("sit","standBeside");break;case"bed":{const a=qa(e.snapshot,e.partId,t.id);o.push("lie"),a&&Qf(a)&&o.push("sit"),o.push("standBeside");break}case"prop":o.push("standBeside","lookAt");break}else t.kind==="actor"&&o.push("carry"),o.push("placeBeside");return[...o,"leave","cancel"]}function Ou(e,t,n){switch(e.type){case"actor.moveStart":return{...e,position:{...t}};case"actor.translate":return{...e,delta:{x:t.x-n.x,y:t.y-n.y}};case"actor.moveWaypoint":return{...e,point:{...t}};case"prop.place":case"prop.move":return{...e,center:{...t}};default:return e}}function us(e){return{commands:[e.moveCommand],noticeKey:y9}}function em(e,t,n,o){return _h(e.timeSec)?{type:"actor.setHeading",actorId:t,headingDeg:n}:{type:"actor.addFacingKey",actorId:t,atSec:e.timeSec,headingDeg:n,...o!==void 0?{targetId:o}:{}}}function Hv(e,t,n){const o=Qs(e),a=o?.actors.find(c=>c.id===e.dragged.id),s=qa(e.snapshot,e.partId,t.id);if(!o||!a||!s)return us(e);let i,r=s.id;if(n==="sit"){const c=o.actors.filter(u=>u.id!==a.id).map(u=>Nl(u,o,e.timeSec)),d=Ql({...s,name:""},e.snapshot.room,Vt(a),c);i=d,d?.seatPropId&&(r=d.seatPropId)}else i=Zm(s);if(!i)return us(e);const l=Ou(e.moveCommand,i.position,e.displayed);return _h(e.timeSec)?{commands:[l,{type:"actor.setPose",actorId:a.id,pose:n,seatPropId:r},{type:"actor.setHeading",actorId:a.id,headingDeg:i.headingDeg}]}:{commands:[l,{type:"actor.addPoseKey",actorId:a.id,atSec:e.timeSec,pose:n,seatPropId:r},{type:"actor.addFacingKey",actorId:a.id,atSec:e.timeSec,headingDeg:i.headingDeg}]}}function w9(e){const t=Qs(e);if(!t)return us(e);const n=e.snapshot.room,o=D1(e);let a,s=new Set;if(e.dragged.kind==="actor"){const c=t.actors.find(d=>d.id===e.dragged.id);if(!c)return us(e);a=Vt(c)}else{const c=o.find(d=>d.id===e.dragged.id);if(!c)return us(e);a=Math.hypot(c.widthM,c.depthM)/2,s=O1(o,c.id)}const i=Jl(n,t).filter(c=>!s.has(c.id)).map(c=>({kind:"rect",rect:c,id:c.id}));for(const c of t.actors)e.dragged.kind==="actor"&&c.id===e.dragged.id||i.push({kind:"circle",center:Nl(c,t,e.timeSec),radius:Vt(c),id:c.id});const r={minX:-n.widthM/2,maxX:n.widthM/2,minY:-n.depthM/2,maxY:n.depthM/2},l=Ya(e.rawPoint,a,i,r,{maxRadiusM:g9});return l?{commands:[Ou(e.moveCommand,l,e.displayed)]}:us(e)}function zv(e,t,n){const o=e.snapshot.room.openings.find(l=>l.id===t.id);if(!o)return us(e);const a=n?-.8:b9,s=vi(e.snapshot.room,o,a).position;if(!n||_h(e.timeSec))return{commands:[Ou(e.moveCommand,s,e.displayed)]};const i=Ol({snapshot:e.snapshot,partId:e.partId,actorId:e.dragged.id,playheadSec:e.timeSec},s,"walk");if(!i.ok||!i.move)return us(e);const r=M9(e,o,i.commands,i.extendedTo,i.move);return{commands:[...i.commands,r?{type:"propEvent.add",targetId:o.id,...r,state:{open:!0}}:{type:"propEvent.add",targetId:o.id,startSec:e.timeSec,state:{open:!0}}]}}const jv=.5;function M9(e,t,n,o,a){const s=Qs(e),i=s?.actors.find(f=>f.id===e.dragged.id),r=n.find(f=>f.type==="actor.replacePath"&&f.actorId===e.dragged.id);if(!s||!i||!r)return null;const l={...i,path:{...i.path,waypoints:r.waypoints}},c=Um(l,o??s.durationSec),d=Xl(e.snapshot.room,t);let u=null,p=null;for(let f=0;f<c.length-1;f++){const h=c[f],b=c[f+1];if(b.atSec<=a.departSec+1e-9)continue;if(h.atSec>=a.arriveSec-1e-9)break;const I=Ga(h,b,d,0);if(!I){if(u!==null)break;continue}const y=b.atSec-h.atSec;u??(u=h.atSec+y*I.enter),p=h.atSec+y*I.exit}return u===null||p===null?null:{startSec:Math.max(0,u-jv),endSec:p+jv}}function $9(e,t){const n=Qs(e),o=n?.actors.find(c=>c.id===t.id);if(!n||!o)return us(e);
246const a=Nl(o,n,e.timeSec);let s=e.rawPoint.x-a.x,i=e.rawPoint.y-a.y,r=Math.hypot(s,i);r<1e-9&&(s=e.displayed.x-a.x,i=e.displayed.y-a.y,r=Math.hypot(s,i)),r<1e-9&&(s=-1,i=0,r=1);const l={x:a.x+s/r*Kv,y:a.y+i/r*Kv};return{commands:[Ou(e.moveCommand,l,e.displayed),em(e,e.dragged.id,Ms(l,a),o.id),em(e,o.id,Ms(a,l),e.dragged.id)]}}function E9(e,t){const n=qa(e.snapshot,e.partId,t.id);if(!n)return{commands:[e.moveCommand]};const o=N1(e.moveCommand,e.displayed);return{commands:[e.moveCommand,em(e,e.dragged.id,Ms(o,n.center),n.id)]}}function x9(e,t,n){switch(n){case"cancel":return{commands:[]};case"leave":case"moveRoute":return{commands:[e.moveCommand]};case"walkHere":case"walkAfter":return{commands:[],moveResult:Ol({snapshot:e.snapshot,partId:e.partId,actorId:e.dragged.id,playheadSec:e.timeSec},N1(e.moveCommand,e.displayed),"walk",{mode:n==="walkAfter"?"append":"insert"})};case"sit":return Hv(e,t,"sit");case"lie":return Hv(e,t,"lie");case"standBeside":case"placeBeside":return w9(e);case"standAtDoor":return zv(e,t,!1);case"passDoor":return zv(e,t,!0);case"faceEachOther":return $9(e,t);case"lookAt":return E9(e,t);case"carry":return{commands:[{type:"actor.addCarryKey",actorId:t.id,atSec:e.timeSec,propId:e.dragged.id}]}}}const P9=.3;function F1(e,t,n){const o=e.widthM/2,a=e.depthM/2,s=[{wall:"north",d:Math.abs(t.y+a)},{wall:"south",d:Math.abs(t.y-a)},{wall:"west",d:Math.abs(t.x+o)},{wall:"east",d:Math.abs(t.x-o)}];let i=null;for(const r of s)e.walls[r.wall]&&(!i||r.d<i.d)&&(i=r);return!i||i.d>P9+1e-9?null:{wall:i.wall,offsetM:Tn(mh(e,{wall:i.wall,widthM:n},t))}}function H1(e){return e.preset?yd[e.preset]:Jo[e.kind]}const C9={class:"bb-overlays"},B9=["x1","y1","x2","y2"],_9=["transform"],A9=["x1","y1"],T9=["x1","y2"],R9=["x1","y1","x2","y2"],D9=["x1","y1","x2","y2"],O9=["cx","cy"],Ks=6,N9=nt({__name:"BbBoardOverlays",props:{issues:{},frameState:{},part:{},options:{}},setup(e){const t=e;function n(l,c){if(!l||c===void 0)return null;const d=t.part.actors.find(u=>u.id===l);return d?mn(d,c,{durationSec:t.part.durationSec}).position:null}const o=C(()=>t.options.issues===!1?[]:t.issues.filter(l=>l.code==="PHYSICAL_IMPOSSIBILITY"&&l.timeRange).map(l=>{const c=n(l.targetId,l.timeRange.startSec),d=n(l.targetId,l.timeRange.endSec);return!c||!d?null:{key:`${l.code}-${l.path}-${l.timeRange.startSec}`,a:c,b:d,contact:c}}).filter(l=>l!==null)),a=C(()=>{if(t.options.axis===!1)return[];const l=t.frameState;return l?.activeCut?t.issues.filter(c=>
246c.code==="AXIS_CROSSING"&&c.targetId===l.activeCut.id).map(c=>{const[d,u]=String(c.params?.pairIds??"").split(","),p=l.actors[d]?.position,f=l.actors[u]?.position;return!p||!f?null:{key:`${c.code}-${c.path}`,a:p,b:f}}).filter(c=>c!==null):[]}),s=C(()=>{if(t.options.issues===!1)return[];const l=t.frameState;return l?.camera?t.issues.filter(c=>c.code==="CAMERA_OCCLUDED").map(c=>{const d=c.params?.subjectId,u=typeof d=="string"?l.actors[d]?.position:void 0;return u?{key:`${c.code}-${c.path}`,a:l.camera.position,b:u}:null}).filter(c=>c!==null):[]});function i(l){if(!l)return null;const c=t.frameState?.actors[l]?.position;if(c)return c;const d=t.part.cameras.find(p=>p.id===l);if(d)return d.position;const u=t.part.props.find(p=>p.id===l);return u?u.center:null}const r=C(()=>t.options.issues===!1?[]:t.issues.filter(l=>l.code==="OUT_OF_ROOM").map(l=>{const c=i(l.targetId);return c?{key:`${l.code}-${l.path}`,at:c}:null}).filter(l=>l!==null));return(l,c)=>(v(),k("g",C9,[(v(!0),k(ae,null,Me(o.value,d=>(v(),k(ae,{key:d.key},[m("line",{class:"bb-overlay-penetration",x1:g(fn)(d.a).x,y1:g(fn)(d.a).y,x2:g(fn)(d.b).x,y2:g(fn)(d.b).y},null,8,B9),m("g",{class:"bb-overlay-contact",transform:`translate(${g(fn)(d.contact).x} ${g(fn)(d.contact).y})`},[m("line",{x1:-Ks,y1:-Ks,x2:Ks,y2:Ks},null,8,A9),m("line",{x1:-Ks,y1:Ks,x2:Ks,y2:-Ks},null,8,T9)],8,_9)],64))),128)),(v(!0),k(ae,null,Me(a.value,d=>(v(),k("line",{key:d.key,class:"bb-overlay-axis",x1:g(fn)(d.a).x,y1:g(fn)(d.a).y,x2:g(fn)(d.b).x,y2:g(fn)(d.b).y},null,8,R9))),128)),(v(!0),k(ae,null,Me(s.value,d=>(v(),k("line",{key:d.key,class:"bb-overlay-occlusion",x1:g(fn)(d.a).x,y1:g(fn)(d.a).y,x2:g(fn)(d.b).x,y2:g(fn)(d.b).y},null,8,D9))),128)),(v(!0),k(ae,null,Me(r.value,d=>(v(),k("circle",{key:d.key,class:"bb-overlay-out-of-room",cx:g(fn)(d.at).x,cy:g(fn)(d.at).y,r:"18"},null,8,O9))),128))]))}}),L9=Object.assign(ot(N9,[["__scopeId","data-v-a08b8e1f"]]),{__name:"BbBoardOverlays"}),K9=["viewBox","aria-hidden"],F9=["x","y","width","height"],H9=["transform","x","y","width","height"],z9={class:"bb-camera-more-badges"},j9=["transform","aria-label"],U9=["r"],G9=["font-size"],V9={class:"bb-prop-labels"},W9={class:"bb-overlays"},X9=["points"],Y9={class:"bb-ghost-trail"},q9=["data-actor-id","cx","cy","r","opacity"],Z9={class:"bb-onion-skin"},J9=["data-actor-id","data-offset","cx","cy","r","fill","stroke","stroke-dasharray","opacity"],Q9={key:3,class:"bb-pick-preview","pointer-events":"none"},eW=["points","stroke-width","stroke-dasharray"],tW=["x","y","font-size"],nW={class:"bb-contacts"},oW=["cx","cy","r"],aW=["x1","y1","x2","y2","stroke","stroke-width"],sW=["transform"],iW=["r","stroke-width","stroke-dasharray"],rW=["d","stroke-width"],lW=["x","y","width","height"],cW={class:"bb-speed-tip-class"},dW={class:"bb-speed-tip-range"},uW={key:0,class:"bb-speed-tip-why"},pW=["onClick"],fW={key:6,class:"bb-detour-suggestion"},mW={class:"bb-detour-message"},hW={key:7,class:"bb-zoom"},bW=["title"],gW={class:"bb-zoom-level"},vW=["title"],yW=["title"],kW=16,SW=250,IW=1,wW=2,Uv=20,MW=5,Gv=500,$W=nt({__name:"BbBoardStage",props:{snapshot:{},partId:{},timeSec:{},frameState:{default:null},selection:{default:()=>({ids:[],primary:null})},readonly:{type:Boolean,default:!1},options:{default:()=>({grid:!0,labels:!0,fov:"all",paths:!0,axis:!1,snap:!0})},dragPreview:{default:null},addMarker:{default:null},overlays:{default:null},ghostTrail:{default:null},onionSkin:{default:null},issues:{default:()=>[]},background:{default:null},photoUrl:{default:null},viewingCameraId:{default:null},authoredSecOf:{},hiddenIds:{default:()=>[]},lockedIds:{default:()=>[]},pick:{default:null},hidePickHud:{type:Boolean,default:!1},playing:{type:Boolean,default:!1},labelScale:{}},emits:["select","select-many","drag-commit","drag-preview","commit-many","context","canvas-click","detour-apply","detour-ignore","update:dragging","notice","update:xfm","update:view-center","pick","pick-cancel","segment-speed","drop-choice","context-menu","actor-act"],setup(e,{expose:t,emit:n}){const o=e,a=C(()=>new Set(o.hiddenIds??[])),s=C(()=>new Set(o.lockedIds??[])),i=n,r=C(()=>{const $=o.overlays?.detour,J=$?.preview??$?.points;return J?J.map(T=>`${T.x*it},${T.y*it}`).join(" "):null}),l=G(null),c=G(null),d=G({w:0,h:0});let u=null;Jn(()=>{c.value&&(u=new ResizeObserver(([$])=>{$&&(d.value={w:$.contentRect.width,h:$.contentRect.height})}),u.observe(c.value),d.value={w:c.value.clientWidth,h:c.value.clientHeight})}),wn(()=>{u?.disconnect(),u=null,He()});const p=C(()=>o.snapshot.parts.find($=>$.partId===o.partId)??o.snapshot.parts[0]),f=C(()=>o.snapshot.room),h=C(()=>is(f.value,2)),b=G(is(o.snapshot.room,2)),I=C(()=>`${b.value.x} ${b.value.y} ${b.value.w} ${b.value.h}`);Je([()=>f.value.widthM,()=>f.value.depthM],()=>{b.value=is(f.value,2)});const y=C(()=>Math.round(h.value.w/b.value.w*100));function w($){const J={x:b.value.x+b.value.w/2,y:b.value.y+b.value.h/2};b.value=$v(b.value,J,$,h.value.w)}function M(){w(wv)}function x(){w(1/wv)}function _(){b.value=is(f.value,2)}const O=C(()=>[...f.value.props,...p.value.props]),A=C(()=>o.labelScale!==void 0?o.labelScale:o.readonly?1:sd(b.value,d.value)),N=C(()=>{const $=b.value,{h:J}=d.value;return J<=0?$.y:$.y-Math.max(0,J*A.value-$.h)/2}),K=C(()=>{const $=o.dragPreview,J=$?Array.isArray($)?$:[$]:[];return new Map(J.map(T=>[T.id,T]))}),F=C(()=>{for(const $ of K.value.values())if($.openingOffsetM!==void 0)return{id:$.
246id,offsetM:$.openingOffsetM};return null}),B=C(()=>BU(tt.value.map($=>{const J=le.value.get($.id).position;return{id:$.id,x:J.x*it,y:J.y*it,radius:dl(Vt($),A.value),text:$.name}}),12*A.value,4*A.value,"below")),j=typeof mo=="function"?mo().locale:null,ee=C(()=>j?.value??"ko");function D($){const J=Ao[$.species];return $.species==="human"||!J?Zf($.name):Zf(Kn(J.labels,ee.value))}function Z($){return $.path.waypoints.map((J,T)=>Jf($,T,p.value.durationSec))}function L($){return o.selection?.ids.includes($)??!1}const V=C(()=>o.options?.snap!==!1);function pe($){return o.frameState?.actors[$.id]??mn($,o.timeSec)}const le=C(()=>{const $=new Map;for(const J of p.value.actors){let T=pe(J);const Ee=K.value.get(J.id);if(Ee&&Ee.waypointIndex===void 0&&Ee.insertAt===void 0)Ee.position&&(T={...T,position:Ee.position}),Ee.heading!==void 0&&(T={...T,headingDeg:Ee.heading});else if(oe(Ee)){const ze=o.authoredSecOf?.(J.id)??o.timeSec;T={...T,headingDeg:mn(fe(J),ze).headingDeg}}$.set(J.id,T)}return $});function me($){let J=0;for(let T=1;T<$.positionKeys.length;T+=1)$.positionKeys[T].atSec<$.positionKeys[J].atSec&&(J=T);return J}function oe($){return!!$&&$.waypointIndex!==void 0&&$.heading!==void 0&&!$.position}function fe($){const J=K.value.get($.id);if(!J)return $;if(oe(J)){const{waypointIndex:T,heading:Ee}=J;return{...$,facingKeys:$.facingKeys.map((ze,at)=>at===T?{...ze,headingDeg:Ee}:ze)}}if(J.waypointIndex!==void 0&&J.position){const T=J.position;return{...$,path:{waypoints:$.path.waypoints.map((Ee,ze)=>ze===J.waypointIndex?{...Ee,x:T.x,y:T.y}:Ee)}}}if(J.insertAt!==void 0&&J.position){const T=J.insertAt,Ee=J.position;return{...$,path:{waypoints:[...$.path.waypoints.slice(0,T),{x:Ee.x,y:Ee.
246y,pauseSec:0},...$.path.waypoints.slice(T)]}}}if(J.routeDelta){const T=J.routeDelta;return{...$,start:{...$.start,position:{x:$.start.position.x+T.x,y:$.start.position.y+T.y}},path:{waypoints:$.path.waypoints.map(Ee=>({...Ee,x:Ee.x+T.x,y:Ee.y+T.y}))},positionKeys:$.positionKeys.map(Ee=>({...Ee,x:Ee.x+T.x,y:Ee.y+T.y}))}}if(J.startPosition){const T=J.startPosition;if($.positionKeys.length>=2){const Ee=me($);return{...$,positionKeys:$.positionKeys.map((ze,at)=>at===Ee?{...ze,x:T.x,y:T.y}:ze)}}return Ad($,T,p.value.durationSec)}return J.position?Ad($,J.position,p.value.durationSec):$}const X=C(()=>tt.value.filter($=>!s.value.has($.id)).map($=>fe($)));function re($){return mn(fe($),0).position}function Se($){const J=o.frameState?.contacts;if(!J)return null;let T=null;for(const Ee of J)Ee.actorId===$&&(!T||Ee.atSec<T.atSec)&&(T={atSec:Ee.atSec,point:Ee.point});return T}function Q($){return Se($)?.atSec}function $e($){return Se($)?.point}function Fe($){const J=o.authoredSecOf?.($.id)??o.timeSec;return vP($,J,p.value.durationSec)}function Ze($){const J=fe($);return $.facingKeys.map(T=>mn(J,T.atSec).position)}function ue($){if(!$.targetId)return null;const J=p.value.actors.find(ze=>ze.id===$.targetId);if(J)return mn(J,$.atSec).position;const T=p.value.cameras.find(ze=>ze.id===$.targetId);if(T)return T.position;const Ee=O.value.find(ze=>ze.id===$.targetId);return Ee?Ee.center:null}function ye($){return $.facingKeys.map(J=>ue(J))}function Ue($,J){if(!$)return J("tool.blockingBoard.viewport.unknownBlocker");const T=O.value.find(ze=>ze.id===$);if(T)return ui(T,J("tool.blockingBoard.inspector.prop"));const Ee=fu($);return Ee?J("tool.blockingBoard.viewport.wallName",{side:J(`tool.blockingBoard.inspector.${Ee}`)}):J("tool.blockingBoard.viewport.unknownBlocker")}function te($,J){const T=p.value.actors.find(ze=>ze.id===$.actorId);return{name:T?ui(T,$.actorId):$.actorId,obstacle:Ue($.obstacleId,J)}}const q=C(()=>Al(o.snapshot,o.partId,o.timeSec)),de=C(()=>new Map([...q.value].map(([$,J])=>[$,J.center]))),Ce=C(()=>sP(O.value,new Map(O.value.map($=>[$.id,$]))).map($=>{const J=K.value.get($.id),T=q.value.get($.id);return J?{...$,...T?{carried:T.carried}:{},center:J.position??T?.center??$.center,headingDeg:J.heading??$.headingDeg,widthM:J.size?.widthM??$.widthM,depthM:J.size?.depthM??$.depthM}:T?{...$,center:T.center,carried:T.carried}:$})),Ye=C(()=>p.value.cameras.map($=>{const J=K.value.get($.id);if(J)return{...$,position:J.position??$.position,headingDeg:J.heading??$.headingDeg};const T=o.frameState;return T?.camera&&T.activeCut?.cameraId===$.id?{...$,position:T.camera.position,headingDeg:T.camera.headingDeg,fovOverrideDeg:T.camera.fovH}:$})),tt=C(()=>p.value.actors.filter($=>!a.value.has($.id))),ht=C(()=>Ce.value.filter($=>!a.value.has($.id))),Et=C(()=>Ye.value.filter($=>!a.value.has($.id))),It=C(()=>o.issues.filter($=>!$.targetId||!a.value.has($.targetId)));function Xt($){return o.pick?.kind==="sit"&&!!Tt($.catalogKey??$.kind)?.seat}const yt=G(null);function Ie($){const J=o.pick?.kind==="opening"?o.pick.opening:void 0,T=J?H1(J).widthM:0,Ee=J&&$?F1(f.value,$,T):null;yt.value=Ee?Xl(f.value,{...Ee,widthM:T}):null}Je(()=>o.pick,()=>{Ie(null),lt.value=null});const Be=C(()=>yt.value?$h(yt.value):null),lt=G(null),Ke=C(()=>{const $=o.pick,J=lt.value;if(!$?.actorId||!J||$.kind!=="walk"&&$.kind!=="run")return null;const T=p.value.actors.find(dt=>dt.id===$.actorId);if(!T)return null;const Ee=Ol({snapshot:o.snapshot,partId:o.partId,actorId:$.actorId,playheadSec:o.timeSec},J,$.kind==="walk"?"walk":"run");if(!Ee.ok||!Ee.move)return null;const ze=Ee.commands.find(dt=>dt.type==="actor.replacePath");if(ze?.type!=="actor.replacePath")return null;const{insertFirst:at,insertLast:st}=Ee.move,ln=[ze.waypoints[at-1]??T.start.position,...ze.waypoints.slice(at,st+1)].map(dt=>fn({x:dt.x,y:dt.y})),Ct=ln[ln.length-1];return{points:ln.map(dt=>`${dt.x},${dt.y}`).join(" "),x:Ct.x,y:Ct.y,t:Ee.move.arriveSec.toFixed(1)}}),ct=G(!1);let xt=null;function jt(){xt&&clearTimeout(xt),ct.value=!0,xt=setTimeout(()=>{ct.value=!1,xt=null},300)}wn(()=>{xt&&clearTimeout(xt)});const Jt=C(()=>{const $=new Map;if(o.readonly)return $;
246for(const J of p.value.actors){if(!L(J.id))continue;const T=fe(J),{segments:Ee,spans:ze}=Gm(T,p.value.durationSec),at=T.path.waypoints,st=Qe=>Qe<0?T.start.position:at[Qe],pt=Ee.map(Qe=>{const Pt=st(Qe.from),qt=st(Qe.to);return{a:{x:Pt.x,y:Pt.y},b:{x:qt.x,y:qt.y},cls:Qe.cls,problem:Qe.problem}}),ln=[],Ct=kW*A.value/it;ze.forEach((Qe,Pt)=>{const qt=Ee.findIndex(Wn=>Wn.span===Pt&&Wn.problem);if(qt<0)return;const kt=pt[qt],An={x:(kt.a.x+kt.b.x)/2,y:(kt.a.y+kt.b.y)/2},Vn=ln.find(Wn=>Math.hypot(Wn.at.x-An.x,Wn.at.y-An.y)<Ct);if(Vn){Vn.segs=[...Vn.segs??[Vn.seg],qt];return}ln.push({seg:qt,at:An,last:Qe.last,problem:Ee[qt].problem})});const dt=Ee.map(Qe=>({startSec:Qe.startSec,endSec:Qe.endSec,mps:Qe.mps,cls:Qe.cls,problem:Qe.problem,last:ze[Qe.span]?.last??-1}));$.set(J.id,{view:{segs:pt,flags:ln},info:dt})}return $}),Mn=C(()=>{const $=new Map;for(const[J,{view:T,info:Ee}]of Jt.value){const ze=o.authoredSecOf?.(J)??o.timeSec,at=[];T.segs.forEach((st,pt)=>{const{startSec:ln,endSec:Ct}=Ee[pt];if(Ct<=ze+1e-6)at.push({...st,seg:pt,past:!0});else if(ln<ze-1e-6&&Ct>ln){const dt=(ze-ln)/(Ct-ln),Qe={x:st.a.x+(st.b.x-st.a.x)*dt,y:st.a.y+(st.b.y-st.a.y)*dt};at.push({...st,b:Qe,seg:pt,past:!0},{...st,a:Qe,seg:pt})}else at.push({...st,seg:pt})}),$.set(J,{segs:at,flags:T.flags})}return $}),At=G(null);let Ae=null;function Ve(){Ae&&clearTimeout(Ae),Ae=null}function Xe($,J){if(Ve(),!J){Ae=setTimeout(()=>{At.value=null,Ae=null},SW);return}if(Ut.value)return;const T=c.value?.getBoundingClientRect();At.value={actorId:$,seg:J.seg,segs:J.segs??[J.seg],left:J.clientX-(T?.left??0)+12,top:J.clientY-(T?.top??0)+12}}wn(Ve);const ne=C(()=>{const $=At.value;if(!$)return null;const J=Jt.value.get($.actorId)?.info,T=$.segs.flatMap(Ee=>J?.[Ee]?[{seg:Ee,...J[Ee]}]:[]);return T.length===0?null:{items:T,locked:s.value.has($.actorId)}});function W($,J){return J("tool.blockingBoard.speed.tip.range",{start:$.startSec.toFixed(1),end:$.endSec.toFixed(1),mps:Number.isFinite($.mps)?$.mps.toFixed(1):"â"})}function ve($,J){const T=At.value;Ve(),At.value=null,T&&bn($.clientX,$.clientY,T.actorId,J)}function we($,J){const T=Jt.value.get($)?.info[J.seg]?.last;T===void 0||s.value.has($)||(Ve(),At.value=null,bn(J.clientX,J.clientY,$,T))}const Re=G(null);let ut=null;function bn($,J,T,Ee){if(o.readonly||!L(T))return;const ze=p.value.actors.find(st=>st.id===T),at=ze?$s(ze,p.value.durationSec).find(st=>st.last===Ee):void 0;at&&(Re.value={x:$,y:J,actorId:T,last:Ee,current:o1(at.mps),mps:at.mps})}function Qn($){const J=Re.value;Re.value=null,J&&i("segment-speed",{actorId:J.actorId,last:J.last,preset:$})}function ea($,J,T,Ee){const ze=p.value.actors.find(pt=>pt.id===T),at=ze?.path.waypoints[Ee];if(!ze||!at)return;const st=Ru(o.snapshot,o.partId,T).filter(pt=>Math.hypot(pt.center.x-at.x,pt.center.y-at.y)<=IW);i("context-menu",{view:"2d",clientX:$,clientY:J,floor:eo($,J),hit:{kind:"waypoint",actorId:T,index:Ee,seatPropId:f4(at,st)}})}function yn($){if(!$.subject||$.subject.targetIds.length===0)return null;const J=$.subject.targetIds.map(T=>le.value.get(T)?.position).filter(T=>!!T);return J.length===0?null:{x:J.reduce((T,Ee)=>T+Ee.x,0)/J.length,y:J.reduce((T,Ee)=>T+Ee.y,0)/J.length}}function Ln($){const J=o.options?.fov??"all";return J==="none"?!1:J==="selected"?L($)||Mo($):!0}function co($){return o.options?.detail||(o.options?.fov??"all")==="all"?!0:L($)||Mo($)}function Mo($){return o.frameState?.activeCut?.cameraId===$}function Fo($,J){return $.name?.trim()||`#${J+1}`}function bo($){return L($)?3:$===o.viewingCameraId?2:1}const Hn=C(()=>{const $=A.value,J=Ye.value,T=o.options?.labels!==!1,Ee=T?tt.value.map(kt=>{const An=le.value.get(kt.id).position,Vn=An.x*it/$,Wn=An.y*it/$,Do=dl(Vt(kt),$)/$,Pa=gr(kt.name,12),Qa=B.value[kt.id]==="below";return{id:kt.id,x:Vn-Pa/2,y:Qa?Wn+Do+4:Wn-Do-4-12,w:Pa,h:12,anchorX:Vn,anchorY:Wn,priority:tl("actor"),fixed:!0}}):[],ze=tt.value.map(kt=>{const An=le.value.get(kt.id).position,Vn=An.x*it/$,Wn=An.y*it/$,Do=dl(Vt(kt),$)/$;return{id:`${kt.id}:token`,x:Vn-Do,y:Wn-Do,w:2*Do,h:2*Do,anchorX:Vn,anchorY:Wn,priority:tl("actor"),fixed:!0}}),at=gr("ìì · 00.0s ì¶ë°",10)+10,st=tt.value.flatMap(kt=>{const An=kt.path.waypoints.length>0||kt.positionKeys.length>=2;if(!o.options?.detail||!R1(An,o.timeSec))return[];const Vn=le.value.get(kt.id).position,Wn=re(kt),Do=T1(Wn,Vn),Pa=Do?Vn:Wn,Qa=Pa.x*it/$,Hi=Pa.y*it/$,Lr=dl(Vt(kt),$)/$,ju=Do?B.value[kt.id]==="below"?Hi+Lr+4+16:Hi+Lr+4:Hi+9;
246return[{id:`${kt.id}:origin`,x:Qa-at/2,y:ju,w:at,h:15,anchorX:Qa,anchorY:Hi,priority:tl("actor")}]}),pt=T?ht.value.filter(kt=>A1(kt,it/$)).filter(kt=>!To(kt)).map(kt=>({id:kt.id,...B1(kt,_1(kt),$),priority:tl("prop")})):[],ln=(o.options?.detail?J:[]).map((kt,An)=>{const Vn=kt.position.x*it/$,Wn=kt.position.y*it/$,Do=`${Fo(kt,An)} · ${kt.lensMm}mm`,Pa=_U(Do),Qa=C1*1.4;return{id:kt.id,x:Vn-Pa/2,y:Wn+Uv-Qa/2,w:Pa,h:Qa,anchorX:Vn,anchorY:Wn,priority:tl("camera",bo(kt.id))}}),Ct=KU([...ze,...Ee,...st,...ln,...pt],{maxShift:3,gap:wW}),dt=new Map(J.map((kt,An)=>[kt.id,Fo(kt,An)])),Qe=kt=>dt.has(kt.id),Pt=FU(Ct,Qe,Qe),qt=new Map;for(const kt of Ct){const An=(Pt.get(kt.id)??[]).map(Vn=>dt.get(Vn)??Vn);qt.set(kt.id,{dy:kt.dy*$,hidden:kt.state==="collapsed",moreCount:An.length,moreNames:An.join(", "),badgeX:(kt.anchorX+kt.w/2+6)*$,badgeY:(kt.anchorY+Uv+kt.dy)*$})}return qt}),Ho=C(()=>o.options?.detail?new Set:DU(ht.value)),$o=G(null);function To($){return Ho.value.has($.name)}function ta($){return To($)?$o.value!==$.id&&!L($.id):Hn.value.get($.id)?.hidden??!1}function wa($){const J=Hn.value.get(`${$}:origin`);return{dy:J?.dy??0,hidden:J?.hidden??!1}}function na($){return Hn.value.get($)??{dy:0,hidden:!1,moreCount:0,moreNames:"",badgeX:0,badgeY:0}}const Eo=C(()=>{const $=[];for(const J of Ye.value){const T=Hn.value.get(J.id);!T||T.moreCount===0||$.push({id:J.id,x:T.badgeX,y:T.badgeY,count:T.moreCount,title:T.moreNames})}return $}),go=C(()=>{const $=o.ghostTrail;if(!$||o.onionSkin)return[];const J=[];for(const[T,Ee]of Object.entries($))a.value.has(T)||Ee.forEach((ze,at)=>{J.push({actorId:T,position:ze,opacity:(at+1)/(Ee.length||MW)*.4})});return J});function en($){const J=p.value.actors.find(at=>at.id===$);if(J)return{kind:"actor",data:J};const T=p.value.cameras.find(at=>at.id===$);if(T)return{kind:"camera",data:T};const Ee=O.value.find(at=>at.id===$);if(Ee)return{kind:"prop",data:Ee};const ze=f.value.openings.find(at=>at.id===$);return ze?{kind:"opening",data:ze}:null}function eo($,J){if(!l.value)return{x:0,y:0};const T=Mv(l.value,$,J);return T?ad(T):{x:0,y:0}}const Ut=G(null);function zo(){const $=new Map;for(const[J,T]of le.value)$.set(J,{position:T.position,headingDeg:T.headingDeg});for(const J of Ye.value)$.set(J.id,{position:J.position,headingDeg:J.headingDeg});return $}const nn=kU({snapshot:()=>o.snapshot,partId:()=>o.partId,selectionIds:()=>o.selection?.ids??[],lockedIds:()=>o.lockedIds??[],carried:()=>de.value,displayed:zo,snapOption:()=>V.value,timeSec:()=>o.timeSec,authoredSecOf:$=>o.authoredSecOf?.($)??o.timeSec,metersPerPx:()=>A.value/it}),Ma=C(()=>{const $=o.selection?.ids??[];return o.readonly||o.pick||o.playing||Ut.value||nn.active.value||$.length!==1?null:p.value.actors.some(J=>J.id===$[0])&&!s.value.has($[0])?$[0]:null});let Zn=null;function so(){return Zn?eo(Zn.x,Zn.y):null}function ge($){i("drag-preview",$.length===1?$[0]:[...$])}Je(()=>nn.previews.value,$=>{nn.active.value&&ge($)});const _e=G(!1),R=C(()=>{const $=nn.status.value;return $&&_e.value?{...$,outside:!0}:$});Je(R,$=>i("update:xfm",$));let U=[];function Y($,J){if(o.readonly||Ut.value||nn.active.value)return!1;const T=nn.start($,J);return T.ok?(T.notice&&i("notice",T.notice),_e.value=!1,U=[...o.selection?.ids??[]],!0):(i("notice",T.notice),!1)}Je(()=>o.selection?.ids??[],$=>{if(!nn.active.value)return;$.length===U.length&&$.every(T=>U.includes(T))||xe()});function he(){const $=nn.confirm();return $?(i("drag-preview",null),$.commands.length>0&&i("commit-many",$.commands,{label:$.label}),!0):!1}function xe(){return nn.active.value?(nn.cancel(),i("drag-preview",null),!0):!1}function De($){return id({snapshot:o.snapshot,partId:o.partId,ids:o.selection?.ids??[],mode:$,displayed:zo(),lockedIds:o.lockedIds,carried:de.value}).targets.length>0}const bt=C(()=>De("move")),Yt=C(()=>De("scale")),Ft=C(()=>{const $=nn.status.value,J=nn.pivot.value;if(!$?.axis||!J)return null;const T=fn(J),Ee=b.value;return $.axis==="x"?{axis:"x",x1:Ee.x,y1:T.y,x2:Ee.x+Ee.w,y2:T.y}:{axis:"y",x1:T.x,y1:Ee.y,x2:T.x,y2:Ee.y+Ee.h}});Je(()=>Ut.value!==null||nn.active.value,$=>i("update:dragging",$)),Je(()=>o.snapshot,()=>{Ut.value&&xa(),xe()});function Rt(){xe()}Jn(()=>window.addEventListener("blur",Rt)),wn(()=>{window.removeEventListener("blur",Rt),(Ut.value||nn.active.value)&&(i("update:dragging",!1),i("drag-preview",null)),nn.active.value&&i("update:xfm",null),nn.cancel(),Bt&&clearTimeout(Bt)}),Je(b,$=>
246i("update:view-center",ad({x:$.x+$.w/2,y:$.y+$.h/2})),{immediate:!0});const Lt=G(null),on=C(()=>{const $=Lt.value;if(!$)return null;const J=fn({x:Math.min($.x0,$.x1),y:Math.min($.y0,$.y1)}),T=fn({x:Math.max($.x0,$.x1),y:Math.max($.y0,$.y1)});return{x:J.x,y:J.y,width:T.x-J.x,height:T.y-J.y}});function Dt($){const J=$.closest(".bb-speed-flag");if(J){const Ct=J.closest("[data-id]"),dt=J.getAttribute("data-last");if(Ct&&dt!==null)return{kind:"speedFlag",id:Ct.getAttribute("data-id"),last:Number(dt)}}const T=$.closest(".bb-handle-resize");if(T){const Ct=T.closest("[data-id]"),dt=T.getAttribute("data-handle");if(Ct&&dt)return{kind:"resize",id:Ct.getAttribute("data-id"),handle:dt}}const Ee=$.closest(".bb-handle-rotate");if(Ee){const Ct=Ee.closest("[data-id]");if(Ct)return{kind:"rotate",id:Ct.getAttribute("data-id")}}const ze=$.closest(".bb-actor-start-hit");if(ze){const Ct=ze.closest("[data-id]");if(Ct)return{kind:"start",id:Ct.getAttribute("data-id")}}const at=$.closest(".bb-facing-key-handle");if(at){const Ct=at.closest(".bb-facing-key"),dt=at.closest("[data-id]"),Qe=Ct?.getAttribute("data-index");if(dt&&Qe!==null&&Qe!==void 0)return{kind:"facing-rotate",id:dt.getAttribute("data-id"),index:Number(Qe)}}const st=$.closest(".bb-waypoint");if(st){const Ct=st.closest("[data-id]"),dt=st.getAttribute("data-index");if(Ct&&dt!==null){const Qe=Number(dt),Pt=Ct.getAttribute("data-id");return st.classList.contains("bb-path-end")?{kind:"path-end",id:Pt,index:Qe}:{kind:"waypoint",id:Pt,index:Qe}}}const pt=$.closest(".bb-actor-path-hit, .bb-speed-seg");if(pt){const Ct=pt.closest("[data-actor-id]")??pt.closest("[data-id]"),dt=Ct?.getAttribute("data-actor-id")??Ct?.getAttribute("data-id");if(dt)return{kind:"path",id:dt}}const ln=$.closest("[data-id]");if(ln){const Ct=ln.getAttribute("data-id");if(en(Ct))return{kind:"item",id:Ct}}return{kind:"empty"}}function Un($){return $.kind==="actor"?le.value.get($.data.id)?.position??$.data.start.position:$.kind==="prop"?$.data.center:$.kind==="camera"?$.data.position:$.data.offsetM}function Ro($){if($.kind==="actor"){const T=le.value.get($.data.id);return{kind:"actor",authored:{headingDeg:$.data.start.headingDeg,position:$.data.start.position},displayed:T&&{headingDeg:T.headingDeg,position:T.position}}}if($.kind==="camera"){const T=Ye.value.find(Ee=>Ee.id===$.data.id);return{kind:"camera",authored:{headingDeg:$.data.headingDeg,position:$.data.position},displayed:T&&{headingDeg:T.headingDeg,position:T.position}}}const J=Ce.value.find(T=>T.id===$.data.id);return{kind:"prop",authored:{headingDeg:$.data.headingDeg,position:$.data.center},displayed:J&&{headingDeg:J.headingDeg,position:J.center}}}function xo($,J,T){const Ee=l.value?.getBoundingClientRect();Ut.value={kind:"pan",pointerId:$.pointerId,id:null,entityKind:null,startClient:T,startBoard:J,startViewBox:{...b.value},unitsPerPxAtStart:sd(b.value,{w:Ee?.width??0,h:Ee?.height??0}),moved:!1},Dn($)}function Dn($){try{l.value?.setPointerCapture?.($.pointerId)}catch{}l.value?.focus?.({preventScroll:!0}),Ge()}function On($){!o.readonly&&$.button===1&&$.preventDefault()}function $a($){if($.preventDefault(),$.button===2){i("pick-cancel");return}const J=Dt($.target);let T=null;if(J.kind==="item"&&!s.value.has(J.id)){const Ee=en(J.id)?.kind;(Ee==="actor"||Ee==="prop"||Ee==="camera")&&(T=J.id)}i("pick",{point:eo($.clientX,$.clientY),targetId:T})}let Ja=!1;function ei($){if(o.readonly)return;if(Ja=!1,ut=null,Ve(),At.value=null,o.pick&&($.button===0||$.button===2)){$a($);return}if(nn.active.value){if($.button===0&&!($.ctrlKey&&_v())){$.preventDefault(),he();return}if($.button===2||$.button===0){$.preventDefault(),xe(),Ja=!0;return}if($.button!==1)return}const J=$U(Ut.value?{pointerId:Ut.value.pointerId}:null,{pointerId:$.pointerId,button:$.button,ctrlKey:$.ctrlKey},_v());if(J==="ignore"||J==="context")return;if(J==="middle-pan"){$.preventDefault(),xo($,eo($.clientX,$.clientY),{x:$.clientX,y:$.clientY}),Ut.value&&(Ut.value.middle=!0);return}const T=eo($.clientX,$.clientY),Ee={x:$.clientX,y:$.clientY},ze=$.target,at=Dt(ze),st="id"in at&&s.value.has(at.id)?{kind:"empty"}:at;if(st.kind==="speedFlag"){ut={pointerId:$.pointerId,actorId:st.id,last:st.last};return}if(st.kind==="empty"){if($.shiftKey){Ut.value={kind:"marquee",pointerId:$.pointerId,id:null,entityKind:null,startClient:Ee,startBoard:T,moved:!1},Dn($),Lt.value={x0:T.x,y0:T.y,x1:T.x,y1:T.y};return}xo($,T,Ee);return}if(st.kind==="waypoint"||st.kind==="path-end"){const Qe=en(st.id),Pt=Qe?.kind==="actor"?Qe.data.path.waypoints[st.index]:void 0;Ut.value={kind:st.kind,pointerId:$.pointerId,id:st.id,entityKind:"actor",waypointIndex:st.index,startClient:Ee,startBoard:T,startValue:Pt?{x:Pt.x,y:Pt.y}:T,obstacles:Qe?.kind==="actor"?Ra(f.value,p.value,Qe.data):[],moved:!1},Dn($);return}if(st.kind==="start"){const Qe=en(st.id);if(!Qe||Qe.kind!=="actor")return;const Pt=re(Qe.data);Ut.value={kind:"start",pointerId:$.pointerId,id:st.id,entityKind:"actor",startClient:Ee,startBoard:T,startValue:Pt,grabOffset:{x:Pt.x-T.x,y:Pt.y-T.y},obstacles:Ra(f.value,p.value,Qe.data),alt:$.altKey,moved:!1},Dn($);return}if(st.kind==="path"){const Qe=en(st.id);if(!Qe||Qe.kind!=="actor")return;Ut.value={kind:"path",pointerId:$.pointerId,id:st.id,entityKind:"actor",waypointIndex:Yf(Qe.data,T),startClient:Ee,startBoard:T,obstacles:Ra(f.value,p.value,Qe.data),moved:!1},Dn($);return}if(st.kind==="facing-rotate"){const Qe=en(st.id);if(!Qe||Qe.kind!=="actor")return;const Pt=Qe.data.facingKeys[st.index];if(!Pt)return;const qt=mn(Qe.data,Pt.atSec).position;Ut.value={kind:"facing-rotate",pointerId:$.pointerId,id:st.id,entityKind:"actor",waypointIndex:st.index,startClient:Ee,startBoard:T,center:qt,startHeading:Pt.headingDeg,startAngle:tr(qt,T),moved:!1},Dn($);return}if(st.kind==="rotate"){const Qe=en(st.id);
246if(!Qe||Qe.kind!=="prop"&&Qe.kind!=="camera"&&Qe.kind!=="actor")return;const Pt=Ro(Qe),qt=l3(Pt);Ut.value={kind:"rotate",pointerId:$.pointerId,id:st.id,entityKind:Qe.kind,startClient:Ee,startBoard:T,center:qt,startHeading:r3(Pt),startAngle:tr(qt,T),moved:!1},Dn($);return}if(st.kind==="resize"){const Qe=en(st.id);if(!Qe||Qe.kind!=="prop")return;const Pt=q.value.get(Qe.data.id)?.center,qt=Qe.data.center;Ut.value={kind:"resize",pointerId:$.pointerId,id:st.id,entityKind:"prop",handle:st.handle,startClient:Ee,startBoard:T,carryOffset:Pt?{x:Pt.x-qt.x,y:Pt.y-qt.y}:void 0,startValue:{center:Pt??qt,widthM:Qe.data.widthM,depthM:Qe.data.depthM,headingDeg:Qe.data.headingDeg},moved:!1},Dn($);return}const pt=en(st.id);if(!pt)return;const ln=Un(pt),Ct=o.selection?.ids??[];if(Ct.length>=2&&Ct.includes(st.id)&&pt.kind!=="opening"){const{targets:Qe,carriedSkipped:Pt}=id({snapshot:o.snapshot,partId:o.partId,ids:Ct,mode:"move",displayed:zo(),lockedIds:o.lockedIds,carried:de.value});if(Qe.length>0){Ut.value={kind:"group",pointerId:$.pointerId,id:st.id,entityKind:pt.kind,startClient:Ee,startBoard:T,startValue:ln,grabOffset:{x:ln.x-T.x,y:ln.y-T.y},groupTargets:Qe,notice:Pt?"tool.blockingBoard.stage.carriedNoMove":void 0,moved:!1},Dn($);return}}const dt=pt.kind==="prop"&&q.value.has(pt.data.id);Ut.value={kind:"item",pointerId:$.pointerId,id:st.id,entityKind:pt.kind,startClient:Ee,startBoard:T,startValue:ln,grabOffset:pt.kind==="opening"?void 0:{x:ln.x-T.x,y:ln.y-T.y},displayed:pt.kind==="actor"?ln:void 0,obstacles:pt.kind==="actor"?Ra(f.value,p.value,pt.data):pt.kind==="prop"?vu(f.value,p.value,pt.data):[],locked:pt.kind==="camera"&&pt.data.keys.length>0||dt,notice:dt?"tool.blockingBoard.stage.carriedNoMove":void 0,alt:$.altKey,moved:!1},Dn($)}function Cs($){return O.value.filter(J=>J.id!==$)}function jo($){Zn={x:$.clientX,y:$.clientY};const J=eo($.clientX,$.clientY);if(o.pick?.kind==="opening"&&Ie(J),(o.pick?.kind==="walk"||o.pick?.kind==="run")&&(lt.value=J),nn.active.value&&Ut.value?.kind!=="pan"){_e.value=!1,nn.pointer(J,{shift:$.shiftKey,ctrl:$.ctrlKey});return}const T=Ut.value;if(!T||!el(T,$.pointerId))return;if(EU($)){xa();return}const Ee=$.clientX-T.startClient.x,ze=$.clientY-T.startClient.y;if(!T.moved&&!i3(Ee,ze)&&(T.moved=!0),T.kind==="pan"){if(!T.startViewBox||T.unitsPerPxAtStart===void 0)return;b.value=Ev(T.startViewBox,Ee,ze,T.unitsPerPxAtStart);return}const at=eo($.clientX,$.clientY);if(T.kind==="marquee"){Lt.value={x0:T.startBoard.x,y0:T.startBoard.y,x1:at.x,y1:at.y};return}if(!T.moved)return;const st=$.shiftKey,pt=x1(V.value,{ctrl:$.ctrlKey});if(T.kind==="waypoint"||T.kind==="path-end"){const dt=si(at,{snap:pt,shift:st}),Qe=en(T.id),Pt=Qe?.kind==="actor"?cl(T.previewValue??T.startValue,dt,Vt(Qe.data),T.obstacles??[]):dt;T.previewValue=Pt,i("drag-preview",{id:T.id,position:Pt,waypointIndex:T.waypointIndex});return}if(T.kind==="start"){if(!T.id)return;const dt=en(T.id);if(!dt||dt.kind!=="actor")return;const Qe=T.grabOffset?{x:at.x+T.grabOffset.x,y:at.y+T.grabOffset.y}:at,Pt=si(Qe,{snap:pt,shift:st}),qt=cl(T.previewValue??T.startValue,Pt,Vt(dt.data),T.obstacles??[]);if(T.previewValue=qt,T.alt){const kt=T.startValue;i("drag-preview",{id:T.id,routeDelta:{x:Tn(qt.x-kt.x),y:Tn(qt.y-kt.y)}})}else i("drag-preview",{id:T.id,startPosition:qt});return}if(T.kind==="path"){if(!T.id||T.waypointIndex===void 0)return;const dt=en(T.id);if(!dt||dt.kind!=="actor")return;const Qe=si(at,{snap:pt,shift:st}),Pt=cl(T.previewValue??T.startBoard,Qe,Vt(dt.data),T.obstacles??[]);T.previewValue=Pt,i("drag-preview",{id:T.id,insertAt:T.waypointIndex,position:Pt});return}if(T.kind==="facing-rotate"){if(!T.id||!T.center||T.startHeading===void 0||T.startAngle===void 0)return;const dt=tr(T.center,at),Qe=tv(T.startHeading,T.startAngle,dt,{snap:pt,shift:st});T.previewValue=Qe,i("drag-preview",{id:T.id,heading:Qe,waypointIndex:T.waypointIndex});return}if(T.kind==="rotate"){if(!T.id||!T.center||T.startHeading===void 0||T.startAngle===void 0)return;const dt=tr(T.center,at),Qe=tv(T.startHeading,T.startAngle,dt,{snap:pt,shift:st});T.previewValue=Qe,i("drag-preview",{id:T.id,heading:Qe});return}if(T.kind==="resize"){if(!T.id||!T.handle)return;const dt=T.startValue,Qe={x:at.x-T.startBoard.x,y:at.y-T.startBoard.y},Pt=n3(Qe,dt.headingDeg),qt=a3(dt,T.handle,Pt);
246T.previewValue=qt,i("drag-preview",{id:T.id,size:{widthM:qt.widthM,depthM:qt.depthM},position:qt.center});return}if(T.kind==="group"){if(!T.groupTargets||!T.grabOffset)return;T.notice&&!T.noticed&&(T.noticed=!0,i("notice",T.notice));const dt=T.startValue,Qe=si({x:at.x+T.grabOffset.x,y:at.y+T.grabOffset.y},{snap:pt,shift:st}),Pt=Wf({snapshot:o.snapshot,partId:o.partId,targets:T.groupTargets,mode:"move",axis:null,value:{x:Tn(Qe.x-dt.x),y:Tn(Qe.y-dt.y)},timeSec:o.timeSec,authoredSecOf:o.authoredSecOf});T.previewValue=Pt.commands,ge(Pt.previews);return}if(!T.id||!T.entityKind)return;if(T.locked){T.noticed||(T.noticed=!0,i("notice",T.notice??"tool.blockingBoard.inspector.cameraHasKeys"));return}if(T.entityKind==="opening"){const dt=en(T.id);if(!dt||dt.kind!=="opening")return;const Qe=mh(f.value,dt.data,at);T.previewValue=Qe,i("drag-preview",{id:T.id,openingOffsetM:Qe});return}const ln=T.grabOffset?{x:at.x+T.grabOffset.x,y:at.y+T.grabOffset.y}:at;if(T.entityKind==="actor"){const dt=en(T.id);if(!dt||dt.kind!=="actor")return;const Qe=T.displayed,Pt=si(ln,{snap:pt,shift:st});T.rawPoint=Pt;const qt=cl(T.previewValue??Qe,Pt,Vt(dt.data),T.obstacles??[]);T.previewValue=qt;const kt=Math.hypot(Qe.x-dt.data.start.position.x,Qe.y-dt.data.start.position.y)<1e-6,An={id:T.id,position:qt};kt||(An.routeDelta={x:Tn(qt.x-Qe.x),y:Tn(qt.y-Qe.y)}),i("drag-preview",An);return}let Ct=si(ln,{snap:pt,shift:st});if(T.entityKind==="prop"){const dt=en(T.id);if(dt?.kind==="prop"){pt&&(Ct=s3({center:Ct,widthM:dt.data.widthM,depthM:dt.data.depthM},Cs(T.id))),T.rawPoint=Ct;const Qe=T.previewValue??dt.data.center,Pt=new Map(O.value.map(An=>[An.id,An])),qt=Id({...dt.data,center:Ct},O.value,Pt),kt=PI(T.obstacles??[],qt,Pt);Ct=CI({...dt.data,center:Qe},Ct,kt),T.supportPreview=Id({...dt.data,center:Ct},O.value,Pt)?.id??null}}T.previewValue=Ct,i("drag-preview",{id:T.id,position:Ct})}function Ea($){const J=Math.min($.x0,$.x1),T=Math.max($.x0,$.x1),Ee=Math.min($.y0,$.y1),ze=Math.max($.y0,$.y1),at=pt=>pt.x>=J&&pt.x<=T&&pt.y>=Ee&&pt.y<=ze,st=[];for(const pt of p.value.actors){const ln=le.value.get(pt.id)?.position??pt.start.position;at(ln)&&st.push(pt.id)}for(const pt of O.value)at(pt.center)&&st.push(pt.id);for(const pt of p.value.cameras)at(pt.position)&&st.push(pt.id);return st.filter(pt=>!a.value.has(pt)&&!s.value.has(pt))}function Uo($){if(!$.id)return!0;const J=en($.id);return J?($.kind==="waypoint"||$.kind==="path-end")&&J.kind==="actor"?$.waypointIndex!==void 0&&$.waypointIndex<J.data.path.waypoints.length:$.kind==="facing-rotate"&&J.kind==="actor"?$.waypointIndex!==void 0&&$.waypointIndex<J.data.facingKeys.length:!0:!1}function Br($){if(!Uo($))return null;if($.kind==="waypoint"||$.kind==="path-end")return!$.id||$.waypointIndex===void 0||!$.previewValue?null:{type:"actor.moveWaypoint",actorId:$.id,index:$.waypointIndex,point:$.previewValue};if($.kind==="path")return!$.id||$.waypointIndex===void 0||!$.previewValue?null:{type:"actor.addWaypoint",actorId:$.id,index:$.waypointIndex,point:$.previewValue};if($.kind==="start"){if(!$.id||$.previewValue===void 0)return null;const J=en($.id);if(!J||J.kind!=="actor")return null;const T=$.previewValue;if($.alt){const Ee=$.startValue;return{type:"actor.translate",actorId:$.id,delta:{x:Tn(T.x-Ee.x),y:Tn(T.y-Ee.y)}}}return J.data.positionKeys.length>=2?{type:"actor.movePositionKey",actorId:$.id,index:me(J.data),point:T}:{type:"actor.moveStart",actorId:$.id,position:T}}if($.kind==="facing-rotate"){if(!$.id||$.waypointIndex===void 0||$.previewValue===void 0)return null;const J=en($.id);if(!J||J.kind!=="actor")return null;const T=J.data.facingKeys[$.waypointIndex],ze={headingDeg:$.previewValue};return T?.targetId&&(ze.targetId=null),{type:"actor.setFacingKey",actorId:$.id,index:$.waypointIndex,patch:ze}}if($.kind==="rotate"){if(!$.id||$.previewValue===void 0)return null;const J=$.previewValue;if($.entityKind==="camera")return{type:"camera.setField",cameraId:$.id,patch:{headingDeg:J}};if($.entityKind==="actor"){const T=en($.id);return!T||T.kind!=="actor"?null:xh(T.data,$.center,J,o.timeSec,o.authoredSecOf?.($.id)??o.timeSec)}return{type:"prop.rotate",propId:$.id,headingDeg:J}}if($.kind==="resize"){if(!$.id||!$.previewValue)return null;const J=$.previewValue,T=$.carryOffset;return{type:"prop.resize",propId:$.id,widthM:J.widthM,depthM:J.depthM,center:T?{x:Tn(J.center.x-T.x),y:Tn(J.center.y-T.y)}:J.center}}if($.kind==="item"){if(!$.id||$.previewValue===void 0)return null;if($.entityKind==="actor"){const J=en($.id);return!J||J.kind!=="actor"?null:hh(J.data,$.displayed,$.previewValue)}if($.entityKind==="prop")return{type:"prop.place",propId:$.id,center:$.previewValue,
246supportPropId:$.supportPreview??null};if($.entityKind==="camera")return{type:"camera.move",cameraId:$.id,position:$.previewValue};if($.entityKind==="opening")return{type:"opening.move",openingId:$.id,offsetM:$.previewValue}}return null}function _r($,J){if($.kind!=="item"||!$.id||!$.rawPoint||$.entityKind!=="actor"&&$.entityKind!=="prop")return null;const T={snapshot:o.snapshot,partId:o.partId,timeSec:o.timeSec,dragged:{kind:$.entityKind,id:$.id},rawPoint:$.rawPoint,displayed:$.displayed??$.startValue,moveCommand:J,supportPicked:!!$.supportPreview},Ee=L1(T)??K1(T,!!$.alt);if(!Ee)return null;const ze=Zn??$.startClient;return{ctx:T,hit:Ee,clientX:ze.x,clientY:ze.y}}function ti($){const J=Ut.value;if(!J)return;if(Ut.value=null,He(),J.kind==="pan"){!J.moved&&!J.middle&&i("select-many",[]);return}if(J.kind==="marquee"){const ze=Lt.value;if(Lt.value=null,!ze||!J.moved)return;const at=o.selection?.ids??[],st=Ea(ze).filter(pt=>!at.includes(pt));i("select-many",[...at,...st]);return}if(!J.moved){(J.kind==="item"||J.kind==="path"||J.kind==="group")&&J.id&&i("select",J.id,$),i("drag-preview",null),(J.kind==="waypoint"||J.kind==="path-end")&&J.id&&J.waypointIndex!==void 0&&ea(J.startClient.x,J.startClient.y,J.id,J.waypointIndex);return}if(J.kind==="group"){i("drag-preview",null);const ze=J.previewValue??[],at=J.groupTargets?.length??0;ze.length>0&&Uo(J)&&i("commit-many",ze,{label:Xf("move",at)});return}const T=Br(J);i("drag-preview",null);const Ee=T?_r(J,T):null;Ee?i("drop-choice",Ee):T&&i("drag-commit",T),J.kind==="item"&&J.id&&!L(J.id)&&i("select",J.id,!1)}function Ar($){if(ut?.pointerId===$.pointerId){const J=ut;ut=null,bn($.clientX,$.clientY,J.actorId,J.last);return}el(Ut.value,$.pointerId)&&ti($.shiftKey||$.metaKey||$.ctrlKey)}function xa(){Ut.value=null,Lt.value=null,He(),i("drag-preview",null)}function Ni($){ut=null,el(Ut.value,$.pointerId)&&xa()}function Li($){el(Ut.value,$.pointerId)&&xa()}function Tr(){nn.active.value&&(_e.value=!0),ut=null,Zn=null,yt.value&&Ie(null),lt.value=null}const Bs={"xfm.move":"move","xfm.rotate":"rotate","xfm.scale":"scale"};function Ki($,J){const T=Bs[$];return T?Y(T,J):!1}function Fi($,J){const T=p.value.actors.find(at=>at.id===$);if(!T)return{kind:"empty"};const Ee=Yf(T,J),ze=$s(T,p.value.durationSec).find(at=>Ee>=at.first&&Ee<=at.last);return{kind:"path",actorId:$,point:J,insertIndex:Ee,groupLast:ze?.last??null,atSec:Rb(T,J,p.value.durationSec)}}const Rr=new Set(["path","waypoint","path-end","speedFlag","facing-rotate"]);function vo($){if(o.readonly||($.preventDefault(),o.pick))return;if(Ja){Ja=!1;return}if(nn.active.value){xe();return}if(Ut.value)return;const J=document.elementFromPoint?.($.clientX,$.clientY)??null,T=J&&l.value?.contains(J)?J:$.target,Ee=Dt(T),ze=Rr.has(Ee.kind)&&"id"in Ee&&s.value.has(Ee.id)?{kind:"empty"}:Ee,at=eo($.clientX,$.clientY);if(ze.kind==="waypoint"||ze.kind==="path-end"){ea($.clientX,$.clientY,ze.id,ze.index);return}if(ze.kind==="speedFlag"){bn($.clientX,$.clientY,ze.id,ze.last);return}let st={kind:"empty"};ze.kind==="facing-rotate"?st={kind:"facingKey",actorId:ze.id,index:ze.index}:ze.kind==="path"?st=Fi(ze.id,at):ze.kind!=="empty"&&(st={kind:"entity",id:ze.id},!L(ze.id)&&!s.value.has(ze.id)&&i("select",ze.id,!1)),i("context-menu",{view:"2d",clientX:$.clientX,clientY:$.clientY,floor:at,hit:st})}function Dr($){if(o.readonly)return;const J=Dt($.target);if(J.kind!=="path"||s.value.has(J.id))return;const T=en(J.id);if(!T||T.kind!=="actor")return;const Ee=eo($.clientX,$.clientY),ze=Rb(T.data,Ee,p.value.durationSec),at=mn(T.data,ze).headingDeg;i("drag-commit",{type:"actor.addFacingKey",actorId:J.id,atSec:ze,headingDeg:at})}function z($){el(Ut.value,$.pointerId)&&ti($.shiftKey||$.metaKey||$.ctrlKey)}function be($){Ni($)}function Ge(){window.addEventListener("pointerup",z),window.addEventListener("pointercancel",be)}function He(){window.removeEventListener("pointerup",z),window.removeEventListener("pointercancel",be)}let gt=null,Bt=null;function Gn($){if(o.readonly)return;if($.altKey){const ze=$.target.closest("[data-id]"),at=ze?en(ze.getAttribute("data-id")):null;if(at?.kind==="camera"){const st=zd($.deltaY,$.deltaMode??0,window.innerHeight);if(st===0)return;const pt=at.data.id;if(at.data.keys.length>0){gt!==pt&&(gt=pt,i("notice","tool.blockingBoard.inspector.cameraHasKeys")),Bt&&clearTimeout(Bt),Bt=setTimeout(()=>{gt=null},Gv);return}const ln=st<0?.1:-.1,Ct=Math.min(30,Math.max(.05,at.data.heightM+ln));i("drag-commit",{type:"camera.setField",cameraId:pt,patch:{heightM:Ct}},{coalesceKey:`camHeight:${pt}`,label:{key:"tool.blockingBoard.history.cameraHeight",name:ka(o.snapshot)[pt]}});return}}if(!l.value)return;const J=Zj({deltaX:$.deltaX,deltaY:$.deltaY,deltaMode:$.deltaMode,ctrlKey:$.ctrlKey,shiftKey:$.shiftKey},window.innerHeight);if(J.kind==="none")return;if(J.kind==="zoom"){const ze=Mv(l.value,$.clientX,$.clientY);if(!ze)return;b.value=$v(b.value,ze,J.factor,h.value.w);return}const T=l.value.getBoundingClientRect(),Ee=sd(b.value,{w:T.width,h:T.height});b.value=Ev(b.value,J.dxPx,J.dyPx,Ee)}function yo($,J){$.key==="Enter"&&i("select",J,!1)}function an($){const J=o.frameState?.actors[$]?.position,T=J?null:en($),Ee=J??(T?T.kind==="actor"?T.data.start.position:T.kind==="prop"?T.data.center:T.kind==="camera"?T.data.position:null:null);if(!Ee)return;const ze=fn(Ee);b.value={...b.value,x:ze.x-b.value.w/2,y:ze.y-b.value.h/2}}let _s=0;function zu(){const $=Date.now();$-_s>Gv&&i("notice","tool.blockingBoard.stage.carriedNoMove"),_s=$}function As($,J){if(o.readonly||Ut.value||nn.active.value)return!1;const{targets:T,carriedSkipped:Ee}=id({snapshot:o.snapshot,partId:o.partId,ids:o.selection?.ids??[],mode:"move",displayed:zo(),lockedIds:o.lockedIds,carried:de.value});if(Ee&&zu(),T.length===0)return!1;const{commands:ze}=Wf({snapshot:o.snapshot,partId:o.partId,targets:T,mode:"move",axis:null,value:{x:$,y:J},timeSec:o.timeSec,authoredSecOf:o.authoredSecOf});if(ze.length===0)return!1;const at={coalesceKey:`stage2d.nudge:${T.map(st=>st.id).sort().join(",")}`,label:Xf("nudge",T.length)};return ze.length===1?i("drag-commit",ze[0],at):i("commit-many",ze,at),!0}function Or(){const $=new Map([...le.value].map(([T,Ee])=>[T,Ee.position])),J=SU(o.snapshot,o.partId,o.selection?.ids??[],$);b.value=J?IU(J,b.value,h.value,1):is(f.value,2)}function Nr($){const J=l.value;if(!J)return null;const T=so();if($==="cursor"&&T&&Zn)return{board:T,client:{...Zn}};const Ee=b.value,ze=J.getBoundingClientRect();return{board:ad({x:Ee.x+Ee.w/2,y:Ee.y+Ee.h/2}),client:{x:ze.left+ze.width/2,y:ze.top+ze.height/2}}}function rc($){switch($.id){case"xfm.move":case"xfm.rotate":case"xfm.scale":return Y(Bs[$.id],so());case"xfm.axisX":case"xfm.axisY":return nn.active.value?(nn.axis($.id==="xfm.axisX"?"x":"y"),!0):!1;case"xfm.typeChar":return nn.active.value?(nn.typeChar($.arg.char),!0):!1;case"xfm.confirm":return he();case"xfm.cancel":return xe();case"stage2d.nudge":return As($.arg.dx,$.arg.dy);case"stage2d.frameSelected":return Or(),!0}return $.id==="stage2d.zoom100"?(b.value=Vj(b.value,h.value),!0):$.id==="stage2d.zoomFitRoom"?(b.value=is(f.value,2),!0):$.id==="stage.cancelDrag"&&Ut.value?(xa(),!0):!1}return t({focusOn:an,runKeyAction:rc,placementFor:Nr,runXfmAt:Ki,shakeHud:jt}),($,J)=>(v(),k("div",{ref_key:"rootEl",ref:c,class:qe(["bb-board",{"bb-board--readonly":e.readonly,"bb-board--dragging":Ut.value?.moved,"bb-board--picking":!!e.pick}]),"data-bb-area":"stage2d"},[e.background?(v(),et(oG,{key:0,background:e.background,"view-box":b.value,"container-size":d.value,"photo-url":e.photoUrl},null,8,["background","view-box","container-size","photo-url"])):H("",!0),(v(),k("svg",{ref_key:"svgEl",ref:l,class:"bb-board-svg",xmlns:"http://www.w3.org/2000/svg",tabindex:"-1",viewBox:I.value,"aria-hidden":e.readonly?"true":void 0,onPointerdown:ei,onPointermove:jo,onPointerup:Ar,onPointercancel:Ni,onLostpointercapture:Li,onPointerleave:Tr,onWheel:un(Gn,["prevent"]),onContextmenu:vo,onMousedown:On,onAuxclick:On,onDblclick:Dr},[J[10]||(J[10]=m("defs",null,[m("pattern",{id:"bb-grid-pattern",width:"40",height:"40",patternUnits:"userSpaceOnUse"},[m("path",{d:"M 40 0 L 0 0 0 40",fill:"none",stroke:"var(--bb-grid, #cdc8bc)","stroke-width":"0.5"})])],-1)),e.options?.grid!==!1?(v(),k("rect",{key:0,class:"bb-grid",x:b.value.x,y:b.value.y,width:b.value.w,height:b.value.h,fill:"url(#bb-grid-pattern)"},null,8,F9)):H("",!0),ce(MG,{room:f.value,"door-states":e.frameState?.o
246penings??void 0,"floor-opaque":!e.background?.visible,"label-scale":A.value,"opening-preview":F.value,"hidden-opening-ids":e.hiddenIds},null,8,["room","door-states","floor-opaque","label-scale","opening-preview","hidden-opening-ids"]),Be.value?(v(),k("rect",{key:1,class:"bb-opening-pick-preview",transform:Be.value.transform,x:Be.value.x,y:Be.value.y,width:Be.value.width,height:Be.value.height},null,8,H9)):H("",!0),e.readonly?H("",!0):(v(),et(LV,{key:2,actors:X.value,"label-scale":A.value,visible:e.options?.paths!==!1},null,8,["actors","label-scale","visible"])),(v(!0),k(ae,null,Me(ht.value,T=>(v(),et(Ov,{key:T.id,prop:T,selected:L(T.id),labels:e.options?.labels,"label-scale":A.value,focusable:!e.readonly,locked:s.value.has(T.id),pickable:Xt(T),carried:"carried"in T&&T.carried,layer:"body",onKeydown:Ee=>yo(Ee,T.id),onPointerenter:Ee=>$o.value=T.id,onPointerleave:Ee=>$o.value===T.id&&($o.value=null)},null,8,["prop","selected","labels","label-scale","focusable","locked","pickable","carried","onKeydown","onPointerenter","onPointerleave"]))),128)),(v(!0),k(ae,null,Me(Et.value,(T,Ee)=>(v(),et(JV,{key:T.id,camera:T,selected:L(T.id),active:Mo(T.id),viewing:T.id===e.viewingCameraId,labels:e.options?.labels,"show-fan":Ln(T.id),"aim-point":co(T.id)?yn(T):null,"label-scale":A.value,"short-label":g(h5)(T.name,p.value.cameras.findIndex(ze=>ze.id===T.id)),"display-name":g(ui)(T,$.$t("tool.blockingBoard.cameraFallback",{n:Ee+1})),"label-dy":na(T.id).dy,"label-hidden":na(T.id).hidden,detail:e.options?.detail===!0,focusable:!e.readonly,locked:s.value.has(T.id),onKeydown:ze=>yo(ze,T.id)},null,8,["camera","selected","active","viewing","labels","show-fan","aim-point","label-scale","short-label","display-name","label-dy","label-hidden","detail","focusable","locked","onKeydown"]))),128)),m("g",z9,[(v(!0),k(ae,null,Me(Eo.value,T=>(v(),k("g",{key:`more-${T.id}`,class:"bb-camera-more-badge",transform:`translate(${T.x} ${T.y})`,"aria-label":$.$t("tool.blockingBoard.board.moreCameras",{n:T.count})},[m("title",null,S(T.title),1),m("circle",{r:10*A.value},null,8,U9),m("text",{"font-size":10*A.value},S(`+${T.count}`),9,G9)],8,j9))),128))]),m("g",V9,[(v(!0),k(ae,null,Me(ht.value,T=>(v(),et(Ov,{key:`label-${T.id}`,prop:T,labels:e.options?.labels,"label-scale":A.value,carried:"carried"in T&&T.carried,"label-dy":Hn.value.get(T.id)?.dy??0,"label-hidden":ta(T),layer:"label"},null,8,["prop","labels","label-scale","carried","label-dy","label-hidden"]))),128))]),m("g",W9,[r.value?(v(),k("polyline",{key:0,class:"bb-detour",points:r.value},null,8,X9)):H("",!0)]),ce(L9,{issues:It.value,"frame-state":e.frameState,part:p.value,options:{issues:e.options?.issues,axis:e.options?.axis}},null,8,["issues","frame-state","part","options"]),m("g",Y9,[(v(!0),k(ae,null,Me(go.value,(T,Ee)=>(v(),k("circle",{key:`${T.actorId}-${Ee}`,class:"bb-ghost-dot","data-actor-id":T.actorId,cx:T.position.x*g(it),cy:T.position.y*g(it),r:g(Vt)(p.value.actors.find(ze=>ze.id===T.actorId))*g(it),opacity:T.opacity},null,8,q9))),128))]),m("g",Z9,[(v(!0),k(ae,null,Me(e.onionSkin??[],(T,Ee)=>(v(),k("circle",{key:`onion-${T.actorId}-${Ee}`,class:"bb-onion-dot","data-actor-id":T.actorId,"data-offset":T.offsetSec,cx:T.position.x*g(it),cy:T.position.y*g(it),r:(p.value.actors.find(ze=>ze.id===T.actorId)?g(Vt)(p.value.actors.find(ze=>ze.id===T.actorId)):.3)*g(it),fill:T.offsetSec>0?"none":"var(--color-white-alpha-50)",stroke:T.offsetSec>0?"var(--color-white-alpha-50)":"none","stroke-dasharray":T.offsetSec>0?"2 2":void 0,opacity:g(qj)(T.offsetSec)},null,8,J9))),128))]),(v(!0),k(ae,null,Me(tt.value,T=>(v(),et(TV,{key:T.id,actor:fe(T),state:le.value.get(T.id),"start-point":re(T),"facing-key-points":Ze(T),"facing-key-target-points":ye(T),"blocked-from-sec":Q(T.id),"blocked-at-point":$e(T.id),"path-split":Fe(T),selected:L(T.id),paused:le.value.get(T.id)?.paused??!1,"radius-m":g(Vt)(T),labels:e.options?.labels,paths:e.options?.paths,"label-scale":A.value,"label-placement":B.value[T.id],"origin-shift":wa(T.id),"time-sec":e.timeSec,arrivals:Z(fe(T)),initial:D(T),speed:Mn.value.get(T.id),detail:e.options?.detail===!0,"now-sec":e.authoredSecOf?.(T.id)??e.timeSec,"bar-top-y":N.value,focusable:!e.readonly,locked:s.value.has(T.id),bar:Ma.value===T.id,onKeydown:Ee=>yo(Ee,T.id),onAct:Ee=>i("actor-act",{actorId:T.id,kind:Ee}),onSpeedHover:Ee=>Xe(T.id,Ee),onSpeedOpen:Ee=>we(T.id,Ee)},null,8,["actor","state","start-point","facing-key-points","facing-key-target-points","blocked-from-sec","blocked-at-point","path-split","selected","paused","radius-m","labels","paths","label-scale","label-placement","origin-s
246hift","time-sec","arrivals","initial","speed","detail","now-sec","bar-top-y","focusable","locked","bar","onKeydown","onAct","onSpeedHover","onSpeedOpen"]))),128)),Ke.value?(v(),k("g",Q9,[m("polyline",{points:Ke.value.points,"stroke-width":2*A.value,"stroke-dasharray":`${5*A.value} ${4*A.value}`},null,8,eW),m("text",{x:Ke.value.x,y:Ke.value.y-12*A.value,"font-size":11*A.value},S($.$t("tool.blockingBoard.board.pick.arrive",{t:Ke.value.t})),9,tW)])):H("",!0),m("g",nW,[(v(!0),k(ae,null,Me(e.frameState?.contacts??[],(T,Ee)=>(v(),k("circle",{key:`${T.actorId}-${Ee}`,class:"bb-contact-marker",cx:T.point.x*g(it),cy:T.point.y*g(it),r:8*A.value},null,8,oW))),128))]),Ft.value?(v(),k("line",{key:4,class:qe(`bb-xfm-axis-${Ft.value.axis}`),x1:Ft.value.x1,y1:Ft.value.y1,x2:Ft.value.x2,y2:Ft.value.y2,stroke:Ft.value.axis==="x"?"#ff5d5d":"#4f8fe0","stroke-width":A.value,"pointer-events":"none"},null,10,aW)):H("",!0),e.addMarker?(v(),k("g",{key:5,class:"bb-add-marker","pointer-events":"none",transform:`translate(${e.addMarker.x*g(it)} ${e.addMarker.y*g(it)})`},[m("circle",{r:14*A.value,fill:"none",stroke:"#fdcb1d","stroke-width":1.5*A.value,"stroke-dasharray":`${3*A.value} ${3*A.value}`},null,8,iW),m("path",{d:`M ${-6*A.value} 0 H ${6*A.value} M 0 ${-6*A.value} V ${6*A.value}`,stroke:"#fdcb1d","stroke-width":1.5*A.value},null,8,rW)],8,sW)):H("",!0),on.value?(v(),k("rect",{key:6,class:"bb-marquee",x:on.value.x,y:on.value.y,width:on.value.width,height:on.value.height},null,8,lW)):H("",!0)],40,K9)),e.readonly?H("",!0):(v(),et(l9,{key:1,active:g(nn).status.value?.mode??"select","can-transform":bt.value,"can-scale":Yt.value,onTool:J[0]||(J[0]=T=>Y(T,null))},null,8,["active","can-transform","can-scale"])),e.pick?(v(),k(ae,{key:2},[e.hidePickHud?H("",!0):(v(),k("div",{key:0,class:qe(["bb-pick-hud",{"bb-pick-hud--shake":ct.value}])},S($.$t(`tool.blockingBoard.board.pick.${e.pick.kind}`))+" · "+S($.$t("tool.blockingBoard.board.pick.now",{t:e.timeSec.toFixed(1)})),3))],64)):R.value?(v(),et(s9,{key:3,status:R.value},null,8,["status"])):H("",!0),At.value&&ne.value?(v(),k("div",{key:4,class:"bb-speed-tip",role:"tooltip",style:wt({left:`${At.value.left}px`,top:`${At.value.top}px`}),onPointerdown:J[1]||(J[1]=un(()=>{},["stop"])),onPointerenter:Ve,onPointerleave:J[2]||(J[2]=T=>Xe(At.value.actorId,null)),onFocusin:Ve,onFocusout:J[3]||(J[3]=T=>Xe(At.value.actorId,null))},[(v(!0),k(ae,null,Me(ne.value.items,T=>(v(),k("div",{key:T.seg,class:"bb-speed-tip-item"},[m("strong",cW,[m("i",{class:qe(["bb-speed-tip-swatch",`bb-speed-tip-swatch--${T.problem?"bad":T.cls}`])},null,2),We(S($.$t(`tool.blockingBoard.speed.class.${T.cls}`)),1)]),m("span",dW,S(W(T,$.$t)),1),T.problem?(v(),k("span",uW,S($.$t(`tool.blockingBoard.speed.tip.${T.problem}`)),1)):H("",!0),ne.value.locked?H("",!0):(v(),k("button",{key:1,type:"button",class:"bb-speed-tip-change",onClick:Ee=>ve(Ee,T.last)},S($.$t("tool.blockingBoard.speed.tip.change")),9,pW))]))),128))],36)):H("",!0),Re.value?(v(),et(m9,{key:5,x:Re.value.x,y:Re.value.y,current:Re.value.current,mps:Re.value.mps,onPick:Qn,onClose:J[4]||(J[4]=T=>Re.value=null)},null,8,["x","y","current","mps"])):H("",!0),e.overlays?.detour?(v(),k("div",fW,[m("span",mW,S($.$t("tool.blockingBoard.detour.blocked",te(e.overlays.detour,$.$t))),1),m("button",{type:"button",class:"bb-detour-apply",onClick:J[5]||(J[5]=T=>i("detour-apply"))},S($.$t("tool.blockingBoard.detour.autoApply")),1),m("button",{type:"button",class:"bb-detour-ignore",onClick:J[6]||(J[6]=T=>i("detour-ignore"))},S($.$t("tool.blockingBoard.detour.ignore")),1)])):H("",!0),e.readonly?H("",!0):(v(),k("div",hW,[m("button",{type:"button",class:"bb-zoom-out",title:$.$t("tool.blockingBoard.stage.zoomOut"),onPointerdown:J[7]||(J[7]=un(()=>{},["stop"])),onClick:x}," â ",40,bW),m("span",gW,S(y.value)+"%",1),m("button",{type:"button",class:"bb-zoom-in",title:$.$t("tool.blockingBoard.stage.zoomIn"),onPointerdown:J[8]||(J[8]=un(()=>{},["stop"])),onClick:M}," + ",40,vW),m("button",{type:"button",class:"bb-zoom-fit",title:$.$t("tool.blockingBoard.stage.zoomFit"),onPointerdown:J[9]||(J[9]=un(()=>{},["stop"])),onClick:_},S($.$t("tool.blockingBoard.stage.zoomFitShort")),41,yW)]))],2))}}),Ll=Object.assign(ot($W,[["__scopeId","data-v-aaa8ff30"]]),{__name:"BbBoardStage"}),EW={class:"bb-align"},xW={class:"bb-align-header"},PW={class:"bb-align-title"},CW={class:"bb-align-step"},BW={class:"bb-align-panes"}
246,_W={class:"bb-align-pane bb-align-pane-photo"},AW={class:"bb-align-pane-label"},TW={class:"bb-align-photo-frame"},RW=["src","alt"],DW={class:"bb-align-pane bb-align-pane-plan"},OW={class:"bb-align-pane-label"},NW={class:"bb-align-plan-frame"},LW=["viewBox"],KW=["cx","cy","onClick"],FW=["cx","cy"],HW=["x","y"],zW={key:0,class:"bb-align-error"},jW={class:"bb-align-actions"},UW=["disabled"],Vv=4,GW=nt({__name:"BbPhotoAlign",props:{photoUrl:{},widthPx:{},heightPx:{},room:{},initialPlanPoints:{}},emits:["apply","cancel"],setup(e,{emit:t}){const n=e,o=t;function a(_){const O=_.widthM/2,A=_.depthM/2;return[{x:-O,y:-A},{x:O,y:-A},{x:O,y:A},{x:-O,y:A}]}const s=C(()=>n.initialPlanPoints??a(n.room)),i=G([]),r=G(null),l=G(null),c=C(()=>r.value===null&&i.value.length<Vv),d=C(()=>i.value.length===Vv),u=C(()=>d.value?"tool.blockingBoard.align.ready":r.value!==null?"tool.blockingBoard.align.pickPlan":"tool.blockingBoard.align.pickPhoto");function p(){i.value=[],r.value=null}function f(_){if(!c.value)return;l.value=null;const O=_.currentTarget,A=_,N=O.naturalWidth/O.clientWidth,K=O.naturalHeight/O.clientHeight;r.value={x:A.offsetX*N,y:A.offsetY*K}}function h(_){r.value!==null&&(l.value=null,i.value=[...i.value,{photo:r.value,plan:_}],r.value=null)}function b(){if(!d.value)return;const _=SI(i.value.map(O=>O.photo),i.value.map(O=>O.plan));if(!_.ok){l.value="tool.blockingBoard.align.degenerate",p();return}o("apply",_.H,i.value.map(O=>({photo:{...O.photo},board:{...O.plan}})))}function I(){o("cancel")}const y=C(()=>{const _="align-part";return{schemaVersion:Ha,...Sr(),projectId:"align",name:"align",scene:{sceneId:"align",title:"align"},room:n.room,refs:{characters:[],backgrounds:[],props:[]},parts:[{partId:_,title:"align",durationSec:1,castRefIds:[],actors:[],props:[],cameras:[],timeline:{actions:[],dialogues:[],propEvents:[],coverages:[],cuts:[]},prompt:{blocks:{},cutTexts:{}}}],activePartId:_,settings:{fps:24,lightTime:"day",lightDirectionDeg:45,easing:"smooth"},source:null}}),w=C(()=>is(n.room,1)),M=C(()=>`${w.value.x} ${w.value.y} ${w.value.w} ${w.value.h}`),x=C(()=>String(i.value.length+1));return(_,O)=>(v(),k("div",EW,[m("div",xW,[m("span",PW,S(_.$t("tool.blockingBoard.align.title")),1),m("span",CW,S(_.$t(g(u))),1)]),m("div",BW,[m("div",_W,[m("div",AW,S(_.$t("tool.blockingBoard.align.step1")),1),m("div",TW,[m("img",{class:"bb-align-photo",src:e.photoUrl,alt:_.$t("tool.blockingBoard.align.title"),onClick:f},null,8,RW),(v(!0),k(ae,null,Me(g(i),(A,N)=>(v(),k("div",{key:`photo-marker-${N}`,class:"bb-align-marker",style:wt({left:`${A.photo.x/e.widthPx*100}%`,top:`${A.photo.y/e.heightPx*100}%`})},S(N+1),5))),128)),g(r)?(v(),k("div",{key:0,class:"bb-align-marker bb-align-marker--pending",style:wt({left:`${g(r).x/e.widthPx*100}%`,top:`${g(r).y/e.heightPx*100}%`})},S(g(x)),5)):H("",!0)])]),m("div",DW,[m("div",OW,S(_.$t("tool.blockingBoard.align.step2")),1),m("div",NW,[ce(Ll,{snapshot:g(y),"part-id":g(y).activePartId,"time-sec":0,readonly:""},null,8,["snapshot","part-id"]),(v(),k("svg",{class:"bb-align-plan-overlay",viewBox:g(M)},[(v(!0),k(ae,null,Me(g(s),(A,N)=>(v(),k("circle",{key:`candidate-${N}`,class:"bb-align-candidate",cx:g(fn)(A).x,cy:g(fn)(A).y,r:"8",onClick:K=>h(A)},null,8,KW))),128)),(v(!0),k(ae,null,Me(g(i),(A,N)=>(v(),k("g",{key:`plan-marker-${N}`},[m("circle",{class:"bb-align-marker",cx:g(fn)(A.plan).x,cy:g(fn)(A.plan).y,r:"7"},null,8,FW),m("text",{class:"bb-align-marker-label",x:g(fn)(A.plan).x,y:g(fn)(A.plan).y},S(N+1),9,HW)]))),128))],8,LW))])])]),g(l)?(v(),k("p",zW,S(_.$t(g(l))),1)):H("",!0),m("div",jW,[m("button",{type:"button",class:"bb-align-cancel",onClick:I},S(_.$t("tool.blockingBoard.align.cancel")),1),m("button",{type:"button",class:"bb-align-apply",disabled:!g(d),onClick:b},S(_.$t("tool.blockingBoard.align.apply")),9,UW)])]))}}),VW=Object.assign(ot(GW,[["__scopeId","data-v-9d3ba45f"]]),{__name:"BbAlignBbPhotoAlign"}),Wv=.1,WW=.25,z1="background.anchors";function Ud(e){const t=e.widthM/2,n=e.depthM/2;return[{x:-t,y:-n},{x:t,y:-n},{x:t,y:n},{x:-t,y:n}]}function Xv(e,t){return{ok:!1,issue:Le("IMAGE_PATH_ANCHORS_INSUFFICIENT",{path:z1,params:{count:e}}
246),tooClose:t}}function j1(e,t,n){if(e.length<b0)return Xv(e.length,[]);const o=Math.hypot(t.widthPx,t.heightPx)*Wv,a=Math.hypot(n.widthM,n.depthM)*Wv,s=new Set;for(let r=0;r<e.length;r++)for(let l=r+1;l<e.length;l++){const c=e[r],d=e[l],u=Math.hypot(c.photo.x-d.photo.x,c.photo.y-d.photo.y),p=Math.hypot(c.board.x-d.board.x,c.board.y-d.board.y);(u<o||p<a)&&(s.add(r),s.add(l))}if(s.size>0)return Xv(e.length,[...s].sort((r,l)=>r-l));const i=o5(e.map(r=>r.photo),e.map(r=>r.board));return i.ok?{ok:!0,H:i.H}:{ok:!1,issue:Le("HOMOGRAPHY_DEGENERATE",{path:z1}),tooClose:[]}}function XW(e,t,n){const o=_u(e);if(!o)return[];const a=Ud(t).map(i=>({photo:uh(o,i),board:i}));return a.every(({photo:i})=>Number.isFinite(i.x)&&Number.isFinite(i.y)&&i.x>=0&&i.x<=n.widthPx&&i.y>=0&&i.y<=n.heightPx)?a:[]}function YW(e,t){const n=u0(e),o=n?Mt.coordinateAbsMaxM:e.widthM/2,a=n?Mt.coordinateAbsMaxM:e.depthM/2,s=Math.min(Math.max(t.x,-o),o),i=Math.min(Math.max(t.y,-a),a);return{board:{x:s,y:i},clamped:s!==t.x||i!==t.y}}function qW(e,t,n){const o=uh(e,n);return YW(t,{x:Math.round(o.x*1e3)/1e3,y:Math.round(o.y*1e3)/1e3})}function ZW(e,t){return uh(e,t)}function Yv(e){return JSON.stringify(e.map(t=>({x:t.x,y:t.y,...t.atSec!==void 0&&{atSec:t.atSec},pauseSec:t.pauseSec})))}function JW(e){const n=e.snapshot.parts.find(r=>r.partId===e.partId)?.actors.find(r=>r.id===e.actorId),o=e.snapshot.background;if(!n||!o&&!e.backgroundSet)return[];const a=[];let s;e.backgroundSet?(a.push({type:"background.set",...e.backgroundSet}),s=!0):s=JSON.stringify(o.anchors)!==JSON.stringify(e.anchors)||o.homography===null,s&&a.push({type:"background.setHomography",H:[...e.H],anchors:e.anchors.map(r=>({photo:{...r.photo},board:{...r.board}}))}),e.clearPositionKeys&&n.positionKeys.length>0&&a.push({type:"actor.clearPositionKeys",actorId:n.id});const i=n.start.position;return(e.start.x!==i.x||e.start.y!==i.y)&&a.push({type:"actor.moveStart",actorId:n.id,position:{...e.start}}),Yv(e.waypoints)!==Yv(n.path.waypoints)&&a.push({type:"actor.replacePath",actorId:n.id,waypoints:e.waypoints.map(r=>({...r}))}),a}const QW="IMAGE_PATH_v1";function qv(e,t){const n=10**t;return Math.round(e*n)/n}function Zv(e,t){return{x:qv(e.x,t),y:qv(e.y,t)}}function e7(e){return{schema:QW,projectId:e.projectId,partId:e.partId,actorId:e.actorId,actorName:e.actorName,photo:{fileName:e.photo.fileName,widthPx:e.photo.widthPx,heightPx:e.photo.heightPx},anchors:e.anchors.map(t=>({photo:{...t.photo},board:{...t.board}})),homography:[...e.H],points:e.points.map((t,n)=>({kind:n===0?"start":"waypoint",index:n,photoPx:Zv(t.photoPx,1),boardM:Zv(t.boardM,3),pauseSec:n===0?0:t.pauseSec,...t.atSec!==void 0&&{atSec:t.atSec}}))}}function Ka(e,t,n,o){return`blocking-board-${e}-${t}-${n}.${o}`}function t7(){return typeof document>"u"?null:{createObjectURL:e=>URL.createObjectURL(e),revokeObjectURL:e=>URL.revokeObjectURL(e),clickLink:(e,t)=>{const n=document.createElement("a");n.href=e,n.download=t,n.click()},defer:e=>{setTimeout(e,0)}}}function Nu(e,t,n){const o=t7();if(!o)return;const a=o.createObjectURL(t);o.clickLink(a,e),o.defer(()=>o.revokeObjectURL(a))}function Ah(e,t){return e?e.widthPx===t.widthPx&&e.heightPx===t.heightPx?{kind:"relink",nameDiffers:e.fileName!==""&&e.fileName!==t.fileName}:{kind:"reset",hadAlignment:e.homography!==null}:{kind:"new"}}function n7(e,t){return!e||!t||e.widthPx!==t.widthPx||e.heightPx!==t.heightPx?null:t.url}function U1(e,t,n){return e.parts.find(o=>o.partId===t)?.actors.find(o=>o.id===n)}function G1(e){return e.anchors.length>0&&e.anchors[e.anchors.length-1].board===null}function o7(e){const t=V1(e.snapshot,e.photo),n=e.photo!==null&&j1(t.map(a=>({photo:a.photo,board:a.board})),e.photo,e.snapshot.room).ok,o={photo:e.photo,photoIsTemp:!1,anchors:t,tab:n?"path":"anchors",actorId:null,tool:"start",start:null,waypoints:[],clearPositionKeys:!1};return e.primaryId?X1(o,e.snapshot,e.partId,e.primaryId):o}function a7(e,t,n){const a=e.photo!==null&&e.photo.widthPx===n.widthPx&&e.photo.heightPx===n.heightPx?e.anchors:Ah(t.background,n).kind==="relink"?V1(t,n):[];return{...e,photo:n,photoIsTemp:!0,anchors:a}}function s7(e,t,n,o){if(!e.actorId||e.clearPositionKeys===o)return e;const a=U1(t,n,e.actorId);return!a||a.positionKeys.length<2?e:{...e,clearPositionKeys:o}}function V1(e,t){const n=e.background;return!n||!t?[]:(n.anchors.length?n.anchors:n.homography?XW(n.homography,e.room,t):[]).map(a=>({photo:{...a.photo},board:{...a.board}}))}function Rp(e){return e.anchors.filter(t=>t.board!==null).map(t=>({photo:{...t.photo},board:{...t.board}}))}function i7(e,t){if(G1(e)){const n=e.anchors.slice();return n[n.length-1]={photo:{...t},board:null},{...e,anchors:n}}return e.anchors.length>=wl?e:{...e,anchors:[...e.anchors,{photo:{...t},board:null}]}}function Jv(e,t,n){if(!G1(e))return e;const o=e.anchors.slice();return o[o.length-1]={photo:o[o.length-1].photo,board:W1(n,t)},{...e,anchors:o}}function Qv(e,t,n,o,a){const s=e.anchors[t];if(!s||n==="board"&&s.board===null)return e;const i=e.anchors.slice();return i[t]=n==="photo"?{...s,photo:{...o}}:{...s,board:W1(a,o)},{...e,anchors:i}}function r7(e,t){return t<0||t>=e.anchors.length?e:{...e,anchors:e.anchors.filter((n,o)=>o!==t)}}function l7(e){return e.anchors.length===0?e:{...e,anchors:[]}}function W1(e,t){let n=null,o=WW;for(const a of Ud(e)){const s=Math.hypot(a.x-t.x,a.y-t.y);s<=o&&(n=a,o=s)}return n??{x:t.x,y:t.y}}
246function c7(e,t,n){return e.tab===t||t==="path"&&!n.ok?e:{...e,tab:t}}function X1(e,t,n,o){const a=U1(t,n,o);if(!a)return e;const s=a.path.waypoints.map(i=>({origin:"board",at:{x:i.x,y:i.y},pauseSec:i.pauseSec,...i.atSec!==void 0&&{atSec:i.atSec}}));return{...e,actorId:o,start:{origin:"board",at:{...a.start.position},pauseSec:0},waypoints:s,tool:s.length?"waypoint":"start",clearPositionKeys:!1}}function d7(e,t){return e.tool===t?e:{...e,tool:t}}function u7(e,t){return e.actorId?e.tool==="start"?{...e,start:{origin:"photo",at:{...t},pauseSec:0},tool:"waypoint"}:e.waypoints.length>=Mt.waypointsPerActor?e:{...e,waypoints:[...e.waypoints,{origin:"photo",at:{...t},pauseSec:0}]}:e}function p7(e,t,n){if(t==="start")return e.start?{...e,start:{...e.start,origin:"photo",at:{...n}}}:e;const o=e.waypoints[t];if(!o)return e;const a=e.waypoints.slice();return a[t]={...o,origin:"photo",at:{...n}},{...e,waypoints:a}}function f7(e,t){return t<0||t>=e.waypoints.length?e:{...e,waypoints:e.waypoints.filter((n,o)=>o!==t)}}function m7(e,t,n,o){const a=e.waypoints[t];if(!a||!Number.isFinite(n))return e;const s=e.waypoints.slice();return s[t]={...a,pauseSec:Math.min(Math.max(n,0),o)},{...e,waypoints:s}}function h7(e,t,n){const o=t?_u(t):null,a=(s,i)=>{const r={pauseSec:i.pauseSec,...i.atSec!==void 0&&{atSec:i.atSec}};if(i.origin==="photo"){if(!t)return{key:s,photo:{...i.at},board:null,clamped:!1,...r};const l=qW(t,n,i.at);return{key:s,photo:{...i.at},board:l.board,clamped:l.clamped,...r}}return{key:s,photo:o?ZW(o,i.at):null,board:{...i.at},clamped:!1,...r}};return[...e.start?[a("start",e.start)]:[],...e.waypoints.map((s,i)=>a(i,s))]}function b7(e,t,n){return e.photo?t.ok?!e.actorId||!e.start?{ok:!1,reason:"actor"}:n.some(o=>!o.board)?{ok:!1,reason:"points"}:{ok:!0}:{ok:!1,reason:"anchors"}:{ok:!1,reason:"photo"}}const g7="#ffffff";function v7(e){const{points:t,color:n}=e;if(t.length===0)return[];const o=Math.hypot(e.photo.widthPx,e.photo.heightPx),a=Math.max(2,Math.round(o*.003)),s=Math.max(6,Math.round(o*.008)),i=Math.max(14,Math.round(o*.015)),r=[];t.length>=2&&r.push({kind:"line",points:t.map(c=>({...c.at})),color:n,width:a}),t.forEach((c,d)=>r.push({kind:"dot",at:{...c.at},radius:s,color:n,label:d===0?"":String(d)}));const l=t[0].at;r.push({kind:"text",at:{x:l.x+s*1.5,y:l.y-s*1.5},text:e.actorName,color:n,size:i});for(const c of t)c.pauseSec>0&&r.push({kind:"text",at:{x:c.at.x+s*1.5,y:c.at.y+s*1.5},text:`${c.pauseSec}s`,color:n,size:i});return r}function y7(e,t){for(const n of t)n.kind==="line"?(e.beginPath(),n.points.forEach((o,a)=>a===0?e.moveTo(o.x,o.y):e.lineTo(o.x,o.y)),e.strokeStyle=n.color,e.lineWidth=n.width,e.stroke()):n.kind==="dot"?(e.beginPath(),e.arc(n.at.x,n.at.y,n.radius,0,Math.PI*2),e.fillStyle=n.color,e.fill(),n.label&&(e.fillStyle=g7,e.font=`${Math.round(n.radius*1.2)}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.fillText(n.label,n.at.x,n.at.y))):(e.fillStyle=n.color,e.font=`${n.size}px sans-serif`,e.textAlign="left",e.textBaseline="middle",e.fillText(n.text,n.at.x,n.at.y))}function k7(e,t,n,o,a){const s=a.createCanvas(t.widthPx,t.heightPx),i=s.getContext("2d");return i?(e==="composite"&&n&&i.drawImage(n,0,0,t.widthPx,t.heightPx),y7(i,o),new Promise((r,l)=>s.toBlob(c=>c?r(c):l(new Error("toBlob failed")),"image/png"))):Promise.reject(new Error("canvas 2d context unavailable"))}function S7(){return{loadImage:e=>new Promise((t,n)=>{const o=new Image;o.onload=()=>t(o),o.onerror=()=>n(new Error("image load failed")),o.src=e}),render:{createCanvas(e,t){const n=document.createElement("canvas");return n.width=e,n.height=t,{getContext:o=>n.getContext(o),toBlob:(o,a)=>n.toBlob(o,a)}}},saveFile:(e,t)=>Nu(e,t)}}function I7(e){const t=Sn(o7({snapshot:e.snapshot(),partId:e.partId(),primaryId:e.primaryId(),photo:e.photo()})),n=C(()=>{const u=t.value.photo;return u?j1(Rp(t.value),u,e.snapshot().room):{ok:!1,issue:Le("IMAGE_PATH_ANCHORS_INSUFFICIENT",{path:"background.anchors",params:{count:0}}),tooClose:[]}}),o=C(()=>h7(t.value,n.value.ok?n.value.H:null,e.snapshot().room)),a=C(()=>b7(t.value,n.value,o.value));function s(u){t.value=u(t.value)}async function i(u){const p=await e.photoLoader.load(u);if(!p)return;const f=t.value.photoIsTemp?t.value.photo:null;s(h=>a7(h,e.snapshot(),p)),f&&e.photoLoader.discard(f)}function r(){const u=t.value;u.photoIsTemp&&u.photo&&e.photoLoader.discard(u.photo)}function l(u){if(u)return e.snapshot().parts.find(p=>p.partId===e.partId())?.actors.find(p=>p.id===u)}async function c(u){const p=t.value,f=n.value,h=l(p.actorId);if(!a.value.ok||!f.ok||!p.photo||!h)return;const b=p.photo,I=o.value,y=e.snapshot().projectId,w=e.partId();if(u==="json"){const O=e7({projectId:y,partId:w,actorId:h.id,actorName:h.name,photo:{f
246ileName:b.fileName,widthPx:b.widthPx,heightPx:b.heightPx},anchors:Rp(p),H:f.H,points:I.map(N=>({photoPx:N.photo,boardM:N.board,pauseSec:N.pauseSec,...N.atSec!==void 0&&{atSec:N.atSec}}))}),A=new Blob([JSON.stringify(O,null,2)],{type:"application/json"});e.deps.saveFile(Ka(y,w,"image-path","json"),A);return}const M=v7({photo:b,actorName:h.name,color:h.color,points:I.map(O=>({at:O.photo,pauseSec:O.pauseSec}))}),x=u==="composite"?await e.deps.loadImage(b.url):null,_=await k7(u,b,x,M,e.deps.render);e.deps.saveFile(Ka(y,w,u==="composite"?"image-path-composite":"image-path-overlay","png"),_)}function d(){const u=t.value,p=n.value;if(!a.value.ok||!p.ok||!u.photo||!u.actorId)return null;const f=e.snapshot(),h=u.photo,b=u.photoIsTemp&&Ah(f.background,h).kind!=="relink"?{fileName:h.fileName.slice(0,gu),widthPx:h.widthPx,heightPx:h.heightPx}:null,I=o.value,y=I.find(x=>x.key==="start"),w=I.filter(x=>x.key!=="start").map(x=>({x:x.board.x,y:x.board.y,...x.atSec!==void 0&&{atSec:x.atSec},pauseSec:x.pauseSec})),M=JW({snapshot:f,partId:e.partId(),actorId:u.actorId,backgroundSet:b,anchors:Rp(u),H:p.H,start:{...y.board},waypoints:w,clearPositionKeys:u.clearPositionKeys});return{actorId:u.actorId,commands:M,adoptPhoto:u.photoIsTemp?h:null}}return{draft:t,check:n,resolved:o,applyState:a,update:s,pickPhoto:i,discardTemp:r,download:c,buildApply:d}}const ey=1.1,w7=.5,M7=8;function $7(e,t){const n=Math.min(t.w/e.widthPx,t.h/e.heightPx);return{scale:n,tx:(t.w-e.widthPx*n)/2,ty:(t.h-e.heightPx*n)/2}}function E7(e,t,n,o){const a=(e.x-t.left-n.tx)/n.scale,s=(e.y-t.top-n.ty)/n.scale;return a<0||s<0||a>o.widthPx||s>o.heightPx?null:{x:a,y:s}}function x7(e,t){return{x:t.tx+e.x*t.scale,y:t.ty+e.y*t.scale}}function P7(e,t,n,o){const a=Math.min(Math.max(e.scale*t,o*w7),o*M7),s=(n.x-e.tx)/e.scale,i=(n.y-e.ty)/e.scale;return{scale:a,tx:n.x-s*a,ty:n.y-i*a}}function C7(e,t,n){const o=Math.min(t.width/n.w,t.height/n.h),a=(t.width-n.w*o)/2,s=(t.height-n.h*o)/2;return ad({x:n.x+(e.x-t.left-a)/o,y:n.y+(e.y-t.top-s)/o})}const B7={class:"bb-img-editor",role:"dialog","aria-modal":"true","aria-labelledby":"bb-img-title"},_7={class:"bb-img-header"},A7={id:"bb-img-title",class:"bb-img-title"},T7={class:"bb-img-tabs",role:"tablist"},R7=["aria-selected"],D7=["aria-selected","aria-disabled"],O7={key:0,class:"bb-img-photo-temp"},N7={class:"bb-img-header-actions"},L7=["disabled","title"],K7={key:0,class:"bb-img-scope-note"},F7={key:1,class:"bb-img-picker-wrap"},H7={class:"bb-img-picker"},z7={class:"bb-img-picker-title"},j7={key:0,class:"bb-img-repick-note"},U7={class:"bb-img-scope-note"},G7={key:2,class:"bb-img-body"},V7=["src","width","height"],W7={class:"bb-img-photo-overlay"},X7=["points","stroke"],Y7=["data-index"],q7=["cx","cy"],Z7=["x","y"],J7=["data-point"],Q7=["cx","cy","fill"],eX={class:"bb-img-panel"},tX={class:"bb-img-panel-title"},nX={class:"bb-img-anchor-hint"},oX={class:"bb-img-anchor-list"},aX=["data-index"],sX={class:"bb-img-anchor-no"},iX={class:"bb-img-cell-photo"},rX={class:"bb-img-cell-board"},lX=["aria-label","onClick"],cX={key:1,class:"bb-img-anchor-limit"},dX=["disabled"],uX={class:"bb-img-panel-title"},pX={key:0,class:"bb-img-actor-empty"},fX={key:1,class:"bb-img-actors"},mX=["data-actor-id","aria-pressed","onClick"],hX={key:2,class:"bb-img-poskeys-note"},bX={class:"bb-img-clear-poskeys-label"},gX=["checked"],vX={key:3,class:"bb-img-tools"},yX=["aria-pressed"],kX=["aria-pressed"],SX={key:4,class:"bb-img-path-table"},IX=["data-point"],wX={class:"bb-img-cell-photo"},MX={class:"bb-img-cell-board"},$X=["value","onChange"],EX=["aria-label","onClick"],xX={key:5,class:"bb-img-clamped-note"},PX={class:"bb-img-panel-title"},CX=["viewBox"],BX=["x","y","width","height"],_X=["points","stroke"],AX=["data-corner","cx","cy","onClick"],TX=["data-index","onPointerdown"],RX=["cx","cy","r"],DX=["x","y"],OX={class:"bb-img-exports"},NX=["disabled"],LX=["disabled"],KX=["disabled"],FX=4,HX=nt({__name:"BbImagePathEditor",props:{snapshot:{},partId:{},primaryId:{},photo:{},photoLoader:{},deps:{}},emits:["apply","cancel"],setup(e,{expose:t,emit:n}){const o=e,a=n,s=I7({snapshot:()=>o.snapshot,partId:()=>o.partId,primaryId:()=>o.primaryId,photo:()=>o.photo,photoLoader:o.photoLoader,deps:o.deps??S7()}),{draft:i,check:r,resolved:l,applyState:c,update:d}=s,u=C(()=>o.snapshot.room),p=C(()=>o.snapshot.parts.find(W=>W.partId===o.partId)),f=C(()=>p.value?.actors??[]),h=C(()=>f.value.find(W=>W.id===i.value.actorId)),b=C(()=>h.value?.positionKeys.length??0),I=C(()=>r.value.ok?[]:r.value.tooClose),y=C(()=>i.value.anchors.filter(W=>W.photo&&W.board).length),w=C(()=>i.value.anchors.at(-1)?.board===null),M=C(()=>!w.value&&i.value.anchors.length>=wl),x=C(()=>l.value.some(W=>W.clamped)),_={photo:"applyNeedsPhoto",anchors:"applyNeedsAnchors",actor:"applyNeedsActor",points:"applyNeedsPoints"},O=C(()=>c.value.ok?void 0:`tool.blockingBoard.imagePath.${_[c.value.reason]}`);Je(()=>r.value.ok,W=>{!W&&i.value.tab==="path"&&d(ve=>({...ve,tab:"anchors"}))});const A=G(null);function N(){A.value?.click()}async function K(W){const ve=W.target,we=ve.files?.[0];ve.value="",we&&await s.pickPhoto(we)}const F=G(null),B=Sn(null);let j=0,ee={w:0,h:0};function D(W){const ve=i.value.photo;if(!ve||W.width<=0||W.height<=0){B.value=null;return}const we=$7(ve,{w:W.width,h:W.height});j=we.scale,ee={w:W.width,h:W.height},B.value=we}function Z(W){return(!B.value||W.width!==ee.w||W.height!==ee.h)&&D(W),B.value}function L(){F.value&&D(F.value.getBoundingClientRect())}let V=null;Je(F,(W,ve,we)=>{W&&(L(),!(typeof ResizeObserver>"u")&&(V=new ResizeObserver(()=>L()),V.observe(W),we(()=>{V?.disconnect(),V=null})))}),Je(()=>i.value.photo,()=>L()),Jn(L),wn(()=>V?.disconnect());const pe=C(()=>{const W=B.value;return W?`matrix(${W.scale},0,0,${W.scale},${W.tx},${W.ty})`:"none"});function le(W){return W&&B.value?x7(W,B.value):null}const me=C(()=>i.value.anchors.map((W,ve)=>
246({index:ve,at:le(W.photo),pending:W.board===null,tooClose:I.value.includes(ve)})));function oe(W){return W!=="start"}function fe(W){return W==="start"?"start":`wp-${W}`}const X=C(()=>l.value.map(W=>({id:fe(W.key),at:le(W.photo),clamped:W.clamped}))),re=C(()=>X.value.filter(W=>W.at).map(W=>`${W.at.x},${W.at.y}`).join(" "));let Se=null,Q={x:0,y:0};function $e(W){const ve=F.value,we=i.value.photo;if(!ve||!we)return null;const Re=ve.getBoundingClientRect(),ut=Z(Re);return ut?E7({x:W.clientX,y:W.clientY},Re,ut,we):null}function Fe(W){Q={x:W.clientX,y:W.clientY};const ve=W.target,we=ve?.closest?.("[data-index]"),Re=ve?.closest?.("[data-point]");if(W.button===1)Se={kind:"pan",lastX:W.clientX,lastY:W.clientY};else if(we)Se={kind:"anchor",index:Number(we.getAttribute("data-index"))};else if(Re){const ut=Re.getAttribute("data-point");Se={kind:"point",key:ut==="start"?"start":Number(ut.slice(3))}}else Se={kind:"click"};W.currentTarget.setPointerCapture?.(W.pointerId)}function Ze(W){if(!Se)return;if(Se.kind==="pan"){const Re=B.value;Re&&(B.value={...Re,tx:Re.tx+W.clientX-Se.lastX,ty:Re.ty+W.clientY-Se.lastY}),Se.lastX=W.clientX,Se.lastY=W.clientY;return}if(Se.kind==="click")return;const ve=$e(W);if(!ve)return;const we=Se;we.kind==="anchor"?d(Re=>Qv(Re,we.index,"photo",ve,u.value)):d(Re=>p7(Re,we.key,ve))}function ue(W){const ve=Se;if(Se=null,!ve||ve.kind!=="click"||Math.hypot(W.clientX-Q.x,W.clientY-Q.y)>=FX)return;const we=$e(W);we&&(i.value.tab==="anchors"?d(Re=>i7(Re,we)):d(Re=>u7(Re,we)))}function ye(W){const ve=F.value;if(!ve)return;const we=ve.getBoundingClientRect(),Re=Z(we);if(!Re)return;const ut=W.deltaY<0?ey:1/ey;B.value=P7(Re,ut,{x:W.clientX-we.left,y:W.clientY-we.top},j)}const Ue=G(null),te=C(()=>is(u.value,.5)),q=C(()=>te.value.w*.025),de=C(()=>{const W=te.value;return`${W.x} ${W.y} ${W.w} ${W.h}`}),Ce=C(()=>{const W=fn({x:-u.value.widthM/2,y:-u.value.depthM/2}),ve=fn({x:u.value.widthM/2,y:u.value.depthM/2});return{x:W.x,y:W.y,w:ve.x-W.x,h:ve.y-W.y}}),Ye=C(()=>Ud(u.value).map(W=>fn(W))),tt=C(()=>i.value.anchors.flatMap((W,ve)=>W.board?[{index:ve,at:fn(W.board),tooClose:I.value.includes(ve)}]:[])),ht=C(()=>l.value.filter(W=>W.board).map(W=>{const ve=fn(W.board);return`${ve.x},${ve.y}`}).join(" "));let Et=null,It=!1;function Xt(W){const ve=Ue.value;return ve?C7({x:W.clientX,y:W.clientY},ve.getBoundingClientRect(),te.value):null}function yt(W,ve){Et=ve,It=!1,W.currentTarget.setPointerCapture?.(W.pointerId)}function Ie(W){if(Et===null)return;const ve=Xt(W);if(!ve)return;const we=Et;It=!0,d(Re=>Qv(Re,we,"board",ve,u.value))}function Be(){Et=null}function lt(W){if(It){It=!1;return}if(!w.value)return;const ve=Xt(W);ve&&d(we=>Jv(we,ve,u.value))}function Ke(W){const ve=Ud(u.value)[W];d(we=>Jv(we,ve,u.value))}function ct(W){d(ve=>c7(ve,W,r.value))}function xt(W){d(ve=>X1(ve,o.snapshot,o.partId,W))}function jt(W){d(ve=>d7(ve,W))}function Jt(W){const ve=W.target.checked;d(we=>s7(we,o.snapshot,o.partId,ve))}function Mn(W,ve){const we=Number.parseFloat(ve.target.value);d(Re=>m7(Re,W,we,p.value?.durationSec??0))}function At(W){return W?`${Math.round(W.x)}, ${Math.round(W.y)}`:"â"}function Ae(W){return W?`${W.x.toFixed(2)}, ${W.y.toFixed(2)}`:"â"}function Ve(){const W=s.buildApply();W&&a("apply",W)}function Xe(){s.discardTemp(),a("cancel")}function ne(W){s.download(W)}return t({cancel:Xe}),(W,ve)=>{const we=vn;return v(),k("div",B7,[m("input",{ref_key:"fileInput",ref:A,class:"bb-img-photo-input",type:"file",accept:"image/jpeg,image/png",hidden:"",onChange:K},null,544),m("header",_7,[m("h2",A7,S(W.$t("tool.blockingBoard.imagePath.title")),1),m("div",T7,[m("button",{type:"button",role:"tab",class:"bb-img-tab","data-img-tab":"anchors","aria-selected":g(i).tab==="anchors"?"true":"false","aria-disabled":"false",onClick:ve[0]||(ve[0]=Re=>ct("anchors"))},[ve[9]||(ve[9]=m("span",{class:"bb-img-step-no"},"1",-1)),We(" "+S(W.$t("tool.blockingBoard.imagePath.tabAnchors")),1)],8,R7),ve[11]||(ve[11]=m("span",{class:"bb-img-step-line","aria-hidden":"true"},null,-1)),m("button",{type:"button",role:"tab",class:"bb-img-tab","data-img-tab":"path","aria-selected":g(i).tab==="path"?"true":"false","aria-disabled":g(r).ok?"false":"true",onClick:ve[1]||(ve[1]=Re=>ct("path"))}
246,[ve[10]||(ve[10]=m("span",{class:"bb-img-step-no"},"2",-1)),We(" "+S(W.$t("tool.blockingBoard.imagePath.tabPath")),1)],8,D7)]),g(i).photoIsTemp?(v(),k("span",O7,S(W.$t("tool.blockingBoard.imagePath.photoTemp")),1)):H("",!0),m("div",N7,[g(i).photo?(v(),k("button",{key:0,type:"button",class:"bb-img-photo-change",onClick:N},S(W.$t("tool.blockingBoard.imagePath.photoChange")),1)):H("",!0),m("button",{type:"button",class:"bb-img-cancel bb-img-btn--ghost",onClick:Xe},S(W.$t("tool.blockingBoard.imagePath.cancel")),1),m("button",{type:"button",class:"bb-img-apply bb-img-btn--primary",disabled:!g(c).ok,title:O.value?W.$t(O.value):void 0,onClick:Ve},S(W.$t("tool.blockingBoard.imagePath.apply")),9,L7)])]),g(i).photo?(v(),k("p",K7,S(W.$t("tool.blockingBoard.imagePath.scopeNote")),1)):H("",!0),g(i).photo?(v(),k("div",G7,[m("div",{ref_key:"frameEl",ref:F,class:"bb-img-photo-frame",onPointerdown:Fe,onPointermove:Ze,onPointerup:ue,onWheel:un(ye,["prevent"])},[m("img",{class:"bb-img-photo",src:g(i).photo.url,width:g(i).photo.widthPx,height:g(i).photo.heightPx,alt:"",draggable:"false",style:wt({transform:pe.value,transformOrigin:"0 0"})},null,12,V7),(v(),k("svg",W7,[re.value?(v(),k("polyline",{key:0,class:"bb-img-path-line",points:re.value,stroke:h.value?.color},null,8,X7)):H("",!0),(v(!0),k(ae,null,Me(me.value,Re=>Zt((v(),k("g",{key:`a${Re.index}`,class:qe(["bb-img-anchor",{"bb-img-anchor--pending":Re.pending,"bb-img-anchor--too-close":Re.tooClose}]),"data-index":Re.index},[m("circle",{cx:Re.at?.x??0,cy:Re.at?.y??0,r:"11"},null,8,q7),m("text",{x:Re.at?.x??0,y:(Re.at?.y??0)+4.5},S(Re.index+1),9,Z7)],10,Y7)),[[cr,Re.at]])),128)),(v(!0),k(ae,null,Me(X.value,Re=>Zt((v(),k("g",{key:Re.id,class:qe(["bb-img-point",{"bb-img-point--clamped":Re.clamped}]),"data-point":Re.id},[m("circle",{cx:Re.at?.x??0,cy:Re.at?.y??0,r:"7",fill:h.value?.color},null,8,Q7)],10,J7)),[[cr,Re.at]])),128))])),m("button",{type:"button",class:"bb-img-fit",onPointerdown:ve[2]||(ve[2]=un(()=>{},["stop"])),onClick:L},S(W.$t("tool.blockingBoard.imagePath.fit")),33)],544),m("aside",eX,[g(i).tab==="anchors"?(v(),k(ae,{key:0},[m("h3",tX,S(W.$t("tool.blockingBoard.imagePath.anchorsTitle")),1),g(r).ok?H("",!0):(v(),k("p",{key:0,class:qe(["bb-img-anchor-status",{"bb-img-anchor-status--hint":y.value<4}])},S(y.value===0?W.$t("tool.blockingBoard.imagePath.pickFirst",{n:y.value}):W.$t(g(r).issue.messageKey,g(r).issue.params??{})),3)),m("p",nX,S(W.$t(w.value?"tool.blockingBoard.imagePath.anchorPickPlan":"tool.blockingBoard.imagePath.anchorPickPhoto")),1),m("ol",oX,[(v(!0),k(ae,null,Me(g(i).anchors,(Re,ut)=>(v(),k("li",{key:ut,class:qe(["bb-img-anchor-row",{"bb-img-anchor-row--too-close":I.value.includes(ut)}]),"data-index":ut},[m("span",sX,S(ut+1),1),m("span",iX,S(At(Re.photo)),1),ve[12]||(ve[12]=m("span",{class:"bb-img-cell-arrow","aria-hidden":"true"},"â",-1)),m("span",rX,S(Ae(Re.board)),1),m("button",{type:"button",class:"bb-img-anchor-remove","aria-label":W.$t("tool.blockingBoard.imagePath.anchorRemove"),onClick:bn=>g(d)(Qn=>g(r7)(Qn,ut))}," Ã ",8,lX)],10,aX))),128))]),M.value?(v(),k("p",cX,S(W.$t("tool.blockingBoard.imagePath.anchorLimit",{max:g(wl)})),1)):H("",!0),m("button",{type:"button",class:"bb-img-anchors-clear",disabled:g(i).anchors.length===0,onClick:ve[3]||(ve[3]=Re=>g(d)(g(l7)))},S(W.$t("tool.blockingBoard.imagePath.anchorsClear")),9,dX)],64)):(v(),k(ae,{key:1},[m("h3",uX,S(W.$t("tool.blockingBoard.imagePath.actorsTitle")),1),f.value.length===0?(v(),k("p",pX,S(W.$t("tool.blockingBoard.imagePath.actorsEmpty")),1)):(v(),k("div",fX,[(v(!0),k(ae,null,Me(f.value,Re=>(v(),k("button",{key:Re.id,type:"button",class:"bb-img-actor","data-actor-id":Re.id,"aria-pressed":g(i).actorId===Re.id?"true":"false",onClick:ut=>xt(Re.id)},[m("span",{class:"bb-img-actor-dot",style:wt({background:Re.color})},null,4),We(" "+S(Re.name),1)],8,mX))),128))])),b.value>=2?(v(),k("div",hX,[m("p",null,S(W.$t("tool.blockingBoard.imagePath.posKeysNote",{count:b.value})),1),m("label",bX,[m("input",{class:"bb-img-clear-poskeys bb-switch",type:"checkbox",role:"switch",checked:g(i).clearPositionKeys,onChange:Jt},null,40,gX),We(" "+S(W.$t("tool.blockingBoard.imagePath.clearPosKeys")),1)])])):H("",!0),g(i).actorId?(v(),k("div",vX,[m("button",{type:"button",class:"bb-img-tool","data-img-tool":"start","aria-pressed":g(i).tool==="start"?"true":"false",onClick:ve[4]||(ve[4]=Re=>jt("start"))},S(W.$t("tool.blockingBoard.imagePath.toolStart")),9,yX),m("button",{type:"button",class:"bb-img-tool","data-img-tool":"waypoint","aria-pressed":g(i).tool==="waypoint"?"true":"false",onClick:ve[5]||
246(ve[5]=Re=>jt("waypoint"))},S(W.$t("tool.blockingBoard.imagePath.toolWaypoint")),9,kX)])):H("",!0),g(l).length?(v(),k("table",SX,[m("thead",null,[m("tr",null,[m("th",null,S(W.$t("tool.blockingBoard.imagePath.colPoint")),1),m("th",null,S(W.$t("tool.blockingBoard.imagePath.colPhoto")),1),m("th",null,S(W.$t("tool.blockingBoard.imagePath.colBoard")),1),m("th",null,S(W.$t("tool.blockingBoard.imagePath.colPause")),1),ve[13]||(ve[13]=m("th",null,null,-1))])]),m("tbody",null,[(v(!0),k(ae,null,Me(g(l),Re=>(v(),k("tr",{key:fe(Re.key),class:qe(["bb-img-path-row",{"bb-img-path-row--clamped":Re.clamped}]),"data-point":fe(Re.key)},[m("td",null,S(oe(Re.key)?Re.key+1:W.$t("tool.blockingBoard.imagePath.pointStart")),1),m("td",wX,S(At(Re.photo)),1),m("td",MX,S(Ae(Re.board)),1),m("td",null,[oe(Re.key)?(v(),k("input",{key:0,class:"bb-img-pause",type:"number",step:"0.1",min:"0",value:Re.pauseSec,onChange:ut=>Mn(Re.key,ut)},null,40,$X)):H("",!0)]),m("td",null,[oe(Re.key)?(v(),k("button",{key:0,type:"button",class:"bb-img-point-remove","aria-label":W.$t("tool.blockingBoard.imagePath.pointRemove"),onClick:ut=>g(d)(bn=>g(f7)(bn,Re.key))}," Ã ",8,EX)):H("",!0)])],10,IX))),128))])])):H("",!0),x.value?(v(),k("p",xX,S(W.$t("tool.blockingBoard.issue.imagePathPointClamped")),1)):H("",!0)],64)),m("h3",PX,S(W.$t("tool.blockingBoard.imagePath.planTitle")),1),(v(),k("svg",{ref_key:"planEl",ref:Ue,class:"bb-img-plan",viewBox:de.value,preserveAspectRatio:"xMidYMid meet",onClick:lt,onPointermove:Ie,onPointerup:Be},[m("rect",{class:"bb-img-plan-room",x:Ce.value.x,y:Ce.value.y,width:Ce.value.w,height:Ce.value.h},null,8,BX),ht.value?(v(),k("polyline",{key:0,class:"bb-img-plan-path",points:ht.value,stroke:h.value?.color},null,8,_X)):H("",!0),(v(!0),k(ae,null,Me(Ye.value,(Re,ut)=>(v(),k("circle",{key:`c${ut}`,class:"bb-img-plan-corner","data-corner":ut,cx:Re.x,cy:Re.y,r:"6",onClick:un(bn=>Ke(ut),["stop"])},null,8,AX))),128)),(v(!0),k(ae,null,Me(tt.value,Re=>(v(),k("g",{key:`p${Re.index}`,class:qe(["bb-img-plan-anchor",{"bb-img-plan-anchor--too-close":Re.tooClose}]),"data-index":Re.index,onPointerdown:un(ut=>yt(ut,Re.index),["stop"])},[m("circle",{cx:Re.at.x,cy:Re.at.y,r:q.value},null,8,RX),m("text",{x:Re.at.x,y:Re.at.y+q.value*.45,style:wt({fontSize:`${q.value*1.2}px`})},S(Re.index+1),13,DX)],42,TX))),128))],40,CX)),m("div",OX,[m("button",{type:"button",class:"bb-img-export","data-kind":"composite",disabled:!g(c).ok,onClick:ve[6]||(ve[6]=Re=>ne("composite"))},S(W.$t("tool.blockingBoard.imagePath.exportComposite")),9,NX),m("button",{type:"button",class:"bb-img-export","data-kind":"overlay",disabled:!g(c).ok,onClick:ve[7]||(ve[7]=Re=>ne("overlay"))},S(W.$t("tool.blockingBoard.imagePath.exportOverlay")),9,LX),m("button",{type:"button",class:"bb-img-export","data-kind":"json",disabled:!g(c).ok,onClick:ve[8]||(ve[8]=Re=>ne("json"))},S(W.$t("tool.blockingBoard.imagePath.exportJson")),9,KX)])])])):(v(),k("div",F7,[m("div",H7,[ce(we,{name:"i-lucide-image-plus",class:"bb-img-picker-icon"}),m("p",z7,S(W.$t("tool.blockingBoard.imagePath.pickTitle")),1),e.snapshot.background?(v(),k("p",j7,[We(S(W.$t("tool.blockingBoard.align.photoMissing"))+" ",1),e.snapshot.background.fileName?(v(),k(ae,{key:0},[We(S(W.$t("tool.blockingBoard.align.photoMissingFile",{name:e.snapshot.background.fileName})),1)],64)):H("",!0)])):H("",!0),m("button",{type:"button",class:"bb-img-pick-button bb-img-btn--primary",onClick:N},S(W.$t("tool.blockingBoard.imagePath.pickButton")),1),m("p",U7,S(W.$t("tool.blockingBoard.imagePath.scopeNote")),1)])]))])}}}),zX=Object.assign(ot(HX,[["__scopeId","data-v-af06ffae"]]),{__name:"BbImgpathBbImagePathEditor"}),jX=["prop","actor","camera"];function UX(e){if(e.kind==="room"||e.kind==="ref")return[];const t=e.targetIds.length>=2,n=[];jX.includes(e.kind)&&(n.push({action:"rename",labelKey:"tool.blockingBoard.tree.menu.rename",disabled:t}),n.push({action:"duplicate",labelKey:"tool.blockingBoard.tree.menu.duplicate",shortcut:"â§D",disabled:t}));const o=e.targetIds.some(s=>!Xs(e.viewState,s));n.push(o?{action:"hide",labelKey:"tool.blockingBoard.tree.menu.hide",shortcut:"H",disabled:!1}:{action:"show",labelKey:"tool.blockingBoard.tree.menu.show",disabled:!1});const a=e.targetIds.some(s=>!lr(e.viewState,s));return n.push(a?{action:"lock",labelKey:"tool.blockingBoard.tree.menu.lock",disabled:!1}:{action:"unlock",labelKey:"tool.blockingBoard.tree.menu.unlock",disabled:!1}),e.hasSupport&&n.push({action:"unsupport",labelKey:"tool.blockingBoard.tree.menu.unsupport",disabled:t}),n.push({action:"delete",labelKey:"tool.blockingBoard.tree.menu.delete",shortcut:"X",disabled:!1}),n}
246function GX(e,t,n){return e.includes(t)?{selectFirst:null,targets:n(e)}:{selectFirst:t,targets:n([t])}}const VX={key:0,role:"separator",class:"bb-context-menu-sep"},WX={key:1,class:"bb-context-menu-row"},XX=["data-id","aria-selected","aria-haspopup","aria-expanded","onPointerenter","onClick"],YX={class:"bb-context-menu-icon","aria-hidden":"true"},qX={class:"bb-context-menu-label"},ZX={key:0,class:"bb-context-menu-shortcut"},JX={key:1,class:"bb-context-menu-arrow"},QX=["role","data-id","aria-selected","aria-checked","aria-haspopup","aria-expanded","onPointerenter","onClick"],eY={class:"bb-context-menu-label"},tY={key:0,class:"bb-context-menu-shortcut"},nY={key:1,class:"bb-context-menu-arrow"},oY=["data-id","aria-selected","onPointerenter","onClick"],aY={class:"bb-context-menu-icon","aria-hidden":"true"},sY={class:"bb-context-menu-label"},iY=nt({__name:"BbContextMenu",props:{x:{},y:{},entries:{}},emits:["run","close"],setup(e,{emit:t}){const n=e,o=t,a=G(null),s=G(n.x),i=G(n.y),r=G(null),l=G(!1),c=G(0),d=G(null),u=G(null),p=G(null),f=G(0),h=G(0),b=G(!1);function I(D){return"id"in D}function y(){const D=n.entries.findIndex(I);return D<0?0:D}c.value=y();function w(){const D=n.entries[c.value];return D&&I(D)?D:null}function M(D,Z){for(let L=D+Z;L>=0&&L<n.entries.length;L+=Z)if(I(n.entries[L]))return L;return D}function x(D){D.children?.length?r.value=D.id:o("run",D.id)}function _(D){r.value=D.id,d.value=0,O()}function O(){u.value=null,p.value=null}function A(D){u.value=D.id,p.value=0}const N=(D,Z)=>Math.max(0,Math.min(D,Z-1));function K(D){const Z=w(),L=Z?.children,V=d.value!==null?L?.[d.value]:void 0,pe=p.value!==null?V?.children:void 0;if(D.key==="ArrowDown"||D.key==="ArrowUp"){const le=D.key==="ArrowDown"?1:-1;pe?p.value=N(p.value+le,pe.length):d.value!==null&&L?(d.value=N(d.value+le,L.length),O()):(c.value=M(c.value,le),r.value=null)}else if(D.key==="Enter")if(pe){const le=pe[p.value];le&&o("run",le.id)}else V?.children?.length?A(V):V?o("run",V.id):Z?.children?.length?_(Z):Z&&o("run",Z.id);else if(D.key==="ArrowRight"){if(pe)return;if(V?.children?.length)A(V);else if(d.value===null&&Z?.children?.length)_(Z);else return}else if(D.key==="ArrowLeft")pe?O():(r.value=null,d.value=null);else return;D.preventDefault(),D.stopPropagation()}function F(D,Z){c.value=D,d.value=null,r.value=Z.children?.length?Z.id:null,O()}function B(D,Z){d.value=D,p.value=null,u.value=Z.children?.length?Z.id:null}function j(D){D.children?.length?u.value=D.id:o("run",D.id)}Je(r,async D=>{if(l.value=!1,h.value=0,!D)return;await hn();const Z=a.value?.querySelector(".bb-context-menu-sub:not(.bb-context-menu-sub--grand)");if(!Z)return;const L=Z.getBoundingClientRect();L.right>window.innerWidth-8&&(l.value=!0);const V=L.bottom-(window.innerHeight-8);V>0&&(h.value=V)}),Je(u,async D=>{if(f.value=0,b.value=l.value,!D)return;await hn();const Z=a.value?.querySelector(".bb-context-menu-sub--grand");if(!Z)return;const L=Z.getBoundingClientRect();!b.value&&L.right>window.innerWidth-8&&(b.value=!0);const V=L.bottom-(window.innerHeight-8);V>0&&(f.value=V)});function ee(D){const Z=D.target;Z instanceof Node&&a.value?.contains(Z)||o("close")}return Jn(()=>{document.addEventListener("pointerdown",ee,!0);const D=a.value;if(D){const Z=D.getBoundingClientRect(),L=Ch(n.x,n.y,Z.width,Z.height,window.innerWidth,window.innerHeight);s.value=L.left,i.value=L.top}D?.focus()}),wn(()=>document.removeEventListener("pointerdown",ee,!0)),(D,Z)=>{const L=vn;return v(),et(wm,{to:"body"},[m("div",{ref_key:"root",ref:a,class:"bb-context-menu bb-ui",role:"menu",tabindex:"-1",style:wt({left:`${s.value}px`,top:`${i.value}px`}),onKeydown:K,onContextmenu:Z[0]||(Z[0]=un(()=>{},["prevent"]))},[(v(!0),k(ae,null,Me(e.entries,(V,pe)=>(v(),k(ae,{key:I(V)?V.id:`sep-${pe}`},[I(V)?(v(),k("div",WX,[m("button",{type:"button",role:"menuitem",class:qe(["bb-context-menu-item",{"is-danger":V.danger}]),"data-id":V.id,"aria-selected":pe===c.value,"aria-haspopup":V.children?.length?"menu":void 0,"aria-expanded":V.children?.length?r.value===V.id:void 0,onPointerenter:le=>F(pe,V),onClick:le=>x(V)},[m("span",YX,[V.icon?(v(),et(L,{key:0,name:`i-lucide-${V.icon}
246`,class:"size-[16px]"},null,8,["name"])):H("",!0)]),m("span",qX,S(D.$t(V.labelKey,V.labelParams??{})),1),V.shortcut?(v(),k("kbd",ZX,S(V.shortcut),1)):H("",!0),V.children?.length?(v(),k("span",JX,"â¸")):H("",!0)],42,XX),V.children?.length&&r.value===V.id?(v(),k("div",{key:0,class:qe(["bb-context-menu-sub",{"is-flip":l.value}]),style:wt(h.value>0?{top:`${-h.value}px`}:void 0),role:"menu"},[(v(!0),k(ae,null,Me(V.children,(le,me)=>(v(),k("div",{key:le.id,class:"bb-context-menu-row"},[m("button",{type:"button",role:le.checked===void 0?"menuitem":"menuitemradio",class:qe(["bb-context-menu-item",{"is-danger":le.danger}]),"data-id":le.id,"aria-selected":pe===c.value&&me===d.value,"aria-checked":le.checked===void 0?void 0:String(le.checked),"aria-haspopup":le.children?.length?"menu":void 0,"aria-expanded":le.children?.length?u.value===le.id:void 0,onPointerenter:oe=>B(me,le),onClick:oe=>j(le)},[m("span",{class:qe(["bb-context-menu-icon",{"bb-context-menu-check":le.checked!==void 0}]),"aria-hidden":"true"},[le.checked!==void 0?(v(),k(ae,{key:0},[We(S(le.checked?"â":""),1)],64)):le.icon?(v(),et(L,{key:1,name:`i-lucide-${le.icon}`,class:"size-[16px]"},null,8,["name"])):H("",!0)],2),m("span",eY,S(D.$t(le.labelKey,le.labelParams??{})),1),le.shortcut?(v(),k("kbd",tY,S(le.shortcut),1)):H("",!0),le.children?.length?(v(),k("span",nY,"â¸")):H("",!0)],42,QX),le.children?.length&&u.value===le.id?(v(),k("div",{key:0,class:qe(["bb-context-menu-sub bb-context-menu-sub--grand",{"is-flip":b.value}]),style:wt(f.value>0?{top:`${-f.value}px`}:void 0),role:"menu"},[(v(!0),k(ae,null,Me(le.children,(oe,fe)=>(v(),k("button",{key:oe.id,type:"button",role:"menuitem",class:qe(["bb-context-menu-item",{"is-danger":oe.danger}]),"data-id":oe.id,"aria-selected":me===d.value&&fe===p.value,onPointerenter:X=>p.value=fe,onClick:X=>o("run",oe.id)},[m("span",aY,[oe.icon?(v(),et(L,{key:0,name:`i-lucide-${oe.icon}`,class:"size-[16px]"},null,8,["name"])):H("",!0)]),m("span",sY,S(D.$t(oe.labelKey,oe.labelParams??{})),1)],42,oY))),128))],6)):H("",!0)]))),128))],6)):H("",!0)])):(v(),k("div",VX))],64))),128))],36)])}}}),Y1=Object.assign(ot(iY,[["__scopeId","data-v-3fb9ecc9"]]),{__name:"BbShellBbContextMenu"}),rY={class:"bb-tree-search-wrap"},lY=["value","placeholder"],cY={class:"bb-tree-chips"},dY=["data-kind","onClick"],uY={class:"bb-object-tree-list",role:"tree","aria-multiselectable":"true"},pY={key:0,class:"bb-tree-empty"},fY=["data-key","data-id","data-entity-id","data-kind","data-depth","aria-level","aria-selected","aria-expanded","tabindex","onClick","onDblclick","onContextmenu","onFocus"],mY={class:"bb-tree-chevron-slot"},hY=["aria-label","onClick"],bY={key:3,class:"bb-tree-label"},gY={key:4,class:"bb-tree-support-chip"},vY={key:5,class:"bb-tree-in-use"},yY={class:"bb-tree-trail"},kY={key:0,class:"bb-tree-subgroup-count"},SY={key:1,class:"bb-tree-group-count"},IY=["aria-pressed","aria-label","title","onClick"],wY=["aria-pressed","aria-label","title","onClick"],MY=nt({__name:"BbObjectTree",props:{snapshot:{},partId:{},selection:{default:()=>({ids:[],primary:null})},filter:{default:""},chipKind:{default:null},collapsed:{default:()=>[]},viewState:{default:()=>va()},activeCameraId:{default:null}},emits:["select","rename","update:filter","update:chipKind","update:collapsed","toggle-hidden","toggle-locked","row-action"],setup(e,{expose:t,emit:n}){const o={room:"tool.blockingBoard.inspector.room",opening:"tool.blockingBoard.inspector.opening",prop:"tool.blockingBoard.inspector.prop",ref:"tool.blockingBoard.tree.refs",actor:"tool.blockingBoard.inspector.actor",camera:"tool.blockingBoard.inspector.camera"},a=["room","opening","prop","ref","actor","camera"],s=e,i=n,r=G(null),l=C(()=>s.snapshot.parts.find(ue=>ue.partId===s.partId)),c=G(s.filter??"");Je(()=>s.filter,ue=>{c.value=ue??""});function d(ue){const ye=ue.target.value;c.value=ye,i("update:filter",ye)}const u=G(s.chipKind??null);Je(()=>s.chipKind,ue=>{u.value=ue??null});function p(ue){const ye=ue==="all"||u.value===ue?null:ue;u.value=ye,i("update:chipKind",ye)}const f=Hk();function h(ue){if("text"in ue)return ue.text;const ye=f?.proxy?.$t;return ye?ye(ue.key,ue.params??{}):ue.key}const b=C(()=>V4({snapshot:s.snapshot,partId:s.partId,filter:c.value,chipKind:u.value,collapsed:s.collapsed??[],viewState:s.viewState??va(),activeCameraId:s.activeCameraId??null,labelText:h})),I=C(()=>c.value.trim()!==""||u.value!==null);function y(ue){return s.selection?.ids.includes(ue)??!1}function w(ue){return[ue.kind==="group"?"bb-tree-group":ue.kind==="subgroup"?"bb-tree-subgroup":"bb-tree-node",{"bb-tree-node--shared":ue.shared,"bb-tree-node--selected":ue.id!==void 0&&y(ue.id),"bb-tree-node--hidden":ue.hidden,"bb-tree-node--locked":ue.locked,"bb-tree-node--context":ue.context===!0}]}function M(ue){if(!ue)return"";const ye=s.snapshot.room.props.find(te=>te.id===ue);return ye?ye.name?.trim()||ue:l.value?.props.find(te=>te.id===ue)?.name?.trim()||ue}function x(ue){i("update:collapsed",bv(s.collapsed??[],ue.key))}const _=G(null),O=C(()=>{const ue=new Set(b.value.map(Ue=>Ue.key)),ye=s.selection?.primary??null;return _.value!==null&&ue.has(_.value)?_.value:ye!==null&&ue.has(ye)?ye:b.value[0]?.key??null});function A(ue){_.value=ue.key}function N(ue,ye){ue.id!==void 0&&(K.value!==null&&L(),i("select",ue.id,ye.shiftKey||ye.metaKey||ye.ctrlKey))}Je(()=>s.selection?.primary,ue=>{if(!ue)return;r.value?.querySelector(`[data-entity-id="${ue}"]`)?.scrollIntoView({block:"nearest"})});
246const K=G(null),F=G(""),B=G(""),j=G(null),ee=G(!1);function D(ue){j.value=ue??null}async function Z(ue){!ue.canRename||ue.id===void 0||(K.value=ue.id,F.value=ue.renameValue,B.value=ue.renameValue,ee.value=!1,await hn(),j.value?.focus(),j.value?.select())}Je(b,ue=>{K.value!==null&&!ue.some(ye=>ye.id===K.value)&&(K.value=null)});function L(){if(K.value===null)return;const ue=F.value.trim();ue&&ue!==B.value&&i("rename",K.value,ue),K.value=null}function V(){K.value=null}function pe(ue){if(ue.key==="Enter"){if(ue.isComposing||ee.value)return;L()}else ue.key==="Escape"&&V()}const le=G(null);function me(){le.value&&(le.value=null)}function oe(ue){const ye=s.snapshot.room.props.find(te=>te.id===ue);if(ye)return ye.supportPropId!==void 0;const Ue=l.value?.props.find(te=>te.id===ue);return Ue?Ue.supportPropId!==void 0:!1}function fe(ue,ye){if(ye.preventDefault(),ue.id===void 0||ue.kind==="room"||ue.kind==="ref"){me();return}const Ue=s.selection?.ids??[],{selectFirst:te,targets:q}=GX(Ue,ue.id,Ye=>k1(s.snapshot,s.partId,Ye));te&&i("select",te,!1);const de=ue.kind==="prop"&&oe(ue.id),Ce=UX({kind:ue.kind,targetIds:q,viewState:s.viewState??va(),hasSupport:de});le.value={x:ye.clientX,y:ye.clientY,items:Ce,targets:q}}function X(ue){if(!ue.disabled){if(ue.action==="rename"){const ye=le.value?.targets[0],Ue=ye!==void 0?b.value.find(te=>te.id===ye):void 0;Ue&&Z(Ue)}else i("row-action",ue.action,le.value?.targets??[]);me()}}const re={rename:"pencil",duplicate:"copy",hide:"eye-off",show:"eye",lock:"lock",unlock:"lock-open",unsupport:"layers",delete:"trash-2"},Se=C(()=>(le.value?.items??[]).filter(ue=>!ue.disabled).map(ue=>({id:ue.action,labelKey:ue.labelKey,shortcut:ue.shortcut,danger:ue.action==="delete",icon:re[ue.action]})));function Q(ue){const ye=le.value?.items.find(Ue=>Ue.action===ue);ye&&X(ye)}Qo("outlinerMenu",()=>le.value!==null,ue=>ue.id==="overlay.close"?(me(),!0):!1);function $e(ue){_.value=ue,hn(()=>{r.value?.querySelector(`[data-key="${CSS.escape(ue)}"]`)?.focus()})}function Fe(ue){if(ue.id!=="outliner.move"&&ue.id!=="outliner.toggle"&&ue.id!=="outliner.activate")return!1;const ye=O.value;if(!ye)return!1;if(ue.id==="outliner.activate"){const te=b.value.find(q=>q.key===ye);return te?.id!==void 0&&i("select",te.id,ue.arg.additive),!0}const Ue=z4(b.value,ye,ue);return Ue.toggleKey&&i("update:collapsed",bv(s.collapsed??[],Ue.toggleKey)),Ue.focusKey&&$e(Ue.focusKey),!0}async function Ze(ue){c.value="",u.value=null,i("update:filter",""),i("update:chipKind",null),await hn();let ye=b.value.find(Ue=>Ue.id===ue);ye||(i("update:collapsed",[]),await hn(),ye=b.value.find(Ue=>Ue.id===ue)),ye&&await Z(ye)}return t({runKeyAction:Fe,renameById:Ze}),(ue,ye)=>{const Ue=vn;return v(),k("div",{ref_key:"rootRef",ref:r,class:"bb-object-tree"},[m("label",rY,[ce(Ue,{name:"i-lucide-search",class:"bb-tree-search-icon"}),m("input",{value:c.value,class:"bb-tree-search",placeholder:ue.$t("tool.blockingBoard.tree.search"),onInput:d},null,40,lY)]),m("div",cY,[m("button",{type:"button",class:qe(["bb-tree-chip",{"bb-tree-chip--active":u.value===null}]),"data-kind":"all",onClick:ye[0]||(ye[0]=te=>p("all"))},S(ue.$t("tool.blockingBoard.tree.chipAll")),3),(v(),k(ae,null,Me(a,te=>m("button",{key:te,type:"button",class:qe(["bb-tree-chip",{"bb-tree-chip--active":u.value===te}]),"data-kind":te,onClick:q=>p(te)},S(ue.$t(o[te])),11,dY)),64))]),m("div",uY,[I.value&&b.value.length===0?(v(),k("p",pY,S(ue.$t("tool.blockingBoard.tree.noResults")),1)):H("",!0),(v(!0),k(ae,null,Me(b.value,te=>(v(),k("div",{key:te.key,class:qe(w(te)),"data-key":te.key,"data-id":te.id,"data-entity-id":te.id,"data-kind":te.id!==void 0?te.kind:void 0,"data-depth":te.depth,role:"treeitem","aria-level":te.depth+1,"aria-selected":te.id!==void 0?y(te.id):void 0,"aria-expanded":te.hasChildren?te.expanded:void 0,tabindex:O.value===te.key?0:-1,style:wt({paddingLeft:`${8+te.depth*16}px`}),onClick:q=>N(te,q),onDblclick:q=>te.canRename&&Z(te),onContextmenu:q=>fe(te,q),onFocus:q=>A(te)},[m("span",mY,[te.hasChildren?(v(),k("button",{key:0,type:"button",class:"bb-tree-chevron","aria-label":te.expanded?ue.$t("tool.blockingBoard.tree.collapse"):ue.$t("tool.blockingBoard.tree.expand"),onClick:un(q=>x(te),["stop"])},[ce(Ue,{name:te.expanded?"i-lucide-chevron-down":"i-lucide-chevron-right"},null,8,["name"])],8,hY)):H("",!0)]),te.kind==="actor"?(v(),k("span",{key:0,class:"bb-tree-actor-dot",style:wt({background:te.color})},null,4)):H("",!0),te.id!==void 0&&te.kind!=="actor"?(v(),et(Ue,{key:1,name:g(j4)(te,e.snapshot),class:"bb-tree-kind-icon","aria-hidden":"true"},null,8,["name"])):H("",!0),K.value===te.id?Zt((v(),k("input",{key:2,"onUpdate:modelValue":ye[1]||(ye[1]=q=>F.value=q),ref_for:!0,ref:D,class:"bb-tree-rename",onKeydown:pe,onBlur:L,onCompositionstart:ye[2]||(ye[2]=q=>ee.value=!0),onCompositionend:ye[3]||(ye[3]=q=>ee.value=!1),onClick:ye[4]||(ye[4]=un(()=>{},["stop"]))},null,544)),[[Nn,F.value]]):(v(),k("span",bY,[te.kind==="group"?(v(),k(ae,{key:0},[te.key==="group:space"?(v(),k(ae,{key:0},[We(S(ue.$t("tool.blockingBoard.tree.space")),1)],64)):te.key==="group:refs"?(v(),k(ae,{key:1},[We(S(ue.$t("tool.blockingBoard.tree.refs")),1)],64)):te.key==="group:part"?(v(),k(ae,{key:2},[We(S(ue.$t("tool.blockingBoard.tree.part"))+": "+S(l.value?.title??""),1)],64)):H("",!0)],64)):te.kind==="subgroup"?(v(),k(ae,{key:1},[te.key==="sub:props"?(v(),k(ae,{key:0},[We(S(ue.$t("tool.blockingBoard.tree.subProps")),1)],64)):te.key==="sub:actors"?(v(),k(ae,{key:1},[We(S(ue.$t("tool.blockingBoard.tree.subActors")),1)],64)):te.key==="sub:cameras"?(v(),k(ae,{key:2}
246,[We(S(ue.$t("tool.blockingBoard.tree.subCameras")),1)],64)):H("",!0)],64)):te.label&&"text"in te.label?(v(),k(ae,{key:2},[We(S(te.label.text),1)],64)):te.label&&te.label.params?(v(),k(ae,{key:3},[We(S(ue.$t(te.label.key,te.label.params)),1)],64)):te.label?(v(),k(ae,{key:4},[We(S(ue.$t(te.label.key)),1)],64)):H("",!0)])),te.supportId?(v(),k("span",gY,S(ue.$t("tool.blockingBoard.tree.supportOn",{name:M(te.supportId)})),1)):H("",!0),te.inUse?(v(),k("span",vY,S(ue.$t("tool.blockingBoard.tree.inUse")),1)):H("",!0),m("span",yY,[te.kind==="subgroup"?(v(),k("span",kY,S(te.count),1)):H("",!0),te.kind==="group"?(v(),k("span",SY,S(te.count),1)):H("",!0),te.hideable&&te.id!==void 0?(v(),k(ae,{key:2},[m("button",{type:"button",class:qe(["bb-tree-lock",{"bb-tree-lock--active":te.locked}]),"aria-pressed":te.locked,"aria-label":te.locked?ue.$t("tool.blockingBoard.tree.unlock"):ue.$t("tool.blockingBoard.tree.lock"),title:te.locked?ue.$t("tool.blockingBoard.tree.unlock"):ue.$t("tool.blockingBoard.tree.lock"),onClick:un(q=>i("toggle-locked",te.id),["stop"])},[ce(Ue,{name:te.locked?"i-lucide-lock":"i-lucide-lock-open"},null,8,["name"])],10,IY),m("button",{type:"button",class:"bb-tree-visibility","aria-pressed":te.hidden,"aria-label":te.hidden?ue.$t("tool.blockingBoard.tree.show"):ue.$t("tool.blockingBoard.tree.hide"),title:te.hidden?ue.$t("tool.blockingBoard.tree.show"):ue.$t("tool.blockingBoard.tree.hide"),onClick:un(q=>i("toggle-hidden",te.id),["stop"])},[ce(Ue,{name:te.hidden?"i-lucide-eye-off":"i-lucide-eye"},null,8,["name"])],8,wY)],64)):H("",!0)])],46,fY))),128))]),le.value?(v(),et(Y1,{key:0,x:le.value.x,y:le.value.y,entries:Se.value,onRun:Q,onClose:me},null,8,["x","y","entries"])):H("",!0)],512)}}}),$Y=Object.assign(ot(MY,[["__scopeId","data-v-497ebc6b"]]),{__name:"BbTreeBbObjectTree"}),EY={class:"bb-side-panel"},xY={class:"bb-side-panel-tabs"},PY=["aria-label"],CY=["aria-label"],BY={key:1,class:"bb-side-panel-badge"},_Y={key:0,class:"bb-side-panel-actions"},AY=["aria-label","title"],TY=nt({__name:"BbSidePanel",props:{snapshot:{},partId:{},selection:{},filter:{},chipKind:{default:null},collapsed:{default:()=>[]},viewState:{default:()=>va()},activeCameraId:{default:null},issues:{default:()=>[]},warnings:{default:()=>[]},report:{},running:{type:Boolean,default:!1}},emits:["select","rename","navigate","auto-detour","add","update:filter","update:chipKind","update:collapsed","toggle-hidden","toggle-locked","row-action"],setup(e,{expose:t,emit:n}){const o=e,a=n,s=G(null);function i(d){return r.value!=="tree"?!1:s.value?.runKeyAction(d)??!1}const r=G("tree");async function l(d){r.value!=="tree"&&(r.value="tree"),await hn(),await s.value?.renameById(d)}t({runKeyAction:i,renameById:l});const c=C(()=>ka(o.snapshot));return(d,u)=>{const p=vn;return v(),k("div",EY,[m("div",xY,[m("button",{type:"button",class:qe(["bb-side-panel-tab",{"bb-side-panel-tab--active":r.value==="tree"}]),onClick:u[0]||(u[0]=f=>r.value="tree")},S(d.$t("tool.blockingBoard.tree.title")),3),m("button",{type:"button",class:qe(["bb-side-panel-tab",{"bb-side-panel-tab--active":r.value==="validation"}]),onClick:u[1]||(u[1]=f=>r.value="validation")},[We(S(d.$t("tool.blockingBoard.tabValidation"))+" ",1),e.report?(v(),k(ae,{key:0},[e.report.errorCount>0?(v(),k("span",{key:0,class:"bb-side-panel-badge bb-side-panel-badge--error","aria-label":d.$t("tool.blockingBoard.validationBadge.errors",{n:e.report.errorCount})},[ce(p,{name:"i-lucide-circle-x",class:"bb-side-panel-badge-icon"}),We(" "+S(e.report.errorCount),1)],8,PY)):H("",!0),e.report.warningCount>0?(v(),k("span",{key:1,class:"bb-side-panel-badge bb-side-panel-badge--warning","aria-label":d.$t("tool.blockingBoard.validationBadge.warnings",{n:e.report.warningCount})},[ce(p,{name:"i-lucide-triangle-alert",class:"bb-side-panel-badge-icon"}),We(" "+S(e.report.warningCount),1)],8,CY)):H("",!0)],64)):e.issues.length>0?(v(),k("span",BY,S(e.issues.length),1)):H("",!0)],2),r.value==="tree"?(v(),k("div",_Y,[m("button",{type:"button",class:"bb-side-panel-add","aria-label":d.$t("tool.blockingBoard.menu.title.add"),title:`${d.$t("tool.blockingBoard.menu.title.add")} (â§A)`,onClick:u[2]||(u[2]=f=>a("add"))},[ce(p,{name:"i-lucide-plus",class:"size-[14px]"})],8,AY)])):H("",!0)]),r.value==="tree"?(v(),et($Y,{key:0,ref_key:"objectTreeRef",ref:s,snapshot:e.snapshot,"part-id":e.partId,selection:e.selection,filter:e.filter,"chip-kind":e.chipKind,collapsed:e.collapsed,"view-state":e.viewState,"active-camera-id":e.activeCameraId,onSelect:u[3]||(u[3]=(f,h)=>a("select",f,h)),onRename:u[4]||(u[4]=(f,h)=>a("rename",f,h)),"onUpdate:filter":u[5]||(u[5]=f=>a("update:filter",f)),"onUpdate:chipKind":u[6]||(u[6]=f=>
246a("update:chipKind",f)),"onUpdate:collapsed":u[7]||(u[7]=f=>a("update:collapsed",f)),onToggleHidden:u[8]||(u[8]=f=>a("toggle-hidden",f)),onToggleLocked:u[9]||(u[9]=f=>a("toggle-locked",f)),onRowAction:u[10]||(u[10]=(f,h)=>a("row-action",f,h))},null,8,["snapshot","part-id","selection","filter","chip-kind","collapsed","view-state","active-camera-id"])):(v(),et(Of,{key:1,report:e.report,issues:e.issues,warnings:e.warnings,running:e.running,"selected-id":e.selection?.primary??null,"entity-labels":c.value,onNavigate:u[11]||(u[11]=f=>a("navigate",f)),onAutoDetour:u[12]||(u[12]=f=>a("auto-detour",f))},null,8,["report","issues","warnings","running","selected-id","entity-labels"]))])}}}),RY=Object.assign(ot(TY,[["__scopeId","data-v-63a313e1"]]),{__name:"BbTreeBbSidePanel"}),ty=6,DY=3,q1=.1,OY=8;function NY(e,t,n){return Math.abs(e-t)<=ty?"trim-start":Math.abs(e-(t+n))<=ty?"trim-end":"move"}function Nc(e){return Math.abs(e)<DY}function ua(e,t){return e/t}function Aa(e,t){return Math.round(e*t)/t}function ny(e,t){if(t.enabled===!1)return Aa(e,t.fps);const n=t.thresholdSec??q1,o=t.playheadSec===void 0?t.neighbors:[...t.neighbors,t.playheadSec];let a=null,s=1/0;for(const i of o){const r=Math.abs(e-i);r<=n&&r<s&&(s=r,a=i)}return a??Aa(e,t.fps)}function oy(e,t){const n=t.thresholdSec??q1,o=t.playheadSec===void 0?t.neighbors:[...t.neighbors,t.playheadSec];let a=null,s=1/0;for(const i of o){const r=Math.abs(e-i);r<=n&&r<s&&(s=r,a=i)}return a===null?null:{value:a,dist:s}}function LY(e,t){if(t.enabled===!1){const s=Aa(e.startSec,t.fps);return{startSec:s,endSec:s+(e.endSec-e.startSec)}}const n=e.endSec-e.startSec,o=oy(e.startSec,t),a=oy(e.endSec,t);if(!o&&!a){const s=Aa(e.startSec,t.fps);return{startSec:s,endSec:s+n}}return o&&(!a||o.dist<=a.dist)?{startSec:o.value,endSec:o.value+n}:{startSec:a.value-n,endSec:a.value}}function KY(e,t,n){return{startSec:e.startSec+(n.startSec-t.startSec),endSec:e.endSec+(n.endSec-t.endSec)}}const ay=xn;function tm(e,t,n,o){return Zs(e,t,n)(o).authoredSec}function Kl(e,t,n,o){return li(e,t,n,o)}function Z1(e,t,n){if(n.positionKeys.length>=2)return n.positionKeys.map(a=>({masterSec:Kl(e,t,n.id,a.atSec),explicit:!0,editable:!1}));if(n.path.waypoints.length===0)return[];const o=_i(n,e.durationSec);return n.path.waypoints.map((a,s)=>{const i=o[s+1]?.atSec??a.atSec??0,r={ref:{row:"waypoint",ownerId:n.id,index:s},masterSec:Kl(e,t,n.id,i),explicit:a.atSec!==void 0,editable:!0};return(a.pauseSec??0)>0&&(r.pauseSec=a.pauseSec),r})}function J1(e,t,n){return n.facingKeys.map((o,a)=>({ref:{row:"facing",ownerId:n.id,index:a},masterSec:Kl(e,t,n.id,o.atSec),explicit:!0,editable:!0}))}function FY(e){return e.keys.map((t,n)=>({ref:{row:"camera",ownerId:e.id,index:n},masterSec:t.atSec,explicit:!0,editable:!0}))}function HY(e,t,n,o){const a=[...Z1(e,t,n).map(r=>r.masterSec),...J1(e,t,n).map(r=>r.masterSec)].sort((r,l)=>r-l),s=1/o,i=[];for(const r of a)(i.length===0||r-i[i.length-1]>s)&&i.push(r);return i.map(r=>({masterSec:r,explicit:!0,editable:!1}))}function zY(e,t,n,o){const a=[{key:"cut",kind:"cut",keys:[]}];for(const s of e.actors)a.push({key:s.id,kind:"actor",ownerId:s.id,keys:HY(e,t,s,o)}),!n.includes(s.id)&&(a.push({key:`${s.id}:position`,kind:"position",ownerId:s.id,keys:Z1(e,t,s)}),a.push({key:`${s.id}:facing`,kind:"facing",ownerId:s.id,keys:J1(e,t,s)}),a.push({key:`${s.id}:action`,kind:"action",ownerId:s.id,keys:[]}),a.push({key:`${s.id}:dialogue`,kind:"dialogue",ownerId:s.id,keys:[]}));for(const s of e.cameras)a.push({key:s.id,kind:"camera",ownerId:s.id,keys:FY(s)});return a}function rd(e,t,n){if(n.row==="camera"){const i=e.cameras.find(r=>r.id===n.ownerId)?.keys[n.index];return i?i.atSec:null}const o=e.actors.find(s=>s.id===n.ownerId);if(!o)return null;if(n.row==="waypoint"){const i=_i(o,e.durationSec)[n.index+1]?.atSec;return i===void 0?null:Kl(e,t,o.id,i)}const a=o.facingKeys[n.index]?.atSec;return a===void 0?null:Kl(e,t,o.id,a)}function nr(e,t){return e.row===t.row&&e.ownerId===t.ownerId&&e.index===t.index}function jY(e,t,n){if(!n)return[t];const o=e.findIndex(a=>nr(a,t));return o===-1?[...e,t]:e.filter((a,s)=>s!==o)}function UY(e,t){const n=[],o=Math.min(t.rowEnd,e.length-1);for(let a=Math.max(0,t.rowStart);a<=o;a++){const s=e[a];if(s)for(const i of s.keys)!i.editable||!i.ref||i.masterSec>=t.startSec-ay&&i.masterSec<=t.endSec+ay&&n.push(i.ref)}return n}function Q1(e){const t=[],n=new Map;for(const o of e){const a=`${o.row}:${o.ownerId}`;n.has(a)||(n.set(a,[]),t.push(a)),n.get(a).push(o)}return t.map(o=>({key:o,refs:n.get(o)}))}function GY(e){return e.row==="waypoint"?{type:"actor.removeWaypoint",actorId:e.ownerId,index:e.index}:e.row==="facing"?{type:"actor.removeFacingKey",actorId:e.ownerId,index:e.index}:{type:"camera.removeKey",cameraId:e.ownerId,index:e.index}}function sy(e){const t=[];for(const n of Q1(e)){const o=[...n.refs].sort((a,s)=>s.index-a.index);for(const a of o)t.push(GY(a))}return t}function ew(e,t,n,o){return n.row==="waypoint"?{type:"actor.setWaypointTime",actorId:n.ownerId,index:n.index,atSec:tm(e,t,n.ownerId,o)}:n.row==="facing"?{type:"actor.moveFacingKey",actorId:n.ownerId,index:n.index,atSec:tm(e,t,n.ownerId,o)}:{type:"camera.moveKey",cameraId:n.ownerId,index:n.index,atSec:o}}function VY(e,t,n,o,a){const s=[];for(const i of Q1(n)){const r=[...i.refs].sort((l,c)=>{const d=rd(e,t,l)??0,u=rd(e,t,c)??0;return o>0?u-d:d-u});for(const l of r){const c=rd(e,t,l);if(c===null)continue;const d=Math.round((c+o)*a)/a,u=Math.min(e.durationSec,Math.max(0,d));s.push(ew(e,t,l,u))}}return s}function WY(e,t){return t.row==="waypoint"?e.actors.find(s=>s.id===t.ownerId)?.path.waypoints[t.index]?.atSec!==void 0?["moveToPlayhead","autoTime","delete"]:["moveToPlayhead","delete"]:["moveToPlayhead","copyToPlayhead","delete"]}function XY(e,t,n,o,a){if(o==="autoTime")return n.row!=="waypoint"?null:{type:"actor.setWaypointTime",actorId:n.ownerId,index:n.index,atSec:null};if(o==="moveToPlayhead")return ew(e,t,n,a);if(n.row==="waypoint")return null;if(n.row==="facing"){const l=e.actors.find(c=>c.id===n.ownerId)?.facingKeys[n.index];return l?{type:"actor.addFacingKey",actorId:n.ownerId,atSec:tm(e,t,n.ownerId,a),headingDeg:l.headingDeg,...l.targetId!==void 0?{targetId:l.targetId}:{}}:null}const i=e.cameras.find(r=>r.id===n.ownerId)?.keys[n.index];return i?{type:"camera.addKey",cameraId:n.ownerId,atSec:a,value:{x:i.x,y:i.y,heightM:i.heightM,headingDeg:i.headingDeg,pitchDeg:i.pitchDeg,rollDeg:i.rollDeg,lensMm:i.lensMm}}:null}const ms=xn;
246function YY(e,t,n){const o=new Set(e.actors.map(p=>p.id)),a=new Set(e.cameras.map(p=>p.id)),s=n.filter(p=>o.has(p)),i=n.filter(p=>a.has(p)),r=s.length>0||i.length>0,l=s.length>0?new Set(s):null,c=i.length>0?new Set(i):null,d=[];for(const p of e.cameras)if(!(r&&!c?.has(p.id)))for(const f of p.keys)d.push(f.atSec);for(const p of e.actors)if(!(r&&!l?.has(p.id))){for(const f of p.positionKeys)d.push(li(e,t,p.id,f.atSec));for(const f of p.facingKeys)d.push(li(e,t,p.id,f.atSec));for(const f of p.poseKeys)d.push(li(e,t,p.id,f.atSec));for(const f of p.path.waypoints)f.atSec!==void 0&&d.push(li(e,t,p.id,f.atSec))}d.sort((p,f)=>p-f);const u=[];for(const p of d)(u.length===0||p-u[u.length-1]>ms)&&u.push(p);return u}function qY(e,t,n){if(n===1){for(const a of e)if(a>t+ms)return a;return null}let o=null;for(const a of e)a<t-ms&&(o=a);return o}function ZY(e,t,n){const o=[...e].sort((i,r)=>i.inSec-r.inSec);if(n===1){for(const i of o)if(i.inSec>t+ms)return i.inSec;return null}let a=-1;for(let i=0;i<o.length;i++)o[i].inSec<=t+ms&&(a=i);if(a===-1)return null;const s=o[a];return s.inSec<t-ms?s.inSec:a>0?o[a-1].inSec:null}function tw(e,t,n){const o=e.find(s=>s.id===n),a=t.find(s=>s.id===n);return o&&a?o.inSec-a.inSec:0}function JY(e,t){return e.find(n=>t>=n.inSec-ms&&t<n.outSec-ms)??null}function QY(e){const{part:t,settled:n,resolved:o,ids:a,keys:s}=e,i=[];for(const c of a){const d=n.actions.find(h=>h.id===c);if(d){i.push(d.settledStartSec,d.settledEndSec);continue}const u=n.dialogues.find(h=>h.id===c);if(u){i.push(u.settledStartSec,u.settledEndSec);continue}const p=o.coverages.find(h=>h.id===c);if(p){i.push(p.startSec,p.endSec);continue}const f=o.cuts.find(h=>h.id===c);f&&i.push(f.inSec,f.outSec)}for(const c of s??[]){const d=rd(t,n,c);d!==null&&i.push(d)}if(i.length===0)return null;const r=Math.min(...i),l=Math.max(...i);return l-r<ms?null:{startSec:r,endSec:l}}function iy(e,t,n){if(n.length===0)return!1;const o=e.timeline.actions.find(r=>r.id===t);if(o)return n.includes(o.actorId);const a=e.timeline.dialogues.find(r=>r.id===t);if(a)return n.includes(a.actorId);const s=e.timeline.coverages.find(r=>r.id===t);if(s)return n.includes(s.cameraId);const i=e.timeline.cuts.find(r=>r.id===t);return i?n.includes(i.cameraId):!1}const Fl=28;function Gd(e){const t=e.map((a,s)=>({block:a,index:s})).sort((a,s)=>a.block.startSec-s.block.startSec||a.block.endSec-s.block.endSec||a.index-s.index),n=[],o=[];for(const{block:a}of t){let s=n.findIndex(i=>i<=a.startSec+1e-9);s===-1?(s=n.length,n.push(a.endSec)):n[s]=a.endSec,o.push({lane:s,block:a})}return o}function Vd(e){return Math.max(1,...e.map(t=>t.lane+1))}function Dp(e){const t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function ry(e){const t=/^#?([0-9a-f]{6})$/i.exec(e.trim());if(!t)return 0;const n=Number.parseInt(t[1],16);return .2126*Dp(n>>16&255)+.7152*Dp(n>>8&255)+.0722*Dp(n&255)}function ly(e,t){const[n,o]=[ry(e),ry(t)].sort((a,s)=>s-a);return(n+.05)/(o+.05)}const cy="#141414",dy="#ffffff";function eq(e){const t=ly(e,cy);return t>=4.5||t>=ly(e,dy)?cy:dy}const Hl=10,Lu=400,Wd=1.25,tq=200,nq=220,uy=24;function Gi(e){return e==="timing"?nq:tq}function oq(e,t){if(e<=uy||t<=0)return Hl;const n=(e-uy)/t;return Math.min(Lu,Math.max(Hl,n))}const Op=[1,2,5,10,15,30,60],aq=48;function sq(e){for(const t of Op)if(t*e>=aq)return t;return Op[Op.length-1]}function py(e){const{oldZoom:t,newZoom:n,scrollLeft:o,anchorPx:a}=e;return Math.max(0,(o+a)*n/t-a)}const iq=40;function rq(e){const{playheadPx:t,scrollLeft:n,viewWidthPx:o,marginPx:a}=e;return t>n+o-a?t-a:t<n+a?Math.max(0,t-o+a):n}function lq(e,t){if(t===0)return e;const n=t<0?e*Wd:e/Wd;return Math.min(Lu,Math.max(Hl,n))}function Np(e){return e<10?`0${e}`:`${e}`}
246function Lp(e,t,n){const o=Math.round(e*t);if(n==="frame")return`${o}`;const a=Math.floor(o/t),s=o-a*t,i=Math.floor(a/60),r=a%60;return`${Np(i)}:${Np(r)}.${Np(s)}`}function cq(e,t,n){const o=e.trim();if(n==="frame")return/^\d+$/.test(o)?Number(o)/t:null;if(o.includes(":")){const a=/^(\d+):(\d+)(?:\.(\d+))?$/.exec(o);if(!a)return null;const s=Number(a[1]),i=Number(a[2]),r=a[3]===void 0?0:Number(a[3]);return r>=t?null:s*60+i+r/t}return/^\d+(\.\d+)?$/.test(o)?Number(o):null}function dq(e,t,n){return n==="frame"?`${Math.round(e*t)}`:Number.isInteger(e)?`${e}`:e.toFixed(1)}function fy(e){return e.toFixed(1).replace(/\.0$/,"")}function my(e){const t=Math.abs(e);return`${e<0?"â":""}${t}Ã`}const uq=200,pq=nt({__name:"BbTimelineRuler",props:{durationSec:{},zoomPxPerSec:{},fps:{default:24},unit:{default:"sec"},loop:{default:null}},setup(e){const t=e,n=C(()=>{const a=sq(t.zoomPxPerSec),s=Math.floor(t.durationSec/a);return Array.from({length:s+1},(i,r)=>r*a)}),o=C(()=>{if(t.zoomPxPerSec<uq)return[];const a=Math.round(t.durationSec*t.fps);return Array.from({length:a+1},(s,i)=>i/t.fps).filter(s=>Math.abs(s-Math.round(s))>1e-6)});return(a,s)=>(v(),k("div",{class:"bb-tl-ruler",style:wt({width:`${e.durationSec*e.zoomPxPerSec}px`})},[e.loop?.enabled?(v(),k("span",{key:0,class:"bb-tl-loop-range",style:wt({left:`${e.loop.startSec*e.zoomPxPerSec}px`,width:`${(e.loop.endSec-e.loop.startSec)*e.zoomPxPerSec}px`})},null,4)):H("",!0),(v(!0),k(ae,null,Me(g(n),i=>(v(),k("span",{key:`s-${i}`,class:"bb-tl-tick bb-tl-tick--sec",style:wt({left:`${i*e.zoomPxPerSec}px`})},S(g(dq)(i,e.fps,e.unit)),5))),128)),(v(!0),k(ae,null,Me(g(o),i=>(v(),k("span",{key:`f-${i}`,class:"bb-tl-tick bb-tl-tick--frame",style:wt({left:`${i*e.zoomPxPerSec}px`})},null,4))),128))],4))}}),fq=Object.assign(ot(pq,[["__scopeId","data-v-03814fab"]]),{__name:"BbTimelineRuler"});function nw(e,t){return Math.floor(e*t+1e-6)/t}function mq(e,t){return C(()=>nw(fb(e),fb(t)))}const hq=[.25,.5,1,1.5,2];function bq(e){const{timeSec:t,durationSec:n,fps:o}=e,a=e.raf??(V=>requestAnimationFrame(V)),s=e.caf??(V=>cancelAnimationFrame(V)),i=e.now??(()=>performance.now()),r=G(!1),l=G(1),c=G(1);let d=1;const u=C(()=>c.value*d*l.value);let p=null,f=null,h=0,b=!1;function I(V){return Math.round(V*o())/o()}function y(V){const pe=Math.min(n(),Math.max(0,V));t.value=I(pe),b=t.value>=n()-1e-6}function w(){y(0)}function M(){y(n())}function x(V){y(t.value+V/o())}const _=1e-6;function O(){p&&(t.value<p.startSec-_||t.value>=p.endSec-_)&&(t.value=p.startSec)}function A(V){const pe=Math.max(0,(V-h)/1e3);h=V;const le=u.value,me=t.value+pe*le;if(p){const oe=p.endSec-p.startSec;oe<=0?t.value=p.startSec:le>0&&me>=p.endSec?t.value=p.startSec+(me-p.startSec)%oe:le<0&&me<=p.startSec?t.value=p.endSec-(p.startSec-me)%oe:t.value=me,f=a(A);return}if(le>=0){if(t.value=Math.min(n(),me),t.value>=n()){r.value=!1,f=null,b=!0;return}}else if(t.value=Math.max(0,me),t.value<=0){r.value=!1,f=null;return}f=a(A)}function N(V){f!==null&&(s(f),f=null),r.value=!0,h=V,f=a(A)}function K(){r.value||(c.value=1,d=1,b&&(t.value=0,b=!1),O(),N(i()))}function F(){f!==null&&(s(f),f=null),r.value=!1,t.value=nw(t.value,o())}function B(){r.value?F():K()}function j(V){l.value=V}function ee(V){p=V}function D(V){if(!r.value||c.value!==V){c.value=V,d=1,V===1&&b&&(t.value=0,b=!1),O(),N(i());return}d===1&&(d=2)}function Z(){F(),c.value=1,d=1}function L(){t.value>n()&&(t.value=n(),b=!0)}return Kk()&&Fk(F),{playing:r,speed:l,direction:c,rate:u,play:K,pause:F,toggle:B,seek:y,stepFrame:x,seekStart:w,seekEnd:M,snapToFrame:I,clampToDuration:L,setSpeed:j,setLoop:ee,shuttle:D,stop:Z}}const gq={class:"bb-tl-toolbar"},vq={key:0,class:"bb-tl-parts"},yq=["data-part-id","aria-pressed","title","onClick"],kq={key:1,class:"bb-tl-divider"},Sq=["aria-label","title"],Iq=["aria-label","title"],wq=["aria-label","title"],Mq=["aria-label","title"],$q=["aria-label","title"],Eq={class:"bb-tl-timecode"},xq=["title"],Pq={class:"bb-tl-unit"},Cq=["aria-pressed","title"],Bq=["aria-pressed","title"],_q=["aria-pressed","title"],Aq=["title","aria-label"],Tq={key:0,class:"bb-tl-speed-menu"},Rq=["data-speed","onClick"],Dq={key:2,class:"bb-tl-mode-group"},Oq=["data-mode","title","onClick"],Nq={key:3,class:"bb-tl-keys-selected"}
246,Lq=["aria-pressed","aria-label","title"],Kq=["aria-label","title"],Fq=["aria-label","title"],Hq=["aria-label","title"],zq=["aria-label","title"],jq=nt({__name:"BbTimelineToolbar",props:{playing:{type:Boolean},mode:{},timeSec:{},durationSec:{},zoomPxPerSec:{},collapsed:{type:Boolean},fps:{default:24},unit:{default:"sec"},loop:{default:null},speed:{default:1},rate:{default:1},snap:{type:Boolean,default:!0},parts:{default:()=>[]},activePartId:{default:void 0},modeSwitchHidden:{type:Boolean,default:!1},selectedKeyCount:{default:0}},emits:["update:mode","update:zoomPxPerSec","update:collapsed","update:unit","update:loop","update:speed","update:snap","play","pause","seek","prev-key","next-key","select-part","fit"],setup(e,{emit:t}){const n=e,o=t,a=["blocking","camera","cut"];function s(){o(n.playing?"pause":"play")}function i(){n.collapsed&&o("update:collapsed",!1)}function r(_){const O=Math.min(Lu,Math.max(Hl,n.zoomPxPerSec*_));o("update:zoomPxPerSec",O),i()}function l(){o("fit"),i()}function c(){o("update:collapsed",!n.collapsed)}const d=G(!1),u=G(""),p=G(null);function f(){u.value=Lp(n.timeSec,n.fps,n.unit),d.value=!0,hn(()=>{p.value?.focus(),p.value?.select()})}function h(){if(!d.value)return;const _=cq(u.value,n.fps,n.unit);d.value=!1,_!==null&&o("seek",_)}function b(){d.value=!1}function I(){if(!n.loop){o("update:loop",{startSec:0,endSec:n.durationSec,enabled:!0});return}o("update:loop",{...n.loop,enabled:!n.loop.enabled})}const y=G(!1);function w(_){o("update:speed",_),y.value=!1}const M=G(null);Qo("speedMenu",()=>y.value,_=>{if(_.id!=="overlay.close")return!1;y.value=!1});function x(_){M.value&&_.target instanceof Node&&M.value.contains(_.target)||(y.value=!1)}return Je(y,_=>{_?document.addEventListener("pointerdown",x,!0):document.removeEventListener("pointerdown",x,!0)}),wn(()=>document.removeEventListener("pointerdown",x,!0)),(_,O)=>{const A=vn;return v(),k("div",gq,[e.parts.length>0?(v(),k("div",vq,[(v(!0),k(ae,null,Me(e.parts,N=>(v(),k("button",{key:N.partId,type:"button",class:"bb-tl-part btn-md","data-part-id":N.partId,"aria-pressed":N.partId===e.activePartId,title:`${N.title} · ${N.durationSec}s`,onClick:K=>o("select-part",N.partId)},S(N.title),9,yq))),128))])):H("",!0),e.parts.length>0?(v(),k("span",kq)):H("",!0),m("button",{type:"button",class:"bb-tl-start btn-md bb-tl-icon-btn","aria-label":_.$t("tool.blockingBoard.timeline.start"),title:`${_.$t("tool.blockingBoard.timeline.start")} (Home)`,onClick:O[0]||(O[0]=N=>o("seek",0))},[ce(A,{name:"i-lucide-skip-back"})],8,Sq),m("button",{type:"button",class:"bb-tl-prev-key btn-md bb-tl-icon-btn","aria-label":_.$t("tool.blockingBoard.timeline.prevKey"),title:`${_.$t("tool.blockingBoard.timeline.prevKey")} (â)`,onClick:O[1]||(O[1]=N=>o("prev-key"))},[ce(A,{name:"i-lucide-chevron-left"})],8,Iq),m("button",{type:"button",class:"bb-tl-play btn-md bb-tl-icon-btn","aria-label":_.$t(`tool.blockingBoard.timeline.${e.playing?"pause":"play"}`),title:`${_.$t(`tool.blockingBoard.timeline.${e.playing?"pause":"play"}`)} (Space)`,onClick:s},[ce(A,{name:e.playing?"i-lucide-pause":"i-lucide-play"},null,8,["name"])],8,wq),m("button",{type:"button",class:"bb-tl-next-key btn-md bb-tl-icon-btn","aria-label":_.$t("tool.blockingBoard.timeline.nextKey"),title:`${_.$t("tool.blockingBoard.timeline.nextKey")} (â)`,onClick:O[2]||(O[2]=N=>o("next-key"))},[ce(A,{name:"i-lucide-chevron-right"})],8,Mq),m("button",{type:"button",class:"bb-tl-end btn-md bb-tl-icon-btn","aria-label":_.$t("tool.blockingBoard.timeline.end"),title:`${_.$t("tool.blockingBoard.timeline.end")} (End)`,onClick:O[3]||(O[3]=N=>o("seek",e.durationSec))},[ce(A,{name:"i-lucide-skip-forward"})],8,$q),m("span",Eq,[d.value?Zt((v(),k("input",{key:1,ref_key:"timeInputRef",ref:p,type:"text",class:"bb-tl-timecode-input","onUpdate:modelValue":O[4]||(O[4]=N=>u.value=N),onKeydown:[fi(h,["enter"]),fi(b,["esc"])],onBlur:h},null,544)),[[Nn,u.value]]):(v(),k("button",{key:0,type:"button",class:"bb-tl-timecode-now btn-md",title:_.$t("tool.blockingBoard.timeline.timecodeTip"),onClick:f},S(g(Lp)(e.timeSec,e.fps,e.unit)),9,xq)),We(" / "+S(g(Lp)(e.durationSec,e.fps,e.unit)),1
246)]),m("span",Pq,[m("button",{type:"button",class:"bb-tl-unit-sec btn-md","data-unit":"sec","aria-pressed":e.unit==="sec",title:_.$t("tool.blockingBoard.timeline.unitSec"),onClick:O[5]||(O[5]=N=>o("update:unit","sec"))},S(_.$t("tool.blockingBoard.timeline.unitSec")),9,Cq),m("button",{type:"button",class:"bb-tl-unit-frame btn-md","data-unit":"frame","aria-pressed":e.unit==="frame",title:_.$t("tool.blockingBoard.timeline.unitFrame"),onClick:O[6]||(O[6]=N=>o("update:unit","frame"))},S(_.$t("tool.blockingBoard.timeline.unitFrame")),9,Bq)]),m("button",{type:"button",class:"bb-tl-loop btn-md","aria-pressed":!!e.loop?.enabled,title:`${_.$t("tool.blockingBoard.timeline.loop")} (P)`,onClick:I},S(e.loop?.enabled?_.$t("tool.blockingBoard.timeline.loopRange",{start:g(fy)(e.loop.startSec),end:g(fy)(e.loop.endSec)}):_.$t("tool.blockingBoard.timeline.loop")),9,_q),m("span",{ref_key:"speedWrapRef",ref:M,class:"bb-tl-speed-wrap"},[m("button",{type:"button",class:"bb-tl-speed btn-md",title:_.$t("tool.blockingBoard.timeline.speed"),"aria-label":_.$t("tool.blockingBoard.timeline.speed"),onClick:O[7]||(O[7]=N=>y.value=!y.value)},S(g(my)(e.rate)),9,Aq),y.value?(v(),k("div",Tq,[(v(!0),k(ae,null,Me(g(hq),N=>(v(),k("button",{key:N,type:"button","data-speed":N,onClick:K=>w(N)},S(g(my)(N)),9,Rq))),128))])):H("",!0)],512),e.modeSwitchHidden?H("",!0):(v(),k("span",Dq,[(v(),k(ae,null,Me(a,N=>m("button",{key:N,type:"button",class:qe(["bb-tl-mode btn-md",{"bb-tl-mode--active":e.mode===N}]),"data-mode":N,title:_.$t(`tool.blockingBoard.timeline.mode${N.charAt(0).toUpperCase()}${N.slice(1)}`),onClick:K=>o("update:mode",N)},S(_.$t(`tool.blockingBoard.timeline.mode${N.charAt(0).toUpperCase()}${N.slice(1)}`)),11,Oq)),64))])),O[11]||(O[11]=m("span",{class:"bb-tl-spacer"},null,-1)),e.selectedKeyCount>0?(v(),k("span",Nq,S(_.$t("tool.blockingBoard.timing.keysSelected",{n:e.selectedKeyCount})),1)):H("",!0),m("button",{type:"button",class:"bb-tl-snap btn-md bb-tl-icon-btn","aria-pressed":e.snap,"aria-label":_.$t("tool.blockingBoard.timeline.snap"),title:_.$t("tool.blockingBoard.timeline.snap"),onClick:O[8]||(O[8]=N=>o("update:snap",!e.snap))},[ce(A,{name:"i-lucide-magnet"})],8,Lq),m("button",{type:"button",class:"bb-tl-zoom-out btn-md bb-tl-icon-btn","aria-label":_.$t("tool.blockingBoard.timeline.zoomOut"),title:_.$t("tool.blockingBoard.timeline.zoomOut"),onClick:O[9]||(O[9]=N=>r(1/g(Wd)))},[ce(A,{name:"i-lucide-zoom-out"})],8,Kq),m("button",{type:"button",class:"bb-tl-zoom-in btn-md bb-tl-icon-btn","aria-label":_.$t("tool.blockingBoard.timeline.zoomIn"),title:_.$t("tool.blockingBoard.timeline.zoomIn"),onClick:O[10]||(O[10]=N=>r(g(Wd)))},[ce(A,{name:"i-lucide-zoom-in"})],8,Fq),m("button",{type:"button",class:"bb-tl-fit btn-md bb-tl-icon-btn","aria-label":_.$t("tool.blockingBoard.timeline.fit"),title:`${_.$t("tool.blockingBoard.timeline.fit")} (F)`,onClick:l},[ce(A,{name:"i-lucide-scan"})],8,Hq),m("button",{type:"button",class:"bb-tl-collapse btn-md bb-tl-icon-btn","aria-label":_.$t(`tool.blockingBoard.timeline.${e.collapsed?"expand":"collapse"}`),title:_.$t(`tool.blockingBoard.timeline.${e.collapsed?"expand":"collapse"}`),onClick:c},[ce(A,{name:e.collapsed?"i-lucide-chevron-up":"i-lucide-chevron-down"},null,8,["name"])],8,zq)])}}}),Uq=Object.assign(ot(jq,[["__scopeId","data-v-768fa502"]]),{__name:"BbTimelineToolbar"}),Gq=["data-id","data-speed-class","data-motion-id","title"],Vq=["title"],Wq=["title"],Xq=["title"],Yq=20,qq=nt({__name:"BbTimelineBlock",props:{block:{}},setup(e){const t=e,n=C(()=>t.block.tone??"neutral"),o=i=>t.block.labelKey?t.block.labelParams?i(t.block.labelKey,t.block.labelParams):i(t.block.labelKey):t.block.label??"",a=i=>t.block.motion?`${o(i)} · ${i("tool.blockingBoard.timeline.motionClip",{name:i(t.block.motion.labelKey)})}`:o(i),s=C(()=>{const i={left:`${t.block.left}px`,width:`${t.block.width}px`,top:`${4+(t.block.lane??0)*Fl}px`,height:`${Yq}px`};return n.value==="actor"&&t.block.color&&!t.block.speedClass&&(i["--tl-block-bg"]=t.block.color,i["--tl-block-fg"]=eq(t.block.color)),i});return(i,r)=>{const l=vn;return v(),k("div",{class:qe(["bb-tl-block",[`bb-tl-block--${e.block.kind}`,`bb-tl-block--tone-${n.value}`,e.block.rounded?"bb-tl-block--rounded":"bb-tl-block--square",{"bb-tl-block--readonly":e.block.readonly,"bb-tl-block--selected":e.block.selected,"bb-tl-block--flash":e.block.flash,"bb-tl-block--motion-auto":e.block.motion?.auto,[`bb-tl-block--speed-${e.block.speedClass}`]:e.block.speedClass,"bb-tl-block--speed-bad":e.block.speedClass&&e.block.speedProblem}]]),"data-id":e.block.id,"data-speed-class":e.block.speedClass,"data-motion-id":e.block.motion?.motionId,title:a(i.$t)||void 0,style:wt(s.value)}
246,[e.block.dotColor?(v(),k("span",{key:0,class:"bb-tl-block-dot",style:wt({background:e.block.dotColor})},null,4)):H("",!0),n.value==="dialogue"?(v(),et(l,{key:1,name:"i-lucide-message-square",class:"bb-tl-block-icon"})):H("",!0),e.block.label||e.block.labelKey?(v(),k("span",{key:2,class:"bb-tl-block-label",title:o(i.$t)},S(o(i.$t)),9,Vq)):H("",!0),e.block.anchor?(v(),k("span",{key:3,class:"bb-tl-anchor",title:i.$t("tool.blockingBoard.timeline.anchor")},"â",8,Wq)):H("",!0),e.block.authored?(v(),k("span",{key:4,class:"bb-tl-authored",title:i.$t("tool.blockingBoard.timeline.authored"),style:wt({left:`${e.block.authored.left}px`,width:`${e.block.authored.width}px`})},null,12,Xq)):H("",!0),(v(!0),k(ae,null,Me(e.block.pauseSegments??[],(c,d)=>(v(),k("span",{key:d,class:"bb-tl-pause",style:wt({left:`${c.left}px`,width:`${c.width}px`})},null,4))),128))],14,Gq)}}}),ow=Object.assign(ot(qq,[["__scopeId","data-v-b1ebf47c"]]),{__name:"BbTimelineBlock"}),Zq=["data-kind","data-actor-id","data-camera-id"],Jq=["title"],Qq=["aria-label","aria-pressed"],eZ={key:1,class:"bb-tl-track-chevron-spacer"},tZ={key:2,class:"bb-tl-track-indent","aria-hidden":"true"},nZ={key:4,class:"bb-tl-track-sub"},oZ=["aria-label","aria-pressed"],aZ=["aria-label","aria-pressed"],sZ=["title"],iZ=["title"],rZ={key:0,class:"bb-tl-track-hint"},lZ=nt({__name:"BbTimelineTrack",props:{kind:{},actorId:{},cameraId:{},label:{},labelKey:{},labelParams:{},sublabelKey:{},hintKey:{},widthPx:{},blocks:{},gaps:{},overlaps:{},ownerId:{},color:{},controls:{type:Boolean},collapsible:{type:Boolean},collapsed:{type:Boolean},hidden:{type:Boolean},locked:{type:Boolean},indented:{type:Boolean}},emits:["toggle-hidden","toggle-locked","toggle-collapsed"],setup(e,{emit:t}){const n=e,o=C(()=>Gd(n.blocks.map(r=>
246({startSec:r.left,endSec:r.left+r.width,b:r})))),a=C(()=>o.value.map(r=>({...r.block.b,lane:r.lane}))),s=C(()=>Vd(o.value)*Fl),i=t;return(r,l)=>{const c=vn;return v(),k("div",{class:qe(["bb-tl-track",{"bb-tl-track--hidden":e.hidden,"bb-tl-track--locked":e.locked}]),"data-kind":e.kind,"data-actor-id":e.actorId,"data-camera-id":e.cameraId,style:wt({height:`${s.value}px`})},[m("div",{class:"bb-tl-track-label",title:e.labelKey?e.labelParams?r.$t(e.labelKey,e.labelParams):r.$t(e.labelKey):e.label},[e.collapsible?(v(),k("button",{key:0,type:"button",class:"bb-tl-track-chevron","aria-label":r.$t(e.collapsed?"tool.blockingBoard.timeline.expandTrack":"tool.blockingBoard.timeline.collapseTrack"),"aria-pressed":!!e.collapsed,onClick:l[0]||(l[0]=d=>i("toggle-collapsed"))},[ce(c,{name:e.collapsed?"i-lucide-chevron-right":"i-lucide-chevron-down"},null,8,["name"])],8,Qq)):e.controls?(v(),k("span",eZ)):H("",!0),e.indented?(v(),k("span",tZ)):H("",!0),e.controls?(v(),k("span",{key:3,class:"bb-tl-track-dot",style:wt({background:e.color??"var(--color-white-alpha-50)"})},null,4)):H("",!0),m("span",{class:qe(["bb-tl-track-name",{"sr-only":e.indented}])},S(e.labelKey?e.labelParams?r.$t(e.labelKey,e.labelParams):r.$t(e.labelKey):e.label),3),e.sublabelKey?(v(),k("span",nZ,S(r.$t(e.sublabelKey)),1)):H("",!0),e.controls?(v(),k("button",{key:5,type:"button",class:"bb-tl-track-eye","aria-label":r.$t(e.hidden?"tool.blockingBoard.timeline.show":"tool.blockingBoard.timeline.hide"),"aria-pressed":!!e.hidden,onClick:l[1]||(l[1]=d=>i("toggle-hidden"))},[ce(c,{name:e.hidden?"i-lucide-eye-off":"i-lucide-eye"},null,8,["name"])],8,oZ)):H("",!0),e.controls?(v(),k("button",{key:6,type:"button",class:"bb-tl-track-lock","aria-label":r.$t(e.locked?"tool.blockingBoard.timeline.unlock":"tool.blockingBoard.timeline.lock"),"aria-pressed":!!e.locked,onClick:l[2]||(l[2]=d=>i("toggle-locked"))},[ce(c,{name:e.locked?"i-lucide-lock":"i-lucide-lock-open"},null,8,["name"])],8,aZ)):H("",!0)],8,Jq),m("div",{class:qe(["bb-tl-track-body",{"bb-tl-track-body--locked":e.locked}]),style:wt({width:`${e.widthPx}px`})},[(v(!0),k(ae,null,Me(e.gaps??[],(d,u)=>(v(),k("span",{key:`gap-${u}`,class:"bb-tl-gap",title:r.$t("tool.blockingBoard.timeline.gap"),style:wt({left:`${d.left}px`,width:`${d.width}px`})},null,12,sZ))),128)),(v(!0),k(ae,null,Me(e.overlaps??[],(d,u)=>(v(),k("span",{key:`overlap-${u}`,class:"bb-tl-overlap",title:r.$t("tool.blockingBoard.timeline.overlap"),style:wt({left:`${d.left}px`,width:`${d.width}px`})},null,12,iZ))),128)),(v(!0),k(ae,null,Me(a.value,d=>(v(),et(ow,{key:d.id,block:d},null,8,["block"]))),128)),e.hintKey&&e.blocks.length===0?(v(),k("span",rZ,S(r.$t(e.hintKey)),1)):H("",!0)],6)],14,Zq)}}}),cZ=Object.assign(ot(lZ,[["__scopeId","data-v-28d4dfe0"]]),{__name:"BbTimelineTrack"}),dZ={class:"bb-tim"},uZ=["data-row-key"],pZ={class:"bb-tim-head"},fZ=["onClick"],mZ={class:"bb-tim-name"},hZ={key:1,class:"bb-tim-sub-label"},bZ={key:2,class:"bb-tim-sub-label"},gZ={key:3,class:"bb-tim-sub-label"},vZ={key:4,class:"bb-tim-sub-label"},yZ={class:"bb-tim-name"},kZ={key:6,class:"bb-tim-name"},SZ={key:1,class:"bb-tim-empty"},IZ=["data-row","data-owner","data-index"],wZ=["title"],MZ=["title"],$Z=nt({__name:"BbTimingTracks",props:{part:{},rows:{},zoomPxPerSec:{},widthPx:{},keySelection:{},lockedIds:{},blocksFor:{type:Function}},emits:["toggle-collapse"],setup(e){const t=e;function n(l){return t.part.actors.find(c=>c.id===l)}function o(l,c){const d=t.part.cameras.findIndex(p=>p.id===l),u=t.part.cameras[d];return u?ui(u,c("tool.blockingBoard.cameraFallback",{n:d+1})):l??""}function a(l){return!!l&&t.keySelection.some(c=>nr(c,l))}function s(l){return l!==void 0&&t.lockedIds.includes(l)}function i(l){const c=Gd(t.blocksFor(l).map(d=>({startSec:d.left,endSec:d.left+d.width,b:d})));return{blocks:c.map(d=>({...d.block.b,lane:d.lane})),lanes:Vd(c)}}function r(l){return l.kind!=="action"&&l.kind!=="dialogue"?{}:{"data-kind":l.kind,"data-actor-id":l.ownerId??""}}return(l,c)=>{const d=vn;return v(),k("div",dZ,[(v(!0),k(ae,null,Me(e.rows,u=>(v(),k("div",Mm({key:u.key,class:["bb-tim-row",[`bb-tim-row--${u.kind}`,s(u.ownerId)?"bb-tim-row--locked":null,u.kind==="action"||u.kind==="dialogue"?"bb-tl-track":null]],"data-row-key":u.key},{ref_for:!0},r(u),{style:u.kind==="action"||u.kind==="dialogue"?{height:`${i(u.key).lanes*g(Fl)}px`}:void 0}),[m("div",pZ,[u.kind==="actor"?(v(),k(ae,{key:0},[m("button",{type:"button",class:"bb-tim-chevron",onClick:p=>l.$emit("toggle-collapse",u.ownerId)},[ce(d,{name:"i-lucide-chevron-down"})],8,fZ),m("span",{class:"bb-tim-dot",style:wt({background:n(u.ownerId)?.color})},null,4),m("span",mZ,S(n(u.ownerId)?.name),1)],64)):u.kind==="position"?(v(),k("span",hZ,S(l.$t("tool.blockingBoard.timing.rowPosition")),1)):u.kind==="facing"?(v(),k("span",bZ,S(l.$t("tool.blockingBoard.timing.rowFacing")),1)):u.kind==="action"?(v(),k("span",gZ,S(l.$t("tool.blockingBoard.timing.rowAction")),1)):u.kind==="dialogue"?(v(),k("span",vZ,S(l.$t("tool.blockingBoard.timing.rowDialogue")),1)):u.kind==="camera"?(v(),k(ae,{key:5},[ce(d,{name:"i-lucide-video",class:"bb-tim-camera-icon"}),m("span",yZ,S(o(u.ownerId,l.$t)),1)],64)):(v(),k("span",kZ,S(l.$t("tool.blockingBoard.timeline.trackCut")),1))]),m("div",{class:"bb-tim-body",style:wt({width:`${e.widthPx}px`})},[u.kind==="action"||u.kind==="dialogue"?(v(!0),k(ae,{key:0},Me(i(u.key).blocks,p=>(v(),et(ow,{key:p.id,block:p},null,8,["block"]))),128)):u.kind==="camera"&&u.keys.length===0?(v(),k("span",SZ,S(l.$t("tool.blockingBoard.timing.cameraNoKeys")),1)):u.kind==="camera"&&u.keys.length>=2?(v(),k("span",{key:2,class:"bb-tim-camera-line",style:wt({left:`${u.keys[0].masterSec*e.zoomPxPerSec}px`,width:`${(u.keys[u.keys.length-1].masterSec-u.keys[0].masterSec)*e.zoomPxPerSec}px`})},null,4)):H("",!0),(v(!0),k(ae,null,Me(u.keys,(p,f)=>(v(),k(ae,{key:f},[p.ref?(v(),k("span",{key:0,class:qe(["bb-tim-key",{"bb-tim-key--auto":!p.explicit,"bb-tim-key--selected":a(p.ref)}]),"data-row":p.ref.row,"data-owner":p.ref.ownerId,"data-index":p.ref.index,style:wt({left:`${p.masterSec*e.zoomPxPerSec-5}px`})},null,14,IZ)):u.kind==="position"?(v(),k("span",{key:1,class:"bb-tim-key bb-tim-key--readonly",t
246itle:l.$t("tool.blockingBoard.timing.positionKeysReadonly"),style:wt({left:`${p.masterSec*e.zoomPxPerSec-5}px`})},null,12,wZ)):(v(),k("span",{key:2,class:"bb-tim-key bb-tim-key--readonly",style:wt({left:`${p.masterSec*e.zoomPxPerSec-5}px`})},null,4)),p.pauseSec?(v(),k("span",{key:3,class:"bb-tim-pause",title:l.$t("tool.blockingBoard.timing.pause",{s:p.pauseSec}),style:wt({left:`${p.masterSec*e.zoomPxPerSec}px`,width:`${p.pauseSec*e.zoomPxPerSec}px`})},null,12,MZ)):H("",!0)],64))),128))],4)],16,uZ))),128))])}}}),EZ=Object.assign(ot($Z,[["__scopeId","data-v-58ed4788"]]),{__name:"BbTimelineBbTimingTracks"}),xZ=["aria-label"],PZ={class:"bb-tl-scroll"},CZ={class:"bb-tl-ruler-row"},BZ={class:"bb-tl-ruler-wrap"},_Z={class:"bb-tim-key-menu-title"},AZ=["data-action","onClick"],TZ={key:1,class:"bb-tl-empty",role:"status"},RZ={class:"bb-tl-facing-key-layer"},DZ=["data-actor-id","data-index","onPointerdown"],OZ=["data-camera-id"],NZ={class:"bb-tl-track-label"},LZ=["data-index","onPointerdown"],KZ={key:0,class:"bb-tl-key-fields","data-field":"activeKeyPosition"},FZ=["value"],HZ=["value"],zZ={class:"bb-tl-playhead-layer"},hy=29,nl=28,jZ=nt({__name:"BbTimeline",props:{part:{},settled:{},resolved:{},timeSec:{},playing:{type:Boolean},selection:{},mode:{},issues:{},zoomPxPerSec:{},collapsed:{type:Boolean},fps:{default:24},parts:{default:()=>[]},activePartId:{default:void 0},modeSwitchHidden:{type:Boolean,default:!1},unit:{default:"sec"},loop:{default:null},speed:{default:1},rate:{default:1},snap:{type:Boolean,default:!0},hiddenIds:{default:()=>[]},lockedIds:{default:()=>[]},collapsedActorIds:{default:()=>[]},variant:{default:"compact"},timingCollapsed:{default:()=>[]},keySelection:{default:()=>[]},boxSelectArmed:{type:Boolean,default:!1},flashIds:{}},emits:["update:mode","update:zoomPxPerSec","update:collapsed","update:unit","update:loop","update:speed","update:snap","update:collapsedActorIds","update:timingCollapsed","update:keySelection","update:boxSelectArmed","play","pause","seek","select","command","commands","select-part","toggle-hidden","toggle-locked","split-at-playhead","update:dragging"],setup(e,{expose:t,emit:n}){const o=xn,a=e,s=n,i=G(null);function r(){const R=i.value?.clientWidth??p.value?.clientWidth??0;V="fit",s("update:zoomPxPerSec",oq(R-Gi(a.variant),a.part.durationSec)),hn(()=>{i.value&&(i.value.scrollLeft=0)})}function l(R){const U=YY(a.part,a.settled,a.selection.ids),Y=qY(U,a.timeSec,R);Y!==null&&s("seek",Y)}function c(R){return R.replace(/-([a-z])/g,(U,Y)=>Y.toUpperCase())}const d=C(()=>Oi(a.part.timeline.cuts));function u(R,U){const Y=R.name?.trim();return Y&&Y!==R.id?{label:R.name}:{labelKey:"tool.blockingBoard.cameraFallback",labelParams:{n:U+1}}}const p=G(null);function f(R){return a.selection.ids.includes(R)}function h(R,U){return Math.abs(R-U)>o}function b(R,U){return{left:R*a.zoomPxPerSec,width:(U-R)*a.zoomPxPerSec}}function I(R){const U=Rm(R);return U?{motionId:U,labelKey:La[U].labelKey,auto:R.motionId===void 0}:void 0}function y(R){return a.part.actors.find(U=>U.id===R)?.color}function w(R,U){if(U.actionClass!=="movement")return null;const Y=R.find(he=>Math.abs(he.departSec-U.startSec)<$i&&Math.abs(he.arriveSec-U.endSec)<$i);return Y?{speedClass:Y.cls,speedProblem:Y.problem}:null}function M(R){const U=y(R),Y=a.part.actors.find(xe=>xe.id===R),he=Y?Gm(Y,a.part.durationSec).spans:[];return a.settled.actions.filter(xe=>xe.actorId===R).map(xe=>{const De=h(xe.startSec,xe.settledStartSec)||h(xe.endSec,xe.settledEndSec),bt=X4(xe);return{id:xe.id,kind:"action",tone:"actor",color:U,...w(he,xe),..."key"in bt?{labelKey:bt.key,labelParams:bt.params}:{label:bt.text},motion:I(xe),...b(xe.settledStartSec,xe.settledEndSec),rounded:!0,selected:f(xe.id),flash:a.flashIds?.includes(xe.id)??!1,authored:De?{left:(xe.startSec-xe.settledStartSec)*a.zoomPxPerSec,width:(xe.endSec-xe.startSec)*a.zoomPxPerSec}:void 0,pauseSegments:xe.pauseSegments.map(Yt=>({left:(Yt.startSec-xe.settledStartSec)*a.zoomPxPerSec,width:(Yt.endSec-Yt.startSec)*a.zoomPxPerSec}))}})}function x(R){return a.settled.dialogues.filter(U=>R===null||U.actorId===R).map(U=>{const Y=h(U.startSec,U.settledStartSec)||h(U.endSec,U.settledEndSec);return{id:U.id,kind:"dialogue",tone:"dialogue",dotColor:R===null?y(U.actorId):void 0,label:U.line,...b(U.settledStartSec,U.settledEndSec),roun
246ded:!0,selected:f(U.id),authored:Y?{left:(U.startSec-U.settledStartSec)*a.zoomPxPerSec,width:(U.endSec-U.startSec)*a.zoomPxPerSec}:void 0}})}function _(R,U){return a.resolved.coverages.filter(Y=>Y.cameraId===R).map(Y=>{const he=a.part.timeline.coverages.find(De=>De.id===Y.id),xe=he&&(h(he.startSec,Y.startSec)||h(he.endSec,Y.endSec))?{left:(he.startSec-Y.startSec)*a.zoomPxPerSec,width:(he.endSec-he.startSec)*a.zoomPxPerSec}:void 0;return{id:Y.id,kind:"coverage",tone:"neutral",labelKey:`tool.blockingBoard.shotType.${c(Y.shotType)}`,...b(Y.startSec,Y.endSec),rounded:!0,readonly:U,selected:f(Y.id),authored:xe,anchor:!!Y.anchor}})}function O(){return a.resolved.cuts.map(R=>{const U=a.part.timeline.cuts.find(he=>he.id===R.id),Y=U&&(h(U.inSec,R.inSec)||h(U.outSec,R.outSec))?{left:(U.inSec-R.inSec)*a.zoomPxPerSec,width:(U.outSec-U.inSec)*a.zoomPxPerSec}:void 0;return{id:R.id,kind:"cut",tone:"neutral",label:`C${d.value.get(R.id)??"?"}`,...b(R.inSec,R.outSec),rounded:!1,selected:f(R.id),authored:Y}})}function A(R){return R!==void 0&&a.hiddenIds.includes(R)}function N(R){return R!==void 0&&a.lockedIds.includes(R)}const K=C(()=>a.mode==="cut"?Vl({cuts:a.resolved.cuts,durationSec:a.part.durationSec,fps:a.fps}):[]),F=C(()=>K.value.filter(R=>R.code==="CUT_GAP"&&R.timeRange).map(R=>b(R.timeRange.startSec,R.timeRange.endSec))),B=C(()=>K.value.filter(R=>R.code==="CUT_OVERLAP"&&R.timeRange).map(R=>b(R.timeRange.startSec,R.timeRange.endSec))),j=C(()=>a.mode==="blocking"?a.part.actors.flatMap(R=>{const U=a.collapsedActorIds.includes(R.id),Y={kind:"action",actorId:R.id,ownerId:R.id,color:R.color,controls:!0,collapsible:!0,collapsed:U,hidden:A(R.id),locked:N(R.id),label:R.name,sublabelKey:"tool.blockingBoard.timeline.trackAction",hintKey:"tool.blockingBoard.timeline.hintAction",blocks:M(R.id)};return U?[Y]:[Y,{kind:"dialogue",actorId:R.id,ownerId:R.id,hidden:A(R.id),locked:N(R.id),label:R.name,indented:!0,sublabelKey:"tool.blockingBoard.timeline.trackDialogue",hintKey:"tool.blockingBoard.timeline.hintDialogue",blocks:x(R.id)}]}):a.mode==="camera"?[...a.part.cameras.map((R,U)=>({kind:"coverage",cameraId:R.id,ownerId:R.id,color:"var(--color-white-alpha-50)",controls:!0,hidden:A(R.id),locked:N(R.id),...u(R,U),hintKey:"tool.blockingBoard.timeline.hintCoverage",blocks:_(R.id,!1)})),{kind:"dialogue",labelKey:"tool.blockingBoard.timeline.trackDialogue",blocks:x(null)}]:[{kind:"cut",labelKey:"tool.blockingBoard.timeline.trackCut",hintKey:a.part.timeline.coverages.length===0?"tool.blockingBoard.timeline.hintCutNeedsCoverage":"tool.blockingBoard.timeline.hintCut",blocks:O(),gaps:F.value,overlaps:B.value},...a.part.cameras.map((R,U)=>({kind:"coverage",cameraId:R.id,...u(R,U),readonly:!0,blocks:_(R.id,!0)}))]),ee=C(()=>a.mode==="blocking"?a.part.actors.length===0?"tool.blockingBoard.timeline.emptyActors":null:a.part.cameras.length===0?"tool.blockingBoard.timeline.emptyCameras":null),D=C(()=>a.part.durationSec*a.zoomPxPerSec),Z=C(()=>a.timeSec*a.zoomPxPerSec),L=C(()=>a.timeSec.toFixed(2).padStart(5,"0"));let V=null;Je(()=>a.zoomPxPerSec,(R,U)=>{const Y=V;V=null,hn(()=>{const he=i.value;if(!he)return;if(Y==="fit"){he.scrollLeft=0;return}if(Y){he.scrollLeft=py({oldZoom:U,newZoom:R,scrollLeft:he.scrollLeft,anchorPx:Y.anchorPx});return}const xe=a.timeSec*U,bt=xe>=he.scrollLeft&&xe<=he.scrollLeft+he.clientWidth?xe-he.scrollLeft:(he.clientWidth-Gi(a.variant))/2;he.scrollLeft=py({oldZoom:U,newZoom:R,scrollLeft:he.scrollLeft,anchorPx:bt})})});function pe(R){if(!R.ctrlKey&&!R.metaKey)return;R.preventDefault();const U=lq(a.zoomPxPerSec,R.deltaY);if(U===a.zoomPxPerSec)return;const Y=i.value?.getBoundingClientRect().left??0;V={anchorPx:R.clientX-Y-Gi(a.variant)},s("update:zoomPxPerSec",U)}const le=C(()=>a.mode!=="camera"?null:a.part.cameras.find(R=>R.id===a.selection.primary)??null);Je(le,(R,U)=>{R?.id!==U?.id&&(ue.value=null)});const me=C(()=>le.value?.keys.map((R,U)=>({index:U,left:R.atSec*a.zoomPxPerSec}))??[]);function oe(R){return Vd(Gd(R.map(Y=>({startSec:Y.left,endSec:Y.left+Y.width}))))*Fl+(hy-Fl)}const fe=C(()=>{const R={};let U=0;for(const Y of j.value)Y.kind==="action"&&Y.actorId&&(R[Y.actorId]=U),U+=oe(Y.blocks);return R}),X=C(()=>a.mode!=="blocking"?[]:a.part.actors.flatMap(R=>R.facingKeys.map((U,Y)=>({actorId:R.id,index:Y,leftPx:li(a.part,a.settled,R.id,U.atSec)*a.zoomPxPerSec,topPx:fe.value[R.id]??0})))),re=G(null),Se=G(null);function Q(R,U,Y){if(R.button!==0||N(U))return;const xe=a.part.actors.find(De=>De.id===U)?.facingKeys[Y];xe&&(Ln(R),re.value={actorId:U,index:Y,pointerId:R.pointerId,startClientX:R.clientX,originMasterSec:li(a.part,a.settled,U,xe.atSec),phase:"pending"})}function $e(){const R=le.value;R&&s("command",{type:"camera.addKey",cameraId:R.id,atSec:a.timeSec})}function Fe(R){const U=le.value;U&&(s("command",{type:"camera.removeKey",cameraId:U.id,index:R}),ue.value===R&&(ue.value=null))}function Ze(){ue.value!==null&&Fe(ue.value)}const ue=G(null),ye=C(()=>{const R=le.value;return!R||ue.value===null?null:R.keys[ue.value]??null});function Ue(R){ue.value=ue.value===R?null:R}function te(R){const U=le.value;!U||ue.value===null||s("command",{type:"camera.setKeyField",cameraId:U.id,index:ue.value,patch:R})}const q=G(null),de=G(null);function Ce(R,U){if(R.button!==0)return;const Y=le.value;if(!Y||N(Y.id))return;const he=Y.keys[U];he&&(Ln(R),q.value={cameraId:Y.id,index:U,pointerId:R.pointerId,startClientX:R.clientX,originAtSec:he.atSec,phase:"pending"})}const Ye=C(()=>a.variant==="timing"?zY(a.part,a.settled,a.timingCollapsed,a.fps):[]);function tt(R){const U=R.lastIndexOf(":");if(U===-1)return[];const Y=R.slice(0,U),he=R.slice(U+1);return he==="action"?M(Y):he==="dialogue"?x(Y):[]}const ht=C(()=>{const R=[];let U=0;for(const Y of Ye.value){R.push(U);
246const he=Y.kind==="action"||Y.kind==="dialogue"?Vd(Gd(tt(Y.key).map(xe=>({startSec:xe.left,endSec:xe.left+xe.width})))):1;U+=he*nl}return R.push(U),R});function Et(R){const U=a.timingCollapsed.includes(R)?a.timingCollapsed.filter(Y=>Y!==R):[...a.timingCollapsed,R];s("update:timingCollapsed",U)}function It(R){const U=R.dataset.row,Y=R.dataset.owner,he=R.dataset.index;return!U||!Y||he===void 0||U!=="waypoint"&&U!=="facing"&&U!=="camera"?null:{row:U,ownerId:Y,index:Number(he)}}function Xt(){return p.value?.querySelector(".bb-tim")?.getBoundingClientRect().top??0}function yt(R){const U=R-Xt(),Y=ht.value;if(U<0)return Math.floor(U/nl);for(let he=0;he<Y.length-1;he++)if(U<Y[he+1])return he;return Y.length-1+Math.floor((U-Y[Y.length-1])/nl)}function Ie(R){const U=ht.value,Y=U.length-1;if(R<Y)return{top:U[R],bottom:U[R+1]};const he=U[Y]+(R-Y)*nl;return{top:he,bottom:he+nl}}const Be=G(null),lt=G(null),Ke=C(()=>{const R=lt.value;if(!R)return null;const U=Math.min(R.startSec,R.curSec)*a.zoomPxPerSec+Gi(a.variant),Y=Math.abs(R.curSec-R.startSec)*a.zoomPxPerSec,he=Math.max(0,Math.min(R.startRow,R.curRow)),xe=Math.max(R.startRow,R.curRow),De=Ie(he).top;return{left:U,width:Y,top:De,height:Ie(xe).bottom-De}}),ct=G(null),xt=G(null),jt=C(()=>ct.value?WY(a.part,ct.value.ref):[]);function Jt(R){return R.row==="camera"?a.part.cameras.find(U=>U.id===R.ownerId)?.name??R.ownerId:a.part.actors.find(U=>U.id===R.ownerId)?.name??R.ownerId}function Mn(R){return R.row==="waypoint"?"tool.blockingBoard.timing.rowPosition":R.row==="facing"?"tool.blockingBoard.timing.rowFacing":"tool.blockingBoard.timeline.modeCamera"}const At=C(()=>{const R=ct.value;if(!R)return{owner:"",row:"",sec:"0.00"};const U=Ae(R.ref);return{owner:Jt(R.ref),row:Mn(R.ref),sec:(U??0).toFixed(2)}});function Ae(R){for(const U of Ye.value)for(const Y of U.keys)if(Y.ref&&nr(Y.ref,R))return Y.masterSec;return null}function Ve(){ct.value=null}Qo("timelineMenu",()=>ct.value!==null,R=>R.id==="overlay.close"?(Ve(),!0):!1);function Xe(R){if(!ct.value)return;const U=R.target;xt.value&&U&&xt.value.contains(U)||Ve()}Jn(()=>document.addEventListener("pointerdown",Xe,!0)),wn(()=>document.removeEventListener("pointerdown",Xe,!0));function ne(R){const U=ct.value;if(U){if(R==="delete"){const Y=sy(U.targetRefs);Y.length===1?s("command",Y[0]):Y.length>1&&s("commands",Y),s("update:keySelection",[])}else{const Y=XY(a.part,a.settled,U.ref,R,a.timeSec);Y&&s("command",Y)}ct.value=null}}function W(R){const Y=R.target.closest(".bb-tim-key[data-row]");if(R.preventDefault(),!Y){Ve();return}const he=It(Y);if(!he||N(he.ownerId))return;const xe=a.keySelection.some(bt=>nr(bt,he)),De=xe?[...a.keySelection]:[he];xe||s("update:keySelection",De),ct.value={ref:he,targetRefs:De,x:R.clientX,y:R.clientY}}function ve(R){const Y=R.target.closest(".bb-tim-key[data-row]");if(Y){const he=It(Y);if(he){const xe=R.shiftKey||R.metaKey||R.ctrlKey;s("update:keySelection",jY(a.keySelection,he,xe))}return}a.keySelection.length>0&&s("update:keySelection",[]),so(R)}const we=G(null),Re=G(null),ut=G(null);Je(()=>a.timeSec,()=>{if(!a.playing||ut.value!==null)return;const R=i.value;R&&(R.scrollLeft=rq({playheadPx:a.timeSec*a.zoomPxPerSec,scrollLeft:R.scrollLeft,viewWidthPx:R.clientWidth-Gi(a.variant),marginPx:iq}))});let bn=!1,Qn=!1,ea=!1,yn=0;function Ln(R){try{R.target?.setPointerCapture?.(R.pointerId)}catch{}}function co(R){(R===null||ut.value===R)&&(ut.value=null),(R===null||we.value?.pointerId===R)&&(we.value=null,Re.value=null),(R===null||q.value?.pointerId===R)&&(q.value=null,de.value=null),(R===null||re.value?.pointerId===R)&&(re.value=null,Se.value=null),(R===null||Be.value?.pointerId===R)&&(Be.value=null),(R===null||lt.value?.pointerId===R)&&(lt.value=null)}const Mo=C(()=>we.value!==null||q.value!==null||re.value!==null||Be.value!==null);Je(Mo,R=>s("update:dragging",R),{flush:"sync"}),wn(()=>{Mo.value&&s("update:dragging",!1)});function Fo(R){co(R.pointerId)}function bo(R){co(R.pointerId)}const Hn=C(()=>{const R=Re.value;return R?j.value.map(U=>({...U,blocks:U.blocks.map(Y=>Y.id===R.id?{...Y,left:R.left,width:R.width}:Y)})):j.value});function Ho(R){const U=a.part.timeline.actions.find(De=>De.id===R);if(U)return{kind:"action",startSec:U.startSec,endSec:U.endSec,ownerId:U.actorId??void 0};const Y=a.part.timeline.dialogues.find(De=>De.id===R);if(Y)return{kind:"dialogue",startSec:Y.startSec,endSec:Y.endSec,ownerId:Y.actorId};const he=a.part.timeline.coverages.find(De=>De.id===R);if(he)return{kind:"coverage",startSec:he.startSec,endSec:he.endSec,ownerId:he.cameraId};const xe=a.part.timeline.cuts.find(De=>De.id===R);return xe?{kind:"cut",startSec:xe.inSec,endSec:xe.outSec,ownerId:xe.coverageId}:null}
246function $o(R,U){if(R==="action"){const he=a.settled.actions.find(xe=>xe.id===U);return he?{startSec:he.settledStartSec,endSec:he.settledEndSec}:null}if(R==="dialogue"){const he=a.settled.dialogues.find(xe=>xe.id===U);return he?{startSec:he.settledStartSec,endSec:he.settledEndSec}:null}if(R==="coverage"){const he=a.resolved.coverages.find(xe=>xe.id===U);return he?{startSec:he.startSec,endSec:he.endSec}:null}const Y=a.resolved.cuts.find(he=>he.id===U);return Y?{startSec:Y.inSec,endSec:Y.outSec}:null}function To(R,U){if(R==="cut"){const Y=a.resolved.coverages.find(he=>he.id===U);if(Y)return{startSec:Y.startSec,endSec:Y.endSec}}return{startSec:0,endSec:a.part.durationSec}}function ta(R,U,Y){const he=[];if(R==="action")for(const De of a.settled.actions)De.actorId===U&&De.id!==Y&&he.push(De.settledStartSec,De.settledEndSec);else if(R==="dialogue")for(const De of a.settled.dialogues)De.actorId===U&&De.id!==Y&&he.push(De.settledStartSec,De.settledEndSec);else if(R==="coverage")for(const De of a.resolved.coverages)De.cameraId===U&&De.id!==Y&&he.push(De.startSec,De.endSec);else for(const De of a.resolved.cuts)De.id!==Y&&he.push(De.inSec,De.outSec);const xe=a.resolved.cuts.flatMap(De=>[De.inSec,De.outSec]);return[...he,...xe]}function wa(R,U){const Y=To(R.blockKind,R.ownerId),xe={neighbors:ta(R.blockKind,R.ownerId,R.blockId),playheadSec:a.timeSec,fps:a.fps,thresholdSec:OY/a.zoomPxPerSec,enabled:a.snap};if(R.kind==="move"){const Ft={startSec:R.display.startSec+U,endSec:R.display.endSec+U},Rt=LY(Ft,xe),Lt=R.display.endSec-R.display.startSec;return $r(Rt.startSec,Lt,Y)}if(R.kind==="trim-start"){const Ft=R.display.startSec+U,Rt=ny(Ft,xe);return yi(R.display,{startSec:Rt},Y,a.fps)??R.display}const De=R.display.endSec+U,bt=ny(De,xe);return yi(R.display,{endSec:bt},Y,a.fps)??R.display}function na(R,U,Y,he,xe){if(Y==="move")return R==="action"?{type:"action.move",actionId:U,startSec:he}:R==="dialogue"?{type:"dialogue.move",dialogueId:U,startSec:he}:R==="coverage"?{type:"coverage.move",coverageId:U,startSec:he}:{type:"cut.move",cutId:U,inSec:he};const De=Y==="trim-start";return R==="action"?{type:"action.trim",actionId:U,...De?{startSec:he}:{endSec:xe}}:R==="dialogue"?{type:"dialogue.trim",dialogueId:U,...De?{startSec:he}:{endSec:xe}}:R==="coverage"?{type:"coverage.trim",coverageId:U,...De?{startSec:he}:{endSec:xe}}:{type:"cut.trim",cutId:U,...De?{inSec:he}:{outSec:xe}}}function Eo(R){return!!(R.closest(".bb-tl-ruler")||R.closest(".bb-tl-playhead-head"))}function go(){return p.value?.querySelector(".bb-tl-ruler")?.getBoundingClientRect().left??0}function en(R){return Math.min(a.part.durationSec,Math.max(0,R))}function eo(R){const U=Aa(ua(R-go(),a.zoomPxPerSec),a.fps),Y=Math.min(a.part.durationSec,Math.max(0,U));yn=Y,s("seek",Y)}function Ut(R){if(R.button!==0)return;bn=!1,Qn=!1;const U=R.target;if(Eo(U)){Ln(R),ut.value=R.pointerId,ea=a.playing,a.playing&&s("pause"),eo(R.clientX);return}if(a.variant==="timing"){const Ft=U.closest(".bb-tim-key[data-row]");if(Ft){const Rt=It(Ft);if(Rt&&!N(Rt.ownerId)){Ln(R);const Lt=a.keySelection.some(on=>nr(on,Rt))?[...a.keySelection]:[Rt];Be.value={refs:Lt,pointerId:R.pointerId,startClientX:R.clientX,phase:"pending"}}return}if(a.boxSelectArmed&&U.closest(".bb-tim")){Ln(R);const Rt=ua(R.clientX-go(),a.zoomPxPerSec),Lt=yt(R.clientY);lt.value={pointerId:R.pointerId,startSec:Rt,startRow:Lt,curSec:Rt,curRow:Lt};return}}const Y=U.closest(".bb-tl-block[data-id]");if(!Y)return;const he=Y.dataset.id;if(!he||Y.classList.contains("bb-tl-block--readonly")||iy(a.part,he,a.lockedIds))return;const xe=Ho(he);
246if(!xe)return;const De=$o(xe.kind,he);if(!De)return;const bt=Number.parseFloat(Y.style.left),Yt=Number.parseFloat(Y.style.width);Ln(R),we.value={kind:NY(R.clientX-go(),bt,Yt),blockId:he,blockKind:xe.kind,ownerId:xe.ownerId,pointerId:R.pointerId,startClientX:R.clientX,phase:"pending",authored:{startSec:xe.startSec,endSec:xe.endSec},display:De}}function zo(R){if(R.pointerType==="mouse"&&R.buttons===0){co(R.pointerId);return}if(ut.value===R.pointerId){eo(R.clientX);return}const U=Be.value;if(U&&U.pointerId===R.pointerId){const Lt=R.clientX-U.startClientX;if(U.phase==="pending"){if(Nc(Lt))return;U.phase="dragging"}return}const Y=lt.value;if(Y&&Y.pointerId===R.pointerId){Y.curSec=ua(R.clientX-go(),a.zoomPxPerSec),Y.curRow=yt(R.clientY);return}const he=q.value;if(he&&he.pointerId===R.pointerId){const Lt=R.clientX-he.startClientX;if(he.phase==="pending"){if(Nc(Lt))return;he.phase="dragging"}const on=ua(Lt,a.zoomPxPerSec),Dt=en(Aa(he.originAtSec+on,a.fps));de.value=Dt*a.zoomPxPerSec;return}const xe=re.value;if(xe&&xe.pointerId===R.pointerId){const Lt=R.clientX-xe.startClientX;if(xe.phase==="pending"){if(Nc(Lt))return;xe.phase="dragging"}const on=ua(Lt,a.zoomPxPerSec),Dt=en(Aa(xe.originMasterSec+on,a.fps));Se.value=Dt*a.zoomPxPerSec;return}const De=we.value;if(!De||De.pointerId!==R.pointerId)return;const bt=R.clientX-De.startClientX;if(De.phase==="pending"){if(Nc(bt))return;De.phase="dragging"}const Yt=ua(bt,a.zoomPxPerSec),{startSec:Ft,endSec:Rt}=wa(De,Yt);Re.value={id:De.blockId,left:Ft*a.zoomPxPerSec,width:(Rt-Ft)*a.zoomPxPerSec}}function nn(R){if(ut.value===R.pointerId){ut.value=null,ea&&yn<a.part.durationSec-1/a.fps&&s("play"),ea=!1;return}const U=Be.value;if(U&&U.pointerId===R.pointerId){if(Be.value=null,U.phase==="dragging"){const on=R.clientX-U.startClientX,Dt=ua(on,a.zoomPxPerSec),Un=VY(a.part,a.settled,U.refs,Dt,a.fps);Un.length===1?s("command",Un[0]):Un.length>1&&s("commands",Un)}return}const Y=lt.value;if(Y&&Y.pointerId===R.pointerId){lt.value=null;const on=UY(Ye.value,{startSec:Math.min(Y.startSec,Y.curSec),endSec:Math.max(Y.startSec,Y.curSec),rowStart:Math.max(0,Math.min(Y.startRow,Y.curRow)),rowEnd:Math.max(Y.startRow,Y.curRow)}),Dt=R.shiftKey?[...a.keySelection,...on.filter(Un=>!a.keySelection.some(Ro=>nr(Ro,Un)))]:on;s("update:keySelection",Dt),s("update:boxSelectArmed",!1);return}const he=q.value;if(he&&he.pointerId===R.pointerId){if(q.value=null,de.value=null,he.phase==="pending"){Ue(he.index);return}if(he.phase==="dragging"){const on=R.clientX-he.startClientX,Dt=ua(on,a.zoomPxPerSec),Un=en(Aa(he.originAtSec+Dt,a.fps));s("command",{type:"camera.moveKey",cameraId:he.cameraId,index:he.index,atSec:Un})}return}const xe=re.value;if(xe&&xe.pointerId===R.pointerId){if(re.value=null,Se.value=null,xe.phase==="dragging"){const on=R.clientX-xe.startClientX,Dt=ua(on,a.zoomPxPerSec),Un=en(Aa(xe.originMasterSec+Dt,a.fps)),Ro=Zs(a.part,a.settled,xe.actorId)(Un).authoredSec;s("command",{type:"actor.moveFacingKey",actorId:xe.actorId,index:xe.index,atSec:Ro})}return}const De=we.value;if(!De||De.pointerId!==R.pointerId)return;if(we.value=null,Re.value=null,De.phase==="pending"){s("select",De.blockId,R.shiftKey),Qn=!0;return}const bt=R.clientX-De.startClientX,Yt=ua(bt,a.zoomPxPerSec),Ft=wa(De,Yt),{startSec:Rt,endSec:Lt}=KY(De.authored,De.display,Ft);s("command",na(De.blockKind,De.blockId,De.kind,Rt,Lt)),bn=!0}function Ma(R){const U=R.dataset.id;if(!U)return!1;const Y=a.resolved.cuts.find(xe=>xe.id===U);if(!Y)return!1;const he=a.resolved.cuts.find(xe=>xe.id!==U&&xe.coverageId===Y.coverageId&&(Math.abs(xe.inSec-Y.outSec)<=xn||Math.abs(Y.inSec-xe.outSec)<=xn));return he?(s("command",{type:"cut.merge",cutId:Y.id,withCutId:he.id}),!0):!1}function Zn(R){const U=R.target,Y=U.closest(".bb-tl-block--cut[data-id]");if(Y&&Ma(Y)||U.closest(".bb-tl-block[data-id]"))return;const he=U.closest(".bb-tl-track[data-kind]");if(!he)return;const xe=he.dataset.kind;if(a.mode==="cut"&&xe==="coverage")return;const De=he.dataset.actorId,bt=he.dataset.cameraId;if(N(De)||N(bt))return;const Yt=Aa(ua(R.clientX-go(),a.zoomPxPerSec),a.fps);if(xe==="action"&&De){s("command",{type:"action.add",actorId:De,startSec:Yt});return}if(xe==="dialogue"&&De){s("command",{type:"dialogue.add",actorId:De,startSec:Yt});return}if(xe==="coverage"&&bt){s("command",{type:"coverage.add",cameraId:bt,startSec:Yt,endSec:Yt+1});return}if(xe==="cut"){const Rt=Yk(a.resolved.cuts.map(On=>({startSec:On.inSec,endSec:On.outSec})),a.part.durationSec).find(On=>Yt>=On.startSec&&Yt<On.endSec);if(!Rt)return;const Lt=a.resolved.coverages.filter(On=>Yt>=On.startSec&&Yt<On.endSec),on=a.part.cameras.some(On=>On.id===a.selection.primary)?a.selection.primary:null,Dt=Lt.find(On=>On.cameraId===on)??Lt[0];if(!Dt)return;const Un=Math.max(Rt.startSec,Dt.startSec),Ro=Math.min(Rt.endSec,Dt.endSec);if(Ro<=Un)return;const xo=a.part.timeline.coverages.find(On=>On.id===Dt.id),Dn=xo?Dt.startSec-xo.startSec:0;s("command",{type:"cut.add",coverageId:Dt.id,inSec:Un-Dn,outSec:Ro-Dn})}}function so(R){if(bn){bn=!1;return}const Y=R.target.closest(".bb-tl-block[data-id]");if(!Y)return;const he=Y.dataset.id;if(!he||(Qn?Qn=!1:s("select",he,R.shiftKey),R.shiftKey))return;const xe=a.resolved.cuts.find(De=>De.id===he);xe&&(a.timeSec<xe.inSec||a.timeSec>=xe.outSec)&&s("seek",xe.inSec)}function ge(R){return a.part.timeline.actions.some(U=>U.id===R)?{type:"action.remove",actionId:R}:a.part.timeline.dialogues.some(U=>U.id===R)?{type:"dialogue.remove",dialogueId:R}:a.part.timeline.propEvents.some(U=>U.id===R)?{type:"propEvent.remove",propEventId:R}:a.part.timeline.coverages.some(U=>U.id===R)?{type:"coverage.remove",coverageId:R}:a.part.timeline.cuts.some(U=>U.id===R)?{type:"cut.remove",cutId:R}:null}function _e(R){switch(R.id){case"timeline.cancelDrag":{const U=we.value!==null||ut.value!==null||q.value!==null||re.value!==null||Be.value!==null||lt.value!==null;return co(null),bn=!0,U}case"timeline.boxSelect":return a.variant!=="timing"?!1:(s("update:boxSelectArmed",!0),!0);case"timeline.step":{const U="seconds"in R.arg?R.arg.seconds:R.arg.frames/a.fps;return s("seek",a.timeSec+U),!0}case"timeline.start":return s("seek",0),!0;case"timeline.end":return s("seek",a.part.durationSec),!0;case"timeline.splitCut":{const U=a.selection.primary;if(U&&a.part.timeline.cuts.some(Y=>Y.id===U)){const Y=tw(a.resolved.cuts,a.part.timeline.cuts,U);s("command",{type:"cut.split",cutId:U,atSec:a.timeSec-Y})}else s("split-at-playhead");return!0}case"timeline.deleteSelection":{if(a.variant==="timing"&&a.keySelection.length>0){const Y=sy(a.keySelection);return Y.length===1?s("command",Y[0]):Y.length>1&&s("commands",Y),s("update:keySelection",[]),!0}const U=a.selection.ids.filter(Y=>!iy(a.part,Y,a.lockedIds)).map(Y=>ge(Y)).filter(Y=>Y!==null);return U.length===1?s("command",U[0]):U.length>1&&s("commands",U),!0}case"timeline.prevKey":return l(-1),!0;case"timeline.nextKey":return l(1),!0;case"timeline.fit":return r(),!0;case"timeline.setLoopFromSelection":{const U=QY({part:a.part,settled:a.settled,resolved:a.resolved,ids:a.selection.ids});return s("update:loop",U?{...U,enabled:!0}:null),!0}default:return!1}}return t({runKeyAction:_e}),(R,U)=>(v(),k("div",{ref_key:"root",ref:p,class:qe(["bb-timeline",{"bb-timeline--collapsed":e.collapsed}]),style:wt({"--tl-label-col":`${g(Gi)(e.variant)}px`}),tabindex:"0","aria-label":R.$t("tool.blockingBoard.timeline.title"),"data-bb-area":"timeline",onPointerdown:Ut,onPointermove:zo,onPointerup:nn,onPointercancel:Fo,onLostpointercapture:bo},[ce(Uq,{playing:e.playing,mode:e.mode,"time-sec":e.timeSec,"duration-sec":e.part.durationSec,"zoom-px-per-sec":e.zoomPxPerSec,collapsed:e.collapsed,fps:e.fps,unit:e.unit,loop:e.loop,speed:e.speed,rate:e.rate,snap:e.snap,parts:e.parts,"active-part-id":e.activePartId,"mode-switch-hidden":e.modeSwitchHidden||e.variant==="timing","selected-key-count":e.variant==="timing"?e.keySelection.length:0,"onUpdate:mode":U[0]||(U[0]=Y=>s("update:mode",Y)),"onUpdate:zoomPxPerSec":U[1]||(U[1]=Y=>s("update:zoomPxPerSec",Y)),"onUpdate:collapsed":U[2]||(U[2]=Y=>s("update:collapsed",Y)),"onUpdate:unit":U[3]||(U[3]=Y=>s("update:unit",Y)),"onUpdate:loop":U[4]||(U[4]=Y=>s("update:loop",Y)),"onUpdate:speed":U[5]||(U[5]=Y=>s("update:speed",Y)),"onUpdate:snap":U[6]||(U[6]=Y=>s("update:snap",Y)),onPlay:U[7]||(U[7]=Y=>s("play")),onPause:U[8]||(U[8]=Y=>s("pause")),onSeek:U[9]||(U[9]=Y=>s("seek",Y)),onPrevKey:U[10]||(U[10]=Y=>l(-1)),onNextKey:U[11]||(U[11]=Y=>l(1)),onSelectPart:U[12]||(U[12]=Y=>s("select-part",Y)),onFit:r},null,8,["playing","mode","time-sec","duration-sec","zoom-px-per-sec","collapsed","fps","unit","loop","speed","rate","snap","parts","active-part-id","mode-switch-hidden","selected-key-count"]),e.collapsed?H("",!0):(v(),k("div",{key:0,ref_key:"bodyRef",ref:i,class:"bb-tl-body",onWheel:pe},[m("div",PZ,[m("div",CZ,[U[15]||(U[15]=m("div",{class:"bb-tl-ruler-spacer"},null,-1)),m("div",BZ,[ce(fq,{"duration-sec":e.part.durationSec,"zoom-px-per-sec":e.zoomPxPerSec,fps:e.fps,unit:e.unit,loop:e.loop},null,8,["duration-sec","zoom-px-per-sec","fps","unit","loop"]),m("div",{class:"bb-tl-playhead-head",style:wt({left:`${Z.value}px`})},S(L.value),5)])]),e.variant==="timing"?(v(),k("div",{key:0,class:"bb-tim-tracks",onDblclick:Zn},[m("div",{class:"bb-tl-tracks",onClick:ve,onContextmenu:W},[ce(EZ,{part:e.part,rows:Ye.value,"zoom-px-per-sec":e.zoomPxPerSec,"width-px":D.value,"key-selection":e.keySelection,"locked-ids":e.lockedIds,"blocks-for":tt,onToggleCollapse:Et},null,8,["part","rows","zoom-px-per-sec","width-px","key-selection","locked-ids"]),Ke.value?(v(),k("div",{key:0,class:"bb-tim-box",style:wt({left:`${Ke.value.left}px`,top:`${Ke.value.top}px`,width:`${Ke.value.width}px`,height:`${Ke.value.height}px`})},null,4)):H("",!0)],32),ct.value?(v(),k("div",{key:0,ref_key:"keyMenuEl",ref:xt,class:"bb-tim-key-menu",role:"menu",style:wt({left:`${ct.value.x}px`,top:`${ct.value.y}px`})},[m("div",_Z,S(R.$t("tool.blockingBoard.timing.keyMenuTitle",{owner:At.value.owner,row:R.$t(At.value.row),sec:At.value.sec})),1),(v(!0),k(ae,null,Me(jt.value,Y=>(v(),k("button",{key:Y,type:"button",class:"bb-tim-key-menu-item","data-action":Y,onClick:he=>ne(Y)},S(R.$t(`tool.blockingBoard.timing.menu.${Y}`)),9,AZ))),128))],4)):H("",!0)],32)):H("",!0),e.variant!=="timing"&&ee.value?(v(),k("div",TZ,S(R.$t(ee.value)),1)):H("",!0),e.variant!=="timing"?(v(),k("div",{key:2,class:"bb-tl-tracks",onClick:so,onDblclick:Zn},[(v(!0),k(ae,null,Me(Hn.value,(Y,he)=>(v(),et(cZ,{key:`${Y.kind}-${Y.actorId??Y.cameraId??he}`,kind:Y.kind,"actor-id":Y.actorId,"camera-id":Y.cameraId,label:Y.label,"label-key":Y.labelKey,"label-params":Y.labelParams,"sublabel-key":Y.sublabelKey,"hint-key":Y.hintKey,"width-px":D.value,blocks:Y.blocks,gaps:Y.gaps,overlaps:Y.overlaps,"owner-id":Y.ownerId,color:Y.color,controls:Y.controls,collapsible:Y.collapsible,collapsed:Y.collapsed,hidden:Y.hidden,locked:Y.locked,indented:Y.indented,onToggleHidden:xe=>s("toggle-hidden",Y.ownerId),onToggleLocked:xe=>s("toggle-locked",Y.ownerId),onToggleCollapsed:xe=>s("update:collapsedActorIds",e.collapsedActorIds.includes(Y.ownerId)?e.collapsedActorIds.filter(De=>De!==Y.ownerId):[...e.collapsedActorIds,Y.ownerId])},null,8,["kind","actor-id","camera-id","label","label-key","label-params","sublabel-key","hint-key","width-px","blocks","gaps","overlaps","owner-id","color","controls","collapsible","collapsed","hidden","locked","indented","onToggleHidden","onToggleLocked","onToggleCollapsed"]))),128)),m("div",RZ,[(v(!0),k(ae,null,Me(X.value,Y=>(v(),k("div",{key:`${Y.actorId}-${Y.index}`,class:"bb-tl-facing-key","data-actor-id":Y.actorId,"data-index":Y.index,style:wt({left:`${re.value?.actorId===Y.actorId&&re.value?.index===Y.index&&Se.value!==null?Se.value:Y.leftPx}px`,top:`${Y.topPx+hy/2}px`}),onPointerdown:he=>Q(he,Y.actorId,Y.index)},null,44,DZ))),128))])],32)):H("",!0),e.variant!=="timing"&&le.value?(v(),k("div",{key:3,class:"bb-tl-track bb-tl-key-lane","data-kind":"cameraKeys","data-camera-id":le.value.id},[m("div",NZ,[m("button",{type:"button",class:"bb-tl-add-key",onClick:$e},S(R.$t("tool.blockingBoard.timeline.addKey")),1)]),m("div",{class:"bb-tl-track-body",style:wt({width:`${D.value}px`})},[(v(!0),k(ae,null,Me(me.value,Y=>(v(),k("div",{key:Y.index,class:qe(["bb-tl-key",{"bb-tl-key--active":Y.index===ue.value}]),"data-index":Y.index,style:wt({left:`${q.value?.index===Y.index&&de.value!==null?de.value:Y.left}px`}),onPointerdown:he=>
246Ce(he,Y.index)},null,46,LZ))),128))],4),ye.value?(v(),k("div",KZ,[m("label",null,[U[16]||(U[16]=We(" X ",-1)),m("input",{type:"number",step:"0.1",value:ye.value.x,onChange:U[13]||(U[13]=Y=>te({x:Number(Y.target.value)}))},null,40,FZ)]),m("label",null,[U[17]||(U[17]=We(" Y ",-1)),m("input",{type:"number",step:"0.1",value:ye.value.y,onChange:U[14]||(U[14]=Y=>te({y:Number(Y.target.value)}))},null,40,HZ)]),m("button",{type:"button",class:"bb-tl-remove-key",onClick:Ze},S(R.$t("tool.blockingBoard.timeline.removeKey")),1)])):H("",!0)],8,OZ)):H("",!0),m("div",zZ,[m("div",{class:"bb-tl-playhead",style:wt({left:`${Z.value}px`})},null,4)])])],544))],46,xZ))}}),UZ=Object.assign(ot(jZ,[["__scopeId","data-v-fa255bf0"]]),{__name:"BbTimeline"});function Na(e,t=0){return{x:e.x,y:t,z:e.y}}const nm=Math.PI/180;function Th(e,t){const n=e*nm,o=t*nm,a=Math.cos(o);return{x:a*Math.cos(n),y:Math.sin(o),z:a*Math.sin(n)}}function nc(e){return-e*nm}function GZ(e){return{x:e.depthM,z:e.widthM}}const VZ=e=>e*Math.PI/180;function WZ(e){const t=e.followCut?e.activeCutCameraId??null:e.selectedCameraId??e.activeCutCameraId??null,n=t===null?"none":!e.followCut&&t===e.selectedCameraId?"selected":"cut";return{cameraId:t,source:n}}const by=89.9;function XZ(e,t){const n=Math.max(-by,Math.min(by,t.pitchDeg)),o=Th(t.headingDeg,n);e.position.set(t.position.x,t.heightM,t.position.y),e.up.set(0,1,0),e.lookAt(t.position.x+o.x,t.heightM+o.y,t.position.y+o.z),e.rotateZ(-VZ(t.rollDeg)),e.fov=t.fovV,e.aspect=16/9,e.near=.05,e.far=100,e.updateProjectionMatrix()}function aw(e,t){const n=e.widthM/2,o=e.depthM/2,{x:a,y:s}=t.position,i=a<-n?-1:a>n?1:0,r=s<-o?-1:s>o?1:0;if(i===0&&r===0)return null;let l;if(i!==0&&r!==0){const c=(a-n*i)/a;l=(s-o*r)/s>c?r>0?"south":"north":i>0?"east":"west"}else i!==0?l=i>0?"east":"west":l=r>0?"south":"north";return e.walls[l]?l:null}function Xd(e,t){const n=e.widthM/2,o=e.depthM/2,a=[];return t.x>n?a.push("east"):t.x<-n&&a.push("west"),t.y>o?a.push("south"):t.y<-o&&a.push("north"),a.filter(s=>e.walls[s])}function YZ(e,t){return t.length===0?[...e]:e.filter(n=>{const o=fu(n.id);return o===null||!t.includes(o)})}const gy=["#f1c9a5","#e0ac85","#c68c63","#a86f4c","#7d4f33","#5a3825"],vy=["#1b1b1b","#3b2a20","#5a3b24","#8a6a45","#b89a6a","#6e6e6e"];function qZ(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return t>>>0}function sw(e,t,n){const o=i=>{const r=parseInt(i.replace("#","").slice(0,6),16);return[r>>16&255,r>>8&255,r&255]},a=o(e),s=o(t);return`#${a.map((i,r)=>Math.round(i+(s[r]-i)*n)).map(i=>i.toString(16).padStart(2,"0")).join("")}`}function ZZ(e){const t=qZ(e.id??"");return{outfit:e.color,pants:sw(e.color,"#3a3f47",.65),skin:gy[t%gy.length],hair:vy[(t>>>8)%vy.length],shoes:"#2a2a2a",hairStyle:e.bodyType==="female"?"long":e.bodyType==="other"?"medium":"short",shoulderScale:e.bodyType==="female"?.92:1,hipScale:e.bodyType==="female"?1.08:1,headRatio:e.bodyType==="child"?.085:.065,scale2d:e.bodyType==="child"?.8:1}}function gl(e){return e.replace(/^mixamorig/i,"").replace(/[^a-z0-9]/gi,"").toLowerCase()}function iw(e,t){let n=null;return e.traverse(o=>{n||t.includes(gl(o.name))&&(n=o)}),n}const Po=e=>e*Math.PI/180,Yd={stand:{hip:0,knee:0,ankle:0,spine:0,shoulder:0,elbow:0},sit:{hip:90,knee:-90,ankle:0,spine:0,shoulder:30,elbow:60},kneel:{hip:0,knee:-90,ankle:-90,spine:0,shoulder:10,elbow:20},crouch:{hip:100,knee:-130,ankle:30,spine:-20,shoulder:40,elbow:40},lie:{hip:0,knee:0,ankle:0,spine:0,shoulder:0,elbow:0}};function yy(e){return e in Yd?e:"stand"}function Rh(e){return e<=ma.movingMinMps?0:e>=ma.runSpeedMps?ma.runAmpDeg:ma.walkAmpDeg*Math.min(1,e/ma.fullAmpSpeedMps)}function JZ(e,t){const n=Rh(t),o=Math.sin(2*Math.PI*e),a=Math.cos(2*Math.PI*e),s=n*o,i=-s,r=-1.2*n*Math.max(0,a),l=-1.2*n*Math.max(0,-a),c=-.6*s,d=-.6*i,u=.6*n;return{hipL:s,hipR:i,kneeL:r,kneeR:l,shoulderL:c,shoulderR:d,elbowL:u,elbowR:u}}const QZ={FL:0,BR:0,FR:.5,BL:.5},eJ={BL:0,FL:.25,BR:.5,FR:.75};function tJ(e,t,n){const o=Rh(n),a=vI(e)==="walk4"?eJ:QZ,s=i=>o*Math.sin(2*Math.PI*(t-i));return{FL:s(a.FL),FR:s(a.FR),BL:s(a.BL),BR:s(a.BR)}}function nJ(e,t,n){const o=Rh(t),a=o*Math.sin(2*Math.PI*e),s=.05*n*Math.abs(Math.sin(2*Math.PI*e))*(o/ma.walkAmpDeg);return{legL:a,legR:a,bobM:s}}function as(e,t){let n=null;return e.traverse(o=>{!n&&o.name===t&&(n=o)}),n}function ri(e,t){e&&e.rotation.set(0,0,t)}function Vi(e,t,n,o){const a=zl(e).jointDrivers?.[n];a?a(o):ri(as(t,n),o)}function ky(e,t,n){const o=Math.cos(e/2),a=Math.sin(e/2),s=Math.cos(t/2),i=Math.sin(t/2),r=Math.cos(n/2),l=Math.sin(n/2);return{x:a*s*r+o*i*l,y:o*i*r-a*s*l,z:o*s*l+a*i*r,w:o*s*r-a*i*l}}function oJ(e,t,n){let o=t.x,a=t.y,s=t.z,i=t.w,r=e.x*o+e.y*a+e.z*s+e.w*i;if(r<0&&(o=-o,a=-a,s=-s,i=-i,r=-r),r>=1-1e-9)return{x:e.x,y:e.y,z:e.z,w:e.w};const l=Math.acos(Math.min(1,r)),c=Math.sqrt(1-r*r);if(Math.abs(c)<1e-9)return{x:(e.x+o)*.5,y:(e.y+a)*.5,z:(e.z+s)*.5,w:(e.w+i)*.5};const d=Math.sin((1-n)*l)/c,u=Math.sin(n*l)/c;return{x:e.x*d+o*u,y:e.y*d+a*u,z:e.z*d+s*u,w:e.w*d+i*u}}function aJ(e){const{x:t,y:n,z:o,w:a}=e,s=2*(t*o+n*a),i=Math.asin(Math.max(-1,Math.min(1,s)));if(Math.abs(s)<.9999999){const c=2*(n*o-t*a),d=1-2*(t*t+n*n),u=2*(t*n-o*a),p=1-2*(n*n+o*o);return{x:Math.atan2(-c,d),y:i,z:Math.atan2(-u,p)}}const r=2*(n*o+t*a),l=1-2*(t*t+o*o);return{x:Math.atan2(r,l),y:i,z:0}}function zl(e){return e.userData}function sJ(e){e.updateMatrixWorld(!0)}function iJ(e,t,n){const o=zl(e),a=o.poseMinY??(o.poseMinY={}),s=a[n];if(typeof s=="number")return s;const i=o.Box3;if(!i)return 0;sJ(e),o.preciseBox&&o.beforeMeasure?.();const r=new i().setFromObject(t,o.preciseBox===!0).min.y;return a[n]=r,r}function Sy(e,t,n,o,a){const s=iJ(e,t,n);if(n==="sit"){const i=a??rP,r=zl(e).sitSeatOffsetM??.5*o;return Math.max(i-r,-s)}return n==="lie"?(a??0)-s:-s}const Iy={x:0,y:0,z:0},wy={x:Math.PI,y:0,z:-Math.PI/2};function rw(e,t){const n=as(e,"body");if(!n)return;const o=zl(e).figureKind??"humanoid",a=o==="humanoid",s=a?yy(String(t.blend.from)):"stand",i=a?yy(String(t.blend.to)):"stand",r=t.blend.u,c=!!t.gait&&t.blend.to==="stand"&&t.gait.speedMps>ma.movingMinMps?r:0;let d=0;if(a){const x=Yd[s],_=Yd[i],O=(K,F)=>K+(F-K)*r,A=c>0&&t.gait?JZ(t.gait.phase,t.gait.speedMps):null,N={L:A?{hip:c*A.hipL,knee:c*A.kneeL,shoulder:c*A.shoulderL,elbow:c*A.elbowL}:{hip:0,knee:0,shoulder:0,elbow:0},R:A?{hip:c*A.hipR,knee:c*A.kneeR,shoulder:c*A.shoulderR,elbow:c*A.elbowR}:{hip:0,knee:0,shoulder:0,elbow:0}};for(const K of["L","R"]){const F=N[K];Vi(e,n,`hip${K}`,Po(O(x.hip,_.hip)+F.hip)),Vi(e,n,`knee${K}`,Po(O(x.knee,_.knee)+F.knee)),Vi(e,n,`ankle${K}`,Po(O(x.ankle,_.ankle))),Vi(e,n,`shoulder${K}`,Po(O(x.shoulder,_.shoulder)+F.shoulder)),Vi(e,n,`elbow${K}`,Po(O(x.elbow,_.elbow)+F.elbow))}Vi(e,n,"spine",Po(O(x.spine,_.spine))),d=-.49*t.heightM*(1-Math.cos(Po(Math.abs(N.L.hip))))}else if(o==="quadruped"){const x=c>0&&t.gait?tJ(t.gait.species,t.gait.phase,t.gait.speedMps):{FL:0,FR:0,BL:0,BR:0}
246;ri(as(n,"hipFL"),Po(c*x.FL)),ri(as(n,"hipFR"),Po(c*x.FR)),ri(as(n,"hipBL"),Po(c*x.BL)),ri(as(n,"hipBR"),Po(c*x.BR))}else if(o==="bird"){const x=c>0&&t.gait?nJ(t.gait.phase,t.gait.speedMps,t.heightM):{legL:0,legR:0,bobM:0};ri(as(n,"hipL"),Po(c*x.legL)),ri(as(n,"hipR"),Po(c*x.legR)),d=c*x.bobM}const u=s==="lie"?wy:Iy,p=i==="lie"?wy:Iy,f=oJ(ky(u.x,u.y,u.z),ky(p.x,p.y,p.z),r),h=aJ(f);n.rotation.set(h.x,h.y,h.z);const b=s==="lie"?-.5*t.heightM:0,I=i==="lie"?-.5*t.heightM:0;n.position.set(b+(I-b)*r,0,0);const y=Sy(e,n,s,t.heightM,t.seatHeightFrom),w=Sy(e,n,i,t.heightM,t.seatHeightTo);n.position.y=y+(w-y)*r+d;const M=zl(e).jointDrivers?.neck;if(M)M(-Po(t.headYawDeg??0));else{const x=as(e,"neck");x&&x.rotation.set(0,-Po(t.headYawDeg??0),0)}}function qd(e,t,n,o){rw(e,{blend:{from:t,to:t,u:1},heightM:n,seatHeightFrom:o,seatHeightTo:o})}function om(e){return e==="female"?"Xbot":"Ybot"}function am(e,t){return`${e}/blocking-board/models/${t}.glb`}const vr=new Map,lw=new WeakSet;let sm=null;async function rJ(e){const{GLTFLoader:t}=await xi(async()=>{const{GLTFLoader:n}=await import("./CGz0H2HK.js");return{GLTFLoader:n}},__vite__mapDeps([14,15]),import.meta.url);return new t().loadAsync(e)}async function lJ(){if(sm)return;const e=await xi(()=>import("./Dw-kuXL3.js"),__vite__mapDeps([16,15]),import.meta.url);sm=t=>e.clone(t)}function cw(e){return e.isSkinnedMesh===!0}function dw(e,t){return t.updateMatrixWorld(!0),t.traverse(n=>{cw(n)&&n.skeleton.update()}),new e.Box3().setFromObject(t,!0)}function uw(e,t,n=rJ){const o=vr.get(t);if(o)return o.promise;const a={status:"loading",promise:Promise.resolve(null)};return a.promise=(async()=>{try{const[{scene:s}]=await Promise.all([n(t),lJ()]);s.traverse(l=>{const c=l.geometry;c&&lw.add(c)});const i=dw(e.THREE,s),r={scene:s,rawHeightM:i.max.y-i.min.y};return a.status="ready",a.template=r,r}catch(s){return a.status="failed",console.warn("[blocking-board] GLB load failed",t,s),null}})(),vr.set(t,a),a.promise}function Kp(e){return vr.get(e)?.template??null}function cJ(e){return vr.get(e)?.status==="failed"}function dJ(e){return typeof e=="object"&&e!==null&&lw.has(e)}function uJ(){for(const[e,t]of vr)t.status==="failed"&&vr.delete(e);for(const[e,t]of yr)t.status==="failed"&&yr.delete(e)}const yr=new Map;async function pJ(e){const{GLTFLoader:t}=await xi(async()=>{const{GLTFLoader:n}=await import("./CGz0H2HK.js");return{GLTFLoader:n}},__vite__mapDeps([14,15]),import.meta.url);return new t().loadAsync(e)}function pw(e,t){return`${e}/blocking-board/motions/${t}.glb`}function fw(e,t=pJ){const n=yr.get(e);if(n)return n.promise;const o={status:"loading",promise:Promise.resolve(null)};return o.promise=(async()=>{try{const{animations:a}=await t(e),s=a[0];if(!s)throw new Error("no animations");return o.status="ready",o.clip=s,s}catch(a){return o.status="failed",console.warn("[blocking-board] motion clip load failed",e,a),null}})(),yr.set(e,o),o.promise}function My(e){return yr.get(e)?.clip??null}function fJ(e){return yr.get(e)?.status==="failed"}function mw(e,t){if(!t)return[];const n=new Set;for(const o of e.timeline.actions){const a=Rm(o);if(!a)continue;const s=e.actors.find(r=>r.id===o.actorId);if(!s)continue;const i=ks(s.species);i!=="humanoid"||!La[a].figureKinds.includes(i)||n.add(pw(t,a))}return[...n].sort()}function mJ(e,t,n){const o=e.THREE,a=new Map;n.traverse(l=>{const c=gl(l.name);l.isBone&&!a.has(c)&&a.set(c,l)});const s=[],i=[];let r=null;for(const l of t.tracks){const c=l.name.lastIndexOf("."),d=a.get(gl(l.name.slice(0,c)));if(!d)continue;const u=l.name.slice(c+1);if(u==="quaternion")s.push(new o.QuaternionKeyframeTrack(`${d.uuid}.quaternion`,l.times.slice(),l.values.slice())),i.push(d);else if(u==="position"&&gl(d.name)==="hips"&&!r){const p=l.values[1]??0;if(Math.abs(p)<1e-6)continue;const f=d.position,h=l.values.slice();for(let b=0;b<h.length;b+=3)h[b]=f.x,h[b+1]=h[b+1]*(f.y/p),h[b+2]=f.z;s.push(new o.VectorKeyframeTrack(`${d.uuid}.position`,l.times.slice(),h)),r=d}}return s.length===0?null:{clip:new o.AnimationClip(t.name,t.duration,s),quaternionBones:i,hipsBone:r}}function hJ(e,t,n,o){const a=e.THREE,s=t.userData;if(s.figureSource!=="glb")return!1;const i=s.boneRest,r=s.driverBones;let l=s.motionClipState;if(l){for(const y of l.touched){const w=i.get(y);w&&!r.has(y)&&y.quaternion.copy(w.q)}const b=l.retargeted.hipsBone,I=b&&i.get(b);b&&I&&b.position.copy(I.p)}if(!n||n.weight<=0||!o)return!1;if(!l||l.motionId!==n.motionId||l.source!==o){const b=s.glbModel,I=mJ(e,o,b);
246if(!I)return!1;const y=new a.AnimationMixer(b);y.clipAction(I.clip).play();const w=l?.touched??new Set;for(const M of I.quaternionBones)w.add(M);I.hipsBone&&w.add(I.hipsBone),l={motionId:n.motionId,source:o,mixer:y,retargeted:I,baseQ:I.quaternionBones.map(()=>new a.Quaternion),baseHips:new a.Vector3,tmpQ:new a.Quaternion,tmpV:new a.Vector3,touched:w},s.motionClipState=l}const{retargeted:c,baseQ:d,baseHips:u,tmpQ:p,tmpV:f}=l,h=c.hipsBone;c.quaternionBones.forEach((b,I)=>d[I].copy(b.quaternion)),h&&u.copy(h.position),l.mixer.setTime(Math.max(0,Math.min(n.localSec,c.clip.duration-1e-4)));for(const b of c.quaternionBones)b.quaternion.normalize();return n.weight<1&&(c.quaternionBones.forEach((b,I)=>{p.copy(b.quaternion),b.quaternion.slerpQuaternions(d[I],p,n.weight)}),h&&(f.copy(h.position),h.position.lerpVectors(u,f,n.weight))),!0}const bJ={hipL:["leftupleg","z"],hipR:["rightupleg","z"],kneeL:["leftleg","z"],kneeR:["rightleg","z"],ankleL:["leftfoot","z"],ankleR:["rightfoot","z"],shoulderL:["leftarm","z"],shoulderR:["rightarm","z"],elbowL:["leftforearm","z"],elbowR:["rightforearm","z"],spine:["spine","z"],neck:["neck","y"]},$y=86,gJ=.06,Ey=new WeakMap,vJ="#1f2328";function yJ(e,t,n){let o=1/0;const a=new e.Vector3;for(const s of t){if(/joints/i.test(s.name))continue;s.skeleton.update();const i=s.skeleton.bones.findIndex(c=>gl(c.name)===n);if(i<0)continue;const r=s.geometry.getAttribute("skinIndex"),l=s.geometry.getAttribute("skinWeight");if(!(!r||!l))for(let c=0;c<r.count;c++){let d=0,u=-1;for(let p=0;p<4;p++){const f=l.getComponent(c,p);f>u&&(u=f,d=r.getComponent(c,p))}d===i&&(s.getVertexPosition(c,a),a.applyMatrix4(s.matrixWorld),a.y<o&&(o=a.y))}}return Number.isFinite(o)?o:null}function Lc(e,t){return iw(e,[t])}function xy(e,t,n,o){const a=t.getWorldQuaternion(new e.Quaternion),s=a.clone().invert().multiply(new e.Quaternion().setFromAxisAngle(n,o)).multiply(a);t.quaternion.multiply(s)}function kJ(e,t,n){const o=t.quaternion.clone(),a=t.getWorldQuaternion(new e.Quaternion),s=a.clone().invert(),i=new e.Quaternion;return r=>{i.setFromAxisAngle(n,r),t.quaternion.copy(o).multiply(i.premultiply(s).multiply(a))}}function SJ(e,t,n,o=sm){const a=e.THREE;if(!o)throw new Error("GLB cloner is not ready");const s=wo(t),i=Vt(t),r=s/n.rawHeightM,l=new a.Group;l.name="figure";const c=new a.Group;c.name="body",l.add(c);const d=new a.Group;d.name="glbOrient",d.rotation.y=Math.PI/2,d.scale.set(r,r,r),c.add(d);const u=o(n.scene);d.add(u);const p=new a.MeshStandardMaterial({color:t.color,roughness:.7}),f=new a.MeshStandardMaterial({color:sw(t.color,vJ,.55),roughness:.7}),h=[];u.traverse(F=>{const B=F;B.isMesh&&(B.material=/joints/i.test(B.name)?f:p,B.castShadow=!0,B.frustumCulled=!1,cw(B)&&h.push(B))}),l.updateMatrixWorld(!0);const b=new a.Vector3(1,0,0),I=Lc(u,"leftarm"),y=Lc(u,"rightarm");I&&xy(a,I,b,-$y*Math.PI/180),l.updateMatrixWorld(!0),y&&xy(a,y,b,$y*Math.PI/180),l.updateMatrixWorld(!0);const w=new Map;u.traverse(F=>{F.isBone&&w.set(F,{q:F.quaternion.clone(),p:F.position.clone()})});const M=new Set;l.userData.glbModel=u,l.userData.boneRest=w,l.userData.driverBones=M;const x={z:new a.Vector3(0,0,1),y:new a.Vector3(0,1,0)},_={};for(const[F,[B,j]]of Object.entries(bJ)){const ee=Lc(u,B);ee&&(_[F]=kJ(a,ee,x[j]),M.add(ee))}const O=()=>{for(const F of h)F.skeleton.update()},A=dw(a,l),N=Math.max(-A.min.z,A.max.z);N>i&&(d.scale.x=r*i/N);let K=Ey.get(n);if(K===void 0){const F=Yd.sit,B=Z=>Z*Math.PI/180;_.hipL?.(B(F.hip)),_.hipR?.(B(F.hip)),_.kneeL?.(B(F.knee)),_.kneeR?.(B(F.knee)),l.updateMatrixWorld(!0);const j=Lc(u,"leftupleg"),ee=j?j.getWorldPosition(new a.Vector3).y:.5*s,D=yJ(a,h,"leftupleg")??ee-gJ*s;for(const Z of Object.values(_))Z(0);l.updateMatrixWorld(!0),K=D/s,Ey.set(n,K)}l.userData.figureKind="humanoid",l.userData.figureSource="glb",l.userData.heightM=s,l.userData.poseMinY={},l.userData.Box3=a.Box3,l.userData.preciseBox=!0,l.userData.beforeMeasure=O,l.userData.jointDrivers=_,l.userData.sitSeatOffsetM=K*s;for(const F of["stand","sit","kneel","crouch","lie"])qd(l,F,s,null);return qd(l,"stand",s,null),l}var IJ=Object.defineProperty,wJ=(e,t,n)=>t in e?IJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Fp=(e,t,n)=>wJ(e,typeof t!="symbol"?t+"":t,n);const MJ=["head"];
246function $J(e,t){class n{constructor(){Fp(this,"x",0),Fp(this,"y",0),Fp(this,"z",0)}set(i,r,l){return this.x=i,this.y=r,this.z=l,this}copy(i){return this.set(i.x,i.y,i.z)}setFromMatrixPosition(i){return this.set(i.elements[12],i.elements[13],i.elements[14])}}const o=iw(e,MJ);if(o)return o.getWorldPosition(new n);const a=e.getWorldPosition(new n);return{x:a.x,y:a.y+t,z:a.z}}function ko(e,t,n,o,a,s){const i=new e.Group;return i.name=n,i.position.set(o,a,s),t.add(i),i}function kn(e,t,n,o,a,s,i,r){const l=new e.Mesh(o,a);return l.name=n,l.position.set(s,i,r),l.castShadow=!0,t.add(l),l}function EJ(e){const t=new Map;return n=>{const o=new e.Color(n),a=o.getHexString();let s=t.get(a);return s||(s=new e.MeshStandardMaterial({color:o,roughness:.7}),t.set(a,s)),s}}function Dh(e,t,n,o,a,s,i){const r=new e.SphereGeometry(n,6,4);kn(e,t,"eyeL",r,o,a,s,-i),kn(e,t,"eyeR",r,o,a,s,i)}const Oh="#2a2a2a",Wo={x:.9,y:1,z:.85};function xJ(e,t,n,o,a){const s=.028*n,i=o-s,r=Math.min(.1225*n,o-2*s),l=Math.min(r*a.shoulderScale,i),c=o-s,d=Math.min(Math.min(.18*n,2*r)/2*a.hipScale,i),u=EJ(e),p=u(a.outfit),f=u(a.pants),h=u(a.skin),b=u(a.hair),I=u(a.shoes),y=u(`#${new e.Color(a.skin).multiplyScalar(.85).getHexString()}`),w=u(Oh),M=ko(e,t,"hips",0,.53*n,0);kn(e,M,"pelvis",new e.BoxGeometry(.1*n,.1*n,2*d),f,0,.02*n,0);const x=ko(e,M,"spine",0,.05*n,0),_=.2525*n,O=ko(e,x,"neck",0,_,0);kn(e,O,"neckMesh",new e.CylinderGeometry(.03*n,.03*n,.045*n,8),h,0,0,0);const A=a.headRatio*n,N=a.headRatio/.065,K=.42*n-A-_;kn(e,O,"head",new e.SphereGeometry(A,12,8),h,0,K,0).scale.set(Wo.x,Wo.y,Wo.z),kn(e,O,"nose",new e.BoxGeometry(.03*n*N,.022*n*N,.018*n*N),y,.07*n*N,K-.01*n*N,0);const B=.15,j=.35,ee=Wo.x*Math.sqrt(1-B*B-(j/Wo.z)**2);Dh(e,O,.08*A,w,ee*A,K+B*A,j*A);const D=kn(e,O,"hair",new e.SphereGeometry(A*1.06,12,8,0,2*Math.PI,0,.45*Math.PI),b,0,K,0);if(D.scale.set(Wo.x,Wo.y,Wo.z),a.hairStyle!=="short"){const V=.22*n-_+.18*n,pe=a.hairStyle==="long"?.18*n:.09*n,le=.5*A,me=-.9*A*1.06+le/2;kn(e,D,"hairBack",new e.BoxGeometry(le/Wo.x,pe/Wo.y,1.6*A/Wo.z),b,me/Wo.x,(V-pe/2-K)/Wo.y,0)}const Z=kn(e,x,"torso",new e.CylinderGeometry(l,.8*l,.23*n,8),p,0,.115*n,0);Z.scale.x=.055*n/l;for(const L of["L","R"]){const V=L==="L"?-1:1,pe=ko(e,x,`shoulder${L}`,0,.22*n,V*c);kn(e,pe,`upperArm${L}`,new e.CylinderGeometry(s,.9*s,.17*n,8),p,0,-.085*n,0);const le=ko(e,pe,`elbow${L}`,0,-.17*n,0);kn(e,le,`lowerArm${L}`,new e.CylinderGeometry(.85*s,.75*s,.15*n,8),h,0,-.075*n,0),kn(e,le,`hand${L}`,new e.BoxGeometry(.05*n,.08*n,1.2*s),h,0,-.19*n,0)}for(const L of["L","R"]){const V=L==="L"?-1:1,pe=ko(e,M,`hip${L}`,0,0,V*.055*n);kn(e,pe,`thigh${L}`,new e.CylinderGeometry(.048*n,.035*n,.245*n,8),f,0,-.1225*n,0);const le=ko(e,pe,`knee${L}`,0,-.245*n,0);kn(e,le,`shin${L}`,new e.CylinderGeometry(.032*n,.024*n,.245*n,8),f,0,-.1225*n,0);const me=ko(e,le,`ankle${L}`,0,-.245*n,0);kn(e,me,`foot${L}`,new e.BoxGeometry(.15*n,.04*n,.055*n),I,.04*n,-.02*n,0)}}function PJ(e,t,n,o,a){const s=2*o,i=.5*n,r=new e.MeshStandardMaterial({color:a,roughness:.7}),l=new e.MeshStandardMaterial({color:new e.Color(a).multiplyScalar(.55),roughness:.7});kn(e,t,"torso",new e.BoxGeometry(.6*s,.35*n,.3*s),r,0,i+.175*n,0);const c=new e.CylinderGeometry(.05*s,.05*s,i,8),d=ko(e,t,"hipFL",.22*s,i,-.1*s);kn(e,d,"legFL",c,r,0,-i/2,0);const u=ko(e,t,"hipFR",.22*s,i,.1*s);kn(e,u,"legFR",c.clone(),r,0,-i/2,0);const p=ko(e,t,"hipBL",-.22*s,i,-.1*s);kn(e,p,"legBL",c.clone(),r,0,-i/2,0);const f=ko(e,t,"hipBR",-.22*s,i,.1*s);kn(e,f,"legBR",c.clone(),r,0,-i/2,0);const h=n-.11*n,b=.5*s-.11*s,I=ko(e,t,"neck",b,h,0);kn(e,I,"head",new e.BoxGeometry(.22*s,.22*n,.18*s),r,0,0,0),kn(e,I,"nose",new e.BoxGeometry(.05*s,.05*n,.06*s),l,.5*s-.025*s-b,0,0);const y=.11*n,w=.09*s;Dh(e,I,.08*Math.min(y,w),new e.MeshStandardMaterial({color:Oh,roughness:.7}),.11*s,.15*y,.35*w);const M=kn(e,t,"tail",new e.CylinderGeometry(.02*s,.01*s,.3*s,8),r,-.35*s,i+.3*n,0);M.rotation.z=Math.PI/2}function CJ(e,t,n,o,a){const s=2*o,i=.25*Math.min(n,s),r=new e.MeshStandardMaterial({color:a,roughness:.7}),l=new e.MeshStandardMaterial({color:new e.Color(a).multiplyScalar(.55),roughness:.7}),c=kn(e,t,"torso",new e.SphereGeometry(i,10,8),r,0,.475*n,0),d=.8*o/(2*i),u=.45*n/(2*i);c.scale.set(d,u,d);const p=.15*n,f=d*i,h=n-p,b=ko(e,t,"neck",f,h,0);kn(e,b,"head",new e.SphereGeometry(p,10,8),r,0,0,0),kn(e,b,"nose",new e.BoxGeometry(.08*n,.05*n,.04*n),l,p+.04*n,0,0),Dh(e,b,.08*p,new e.MeshStandardMaterial({color:Oh,roughness:.7}),Math.sqrt(1-.15**2-.35**2)*p,.15*p,.35*p);const I=.45*o,y=new e.BoxGeometry(.5*o,.04*n,.9*o);kn(e,t,"wingL",y,r,0,.475*n,-(o-I)),kn(e,t,"wingR",y.clone(),r,0,.475*n,o-I);const w=.02*Math.min(n,s),M=new e.CylinderGeometry(w,w,.25*n,8),x=ko(e,t,"hipL",0,.25*n,-.15*o);kn(e,x,"legL",M,r,0,-.125*n,0);const _=ko(e,t,"hipR",0,.25*n,.15*o);
246kn(e,_,"legR",M.clone(),r,0,-.125*n,0)}function BJ(e,t,n=null){const o=e.THREE,a=wo(t),s=Vt(t),i=ks(t.species);if(n&&i==="humanoid")return SJ(e,t,n.template,n.cloner);const r=new o.Group;r.name="figure",r.userData.figureKind=i,r.userData.figureSource="procedural",r.userData.heightM=a,r.userData.poseMinY={},r.userData.Box3=o.Box3;const l=new o.Group;l.name="body",r.add(l),i==="quadruped"?PJ(o,l,a,s,t.color):i==="bird"?CJ(o,l,a,s,t.color):xJ(o,l,a,s,ZZ(t));for(const c of cu)qd(r,c,a,null);return qd(r,"stand",a,null),r}const _J="#1b1d22",Zd=new WeakMap,Nh=new WeakSet;function oc(e,t,n){let o=Zd.get(e);o||(o=new Map,Zd.set(e,o));const a=o.get(t);if(a)return a;const s=n();return o.set(t,s),Nh.add(s),s}function AJ(e){return typeof e=="object"&&e!==null&&Nh.has(e)}function TJ(e){const t=Zd.get(e);if(t){for(const n of t.values())Nh.delete(n),n.dispose();t.clear(),Zd.delete(e)}}function hs(e){return e.toFixed(4)}function Te(e,t,n,o,a){const{T:s}=e,i=oc(s,`${e.keyPrefix}|box|${hs(n.x)}|${hs(n.y)}|${hs(n.z)}`,()=>new s.BoxGeometry(n.x,n.y,n.z)),r=new s.Mesh(i,a);r.name=t,r.position.set(o.x,o.y,o.z),r.castShadow=!0,e.group.add(r)}function Py(e,t,n,o,a,s){Te(e,t,n,o,a),e.group.children[e.group.children.length-1].rotation.z=s}function Wt(e,t,n){return Math.min(e,t*n)}function zt(e,t,n,o,a,s,i,r,l="y"){const{T:c}=e,d=oc(c,`${e.keyPrefix}|cyl|${hs(n)}|${hs(o)}|${hs(a)}|${s}`,()=>new c.CylinderGeometry(n,o,a,s)),u=new c.Mesh(d,r);u.name=t,u.position.set(i.x,i.y,i.z),l==="z"&&(u.rotation.x=Math.PI/2),l==="x"&&(u.rotation.z=Math.PI/2),u.castShadow=!0,e.group.add(u)}function hw(e,t,n,o,a){const{T:s}=e,i=oc(s,`${e.keyPrefix}|sphere|${hs(n)}`,()=>new s.SphereGeometry(n,8,6)),r=new s.Mesh(i,a);r.name=t,r.position.set(o.x,o.y,o.z),r.castShadow=!0,e.group.add(r)}function Ku(e,t,n,o,a,s,i){const{T:r}=e,l=oc(r,`${e.keyPrefix}|cone|${hs(n)}|${hs(o)}|${a}`,()=>new r.ConeGeometry(n,o,a)),c=new r.Mesh(l,i);c.name=t,c.position.set(s.x,s.y,s.z),c.castShadow=!0,e.group.add(c)}function Fu(e,t){return e>=t?{axis:"x",L:e,T:t}:{axis:"z",L:t,T:e}}function Jd(e,t,n,o){return e.axis==="x"?{x:t,y:n,z:o}:{x:o,y:n,z:t}}function vl(e,t,n){return e.axis==="x"?{x:t,y:n,z:0}:{x:0,y:n,z:t}}function bw(e,t,n){const o=e/2-n/2,a=t/2-n/2;return[[o,a],[o,-a],[-o,a],[-o,-a]]}function RJ(e,t){const{D:n,W:o,H:a,m:s,bodyMat:i,auxMat:r}=e,l=Math.min(.05,.15*a);Te(e,"top",{x:n,y:l,z:o},{x:0,y:a-l/2,z:0},t??i);const c=Math.min(.06,.15*s),d=a-l;bw(n,o,c).forEach(([u,p],f)=>{Te(e,`leg${f+1}`,{x:c,y:d,z:c},{x:u,y:d/2,z:p},r)})}function DJ(e,t){const{D:n,W:o,H:a,m:s,bodyMat:i,auxMat:r}=e,l=Math.min(t,a-.05);Te(e,"seat",{x:n,y:.05,z:o},{x:0,y:l-.025,z:0},i);const c=Math.min(.06,.15*s),d=l-.05;bw(n,o,c).forEach(([p,f],h)=>{Te(e,`leg${h+1}`,{x:c,y:d,z:c},{x:p,y:d/2,z:f},r)});const u=Math.min(.06,.2*n);Te(e,"back",{x:u,y:a-l,z:o},{x:-n/2+u/2,y:l+(a-l)/2,z:0},i)}function OJ(e,t){const{D:n,W:o,H:a,bodyMat:s}=e,i=t;Te(e,"seat",{x:n,y:i,z:o},{x:0,y:i/2,z:0},s);const r=.25*n;Te(e,"back",{x:r,y:a-i,z:o},{x:-n/2+r/2,y:i+(a-i)/2,z:0},s);const l=.5*(a-i),c=Math.min(.15,.1*o),d={x:n-r,y:l,z:c},u=r/2,p=i+l/2,f=o/2-c/2;Te(e,"armL",d,{x:u,y:p,z:-f},s),Te(e,"armR",d,{x:u,y:p,z:f},s)}function NJ(e){const{D:t,W:n,H:o,bodyMat:a}=e;Te(e,"frame",{x:t,y:.45*o,z:n},{x:0,y:.225*o,z:0},a);const s=Math.min(.06,.1*t);Te(e,"mattress",{x:t-s,y:.4*o,z:.96*n},{x:s/2,y:.65*o,z:0},a),Te(e,"headboard",{x:s,y:o,z:n},{x:-t/2+s/2,y:o/2,z:0},a)}function LJ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e;Te(e,"body",{x:t,y:o,z:n},{x:0,y:o/2,z:0},a);const i={x:.01,y:.02,z:.9*n},r=t/2-.005;Te(e,"front1",i,{x:r,y:o/3,z:0},s),Te(e,"front2",i,{x:r,y:2*o/3,z:0},s)}function KJ(e){const{H:t,m:n,bodyMat:o,auxMat:a}=e,s=.35*t;zt(e,"pot",.35*n,.28*n,s,8,{x:0,y:s/2,z:0},a);const i=Math.min(.5*n,.325*t);hw(e,"foliage",i,{x:0,y:t-i,z:0},o)}function FJ(e){const{H:t,m:n,bodyMat:o,auxMat:a}=e,s=.45*t;zt(e,"trunk",.12*n,.15*n,s,8,{x:0,y:s/2,z:0},a),Ku(e,"canopy",.5*n,.6*t,8,{x:0,y:.7*t,z:0},o)}function HJ(e){const{H:t,m:n,bodyMat:o,auxMat:a}=e,s=n/2,i=.03;zt(e,"base",.9*s,.9*s,i,8,{x:0,y:i/2,z:0},a);const r=Math.max(.01,t-.03-1.2*s);zt(e,"pole",.15*s,.15*s,r,8,{x:0,y:i+r/2,z:0},o);const l=.6*s;hw(e,"head",l,{x:0,y:t-l,z:0},o)}function zJ(e){const{H:t,m:n,bodyMat:o}=e;zt(e,"pillar",.5*n,.5*n,t,12,{x:0,y:t/2,z:0},o)}function jJ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.25*o,.18*t),r=Math.min(.2,.12*n);Te(e,"body",{x:t,y:.4*o,z:n},{x:0,y:.45*o,z:0},a),Te(e,"cabin",{x:.55*t,y:.35*o,z:.9*n},{x:-.05*t,y:.825*o,z:0},a);const l=t/2-1.3*i,c=n/2-r/2;
246[[l,c],[l,-c],[-l,c],[-l,-c]].forEach(([u,p],f)=>{zt(e,`wheel${f+1}`,i,i,r,12,{x:u,y:i,z:p},s,"z")})}function UJ(e){const{D:t,W:n,H:o,bodyMat:a}=e,s=x0(o),i=o/s;for(let r=0;r<s;r+=1){const l=t-r*t/s;Te(e,`step${r}`,{x:l,y:i,z:n},{x:-t/2+r*t/s+l/2,y:(r+.5)*i,z:0},a)}}function GJ(e){const{D:t,W:n,H:o,bodyMat:a}=e;Te(e,"platform",{x:t,y:o,z:n},{x:0,y:o/2,z:0},a)}function VJ(e){const{T:t,D:n,W:o,H:a,bodyMat:s}=e,i=oc(t,`${e.keyPrefix}|wedge`,()=>{const l=-n/2,c=n/2,d=-o/2,u=o/2,p=[l,0,d],f=[c,0,d],h=[c,a,d],b=[l,0,u],I=[c,0,u],y=[c,a,u],w=[[p,h,f],[b,I,y],[p,f,I],[p,I,b],[f,h,y],[f,y,I],[p,b,y],[p,y,h]],M=new t.BufferGeometry;return M.setAttribute("position",new t.Float32BufferAttribute(w.flat(2),3)),M.computeVertexNormals?.(),M}),r=new t.Mesh(i,s);r.name="ramp",r.castShadow=!0,e.group.add(r)}function WJ(e){const{D:t,W:n,H:o,bodyMat:a}=e,s=Tt(e.key??"archway")?.passage??{widthM:0,heightM:0},i=Math.max(0,(n-s.widthM)/2),r=n-2*i,l=Math.max(0,o-s.heightM);for(const[c,d]of[-1,1].entries())Te(e,`jamb${c+1}`,{x:t,y:o,z:i},{x:0,y:o/2,z:d*(n/2-i/2)},a);Te(e,"lintel",{x:t,y:l,z:r},{x:0,y:o-l/2,z:0},a)}function XJ(e){const{D:t,W:n,H:o,bodyMat:a}=e;Te(e,"body",{x:t,y:o,z:n},{x:0,y:o/2,z:0},a)}function YJ(e){const{D:t,W:n,H:o,bodyMat:a}=e;if(o<=t&&o<=n){Te(e,"body",{x:t,y:o,z:n},{x:0,y:o/2,z:0},a);return}const s=Math.min(t,n),i=t<=n?{x:s,y:o,z:n}:{x:t,y:o,z:s};Te(e,"body",i,{x:0,y:o/2,z:0},a)}function qJ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.03,t/2,o/2);zt(e,"rod",i,i,n,8,{x:0,y:o-i,z:0},s,"z");const r=Math.min(t/2,n/12),l=Math.max(.01,o-2*i);for(let c=0;c<6;c+=1){const d=-n/2+r+c*(n-2*r)/5;zt(e,`fold${c+1}`,r,r,l,6,{x:0,y:l/2,z:d},a)}}function ZJ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(t,.04),r=Math.min(.04,.06*o),l=Math.min(.12,.2*n);Te(e,"footL",{x:t,y:r,z:l},{x:0,y:r/2,z:-(n/2-l/2)},s),Te(e,"footR",{x:t,y:r,z:l},{x:0,y:r/2,z:n/2-l/2},s),Te(e,"panel",{x:i,y:o-r,z:.96*n},{x:0,y:r+(o-r)/2,z:0},a)}function JJ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(t,.04),r=n<2?.2*o:0,l=o-r,c=Math.min(.05,.06*l),d=Math.min(.05,.06*n);if(Te(e,"panel",{x:i,y:l,z:n-2*d},{x:0,y:r+l/2,z:0},a),Te(e,"frameTop",{x:i,y:c,z:n},{x:0,y:o-c/2,z:0},s),Te(e,"frameBottom",{x:i,y:c,z:n},{x:0,y:r+c/2,z:0},s),Te(e,"frameL",{x:i,y:l,z:d},{x:0,y:r+l/2,z:-(n/2-d/2)},s),Te(e,"frameR",{x:i,y:l,z:d},{x:0,y:r+l/2,z:n/2-d/2},s),r>0){const u=Math.min(.06,.1*n),p=Math.min(t,.06);Te(e,"leg1",{x:p,y:r,z:u},{x:0,y:r/2,z:-.35*n},s),Te(e,"leg2",{x:p,y:r,z:u},{x:0,y:r/2,z:.35*n},s)}}function QJ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=.8*t;Te(e,"body",{x:i,y:o,z:n},{x:-t/2+i/2,y:o/2,z:0},a);const r=t-i,l=Math.min(.06,.08*o);Te(e,"keys",{x:r,y:l,z:.92*n},{x:t/2-r/2,y:.55*o,z:0},s);const c=Math.min(.05,.05*o);Te(e,"lid",{x:i,y:c,z:n},{x:-t/2+i/2,y:o-c/2,z:0},s)}function eQ(e){const{D:t,W:n,H:o,m:a,key:s,bodyMat:i,auxMat:r}=e,l=Math.min(.06,.1*o);if(Te(e,"body",{x:.94*t,y:o-l,z:.98*n},{x:0,y:(o-l)/2,z:0},i),Te(e,"top",{x:t,y:l,z:n},{x:0,y:o-l/2,z:0},r),s==="stove"){const c=Math.min(.12,.2*a),d=Math.min(.02,.03*o);[[t/4,n/4],[t/4,-n/4],[-t/4,n/4],[-t/4,-n/4]].forEach(([p,f],h)=>{zt(e,`burner${h+1}`,c,c,d,12,{x:p,y:o-d/2,z:f},i)})}}function tQ(e){const{H:t,m:n,bodyMat:o,auxMat:a}=e,s=Math.min(.07,.15*t),i=n/2;zt(e,"seat",i,i,s,12,{x:0,y:t-s/2,z:0},o);const r=Math.min(.02,.06*n),l=t-s,c=Math.max(0,n/2-r-.02);[[c,c],[c,-c],[-c,c],[-c,-c]].forEach(([u,p],f)=>{zt(e,`leg${f+1}`,r,r,l,6,{x:u,y:l/2,z:p},a)})}function nQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=.28*t;Te(e,"tank",{x:i,y:o,z:n},{x:-t/2+i/2,y:o/2,z:0},a);const r=Math.min(n/2,.3*t),l=t/2-r-.01;zt(e,"bowl",r,.85*r,.45*o,12,{x:l,y:.225*o,z:0},a);const c=Math.min(.05,.06*o);zt(e,"seat",r,r,c,12,{x:l,y:.45*o+c/2,z:0},s)}function oQ(e){const{D:t,W:n,H:o,m:a,bodyMat:s,auxMat:i}=e;Te(e,"body",{x:t,y:o,z:n},{x:0,y:o/2,z:0},s);const r=Math.min(.1,.12*a);Te(e,"basin",{x:t-2*r,y:.8*o,z:n-2*r},{x:0,y:.6*o,z:0},i)}function aQ(e,t){const{D:n,W:o,H:a,m:s,auxMat:i}=e,r=Math.min(.04,.06*s),l=Math.min(.08,.05*a),c=a-l;Te(e,"tray",{x:n,y:l,z:o},{x:0,y:l/2,z:0},i),Te(e,"wallBack",{x:r,y:c,z:o},{x:-n/2+r/2,y:l+c/2,z:0},t),Te(e,"wallL",{x:n,y:c,z:r},{x:0,y:l+c/2,z:-(o/2-r/2)},t),Te(e,"wallR",{x:n,y:c,z:r},{x:0,y:l+c/2,z:o/2-r/2},t),zt(e,"post",r,r,a,8,{x:n/2-r,y:a/2,z:o/2-r},i)}function sQ(e){const{D:t,W:n,H:o,m:a,bodyMat:s,auxMat:i}=e,r=Math.min(.04,.08*a);Te(e,"sideL",{x:t,y:o,z:r},{x:0,y:o/2,z:-(n/2-r/2)},s),Te(e,"sideR",{x:t,y:o,z:r},{x:0,y:o/2,z:n/2-r/2},s);const l=Math.min(.03,.05*o);for(let c=0;c<4;c+=1){const d=(c+1)/4*o-l/2;Te(e,`shelf${c+1}`,{x:.96*t,y:l,z:n-2*r},{x:0,y:d,z:0},i)}}function iQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.06,.1*o),r=.9*n,l=.22*o,c=.18*o,d=2*i;Te(e,"frame",{x:t,y:l,z:n},{x:0,y:d+l/2,z:0},a);const u=Math.min(.06,.06*t);Te(e,"mattress",{x:t-u,y:c,z:.94*n},{x:u/2,y:d+l+c/2,z:0},s),Te(e,"headboard",{x:u,y:o,z:n},{x:-t/2+u/2,y:o/2,z:0},a);const p=d+l+c+.1*o,f=n/2-.02*n;Te(e,"railL",{x:.5*t,y:.16*o,z:.04*n},{x:0,y:p,z:-f},s),Te(e,"railR",{x:.5*t,y:.16*o,z:.04*n},{x:0,y:p,z:f},s);const h=t/2-2*i;zt(e,"wheelFront",i,i,r,8,{x:h,y:i,z:0},s,"z"),zt(e,"wheelRear",i,i,r,8,{x:-h,y:i,z:0},s,"z")}function rQ(e,t){const{D:n,W:o,H:a,bodyMat:s,auxMat:i}=e,r=Math.min(t,.6*a),l=Math.min(.42*n,.45*a,.9*r),c=Math.min(.05,.1*o),d=o/2-c/2;zt(e,"wheelL",l,l,c,12,{x:-.06*n,y:l,z:-d},i,"z"),zt(e,"wheelR",l,l,c,12,{x:-.06*n,y:l,z:d},i,"z");const u=.35*l;zt(e,"casterL",u,u,c,8,{x:n/2-u,y:u,z:-.25*o},i,"z"),zt(e,"casterR",u,u,c,8,{x:n/2-u,y:u,z:.25*o},i,"z"),Te(e,"seat",{x:.5*n,y:.05,z:.7*o},{x:0,y:r-.025,z:0},s);const p=Math.min(.06,.1*n);Te(e,"back",{x:p,y:a-r,z:.7*o},{x:-.2*n,y:r+(a-r)/2,z:0},s)}function lQ(e){const{D:t,W:n,H:o,m:a,bodyMat:s,auxMat:i}=e,r=Math.min(.06,.1*o);Te(e,"base",{x:t,y:r,z:n},{x:0,y:r/2,z:0},s);const l=o-r;Ku(e,"cone",.45*a,l,12,{x:0,y:r+l/2,z:0},s);const c=Math.min(.06,.1*o);zt(e,"band",.28*a,.28*a,c,12,{x:0,y:r+.45*l,z:0},i)}function cQ(e){const{H:t,m:n,bodyMat:o,auxMat:a}=e,s=n/2;zt(e,"body",.95*s,.8*s,.9*t,12,{x:0,y:.45*t,z:0},o),zt(e,"lid",s,s,.1*t,12,{x:0,y:.95*t,z:0},a)}function dQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.45*t,.48*o),r=Math.min(.06,.25*n),l=t/2-i;zt(e,"wheelFront",i,i,r,12,{x:l,y:i,z:0},s,"z"),zt(e,"wheelRear",i,i,r,12,{x:-l,y:i,z:0},s,"z");const c=Math.min(.05,.06*o);Te(e,"downTube",{x:.55*t,y:c,z:.1*n},{x:0,y:.55*o,z:0},a),Te(e,"seatTube",{x:c,y:.3*o,z:.1*n},{x:-.12*t,y:.66*o,z:0},a),Te(e,"topTube",{x:.35*t,y:c,z:.1*n},{x:0,y:.78*o,z:0},a);const d=Math.min(.02,.03*o);zt(e,"handle",d,d,.8*n,8,{x:l,y:o-d,z:0},s,"z"),Te(e,"saddle",{x:.18*t,y:.05*o,z:.25*n},{x:-.15*t,y:o-.025*o,z:0},a)}function uQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.4*t,.35*o),r=Math.min(.12,.3*n),l=t/2-i;zt(e,"wheelFront",i,i,r,12,{x:l,y:i,z:0},s,"z"),zt(e,"wheelRear",i,i,r,12,{x:-l,y:i,z:0},s,"z"),Te(e,"body",{x:.6*t,y:.25*o,z:.6*n},{x:0,y:.55*o,z:0},a),Te(e,"seat",{x:.3*t,y:.1*o,z:.5*n},{x:-.12*t,y:.73*o,z:0},a);const c=Math.min(.03,.04*o);zt(e,"handle",c,c,.9*n,8,{x:.28*t,y:o-c,z:0},s,"z")}function pQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}
246=e,i=Math.min(.08,.06*n),r=Math.min(t,.08);[-(n/2-i/2),0,n/2-i/2].forEach((u,p)=>{Te(e,`post${p+1}`,{x:r,y:o,z:i},{x:0,y:o/2,z:u},a)});const c=Math.min(.06,.12*o),d=Math.min(t,.05);Te(e,"rail1",{x:d,y:c,z:n},{x:0,y:.35*o,z:0},s),Te(e,"rail2",{x:d,y:c,z:n},{x:0,y:.8*o,z:0},s)}function fQ(e){const{D:t,W:n,H:o,m:a,bodyMat:s,auxMat:i}=e,r=Math.min(.12,.06*o),l=Math.min(.06,.04*a),c=o-r;zt(e,"postL",l,l,c,8,{x:t/2-l,y:c/2,z:-(n/2-l)},i),zt(e,"postR",l,l,c,8,{x:t/2-l,y:c/2,z:n/2-l},i),Te(e,"roof",{x:t,y:r,z:n},{x:0,y:o-r/2,z:0},s);const d=Math.min(.08,.1*t);Te(e,"backWall",{x:d,y:.85*c,z:n},{x:-t/2+d/2,y:.425*c,z:0},s);const u=Math.min(.45,.2*o);Te(e,"bench",{x:.3*t,y:.06,z:.8*n},{x:-t/2+d+.15*t,y:u,z:0},i)}function mQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.02,.06*o);Te(e,"body",{x:t,y:o-2*i,z:n},{x:0,y:(o-2*i)/2,z:0},a),zt(e,"handle",i,i,.5*n,8,{x:0,y:o-i,z:0},s,"z")}function hQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.025,.06*o);Te(e,"body",{x:t,y:o-2*i,z:n},{x:0,y:(o-2*i)/2,z:0},a);const r=Fu(t,n);zt(e,"handle",i,i,.35*r.L,8,{x:0,y:o-i,z:0},s,r.axis)}function bQ(e){const{H:t,m:n,bodyMat:o,auxMat:a}=e,s=.42*n;zt(e,"body",s,.85*s,t,12,{x:0,y:t/2,z:0},o);const i=.05*n;zt(e,"handle",i,i,.5*t,6,{x:n/2-i,y:t/2,z:0},a)}function gQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e;Te(e,"pages",{x:.96*t,y:.8*o,z:.96*n},{x:0,y:.4*o,z:0},s),Te(e,"cover",{x:t,y:.2*o,z:n},{x:0,y:.9*o,z:0},a)}function vQ(e){const{H:t,m:n,bodyMat:o,auxMat:a}=e,s=Math.min(.02,.15*n);zt(e,"shaft",s,s,t,8,{x:0,y:t/2,z:0},a);const i=.3*t;Ku(e,"canopy",n/2,i,10,{x:0,y:t-i/2,z:0},o)}function yQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Fu(t,n),r=Math.min(.18*o,.25*i.T);zt(e,"barrel",r,r,.5*i.L,8,vl(i,.25*i.L,.68*o),s,i.axis),Te(e,"receiver",Jd(i,.3*i.L,.5*o,.8*i.T),vl(i,0,.75*o),a),Te(e,"stock",Jd(i,.32*i.L,.66*o,.7*i.T),vl(i,-.34*i.L,.33*o),a)}function kQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Fu(t,n);Te(e,"slide",Jd(i,i.L,.45*o,.8*i.T),vl(i,0,.775*o),a),Te(e,"grip",Jd(i,.3*i.L,.55*o,.7*i.T),vl(i,-.3*i.L,.275*o),s)}function SQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e;Te(e,"body",{x:t,y:.6*o,z:n},{x:0,y:.3*o,z:0},a),Te(e,"screen",{x:.85*t,y:.42*o,z:.9*n},{x:0,y:.79*o,z:0},s)}function IQ(e){const{D:t,W:n,H:o,m:a,bodyMat:s}=e;if(o>=a){zt(e,"body",a/2,a/2,o,10,{x:0,y:o/2,z:0},s);return}const i=Fu(t,n);zt(e,"body",o/2,o/2,i.L,10,{x:0,y:o/2,z:0},s,i.axis)}function wQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Math.min(.1*t,.06),r=t-i;Te(e,"leaf",{x:r,y:o,z:n},{x:-t/2+r/2,y:o/2,z:0},a);const l=Math.min(.03,.02*o,.06*n);zt(e,"handle",l,l,i,8,{x:t/2-i/2,y:.45*o,z:n/2-.16*n},s,"x")}function MQ(e){const{D:t,W:n,H:o,m:a,bodyMat:s,auxMat:i}=e,r=.3*o,l=o-r;Te(e,"body",{x:t,y:l,z:n},{x:0,y:l/2,z:0},s),Ku(e,"roof",a/2,r,4,{x:0,y:l+r/2,z:0},i);const c=Math.min(1,.3*n),d=Math.min(2.05,.5*l),u=Math.min(.06,.1*t);Te(e,"door",{x:u,y:d,z:c},{x:t/2-u/2,y:d/2,z:0},i)}function $Q(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Wt(.04,.06,o);Te(e,"top",{x:t,y:i,z:n},{x:0,y:o-i/2,z:0},a);const r=.35*n,l=.9*t,c=o-i,d=n/2-r/2;Te(e,"pedestal",{x:l,y:c,z:r},{x:0,y:c/2,z:d},a);const u=Wt(.012,.03,t),p=Wt(.01,.02,o),f=(c-4*p)/3;for(let M=0;M<3;M++){const x=p+f/2+M*(f+p);Te(e,`drawer${M+1}`,{x:u,y:f,z:.9*r},{x:l/2+u/2,y:x,z:d},s)}const h=Wt(.05,.08,n),b=o-i;Te(e,"leg1",{x:h,y:b,z:h},{x:t/2-h/2,y:b/2,z:-n/2+h/2},s),Te(e,"leg2",{x:h,y:b,z:h},{x:-t/2+h/2,y:b/2,z:-n/2+h/2},s);const I=Wt(.015,.04,t),y=.45*o,w=n-r-h;Te(e,"modesty",{x:I,y,z:w},{x:-.45*t,y:o-i-y/2,z:(h-r)/2},s)}function EQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Wt(.045,.06,o);Te(e,"top",{x:t,y:i,z:n},{x:0,y:o-i/2,z:0},a);const r=.28*n,l=.9*t,c=o-i,d=Wt(.012,.03,t),u=Wt(.01,.02,o),p=(c-3*u)/2;for(const[b,I]of[["L",-(n/2-r/2)],["R",n/2-r/2]]){Te(e,`pedestal${b}`,{x:l,y:c,z:r},{x:0,y:c/2,z:I},a);for(let y=0;y<2;y++){const w=u+p/2+y*(p+u);Te(e,`drawer${b}${y+1}`,{x:d,y:p,z:.9*r},{x:l/2+d/2,y:w,z:I},s)}}const f=Wt(.015,.04,t),h=.5*o;Te(e,"modesty",{x:f,y:h,z:n-2*r},{x:-.45*t,y:o-i-h/2,z:0},s)}function gw(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Wt(.02,.05,o);Te(e,"foot",{x:.6*t,y:r,z:.4*n},{x:0,y:r/2,z:0},s);const l=Wt(.03,.3,t),c=.62*o,d=o-c/2,u=Math.max(.001,o-c-r),p=-(l/2+.06*t);Te(e,"neck",{x:.12*t,y:u+.02*o,z:.1*n},{x:p,y:r+u/2,z:0},s),Te(e,"back",{x:l,y:c,z:n},{x:0,y:d,z:0},a);const f=Wt(.015,.05,n);Te(e,"screen",{x:.004,y:c-2*f,z:n-2*f},{x:l/2+.002,y:d,z:0},i)}function xQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=.08*o,l=Wt(.04,.05,n);for(const[f,h]of[["legL",-(n/2-.15*n)],["legR",n/2-.15*n]])Te(e,f,{x:.6*t,y:r,z:l},{x:0,y:r/2,z:h},s);const c=Wt(.05,.4,t),d=o-r,u=r+d/2;Te(e,"back",{x:c,y:d,z:n},{x:0,y:u,z:0},a);const p=Wt(.012,.03,n);Te(e,"screen",{x:.004,y:d-2*p,z:n-2*p},{x:c/2+.002,y:u,z:0},i)}const PQ=.12,Kc=15*Math.PI/180;function CQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e;if(o<PQ){Te(e,"base",{x:t,y:.55*o,z:n},{x:0,y:.275*o,z:0},a),Te(e,"lid",{x:t,y:.45*o,z:n},{x:0,y:.775*o,z:0},s);const I=Wt(.01,.05,t);Te(e,"notch",{x:I,y:.3*o,z:.2*n},{x:t/2-I/2,y:.55*o,z:0},i);return}const r=Wt(.018,.1,o);Te(e,"base",{x:t,y:r,z:n},{x:0,y:r/2,z:0},a),Te(e,"keys",{x:.55*t,y:.002,z:.85*n},{x:-.1*t,y:r+.001,z:0},i);const l=.008,c=Math.sin(Kc),d=Math.cos(Kc),u=Math.min(.95*t,(o-r)/d),f=-t/2+u*c+l/2-c*u/2,h=r+d*u/2;Py(e,"lid",{x:l,y:u,z:.95*n},{x:f,y:h,z:0},a,Kc);const b=l/2+.001;Py(e,"lidScreen",{x:.002,y:.9*u,z:.85*n},{x:f+d*b,y:h+c*b,z:0},i,Kc)}function BQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Math.max(5e-4,o-.001);Te(e,"body",{x:t,y:r,z:n},{x:0,y:r/2,z:0},a),Te(e,"screen",{x:.94*t,y:.001,z:.9*n},{x:0,y:r+5e-4,z:0},i),Te(e,"speaker",{x:.03*t,y:.001,z:.3*n}
246,{x:.42*t,y:r+6e-4,z:0},s)}function _Q(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Wt(.03,.05,t),r=Wt(.006,.02,t),l=t-i-r;Te(e,"body",{x:l,y:o,z:n},{x:-t/2+l/2,y:o/2,z:0},a);const c=-t/2+l+i/2,d=Wt(.01,.01,o),u=.64*o,p=u-d/2-.005,f=o-u-d/2-.005;Te(e,"doorBottom",{x:i,y:p,z:n-.01},{x:c,y:.005+p/2,z:0},a),Te(e,"doorTop",{x:i,y:f,z:n-.01},{x:c,y:u+d/2+f/2,z:0},a);const h=.4*n,b=Wt(.02,.05,n);Te(e,"handleTop",{x:r,y:.2*o,z:b},{x:t/2-r/2,y:u+d/2+.3*f,z:h},s),Te(e,"handleBottom",{x:r,y:.35*o,z:b},{x:t/2-r/2,y:u-.2*o,z:h},s)}function AQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Wt(.015,.05,t);Te(e,"body",{x:t-r,y:o,z:n},{x:-r/2,y:o/2,z:0},a);const l=.3*Math.min(n,o),c=.45*o;zt(e,"doorRing",l+Wt(.02,.05,n),l+Wt(.02,.05,n),.6*r,16,{x:t/2-.7*r,y:c,z:0},s,"x"),zt(e,"door",l,l,.4*r,16,{x:t/2-.2*r,y:c,z:0},i,"x");const d=Math.min(.02,r);Te(e,"panel",{x:d,y:.12*o,z:.9*n},{x:t/2-r/2,y:o-.06*o,z:0},s)}function TQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Math.min(.2,.2*o),l=Wt(.04,.06,o),c=o-l-r;Te(e,"cabinet",{x:t,y:c,z:n},{x:0,y:c/2,z:0},a),Te(e,"counter",{x:t,y:l,z:n},{x:0,y:c+l/2,z:0},s);const d=c+l;Te(e,"basin",{x:.6*t,y:.005,z:.4*n},{x:.05*t,y:d+.0025,z:0},i);const u=Wt(.015,.03,t);zt(e,"faucet",u,u,r,12,{x:-.35*t,y:d+r/2,z:0},s);const p=Wt(.02,.1,r);Te(e,"faucetSpout",{x:.15*t,y:p,z:2*u},{x:-.35*t+.075*t,y:o-p/2,z:0},s)}function RQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=.08*o,l=o-r,c=Wt(.012,.03,t),d=t/2-c/2;Te(e,"body",{x:t-c,y:l,z:n},{x:-c/2,y:l/2,z:0},a),Te(e,"lid",{x:.9*t,y:r,z:.95*n},{x:-.05*t,y:l+r/2,z:0},s),Te(e,"trayIn",{x:c,y:.12*o,z:.8*n},{x:d,y:.1*o,z:0},s),Te(e,"trayOut",{x:c,y:Wt(.03,.06,o),z:.7*n},{x:d,y:.45*o,z:0},i),Te(e,"panel",{x:c,y:.1*o,z:.3*n},{x:d,y:.78*o,z:.3*n},i)}function DQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Wt(.01,.05,t);Te(e,"body",{x:t-2*r,y:o,z:n},{x:-r,y:o/2,z:0},a);const l=t/2-1.5*r;Te(e,"front",{x:r,y:.8*o,z:.98*n},{x:l,y:.6*o,z:0},a);const c=t/2-.5*r;Te(e,"vent",{x:r,y:.18*o,z:.9*n},{x:c,y:.1*o,z:0},i);const d=Wt(.012,.04,o);Te(e,"stripe1",{x:r,y:d,z:.9*n},{x:c,y:.55*o,z:0},s),Te(e,"stripe2",{x:r,y:d,z:.9*n},{x:c,y:.7*o,z:0},s)}function OQ(e){const{D:t,W:n,H:o,m:a,bodyMat:s,auxMat:i,darkMat:r}=e,l=Wt(.018,.12,t),c=.72*o;Te(e,"body",{x:t-l,y:c,z:n},{x:-l/2,y:c/2,z:0},s);const d=.4*a;zt(e,"bottle",d,d,o-c,16,{x:-l/2,y:c+(o-c)/2,z:0},i);const u=t/2-l/2,p={x:l,y:Wt(.05,.08,o),z:Wt(.03,.1,n)};Te(e,"tapHot",p,{x:u,y:.6*o,z:-.12*n},i),Te(e,"tapCold",p,{x:u,y:.6*o,z:.12*n},i),Te(e,"tray",{x:l,y:Wt(.02,.05,o),z:.4*n},{x:u,y:.35*o,z:0},r)}function NQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s}=e,i=Wt(.02,.05,n),r=n-2*i;Te(e,"sideL",{x:t,y:o,z:i},{x:0,y:o/2,z:-n/2+i/2},a),Te(e,"sideR",{x:t,y:o,z:i},{x:0,y:o/2,z:n/2-i/2},a),Te(e,"back",{x:i,y:o,z:r},{x:-t/2+i/2,y:o/2,z:0},a),Te(e,"top",{x:t,y:i,z:r},{x:0,y:o-i/2,z:0},a),Te(e,"bottom",{x:t,y:i,z:r},{x:0,y:i/2,z:0},a);const l=(o-2*i)/5;for(let c=1;c<=4;c++)Te(e,`shelf${c}`,{x:t-i,y:i,z:r},{x:i/2,y:i+c*l,z:0},s)}function LQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Wt(.01,.04,t),l=Wt(.008,.04,t);Te(e,"body",{x:t-r-l,y:o,z:n},{x:-(r+l)/2,y:o/2,z:0},a);const c=Wt(.015,.03,o),d=(o-3*c)/2;for(let u=0;u<2;u++){const p=c+d/2+u*(d+c);Te(e,`drawer${u+1}`,{x:r,y:d,z:n},{x:t/2-l-r/2,y:p,z:0},s),Te(e,`knob${u+1}`,{x:l,y:Wt(.02,.1,o),z:Wt(.06,.15,n)},{x:t/2-l/2,y:p,z:0},i)}}function KQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Wt(.01,.04,t);Te(e,"body",{x:t-r,y:o,z:n},{x:-r/2,y:o/2,z:0},a);const l=t/2-r/2;Te(e,"window",{x:r,y:.7*o,z:.6*n},{x:l,y:o/2,z:-.15*n},i),Te(e,"panel",{x:r,y:.8*o,z:.25*n},{x:l,y:o/2,z:.325*n},s),Te(e,"handle",{x:r,y:.6*o,z:.03*n},{x:l,y:o/2,z:.175*n},s)}function FQ(e){const{D:t,W:n,H:o,bodyMat:a,auxMat:s,darkMat:i}=e,r=Wt(.012,.03,t);Te(e,"body",{x:t-r,y:o,z:n},{x:-r/2,y:o/2,z:0},a);const l=t/2-r/2;Te(e,"window",{x:r,y:.65*o,z:.65*n},{x:l,y:.625*o,z:-.125*n},i),Te(e,"buttons",{x:r,y:.4*o,z:.2*n},{x:l,y:.6*o,z:.35*n},s),Te(e,"slot",{x:r,y:.12*o,z:.6*n},{x:l,y:.14*o,z:-.1*n},i),Te(e,"coin",{x:r,y:.06*o,z:.08*n},{x:l,y:.3*o,z:.35*n},s)}const HQ={desk:$Q,"desk-executive":EQ,monitor:gw,tv:xQ,laptop:CQ,smartphone:BQ,fridge:_Q,washer:AQ,sink:TQ,printer:RQ,aircon:DQ,"water-cooler":OQ,bookcase:NQ,nightstand:LQ,microwave:KQ,"vending-machine":FQ};function zQ(e,t){const n=e.THREE,o=new n.Group,a=Tt(t.catalogKey??t.kind)?.key,s=Ua(t);o.userData.propArchetype=s;const i=t.depthM,r=t.widthM,l=Ko(t),c=Math.min(i,r),d=Sl(t),u=new n.MeshStandardMaterial({color:d}),p=new n.MeshStandardMaterial({color:new n.Color(d).multiplyScalar(.6)}),f=a?HQ[a]:void 0,b=`${f?a:s}|${i.toFixed(2)}|${r.toFixed(2)}|${l.toFixed(2)}`;let I=null;const y={T:n,group:o,key:a,D:i,W:r,H:l,m:c,keyPrefix:b,bodyMat:u,auxMat:p,get darkMat(){return I??(I=new n.MeshStandardMaterial({color:_J,roughness:.35})),I}};if(f)return o.userData.propShape=a,f(y),o;switch(s){case"table":{const w=a==="table-glass"?new n.MeshStandardMaterial({color:d,transparent:!0,opacity:.5}):null;RJ(y,w);break}case"chair":DJ(y,Jc(t));break;case"sofa":OJ(y,Jc(t));break;case"bed":NJ(y);break;case"cabinet":LJ(y);break;case"plant":KJ(y);break;case"tree":FJ(y);break;case"pole":HJ(y);break;case"pillar":zJ(y);break;case"vehicle":jJ(y);break;case"screen":gw(y);break;case"stairs":UJ(y);break;case"platform":GJ(y);break;case"ramp":VJ(y);break;case"archway":WJ(y);break;case"rug":YJ(y);break;case"curtain":qJ(y);break;case"panel":ZJ(y);break;case"board":JJ(y);break;case"piano":QJ(y);break;case"counter":eQ(y);break;case"stool":tQ(y);break;case"toilet":nQ(y);break;case"bathtub":oQ(y);break;case"booth":aQ(y,new n.MeshStandardMaterial({color:d,transparent:!0,opacity:.5}));break;case"open-shelf":sQ(y);break;case"hospital-bed":iQ(y);break;case"wheelchair":rQ(y,Jc(t));break;case"cone":lQ(y);break;case"bin":cQ(y);break;case"bicycle":dQ(y);break;case"motorbike":uQ(y);break;case"fence":pQ(y);break;case"shelter":fQ(y);break;case"bag":mQ(y);break;case"case":hQ(y);break;case"cup":bQ(y);break;case"book":gQ(y);break;case"umbrella":vQ(y);break;case"long-gun":yQ(y);break;case"handgun":kQ(y);break;case"flat-device":SQ(y);break;case"tube":IQ(y);break;case"door-leaf":wQ(y);break;case"building":MQ(y);break;case"box":XJ(y);break}return o}const vw="#cdc8bc",yw="#8c6b4f",jQ="#e9e6df",UQ="#d6d1c6",Cy=8,Fc=.002,Hc=.05,GQ=90,VQ="#bfe3ff",WQ=.25,XQ=.02,YQ=.55,qQ=.45,By=.04,ZQ=yw,JQ=8,_y=.35,QQ=.02,eee=24,tee=.01,nee=e=>e*Math.PI/180;function oee(e,t,n){const{THREE:o}=e,a=new o.Mesh(new o.PlaneGeometry(n.widthM+Cy,n.depthM+Cy),new o.MeshStandardMaterial({color:jQ}));a.rotation.x=-Math.PI/2,a.receiveShadow=!0,t.add(a);const s=new o.Mesh(new o.PlaneGeometry(n.widthM,n.depthM),new o.MeshStandardMaterial({color:UQ}));s.rotation.x=-Math.PI/2,s.position.y=.001,s.receiveShadow=!0,t.add(s)}function aee(e,t,n){const{THREE:o}=e,a=n.widthM/2,s=n.depthM/2,i=[];for(let c=0;c<=Math.floor(n.widthM);c+=1){const d=-a+c;i.push(d,Fc,-s,d,Fc,s)}for(let c=0;c<=Math.floor(n.depthM);c+=1){const d=-s+c;i.push(-a,Fc,d,a,Fc,d)}const r=new o.BufferGeometry;r.setAttribute("position",new o.Float32BufferAttribute(i,3));const l=new o.LineSegments(r,new o.LineBasicMaterial({color:vw}));l.userData.floorGrid=!0,t.add(l)}function see(e,t,n){const{THREE:o}=e;for(const a of ax(n)){const s=GZ(a),i=new o.Mesh(new o.BoxGeometry(s.x,a.topM-a.bottomM,s.z),new o.MeshStandardMaterial({color:vw}
246)),r=Na(a.center,(a.bottomM+a.topM)/2);i.position.set(r.x,r.y,r.z),i.rotation.y=nc(a.headingDeg),i.name=a.id,i.receiveShadow=!0,i.userData.wall=a.wall,t.add(i)}}function iee(e,t,n){const{THREE:o}=e,a=()=>new o.MeshStandardMaterial({color:VQ,transparent:!0,opacity:WQ}),s=i=>i==="glass-door"?a():new o.MeshStandardMaterial({color:yw});for(const i of n.openings){const r=Xl(n,i),l=Am(i),c=r.widthM/2,d=ho(r.headingDeg),u=nc(r.headingDeg),p=new o.Group;if(p.userData.openingId=i.id,p.userData.wall=i.wall,p.userData.openingKind=i.kind,t.add(p),i.kind==="window"||i.kind==="double-door"){const b=Na(r.center,0);p.position.set(b.x,b.y,b.z)}else{const b=Na({x:r.center.x+d.x*c,y:r.center.y+d.y*c},0);p.position.set(b.x,b.y,b.z)}if(i.kind==="window"){const b=new o.Group;b.rotation.y=u,p.add(b);const I=new o.Mesh(new o.BoxGeometry(XQ,l.topM-l.bottomM,i.widthM),a());I.name="glass",I.position.set(0,(l.bottomM+l.topM)/2,0),b.add(I);continue}if(i.kind==="double-door"){for(const b of[1,-1]){const I=new o.Group;I.position.set(d.x*c*b,0,d.y*c*b),I.userData.hingeSign=b,p.add(I);const y=new o.Group;y.rotation.y=u,I.add(y);const w=new o.Mesh(new o.BoxGeometry(Hc,l.topM,c),s(i.kind));w.name="leaf",w.position.set(0,l.topM/2,-b*c/2),y.add(w)}continue}const f=new o.Group;if(f.rotation.y=u,p.add(f),i.kind==="sliding-door"){const b=new o.Group;b.name="slider",b.userData.slideM=-r.widthM*qQ,f.add(b);const I=r.widthM*YQ,y=new o.Mesh(new o.BoxGeometry(Hc,l.topM,I),s(i.kind));y.name="leaf",y.position.set(-By,l.topM/2,-I/2),b.add(y);const w=new o.Mesh(new o.BoxGeometry(Hc,l.topM,I),s(i.kind));w.name="fixed",w.position.set(By,l.topM/2,-r.widthM+I/2),f.add(w);continue}const h=new o.Mesh(new o.BoxGeometry(Hc,l.topM,i.widthM),s(i.kind));h.name="leaf",h.position.set(0,l.topM/2,-c),f.add(h)}}function yl(e,t){const n=t??{props:[]};return o=>Ir(e,n,o)}function ree(e,t,n,o){for(const a of n.values()){const s=zQ(e,a),i=Na(a.center,ra(a,n,o));s.position.set(i.x,i.y,i.z),s.rotation.y=nc(a.headingDeg),s.userData.propId=a.id,t.add(s)}}function lee(e,t,n,o){const{THREE:a}=e;for(const s of n.actors){const i=new a.Group;i.userData.actorId=s.id,i.add(BJ(e,s,o?.(s)??null)),t.add(i)}}function kw(e,t,n,o){const{THREE:a}=e,s=new a.CylinderGeometry(_y,_y,QQ,eee),i=new a.MeshStandardMaterial({color:n});for(let r=0;r<o;r+=1){const l=new a.Mesh(s,i);l.name="contactMarker",l.visible=!1,l.userData.contactMarker=null,t.add(l)}}const cee=["actorId","propId","openingId","cameraId"];function Sw(e,t){e.traverse(n=>{const o=n.userData;for(const a of cee){const s=o[a];if(typeof s=="string"){n.visible=!t.has(s);return}}})}function dee(e,t,n,o){const{THREE:a}=e,s=new a.Group,i=t.room,r=t.parts.find(d=>d.partId===n),l=new Map([...i.props,...r?.props??[]].map(d=>[d.id,d]));oee(e,s,i),aee(e,s,i),see(e,s,i),iee(e,s,i),ree(e,s,l,yl(i,r)),r&&lee(e,s,r,o?.glbFor);const c=o?.dangerColor||ZQ;return kw(e,s,c,JQ),o?.hiddenIds?.length&&Sw(s,new Set(o.hiddenIds)),{root:s,propsById:l,room:i,deps:e,dangerColor:c,motionClipFor:o?.motionClipFor}}function Ay(e,t,n){let o=null;return e.traverse(a=>{!o&&a.userData[t]===n&&(o=a)}),o}function Hp(e,t){const n=[];return e.traverse(o=>{t in o.userData&&n.push(o)}),n}function uee(e,t,n,o,a){const{root:s,propsById:i}=e,r=yl(e.room,n);for(const p of i.values()){const f=a?.get(p.id),h=Ay(s,"propId",p.id);if(!h||!f&&!h.userData.carryOverride)continue;const b=f?Na(f.center,r(f.center)+f.baseHeightM):Na(p.center,ra(p,i,r));h.position.set(b.x,b.y,b.z),h.userData.carryOverride=!!f}const l=p=>{if(!p)return null;const f=i.get(p);return f?Jc(f)+(ra(f,i,r)-r(f.center)):null};for(const p of n.actors){const f=t.actors[p.id];if(!f)continue;const h=Ay(s,"actorId",p.id);if(!h)continue;const b=Na(f.position,r(f.position));h.position.set(b.x,b.y,b.z);const I=f.bodyDeg??f.headingDeg;h.rotation.y=nc(I);const y=h.children[0];if(!y)continue;const w=f.poseBlend,M=w??{from:f.pose,to:f.pose,u:1},x=f.travelM??0,_=f.speedMps??0,O=f.headYawDeg??Io(I,f.headingDeg);rw(y,{blend:M,heightM:wo(p),seatHeightFrom:l(w?.fromSeatPropId),seatHeightTo:l(w?.toSeatPropId??f.seatPropId),gait:{phase:WK(x,VK(p)),speedMps:_,species:p.species},headYawDeg:O});const A=t.motionClips?.[p.id]??null,N=A?ZK(A.weight,{speedMps:_,poseFrom:String(M.from),poseTo:String(M.to)}):0;hJ(e.deps,y,A&&N>0?{...A,weight:N}:null,A?e.motionClipFor?.(A.motionId)??null:null)}const c=t.contacts??[],d=Hp(s,"contactMarker").length;c.length>d&&kw(e.deps,s,e.dangerColor,c.length-d);const u=Hp(s,"contactMarker");for(let p=0;p<u.length;p+=1){const f=c[p];if(!f){u[p].visible=!1,u[p].userData.contactMarker=null;continue}const h=Na(f.point,r(f.point)+tee);u[p].position.set(h.x,h.y,h.z),u[p].visible=!0,u[p].userData.contactMarker=f.actorId}for(const p of Hp(s,"openingId")){const f=p.userData.openingId,h=t.openings?.[f],b=h?.open?nee(h.openAngleDeg??GQ):0;switch(p.userData.openingKind){case"window":break;case"sliding-door":{const I=p.getObjectByName("slider");I&&(I.position.z=h?.open?I.userData.slideM:0);break}case"double-door":for(const I of p.children){const y=I.userData.hingeSign;y!==void 0&&(I.rotation.y=-y*b)}break;default:p.rotation.y=-b}}}const im="#1f8bf4",Ty="#fdcb1d",pee=2,fee=.6,Iw="#6fb6ff",ww="#8a8a8a",mee=.24,hee=.14,bee=.16,gee=.1,Ry=.04,vee=.17,Dy=.06,yee=.03,kee=.14,See=[-.05,.07],Oy=.008,Iee=15*Math.PI/180,Mw=-.08,wee=.05,Mee=9225471,$ee=.5,Ny=.1,Eee=8;function xee(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.h-t.h)>=fee}function Pee(e){return e.userData.parts}function Cee(e){const t=e.THREE,n=new t.Group;n.userData.cameraMarker=!0;const o=new t.MeshBasicMaterial({color:im}),a=new t.Mesh(new t.BoxGeometry(hee,bee,mee),o);a.name="body",n.add(a);const s=new t.MeshBasicMaterial({color:Iw}),i=new t.CylinderGeometry(Ry,Ry,gee,16);i.rotateX(Math.PI/2);const r=new t.Mesh(i,s);r.name="lens",r.position.z=vee,n.add(r);const l=new t.MeshBasicMaterial({color:im});for(const f of See){const h=new t.CylinderGeometry(Dy,Dy,yee,20);h.rotateZ(Math.PI/2);const b=new t.Mesh(h,l);b.name="reel",b.position.set(0,kee,f),n.add(b)}const c=new t.MeshBasicMaterial({color:ww}),d=new t.Group;d.position.y=Mw;for(let f=0;f<3;f++){const h=new t.CylinderGeometry(Oy,Oy,1,6);h.translate(0,-.5,0);const b=new t.Mesh(h,c);b.name="leg",b.rotation.set(Iee,f*2*Math.PI/3,0,"YXZ"),d.add(b)}n.add(d);const u=new t.BufferGeometry;u.setAttribute("position",new t.BufferAttribute(new Float32Array(Eee*2*3),3));const p=new t.LineSegments(u,new t.LineDashedMaterial({color:Mee,dashSize:Ny,gapSize:Ny,transparent:!0,opacity:$ee}));return n.add(p),n.userData.parts={bodyMaterial:o,lensMaterial:s,reelMaterial:l,legMaterial:c,tripod:d,frustum:p},n}function Bee(e,t,n,o){const{bodyMaterial:a,lensMaterial:s,reelMaterial:i,legMaterial:r,tripod:l,frustum:c}=Pee(t),d=o?Ty:im;a.color.set(d),i.color.set(d),s.color.set(o?Ty:Iw),r.color.set(ww),t.position.set(n.position.x,n.heightM,n.position.y);const u=Th(n.headingDeg,n.pitchDeg);t.up.set(0,1,0),t.lookAt(new e.THREE.Vector3(n.position.x+u.x,n.heightM+u.y,n.position.y+u.z)),t.rotateZ(n.rollDeg*Math.PI/180),l.quaternion.copy(t.quaternion).invert(),l.scale.y=Math.max(wee,n.heightM+Mw);const p=pee,f=p*Math.tan(n.fovH*Math.PI/360),h=p*Math.tan(n.fovV*Math.PI/360),b=[[-f,-h,p],[f,-h,p],[f,h,p],[-f,h,p]],I=c.geometry.getAttribute("position");let y=0;const w=M=>{I.setXYZ(y++,M[0],M[1],M[2])};for(const M of b)w([0,0,0]),w(M);for(let M=0;M<4;M++)w(b[M]),w(b[(M+1)%4]);I.needsUpdate=!0,c.geometry.computeBoundingSphere(),c.computeLineDistances()}const Lh=.5,Kh=40,ac=-89,sc=89,_ee=5,Fh=.1,Aee=0,Tee=.5,Ree=20,bs=e=>e*Math.PI/180,$w=e=>e*180/Math.PI,Zo=(e,t,n)=>Math.max(t,Math.min(n,e));function jl(e,t){const n=bs(e),o=bs(t),a=Math.cos(o);return{x:a*Math.cos(n),y:a*Math.sin(n),h:Math.sin(o)}}function Ps(e){const t=Math.max(Aee,e.target.h),n=(Fh-t)/e.distance,o=Math.sin(bs(e.pitch))<n?Zo($w(Math.asin(Zo(n,-1,1))),ac,sc):e.pitch;return t===e.target.h&&o===e.pitch?e:{...e,target:{...e.target,h:t},pitch:o}}function Dee(e){const t=Qt(e.headingDeg+180),n=Zo(-e.pitchDeg,ac,sc),o=jl(t,n),a=Math.max(0,Fh-e.heightM),s=e.heightM+a,i=jl(e.headingDeg,e.pitchDeg),r=(e.aim.x-e.position.x)*i.x+(e.aim.y-e.position.y)*i.y+(e.aim.h-s)*i.h,l=r>=Tee?Math.min(r,Ree):_ee,d=o.h>0&&s-l*o.h<0?Zo(s/o.h,Lh,l):l;return Ps({target:{x:e.position.x-d*o.x,y:e.position.y-d*o.y,h:s-d*o.h},distance:d,yaw:t,pitch:n})}const Ly=.5,Oee=3;function Nee(e){const t=Qt(e.headingDeg+180),n=Zo(-e.pitchDeg,ac,sc),o=jl(t,n),a={x:Math.cos(bs(e.headingDeg)),y:Math.sin(bs(e.headingDeg))},s={x:e.position.x+Ly*a.x,y:e.position.y+Ly*a.y,h:Math.max(Fh,e.heightM)},i=Oee;return Ps({target:{x:s.x-i*o.x,y:s.y-i*o.y,h:s.h-i*o.h},distance:i,yaw:t,pitch:n})}
246const Lee=90,Kee=40,Fee=1.1,Hee=4;function Zi(e){const t=Zo(Math.max(e.widthM,e.depthM)*Fee,Hee,Kh);return Ps({target:{x:0,y:0,h:0},distance:t,yaw:Lee,pitch:Kee})}function zee(e,t,n){return Ps({...e,yaw:Qt(e.yaw+t),pitch:Zo(e.pitch+n,ac,sc)})}function jee(e,t,n,o=0){return Ps({...e,target:{x:e.target.x+t,y:e.target.y+n,h:e.target.h+o}})}const Uee=.002;function Gee(e,t,n){const o=Uee*e.distance,a=bs(e.yaw),s={x:Math.sin(a),y:-Math.cos(a)},i={x:-Math.cos(a),y:-Math.sin(a)};return jee(e,(-s.x*t+i.x*n)*o,(-s.y*t+i.y*n)*o)}function gs(e){const t=jl(e.yaw,e.pitch);return{x:e.target.x+e.distance*t.x,y:e.target.y+e.distance*t.y,h:e.target.h+e.distance*t.h}}const rm=50,Hu=16/9,Vee=40;function Ew(e,t,n=Hu){const o=jl(e.yaw,e.pitch),a=bs(e.yaw),s=bs(e.pitch),i=Math.tan(bs(rm/2)),r=i*n,l=t.x*r,c=t.y*i;return{x:-o.x+Math.sin(a)*l-Math.sin(s)*Math.cos(a)*c,y:-o.y-Math.cos(a)*l-Math.sin(s)*Math.sin(a)*c,h:-o.h+Math.cos(s)*c}}function xw(e,t,n=Hu){const o=gs(e),a=Ew(e,t,n);return{x:o.x+e.distance*a.x,y:o.y+e.distance*a.y,h:o.h+e.distance*a.h}}function Wee(e,t,n=Hu){const o=gs(e),a=Ew(e,t,n);if(Math.abs(a.h)<1e-9)return null;const s=(e.target.h-o.h)/a.h;return s<=0||s*Math.hypot(a.x,a.y,a.h)>Vee?null:{x:o.x+s*a.x,y:o.y+s*a.y,h:e.target.h}}const Xee=.001;function Yee(e,t,n,o=Hu){const a=Zo(e.distance*Math.exp(t*Xee),Lh,Kh),s=a/e.distance,i=xw(e,n,o);return Ps({...e,distance:a,target:{x:i.x+(e.target.x-i.x)*s,y:i.y+(e.target.y-i.y)*s,h:i.h+(e.target.h-i.h)*s}
246})}function qee(e,t){const n=gs(e),o=n.x-t.x,a=n.y-t.y,s=n.h-t.h,i=Math.hypot(o,a,s),r=Zo(i,Lh,Kh),l=Qt(Math.atan2(a,o)*180/Math.PI),c=Zo($w(Math.asin(Zo(s/r,-1,1))),ac,sc);return Ps({target:t,distance:r,yaw:l,pitch:c})}function Zee(e){const t=gs(e);return{position:{x:t.x,y:t.y},heightM:t.h,headingDeg:Qt(e.yaw+180),pitchDeg:-e.pitch}}const Gs={eyeHeightM:1.6,speedMps:1.4,runFactor:2,lookDegPerPx:.15,pitchLimitDeg:80,minEyeHeightM:.2,maxEyeHeightM:10};function zp(e,t){return{x:e.x,y:e.y,eyeH:Gs.eyeHeightM,yaw:t,pitch:0}}function Jee(e,t,n,o){if(t.forward===0&&t.right===0&&t.up===0)return e;const a=Gs.speedMps*(o.run?Gs.runFactor:1),s=In(e.yaw),i=ho(e.yaw),r={x:s.x*t.forward+i.x*t.right,y:s.y*t.forward+i.y*t.right},l=Math.hypot(r.x,r.y),c=a*n,d=l<1e-9?e.x:e.x+r.x/l*c,u=l<1e-9?e.y:e.y+r.y/l*c,p=Zo(e.eyeH+t.up*a*n,Gs.minEyeHeightM,Gs.maxEyeHeightM);return{...e,x:d,y:u,eyeH:p}}function Qee(e,t,n){return{...e,yaw:Qt(e.yaw+t*Gs.lookDegPerPx),pitch:Zo(e.pitch-n*Gs.lookDegPerPx,-80,Gs.pitchLimitDeg)}}function ete(e){return{position:{x:e.x,y:e.y},heightM:e.eyeH,headingDeg:e.yaw,pitchDeg:e.pitch}}const Qd=1.05,tte=.1;function nte(e,t,n,o,a){const s={x:t.position.x,y:t.position.z,h:t.position.y};return n.map(({id:i,headWorld:r})=>{const l=new e.THREE.Vector3(r.x,r.y,r.z).project(t),c=l.z<1&&Math.abs(l.x)<=Qd&&Math.abs(l.y)<=Qd,d={x:r.x,y:r.z,h:r.y},u=tC(s,d,o);return{id:i,x:(l.x+1)/2*a.width,y:(1-l.y)/2*a.height,visible:c,...u?{occludedBy:u.blockedBy}:{}}})}function ote(e,t,n){const o=[...e.props,...t.props].filter(s=>!n?.has(s.id)),a=new Map(o.map(s=>[s.id,s]));return o.map(s=>{const i=ra(s,a,r=>Ir(e,t,r));return{id:s.id,topWorld:{x:s.center.x,y:i+Ko(s)+tte,z:s.center.y}}})}function Ky(e,t,n,o){return n.map(({id:a,topWorld:s})=>{const i=new e.THREE.Vector3(s.x,s.y,s.z).project(t);return{id:a,x:(i.x+1)/2*o.width,y:(1-i.y)/2*o.height,visible:i.z<1&&Math.abs(i.x)<=Qd&&Math.abs(i.y)<=Qd}})}function ate(e){const t=[],n=o=>t.some(a=>Math.abs(a.x-o.x)<(a.w+o.w)/2&&Math.abs(a.y-o.y)<(a.h+o.h)/2);return[...e].sort((o,a)=>a.y-o.y).map(o=>{let a=o.y;for(let s=0;s<3&&n({x:o.x,y:a,w:o.w,h:o.h});s++)a-=o.h+2;return t.push({x:o.x,y:a,w:o.w,h:o.h}),{id:o.id,x:o.x,y:a}})}function ste(e,t){let n=null;for(const o of t)e.x<o.minX||e.x>o.maxX||e.y<o.minY||e.y>o.maxY||(!n||o.depth<n.depth)&&(n=o);return n?.id??null}const ite=10,rte=8;
246function jp(e,t,n){const o=n.x-t.x,a=n.y-t.y,s=o*o+a*a,i=s===0?0:Math.max(0,Math.min(1,((e.x-t.x)*o+(e.y-t.y)*a)/s));return Math.hypot(e.x-(t.x+i*o),e.y-(t.y+i*a))}function lte(e,t,n=rte){if(t.rotAt&&Math.hypot(e.x-t.rotAt.x,e.y-t.rotAt.y)<=ite)return"rot";if(Math.abs(e.x-t.origin.x)<=t.centerHalfPx&&Math.abs(e.y-t.origin.y)<=t.centerHalfPx)return"center";const o=[["x",jp(e,t.origin,t.xEnd)],["y",jp(e,t.origin,t.yEnd)]];t.zEnd&&o.push(["z",jp(e,t.origin,t.zEnd)]);let a=null;for(const s of o)s[1]<=n&&(!a||s[1]<a[1])&&(a=s);return a?a[0]:null}function cte(e){const t=e.startM+(e.startClientY-e.clientY)/Math.max(e.pxPerMeter,1),n=e.snap?Math.round(t/.05)*.05:t;return Math.min(e.maxM,Math.max(e.minM,Math.round(n*1e4)/1e4))}function dte(e,t,n,o){const a={x:n.x+t.x,y:n.y+t.y};return o==="x"?{x:a.x,y:e.y}:o==="y"?{x:e.x,y:a.y}:a}const ute={dawn:{color:16767408,intensity:1},day:{color:16777215,intensity:1},dusk:{color:16760960,intensity:1},night:{color:10466559,intensity:.4}},Fy=1024,zc=16/9,pte="#d9dde3",Hy=.35,fte=.02,mte=24,hte=800,zy="#fdcb1d",bte=.25,jy=.005,Uy=.1,gte=.3,vte=.01,ol=.6,Gy=.012,yte=.04,Up=.1,jc=.16,kte="#ff5d5d",Ste="#4f8fe0",Gp="#fdcb1d",Ite="#3fbf6a",Vy=.9,wte=.06,Uc=10,Wy=.02,Xy=.06,Mte=.01,Yy=.01,Vp=.35,qy=.16,Zy=.1,$te=.25;function Ete(e){return Math.max(e.widthM,e.depthM)/2+1}function os(e){if(!e)return;const t=new Set,n=new Set,o=new Set;e.traverse(a=>{const s=a;if(s.geometry&&!AJ(s.geometry)&&!dJ(s.geometry)&&!t.has(s.geometry)&&(t.add(s.geometry),s.geometry.dispose()),s.material){const i=Array.isArray(s.material)?s.material:[s.material];for(const r of i){const l=r;n.has(l)||(n.add(l),l.dispose())}}s.isSkinnedMesh&&s.skeleton&&!o.has(s.skeleton)&&(o.add(s.skeleton),s.skeleton.dispose())})}function Pw(e,t,n){const{THREE:o}=e,a=new o.Scene;a.background=new o.Color(pte);const s=new o.PerspectiveCamera(50,zc,.05,100),i=new o.WebGLRenderer({canvas:t,antialias:!0,preserveDrawingBuffer:n.preserveDrawingBuffer===!0});i.outputColorSpace=o.SRGBColorSpace,i.shadowMap.type=o.PCFSoftShadowMap;const r=new o.HemisphereLight(16777215,4473924,.6),l=new o.DirectionalLight(16777215,1);l.castShadow=!0,l.shadow.mapSize.set(Fy,Fy),a.add(r,l);const c=new o.Mesh(new o.CylinderGeometry(Hy,Hy,fte,mte),new o.MeshBasicMaterial({color:n.accentColor||16777215}));c.visible=!1,a.add(c);let d=null,u=null,p=null,f=null,h=null,b=!1,I=!1,y=!1,w=null,M="camera",x=null,_=null,O=[],A=[],N=[],K=[],F=[],B=0,j=0,ee=0,D=0,Z=zc,L=new Set;const V=new Map;let pe=[],le=new Set,me=null;const oe=[];let fe=[],X=null,re=null;const Se=new Map;let Q=null;const $e=new o.Group;$e.userData.pathMarks=!0,a.add($e);let Fe=null;function Ze(){const ge=n.pixelRatio??(I?1:Math.min(globalThis.devicePixelRatio??1,1.5));i.setPixelRatio(ge)}Ze(),i.shadowMap.enabled=!I;function ue(ge,_e){const R=ute[ge];l.color.set(R.color),l.intensity=R.intensity;const U=_e*Math.PI/180,Y=45*Math.PI/180,he=10;l.position.set(Math.cos(U)*Math.cos(Y)*he,Math.sin(Y)*he,Math.sin(U)*Math.cos(Y)*he)}ue("day",45);function ye(ge){const _e=Ete(ge);l.shadow.camera.left=-_e,l.shadow.camera.right=_e,l.shadow.camera.top=_e,l.shadow.camera.bottom=-_e,l.shadow.camera.updateProjectionMatrix()}function Ue(ge){I=ge,i.shadowMap.enabled=!ge,Ze(),q()}function te(){Ze(),q()}function q(){b||y||(y=!0,w=globalThis.requestAnimationFrame(()=>{if(y=!1,w=null,b)return;i.render(a,s),O=B>0&&j>0?nte(e,s,A,YZ(K,F),{width:B,height:j}):[],n.onLabels?.(O);const ge=B>0&&j>0?Ky(e,s,N,{width:B,height:j}):[];n.onPropLabels?.(ge),n.onCameraLabels?.(M!=="camera"&&B>0&&j>0?Ky(e,s,de(),{width:B,height:j}):[])}))}function de(){return pe.filter(({id:ge})=>V.get(ge)?.visible).map(({id:ge,state:_e})=>({id:ge,topWorld:{x:_e.position.x,y:_e.heightM+$te,z:_e.position.y}}))}function Ce(ge,_e){ge<=0||_e<=0||(ee=ge,D=_e,Ye())}function Ye(){if(ee<=0||D<=0)return;let ge=ee,_e=D;M==="camera"&&(_e=ee/zc,_e>D&&(_e=D,ge=D*zc)),B=ge,j=_e,Z=ge/_e,i.setSize(ge,_e,!0),s.aspect=Z,s.updateProjectionMatrix(),q()}let tt=null;const ht=!!n.mediaHost&&(!!n.glbLoader||typeof globalThis.window<"u");function Et(ge){if(!ht||!ge)return[];const _e=new Set;for(const R of ge.actors)ks(R.species)==="humanoid"&&_e.add(am(n.mediaHost,om(R.bodyType)));return[..._e].sort()}function It(ge){for(const _e of ge)Kp(_e)||cJ(_e)||uw(e,_e,n.glbLoader).then(R=>{!R||b||!tt||Be(tt.snapshot,tt.partId)})}const Xt=ht&&(!!n.motionLoader||typeof globalThis.window<"u");function yt(ge){for(const _e of ge)My(_e)||fJ(_e)||fw(_e,n.motionLoader).then(R=>{!R||b||(jt&&Jt(jt.frameState,jt.options),q())})}function Ie(ge,_e){if(!u||!p)return;const R=ge.parts.find(he=>he.partId===_e),U=new Map([...ge.room.props,...R?.props??[]].map(he=>[he.id,he]));u.propsById=U,u.room=ge.room;const Y=yl(ge.room,R);p.traverse(he=>{const xe=he.userData.propId;if(typeof xe!="string")return;const De=U.get(xe);
246if(!De)return;const bt=Na(De.center,ra(De,U,Y));he.position.set(bt.x,bt.y,bt.z),he.rotation.y=nc(De.headingDeg)})}function Be(ge,_e){tt={snapshot:ge,partId:_e},Fe&&Ut();const R=ge.parts.find(De=>De.partId===_e),U=Et(R);It(U),yt(Xt&&R?mw(R,n.mediaHost):[]);const Y=U.map(De=>Kp(De)?"1":"0").join(""),he=`${Cw(ge,_e)}|${Y}`;if(he===h){f=ge.room,Ie(ge,_e),q();return}if(h=he,f=ge.room,ye(f),!R){os(p),p&&a.remove(p),p=null,u=null,q();return}const xe=dee(e,ge,_e,{dangerColor:n.dangerColor,hiddenIds:[...L],glbFor:De=>{if(!ht||ks(De.species)!=="humanoid")return null;const bt=Kp(am(n.mediaHost,om(De.bodyType)));return bt?{template:bt,cloner:n.glbCloner}:null},motionClipFor:De=>Xt?My(pw(n.mediaHost,De)):null});os(p),p&&a.remove(p),u=xe,p=u.root,a.add(p),jt&&Jt(jt.frameState,jt.options),q()}function lt(ge){F=[...ge],p&&p.traverse(_e=>{const R=_e.userData,U=R.wall;if(typeof U!="string")return;const Y=typeof R.openingId=="string"&&L.has(R.openingId);_e.visible=!ge.includes(U)&&!Y})}function Ke(ge,_e){if(!p)return[];const R=[];return p.traverse(U=>{const Y=U.userData.actorId;if(typeof Y!="string"||L.has(Y))return;const he=U.children[0],xe=ge.actors.find(Yt=>Yt.id===Y),De=_e.actors[Y];if(!he||!xe||!De)return;const bt=Fa(wo(xe),De.pose);R.push({id:Y,headWorld:$J(he,bt)})}),R}let ct=null;function xt(){if(M==="camera"&&ct){XZ(s,ct);const ge=f?aw(f,ct):null;lt(ge?[ge]:[])}else if(M==="free"&&x){At(x);const ge=gs(x);lt(f?Xd(f,ge):[])}else M==="walk"&&_?(Ae(_),lt(f?Xd(f,{x:_.x,y:_.y}):[])):lt([])}let jt=null;function Jt(ge,_e){u&&uee(u,ge,_e.part,_e.settled,_e.carried),A=Ke(_e.part,ge),N=f?ote(f,_e.part,L):[],K=f?lP(f,_e.part):[],ct=_e.camera!==void 0?_e.camera:ge.camera,xt(),Qn()}function Mn(ge,_e){jt={frameState:ge,options:_e},Jt(ge,_e)}function At(ge){const _e=gs(ge);s.position.set(_e.x,_e.h,_e.y),s.up.set(0,1,0),s.lookAt(ge.target.x,ge.target.h,ge.target.y),s.fov=rm,s.aspect=Z,s.near=.05,s.far=100,s.updateProjectionMatrix()}function Ae(ge){s.position.set(ge.x,ge.eyeH,ge.y),s.up.set(0,1,0);const _e=Th(ge.yaw,ge.pitch);s.lookAt(ge.x+_e.x,ge.eyeH+_e.y,ge.y+_e.z),s.fov=rm,s.aspect=Z,s.near=.05,s.far=100,s.updateProjectionMatrix()}function Ve(ge){M=ge,Ye(),xt();for(const _e of V.values())_e.visible=!1;ge!=="camera"&&Re(),ta(),$e.visible=ge!=="camera",q()}function Xe(ge){x=ge,M==="free"&&(xt(),q()),Re()}function ne(ge){_=ge,M==="walk"&&(xt(),q()),Re()}function W(ge){c.position.set(ge.x,ge.h,ge.y),c.visible=!0,q(),d!==null&&globalThis.clearTimeout(d),d=globalThis.setTimeout(()=>{d=null,c.visible=!1,q()},hte)}function ve(ge){L=new Set(ge),p&&Sw(p,L),jt?Jt(jt.frameState,jt.options):xt(),q()}function we(){return M==="free"&&x?gs(x):M==="walk"&&_?{x:_.x,y:_.y,h:_.eyeH}:null}function Re(){const ge=we(),_e=new Set;for(const{id:R,state:U}of pe){let Y=V.get(R);Y||(Y=Cee(e),Y.userData.cameraId=R,V.set(R,Y),a.add(Y)),_e.add(R),Bee(e,Y,U,le.has(R)),Y.visible=M!=="camera"&&(!ge||xee(ge,{x:U.position.x,y:U.position.y,h:U.heightM}))}for(const[R,U]of V)_e.has(R)||(U.visible=!1)}function ut(ge,_e){pe=[...ge],le=new Set(_e),Re(),Qn(),q()}function bn(ge){const _e=jt?.options.part,R=u?.room??f,U=R?yl(R,_e):()=>0,Y=_e?.actors.find(De=>De.id===ge);if(Y){const De=jt?.frameState.actors[ge]?.position??Y.start.position;return{position:De,baseM:U(De),radiusM:Vt(Y)+Uy}}const he=u?.propsById.get(ge);if(he){const De=Math.hypot(he.widthM/2,he.depthM/2)+Uy,bt=jt?.options.carried?.get(ge);return bt?{position:bt.center,baseM:U(bt.center),radiusM:De}:{position:he.center,baseM:ra(he,u.propsById,U)-(he.elevationM??0),radiusM:De}}const xe=pe.find(De=>De.id===ge);return xe?{position:xe.state.position,baseM:0,radiusM:gte}:null}function Qn(){let ge=0;for(const _e of fe){const R=bn(_e);if(!R)continue;let U=oe[ge];U||(me??(me={geometry:new o.CylinderGeometry(1,1,jy,32),material:new o.MeshBasicMaterial({color:zy,transparent:!0,opacity:bte,depthWrite:!1})}),U=new o.Mesh(me.geometry,me.material),oe.push(U),a.add(U)),U.userData.selectionRing=_e,U.position.set(R.position.x,R.baseM+jy/2,R.position.y),U.scale.set(R.radiusM,1,R.radiusM),U.visible=!0,ge+=1}for(let _e=ge;_e<oe.length;_e++)oe[_e].visible=!1}function ea(ge){fe=[...ge],Qn(),q()}function yn(ge){const _e=ge.clone().project(s);return{x:(_e.x+1)/2*B,y:(1-_e.y)/2*j,z:_e.z}}function Ln(ge,_e){const R=new o.Box3().setFromObject(_e,!0);if(R.isEmpty())return null;let U=1/0,Y=1/0,he=-1/0,xe=-1/0;for(const bt of[R.min.x,R.max.x])for(const Yt of[R.min.y,R.max.y])for(const Ft of[R.min.z,R.max.z]){const Rt=yn(new o.Vector3(bt,Yt,Ft));if(Rt.z>1)return null;U=Math.min(U,Rt.x),Y=Math.min(Y,Rt.y),he=Math.max(he,Rt.x),xe=Math.max(xe,Rt.y)}const De=R.getCenter(new o.Vector3);return{id:ge,minX:U,minY:Y,maxX:he,maxY:xe,depth:s.position.distanceTo(De)}}function co(ge){const _e=ge.userData;for(const R of["actorId","propId","openingId"])if(typeof _e[R]=="string")return _e[R];return null}function Mo(){p&&(p.updateMatrixWorld(!0),p.traverse(ge=>{const _e=ge;_e.isSkinnedMesh&&(_e.skeleton.update(),_e.computeBoundingSphere())}))}function Fo(ge){for(let _e=ge;_e;_e=_e.parent)if(!_e.visible)return!1;return!0}function bo(){if(B<=0||j<=0)return[];s.updateMatrixWorld(),Mo();const ge=[];p?.traverse(_e=>{const R=co(_e);if(R===null||!Fo(_e))return;const U=Ln(R,_e);U&&ge.push(U)});for(const[_e,R]of V){if(!R.visible)continue;const U=Ln(_e,R);U&&ge.push(U)}return ge}function Hn(ge,_e=()=>!0){if(B<=0||j<=0)return null;s.updateMatrixWorld(),Mo();const R=[];p?.traverse(he=>{co(he)!==null&&R.push(he)});const U=new o.Raycaster;U.setFromCamera(new o.Vector2(ge.x/B*2-1,1-ge.y/j*2),s);for(const he of U.intersectObjects(R,!0)){if(!Fo(he.object))continue;let xe=null;for(let De=he.object;De&&xe===null;De=De.parent)xe=co(De);if(xe!==null&&_e(xe))return xe}const Y=[];for(const[he,xe]of V){if(!xe.visible||!_e(he))continue;const De=Ln(he,xe);De&&Y.push(De)}return ste(ge,Y)}function Ho(ge){return new o.MeshBasicMaterial({color:ge,depthTest:!1,depthWrite:!1})}function $o(ge,_e){const R=new o.Group;R.userData.moveHandle=_e;const U=Ho(ge),Y=ol-Up,he=new o.Mesh(new o.CylinderGeometry(Gy,Gy,Y,8),U);he.position.y=Y/2;const xe=new o.Mesh(new o.ConeGeometry(yte,Up,12),U);xe.position.y=Y+Up/2;
246for(const De of[he,xe])De.renderOrder=Uc,R.add(De);return _e==="x"?R.rotation.z=-Math.PI/2:_e==="y"&&(R.rotation.x=Math.PI/2),R}function To(){const ge=new o.Group,_e=$o(kte,"x"),R=$o(Ste,"y"),U=new o.Group;U.userData.moveHandle="center";const Y=jc/2,he=new o.Mesh(new o.PlaneGeometry(jc,jc),new o.MeshBasicMaterial({color:Gp,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1,side:o.DoubleSide}));he.rotation.x=-Math.PI/2;const xe=new o.BufferGeometry,De=[[-Y,0,-Y],[Y,0,-Y],[Y,0,Y],[-Y,0,Y]],bt=[];for(let Dt=0;Dt<4;Dt++)bt.push(...De[Dt],...De[(Dt+1)%4]);xe.setAttribute("position",new o.Float32BufferAttribute(bt,3));const Yt=new o.LineSegments(xe,new o.LineBasicMaterial({color:Gp,depthTest:!1}));for(const Dt of[he,Yt])Dt.renderOrder=Uc,U.add(Dt);const Ft=$o(Ite,"z"),Rt=new o.Group;Rt.userData.moveHandle="rot";const Lt=new o.Mesh(new o.SphereGeometry(wte,16,12),Ho(Gp));Lt.renderOrder=Uc,Rt.add(Lt);const on=[_e,R,U,Ft,Rt];for(const Dt of on)Dt.visible=!1,ge.add(Dt);return a.add(ge),{root:ge,parts:on}}function ta(){if(!X){if(!re)return;X=To()}const ge=!!re&&M!=="camera";for(const xe of X.parts)xe.visible=ge;if(!re)return;const[,,,_e,R]=X.parts;if(_e.visible=ge&&re.lift===!0,R.visible=ge&&re.headingDeg!==void 0,re.headingDeg!==void 0){const xe=re.headingDeg*Math.PI/180;R.position.set(Math.cos(xe)*Vy,0,Math.sin(xe)*Vy)}const U=Se.has(re.id)?Eo(re.id):null,Y=U?U.position.x:re.position.x,he=U?U.position.z:re.position.y;X.root.position.set(Y,vte,he)}function wa(ge){re=ge,ta(),q()}function na(){if(!X||!re||M==="camera"||B<=0||j<=0)return null;s.updateMatrixWorld();const ge=X.root.position,_e=yn(new o.Vector3(ge.x,ge.y,ge.z)),R=yn(new o.Vector3(ge.x+ol,ge.y,ge.z)),U=yn(new o.Vector3(ge.x,ge.y,ge.z+ol)),Y=yn(new o.Vector3(ge.x+jc/2,ge.y,ge.z));if(_e.z>1||R.z>1||U.z>1)return null;const he={origin:{x:_e.x,y:_e.y},xEnd:{x:R.x,y:R.y},yEnd:{x:U.x,y:U.y},centerHalfPx:Math.hypot(Y.x-_e.x,Y.y-_e.y)},[,,,xe,De]=X.parts;if(xe.visible){const bt=yn(new o.Vector3(ge.x,ge.y+ol,ge.z));bt.z<=1&&(he.zEnd={x:bt.x,y:bt.y},he.zPxPerM=Math.hypot(bt.x-_e.x,bt.y-_e.y)/ol)}if(De.visible){const bt=De.position,Yt=yn(new o.Vector3(ge.x+bt.x,ge.y+bt.y,ge.z+bt.z));Yt.z<=1&&(he.rotAt={x:Yt.x,y:Yt.y})}return he}function Eo(ge){const _e=V.get(ge);if(_e)return _e;let R=null;return p?.traverse(U=>{const Y=U.userData;!R&&(Y.actorId===ge||Y.propId===ge)&&(R=U)}),R}function go(ge,_e){const R=Eo(ge);if(R){if(_e)Se.has(ge)||Se.set(ge,R.position.clone()),R.position.x=_e.x,R.position.z=_e.y;else{const U=Se.get(ge);U&&R.position.copy(U),Se.delete(ge)}ta(),q()}}function en(ge,_e){const R=Eo(ge);if(R){if(_e!==null)Se.has(ge)||Se.set(ge,R.position.clone()),R.position.y=Se.get(ge).y+_e;else{const U=Se.get(ge);U&&R.position.copy(U),Se.delete(ge)}q()}}function eo(ge){ge&&(Q||(Q=new o.LineSegments(new o.BufferGeometry,new o.LineBasicMaterial({color:zy})),a.add(Q)),Q.geometry.setAttribute("position",new o.Float32BufferAttribute([ge.x,0,ge.y,ge.x,ge.baseM,ge.y],3))),Q&&(Q.visible=!!ge),q()}function Ut(){if(os($e),$e.clear(),$e.visible=M!=="camera",!Fe)return;const ge=tt?.snapshot.parts.find(Rt=>Rt.partId===tt.partId),_e=tt?yl(tt.snapshot.room,ge):()=>0,R=(Rt,Lt)=>Na(Rt,_e(Rt)+Lt),U=new o.BufferGeometry,Y=[];for(const Rt of Fe.line){const Lt=R(Rt,Wy);Y.push(Lt.x,Lt.y,Lt.z)}U.setAttribute("position",new o.Float32BufferAttribute(Y,3));const he=new o.Line(U,new o.LineBasicMaterial({color:Fe.color,depthTest:!1}));he.renderOrder=Uc-1,$e.add(he);const xe=new o.MeshBasicMaterial({color:Fe.color,side:o.DoubleSide});for(const Rt of Fe.dots){const Lt=new o.Mesh(new o.CylinderGeometry(Xy,Xy,Mte,16),xe),on=R(Rt,Wy);Lt.position.set(on.x,on.y,on.z),$e.add(Lt)}const De=new o.Mesh(new o.CylinderGeometry(Yy,Yy,Vp,8),xe),bt=R(Fe.end,Vp/2);De.position.set(bt.x,bt.y,bt.z);const Yt=new o.Mesh(new o.PlaneGeometry(qy,Zy),xe),Ft=R(Fe.end,Vp-Zy/2);Yt.position.set(Ft.x+qy/2,Ft.y,Ft.z),$e.add(De,Yt)}function zo(ge){Fe=ge,Ut(),q()}function nn(ge){s.updateMatrixWorld();const R=new o.Vector3(ge.x,ge.y,.5).unproject(s).sub(s.position).normalize();return{origin:{x:s.position.x,y:s.position.z,h:s.position.y},dir:{x:R.x,y:R.z,h:R.y}}}function Ma(ge,_e,R,U,Y){if(b||!jt)return"";const he=jt,xe=[...V.values(),...oe,...X?.parts??[],...Q?[Q]:[],$e],De=xe.map(Ft=>Ft.visible),bt=M;M="camera",Jt(ge,{...he.options,camera:_e,...Y?{carried:Y}:{}});for(const Ft of xe)Ft.visible=!1;i.setSize(R,U,!1),i.render(a,s);const Yt=i.domElement.toDataURL("image/jpeg",.8);return M=bt,B>
2460&&j>0&&i.setSize(B,j,!1),s.aspect=Z,Jt(he.frameState,he.options),xe.forEach((Ft,Rt)=>{Ft.visible=De[Rt]}),q(),Yt}function Zn(){b||i.render(a,s)}function so(ge={}){if(!b){b=!0,w!==null&&globalThis.cancelAnimationFrame(w),d!==null&&globalThis.clearTimeout(d),os(p),os(c);for(const _e of V.values())os(_e);os(X?.root??null),os(Q),os($e),me?.geometry.dispose(),me?.material.dispose(),n.keepSharedCaches||TJ(o),l.dispose(),p=null,u=null,i.dispose(),ge.keepContext||i.forceContextLoss()}}return{build:Be,updateFrame:Mn,setViewMode:Ve,setFreeView:Xe,setWalkView:ne,showPivot:W,resize:Ce,requestRender:q,labels:()=>O,setLight:ue,setPerfLight:Ue,refreshPixelRatio:te,setHidden:ve,setCameraMarkers:ut,setSelection:ea,screenBoxes:bo,pickAt:Hn,setMoveHandles:wa,moveHandleScreen:na,previewMove:go,previewLift:en,setHeightLine:eo,setPathMarks:zo,floorRayAt:nn,renderThumbnail:Ma,renderNow:Zn,dispose:so}}function Jy(e){return[e.id,e.kind,e.widthM,e.depthM,e.heightM??null,e.supportPropId??null]}function xte(e){return[e.id,e.kind,e.wall,e.offsetM,e.widthM,e.heightM]}function Pte(e){return[e.id,e.species,e.bodyType,e.color]}function Cw(e,t){const n=e.room,o=e.parts.find(a=>a.partId===t);return JSON.stringify([[n.widthM,n.depthM,n.walls,n.openings.map(xte),n.props.map(Jy)],(o?.props??[]).map(Jy),(o?.actors??[]).map(Pte)])}async function Bw(){return{THREE:await xi(()=>import("./BtCAaDxU.js"),[],import.meta.url)}}const Cte={class:"bb-3d-gizmo-wrap"},Bte={class:"bb-3d-view-presets",role:"group"},_te=["data-view","aria-pressed","title","onClick"],Ate={class:"bb-3d-view-key"},Gc="tool.blockingBoard.viewport.",Tte=nt({__name:"BbViewGizmo",props:{activeView:{}},emits:["view"],setup(e,{emit:t}){const n=t,o={top:[`${Gc}viewTop`,"7"],front:[`${Gc}viewFront`,"1"],side:[`${Gc}viewSide`,"3"],camera:[`${Gc}viewCamera`,"0"]},a=["top","front","side","camera"];return(s,i)=>(v(),k("div",Cte,[m("div",Bte,[(v(),k(ae,null,Me(a,r=>m("button",{key:r,type:"button","data-view":r,"aria-pressed":e.activeView===r,title:`${s.$t(o[r][0])} (${o[r][1]})`,onClick:l=>n("view",r)},[m("span",null,S(s.$t(o[r][0])),1),m("kbd",Ate,S(o[r][1]),1)],8,_te)),64))])]))}}),_w=Object.assign(ot(Tte,[["__scopeId","data-v-dcbb51a1"]]),{__name:"BbViewportBbViewGizmo"}),Rte=["data-act","title","aria-label","onClick"],Dte=nt({__name:"BbActorBar",props:{x:{},y:{}},emits:["act"],setup(e,{emit:t}){const n=t,o=[{kind:"walk",tip:"tool.blockingBoard.inspector.act.walk",icon:"i-lucide-footprints"},{kind:"look",tip:"tool.blockingBoard.inspector.act.look",icon:"i-lucide-eye"},{kind:"sit",tip:"tool.blockingBoard.board.actorBar.sit",icon:"i-lucide-armchair"}];return(a,s)=>{const i=vn;return v(),k("div",{class:"bb-actor-bar",style:wt({left:`${e.x}px`,top:`${e.y}px`}),onPointerdown:s[0]||(s[0]=un(()=>{},["stop"]))},[(v(),k(ae,null,Me(o,r=>m("button",{key:r.kind,type:"button",class:"bb-actor-bar-btn","data-act":r.kind,title:a.$t(r.tip),"aria-label":a.$t(r.tip),onClick:l=>n("act",r.kind)},[ce(i,{name:r.icon,class:"bb-actor-bar-icon"},null,8,["name"])],8,Rte)),64))],36)}}}),Ote=Object.assign(ot(Dte,[["__scopeId","data-v-ef2543a0"]]),{__name:"BbBoardBbActorBar"});function Nte(e){const{snapshot:t,part:n,id:o,displayed:a,target:s}=e,i=t.room,r=n.actors.find(c=>c.id===o);if(r){const c=cl(a,s,Vt(r),Ra(i,n,r));return hh(r,a,c)}const l=[...i.props,...n.props].find(c=>c.id===o);if(l){const c=CI(l,s,vu(i,n,l));return{type:"prop.place",propId:l.id,center:c}}return n.cameras.some(c=>c.id===o)?{type:"camera.move",cameraId:o,position:s}:null}function Lte(e){const t=e.path.waypoints;if(t.length===0)return null;const n=[e.start.position,...t].map(o=>({x:o.x,y:o.y}));return{color:e.color,line:n,dots:n.slice(1,-1),end:n.at(-1)}}function Kte(e,t){const n=Oi(t);return[...t].sort((o,a)=>(n.get(o.id)??0)-(n.get(a.id)??0)).map(o=>{const a=e.timeline.coverages.find(s=>s.id===o.coverageId);return{cutId:o.id,number:String(n.get(o.id)??0).padStart(2,"0"),cameraId:o.cameraId,coverageId:o.coverageId,shotType:a?.shotType??null,inSec:o.inSec,durationSec:o.outSec-o.inSec}})}function Fte(e,t){return Kte(e,t?.cuts??e.timeline.cuts)}function Hte(e,t){const n=e.find(a=>t>=a.inSec&&t<a.inSec+a.durationSec);if(n)return n.cutId;const o=e[e.length-1];return o&&Math.abs(t-(o.inSec+o.durationSec))<1e-9?o.cutId:null}function Aw(e){return`tool.blockingBoard.shotType.${e.replace(/-([a-z])/g,(n,o)=>o.toUpperCase())}`}const Wp=e=>Object.entries(e??{}).sort(([t],[n])=>t<n?-1:t>n?1:0);function zte(e,t,n,o){const a=Wp(o.actors).map(([l,c])=>[l,c.position.x,c.position.y,c.headingDeg??null,c.bodyDeg??null,c.pose??null,c.poseBlend??null,c.seatPropId??null]),s=[...o.props??[]].sort((l,c)=>l.id<c.id?-1:l.id>
246c.id?1:0).map(l=>[l.id,l.center.x,l.center.y,l.headingDeg,l.elevationM??0]),i=[...(o.carried??new Map).entries()].sort(([l],[c])=>l<c?-1:l>c?1:0).map(([l,c])=>[l,c.center.x,c.center.y,c.baseHeightM,c.carried]),r=[n.position.x,n.position.y,n.heightM,n.headingDeg,n.pitchDeg,n.rollDeg,n.lensMm,n.fovH,n.fovV];return JSON.stringify([e,t,r,a,s,Wp(o.openings),Wp(o.motionClips),i])}function jte(e,t,n,o){const{part:a,settled:s,resolved:i}=t,r=Wa(a,s,i,e.room,n.inSec,{easing:e.settings.easing,tracks:t.tracks??void 0});if(!r.camera)return null;const l={...r,openings:ph(a,n.inSec),motionClips:dh(a,s,n.inSec)},c=Al(e,a.partId,n.inSec);return{cutId:n.cutId,key:zte(n.cutId,o,r.camera,{actors:l.actors,props:[...e.room.props,...a.props],openings:l.openings,motionClips:l.motionClips,carried:c}),frameState:l,camera:r.camera,carried:c}}const eu=e=>e*Math.PI/180,ld=(e,t,n)=>Math.max(t,Math.min(n,e)),or=1.2,Tw=25,Ute=16/9,Rw=1.1,Xp=.5,cd=40;function Yp(e,t,n){const o=Math.tan(eu(Tw)),a=o*n;return Math.max(e/a,t/o)*Rw}function Gte(e,t,n=Ute){const o=t.widthM/2,a=t.depthM/2;return e==="top"?{target:{x:0,y:0,h:0},distance:ld(Yp(o,a,n),Xp,cd),yaw:90,pitch:89}:e==="front"?{target:{x:0,y:0,h:or},distance:ld(Yp(o,or,n)+a,Xp,cd),yaw:90,pitch:0}:{target:{x:0,y:0,h:or},distance:ld(Yp(a,or,n)+o,Xp,cd),yaw:0,pitch:0}}const Vte=5;function Wte(e){const t=eu(e.yaw),n=eu(e.pitch),o=Vte;return Ps({target:{x:e.x+o*Math.cos(n)*Math.cos(t),y:e.y+o*Math.cos(n)*Math.sin(t),h:e.eyeH+o*Math.sin(n)},distance:o,yaw:((e.yaw+180)%360+360)%360,pitch:-e.pitch})}const Xte=.3;function Yte(e){return{center:{x:0,y:0,h:or},radiusM:Math.hypot(e.widthM/2,e.depthM/2,or)}}function Dw(e,t,n,o){const a=[...e.room.props,...t.props],s=new Map(a.map(c=>[c.id,c])),i=[];for(const c of o){const d=t.actors.find(f=>f.id===c);if(d){const f=n.actors?.[c]?.position??d.start.position,h=wo(d)/2;i.push({center:{x:f.x,y:f.y,h},radiusM:Math.hypot(Vt(d),h)});continue}const u=s.get(c);if(u){const f=Ko(u);i.push({center:{x:u.center.x,y:u.center.y,h:ra(u,s,h=>Ir(e.room,t,h))+f/2},radiusM:Math.hypot(u.widthM/2,u.depthM/2,f/2)});continue}const p=t.cameras.find(f=>f.id===c);p&&i.push({center:{x:p.position.x,y:p.position.y,h:p.heightM},radiusM:Xte})}if(i.length===0)return Yte(e.room);if(i.length===1)return i[0];const r={x:1/0,y:1/0,h:1/0},l={x:-1/0,y:-1/0,h:-1/0};for(const c of i)for(const d of["x","y","h"])r[d]=Math.min(r[d],c.center[d]-c.radiusM),l[d]=Math.max(l[d],c.center[d]+c.radiusM);return{center:{x:(r.x+l.x)/2,y:(r.y+l.y)/2,h:(r.h+l.h)/2},radiusM:Math.hypot(l.x-r.x,l.y-r.y,l.h-r.h)/2}}const qte=1.5;function Zte(e,t){const n=ld(t.radiusM/Math.sin(eu(Tw))*Rw,qte,cd);return Ps({target:{...t.center},distance:n,yaw:e.yaw,pitch:e.pitch})}const Jte=40;function Qte(e,t){if(t.h>=0)return null;const n=-e.h/t.h;return n<0||n*Math.hypot(t.x,t.y,t.h)>Jte?null:{x:e.x+n*t.x,y:e.y+n*t.y}}function Qy(e){const t=Math.round(e);return t===0?"0":t<0?`â${-t}`:String(t)}function ene(e,t){const n="tool.blockingBoard.viewport.";return[`${Math.round(e.lensMm)}mm`,t(`${n}infoHeight`,{v:e.heightM.toFixed(2)}),t(`${n}infoPitch`,{v:Qy(e.pitchDeg)}),t(`${n}infoRoll`,{v:Qy(e.rollDeg)})].join(" · ")}const Ow="bb.3d.guides",qp={thirds:!0,safe:!0};function tne(e){try{const t=e?.getItem(Ow);if(!t)return{...qp};const n=JSON.parse(t);return!n||typeof n.thirds!="boolean"||typeof n.safe!="boolean"?{...qp}:{thirds:n.thirds,safe:n.safe}}catch{return{...qp}}}function nne(e,t){try{t?.setItem(Ow,JSON.stringify({thirds:e.thirds,safe:e.safe}))}catch{}}function one(e,t){const n="tool.blockingBoard.viewport.",o=[t(`${n}
246guides`)];return e.thirds&&o.push(t(`${n}guidesThirds`)),e.safe&&o.push(t(`${n}guidesSafe`)),o.join(" · ")}const ane={key:0,class:"bb-3d-header"},sne={class:"bb-3d-header-title"},ine={class:"bb-3d-header-actions"},rne=["aria-label"],lne=["aria-pressed","aria-label","title"],cne=["aria-pressed","aria-label","title"],dne=["aria-pressed","aria-label","title"],une=["title","aria-label"],pne=["aria-expanded"],fne={key:0,class:"bb-3d-guides-menu",role:"menu"},mne={class:"bb-3d-guides-item"},hne=["checked"],bne={class:"bb-3d-guides-item"},gne=["checked"],vne={key:2,class:"bb-3d-aspect"},yne=["aria-label","title"],kne={key:0,class:"bb-3d-loading"},Sne={key:1,class:"bb-3d-error"},Ine={class:"bb-3d-stage"},wne={class:"bb-3d-frame"},Mne={key:0,class:"bb-3d-guides","aria-hidden":"true"},$ne={key:1,class:"bb-3d-safe",x:"5%",y:"5%",width:"90%",height:"90%"},Ene={class:"bb-3d-label-name"},xne={key:0,class:"bb-3d-label-occluded"},Pne={key:1,class:"bb-3d-label-blocked"},Cne={key:3,class:"bb-3d-chips"},Bne={key:0,class:"bb-3d-chip bb-3d-cut"},_ne={key:1,class:"bb-3d-chip bb-3d-shot"},Ane=["title"],Tne={class:"bb-3d-hud-tl"},Rne=["aria-pressed","aria-label","title"],Dne={class:"bb-3d-hud-top"},One={key:0,class:"bb-3d-warning"},Nne={key:1,class:"bb-3d-hidden-wall"},Lne={key:0,class:"bb-3d-move-hint"},Kne={key:1,class:"bb-3d-nav-hint"},Fne={key:0,class:"bb-3d-handle-hint"},Hne={key:3,class:"bb-3d-empty",role:"status"},zne={class:"bb-3d-empty-title"},jne={class:"bb-3d-empty-hint"},Wi=18,ek="00000",Une=28,tk=.3,nk=4e3,ok=4,Gne=384,Vne=216,Wne=nt({__name:"Bb3dViewport",props:{snapshot:{},partId:{},frameState:{},settled:{},activeCameraId:{},mode:{},perfLight:{type:Boolean},pipOpen:{type:Boolean,default:!1},showPropLabels:{type:Boolean,default:!0},followCut:{type:Boolean,default:!1},playing:{type:Boolean,default:!1},selectedCamera:{},displayCamera:{},selectionBounds:{default:null},selectionIds:{default:()=>[]},hiddenIds:{default:()=>[]},lockedIds:{default:()=>[]},cameraStates:{default:()=>[]},thumbnailRequests:{default:()=>[]},headerHidden:{type:Boolean,default:!1},timeSec:{default:0},pick:{default:null}},emits:["apply-view","add-key","update:mode","update:follow-cut","status","select","select-many","drag-commit","drop-choice","update:dragging","thumbnail","context-menu","pick","pick-cancel","rotate-commit","actor-act"],setup(e,{expose:t,emit:n}){const o=["camera","free","walk"],a={camera:"0",free:"V",walk:"V"},s={camera:"tool.blockingBoard.viewport.modeTip.camera",free:"tool.blockingBoard.viewport.modeTip.orbit",walk:"tool.blockingBoard.viewport.modeTip.walk"},i=e,r=C(()=>({hidden:i.hiddenIds,locked:i.lockedIds})),l=C(()=>Pp(A.value,r.value)),c=C(()=>Pp(N.value,r.value)),d=C(()=>i.mode==="camera"?[]:Pp(K.value,r.value).filter(z=>z.visible)),u=z=>z.length*7+12,p=C(()=>{const z=[];for(const He of l.value){if(!He.visible)continue;const gt=u(Ie(He.id));z.push({id:He.id,x:He.x+gt/2,y:He.y+Wi/2,w:gt,h:Wi})}if(i.showPropLabels){for(const He of c.value){if(!He.visible)continue;const gt=u(lt(He.id));z.push({id:He.id,x:He.x,y:He.y-Wi/2,w:gt,h:Wi})}for(const He of d.value){const gt=X.value?.cameras.find(Gn=>Gn.id===He.id),Bt=u(gt?ui(gt,ek):ek);z.push({id:He.id,x:He.x,y:He.y-Wi/2,w:Bt,h:Wi})}}const be=new Map(z.map(He=>[He.id,He.y])),Ge=new Map;for(const He of ate(z)){const gt=He.y-be.get(He.id);gt!==0&&Ge.set(He.id,gt)}return Ge});function f(z){return z.y+(p.value.get(z.id)??0)}const h=C(()=>{if(i.mode==="camera"||i.pick||i.selectionIds.length!==1)return null;const z=i.selectionIds[0];if(i.lockedIds.includes(z)||!X.value?.actors.some(Ge=>Ge.id===z))return null;const be=l.value.find(Ge=>Ge.id===z&&Ge.visible);return be?{id:z,x:be.x,y:f(be)-Une}:null}),b=n,I=typeof bd=="function"?String(bd().public.MEDIA_HOST??""):"",y=G("loading"),w=G(!1),M=G(0),x=G(null),_=G(null),O=G(null),A=G([]),N=G([]),K=G([]),F=G(null),B=G(null),j=G(!1),ee=G(null),D=G(null);let Z=null,L=null,V=null,pe=null,le=null;const me=new Set;let oe=null,fe=null;const X=C(()=>i.snapshot.parts.find(z=>z.partId===i.partId)),re=C(()=>i.activeCameraId??i.frameState?.activeCut?.cameraId??null),Se=C(()=>X.value?.cameras.find(z=>z.id===re.value)??null),Q=C(()=>i.selectedCamera!==void 0?i.selectedCamera:Se.value),$e=C(()=>i.displayCamera===void 0?i.frameState?.camera:i.displayCamera?.state),Fe=C(()=>i.displayCamera===void 0?Se.value:i.displayCamera?.model??null),Ze=C(()=>{const z=i.snapshot.room;return i.mode==="camera"?!!$e.value&&aw(z,$e.value)!==null:i.mode==="walk"?!!B.value&&Xd(z,{x:B.value.x,y:B.value.y}).length>0:i.mode!=="free"||!F.value?!1:Xd(z,gs(F.value)).length>0}),ue=C(()=>{const z=i.frameState?.activeCut?.coverageId;return i.frameState?.activeCoverages?.find(be=>be.id===z)??i.frameState?.activeCoverages?.[0]??null}),ye=C(()=>{const z=i.displayCamera;return z===void 0?ue.value:z?z.source==="cut"?ue.value:i.frameState?.activeCoverages?.find(be=>be.cameraId===z.model.id)??null:null}),Ue=C(()=>new Set(ye.value?.subject.targetIds)),te=C(()=>Ue.value.size===0?!1:A.value.some(z=>Ue.value.has(z.id)&&!z.visible)),q=C(()=>{const z=i.frameState?.activeCut;return!z||!X.value?null:Oi(X.value.timeline.cuts).get(z.id)??null}),de=C(()=>i.mode!=="camera"||i.frameState===null?!1:i.displayCamera===void 0?!i.frameState.camera:i.displayCamera===null);function Ce(z,be){const Ge=(X.value?.cameras.findIndex(He=>He.id===z.id)??-1)+1;return ui(z,be("tool.blockingBoard.cameraFallback",{n:Ge}))}function Ye(z,be){const Ge=X.value?.cameras.find(He=>He.id===z);return Ge?Ce(Ge,be):""}function tt(z){if(i.mode==="free")return z("tool.blockingBoard.viewport.modeOrbit");if(i.mode==="walk")return z("tool.blockingBoard.viewport.modeWalk");const be=Fe.value;return be?z("tool.blockingBoard.viewport.lookThrough",{name:Ce(be,z)}):z("tool.blockingBoard.viewport.modeCamera")}function ht(z){return z("tool.blockingBoard.viewport.cutChip",{n:String(q.value).padStart(2,"0")})}function Et(z){const be=ye.value;if(!be)return null;const Ge=be.subject.targetIds.map(gt=>Ie(gt)),He=z(Aw(be.shotType));return Ge.length>0?`${He} · ${Ge.join(", ")}`:He}function It(z){return $e.value?ene($e.value,z):""}function Xt(z,be,Ge){return`${Ge(z)} (${a[be]}) â ${Ge(s[be])}`}function yt(z,be){const Ge=[...i.snapshot.room.props,...X.value?.props??[]].find(gt=>gt.id===z);
246if(Ge)return Ge.name;const He=fu(z);return He?be("tool.blockingBoard.viewport.wallName",{side:be(`tool.blockingBoard.inspector.${He}`)}):be("tool.blockingBoard.viewport.unknownBlocker")}function Ie(z){return X.value?.actors.find(be=>be.id===z)?.name??z}function Be(z){return X.value?.actors.find(be=>be.id===z)?.color??"#ffffff"}function lt(z){return[...i.snapshot.room.props,...X.value?.props??[]].find(be=>be.id===z)?.name??""}function Ke(z){return typeof document>"u"?"":getComputedStyle(document.documentElement).getPropertyValue(z).trim()}async function ct(){V?.dispose({keepContext:!0}),V=null,w.value=!1,y.value="loading",b("status","loading");try{const z=await Bw();if(!x.value)return;V=Pw(z,x.value,{onLabels:be=>{A.value=be},onPropLabels:be=>{N.value=be},onCameraLabels:be=>{K.value=be},dangerColor:Ke("--color-danger"),accentColor:Ke("--color-accented"),mediaHost:I}),V.build(i.snapshot,i.partId),i.hiddenIds.length>0&&V.setHidden?.(i.hiddenIds),V.setLight(i.snapshot.settings.lightTime,i.snapshot.settings.lightDirectionDeg),V.setPerfLight(i.perfLight),V.setViewMode(i.mode),i.mode==="free"?(Jt(),At()):i.mode==="walk"&&(Ae(),Ve()),i.frameState&&jt(i.frameState),Lt(),on(),V.setMoveHandles?.(Dt.value),V.setPathMarks?.(Un.value),V.setHeightLine?.(Ro.value),O.value&&V.resize(O.value.clientWidth,O.value.clientHeight),y.value="ready",b("status","ready"),he()}catch{y.value="error",b("status","error")}}async function xt(){uJ(),w.value&&(Zn(),M.value+=1,await hn(),Ma()),ct()}function jt(z){!V||!X.value||V.updateFrame(z,{part:X.value,settled:i.settled,camera:i.displayCamera?.state??null,carried:Al(i.snapshot,i.partId,i.timeSec)})}function Jt(){F.value||(F.value=Zi(i.snapshot.room))}function Mn(){const z=i.displayCamera?.state??i.frameState?.camera??null;F.value=z?Nee(z):Zi(i.snapshot.room),At()}function At(){F.value&&V?.setFreeView(F.value)}function Ae(){if(B.value)return;const z=i.displayCamera?.state??i.frameState?.camera??null;if(z)B.value=zp(z.position,z.headingDeg);else if(F.value){const be=gs(F.value),Ge=Qt(F.value.yaw+180);B.value=zp({x:be.x,y:be.y},Ge)}else B.value=zp({x:0,y:0},0)}function Ve(){B.value&&V?.setWalkView?.(B.value)}function Xe(){let z=0,be=0;me.has("forward")&&(z+=1),me.has("back")&&(z-=1),me.has("right")&&(be+=1),me.has("left")&&(be-=1);const Ge=(me.has("up")?1:0)-(me.has("down")?1:0);return{forward:z,right:be,up:Ge}}function ne(z){if(oe=null,i.mode!=="walk"||me.size===0||!B.value){fe=null;return}const Ge=Math.min((z-(fe??z))/1e3,.1);fe=z,B.value=Jee(B.value,Xe(),Ge,{run:me.has("run")}),Ve(),oe=globalThis.requestAnimationFrame(ne)}function W(){oe===null&&(fe=null,oe=globalThis.requestAnimationFrame(ne))}function ve(){oe!==null&&globalThis.cancelAnimationFrame(oe),oe=null,fe=null,me.clear()}function we(){j.value=!1,le!==null&&clearTimeout(le),le=setTimeout(()=>{j.value=!0,le=null},nk)}function Re(){le!==null&&clearTimeout(le),le=null}const ut=G(!1);let bn=null;function Qn(){bn!==null&&clearTimeout(bn),bn=null,ut.value=!1}Je(()=>i.mode,()=>Qn()),wn(Qn);function ea(){if(i.mode!=="camera"){we();return}Qn(),ut.value=!0,bn=setTimeout(Qn,nk)}const yn=C(()=>i.mode==="camera"?"camera":ee.value);function Ln(z){F.value=Gte(z,i.snapshot.room,Cs()),i.mode==="walk"&&ve(),ee.value=z,xo(),i.mode!=="free"&&b("update:mode","free"),At()}function co(z){z==="camera"?Dn("camera"):Ln(z)}function Mo(){const z=i.selectionBounds??(X.value?Dw(i.snapshot,X.value,i.frameState??{actors:{}},[]):null);if(!z)return;const be=i.snapshot.room;let Ge;if(i.mode==="camera"){const He=$e.value;Ge=He?Dee(He):F.value??Zi(be)}else i.mode==="walk"?(Ge=B.value?Wte(B.value):F.value??Zi(be),ve()):Ge=F.value??Zi(be);F.value=Zte(Ge,z),ee.value=null,i.mode!=="free"&&(xo(),b("update:mode","free")),At(),V?.showPivot?.(z.center)}function Fo(){try{return globalThis.localStorage??void 0}catch{return}}const bo=G(tne(Fo())),Hn=G(!1),Ho=G(null);function $o(z,be){bo.value={...bo.value,[z]:be},nne(bo.value,Fo())}function To(z){z.target instanceof Node&&Ho.value?.contains(z.target)||(Hn.value=!1)}Je(Hn,z=>{z?document.addEventListener("pointerdown",To,!0):document.removeEventListener("pointerdown",To,!0)}),Qo("toolbarPopover",()=>Hn.value,z=>{if(z.id!=="overlay.close")return!1;Hn.value=!1});const ta={"walk.forward":"forward","walk.back":"back","walk.left":"left","walk.right":"right","walk.run":"run","walk.up":"up","walk.down":"down"},wa={"view3d.top":"top","view3d.front":"front","view3d.side":"side"};function na(z){const be=ta[z.id];if(be)return i.mode!=="walk"?!1:(z.arg.down?(me.add(be),W()):me.delete(be),!0);const Ge=wa[z.id];if(Ge)return Ln(Ge),!0;
246switch(z.id){case"view3d.cycleMode":return Dn(o[(o.indexOf(i.mode)+1)%o.length]),!0;case"view3d.camera":return Dn("camera"),!0;case"walk.exit":return i.mode!=="walk"?!1:(Dn("free"),!0);case"view3d.frameSelected":return Mo(),!0;case"stage.cancelDrag":return Ar();default:return!1}}function Eo(){return i.mode==="camera"?null:i.mode==="walk"?B.value?ete(B.value):null:F.value?Zee(F.value):null}function go(z){const be=x.value?.getBoundingClientRect();if(!be||be.width===0||be.height===0)return null;const Ge=z==="cursor"&&L?{x:L.clientX,y:L.clientY}:{x:be.left+be.width/2,y:be.top+be.height/2},He=jo(On(Ge.x,Ge.y));return He?{board:He,client:Ge}:null}t({runKeyAction:na,currentViewPayload:Eo,placementFor:go,gizmoView:co,activeView:yn});function en(z){i.mode==="walk"&&(z.metaKey||z.ctrlKey||z.altKey)&&ve()}function eo(){ve()}function Ut(){document.visibilityState==="hidden"&&ve()}function zo(z){z.preventDefault(),w.value=!0,y.value="error",b("status","error")}function nn(){ct()}function Ma(){x.value?.addEventListener("webglcontextlost",zo),x.value?.addEventListener("webglcontextrestored",nn)}function Zn(){x.value?.removeEventListener("webglcontextlost",zo),x.value?.removeEventListener("webglcontextrestored",nn)}let so=null;function ge(){V?.refreshPixelRatio(),_e()}function _e(){so?.removeEventListener("change",ge),so=globalThis.matchMedia?.(`(resolution: ${globalThis.devicePixelRatio}dppx)`)??null,so?.addEventListener("change",ge)}function R(){so?.removeEventListener("change",ge),so=null}const U=new Set;let Y=null;function he(){Y!==null||i.playing||!V||i.thumbnailRequests.some(z=>!U.has(z.key))&&(Y=globalThis.requestAnimationFrame(xe))}function xe(){if(Y=null,i.playing||!V)return;const z=i.thumbnailRequests.find(Ge=>!U.has(Ge.key));if(!z)return;U.add(z.key);const be=V.renderThumbnail?.(z.frameState,z.camera,Gne,Vne,z.carried);be&&b("thumbnail",z.cutId,z.key,be),he()}Je(()=>[i.thumbnailRequests,i.playing],()=>he());function De(){const z=D.value?.handle;D.value=null,Rt(),z&&(V?.previewMove?.(z.id,null),V?.previewLift?.(z.id,null),V?.setMoveHandles?.(Dt.value),b("update:dragging",!1))}function bt(z){D.value&&z.pointerId!==D.value.pointerId||De()}function Yt(z){D.value&&z.pointerId!==D.value.pointerId||De()}function Ft(){window.addEventListener("pointerup",bt),window.addEventListener("pointercancel",Yt)}function Rt(){window.removeEventListener("pointerup",bt),window.removeEventListener("pointercancel",Yt)}Jn(()=>{ct(),pe=new ResizeObserver(()=>{V&&O.value&&V.resize(O.value.clientWidth,O.value.clientHeight)}),O.value&&pe.observe(O.value),i.mode!=="camera"&&we(),window.addEventListener("blur",eo),document.addEventListener("visibilitychange",Ut),Ma(),_e()}),wn(()=>{pe?.disconnect(),Rt(),ve(),Re(),Y!==null&&globalThis.cancelAnimationFrame(Y),Y=null,document.removeEventListener("pointerdown",To,!0),window.removeEventListener("blur",eo),document.removeEventListener("visibilitychange",Ut),Zn(),R(),V?.dispose(),V=null}),Je(()=>[i.frameState,i.displayCamera],([z])=>{z&&(jt(z),V?.requestRender())}),Je(()=>[i.snapshot,i.partId],([z,be])=>{V&&(V.build(z,be),i.frameState&&jt(i.frameState),V.requestRender())}),Je([()=>i.partId,()=>i.snapshot.room.widthM,()=>i.snapshot.room.depthM],()=>{if(B.value=null,F.value=null,i.mode==="walk"){if(Ae(),B.value){const z=i.snapshot.room.widthM/2,be=i.snapshot.room.depthM/2;B.value={...B.value,x:Math.max(-z,Math.min(z,B.value.x)),y:Math.max(-be,Math.min(be,B.value.y))}}Ve()}else i.mode==="free"&&(Jt(),At())}),Je(()=>[i.snapshot.settings.lightTime,i.snapshot.settings.lightDirectionDeg],([z,be])=>{V?.setLight(z,be),V?.requestRender()}),Je(()=>i.perfLight,z=>V?.setPerfLight(z)),Je(()=>i.mode,z=>{V?.setViewMode(z),z!=="walk"&&ve(),z==="free"?Jt():z==="walk"&&Ae(),z==="camera"&&(ee.value=null),At(),Ve(),z==="camera"?Re():we()}),Je(()=>i.playing,(z,be)=>{z&&!be&&i.followCut&&i.mode!=="camera"&&b("update:mode","camera")});function Lt(){const z=[...i.selectionIds];i.displayCamera?.id&&z.push(i.displayCamera.id),V?.setCameraMarkers?.(i.cameraStates,z)}function on(){V?.setSelection?.(i.selectionIds.filter(z=>!i.hiddenIds.includes(z)))}Je(()=>[i.cameraStates,i.selectionIds,i.displayCamera?.id],Lt),Je(()=>[i.selectionIds,i.hiddenIds],on),Je(()=>i.hiddenIds,z=>{V?.setHidden?.(z),V?.requestRender()});const Dt=C(()=>
246{if(i.mode==="camera"||i.selectionIds.length!==1)return null;const z=i.selectionIds[0];if(hv(r.value,[z]).length===0)return null;const be=X.value;if(!be)return null;const Ge=be.actors.find(Bt=>Bt.id===z);if(Ge){const Bt=i.frameState?.actors[z];return{id:z,position:Bt?.position??Ge.start.position,kind:"actor",lift:!1,headingDeg:Bt?.headingDeg??Ge.start.headingDeg,heightM:0,minM:0,maxM:0}}const He=[...i.snapshot.room.props,...be.props].find(Bt=>Bt.id===z);if(He){if(Al(i.snapshot,i.partId,i.timeSec).has(z))return null;const Bt=!Tt(He.catalogKey??He.kind)?.walkable;return{id:z,position:He.center,kind:"prop",lift:Bt,headingDeg:He.headingDeg,heightM:Bt?He.elevationM??0:0,minM:0,maxM:Bt?$n.propElevationM.max:0}}const gt=be.cameras.find(Bt=>Bt.id===z);if(gt){const Bt=i.cameraStates.find(Gn=>Gn.id===z)?.state.position??gt.position;return gt.keys.length>0?{id:z,position:Bt,kind:"camera",lift:!1,heightM:0,minM:0,maxM:0}:{id:z,position:Bt,kind:"camera",lift:!0,headingDeg:gt.headingDeg,heightM:gt.heightM,minM:$n.cameraHeightM.min,maxM:$n.cameraHeightM.max}}return null});Je(Dt,z=>V?.setMoveHandles?.(z));const Un=C(()=>{if(i.mode==="camera"||i.selectionIds.length!==1)return null;const z=X.value?.actors.find(be=>be.id===i.selectionIds[0]);return z?Lte(z):null});Je(Un,z=>V?.setPathMarks?.(z));const Ro=C(()=>{const z=X.value;if(!z||i.selectionIds.length!==1)return null;const be=i.selectionIds[0];if(i.hiddenIds.includes(be))return null;const Ge=[...i.snapshot.room.props,...z.props],He=Ge.find(Bt=>Bt.id===be);if(!He)return null;const gt=ra(He,new Map(Ge.map(Bt=>[Bt.id,Bt])),Bt=>Ir(i.snapshot.room,z,Bt));return gt>.001?{x:He.center.x,y:He.center.y,baseM:gt}:null});Je(Ro,z=>V?.setHeightLine?.(z));function xo(){i.followCut&&b("update:follow-cut",!1)}function Dn(z){if(z!=="camera"){xo(),b("update:mode",z);return}i.selectedCamera?i.followCut&&b("update:follow-cut",!1):i.followCut||b("update:follow-cut",!0),i.mode!=="camera"&&b("update:mode","camera")}function On(z,be){const Ge=x.value?.getBoundingClientRect();return!Ge||Ge.width===0||Ge.height===0?null:{x:(z-Ge.left)/Ge.width*2-1,y:-((be-Ge.top)/Ge.height*2-1)}}function $a(z){return On(z.clientX,z.clientY)}function Ja(z,be){const Ge=x.value?.getBoundingClientRect();return Ge?{x:z-Ge.left,y:be-Ge.top}:null}function ei(){const z=x.value?.getBoundingClientRect();return z&&z.width>0&&z.height>0?z.width/z.height:16/9}function Cs(){const z=O.value;return z&&z.clientWidth>0&&z.clientHeight>0?z.clientWidth/z.clientHeight:ei()}function jo(z){if(!z)return null;const be=V?.floorRayAt?.(z);return be?Qte(be.origin,be.dir):null}function Ea(z,be){const Ge=Ja(z,be);return Ge?V?.pickAt?.(Ge,He=>hv(r.value,[He]).length>0)??null:null}function Uo(z,be){const Ge=Ea(z.x,z.y);Ge?b("select",Ge,be.shiftKey||be.metaKey||be.ctrlKey):b("select-many",[])}function Br(z){const be=Ea(z.x,z.y),Ge=be&&be!==i.pick?.actorId?_r(be):null,He=Ge?be:null,gt=Ge??jo(On(z.x,z.y));gt&&b("pick",{point:gt,targetId:He})}function _r(z){const be=X.value;if(!be)return null;const Ge=be.actors.find(gt=>gt.id===z);if(Ge)return i.frameState?.actors[z]?.position??Ge.start.position;const He=[...i.snapshot.room.props,...be.props].find(gt=>gt.id===z);return He?He.center:be.cameras.find(gt=>gt.id===z)?.position??null}function ti(z){const be=Dt.value;if(!be)return!1;const Ge=V?.moveHandleScreen?.()??null,He=Ja(z.clientX,z.clientY),gt=Ge&&He?lte(He,Ge):null;if(!gt||!Ge)return!1;const Bt={...be.position};let Gn;if(gt==="z")Gn={axis:gt,id:be.id,start:Bt,grabOffset:{x:0,y:0},target:Bt,startClientY:z.clientY,startM:be.heightM,minM:be.minM,maxM:be.maxM,pxPerMeter:Ge.zPxPerM,valueM:be.heightM};else if(gt==="rot")Gn={axis:gt,id:be.id,start:Bt,grabOffset:{x:0,y:0},target:Bt,headingDeg:be.headingDeg};else{const yo=jo($a(z));if(!yo)return!1;Gn={axis:gt,id:be.id,start:Bt,grabOffset:{x:Bt.x-yo.x,y:Bt.y-yo.y},target:Bt}}return Gn.alt=z.altKey,D.value={pointerId:z.pointerId,mode:"handle",x:z.clientX,y:z.clientY,handle:Gn},b("update:dragging",!0),!0}function Ar(){return D.value?.mode!=="handle"?!1:(Z=null,De(),!0)}function xa(z){const be=i.mode==="free"||i.mode==="walk";if(be&&z.button===1&&z.preventDefault(),D.value||(z.button===0&&(Z={x:z.clientX,y:z.clientY,pointerId:z.pointerId}),!be))return;const Ge=z.button===1&&i.mode==="free";if(!(z.button!==0&&!Ge)){try{z.currentTarget.setPointerCapture?.(z.pointerId)}catch{}if(z.button===0&&!i.pick&&ti(z)){Ft();return}Ft(),D.value={pointerId:z.pointerId,mode:z.shiftKey||z.button===1?"pan":"orbit",x:z.clientX,y:z.clientY,startX:z.clientX,startY:z.clientY}}}function Ni(z){if(L={clientX:z.clientX,clientY:z.clientY},!D.value||z.pointerId!==D.value.pointerId)return;const be=D.value.handle;if(be){if(be.axis==="z"){be.valueM=cte({startM:be.startM,startClientY:be.startClientY,clientY:z.clientY,pxPerMeter:be.pxPerMeter,snap:!z.ctrlKey,minM:be.minM,maxM:be.maxM}),V?.previewLift?.(be.id,be.valueM-be.startM);return}if(be.axis==="rot"){const an=jo($a(z));an&&Dt.value&&(be.headingDeg=xI(Ms(be.start,an),{snap:!z.ctrlKey,shift:z.
246shiftKey}),V?.setMoveHandles?.({...Dt.value,headingDeg:be.headingDeg}));return}const Gn=jo($a(z));if(!Gn)return;const yo=dte(be.start,be.grabOffset,Gn,be.axis);D.value={...D.value,handle:{...be,target:yo}},V?.previewMove?.(be.id,yo),xo();return}const Ge=z.clientX-D.value.x,He=z.clientY-D.value.y;D.value={...D.value,x:z.clientX,y:z.clientY};const{startX:gt,startY:Bt}=D.value;if(!D.value.followChecked&>!==void 0&&Bt!==void 0&&Math.hypot(z.clientX-gt,z.clientY-Bt)>ok&&(D.value.followChecked=!0,xo()),i.mode==="walk"){if(!B.value)return;B.value=Qee(B.value,Ge,He),Ve();return}F.value&&(ee.value=null,F.value=D.value.mode==="orbit"?zee(F.value,Ge*tk,He*tk):Gee(F.value,Ge,He),At())}function Li(z,be,Ge){const He=X.value;if(!He)return null;const gt=He.actors.some(yo=>yo.id===z.id)?"actor":[...i.snapshot.room.props,...He.props].some(yo=>yo.id===z.id)?"prop":null;if(!gt)return null;const Bt={snapshot:i.snapshot,partId:i.partId,timeSec:i.timeSec,dragged:{kind:gt,id:z.id},rawPoint:z.target,displayed:z.start,moveCommand:be,supportPicked:!1},Gn=L1(Bt)??K1(Bt,z.alt??!1);return Gn?{ctx:Bt,hit:Gn,clientX:Ge.x,clientY:Ge.y}:null}function Tr(z,be){if(z.axis==="z"){const gt=z.valueM;if(gt===z.startM)return;Dt.value?.kind==="camera"?b("drag-commit",{type:"camera.setField",cameraId:z.id,patch:{heightM:gt}}):b("drag-commit",{type:"prop.setElevation",propId:z.id,elevationM:gt===0?null:gt});return}if(z.axis==="rot"){z.headingDeg!==void 0&&z.headingDeg!==Dt.value?.headingDeg&&b("rotate-commit",{id:z.id,headingDeg:z.headingDeg});return}const Ge=Math.hypot(z.target.x-z.start.x,z.target.y-z.start.y),He=X.value;if(He&&Ge>1e-9){const gt=Nte({snapshot:i.snapshot,part:He,id:z.id,displayed:z.start,target:z.target}),Bt=gt?Li(z,gt,be):null;Bt?b("drop-choice",Bt):gt&&b("drag-commit",gt)}}function Bs(z){if(D.value&&z.pointerId!==D.value.pointerId)return;const be=Z;Z=null;const Ge=D.value?.handle;if(Ge){Tr(Ge,{x:z.clientX,y:z.clientY}),De();return}De(),be&&z.button===0&&be.pointerId===z.pointerId&&Math.hypot(z.clientX-be.x,z.clientY-be.y)<ok&&(i.pick?Br(be):Uo(be,z))}function Ki(z){if(z.preventDefault(),i.pick){b("pick-cancel");return}if(D.value)return;const be=Ea(z.clientX,z.clientY);be&&!i.selectionIds.includes(be)&&b("select",be,!1),b("context-menu",{view:"3d",clientX:z.clientX,clientY:z.clientY,floor:jo($a(z)),hit:be?{kind:"entity",id:be}:{kind:"empty"}})}function Fi(z){if(i.mode!=="free"||!F.value)return;z.preventDefault(),xo(),ee.value=null;const be=x.value?.getBoundingClientRect().height??0,Ge=zd(z.deltaY,z.deltaMode,be);F.value=Yee(F.value,Ge,$a(z)??{x:0,y:0},ei()),At()}function Rr(z){if(i.mode!=="free"||!F.value)return;const be=$a(z);if(!be)return;const Ge=F.value,He=ei(),gt=Wee(Ge,be,He)??xw(Ge,be,He);F.value=qee(Ge,gt),ee.value=null,At(),V?.showPivot?.(gt)}function vo(){const z=Eo();z&&b("apply-view",z)}function Dr(){const z=Eo();z&&b("add-key",z)}return(z,be)=>{const Ge=vn;return v(),k("div",{ref_key:"containerRef",ref:_,class:qe(["bb-3d",{"bb-3d--pip":e.pipOpen,"bb-3d--pick":!!e.pick}]),tabindex:"0","data-bb-area":"stage3d",onKeydown:en},[e.headerHidden?H("",!0):(v(),k("div",ane,[m("span",{class:qe(["bb-3d-header-dot",{"bb-3d-header-dot--camera":e.mode==="camera"}])},null,2),m("span",sne,S(tt(z.$t)),1),m("div",ine,[e.mode!=="camera"&&g(Q)?(v(),k(ae,{key:0},[g(Q).keys.length===0?(v(),k("button",{key:0,type:"button",class:"bb-3d-apply-view btn-md",onClick:vo},S(z.$t("tool.blockingBoard.viewport.applyViewTo",{name:Ce(g(Q),z.$t)})),1)):(v(),k("button",{key:1,type:"button",class:"bb-3d-add-key btn-md",onClick:Dr},S(z.$t("tool.blockingBoard.viewport.addKeyTo",{name:Ce(g(Q),z.$t)})),1))],64)):H("",!0),m("div",{class:"bb-3d-view-mode",role:"group","aria-label":z.$t("tool.blockingBoard.viewport.viewModeGroup")},[m("button",{type:"button",class:"bb-3d-mode-camera","data-mode":"camera","aria-pressed":e.mode==="camera","aria-label":z.$t("tool.blockingBoard.viewport.modeCamera"),title:Xt("tool.blockingBoard.viewport.modeCamera","camera",z.$t),onClick:be[0]||(be[0]=He=>Dn("camera"))},[ce(Ge,{name:"i-lucide-video",class:"bb-3d-hud-icon"})],8,lne),m("button",{type:"button",class:"bb-3d-mode-free","data-mode":"free","aria-pressed":e.mode==="free","aria-label":z.$t("tool.blockingBoard.viewport.modeOrbit"),title:Xt("tool.blockingBoard.viewport.modeOrbit","free",z.$t),onClick:be[1]||(be[1]=He=>Dn("free"))},[ce(Ge,{name:"i-lucide-rotate-3d",class:"bb-3d-hud-icon"})],8,cne),m("button",{type:"button",class:"bb-3d-mode-walk","data-mode":"walk","aria-pressed":e.mode==="walk","aria-label":z.$t("tool.blockingBoard.viewport.modeWalk"),title:Xt("tool.blockingBoard.viewport.modeWalk","walk",z.$t),onClick:be[2]||(be[2]=He=>
246Dn("walk"))},[ce(Ge,{name:"i-lucide-footprints",class:"bb-3d-hud-icon"})],8,dne)],8,rne),e.mode==="free"?(v(),k("button",{key:1,type:"button",class:"bb-3d-orbit-reset",title:z.$t("tool.blockingBoard.viewport.orbitReset"),"aria-label":z.$t("tool.blockingBoard.viewport.orbitReset"),onClick:Mn},[ce(Ge,{name:"i-lucide-locate",class:"bb-3d-hud-icon"})],8,une)):H("",!0),ce(_w,{"active-view":g(yn),onView:co},null,8,["active-view"]),m("div",{ref_key:"guidesWrapRef",ref:Ho,class:"bb-3d-guides-wrap"},[m("button",{type:"button",class:"bb-3d-guides-button","aria-expanded":g(Hn),onClick:be[3]||(be[3]=He=>Hn.value=!g(Hn))},S(g(one)(g(bo),z.$t)),9,pne),g(Hn)?(v(),k("div",fne,[m("label",mne,[m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-guide":"thirds",checked:g(bo).thirds,onChange:be[4]||(be[4]=He=>$o("thirds",He.target.checked))},null,40,hne),We(" "+S(z.$t("tool.blockingBoard.viewport.guidesThirds")),1)]),m("label",bne,[m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-guide":"safe",checked:g(bo).safe,onChange:be[5]||(be[5]=He=>$o("safe",He.target.checked))},null,40,gne),We(" "+S(z.$t("tool.blockingBoard.viewport.guidesSafe")),1)])])):H("",!0)],512),e.mode==="camera"?(v(),k("span",vne,"16:9")):H("",!0),m("button",{type:"button",class:"bb-3d-nav-help","aria-label":z.$t("tool.blockingBoard.viewport.navHelp"),title:z.$t("tool.blockingBoard.viewport.navHelp"),onClick:ea}," ? ",8,yne)])])),m("div",{ref_key:"bodyRef",ref:O,class:"bb-3d-body"},[g(y)==="loading"?(v(),k("div",kne,S(z.$t("tool.blockingBoard.viewport.loading")),1)):g(y)==="error"?(v(),k("div",Sne,[m("p",null,S(z.$t(g(w)?"tool.blockingBoard.viewport.contextLost":"tool.blockingBoard.viewport.error")),1),m("button",{type:"button",class:"bb-3d-retry",onClick:xt},S(z.$t("tool.blockingBoard.viewport.retry")),1)])):H("",!0),Zt(m("div",Ine,[m("div",wne,[(v(),k("canvas",{key:g(M),ref_key:"canvasRef",ref:x,class:qe(["bb-3d-canvas",{"bb-3d-canvas--free":e.mode==="free","bb-3d-canvas--walk":e.mode==="walk","bb-3d-canvas--dragging":!!g(D)}]),onPointerdown:xa,onPointermove:Ni,onPointerup:Bs,onPointercancel:Bs,onWheel:Fi,onDblclick:Rr,onContextmenu:Ki},null,34)),e.mode==="camera"?(v(),k("svg",Mne,[g(bo).thirds?(v(),k(ae,{key:0},[be[9]||(be[9]=m("line",{x1:"33.3333%",y1:"0",x2:"33.3333%",y2:"100%"},null,-1)),be[10]||(be[10]=m("line",{x1:"66.6667%",y1:"0",x2:"66.6667%",y2:"100%"},null,-1)),be[11]||(be[11]=m("line",{x1:"0",y1:"33.3333%",x2:"100%",y2:"33.3333%"},null,-1)),be[12]||(be[12]=m("line",{x1:"0",y1:"66.6667%",x2:"100%",y2:"66.6667%"},null,-1))],64)):H("",!0),g(bo).safe?(v(),k("rect",$ne)):H("",!0)])):H("",!0),(v(!0),k(ae,null,Me(g(l).filter(He=>He.visible),He=>(v(),k("div",{key:He.id,class:qe(["bb-3d-label",{"bb-3d-label--occluded":!!He.occludedBy,"bb-3d-label--blocked":!!e.frameState?.actors[He.id]?.blocked}]),style:wt({transform:`translate(${He.x}px, ${f(He)}px)`,"--bb-3d-chip-color":Be(He.id)})},[m("span",Ene,S(Ie(He.id)),1),He.occludedBy?(v(),k("span",xne,S(z.$t("tool.blockingBoard.viewport.occludedBy",{name:yt(He.occludedBy,z.$t)})),1)):H("",!0),e.frameState?.actors[He.id]?.blocked?(v(),k("span",Pne,S(z.$t("tool.blockingBoard.viewport.blocked")),1)):H("",!0)],6))),128)),e.showPropLabels?(v(),k(ae,{key:1},[(v(!0),k(ae,null,Me(g(c).filter(He=>He.visible),He=>(v(),k("div",{key:He.id,class:"bb-3d-prop-label",style:wt({transform:`translate(${He.x}px, ${f(He)}px)`})},S(lt(He.id)),5))),128)),(v(!0),k(ae,null,Me(g(d),He=>(v(),k("div",{key:`cam-${He.id}`,class:"bb-3d-camera-label",style:wt({transform:`translate(${He.x}px, ${f(He)}px)`})},S(Ye(He.id,z.$t)),5))),128))],64)):H("",!0),g(h)?(v(),et(Ote,{key:2,x:g(h).x,y:g(h).y,onAct:be[6]||(be[6]=He=>b("actor-act",{actorId:g(h).id,kind:He}))},null,8,["x","y"])):H("",!0),e.mode==="camera"?(v(),k("div",Cne,[g(q)!==null?(v(),k("span",Bne,S(ht(z.$t)),1)):H("",!0),Et(z.$t)!==null?(v(),k("span",_ne,S(Et(z.$t)),1)):H("",!0)])):H("",!0),e.mode==="camera"&&g($e)?(v(),k("div",{key:4,class:"bb-3d-info",title:It(z.$t)},S(It(z.$t)),9,Ane)):H("",!0),cs(z.$slots,"frame-corner",{},void 0,!0)]),m("div",Tne,[m("button",{type:"button",class:"bb-3d-follow-cut","aria-pressed":e.followCut,"aria-label":z.$t("tool.blockingBoard.viewport.followCut"),title:z.$t("tool.blockingBoard.viewport.followCut"),onClick:be[7]||(be[7]=He=>b("update:follow-cut",!e.followCut))},[ce(Ge,{name:"i-lucide-crosshair",class:"bb-3d-hud-icon"})],8,Rne)]),m("div",Dne,[e.mode==="camera"&&g(te)?(v(),k("div",One,S(z.$t("tool.blockingBoard.viewport.subjectOutOfFrame")),1)):H("",!0),g(Ze)?(v(),k("div",Nne,S(z.$t("tool.blockingBoard.viewport.hiddenWall")),1)):H("",!0)]),g(D)?.mode==="handle"?(v(),k("div",Lne,S(z.$t("tool.blockingBoard.viewport.moveHint")),1)):H("",!0),e.mode==="camera"&&g(ut)?(v(),k("div",Kne,S(z.$t("tool.blockingBoard.viewport.navHintCamera")),1
246)):e.mode!=="camera"?(v(),k("div",{key:2,class:qe(["bb-3d-nav-hint",{"bb-3d-nav-hint--faded":g(j)}])},[We(S(z.$t(e.mode==="walk"?"tool.blockingBoard.viewport.hintWalk":"tool.blockingBoard.viewport.hintOrbit"))+" ",1),g(Dt)?(v(),k("div",Fne,S(z.$t(g(Dt).lift?"tool.blockingBoard.viewport.handleHintLift":"tool.blockingBoard.viewport.handleHint")),1)):H("",!0)],2)):H("",!0),g(de)?(v(),k("div",Hne,[m("p",zne,S(z.$t("tool.blockingBoard.viewport.noCamera")),1),m("p",jne,S(z.$t("tool.blockingBoard.viewport.noCameraHint")),1),m("button",{type:"button",class:"bb-3d-empty-free btn-md",onClick:be[8]||(be[8]=He=>Dn("free"))},S(z.$t("tool.blockingBoard.viewport.free")),1)])):H("",!0)],512),[[cr,g(y)==="ready"]])],512)],34)}}}),lm=Object.assign(ot(Wne,[["__scopeId","data-v-dc66bea9"]]),{__name:"BbViewportBb3dViewport"}),Nw="bb.stage.pip";function Lw(e){try{return(e??localStorage).getItem(Nw)!=="0"}catch{return!0}}function Kw(e,t){try{(t??localStorage).setItem(Nw,e?"1":"0")}catch{}}const Xne=["recent","actor",...Ta.map(e=>e.key),"camera","opening"],Fw={door:{widthM:.9,heightM:2.1},window:{widthM:1.2,heightM:1.2},"glass-door":{widthM:.9,heightM:2.1},"sliding-door":Jo["sliding-door"],"double-door":Jo["double-door"]},Hw="bb.addMenu.recent",zw=8,ak=Object.fromEntries(Ta.map((e,t)=>[e.key,t])),Yne={actor:{ko:"ì¸ë¬¼",en:"actor"},camera:{ko:"ì¹´ë©ë¼",en:"camera"},door:{ko:"문",en:"door"},window:{ko:"창문",en:"window"},"glass-door":{ko:"ì 리문",en:"glass door"},"sliding-door":{ko:"미ë«ì´ë¬¸",en:"sliding door"},"double-door":{ko:"ì문",en:"double door"},"window:wide":{ko:"íµì°½",en:"wide window"},"window:small":{ko:"ìì ì°½",en:"small window"},"window:high":{ko:"ëì ì°½",en:"high window"}},cm={kind:"actor",key:"actor"},dm={kind:"camera",key:"camera"},um=[...["door","glass-door","sliding-door","double-door","window"].map(e=>({kind:"opening",key:e,openingKind:e,...Fw[e]})),...["wide","small","high"].map(e=>({kind:"opening",key:`window:${e}`,openingKind:"window",preset:e,widthM:yd[e].widthM,heightM:yd[e].heightM}))];function pm(e){return{kind:"prop",key:e.key,catalogKey:e.key,label:e.labels,widthM:e.widthM,depthM:e.depthM}}function qne(e,t){return e.labels.ko.includes(t)||e.labels.en.toLowerCase().includes(t)||e.kind.toLowerCase().includes(t)||e.aliases.some(n=>n.toLowerCase().includes(t))}function Zne(e,t){return e.ko.includes(t)||e.en.toLowerCase().includes(t)}function sk(e,t){return[...e].sort((n,o)=>{const a=ak[n.category]-ak[o.category];return a!==0?a:Kn(n.labels,t).localeCompare(Kn(o.labels,t))})}function Jne(e){if(e==="actor")return cm;if(e==="camera")return dm;const t=um.find(o=>o.key===e);if(t)return t;const n=aa.find(o=>o.key===e);return n?pm(n):null}function Qne(e,t,n,o){const a=e.trim().toLowerCase();if(a){const s=sk(aa.filter(r=>qne(r,a)),o).map(pm),i=[cm,dm,...um].filter(r=>Zne(Yne[r.key],a));return[...s,...i]}switch(t){case"recent":return n.map(Jne).filter(s=>s!==null);case"actor":return[cm];case"camera":return[dm];case"opening":return um;default:return sk(aa.filter(s=>s.category===t),o).map(pm)}}function jw(){try{return globalThis.localStorage}catch{return}}function Uw(e){try{const t=(e??jw())?.getItem(Hw);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n)?n.filter(o=>typeof o=="string").slice(0,zw):[]}catch{return[]}}function eoe(e,t){const n=jw(),o=[e,...Uw(n).filter(a=>a!==e)].slice(0,zw);try{n?.setItem(Hw,JSON.stringify(o))}catch{}return o}function Gw(e,t,n){switch(e.kind){case"prop":{const o=aa.find(s=>s.key===e.catalogKey),a=xp({at:t,room:n,halfSizeM:o?{x:o.depthM/2,y:o.widthM/2}:{x:0,y:0}});return{type:"prop.add",kind:o?.kind??e.catalogKey,center:a,scope:"room",catalogKey:e.catalogKey}}case"actor":{const o=Ao[e.species]?.radiusM??0;return{type:"actor.add",name:e.name,species:e.species,bodyType:e.bodyType,position:xp({at:t,room:n,halfSizeM:{x:o,y:o}})}}case"camera":{const o=xp({at:t,room:n,halfSizeM:{x:0,y:0}});return{type:"camera.add",position:o,headingDeg:Ms(o,{x:0,y:0})}}case"opening":{const o=e.preset?yd[e.preset]:void 0,a=o??Fw[e.openingKind],{wall:s,offsetM:i}=m4(n,t,a.widthM);return{type:"opening.add",kind:e.openingKind,wall:s,offsetM:i,widthM:a.widthM,heightM:a.heightM,...o?{sillM:o.sillM}:{}}}}}function toe(e){return e.kind==="prop"?e.catalogKey:e.kind==="opening"?e.preset?`${e.openingKind}:${e.preset}`:e.openingKind:e.kind}const noe={class:"bb-space-panel"},ooe=["data-group"],aoe={class:"bb-space-group-title"},soe={class:"bb-space-items"},ioe=["data-item","title","onClick"],roe={class:"bb-space-item-label"},loe={key:0,class:"bb-space-room-size"},coe=nt({__name:"BbSpacePanel",props:{locale:{default:"ko"},roomSize:{default:void 0}},emits:["pick-opening","pick-prop","room-settings"],setup(e,{emit:t}){const n=e,o=t,a=["door","glass-door","sliding-door","double-door"],s=["normal","wide","small","high"],i=["partition","railing","archway","pillar"],r=["stairs","platform","ramp"],l={door:"i-lucide-door-closed","glass-door":"i-lucide-door-open","sliding-door":"i-lucide-panel-left","double-door":"i-lucide-columns-2","window:normal":"i-lucide-app-window","window:wide":"i-lucide-app-window","window:small":"i-lucide-app-window","window:high":"i-lucide-app-window",partition:"i-lucide-separator-vertical",railing:"i-lucide-fence",archway:"i-lucide-rainbow",pillar:"i-lucide-cylinder",stairs:"i-lucide-chevrons-up",platform:"i-lucide-square",ramp:"i-lucide-triangle-right"};function c(p){const f=Tt(p);return{id:p,label:f?Kn(f.labels,n.locale):p,icon:l[p]??"i-lucide-square",choose:()=>o("pick-prop",p)}}function d(p){return String(Math.round(p*100)/100)}function u(p){return[{key:"doors",items:a.map(f=>({id:f,label:p(`tool.blockingBoard.openingKind.${f.replace("-","")}`),icon:l[f],choose:()=>o("pick-opening",{kind:f})}))},{key:"windows",items:s.map(f=>({id:`window:${f}`,label:p(`tool.blockingBoard.stage.spacePanel.window.${f}`),icon:l[`window:${f}`],choose:()=>o("pick-opening",{kind:"window",preset:f})}))},{key:"walls",items:i.map(c)},{key:"levels",items:r.map(c)}]}return(p,f)=>{const h=vn;return v(),k("div",noe,[(v(!0),k(ae,null,Me(u(p.$t),b=>(v(),k("section",{key:b.key,class:"bb-space-group","data-group":b.key}
246,[m("p",aoe,S(p.$t(`tool.blockingBoard.stage.spacePanel.${b.key}`)),1),m("div",soe,[(v(!0),k(ae,null,Me(b.items,I=>(v(),k("button",{key:I.id,type:"button",class:"bb-space-item","data-item":I.id,title:I.label,onClick:y=>I.choose()},[ce(h,{name:I.icon,class:"bb-space-item-icon"},null,8,["name"]),m("span",roe,S(I.label),1)],8,ioe))),128))])],8,ooe))),128)),m("button",{type:"button",class:"bb-space-room","data-item":"room",onClick:f[0]||(f[0]=b=>o("room-settings"))},[ce(h,{name:"i-lucide-ruler",class:"bb-space-room-icon"}),m("span",null,S(p.$t("tool.blockingBoard.stage.spacePanel.roomResize")),1),e.roomSize?(v(),k("span",loe,S(d(e.roomSize.widthM))+" Ã "+S(d(e.roomSize.depthM))+"m",1)):H("",!0)])])}}}),doe=Object.assign(ot(coe,[["__scopeId","data-v-72fdaedb"]]),{__name:"BbBoardBbSpacePanel"}),uoe=["aria-expanded","title","aria-label"],poe={key:0,class:"bb-toolbar-space-popover shadow-smd1"},foe=["aria-expanded","title"],moe={key:0,class:"bb-toolbar-catalog shadow-smd1"},hoe=["placeholder"],boe=["aria-selected"],goe=["aria-selected","onClick"],voe={class:"bb-toolbar-catalog-more-anchor"},yoe=["aria-expanded","aria-label"],koe={key:0,class:"bb-toolbar-catalog-more-menu",role:"menu"},Soe=["aria-checked","data-category","onClick"],Ioe=["data-key","aria-selected","onClick"],woe={class:"bb-prop-glyph",viewBox:"-0.6 -0.6 1.2 1.2",width:"28",height:"28"},Moe=["x","y","width","height"],$oe=["d"],Eoe={class:"bb-toolbar-catalog-item-label"},xoe={class:"bb-toolbar-catalog-item-size"},Poe={key:0,class:"bb-toolbar-catalog-item-category"},Coe={key:1,class:"bb-toolbar-catalog-empty"},Boe={class:"bb-toolbar-catalog-hint"},_oe=["title"],Aoe=["aria-expanded","title"],Toe={class:"bb-toolbar-actor-title"},Roe={"data-field":"name",class:"bb-toolbar-actor-field"},Doe={"data-field":"species",class:"bb-toolbar-actor-field"},Ooe=["value"],Noe={"data-field":"bodyType",class:"bb-toolbar-actor-field"},Loe={class:"bb-toolbar-seg",role:"group"},Koe=["data-body","aria-pressed","onClick"],Foe=["disabled"],Hoe={class:"bb-toolbar-popover-anchor"},zoe=["title","aria-label"],joe={class:"bb-toolbar-label sr-only"},Uoe=["aria-pressed","title"],Goe=["aria-pressed","title"],Voe=["aria-expanded","title"],Woe=["aria-expanded","title","aria-label"],Xoe={class:"bb-toolbar-label sr-only"},Yoe={key:0,class:"bb-toolbar-view shadow-smd1"},qoe={class:"bb-toolbar-view-title"},Zoe=["data-option","checked","onChange"],Joe={class:"bb-toolbar-view-option"},Qoe={class:"bb-toolbar-view-fov",role:"group","data-option":"fov"},eae=["data-fov","aria-pressed","onClick"],tae={class:"bb-toolbar-view-title"},nae={class:"bb-toolbar-view-option"},oae=["checked"],aae={class:"bb-toolbar-view-option"},sae=["checked"],iae={class:"bb-toolbar-popover-anchor"},rae=["title","aria-label"],lae={class:"bb-toolbar-label sr-only"},cae=["aria-expanded","aria-label"],dae={key:0,class:"bb-toolbar-more-menu shadow-smd1"},uae=["aria-pressed","title"],pae=["aria-pressed","title"],fae=["aria-expanded","title"],mae={class:"bb-toolbar-popover-anchor"},hae=["title","aria-label"],bae={class:"bb-toolbar-label sr-only"},gae=["aria-expanded","title","aria-label"],vae={class:"bb-toolbar-label sr-only"},yae={key:0,class:"bb-toolbar-view shadow-smd1"},kae={class:"bb-toolbar-view-title"},Sae=["data-option","checked","onChange"],Iae={class:"bb-toolbar-view-option"},wae={class:"bb-toolbar-view-fov",role:"group","data-option":"fov"},Mae=["data-fov","aria-pressed","onClick"],$ae={class:"bb-toolbar-view-title"},Eae={class:"bb-toolbar-view-option"},xae=["checked"],Pae={class:"bb-toolbar-view-option"},Cae=["checked"],Bae={class:"bb-toolbar-popover-anchor"},_ae=["title","aria-label"],Aae={class:"bb-toolbar-label sr-only"},Tae=["aria-pressed","title"],Rae={key:2,class:"bb-toolbar-mode-group",role:"group"},Dae=["aria-pressed","title","onClick"],ik=5,rk=4,Oae=nt({__name:"BbStageToolbar",props:{mode:{},hasBackground:{type:Boolean},options:{default:()=>({grid:!0,labels:!0,fov:"all",paths:!0,axis:!1,issues:!0,snap:!0})},pipOpen:{type:Boolean,default:!0},perfLight:{type:Boolean,default:!1},placeAt:{default:()=>({x:0,y:0})},room:{default:void 0}},emits:["command","add-camera","update:mode","update:options","update:pipOpe
246n","update:perfLight","photo-upload","photo-align","photo-select","room-settings","pick-opening","open-shortcuts"],setup(e,{emit:t}){const n={widthM:1/0,depthM:1/0},o=e,a=t,s=G(null);function i(){o.hasBackground?a("photo-align"):s.value?.click()}function r(ne){const W=ne.target,ve=W.files?.[0];ve&&a("photo-upload",ve),W.value=""}const l=["2d","3d","split"],c={"2d":"mode2d","3d":"mode3d",split:"modeSplit"},d=G(null),u=typeof mo=="function"?mo().locale:null,p=C(()=>u?.value??"ko"),f=G(null),h=G(null),b=G(null),I=G(null),y=G(null),w=G(null),M=G(!1);function x(){M.value=!M.value}function _(ne){switch(ne){case"space":return f.value;case"catalog":return h.value;case"actor":return b.value;case"view":return I.value;case"fov":return y.value;default:return null}}const O=G(""),A=G("all"),N=G(-1),K=Ta.slice(0,ik),F=Ta.slice(ik),B=G(!1),j=C(()=>F.some(ne=>ne.key===A.value)),ee=["all",...Ta.map(ne=>ne.key)],D=Object.fromEntries(Ta.map((ne,W)=>[ne.key,W]));function Z(ne,W){return ne.labels.ko.includes(W)||ne.labels.en.toLowerCase().includes(W)||ne.kind.toLowerCase().includes(W)||ne.aliases.some(ve=>ve.toLowerCase().includes(W))}function L(ne,W){const ve=D[ne.category]-D[W.category];return ve!==0?ve:Kn(ne.labels,p.value).localeCompare(Kn(W.labels,p.value))}const V=C(()=>O.value.trim().length>0),pe=C(()=>{const ne=O.value.trim().toLowerCase();return[...ne?aa.filter(ve=>Z(ve,ne)):A.value==="all"?aa:aa.filter(ve=>ve.category===A.value)].sort(L)});Je(pe,()=>{N.value=-1});function le(ne){return Ta.find(W=>W.key===ne).labels}function me(ne){const W=Math.max(ne.widthM,ne.depthM),ve=ne.widthM/W,we=ne.depthM/W;return{w:ve,d:we,path:Ph(Ua({kind:ne.kind,catalogKey:ne.key}),ve,we)}}const oe=C(()=>Object.keys(Ao)),fe=G(""),X=G("human"),re=G("male");function Se(ne){const W=d.value!==ne;d.value=W?ne:null,W&&ne==="catalog"&&(N.value=-1),B.value=!1}function Q(ne){A.value=ne,O.value="",N.value=-1,B.value=!1}function $e(ne){if(ne.key!=="ArrowLeft"&&ne.key!=="ArrowRight")return;ne.preventDefault();const W=ee.indexOf(A.value),ve=ne.key==="ArrowRight"?1:-1,we=ee[(W+ve+ee.length)%ee.length];we&&Q(we)}function Fe(ne){const W=pe.value.length;if(W!==0){if(N.value<0){N.value=0;return}N.value=Math.max(0,Math.min(W-1,N.value+ne))}}function Ze(ne){switch(ne.key){case"ArrowRight":ne.preventDefault(),Fe(1);break;case"ArrowLeft":ne.preventDefault(),Fe(-1);break;case"ArrowDown":ne.preventDefault(),Fe(rk);break;case"ArrowUp":ne.preventDefault(),Fe(-rk);break;case"Enter":{ne.preventDefault();const W=pe.value[N.value];W&&ye(W.key);break}}}function ue(ne){return Gw(ne,o.placeAt,o.room??n)}function ye(ne){const W=aa.find(ve=>ve.key===ne);W&&(a("command",ue({kind:"prop",catalogKey:W.key})),d.value=null,O.value="",N.value=-1)}function Ue(ne){d.value=null,a("pick-opening",ne)}function te(){d.value=null,a("room-settings")}function q(){a("add-camera",ue({kind:"camera"}))}function de(){const ne=fe.value.trim();ne&&(a("command",ue({kind:"actor",name:ne,species:X.value,bodyType:re.value})),fe.value="",d.value=null)}const Ce=["grid","labels","paths","axis","issues","snap"],Ye={grid:"tool.blockingBoard.stage.viewGrid",labels:"tool.blockingBoard.stage.viewLabels",paths:"tool.blockingBoard.stage.viewPaths",axis:"tool.blockingBoard.menu.view.axis",issues:"tool.blockingBoard.menu.view.issues",snap:"tool.blockingBoard.stage.viewSnap"};function tt(ne,W){a("update:options",{...o.options,[ne]:W,...ne==="fov"?{fovChosen:!0}:{}})}const ht=["all","selected","none"],Et={all:"fovAll",selected:"fovSelected",none:"fovNone"},It={all:"view.fovAll",selected:"view.fovSelected",none:"view.fovNone"},Xt=C(()=>o.options.fov??"all");function yt(ne){tt(ne,o.options[ne]===!1)}const Ie=C(()=>ht.map(ne=>({id:It[ne],labelKey:`tool.blockingBoard.stage.${Et[ne]}`,kind:"radio",checked:Xt.value===ne}))),Be=G(-1);function lt(ne){const W=ht.find(ve=>It[ve]===ne);d.value=null,W&&W!==Xt.value&&tt("fov",W)}function Ke(){M.value=!1,a("open-shortcuts")}function ct(ne){const W=_(d.value);W&&ne.target instanceof Node&&W.contains(ne.target)||(d.value=null),M.value&&!(w.value&&ne.target instanceof Node&&w.value.contains(ne.target))&&(M.value=!1)}Qo("toolbarPopover",()=>
246d.value!==null||M.value,ne=>{if(ne.id!=="overlay.close")return!1;d.value=null,M.value=!1});function xt(){document.addEventListener("pointerdown",ct,!0)}function jt(){document.removeEventListener("pointerdown",ct,!0)}Je([d,M],([ne,W],[ve,we])=>{const Re=ne!==null||W,ut=ve!==null||we;Re&&!ut?xt():!Re&&ut&&jt()});const Jt=G(null),Mn=G(0),At=C(()=>Mn.value>=2),Ae=[0,0,0];let Ve=null;function Xe(){const ne=Jt.value;if(!ne)return;const W=Mn.value;Ae[W]=ne.scrollWidth;let ve=W;W<2&&ne.clientWidth<Ae[W]?ve=W+1:W>0&&ne.clientWidth>=Ae[W-1]&&(ve=W-1),ve!==W&&(Mn.value=ve,hn(()=>Xe()))}return Jn(()=>{Xe(),typeof ResizeObserver<"u"&&Jt.value&&(Ve=new ResizeObserver(()=>Xe()),Ve.observe(Jt.value))}),u&&Je(u,()=>{Mn.value=0,hn(()=>Xe())}),wn(()=>{jt(),Ve?.disconnect()}),(ne,W)=>{const ve=vn;return v(),k("div",{ref_key:"toolbarRef",ref:Jt,class:qe(["bb-toolbar",{"bb-toolbar--overflow":g(Mn)>=1,"bb-toolbar--compact":g(At)}])},[m("div",{ref_key:"spaceAnchorRef",ref:f,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-space btn-md","aria-expanded":g(d)==="space",title:ne.$t("tool.blockingBoard.stage.space"),"aria-label":ne.$t("tool.blockingBoard.stage.space"),onClick:W[0]||(W[0]=we=>Se("space"))},[ce(ve,{name:"i-lucide-door-open",class:"bb-toolbar-icon"}),m("span",{class:qe(["bb-toolbar-label",{"sr-only":g(At)}])},S(ne.$t("tool.blockingBoard.stage.space")),3),ce(ve,{name:"i-lucide-chevron-down",class:"bb-toolbar-caret"})],8,uoe),g(d)==="space"?(v(),k("div",poe,[ce(doe,{locale:g(p),"room-size":e.room,onPickOpening:Ue,onPickProp:ye,onRoomSettings:te},null,8,["locale","room-size"])])):H("",!0)],512),m("div",{ref_key:"catalogAnchorRef",ref:h,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-add-prop btn-md","aria-expanded":g(d)==="catalog",title:ne.$t("tool.blockingBoard.stage.addProp"),onClick:W[1]||(W[1]=we=>Se("catalog"))},[ce(ve,{name:"i-lucide-armchair",class:"bb-toolbar-icon"}),m("span",{class:qe(["bb-toolbar-label",{"sr-only":g(At)}])},S(ne.$t("tool.blockingBoard.stage.addProp")),3),ce(ve,{name:"i-lucide-chevron-down",class:"bb-toolbar-caret"})],8,foe),g(d)==="catalog"?(v(),k("div",moe,[Zt(m("input",{"onUpdate:modelValue":W[2]||(W[2]=we=>js(O)?O.value=we:null),class:"bb-toolbar-catalog-search bb-toolbar-input",type:"text",placeholder:ne.$t("tool.blockingBoard.tree.search")},null,8,hoe),[[Nn,g(O)]]),m("div",{role:"tablist",class:"bb-toolbar-catalog-tabs",onKeydown:$e},[m("button",{type:"button",role:"tab",class:"bb-toolbar-catalog-tab","aria-selected":g(A)==="all",onClick:W[3]||(W[3]=we=>Q("all"))},S(ne.$t("tool.blockingBoard.catalog.all")),9,boe),(v(!0),k(ae,null,Me(g(K),we=>(v(),k("button",{key:we.key,type:"button",role:"tab",class:"bb-toolbar-catalog-tab","aria-selected":g(A)===we.key,onClick:Re=>Q(we.key)},S(g(Kn)(we.labels,g(p))),9,goe))),128)),m("div",voe,[m("button",{type:"button",class:qe(["bb-toolbar-catalog-tab bb-toolbar-catalog-more",{"is-on":g(j)}]),"aria-haspopup":"menu","aria-expanded":g(B),"aria-label":ne.$t("tool.blockingBoard.stage.more"),onClick:W[4]||(W[4]=we=>B.value=!g(B))},[g(j)?(v(),k(ae,{key:0},[We(S(g(Kn)(le(g(A)),g(p))),1)],64)):(v(),et(ve,{key:1,name:"i-lucide-ellipsis",class:"size-[14px]"}))],10,yoe),g(B)?(v(),k("div",koe,[(v(!0),k(ae,null,Me(g(F),we=>(v(),k("button",{key:we.key,type:"button",role:"menuitemradio","aria-checked":g(A)===we.key,"data-category":we.key,onClick:Re=>Q(we.key)},S(g(Kn)(we.labels,g(p))),9,Soe))),128))])):H("",!0)])],32),g(pe).length>0?(v(),k("ul",{key:0,role:"listbox",class:"bb-toolbar-catalog-list",tabindex:"0",onKeydown:Ze},[(v(!0),k(ae,null,Me(g(pe),(we,Re)=>(v(),k("li",{key:we.key,role:"option",class:qe(["bb-toolbar-catalog-item",{"is-active":Re===g(N)}]),"data-key":we.key,"aria-selected":Re===g(N),onClick:ut=>ye(we.key)},[(v(),k("svg",woe,[m("rect",{class:"bb-prop-glyph-body",x:-me(we).w/2,y:-me(we).d/2,width:me(we).w,height:me(we).d,stroke:"currentColor","stroke-width":"0.04","stroke-linejoin":"round"},null,8,Moe),me(we).path?(v(),k("path",{key:0,d:me(we).path,transform:"rotate(90)",fill:"none",stroke:"currentColor","stroke-width":"0.04","stroke-linejoin":"round"},null,8,$oe)):H("",!0)])),m("span",Eoe,S(g(Kn)(we.labels,g(p))),1),m("span",xoe,S(we.widthM)+"Ã"+S(we.depthM)+"m",1),g(V)?(v(),k("span",Poe,S(g(Kn)(le(we.category),g(p))),1)):H("",!0)],10,Ioe))),128))],32)):(v(),k("p",Coe,S(ne.$t("tool.blockingBoard.catalog.empty")),1)),m("p",Boe,S(ne.$t("tool.blockingBoard.addMenu.hint")),1)])):H("",!0)],512),m("button",{type:"button",class:"bb-toolbar-add-camera btn-md",title:ne.$t("tool.blockingBoard.stage.addCamera"),onClick:q},[ce(ve,{name:"i-lucide-video",class:"bb-toolbar-icon"}),m("span",{class:qe(["bb-toolbar-label",{"sr-only":g(At)}])},S(ne.$t("tool.blockingBoard.stage.addCamera")),3)],8,_oe),m("div",{ref_key:"actorAnchorRef",ref:b,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-add-actor btn-md","aria-expanded":g(d)==="actor",title:ne.$t("tool.blockingBoard.stage.addActor"),onClick:W[5]||(W[5]=we=>Se("actor"))},[ce(ve,{name:"i-lucide-user-plus",class:"bb-toolbar-icon"}),m("span",{class:qe(["bb-toolbar-label",{"sr-only":g(At)}])},S(ne.$t("tool.blockingBoard.stage.addActor")),3),ce(ve,{name:"i-lucide-chevron-down",class:"bb-toolbar-caret"}
246)],8,Aoe),g(d)==="actor"?(v(),k("form",{key:0,class:"bb-toolbar-actor-popover shadow-smd1",onSubmit:un(de,["prevent"])},[m("p",Toe,S(ne.$t("tool.blockingBoard.stage.addActor")),1),m("label",Roe,[m("span",null,S(ne.$t("tool.blockingBoard.inspector.name")),1),Zt(m("input",{"onUpdate:modelValue":W[6]||(W[6]=we=>js(fe)?fe.value=we:null),type:"text",class:"bb-toolbar-input"},null,512),[[Nn,g(fe)]])]),m("label",Doe,[m("span",null,S(ne.$t("tool.blockingBoard.inspector.species")),1),Zt(m("select",{"onUpdate:modelValue":W[7]||(W[7]=we=>js(X)?X.value=we:null),class:"bb-toolbar-input"},[(v(!0),k(ae,null,Me(g(oe),we=>(v(),k("option",{key:we,value:we},S(g(Kn)(g(Ao)[we].labels,g(p))),9,Ooe))),128))],512),[[ps,g(X)]])]),m("div",Noe,[m("span",null,S(ne.$t("tool.blockingBoard.inspector.bodyType")),1),m("div",Loe,[(v(!0),k(ae,null,Me(g(du),we=>(v(),k("button",{key:we,type:"button","data-body":we,"aria-pressed":g(re)===we,onClick:Re=>re.value=we},S(ne.$t(`tool.blockingBoard.bodyType.${we}`)),9,Koe))),128))])]),m("button",{type:"submit",class:"bb-toolbar-actor-submit btn-md bb-toolbar-btn--primary",disabled:!g(fe).trim()},[ce(ve,{name:"i-lucide-plus",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.addActorSubmit")),1)],8,Foe)],32)):H("",!0)],512),W[27]||(W[27]=m("span",{class:"bb-toolbar-divider"},null,-1)),m("input",{ref_key:"photoInputRef",ref:s,type:"file",accept:"image/jpeg,image/png",class:"bb-toolbar-background-photo-input",onChange:r},null,544),g(Mn)===0?(v(),k(ae,{key:0},[m("div",Hoe,[m("button",{type:"button",class:"bb-toolbar-background-photo btn-md",title:ne.$t("tool.blockingBoard.stage.backgroundPhotoHint"),"aria-label":ne.$t("tool.blockingBoard.stage.backgroundPhotoHint"),onClick:i,onContextmenu:W[8]||(W[8]=un(we=>a("photo-select"),["prevent"]))},[ce(ve,{name:"i-lucide-image",class:"bb-toolbar-icon"}),m("span",joe,S(ne.$t("tool.blockingBoard.stage.backgroundPhoto")),1)],40,zoe)]),W[25]||(W[25]=m("span",{class:"bb-toolbar-spacer"},null,-1)),m("button",{type:"button",class:qe(["bb-toolbar-quick-snap btn-md",{"bb-on":e.options.snap!==!1}]),"aria-pressed":e.options.snap!==!1,title:ne.$t("tool.blockingBoard.stage.viewSnap"),onClick:W[9]||(W[9]=we=>yt("snap"))},[ce(ve,{name:"i-lucide-magnet",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.viewSnap")),1)],10,Uoe),m("button",{type:"button",class:qe(["bb-toolbar-quick-paths btn-md",{"bb-on":e.options.paths!==!1}]),"aria-pressed":e.options.paths!==!1,title:ne.$t("tool.blockingBoard.stage.viewPaths"),onClick:W[10]||(W[10]=we=>yt("paths"))},[ce(ve,{name:"i-lucide-route",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.viewPaths")),1)],10,Goe),m("div",{ref_key:"fovAnchorRef",ref:y,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-quick-fov btn-md","aria-haspopup":"menu","aria-expanded":g(d)==="fov",title:ne.$t("tool.blockingBoard.stage.viewFov"),onClick:W[11]||(W[11]=we=>Se("fov"))},[ce(ve,{name:"i-lucide-triangle",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.fovMenu",{value:ne.$t(`tool.blockingBoard.stage.${Et[g(Xt)]}`)}))+" ",1),ce(ve,{name:"i-lucide-chevron-down",class:"bb-toolbar-caret"})],8,Voe),g(d)==="fov"?(v(),et(Sf,{key:0,class:"bb-toolbar-fov-menu",items:g(Ie),"active-index":g(Be),onPick:lt,onHover:W[12]||(W[12]=we=>Be.value=we)},null,8,["items","active-index"])):H("",!0)],512),m("div",{ref_key:"viewAnchorRef",ref:I,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-view-toggle btn-md","aria-expanded":g(d)==="view",title:ne.$t("tool.blockingBoard.stage.view"),"aria-label":ne.$t("tool.blockingBoard.stage.view"),onClick:W[13]||(W[13]=we
246=>Se("view"))},[ce(ve,{name:"i-lucide-eye",class:"bb-toolbar-icon"}),m("span",Xoe,S(ne.$t("tool.blockingBoard.stage.view")),1),ce(ve,{name:"i-lucide-chevron-down",class:"bb-toolbar-caret"})],8,Woe),g(d)==="view"?(v(),k("div",Yoe,[m("p",qoe,S(ne.$t("tool.blockingBoard.stage.view2d")),1),(v(),k(ae,null,Me(Ce,we=>m("label",{key:we,class:"bb-toolbar-view-option"},[m("span",null,S(ne.$t(Ye[we])),1),m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-option":we,checked:e.options[we]!==!1,onChange:Re=>tt(we,Re.target.checked)},null,40,Zoe)])),64)),m("div",Joe,[m("span",null,S(ne.$t("tool.blockingBoard.stage.viewFov")),1),m("div",Qoe,[(v(),k(ae,null,Me(ht,we=>m("button",{key:we,type:"button","data-fov":we,"aria-pressed":g(Xt)===we,onClick:Re=>tt("fov",we)},S(ne.$t(`tool.blockingBoard.stage.${Et[we]}`)),9,eae)),64))])]),m("p",tae,S(ne.$t("tool.blockingBoard.stage.view3d")),1),m("label",nae,[m("span",null,S(ne.$t("tool.blockingBoard.menu.view.pip")),1),m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-option":"pip",checked:e.pipOpen,onChange:W[14]||(W[14]=we=>a("update:pipOpen",we.target.checked))},null,40,oae)]),m("label",aae,[m("span",null,S(ne.$t("tool.blockingBoard.menu.view.perfLight")),1),m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-option":"perfLight",checked:e.perfLight,onChange:W[15]||(W[15]=we=>a("update:perfLight",we.target.checked))},null,40,sae)])])):H("",!0)],512),m("div",iae,[m("button",{type:"button",class:"bb-toolbar-shortcuts btn-md","aria-haspopup":"dialog",title:`${ne.$t("tool.blockingBoard.stage.shortcuts")} (?)`,"aria-label":`${ne.$t("tool.blockingBoard.stage.shortcuts")} (?)`,onClick:Ke},[ce(ve,{name:"i-lucide-keyboard",class:"bb-toolbar-icon"}),m("span",lae,S(ne.$t("tool.blockingBoard.stage.shortcuts")),1)],8,rae)])],64)):(v(),k(ae,{key:1},[W[26]||(W[26]=m("span",{class:"bb-toolbar-spacer"},null,-1)),m("div",{ref_key:"moreAnchorRef",ref:w,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-more btn-md","aria-expanded":g(M),"aria-haspopup":"menu","aria-label":ne.$t("tool.blockingBoard.stage.more"),onClick:x},[ce(ve,{name:"i-lucide-ellipsis",class:"bb-toolbar-icon"})],8,cae),g(M)?(v(),k("div",dae,[m("button",{type:"button",class:qe(["bb-toolbar-quick-snap btn-md",{"bb-on":e.options.snap!==!1}]),"aria-pressed":e.options.snap!==!1,title:ne.$t("tool.blockingBoard.stage.viewSnap"),onClick:W[16]||(W[16]=we=>yt("snap"))},[ce(ve,{name:"i-lucide-magnet",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.viewSnap")),1)],10,uae),m("button",{type:"button",class:qe(["bb-toolbar-quick-paths btn-md",{"bb-on":e.options.paths!==!1}]),"aria-pressed":e.options.paths!==!1,title:ne.$t("tool.blockingBoard.stage.viewPaths"),onClick:W[17]||(W[17]=we=>yt("paths"))},[ce(ve,{name:"i-lucide-route",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.viewPaths")),1)],10,pae),m("div",{ref_key:"fovAnchorRef",ref:y,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-quick-fov btn-md","aria-haspopup":"menu","aria-expanded":g(d)==="fov",title:ne.$t("tool.blockingBoard.stage.viewFov"),onClick:W[18]||(W[18]=we=>Se("fov"))},[ce(ve,{name:"i-lucide-triangle",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.fovMenu",{value:ne.$t(`tool.blockingBoard.stage.${Et[g(Xt)]}`)}))+" ",1),ce(ve,{name:"i-lucide-chevron-down",class:"bb-toolbar-caret"})],8,fae),g(d)==="fov"?(v(),et(Sf,{key:0,class:"bb-toolbar-fov-menu",items:g(Ie),"active-index":g(Be),onPick:lt,onHover:W[19]||(W[19]=we=>Be.value=we)},null,8,["items","active-index"])):H("",!0)],512),m("div",mae,[m("button",{type:"button",class:"bb-toolbar-background-photo btn-md",title:ne.$t("tool.blockingBoard.stage.backgroundPhotoHint"),"aria-label":ne.$t("tool.blockingBoard.stage.backgroundPhotoHint"),onClick:i,onContextmenu:W[20]||(W[20]=un(we=>a("photo-select"),["prevent"]))},[ce(ve,{name:"i-lucide-image",class:"bb-toolbar-icon"}),m("span",bae,S(ne.$t("tool.blockingBoard.stage.backgroundPhoto")),1)],40,hae)]),m("div",{ref_key:"viewAnchorRef",ref:I,class:"bb-toolbar-popover-anchor"},[m("button",{type:"button",class:"bb-toolbar-view-toggle btn-md","aria-expanded":g(d)==="view",title:ne.$t("tool.blockingBoard.stage.view"),"aria-label":ne.$t("tool.blockingBoard.stage.view"),onClick:W[21]||(W[21]=we=>Se("view"))},[ce(ve,{name:"i-lucide-eye",class:"bb-toolbar-icon"}),m("span",vae,S(ne.$t("tool.blockingBoard.stage.view")),1),ce(ve,{name:"i-lucide-chevron-down",class:"bb-toolbar-caret"})],8,gae),g(d)==="view"?(v(),k("div",yae,[m("p",kae,S(ne.$t("tool.blockingBoard.stage.view2d")),1),(v(),k(ae,null,Me(Ce,we=>m("label",{key:we,class:"bb-toolbar-view-option"},[m("span",null,S(ne.$t(Ye[we])),1),m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-option":we,checked:e.options[we]!==!1,onChange:Re=>tt(we,Re.target.checked)},null,40,Sae)])),64)),m("div",Iae,[m("span",null,S(ne.$t("tool.blockingBoard.stage.viewFov")),1),m("div",wae,[(v(),k(ae,null,Me(ht,we=>m("button",{key:we,type:"button","data-fov":we,"aria-pressed":g(Xt)===we,onClick:Re=>tt("fov",we)},S(ne.$t(`tool.blockingBoard.stage.${Et[we]}`)),9,Mae)),64))])]),m("p",$ae,S(ne.$t("tool.blockingBoard.stage.view3d")),1),m("label",Eae,[m("span",null,S(ne.$t("tool.blockingBoard.menu.view.pip")),1),m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-option":"pip",checked:e.pipOpen,onChange:W[22]||(W[22]=we=>
246a("update:pipOpen",we.target.checked))},null,40,xae)]),m("label",Pae,[m("span",null,S(ne.$t("tool.blockingBoard.menu.view.perfLight")),1),m("input",{type:"checkbox",class:"bb-switch",role:"switch","data-option":"perfLight",checked:e.perfLight,onChange:W[23]||(W[23]=we=>a("update:perfLight",we.target.checked))},null,40,Cae)])])):H("",!0)],512),m("div",Bae,[m("button",{type:"button",class:"bb-toolbar-shortcuts btn-md","aria-haspopup":"dialog",title:`${ne.$t("tool.blockingBoard.stage.shortcuts")} (?)`,"aria-label":`${ne.$t("tool.blockingBoard.stage.shortcuts")} (?)`,onClick:Ke},[ce(ve,{name:"i-lucide-keyboard",class:"bb-toolbar-icon"}),m("span",Aae,S(ne.$t("tool.blockingBoard.stage.shortcuts")),1)],8,_ae)])])):H("",!0)],512)],64)),m("button",{type:"button",class:qe(["bb-toolbar-detail btn-md",{"bb-on":e.options.detail===!0}]),"aria-pressed":e.options.detail===!0,title:ne.$t("tool.blockingBoard.stage.detailHint"),onClick:W[24]||(W[24]=we=>tt("detail",e.options.detail!==!0))},[ce(ve,{name:"i-lucide-list-tree",class:"bb-toolbar-icon"}),We(" "+S(ne.$t("tool.blockingBoard.stage.detail")),1)],10,Tae),e.mode?(v(),k("div",Rae,[(v(),k(ae,null,Me(l,we=>m("button",{key:we,type:"button",class:qe(`bb-toolbar-mode-${we} btn-md`),"aria-pressed":e.mode===we,title:ne.$t(`tool.blockingBoard.viewport.${c[we]}`),onClick:Re=>a("update:mode",we)},S(ne.$t(`tool.blockingBoard.viewport.${c[we]}`)),11,Dae)),64))])):H("",!0)],2)}}}),Nae=Object.assign(ot(Oae,[["__scopeId","data-v-6b949886"]]),{__name:"BbBoardBbStageToolbar"}),Lae={class:"bb-stage-panes"},Kae={key:0,class:"bb-stage-pane bb-stage-pane-2d","data-bb-area":"stage2d"},Fae={key:1,class:"bb-stage-pane bb-stage-pane-3d","data-bb-area":"stage3d"},Hae={key:0,class:"bb-3d-pip"},zae={key:0,class:"bb-stage-remove-confirm shadow-smd1"},jae=nt({inheritAttrs:!1,__name:"BbStage",props:{snapshot:{},partId:{},timeSec:{default:0},settled:{},frameState:{default:null},selection:{default:()=>({ids:[],primary:null})},mode:{},photoUrl:{default:null},options:{},pendingRemoval:{default:null},displayCamera:{default:null},followCut:{type:Boolean,default:!1},playing:{type:Boolean,default:!1},selectionBounds:{default:null},cameraStates:{default:()=>[]},selectedCamera:{default:null},viewportMode:{default:void 0},pipOpen:{type:Boolean,default:void 0},perfLight:{type:Boolean,default:void 0},hiddenIds:{default:()=>[]},lockedIds:{default:()=>[]},pick:{default:null}},emits:["command","add-camera","update:mode","update:options","apply-view","add-key","update:follow-cut","photo-upload","photo-align","photo-select","room-settings","removal-confirm","removal-cancel","update:viewportMode","update:pipOpen","update:perfLight","open-shortcuts","select","select-many","drag-commit","update:dragging","context-menu","actor-act","rotate-commit","pick","pick-cancel","segment-speed","drop-choice","pick-opening"],setup(e,{expose:t,emit:n}){const o={grid:!1,labels:!1,fov:"all",paths:!1,axis:!1,issues:!1,snap:!1},a=e,s=n,i=C(()=>a.snapshot.parts.find(ee=>ee.partId===a.partId)),r=C(()=>{const ee=a.selection.primary;return ee&&i.value?.cameras.some(D=>D.id===ee)?ee:null}),l=C(()=>a.displayCamera?.id??null);let c=!1,d=!1;Je(()=>a.mode,(ee,D)=>{D&&D!=="2d"&&ee==="2d"&&(d=!0)}),Je(r,ee=>{!ee||c||d||a.mode!=="2d"||(c=!0,s("update:mode","split"))});const u=G("camera"),p=C(()=>a.viewportMode??u.value),f=G(!1),h=C(()=>a.perfLight??f.value);function b(ee){f.value=ee,s("update:perfLight",ee)}const I=G(a.pipOpen===void 0?Lw():!0),y=C(()=>a.pipOpen??I.value),w=C(()=>y.value&&a.mode==="3d");function M(ee){a.pipOpen===void 0&&(I.value=ee,Kw(ee)),s("update:pipOpen",ee)}function x(ee){u.value=ee,s("update:viewportMode",ee)}const _=G(null),O=G(null);function A(ee){const D=O.value,Z=_.value;if(ee.id==="stage.cancelDrag"&&a.mode==="split")return(D?.runKeyAction?.(ee)??!1)||(Z?.runKeyAction?.(ee)??!1);const L=ee.id.startsWith("view3d.")||ee.id.startsWith("walk.");return(a.mode==="3d"||a.mode==="split"&&L?D:Z)?.runKeyAction?.(ee)??!1}function N(ee,D){D?s("drag-commit",ee,D):s("drag-commit",ee)}const K=G({x:0,y:0}),F=G(!1);let B=null;function j(){B&&clearTimeout(B),F.value=!0,B=setTimeout(()=>{F.value=!1,B=null},300)}return wn(()=>{B&&clearTimeout(B)}),t({focusOn:ee=>_.value?.focusOn(ee),runKeyAction:A,placementFor:ee=>_.value?.placementFor(ee)??null,runXfmAt:(ee,D)=>_.value?.runXfmAt(ee,D)??!1,shakeHud:j,currentViewPayload:()=>O.value?.currentViewPayload()??null,placementFor3d:ee=>O.value?.placementFor(ee)??null}),(ee,D)=>{const Z=zk;return v(),k("div",{class:qe(["bb-stage",`bb-stage--${e.mode}`])},[ce(Nae,{mode:e.mode,"has-background":!!e.snapshot.background&&!!e.photoUrl,options:e.options,"pip-open":y.value,"perf-light":h.value,"place-at":e.mode==="3d"?{x:0,y:0}:K.value,room:e.snapshot.room,onCommand:D[0]||(D[0]=L=>s("command",L)),onAddCamera:D[1]||(D[1]=L=>s("add-camera",L)),"onUpdate:mode":D[2]||(D[2]=L=>s("update:mode",L)),"onUpdate:options":D[3]||(D[3]=L=>
246s("update:options",L)),"onUpdate:pipOpen":M,"onUpdate:perfLight":b,onPhotoUpload:D[4]||(D[4]=L=>s("photo-upload",L)),onPhotoAlign:D[5]||(D[5]=L=>s("photo-align")),onPhotoSelect:D[6]||(D[6]=L=>s("photo-select")),onRoomSettings:D[7]||(D[7]=L=>s("room-settings")),onOpenShortcuts:D[8]||(D[8]=L=>s("open-shortcuts")),onPickOpening:D[9]||(D[9]=L=>s("pick-opening",L))},null,8,["mode","has-background","options","pip-open","perf-light","place-at","room"]),m("div",Lae,[e.mode!=="3d"?(v(),k("div",Kae,[ce(Ll,Mm({ref_key:"boardRef",ref:_},ee.$attrs,{snapshot:e.snapshot,"part-id":e.partId,"time-sec":e.timeSec,"frame-state":e.frameState,selection:e.selection,options:e.options,background:e.snapshot.background,"photo-url":e.photoUrl,"viewing-camera-id":l.value,"hidden-ids":e.hiddenIds,"locked-ids":e.lockedIds,pick:e.pick,"hide-pick-hud":!0,playing:e.playing,onSelect:D[10]||(D[10]=(L,V)=>s("select",L,V)),onSelectMany:D[11]||(D[11]=L=>s("select-many",L)),onDragCommit:N,"onUpdate:dragging":D[12]||(D[12]=L=>s("update:dragging",L)),"onUpdate:viewCenter":D[13]||(D[13]=L=>K.value=L),onPick:D[14]||(D[14]=L=>s("pick",L)),onPickCancel:D[15]||(D[15]=L=>s("pick-cancel")),onSegmentSpeed:D[16]||(D[16]=L=>s("segment-speed",L)),onDropChoice:D[17]||(D[17]=L=>s("drop-choice",L)),onContextMenu:D[18]||(D[18]=L=>s("context-menu",L)),onActorAct:D[19]||(D[19]=L=>s("actor-act",L))}),null,16,["snapshot","part-id","time-sec","frame-state","selection","options","background","photo-url","viewing-camera-id","hidden-ids","locked-ids","pick","playing"])])):H("",!0),e.mode!=="2d"?(v(),k("div",Fae,[ce(Z,null,{default:rn(()=>[ce(lm,{ref_key:"viewportRef",ref:O,snapshot:e.snapshot,"part-id":e.partId,"time-sec":e.timeSec,"frame-state":e.frameState,settled:e.settled,"active-camera-id":r.value,mode:p.value,"perf-light":h.value,"pip-open":w.value,"show-prop-labels":e.options?.labels!==!1,"display-camera":e.displayCamera,"follow-cut":e.followCut,playing:e.playing,"selection-bounds":e.selectionBounds,"selected-camera":e.selectedCamera,"selection-ids":e.selection.ids,"hidden-ids":e.hiddenIds,"locked-ids":e.lockedIds,"camera-states":e.cameraStates,pick:e.pick,"onUpdate:mode":x,onSelect:D[20]||(D[20]=(L,V)=>s("select",L,V)),onSelectMany:D[21]||(D[21]=L=>s("select-many",L)),onDragCommit:D[22]||(D[22]=L=>s("drag-commit",L)),onDropChoice:D[23]||(D[23]=L=>s("drop-choice",L)),"onUpdate:dragging":D[24]||(D[24]=L=>
246s("update:dragging",L)),onPick:D[25]||(D[25]=L=>s("pick",L)),onPickCancel:D[26]||(D[26]=L=>s("pick-cancel")),onContextMenu:D[27]||(D[27]=L=>s("context-menu",L)),onActorAct:D[28]||(D[28]=L=>s("actor-act",L)),onRotateCommit:D[29]||(D[29]=L=>s("rotate-commit",L)),"onUpdate:followCut":D[30]||(D[30]=L=>s("update:follow-cut",L)),onApplyView:D[31]||(D[31]=L=>s("apply-view",L)),onAddKey:D[32]||(D[32]=L=>s("add-key",L))},{"frame-corner":rn(()=>[w.value?(v(),k("div",Hae,[ce(Ll,{snapshot:e.snapshot,"part-id":e.partId,"time-sec":e.timeSec,"frame-state":e.frameState,options:o,"viewing-camera-id":l.value,"hidden-ids":e.hiddenIds,readonly:""},null,8,["snapshot","part-id","time-sec","frame-state","viewing-camera-id","hidden-ids"])])):H("",!0)]),_:1},8,["snapshot","part-id","time-sec","frame-state","settled","active-camera-id","mode","perf-light","pip-open","show-prop-labels","display-camera","follow-cut","playing","selection-bounds","selected-camera","selection-ids","hidden-ids","locked-ids","camera-states","pick"])]),_:1})])):H("",!0),e.pick?(v(),k("div",{key:2,class:qe(["bb-pick-hud",{"bb-pick-hud--shake":F.value}])},S(ee.$t(`tool.blockingBoard.board.pick.${e.pick.kind}`))+" · "+S(ee.$t("tool.blockingBoard.board.pick.now",{t:e.timeSec.toFixed(1)})),3)):H("",!0)]),e.pendingRemoval?(v(),k("div",zae,[m("span",null,S(ee.$t("tool.blockingBoard.stage.removeConfirm",{count:e.pendingRemoval.cascadeCount})),1),m("button",{type:"button",class:"bb-stage-remove-apply",onClick:D[33]||(D[33]=L=>s("removal-confirm"))},S(ee.$t("tool.blockingBoard.stage.removeConfirmApply")),1),m("button",{type:"button",class:"bb-stage-remove-cancel",onClick:D[34]||(D[34]=L=>s("removal-cancel"))},S(ee.$t("tool.blockingBoard.stage.removeConfirmCancel")),1)])):H("",!0)],2)}}}),Uae=Object.assign(ot(jae,[["__scopeId","data-v-49b7971e"]]),{__name:"BbBoardBbStage"}),Gae={class:"bb-area-header"},Vae={class:"bb-area-header-title"},Wae={key:1,class:"bb-area-header-sub"},Xae={class:"bb-area-header-actions"},Yae=nt({__name:"BbAreaHeader",props:{title:{},subtitle:{},dotColor:{}},setup(e){return(t,n)=>(v(),k("div",Gae,[e.dotColor?(v(),k("span",{key:0,class:"bb-area-header-dot",style:wt({background:e.dotColor})}
246,null,4)):H("",!0),m("span",Vae,S(e.title),1),e.subtitle?(v(),k("span",Wae,S(e.subtitle),1)):H("",!0),m("div",Xae,[cs(t.$slots,"default",{},void 0,!0)])]))}}),dd=Object.assign(ot(Yae,[["__scopeId","data-v-670a6000"]]),{__name:"BbShellBbAreaHeader"}),qae={class:"bb-shot-list"},Zae={class:"bb-shot-list-body"},Jae=["data-cut-id","onClick","onKeydown"],Qae={key:0,class:"bb-shot-thumb"},ese=["src"],tse={key:1,class:"bb-shot-thumb bb-shot-thumb--empty"},nse={class:"bb-shot-meta"},ose={class:"bb-shot-number"},ase={class:"bb-shot-desc"},sse={class:"bb-shot-duration"},ise=["value","aria-label","onChange"],rse=["value"],lse={key:0,class:"bb-shot-key"},cse=nt({__name:"BbShotList",props:{rows:{},cameraNames:{},activeCutId:{},thumbnails:{},partTitle:{}},emits:["seek","select","update:follow-cut","split-cut","set-camera"],setup(e,{emit:t}){const n=t;function o(s,i){const r=i.target.value;r!==s.cameraId&&n("set-camera",s.cutId,r)}function a(s){n("seek",s.inSec),n("select",s.cameraId,!1),n("update:follow-cut",!0)}return(s,i)=>(v(),k("div",qae,[ce(dd,{class:"bb-shot-list-header",title:s.$t("tool.blockingBoard.shotList.title"),subtitle:e.partTitle},null,8,["title","subtitle"]),m("div",Zae,[(v(!0),k(ae,null,Me(e.rows,r=>(v(),k("div",{key:r.cutId,class:"bb-shot-item"},[m("button",{type:"button",class:qe(["bb-shot",{"bb-shot--active":r.cutId===e.activeCutId}]),"data-cut-id":r.cutId,onClick:l=>a(r),onKeydown:fi(un(l=>a(r),["prevent"]),["enter"])},[e.thumbnails[r.cutId]?(v(),k("span",Qae,[m("img",{src:e.thumbnails[r.cutId],alt:""},null,8,ese)])):(v(),k("span",tse,S(e.cameraNames[r.cameraId]??""),1)),m("span",nse,[m("span",ose,S(r.number),1),m("span",ase,[We(S(e.cameraNames[r.cameraId]??""),1),r.shotType?(v(),k(ae,{key:0},[We(" · "+S(s.$t(g(Aw)(r.shotType))),1)],64)):H("",!0)]),m("span",sse,S(r.durationSec.toFixed(1))+"s",1)])],42,Jae),m("select",{class:"bb-shot-camera","data-shot-camera":"",value:r.cameraId,"aria-label":s.$t("tool.blockingBoard.shotList.camera"),onChange:l=>o(r,l)},[(v(!0),k(ae,null,Me(e.cameraNames,(l,c)=>(v(),k("option",{key:c,value:c},S(l),9,rse))),128))],40,ise)]))),128)),m("button",{type:"button",class:"bb-shot-split",onClick:i[0]||(i[0]=r=>n("split-cut"))},[m("span",null,S(s.$t(e.rows.length===0?"tool.blockingBoard.shotList.first":"tool.blockingBoard.shotList.split")),1),e.rows.length>0?(v(),k("kbd",lse,"S")):H("",!0)])])]))}}),dse=Object.assign(ot(cse,[["__scopeId","data-v-3e6f26dc"]]),{__name:"BbViewportBbShotList"}),use=["placeholder"],pse={class:"bb-add-menu-body"},fse={class:"bb-add-menu-cats",role:"tablist"},mse=["data-category","aria-selected","onClick"],hse={"data-field":"name"},bse={"data-field":"species"},gse=["value"],vse={"data-field":"bodyType",class:"bb-add-menu-field"},yse={class:"bb-add-menu-seg",role:"group"},kse=["data-body","aria-pressed","onClick"],Sse=["disabled"],Ise={key:1,class:"bb-add-menu-grid",role:"listbox"},wse=["data-key","aria-selected","onClick"],Mse={class:"bb-add-menu-item-label"},$se={key:0,class:"bb-add-menu-item-size"},Ese={class:"bb-add-menu-hint"},Zp=3,lk=400,ck=360,xse=nt({__name:"BbAddMenu",props:{anchor:{},locale:{},recent:{}},emits:["pick","close"],setup(e,{emit:t}){const n=e,o=t,a=G(""),s=G(n.recent.length>0?"recent":Ta[0].key),i=G(0),r=G(!1),l=G(""),c=G("human"),d=G("male"),u=Object.keys(Ao),p=C(()=>Xne),f=C(()=>Qne(a.value,s.value,n.recent,n.locale));Je(f,()=>{i.value=0});const h=C(()=>{const K=typeof window<"u"?window.innerWidth:lk,F=typeof window<"u"?window.innerHeight:ck;return{left:`${Math.max(8,Math.min(n.anchor.x+12,K-lk-8))}px`,top:`${Math.max(8,Math.min(n.anchor.y+12,F-ck-8))}px`}});function b(K){const F=Ta.find(B=>B.key===K);return F?Kn(F.labels,n.locale):""}function I(K,F){return K.kind==="prop"?Kn(K.label,n.locale):K.kind==="opening"&&K.preset?F(`tool.blockingBoard.stage.spacePanel.window.${K.preset}`):K.kind==="opening"&&K.openingKind!=="door"&&K.openingKind!=="window"?F(`tool.blockingBoard.openingKind.${K.openingKind.replace("-","")}`):F(`tool.blockingBoard.addMenu.${K.key}`)}function y(K){s.value=K,a.value="",r.value=!1}function w(K){const F=f.value.length;F!==0&&(i.value=Math.max(0,Math.min(F-1,i.value+K)))}function M(K){K&&(K.kind==="prop"?o("pick",{kind:"prop",catalogKey:K.catalogKey}):K.kind==="camera"?o("pick",{kind:"camera"}):K.kind==="opening"?o("pick",{kind:"opening",openingKind:K.openingKind,...K.preset?{preset
246:K.preset}:{}}):r.value=!0)}function x(){const K=l.value.trim();K&&o("pick",{kind:"actor",name:K,species:c.value,bodyType:d.value})}function _(K){if(!K.isComposing){if(K.key==="ArrowRight")w(1);else if(K.key==="ArrowLeft")w(-1);else if(K.key==="ArrowDown")w(Zp);else if(K.key==="ArrowUp")w(-Zp);else if(K.key==="Enter")M(f.value[i.value]);else if(K.key==="Escape")o("close");else return;K.preventDefault()}}Qo("addMenu",()=>!0,K=>{if(K.id==="overlay.close")o("close");else if(K.id==="overlay.move")w(K.arg.delta*Zp);else if(K.id==="overlay.confirm"){if(r.value)return!1;M(f.value[i.value])}});const O=G(null),A=G(null);function N(K){const F=K.target;F instanceof Node&&O.value?.contains(F)||o("close")}return Jn(()=>{document.addEventListener("pointerdown",N,!0),hn(()=>A.value?.focus())}),wn(()=>document.removeEventListener("pointerdown",N,!0)),(K,F)=>(v(),k("div",{ref_key:"root",ref:O,class:"bb-add-menu shadow-smd1",role:"dialog",style:wt(h.value)},[Zt(m("input",{ref_key:"searchRef",ref:A,"onUpdate:modelValue":F[0]||(F[0]=B=>a.value=B),class:"bb-add-menu-search",type:"search",placeholder:K.$t("tool.blockingBoard.addMenu.search"),onKeydown:_},null,40,use),[[Nn,a.value]]),m("div",pse,[m("div",fse,[(v(!0),k(ae,null,Me(p.value,B=>(v(),k("button",{key:B,type:"button",role:"tab",class:"bb-add-menu-cat","data-category":B,"aria-selected":!a.value&&s.value===B,onClick:j=>y(B)},S(B==="recent"||B==="actor"||B==="camera"||B==="opening"?K.$t(`tool.blockingBoard.addMenu.${B}`):b(B)),9,mse))),128))]),r.value?(v(),k("form",{key:0,class:"bb-add-menu-actor",onSubmit:un(x,["prevent"])},[m("label",hse,[We(S(K.$t("tool.blockingBoard.inspector.name"))+" ",1),Zt(m("input",{"onUpdate:modelValue":F[1]||(F[1]=B=>l.value=B),type:"text",class:"bb-add-menu-input"},null,512),[[Nn,l.value]])]),m("label",bse,[We(S(K.$t("tool.blockingBoard.inspector.species"))+" ",1),Zt(m("select",{"onUpdate:modelValue":F[2]||(F[2]=B=>c.value=B),class:"bb-add-menu-input"},[(v(!0),k(ae,null,Me(g(u),B=>(v(),k("option",{key:B,value:B},S(g(Kn)(g(Ao)[B].labels,e.locale)),9,gse))),128))],512),[[ps,c.value]])]),m("div",vse,[We(S(K.$t("tool.blockingBoard.inspector.bodyType"))+" ",1),m("div",yse,[(v(!0),k(ae,null,Me(g(du),B=>(v(),k("button",{key:B,type:"button","data-body":B,"aria-pressed":d.value===B,onClick:j=>d.value=B},S(K.$t(`tool.blockingBoard.bodyType.${B}`)),9,kse))),128))])]),m("button",{type:"submit",class:"bb-add-menu-place",disabled:!l.value.trim()},S(K.$t("tool.blockingBoard.addMenu.place")),9,Sse)],32)):(v(),k("ul",Ise,[(v(!0),k(ae,null,Me(f.value,(B,j)=>(v(),k("li",{key:B.key,role:"option",class:qe(["bb-add-menu-item",{"is-active":j===i.value}]),"data-key":B.key,"aria-selected":j===i.value,onClick:ee=>M(B)}
246,[m("span",Mse,S(I(B,K.$t)),1),B.kind==="prop"?(v(),k("span",$se,S(B.widthM)+"Ã"+S(B.depthM)+"m",1)):H("",!0)],10,wse))),128))]))]),m("p",Ese,S(K.$t("tool.blockingBoard.addMenu.hint")),1)],4))}}),Pse=Object.assign(ot(xse,[["__scopeId","data-v-171dec57"]]),{__name:"BbBoardBbAddMenu"}),Cse=nt({__name:"BbPlanPngHost",props:{snapshot:{},partId:{},timeSec:{},frameState:{},options:{},authoredSecOf:{type:Function}},emits:["ready","error"],setup(e,{emit:t}){const n=e,o=t,a={w:1920,h:1080},s=sd(is(n.snapshot.room,2),a),i=G(null);return Jn(async()=>{await hn(),await document.fonts?.ready;const r=i.value?.querySelector("svg.bb-board-svg");r?o("ready",r):o("error")}),(r,l)=>(v(),k("div",{ref_key:"hostEl",ref:i,class:"bb-plan-png-host","aria-hidden":"true"},[ce(Ll,{snapshot:e.snapshot,"part-id":e.partId,"time-sec":e.timeSec,"frame-state":e.frameState??null,options:e.options,"authored-sec-of":e.authoredSecOf,"label-scale":g(s),readonly:""},null,8,["snapshot","part-id","time-sec","frame-state","options","authored-sec-of","label-scale"])],512))}}),Bse=Object.assign(ot(Cse,[["__scopeId","data-v-bb05cc46"]]),{__name:"BbBoardBbPlanPngHost"}),_se=["data-choice","aria-selected","onPointerenter","onClick"],Ase=nt({__name:"BbDropChoiceMenu",props:{x:{},y:{},choices:{}},emits:["choose","close"],setup(e,{emit:t}){const n=e,o=t,a=G(0),s=G(n.x),i=G(n.y);function r(d){const u=n.choices.length-1;if(d.key==="ArrowDown")a.value=Math.min(a.value+1,u);else if(d.key==="ArrowUp")a.value=Math.max(a.value-1,0);else if(d.key==="Enter"){const p=n.choices[a.value];p&&o("choose",p)}else return;d.preventDefault(),d.stopPropagation()}const l=G(null);function c(d){const u=d.target;u instanceof Node&&l.value?.contains(u)||o("close")}return Jn(()=>{document.addEventListener("pointerdown",c,!0);const d=l.value;if(d){const u=d.getBoundingClientRect(),p=Ch(n.x,n.y,u.width,u.height,window.innerWidth,window.innerHeight);s.value=p.left,i.value=p.top}d?.focus()}),wn(()=>document.removeEventListener("pointerdown",c,!0)),(d,u)=>(v(),et(wm,{to:"body"},[m("div",{ref_key:"root",ref:l,class:"bb-drop-menu bb-ui",role:"menu",tabindex:"-1",style:wt({left:`${s.value}px`,top:`${i.value}px`}),onKeydown:r,onContextmenu:u[0]||(u[0]=un(()=>{},["prevent"]))},[(v(!0),k(ae,null,Me(e.choices,(p,f)=>(v(),k("button",{key:p,type:"button",role:"menuitem",class:"bb-drop-menu-item","data-choice":p,"aria-selected":f===a.value,onPointerenter:h=>a.value=f,onClick:h=>o("choose",p)},S(d.$t(`tool.blockingBoard.board.drop.${p}`)),41,_se))),128))],36)]))}}),Tse=Object.assign(ot(Ase,[["__scopeId","data-v-92141606"]]),{__name:"BbBoardBbDropChoiceMenu"}),Rse=["outliner","stage2d","stage3d","timeline","properties","none"],Dse=new Set(["text","number","search","email","url","tel","password"]);function Vw(e){if(!e)return!1;if(e.isContentEditable)return!0;const t=e.closest?.("[contenteditable]")?.getAttribute("contenteditable");if(t===""||t==="true"||t==="plaintext-only")return!0;const n=e.tagName.toLowerCase();if(n==="textarea"||n==="select")return!0;if(n!=="input")return!1;const o=(e.getAttribute("type")??"").toLowerCase();return o===""||Dse.has(o)}function dk(e){const t=e?.closest?.("[data-bb-area]")?.getAttribute("data-bb-area");return Rse.includes(t??"")?t:"none"}function Ose(e){return e.hovered?{area:e.hovered,source:"hover"}:e.lastPressed?{area:e.lastPressed,source:"pressed"}:{area:"none",source:"none"}}function Nse(e){return e?.closest?.('[role="treeitem"]')?"outlinerRow":null}function Lse(e){return{key:e.key,code:e.code,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,altKey:e.altKey,isComposing:e.isComposing,repeat:e.repeat,defaultPrevented:e.defaultPrevented}}const Kse=["walk.forward","walk.back","walk.left","walk.right","walk.run","walk.up","walk.down"];function Ww(e){return e.code==="KeyW"||e.key==="ArrowUp"?"walk.forward":e.code==="KeyS"||e.key==="ArrowDown"?"walk.back":e.code==="KeyA"||e.key==="ArrowLeft"?"walk.left":e.code==="KeyD"||e.key==="ArrowRight"?"walk.right":e.code==="ShiftLeft"||e.code==="ShiftRight"?"walk.run":e.code==="KeyE"?"walk.up":e.code==="KeyQ"?"walk.down":null}function Fse(e){const t=/^(?:Digit|Numpad)([0-9])$/.exec(e.code);return!t||e.code.startsWith("Digit")&&e.shiftKey?null:t[1]}const Hse=["stage2d","stage3d","outliner"],zse=new Set(["stage2d.nudge","t
246imeline.step","history.undo","history.redo","overlay.move","outliner.move","walk.forward","walk.back","walk.left","walk.right","walk.run","walk.up","walk.down","xfm.typeChar"]);function jse(e,t,n="down"){if(e.defaultPrevented||e.isComposing||e.key==="Process")return null;if(n==="up"){if(t.viewportMode!=="walk")return null;const a=Ww(e);return a?{id:a,arg:{down:!1}}:null}const o=Use(e,t);return o&&e.repeat&&!zse.has(o.id)?null:o}function Use(e,t){const n=e.metaKey||e.ctrlKey,o=e.altKey,a=e.shiftKey,s=e.key,i=e.code;if(n&&i==="KeyS"&&!a&&!o)return t.overlay==="startScreen"?null:{id:"save.now"};if(t.textEntry)return t.overlay&&s==="Escape"&&!n&&!o?{id:"overlay.close"}:null;if(t.overlay){if(t.overlay==="historyPanel"&&n&&!o){if(i==="KeyZ")return{id:a?"history.redo":"history.undo"};if(i==="KeyY"&&!a)return{id:"history.redo"};if(i==="KeyH"&&a)return{id:"history.openPanel"}}return n||o?null:s==="Escape"?{id:"overlay.close"}:s==="Enter"?{id:"overlay.confirm"}:s==="ArrowUp"?{id:"overlay.move",arg:{delta:-1}}:s==="ArrowDown"?{id:"overlay.move",arg:{delta:1}}:null}if(t.transform){if(n||o)return null;if(i==="KeyX")return{id:"xfm.axisX"};if(i==="KeyY")return{id:"xfm.axisY"};const l=Fse(e);return l?{id:"xfm.typeChar",arg:{char:l}}:i==="Period"||i==="NumpadDecimal"?{id:"xfm.typeChar",arg:{char:"."}}:i==="Minus"||i==="NumpadSubtract"?{id:"xfm.typeChar",arg:{char:"-"}}:s==="Backspace"?{id:"xfm.typeChar",arg:{char:"Backspace"}}:s==="Enter"?{id:"xfm.confirm"}:s==="Escape"?{id:"xfm.cancel"}:null}if(t.dragging)return n||o?null:s==="Escape"?{id:"stage.cancelDrag"}:s===" "?{id:"playback.toggle"}:null;if(t.viewportMode==="walk"&&t.area==="stage3d"&&!n&&!o){const l=Ww(e);if(l)return{id:l,arg:{down:!0}};if(s==="Escape")return{id:"walk.exit"}}if(t.focus==="outlinerRow"&&!o){if(!n){if(s==="ArrowUp")return{id:"outliner.move",arg:{to:"prev"}};if(s==="ArrowDown")return{id:"outliner.move",arg:{to:"next"}};if(s==="Home")return{id:"outliner.move",arg:{to:"first"}};if(s==="End")return{id:"outliner.move",arg:{to:"last"}};if(s==="ArrowLeft")return{id:"outliner.toggle",arg:{expand:!1}};if(s==="ArrowRight")return{id:"outliner.toggle",arg:{expand:!0}}}if(s==="Enter")return{id:"outliner.activate",arg:{additive:a||n}}}const r=Hse.includes(t.area);if(n||o){if(n&&!o){if(i==="KeyZ")return{id:a?"history.redo":"history.undo"};if(i==="KeyY"&&!a)return{id:"history.redo"};if(i==="KeyH"&&a)return{id:"history.openPanel"};if(i==="KeyD"&&!a)return r?{id:"selection.duplicate"}:null}return o&&!n&&!a&&i==="KeyH"&&r?{id:"visibility.showAll"}:null}if(s===" ")return{id:"playback.toggle"};if(s==="?")return{id:"help.open"};if(!a){if(i==="BracketLeft")return{id:"playback.prevCut"};if(i==="BracketRight")return{id:"playback.nextCut"};if(i==="KeyJ")return{id:"playback.shuttleBack"};if(i==="KeyK")return{id:"playback.stop"};if(i==="KeyL")return{id:"playback.shuttleForward"}}if(t.workspace==="camera"&&i==="KeyS"&&!a&&(t.area==="stage3d"||t.area==="none"))return{id:"shots.splitAtPlayhead"};if(r){if(!a&&(s==="Delete"||s==="Backspace"||i==="KeyX"))return{id:"selection.delete"};if(a&&i==="KeyD")return{id:"selection.duplicate"};if(!a&&i==="KeyH")return{id:"visibility.hideSelected"};if(a&&i==="KeyA")return{id:"add.openMenu",arg:{at:t.areaSource==="hover"&&t.area!=="outliner"?"cursor":"center"}};if(s==="Escape")return{id:"selection.clear"}}if(t.area==="stage2d"){if(a){if(i==="Digit0")return{id:"stage2d.zoomFitRoom"}}else{if(i==="KeyG")return{id:"xfm.move"};if(i==="KeyR")return{id:"xfm.rotate"};if(i==="KeyS")return{id:"xfm.scale"};if(i==="KeyF")return{id:"stage2d.frameSelected"};if(i==="KeyI")return{id:"camera.insertKey"};if(i==="Digit0"||i==="Numpad0")return{id:"stage2d.zoom100"}}const l=a?1:.1;return s==="ArrowLeft"?{id:"stage2d.nudge",arg:{dx:-l,dy:0}}:s==="ArrowRight"?{id:"stage2d.nudge",arg:{dx:l,dy:0}}:s==="ArrowUp"?{id:"stage2d.nudge",arg:{dx:0,dy:-l}}:s==="ArrowDown"?{id:"stage2d.nudge",arg:{dx:0,dy:l}}:null}return t.area==="stage3d"?a?null:i==="KeyF"?{id:"view3d.frameSelected"}:i==="KeyV"?{id:"view3d.cycleMode"}:i==="KeyI"?{id:"camera.insertKey"}:i==="Digit0"||i==="Numpad0"?{id:"view3d.camera"}:i==="Digit7"||i==="Numpad7"?{id:"view3d.top"}:i==="Digit1"||i==="Numpad1"?{id:"view3d.front"}:i==="Digit3"||i==="Numpad3"?{id:"view3d.side"}:null:t.area==="timeline"?s==="ArrowRight"?{id:"timeline.step",arg:a?{seconds:1}:{frames:1}}:s==="ArrowLeft"?{id:"timeline.step",arg:a?{seconds:-1}:{frames:-1}}:a?null:s==="Delete"||s==="Backspace"||i==="KeyX"?{id:"timeline.deleteSelection"}:s==="ArrowUp"?{id:"timeline.prevKey"}:s==="ArrowDown"?{id:"timeline.nextKey"}:s==="Home"?{id:"timeline.start"}:s==="End"?{id:"timeline.end"}:s==="Escape"?{id:"timeline.cancelDrag"}:i==="KeyF"?{id:"timeline.fit"}:i==="KeyS"?{id:"timeline.splitCut"}:i==="KeyB"?{id:"timeline.boxSelect"}:i==="KeyP"?{id:"timeline.setLoopFromSelection"}:null:t.area==="properties"&&!a&&i==="KeyI"?{id:"camera.insertKey"}:null}function Xw(e,t){const n=e.id;return n.startsWith("overlay.")?"overlay":n.startsWith("outliner.")?"outliner":n.startsWith("stage2d.")||n.startsWith("xfm.")||n==="add.openMenu"?"stage2d":n==="stage.cancelDrag"?t.area==="stage3d"?"stage3d":"stage2d":n.startsWith("view3d.")||n.startsWith("walk.")||n==="camera.insertKey"?"stage3d":n.startsWith("timeline.")?"timeline":"page"}function Gse(){return Kse.map(e=>({id:e,arg:{down:!1}}))}const ul=["stage2d","stage3d","outliner"];function tn(e,t,n,o,a){return{rowId:e,keys:t,areas:n,whenKey:null,labelKey:`tool.blockingBoard.keymap.row.${e}`,actions:o,owner:a}}const Vse=[tn("playToggle",["Space"],"anywhere",["playback.toggle"],"KEY"),tn("undoRedo",["Mod+Z","Shift+Mod+Z","Ctrl+Y"],"anywhere",["history.undo","history.redo"],"KEY"),tn("saveNow",["Mod+S"],"anywhere",["save.now"],"SAV"),tn("historyPanel",["Shift+Mod+H"],"anywhere",["history.openPanel"],"SHL"),tn("addMenu",["Shift+A"],ul,["add.openMenu"],"XFM"),tn("deleteSelection",["Delete","Backspace","X"],ul,["selection.delete"],"KEY"),tn("timelineDelete",["Delete","Backspace","X"],["timeline"],["t
246imeline.deleteSelection"],"TL"),tn("duplicate",["Shift+D","Mod+D"],ul,["selection.duplicate"],"KEY"),tn("hideShow",["H","Alt+H"],ul,["visibility.hideSelected","visibility.showAll"],"OUT"),tn("transformModes",["G","R","S"],["stage2d"],["xfm.move","xfm.rotate","xfm.scale"],"XFM"),tn("axisLock",["X","Y"],["stage2d"],["xfm.axisX","xfm.axisY"],"XFM"),tn("typeValue",["0-9",".","-","Backspace"],["stage2d"],["xfm.typeChar"],"XFM"),tn("transformConfirm",["Enter","Escape"],["stage2d","stage3d"],["xfm.confirm","xfm.cancel"],"XFM"),tn("nudge",["Arrows","Shift+Arrows"],["stage2d"],["stage2d.nudge"],"STG"),tn("frameSelected",["F"],["stage2d","stage3d"],["stage2d.frameSelected","view3d.frameSelected"],"XFM"),tn("timelineFit",["F"],["timeline"],["timeline.fit"],"TLX"),tn("zoom2d",["0","Shift+0"],["stage2d"],["stage2d.zoom100","stage2d.zoomFitRoom"],"STG"),tn("view3dCamera",["0"],["stage3d"],["view3d.camera"],"CAM"),tn("view3dAxes",["7","1","3"],["stage3d"],["view3d.top","view3d.front","view3d.side"],"CAM"),tn("cycleViewMode",["V"],["stage3d"],["view3d.cycleMode"],"CAM"),tn("walk",["W","A","S","D","Arrows","Shift","E","Q"],["stage3d"],["walk.forward","walk.back","walk.left","walk.right","walk.run","walk.up","walk.down"],"V3D"),tn("timelineStep",["ArrowLeft","ArrowRight","Shift+ArrowLeft","Shift+ArrowRight"],["timeline"],["timeline.step"],"TL"),tn("timelineKeys",["ArrowUp","ArrowDown"],["timeline"],["timeline.prevKey","timeline.nextKey"],"TLX"),tn("timelineStartEnd",["Home","End"],["timeline"],["timeline.start","timeline.end"],"TL"),tn("cutNav",["[","]"],"anywhere",["playback.prevCut","playback.nextCut"],"TLX"),tn("shuttle",["J","K","L"],"anywhere",["playback.shuttleBack","playback.stop","playback.shuttleForward"],"TLX"),tn("splitCut",["S"],["timeline"],["timeline.splitCut"],"TL"),tn("splitAtPlayhead",["S"],["stage3d"],["shots.splitAtPlayhead"],"CAM"),tn("boxSelect",["B"],["timeline"],["timeline.boxSelect"],"TIM"),tn("loopFromSelection",["P"],["timeline"],["timeline.setLoopFromSelection"],"TLX"),tn("insertCameraKey",["I"],["stage2d","stage3d","properties"],["camera.insertKey"],"CAM"),tn("contextMenu",["RightClick"],["stage2d","stage3d","outliner","timeline"],[],"OUT"),tn("help",["?"],"anywhere",["help.open"],"SHL")],Wse=[tn("walkExit",["Escape"],["stage3d"],["walk.exit"],"V3D"),tn("cancelDrag",["Escape"],["stage2d","stage3d","timeline"],["stage.cancelDrag","timeline.cancelDrag"],"STG"),tn("clearSelection",["Escape"],ul,["selection.clear"],"KEY"),tn("overlayKeys",["Enter","Escape","ArrowUp","ArrowDown"],"anywhere",["overlay.confirm","overlay.close","overlay.move"],"KEY"),tn("outlinerRow",["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","Enter"],["outliner"],["outliner.move","outliner.toggle","outliner.activate"],"OUT")],Xse={Mod:"â",Shift:"â§",Alt:"â¥",Ctrl:"â"},Yse={Mod:"Ctrl",Shift:"Shift",Alt:"Alt",Ctrl:"Ctrl"},qse={Escape:"Esc",ArrowLeft:"â",ArrowRight:"â",ArrowUp:"â",ArrowDown:"â",Arrows:"ââââ"};function Zse(e,t){const n=e.split("+"),o=n.pop()??"",a=t?Xse:Yse,s=n.map(r=>a[r]??r),i=qse[o]??o;return t?[...s,i].join(""):[...s,i].join("+")}function Yw(e){const t=typeof navigator<"u"?navigator:void 0;return/Mac|iPhone|iPad|iPod/i.test(t?.platform||t?.userAgent||"")}const Jse={class:"bb-history-title"},Qse={class:"bb-history-shortcut"},eie={class:"bb-history-list"},tie={class:"bb-history-label"},nie={key:0,class:"bb-history-now"},oie=["data-step","onClick"],aie={class:"bb-history-label"},sie={key:0,class:"bb-history-now"},iie={class:"bb-history-hint"},rie=nt({__name:"BbHistoryPanel",props:{entries:{},index:{},truncated:{type:Boolean}},emits:["jump","close"],setup(e,{emit:t}){const n=e,o=t,a=ml("â§{mod}H",Yw());function s(c,d){const u=c.name?"text"in c.name?c.name.text:c.name.params?d(c.name.key,c.name.params):d(c.name.key):void 0,p=u!==void 0?{...c.params,name:u}:c.params;return p?d(c.key,p):d(c.key)}function i(c){return{"bb-history-row--current":c===n.index,"bb-history-row--undone":c>n.index}}Qo("historyPanel",()=>!0,c=>{if(c.id!=="overlay.close")return!1;o("close")});const r=G(null);function l(c){const d=c.target;d instanceof Element&&(r.value?.contains(d)||d.closest(".bb-topbar-history")||o("close"))}return Jn(()=>{document.addEventListener("pointerdown",l,!0),hn(()=>r.value?.querySelector(".bb-history-row--current")?.scrollIntoView?.({block:"nearest"}))}),wn(()=>document.removeEventListener("pointerdown",l,!0)),(c,d)=>(v(),k("div",{ref_key:"root",ref:r,class:"bb-history shadow-smd1",role:"dialog"},[m("div",Jse,[m("span",null,S(c.$t("tool.blockingBoard.history.title")),1),m("kbd",Qse,S(g(a)),1)]),m("div",eie,[m("button",{type:"button",class:qe(["bb-history-row",i(0)]),"data-step":"0",onClick:d[0]||(d[0]=u=>o("jump",0))},[m("span",tie,S(c.$t(e.truncated?"tool.blockingBoard.history.truncated":"tool.blockingBoard.history.opened")),1),e.index===0?(v(),k("span",nie,S(c.$t("tool.blockingBoard.history.now")),1)):H("",!0)],2),(v(!0),k(ae,null,Me(e.entries,(u,p)=>(v(),k("button",{key:p,type:"button",class:qe(["bb-history-row",i(p+1)]),"data-step":p+1,onClick:f=>o("jump",p+1)},[m("span",aie,S(s(u.label,c.$t)),1),e.index===p+1?(v(),k("span",sie,S(c.$t("tool.blockingBoard.history.now")),1)):H("",!0)],10,oie))),128))]),m("p",iie,S(c.$t("tool.blockingBoard.history.hint")),1)],512))}}
246),lie=Object.assign(ot(rie,[["__scopeId","data-v-5a96087b"]]),{__name:"BbShellBbHistoryPanel"}),cie={class:"bb-shortcuts shadow-smd1",role:"dialog","aria-modal":"true","aria-labelledby":"bb-shortcuts-title"},die={class:"bb-shortcuts-head"},uie={id:"bb-shortcuts-title",class:"bb-shortcuts-title"},pie={class:"bb-shortcuts-search"},fie=["placeholder","aria-label"],mie=["aria-label"],hie={class:"bb-shortcuts-grid"},bie=["data-area"],gie={class:"bb-shortcuts-col-title"},vie={class:"bb-shortcuts-col-body",role:"table"},yie=["data-row-id","data-table","title"],kie={class:"bb-shortcuts-keys"},Sie={class:"bb-shortcuts-desc"},Iie={key:0,class:"bb-shortcuts-also"},wie={class:"bb-shortcuts-section"},Mie={class:"bb-shortcuts-mouse"},$ie=nt({__name:"BbShortcutSheet",props:{open:{type:Boolean},isMac:{type:Boolean}},emits:["close"],setup(e,{emit:t}){const n=e,o=t,a=["tool.blockingBoard.shortcuts.middlePan","tool.blockingBoard.shortcuts.altWheel","tool.blockingBoard.shortcuts.toggleSelect","tool.blockingBoard.shortcuts.shiftSnap","tool.blockingBoard.shortcuts.orbitDrag","tool.blockingBoard.shortcuts.panDrag","tool.blockingBoard.shortcuts.wheelZoom","tool.blockingBoard.shortcuts.dblclickPivot"],s={RightClick:"tool.blockingBoard.status.key.rightClick"};function i(I,y){return s[I]?y(s[I]):Zse(I,n.isMac)}const r=["anywhere","stage2d","stage3d","timeline"];function l(I){return I.areas==="anywhere"?"anywhere":I.areas.find(y=>r.includes(y))??"stage2d"}function c(I){if(I.areas==="anywhere")return[];const y=l(I);return I.areas.filter(w=>w!==y)}const d=G("");function u(I,y){const w=d.value.trim().toLowerCase();return w?[y(I.labelKey),...I.keys.map(x=>i(x,y))].join(" ").toLowerCase().includes(w):!0}const p=[...Vse.map(I=>({row:I,table:"main"})),...Wse.map(I=>({row:I,table:"extra"}))];function f(I,y){return p.filter(({row:w})=>l(w)===I&&u(w,y))}const h=C(()=>d.value.trim()==="");Qo("shortcutSheet",()=>n.open,I=>{if(I.id!=="overlay.close")return!1;o("close")});const b=G(null);return Je(()=>n.open,async I=>{I&&(await hn(),b.value?.focus())},{immediate:!0}),(I,y)=>{const w=vn;return e.open?(v(),k("div",{key:0,class:"bb-shortcuts-backdrop",onClick:y[2]||(y[2]=un(M=>o("close"),["self"]))},[m("div",cie,[m("div",die,[m("h2",uie,S(I.$t("tool.blockingBoard.shortcuts.title")),1),m("label",pie,[ce(w,{name:"i-lucide-search",class:"size-[14px]"}),Zt(m("input",{"onUpdate:modelValue":y[0]||(y[0]=M=>d.value=M),type:"search",placeholder:I.$t("tool.blockingBoard.tree.search"),"aria-label":I.$t("tool.blockingBoard.tree.search")},null,8,fie),[[Nn,d.value]])]),m("button",{ref_key:"closeButton",ref:b,type:"button",class:"bb-shortcuts-close","aria-label":I.$t("tool.blockingBoard.close"),onClick:y[1]||(y[1]=M=>o("close"))},[ce(w,{name:"i-lucide-x",class:"size-[14px]"})],8,mie)]),m("div",hie,[(v(),k(ae,null,Me(r,M=>m("section",{key:M,class:"bb-shortcuts-col","data-area":M},[m("h3",gie,S(I.$t(`tool.blockingBoard.keymap.area.${M}`)),1),m("div",vie,[(v(!0),k(ae,null,Me(f(M,I.$t),({row:x,table:_})=>(v(),k("div",{key:x.rowId,class:qe(["bb-shortcuts-row",{"bb-shortcuts-row--extra":_==="extra"}]),"data-row-id":x.rowId,"data-table":_,role:"row",title:_==="extra"?I.$t("tool.blockingBoard.shortcuts.table.extra"):void 0},[m("span",kie,[(v(!0),k(ae,null,Me(x.keys,O=>(v(),k("kbd",{key:O},S(i(O,I.$t)),1))),128))]),m("span",Sie,[We(S(I.$t(x.labelKey))+" ",1),c(x).length>0?(v(),k("small",Iie,S(c(x).map(O=>I.$t(`tool.blockingBoard.keymap.area.${O}`)).join(" · ")),1)):H("",!0)])],10,yie))),128)),M==="stage3d"&&h.value?(v(),k(ae,{key:0},[m("p",wie,S(I.$t("tool.blockingBoard.shortcuts.mouse")),1),m("div",Mie,[(v(),k(ae,null,Me(a,x=>m("div",{key:x,class:"bb-shortcuts-mouse-row"},S(I.$t(x)),1)),64))])],64)):H("",!0)])],8,bie)),64))])])])):H("",!0)}}}),Eie=Object.assign(ot($ie,[["__scopeId","data-v-e0f72714"]]),{__name:"BbShellBbShortcutSheet"}),Hh="unspecified";[...Ti.map(e=>e.kind)];const xie=["auto","photo","plan","concept"];function Pie(e){const t=e.kind===Hh?"room":e.kind;return{kind:t,labels:nS(t)??{ko:t,en:t},widthM:e.widthM,depthM:e.depthM,walls:{...e.walls},defaultProps:e.props.map(n=>{const o={kind:n.catalogKey,x:n.centerX,y:n.centerY,headingDeg:n.headingDeg},a=n.label?.trim();return a&&(o.label=a),o}),defaultOpenings:e.openings.map(n=>({kind:n.kind,wall:n.wall,offsetM:n.offsetM,widthM:n.widthM}))}}function Cie(e,t,n){const o=Tt(e.catalogKey);return{id:t("prop"),kind:o.kind,catalogKey:o.key,name:e.label?.trim()||o.labels[n],center:{x:e.centerX,y:e.centerY},widthM:o.widthM,depthM:o.depthM,heightM:o.heightM,headingDeg:e.headingDeg}}function Bie(e){const t=[];return e.map(n=>{const o=ar(n.name,t);return t.push(o),{...n,name:o}})}function _ie(e,t){return{id:t("opening"),kind:e.kind,wall:e.wall,offsetM:e.offsetM,widthM:e.widthM,heightM:Jo[e.kind]?.heightM??2.05}}function Aie(e,t){const n=xu({projectId:"pending-import",name:t.name,roomKind:e.kind===Hh?"room":e.kind,widthM:e.widthM,depthM:e.depthM,idFactory:t.idFactory}),o=Bie(e.props.map(r=>Cie(r,t.idFactory,t.lang))),a=e.openings.map(r=>_ie(r,t.idFactory)),s={...n.snapshot.room,walls:e.walls,openings:a,props:o},i={...n.snapshot,room:s};return Mr(i,n.issues,"snapshot")}const Vc=e=>e.trim().toLowerCase(),uk=e=>e==="human"?"person":"animal";function Tie(e,t,n){const o=[];let a=e;for(const s of t){const i=Vc(s.name),r=a.refs.characters.find(d=>!d.standalone&&[d.name,...d.aliases].some(u=>Vc(u)===i)),l=r?a.parts.flatMap(d=>d.actors.filter(u=>u.refId===r.id)):[],c=a.room.props.find(d=>Vc(d.name)===i)??a.parts.flatMap(d=>d.props).find(d=>Vc(d.name)===i);if(s.kind==="character"){const d=s.species??"human";r&&l.length>0?a=Rie(a,r.id,d,s.speciesName):c&&(a=Die(a,c,d,s.speciesName,n),o.push({name:c.name,from:"prop",to:uk(d)}))}else if(!c&&r&&l.length>0){const d=uk(l[0].species);a=Nie(a,r,l,s.name,n),o.push({name:s.name.trim(),from:d,to:"prop"})}}return{snapshot:a,notices:o}}function Rie(e,t,n,o){const a=e.refs.characters.map(s=>{if(s.id!==t)return s;const{speciesName:i,speciesNameEn:r,...l}=s;return n==="human"?l:o?{...l,speciesName:o,...s.speciesName===o&&s.speciesNameEn?{speciesNameEn:s.speciesNameEn}:{}}:s});return{...e,refs:{...e.refs,characters:a},parts:e.parts.map(s=>({...s,actors:s.actors.map(i=>i.refId===t?{...i,species:n}:i)}))}}function Die(e,t,n,o,a){const s=e.room.props.some(l=>l.id===t.id),i=Ci(e,ia(e,t.id)),r={id:a("ref"),tag:wi(i),name:t.name,aliases:[],...n!=="human"&&o?{speciesName:o}:{}};return{...i,refs:{...i.refs,characters:[...i.refs.characters,r]},parts:i.parts.map(l=>{if(!s&&!e.parts.find(d=>d.partId===l.partId)?.props.includes(t))return l;const c=Oie(a("actor"),r,n,t.center,l.actors.length);return{...l,actors:[...l.actors,c],castRefIds:[...l.castRefIds,r.id]}})}}function Oie(e,t,n,o,a){return{id:e,refId:t.id,name:t.name,aliases:[],color:Xm(a),species:n,bodyType:"other",movementMode:"walking",start:{position:{...o},headingDeg:0,pose:"stand"},path:{waypoints:[]},positionKeys:[],facingKeys:[],poseKeys:[]}}function Nie(e,t,n,o,a){let s=e;for(const l of n){const c=ia(s,l.id);s=Ci(s,{...c,cascade:c.cascade.filter(d=>d.kind!=="coverage"&&d.kind!=="cut")})}const i=Tt(o.trim()),r={id:a("prop"),kind:i?.key??"box",name:o.trim(),center:{...n[0].start.position},widthM:i?.widthM??.6,depthM:i?.depthM??.6,headingDeg:0,heightM:i?.heightM??.75,...i?.key?{catalogKey:i.key}:{}};return{...s,room:{...s.room,props:[...s.room.props,r]},refs:{...s.refs,characters:s.refs.characters.filter(l=>l.id!==t.id)},parts:s.parts.map(l=>({...l,castRefIds:l.castRefIds.filter(c=>c!==t.id)}))}}const Jp="pending-import";function Lie(e,t){const{layout:n,draft:o,name:a}=e,{idFactory:s,lang:i}=t;if(n&&o)return _l(o,{projectId:Jp,name:a,idFactory:s,roomPreset:Pie(n)});if(n)return Aie(n,{name:a,idFactory:s,lang:i});if(o)return _l(o,{projectId:Jp,name:a,idFactory:s});
246const r=xu({projectId:Jp,name:a,roomKind:"room",widthM:6,depthM:5,furnish:!1,idFactory:s});return Mr(r.snapshot,r.issues,"snapshot")}const Wc=e=>e.trim().toLowerCase();function Kie(e,t,n){const o=Wc(t.name),a=(t.description??"").trim().slice(0,ur),s=c=>({...c,media:t.media,...a?{description:a}:{}});if(t.kind==="character"){const c=e.refs.characters.find(d=>!d.standalone&&[d.name,...d.aliases].some(u=>Wc(u)===o));if(c){const d=e.refs.characters.map(u=>u.id===c.id?s(u):u);return{...e,refs:{...e.refs,characters:d}}}}else{const c=e.room.props.find(p=>Wc(p.name)===o),d=c?void 0:e.parts.flatMap(p=>p.props).find(p=>Wc(p.name)===o),u=c??d;if(u){const p=u.refId?e.refs.props.find(b=>b.id===u.refId):void 0;if(p){const b=e.refs.props.map(I=>I.id===p.id?s(I):I);return{...e,refs:{...e.refs,props:b}}}const f=s({id:n("ref"),tag:wi(e),name:u.name,aliases:[]}),h=b=>b.id===u.id?{...b,refId:f.id}:b;return{...e,refs:{...e.refs,props:[...e.refs.props,f]},room:{...e.room,props:e.room.props.map(h)},parts:e.parts.map(b=>({...b,props:b.props.map(h)}))}}}const i=vh(t.name);if(i===null)return e;const r=t.kind==="character"?"characters":"props",l={id:n("ref"),tag:wi(e),name:i,aliases:[],media:t.media,...a?{description:a}:{},standalone:!0,...t.kind==="character"&&t.species&&t.species!=="human"?{species:t.species,...t.speciesName?{speciesName:t.speciesName}:{}}:{}};return{...e,refs:{...e.refs,[r]:[...e.refs[r],l]}}}function Fie(e,t){if(e.background&&!e.layout)throw new Error("buildCreateResult: background requires layout");const n=Lie(e,t),o={...n.snapshot,sceneBackground:e.background,styleDirection:{ko:e.styleKo},targetVideoModel:e.targetVideoModel,refs:{...n.snapshot.refs,backgrounds:[]}},a=e.references??[],s=Tie(o,a,t.idFactory),i=a.reduce((r,l)=>Kie(r,l,t.idFactory),s.snapshot);return{...n,snapshot:i,...s.notices.length>0?{kindNotices:s.notices}:{}}}const Hie=1568,zie=3.5*1024*1024,jie=[{sideScale:1,quality:.85},{sideScale:1,quality:.7},{sideScale:.75,quality:.7}];function Uie(e,t){if(typeof OffscreenCanvas=="function")return new OffscreenCanvas(e,t);const n=document.createElement("canvas");return n.width=e,n.height=t,n}function Gie(e,t,n){const o=Uie(t,n),a=o.getContext("2d");if(!a)throw new TypeError("downscaleImage: 2d context is not available");return a.fillStyle="#ffffff",a.fillRect(0,0,t,n),a.drawImage(e,0,0,t,n),o}function Vie(e,t){return"convertToBlob"in e?e.convertToBlob({type:"image/jpeg",quality:t}):new Promise((n,o)=>{e.toBlob(a=>a?n(a):o(new TypeError("downscaleImage: toBlob failed")),"image/jpeg",t)})}function Wie(e){return new Promise((t,n)=>{const o=new FileReader;o.onerror=()=>n(o.error??new TypeError("downscaleImage: read failed")),o.onload=()=>{const a=String(o.result);t(a.slice(a.indexOf(",")+1))},o.readAsDataURL(e)})}async function Xie(e,t=Hie){const n=await createImageBitmap(e);try{let o=null;for(const a of jie){const s=t*a.sideScale,i=Math.min(1,s/Math.max(n.width,n.height)),r=Math.max(1,Math.round(n.width*i)),l=Math.max(1,Math.round(n.height*i)),c=await Vie(Gie(n,r,l),a.quality);if(o={mimeType:"image/jpeg",base64:await Wie(c),widthPx:r,heightPx:l},c.size<=zie)return o}return o}finally{n.close?.()}}const Qp={imageToRoom:"/api/v2/work/blocking-board/image-to-room",sceneFromImage:"/api/v2/work/blocking-board/scene-from-image",scriptToScene:"/api/v2/work/blocking-board/script-to-scene"},tu=["image/jpeg","image/png","image/webp"],nu=tu.join(","),fm=20*1024*1024,mm=20;function Yie(e){if(e.kind!=="animal")return{};if(e.species!==ud)return{species:e.species};const t=e.speciesName.trim();return t?{species:cx,speciesName:t}:null}const ud="other";function pk(){return{code:"PROVIDER_FAILED",messageKey:KS("PROVIDER_FAILED")}}function fk(e){return`${e}-${crypto.randomUUID().slice(0,8)}`}function qie(e){const t=e.fetch??((ye,Ue)=>$fetch(ye,Ue)),n=Sn(null),o=G({imageKind:"auto"}),a=G(null),s=G("script"),i=G(""),r=G(!1),l=G(""),c=G(LS),d=G(kd),u=G([]),p=()=>za(d.value)?.maxSec??null,f=G({...Tf,targetPartDurationSec:Math.min(Tf.targetPartDurationSec,p()??1/0)});Je(d,()=>{const ye=p();ye!==null&&f.value.targetPartDurationSec>ye&&(f.value={...f.value,targetPartDurationSec:ye})},{flush:"sync"});const h=lI({maxPartDurationSec:p}),b=C(()=>r.value?"brief":"script"),I=C({get:()=>s.value==="standard"?h.script.value:i.value,set:ye=>{s.value==="standard"?h.script.value=ye:i.value=ye}}),y=G("idle"),w=Sn(null),M=G(null),x=G(null),_=Sn(null),O=G(0),A=C(()=>y.value==="uploading"||y.value==="analyzing"||y.value==="creating"),N=C(()=>I.value.trim()!==""),K=C(()=>
246{if(!N.value)return!0;if(s.value==="standard"){const ye=h.analysis.value;return!!(ye?.isStandard&&ye.draft)}return $T(I.value,b.value)}),F=C(()=>!!n.value||s.value!=="standard"&&N.value),B=C(()=>!A.value&&K.value&&!u.value.some(ye=>ye.uploading)&&(!!n.value||N.value||l.value.trim()!==""));let j=0,ee=null,D="analyze",Z="";function L(){const ye=n.value?.thumbUrl;if(ye)try{URL.revokeObjectURL(ye)}catch{}}async function V(ye){if(A.value)return;if(!tu.includes(ye.type)){a.value="tool.blockingBoard.image.invalidType";return}if(ye.size>fm){a.value="tool.blockingBoard.image.tooLarge";return}a.value=null;let Ue;try{const q=await Xie(ye);Ue={mimeType:q.mimeType,base64:q.base64}}catch{a.value="tool.blockingBoard.image.invalidType";return}let te=null;try{te=URL.createObjectURL(ye)}catch{te=null}L(),n.value={file:ye,thumbUrl:te,image:Ue},_.value=null}function pe(){A.value||(L(),n.value=null,_.value=null,a.value=null)}function le(){u.value.length>=mm||u.value.push({id:fk("ref"),kind:"prop",species:m0[0],speciesName:"",name:"",description:"",media:null,uploading:!1})}function me(ye){u.value=u.value.filter(Ue=>Ue.id!==ye)}async function oe(ye,Ue){const te=u.value.find(Ce=>Ce.id===ye);if(!te||te.uploading)return;if(!tu.includes(Ue.type)){te.errorKey="tool.blockingBoard.image.invalidType";return}if(Ue.size>fm){te.errorKey="tool.blockingBoard.image.tooLarge";return}te.errorKey=null,te.uploading=!0;let q=null;try{q=await e.stageImgFile(Ue)}catch{q=null}const de=u.value.find(Ce=>Ce.id===ye);if(de){if(de.uploading=!1,!q?.url||!q.tempMdiaId){de.errorKey="tool.blockingBoard.create.references.uploadFailed";return}de.media={mdiaId:q.tempMdiaId,url:q.url,wdth:q.wdth??null,hegt:q.hegt??null}}}function fe(){return u.value.flatMap(ye=>{const Ue=ye.name.trim();if(!ye.media||!Ue)return[];const te=Yie(ye);if(te===null)return[];const q=ye.description.trim();return[{kind:ye.kind==="prop"?"prop":"character",...te,name:Ue,media:{...ye.media},...q?{description:q}:{}}]})}function X(){const ye=pT(fe());return ye.length>0?{references:ye}:{}}function re(ye,Ue){x.value=ye,D=Ue,y.value="failed"}function Se(){const ye=p();return ye===null?{...f.value}:{...f.value,maxPartDurationSec:ye}}async function Q(ye,Ue,te){try{return await t(ye,{method:"POST",body:Ue,signal:te})??{}}catch{return{failure:pk()}}}async function $e(){if(A.value||(s.value==="standard"&&N.value&&h.analyzeNow(),!B.value))return;const ye=++j,Ue=new AbortController;ee=Ue;const te=()=>ye!==j;x.value=null,w.value=null,M.value=null,O.value=Date.now();const q=n.value;if(q&&!_.value){y.value="uploading";let yt=null;try{yt=await e.stageImgFile(q.file)}catch{yt=null}if(te())return;if(!yt?.url||!yt.tempMdiaId){re({code:"UPLOAD_FAILED",messageKey:"tool.blockingBoard.create.uploadFailed"},"analyze");return}_.value={mdiaId:yt.tempMdiaId,url:yt.url,wdth:yt.wdth??null,hegt:yt.hegt??null}}const de=I.value,Ce=s.value!=="standard"&&N.value?b.value:null,Ye=s.value==="standard"&&N.value?h.analysis.value?.draft??null:null,tt=q?_.value:null;let ht=null,Et=Ye,It=[];if(tt||Ce){y.value="analyzing",O.value=Date.now();let yt;if(tt&&q&&Ce?yt=await Q(Qp.sceneFromImage,{image:q.image,backgroundMdiaId:tt.mdiaId,hints:o.value,text:de,sourceKind:Ce,options:Se(),model:c.value,...X()},Ue.signal):tt&&q?yt=await Q(Qp.imageToRoom,{image:q.image,hints:o.value,model:c.value,backgroundMdiaId:tt.mdiaId},Ue.signal):yt=await Q(Qp.scriptToScene,{script:de,sourceKind:Ce,options:Se(),model:c.value,...X()},Ue.signal),te())return;if(!(yt.failure?!1:tt?!!yt.layout:!!yt.draft)||tt&&Ce&&!yt.draft){re(yt.failure??pk(),"analyze");return}ht=yt.layout??null,Ce&&(Et=yt.draft??null),It=yt.issues??[],ht&&(M.value=It.some(Be=>Be.code==="IMAGE_NO_ROOM")?"noRoom":ht.confidence==="low"?"lowConfidence":null)}const Xt=Fie({layout:ht,draft:Et,background:tt,styleKo:l.value,targetVideoModel:d.value,name:"",references:fe()},{idFactory:fk,lang:e.lang?.()??"ko"});w.value=It.length?{...Xt,issues:[...Xt.issues,...It]}:Xt,y.value="preview"}async function Fe(ye){const Ue=w.value;if(!Ue||y.value!=="preview"&&y.value!=="failed")return null;Z=ye;const te={...Ue.snapshot,name:ye};w.value={...Ue,snapshot:te},x.value=null,y.value="creating";try{const q=await e.createProject(ye,te);return y.value="done",q}catch{return re({code:"CREATE_FAILED",messageKey:"tool.blockingBoard.import.createFailed"},"create"),null}}async function Ze(){return y.value!=="failed"?null:D==="create"&&w.value?Fe(Z):(await $e(),null)}function ue(){if(y.value==="uploading"||y.value==="analyzing"){j++,ee?.abort(),ee=null,y.value="idle";return}(y.value==="preview"||y.value==="failed")&&(w.value=null,M.value=null,x.value=null,y.value="idle")}return{layoutNotice:M,background:n,hints:o,inputErrorKey:a,pickBackgroun
246d:V,clearBackground:pe,sceneKind:s,fillGaps:r,sceneText:I,boardScript:h,options:f,styleKo:l,aiModel:c,targetVideoModel:d,references:u,addReference:le,removeReference:me,pickReferenceImage:oe,state:y,busy:A,usesAi:F,canStart:B,result:w,failure:x,uploaded:_,startedAt:O,start:$e,retry:Ze,cancel:ue,confirm:Fe}}const Zie=["viewBox"],Jie=["x","y","width","height"],Qie=["x1","y1","x2","y2"],ere=["x1","y1","x2","y2"],tre=["transform"],nre=["x","y","width","height","fill","stroke"],ore=["d","stroke"],mk=.4,are=nt({__name:"BbRoomPlanPreview",props:{room:{}},setup(e){const t=e,n=C(()=>{const i=t.room.widthM+mk*2,r=t.room.depthM+mk*2;return`${-i/2} ${-r/2} ${i} ${r}`}),o=C(()=>{const i=t.room.widthM/2,r=t.room.depthM/2;return[{side:"north",x1:-i,y1:-r,x2:i,y2:-r},{side:"east",x1:i,y1:-r,x2:i,y2:r},{side:"south",x1:-i,y1:r,x2:i,y2:r},{side:"west",x1:-i,y1:-r,x2:-i,y2:r}].filter(l=>t.room.walls[l.side])}),a=C(()=>{const i=t.room.widthM/2,r=t.room.depthM/2;return t.room.openings.map(l=>{const c=l.offsetM,d=l.offsetM+l.widthM;switch(l.wall){case"north":return{id:l.id,x1:-i+c,y1:-r,x2:-i+d,y2:-r};case"south":return{id:l.id,x1:-i+c,y1:r,x2:-i+d,y2:r};case"east":return{id:l.id,x1:i,y1:-r+c,x2:i,y2:-r+d};default:return{id:l.id,x1:-i,y1:-r+c,x2:-i,y2:-r+d}}})}),s=C(()=>t.room.props.map(i=>({id:i.id,transform:`translate(${i.center.x} ${i.center.y}) rotate(${i.headingDeg})`,x:-i.depthM/2,y:-i.widthM/2,width:i.depthM,height:i.widthM,fill:`color-mix(in srgb, ${Sl(i)} 45%, var(--bb-solid, #d6d1c6))`,stroke:`color-mix(in srgb, ${Sl(i)} 55%, black)`,glyph:Ph(Ua(i),i.widthM,i.depthM)})));return(i,r)=>(v(),k("svg",{class:"bb-image-plan",viewBox:g(n),preserveAspectRatio:"xMidYMid meet",role:"img"},[m("rect",{class:"bb-image-plan-floor",x:-e.room.widthM/2,y:-e.room.depthM/2,width:e.room.widthM,height:e.room.depthM},null,8,Jie),(v(!0),k(ae,null,Me(g(o),l=>(v(),k("line",{key:l.side,class:"bb-image-plan-wall",x1:l.x1,y1:l.y1,x2:l.x2,y2:l.y2},null,8,Qie))),128)),(v(!0),k(ae,null,Me(g(a),l=>(v(),k("line",{key:l.id,class:"bb-image-plan-opening",x1:l.x1,y1:l.y1,x2:l.x2,y2:l.y2},null,8,ere))),128)),(v(!0),k(ae,null,Me(g(s),l=>(v(),k("g",{key:l.id,transform:l.transform},[m("rect",{class:"bb-image-plan-prop",x:l.x,y:l.y,width:l.width,height:l.height,fill:l.fill,stroke:l.stroke},null,8,nre),l.glyph?(v(),k("path",{key:0,class:"bb-image-plan-glyph",d:l.glyph,stroke:l.stroke},null,8,ore)):H("",!0)],8,tre))),128))],8,Zie))}}),sre=Object.assign(ot(are,[["__scopeId","data-v-39369382"]]),{__name:"BbRoomPlanPreview"}),ire={class:"bb-create-box"},rre={class:"bb-create-head"},lre={class:"bb-create-title"},cre=["disabled"],dre={class:"bb-create-field","data-create-field":"background"},ure={class:"bb-create-label"},pre={class:"bb-create-optional"},fre={key:0,class:"bb-create-bg"},mre=["src"],hre={class:"bb-create-bg-actions"},bre=["disabled"],gre=["disabled"],vre=["disabled"],yre=["accept","disabled"],kre={key:2,class:"bb-create-error"},Sre={key:3,class:"bb-create-hints"},Ire={class:"bb-create-sub"},wre=["value","disabled"],Mre={value:""},$re=["value"],Ere={class:"bb-create-sub"},xre=["value","disabled","placeholder"],Pre={class:"bb-create-sub"},Cre=["value","disabled","placeholder"],Bre={class:"bb-create-sub"},_re=["value","disabled"],Are=["value"],Tre={class:"bb-create-field","data-create-field":"scene"},Rre={class:"bb-create-label"},Dre={class:"bb-create-optional"},Ore={role:"radiogroup",class:"bb-create-modes"},Nre=["aria-checked","data-scene-mode","disabled","onClick"],Lre={key:0,class:"bb-create-standard"},Kre={key:1,class:"bb-create-ai"},Fre={class:"bb-create-ai-text"},Hre={class:"bb-create-fill"},zre=["disabled"],jre={class:"bb-create-count","data-create-help":"fillGaps"},Ure={class:"bb-create-field","data-create-field":"references"},Gre={class:"bb-create-label"},Vre={class:"bb-create-optional"},Wre={class:"bb-create-count","data-create-help":"references"},Xre={class:"bb-create-ref-pick"},Yre=["src"],qre={key:1,class:"bb-create-ref-empty"},Zre=["accept","disabled","onChange"],Jre={class:"bb-create-ref-fields"},Qre={class:"bb-create-ref-line"},ele=["onUpdate:modelValue","disabled","placeholder","aria-label"],tle=["onUpdate:modelValue","disabled","aria-label"],nle={value:"character"},ole={value:"animal"},ale={value:"prop"},sle=["disabled","onClick"],ile={key:0,class:"bb-create-ref-line"},rle=["onUpdate:modelValue","disabled","aria-label"],lle=["value"],cle=["value"],dle=["onUpdate:modelValue","maxlength","disabled","placeholder","aria-label"],ule=["onUpdate:modelValue","disabled","placeholder","aria-label"],ple={key:1,class:"bb-create-error"},fle={key:2,class:"bb-create-hint","data-create-ref-hint":""}
246,mle={class:"bb-create-ref-add"},hle=["disabled"],ble={class:"bb-create-count"},gle={class:"bb-create-field","data-create-field":"style"},vle={class:"bb-create-label"},yle={class:"bb-create-optional"},kle=["disabled","maxlength","placeholder"],Sle={class:"bb-create-count"},Ile={class:"bb-create-count","data-create-help":"style"},wle={class:"bb-create-models"},Mle={key:0,class:"bb-create-field","data-create-field":"aiModel"},$le={class:"bb-create-label"},Ele={class:"bb-create-field","data-create-field":"videoModel"},xle={class:"bb-create-label",for:"bb-create-video-model"},Ple=["disabled"],Cle=["value"],Ble={class:"bb-create-count","data-create-help":"videoModel"},_le={key:0,class:"bb-create-status","data-create-progress":"",role:"status"},Ale={key:1,class:"bb-create-status",role:"alert"},Tle={class:"bb-create-error"},Rle={class:"bb-create-label"},Dle={key:0,class:"bb-create-notice","data-create-notice":""},Ole={class:"bb-create-summary-body"},Nle={class:"bb-create-summary-list"},Lle={"data-summary":"partCount"},Kle={class:"bb-create-actions"},Fle=["disabled"],Hle=["disabled"],zle={class:"bb-create-foot"},jle={class:"bb-create-links"},Ule=["disabled"],Gle=["disabled"],Vle={key:0,class:"bb-create-hint"},Wle=["disabled"],_t="tool.blockingBoard.create.",Xle=!1,Yle=nt({__name:"BbCreateForm",props:{create:{}},emits:["blank","json","created","back"],setup(e,{emit:t}){const n=e,o=t,a=[{key:"script",labelKey:`${_t}sceneScript`},{key:"standard",labelKey:`${_t}sceneStandard`}],s=n.create,i=typeof mo=="function"?mo().locale:null,r=C(()=>Ti.map(B=>({kind:B.kind,label:Kn(B.labels,i?.value)}))),l=Om().map(B=>({value:B,label:Uk[B]??B})),c=C(()=>s.state.value!=="idle"&&s.state.value!=="failed"),d=C(()=>s.state.value==="uploading"?`${_t}uploading`:s.state.value==="analyzing"?`${_t}analyzing`:null),u=C(()=>za(s.targetVideoModel.value)?.maxSec),p=C(()=>s.result.value?Rd(s.result.value):null),f=C(()=>s.fillGaps.value?dn.briefMinChars:dn.scriptMinChars),h=C(()=>s.fillGaps.value?dn.briefMaxChars:dn.scriptMaxChars),b=G(null);Je(()=>s.state.value,async B=>{B==="preview"&&(await hn(),b.value?.scrollIntoView({block:"nearest",behavior:"smooth"}))});const I=G(null),y=G(!1);function w(B){const j=B.target,ee=j.files?.[0];j.value="",ee&&s.pickBackground(ee)}function M(B){if(y.value=!1,c.value)return;const j=B.dataTransfer?.files?.[0];j&&s.pickBackground(j)}function x(B){s.hints.value={...s.hints.value,...B}}function _(B,j){const ee=j.target.value.trim(),D=ee===""?void 0:Number(ee);x({[B]:Number.isFinite(D)?D:void 0})}function O(B){s.sceneKind.value="script",s.sceneText.value=B}function A(B,j){const ee=j.target,D=ee.files?.[0];ee.value="",D&&s.pickReferenceImage(B,D)}async function N(B){const ee=s.result.value?.snapshot?.scene.title?.trim()||B,D=await s.confirm(ee);D&&o("created",D)}async function K(){const B=await s.retry();B&&o("created",B)}const F=FS;return(B,j)=>{const ee=vn;return v(),et(Vk,{class:"bb-create"},{default:rn(()=>[m("div",ire,[m("div",rre,[m("h1",lre,S(B.$t(`${_t}title`)),1),m("button",{type:"button",class:"bb-create-link bb-create-back",disabled:g(s).busy.value,onClick:j[0]||(j[0]=D=>o("back"))},S(B.$t(`${_t}back`)),9,cre)]),m("section",dre,[m("h2",ure,[We(S(B.$t(`${_t}background`))+" ",1),m("span",pre,S(B.$t(`${_t}optional`)),1)]),g(s).background.value?(v(),k("div",fre,[g(s).background.value.thumbUrl?(v(),k("img",{key:0,class:"bb-create-thumb",src:g(s).background.value.thumbUrl,alt:""},null,8,mre)):H("",!0),m("div",hre,[m("button",{type:"button",class:"bb-create-secondary",disabled:c.value,onClick:j[1]||(j[1]=D=>I.value?.click())},S(B.$t("tool.blockingBoard.image.replace")),9,bre),m("button",{type:"button",class:"bb-create-secondary",disabled:c.value,onClick:j[2]||(j[2]=D=>g(s).clearBackground())},S(B.$t(`${_t}removeBackground`)),9,gre)])])):(v(),k("div",{key:1,class:qe(["bb-create-drop",{"bb-create-drop--over":y.value}]),onDragover:j[4]||(j[4]=un(D=>y.value=!c.value,["prevent"])),onDragleave:j[5]||(j[5]=D=>y.value=!1),onDrop:un(M,["prevent"])},[ce(ee,{name:"i-lucide-image",class:"size-[16px]"}),m("span",null,S(B.$t("tool.blockingBoard.image.dropZone")),1),m("button",{type:"button",class:"bb-create-secondary",disabled:c.value,onClick:j[3]||(j[3]=D=>I.value?.click())},S(B.$t("tool.blockingBoard.image.choose")),9,vre)],34)),m("input",{ref_key:"fileRef",ref:I,type:"file",accept:g(nu),class:"sr-only",disabled:c.value,onChange:w},null,40,yre),g(s).inputErrorKey.value?(v(),k("p",kre,S(B.$t(g(s).inputErrorKey.value)),1)):H("",!0),g(s).background.value?(v(),k("div",Sre,[m("label",Ire,[m("span",null,S(B.$t("tool.blockingBoard.image.hintKind")),1),m("select",{class:"bb-create-input",n
246ame:"bb-create-room-kind",value:g(s).hints.value.roomKind??"",disabled:c.value,onChange:j[6]||(j[6]=D=>x({roomKind:D.target.value||void 0}))},[m("option",Mre,S(B.$t("tool.blockingBoard.image.hintAuto")),1),(v(!0),k(ae,null,Me(r.value,D=>(v(),k("option",{key:D.kind,value:D.kind},S(D.label),9,$re))),128))],40,wre)]),m("label",Ere,[m("span",null,S(B.$t("tool.blockingBoard.import.roomWidth")),1),m("input",{class:"bb-create-input",type:"number",name:"bb-create-room-width",min:"1",max:"100",value:g(s).hints.value.widthM??"",disabled:c.value,placeholder:B.$t("tool.blockingBoard.image.hintSize"),onInput:j[7]||(j[7]=D=>_("widthM",D))},null,40,xre)]),m("label",Pre,[m("span",null,S(B.$t("tool.blockingBoard.import.roomDepth")),1),m("input",{class:"bb-create-input",type:"number",name:"bb-create-room-depth",min:"1",max:"100",value:g(s).hints.value.depthM??"",disabled:c.value,placeholder:B.$t("tool.blockingBoard.image.hintSize"),onInput:j[8]||(j[8]=D=>_("depthM",D))},null,40,Cre)]),m("label",Bre,[m("span",null,S(B.$t("tool.blockingBoard.image.imageKind")),1),m("select",{class:"bb-create-input",name:"bb-create-image-kind",value:g(s).hints.value.imageKind??"auto",disabled:c.value,onChange:j[9]||(j[9]=D=>x({imageKind:D.target.value}))},[(v(!0),k(ae,null,Me(g(xie),D=>(v(),k("option",{key:D,value:D},S(D==="auto"?B.$t("tool.blockingBoard.image.hintAuto"):B.$t(`tool.blockingBoard.image.kind.${D}`)),9,Are))),128))],40,_re)])])):H("",!0)]),m("section",Tre,[m("h2",Rre,[We(S(B.$t(`${_t}scene`))+" ",1),m("span",Dre,S(B.$t(`${_t}optional`)),1)]),m("div",Ore,[(v(),k(ae,null,Me(a,D=>m("button",{key:D.key,type:"button",role:"radio",class:qe({"bb-on":g(s).sceneKind.value===D.key}),"aria-checked":g(s).sceneKind.value===D.key,"data-scene-mode":D.key,disabled:c.value,onClick:Z=>g(s).sceneKind.value=D.key},S(B.$t(D.labelKey)),11,Nre)),64))]),g(s).sceneKind.value==="standard"?(v(),k("div",Lre,[ce(fI,{bs:g(s).boardScript,disabled:c.value,embedded:"",onSendToAi:O},null,8,["bs","disabled"])])):(v(),k("div",Kre,[m("div",Fre,[ce(mI,{script:g(s).sceneText.value,disabled:c.value,failure:null,"min-chars":f.value,"max-chars":h.value,"onUpdate:script":j[10]||(j[10]=D=>g(s).sceneText.value=D),onFillSample:j[11]||(j[11]=D=>g(s).sceneText.value=g(F))},null,8,["script","disabled","min-chars","max-chars"]),m("label",Hre,[Zt(m("input",{"onUpdate:modelValue":j[12]||(j[12]=D=>g(s).fillGaps.value=D),type:"checkbox",name:"bb-create-fill-gaps","data-create-fill-gaps":"",disabled:c.value},null,8,zre),[[jk,g(s).fillGaps.value]]),m("span",null,S(B.$t(`${_t}fillGaps`)),1)]),m("span",jre,S(B.$t(`${_t}fillGapsHelp`)),1)]),ce(bI,{class:"bb-create-options",embedded:"",options:g(s).options.value,model:g(s).aiModel.value,script:g(s).sceneText.value,disabled:c.value,"part-length-max":u.value,"onUpdate:options":j[13]||(j[13]=D=>g(s).options.value=D)},null,8,["options","model","script","disabled","part-length-max"])]))]),m("section",Ure,[m("h2",Gre,[We(S(B.$t(`${_t}references.title`))+" ",1),m("span",Vre,S(B.$t(`${_t}optional`)),1)]),m("span",Wre,S(B.$t(`${_t}references.help`)),1),(v(!0),k(ae,null,Me(g(s).references.value,D=>(v(),k("div",{key:D.id,class:"bb-create-ref","data-create-ref-row":""},[m("label",Xre,[D.media?(v(),k("img",{key:0,class:"bb-create-ref-thumb",src:D.media.url,alt:""},null,8,Yre)):(v(),k("span",qre,S(D.uploading?B.$t(`${_t}references.uploading`):B.$t(`${_t}references.pick`)),1)),m("input",{type:"file",class:"sr-only","data-create-ref-image":"",accept:g(nu),disabled:c.value||D.uploading,onChange:Z=>A(D.id,Z)},null,40,Zre)]),m("div",Jre,[m("div",Qre,[Zt(m("input",{"onUpdate:modelValue":Z=>D.name=Z,class:"bb-create-input bb-create-ref-name",type:"text","data-create-ref-name":"",maxlength:"60",disabled:c.value,placeholder:B.$t(`${_t}references.namePlaceholder`),"aria-label":B.$t(`${_t}references.name`)},null,8,ele),[[Nn,D.name]]),Zt(m("select",{"onUpdate:modelValue":Z=>D.kind=Z,class:"bb-create-input","data-create-ref-kind":"",disabled:c.value,"aria-label":B.$t(`${_t}references.kind`)},[m("option",nle,S(B.$t(`${_t}references.kindCharacter`)),1),m("option",ole,S(B.$t(`${_t}references.kindAnimal`)),1),m("option",ale,S(B.$t(`${_t}
246references.kindProp`)),1)],8,tle),[[ps,D.kind]]),m("button",{type:"button",class:"bb-create-secondary","data-create-ref-remove":"",disabled:c.value,onClick:Z=>g(s).removeReference(D.id)},S(B.$t(`${_t}references.remove`)),9,sle)]),D.kind==="animal"?(v(),k("div",ile,[Zt(m("select",{"onUpdate:modelValue":Z=>D.species=Z,class:"bb-create-input","data-create-ref-species":"",disabled:c.value,"aria-label":B.$t(`${_t}references.species`)},[(v(!0),k(ae,null,Me(g(m0),Z=>(v(),k("option",{key:Z,value:Z},S(g(Kn)(g(Ao)[Z].labels,g(i)?.value??"ko")),9,lle))),128)),m("option",{value:g(ud)},S(B.$t(`${_t}references.speciesOther`)),9,cle)],8,rle),[[ps,D.species]]),D.species===g(ud)?Zt((v(),k("input",{key:0,"onUpdate:modelValue":Z=>D.speciesName=Z,class:"bb-create-input bb-create-ref-name",type:"text","data-create-ref-species-name":"",maxlength:g(Il),disabled:c.value,placeholder:B.$t(`${_t}references.speciesNamePlaceholder`),"aria-label":B.$t(`${_t}references.species`)},null,8,dle)),[[Nn,D.speciesName]]):H("",!0)])):H("",!0),Zt(m("input",{"onUpdate:modelValue":Z=>D.description=Z,class:"bb-create-input",type:"text","data-create-ref-desc":"",maxlength:500,disabled:c.value,placeholder:B.$t(`${_t}references.descPlaceholder`),"aria-label":B.$t(`${_t}references.description`)},null,8,ule),[[Nn,D.description]]),D.errorKey?(v(),k("span",ple,S(B.$t(D.errorKey)),1)):!D.uploading&&(!D.media||!D.name.trim()||D.kind==="animal"&&D.species===g(ud)&&!D.speciesName.trim())?(v(),k("span",fle,S(B.$t(`${_t}references.incomplete`)),1)):H("",!0)])]))),128)),m("div",mle,[m("button",{type:"button",class:"bb-create-secondary","data-create-ref-add":"",disabled:c.value||g(s).references.value.length>=g(mm),onClick:j[14]||(j[14]=D=>g(s).addReference())},S(B.$t(`${_t}references.add`)),9,hle),m("span",ble,S(B.$t(`${_t}references.count`,{count:g(s).references.value.length,max:g(mm)})),1)])]),m("section",gle,[m("h2",vle,[We(S(B.$t(`${_t}style`))+" ",1),m("span",yle,S(B.$t(`${_t}optional`)),1)]),Zt(m("textarea",{"onUpdate:modelValue":j[15]||(j[15]=D=>g(s).styleKo.value=D),class:"bb-create-textarea bb-create-style",name:"bb-create-style",disabled:c.value,maxlength:g(dr),placeholder:B.$t(`${_t}stylePlaceholder`)},null,8,kle),[[Nn,g(s).styleKo.value]]),m("span",Sle,S(B.$t(`${_t}count`,{count:g(s).styleKo.value.length,max:g(dr)})),1),m("span",Ile,S(B.$t(`${_t}styleHelp`)),1)]),m("div",wle,[g(s).usesAi.value?(v(),k("section",Mle,[m("h2",$le,S(B.$t(`${_t}aiModel`)),1),ce(hI,{model:g(s).aiModel.value,options:g(nh),disabled:c.value,"onUpdate:model":j[16]||(j[16]=D=>g(s).aiModel.value=D)},null,8,["model","options","disabled"])])):H("",!0),m("section",Ele,[m("label",xle,S(B.$t(`${_t}videoModel`)),1),Zt(m("select",{id:"bb-create-video-model","onUpdate:modelValue":j[17]||(j[17]=D=>g(s).targetVideoModel.value=D),class:"bb-create-input",name:"bb-create-video-model",disabled:c.value},[(v(!0),k(ae,null,Me(g(l),D=>(v(),k("option",{key:D.value,value:D.value},S(D.label),9,Cle))),128))],8,Ple),[[ps,g(s).targetVideoModel.value]]),m("span",Ble,S(B.$t(`${_t}videoModelHelp`)),1)])]),d.value?(v(),k("div",_le,[m("span",null,S(B.$t(d.value)),1),m("button",{type:"button",class:"bb-create-secondary",onClick:j[18]||(j[18]=D=>g(s).cancel())},S(B.$t("tool.blockingBoard.cancel")),1)])):g(s).state.value==="failed"?(v(),k("div",Ale,[m("span",Tle,S(B.$t(g(s).failure.value?.messageKey??`${_t}failed`)),1),m("button",{type:"button",class:"bb-create-secondary",onClick:K},S(B.$t("tool.blockingBoard.retry")),1)])):H("",!0),p.value&&g(s).result.value&&(g(s).state.value==="preview"||g(s).state.value==="creating")?(v(),k("section",{key:2,ref_key:"summaryRef",ref:b,class:"bb-create-summary","data-create-summary":""},[m("h2",Rle,S(B.$t(`${_t}summary`)),1),g(s).layoutNotice.value?(v(),k("p",Dle,S(B.$t(`${_t}${g(s).layoutNotice.value}`)),1)):H("",!0),m("div",Ole,[m("dl",Nle,[m("dt",null,S(B.$t("tool.blockingBoard.import.previewRoom")),1),m("dd",null,S(p.value.roomSize.widthM)+"Ã"+S(p.value.roomSize.depthM)+"m",1),m("dt",null,S(B.$t("tool.blockingBoard.import.previewProps")),1),m("dd",null,S(p.value.propCount),1),m("dt",null,S(B.$t("tool.blockingBoard.import.previewActors")),1),m("dd",null,S(p.value.actorCount),1),m("dt",null,S(B.$t("tool.blockingBoard.import.previewParts")),1),m("dd",Lle,S(p.value.partCount),1),m("dt",null,S(B.$t("tool.blockingBoard.import.previewIssues")),1),m("dd",null,S(p.value.issuesBySeverity.error)+"/"+S(p.value.issuesBySeverity.warning)+"/"+S(p.value.issuesBySeverity.info),1)]),ce(sre,{room:g(s).result.value.snapshot.room},null,8,["room"])]),m("div",Kle,[m("button",{type:"button",class:"bb-create-secondary",disabled:g(s).state.value==="creating",onClick:j[19]||(j[19]=D=>g(s).cancel())},S(B.$t(`${_t}edit`)),9,Fle),m("button",{type:"button",class:"bb-create-primary","data-create-confirm":"",disabled:g(s).state.value==="creating",onClick:j[20]||(j[20]=D=>N(B.$t("tool.blockingBoard.import.blankDefaultName")))},S(g(s).state.value==="creating"?B.$t("tool.blockingBoard.import.creating"):B.$t(`${_t}confirm`)),9,Hle)])],512)):H("",!0),m("div",zle,[m("div",jle,[m("button",{type:"button",class:"bb-create-link","data-create-link":"blank",disabled:g(s).busy.value,onClick:j[21]||(j[21]=D=>o("blank"))},S(B.$t(`${_t}
246linkBlank`)),9,Ule),Xle?(v(),k("button",{key:0,type:"button",class:"bb-create-link","data-create-link":"json",disabled:g(s).busy.value,onClick:j[22]||(j[22]=D=>o("json"))},S(B.$t(`${_t}linkJson`)),9,Gle)):H("",!0)]),!g(s).canStart.value&&!c.value?(v(),k("span",Vle,S(B.$t(`${_t}needsInput`)),1)):H("",!0),g(s).state.value!=="preview"&&g(s).state.value!=="creating"?(v(),k("button",{key:1,type:"button",class:"bb-create-primary","data-create-submit":"",disabled:c.value||!g(s).canStart.value,onClick:j[23]||(j[23]=D=>g(s).start())},S(B.$t(`${_t}submit`)),9,Wle)):H("",!0)])])]),_:1})}}}),qle=Object.assign(ot(Yle,[["__scopeId","data-v-870f54f3"]]),{__name:"BbShellBbCreateForm"}),Zle={class:"bb-statusbar",role:"status"},Jle={class:"bb-statusbar-hints"},Qle={class:"bb-statusbar-right"},ece=nt({__name:"BbStatusBar",props:{content:{}},setup(e){const t={ì°í´ë¦:"tool.blockingBoard.status.key.rightClick"};function n(a,s){return"text"in a?a.text:a.params?s(a.key,a.params):s(a.key)}function o(a,s){const i=a.nameLabel?{...a.params,name:n(a.nameLabel,s)}:a.params;return i?s(a.key,i):s(a.key)}return(a,s)=>(v(),k("div",Zle,[m("div",Jle,[(v(!0),k(ae,null,Me(e.content.hints,i=>(v(),k("span",{key:i.labelKey,class:"bb-statusbar-hint"},[(v(!0),k(ae,null,Me(i.keys,r=>(v(),k("kbd",{key:r,class:"bb-statusbar-kbd"},S(t[r]?a.$t(t[r]):r),1))),128)),We(" "+S(a.$t(i.labelKey)),1)]))),128))]),m("div",Qle,[(v(!0),k(ae,null,Me(e.content.right,i=>(v(),k("span",{key:i.key},S(o(i,a.$t)),1))),128))])]))}}),tce=Object.assign(ot(ece,[["__scopeId","data-v-dc491069"]]),{__name:"BbShellBbStatusBar"});var nce=Object.defineProperty,oce=(e,t,n)=>t in e?nce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hm=(e,t,n)=>oce(e,typeof t!="symbol"?t+"":t,n);class ace extends Error{constructor(t,n){super("blocking-board project create rejected"),hm(this,"code"),hm(this,"issues"),this.code=t,this.issues=n}}class bm extends Error{constructor(t){super("blocking-board project snapshot migration failed"),hm(this,"issue"),this.issue=t}}const sce=900,ai="/api/v2/work/blocking-board/project",ice={set:(e,t)=>setTimeout(e,t),clear:e=>clearTimeout(e)};function rce(e={}){const t=e.fetch??$fetch,n=e.timer??ice,o=e.now??(()=>Date.now()),a=e.debounceMs??sce,s=e.retryDelaysMs??tS,i=G([]),r=G(null),l=G("saved"),c=G(null),d=G(null),u=G(null),p=G("ok");let f=null,h=null,b=!1,I=!1,y=[],w=null,M=0;function x(){w!==null&&n.clear(w),w=null}function _(){const fe=WC(M,s);fe!==null&&(x(),w=n.set(()=>{w=null,M+=1,F()},fe))}function O(){b=!1,I&&(I=!1,N());const fe=y;y=[];for(const X of fe)X()}function A(){h!==null&&n.clear(h),h=null,x(),M=0,f=null,I=!1,d.value=null,p.value="ok"}function N(){h!==null&&n.clear(h),h=n.set(()=>{h=null,F()},a)}function K(fe){f={projectId:r.value?.projectId??null,getter:fe},l.value!=="conflict"&&(x(),M=0,l.value="dirty",N())}async function F(){if(!r.value||!f)return;if(f.projectId!==r.value.projectId){f=null;return}if(b){I=!0;return}const fe=f,X=fe.getter(),re=GI(X).level;if(p.value=re,re==="too-large"){l.value="too-large";return}b=!0,l.value="saving";const Se=r.value.projectId;try{const Q=await t(`${ai}/${Se}`,{method:"PATCH",body:{snapshot:JSON.parse(Dl(X)),expectedUpdatedAt:r.value.updatedAt}});if(r.value?.projectId!==Se)return;Q.code===200?(r.value={...r.value,updatedAt:Q.rslt.updatedAt},f===fe&&(l.value="saved",f=null),c.value=o(),M=0,d.value=null,u.value=null):Q.code===409&&Q.failure==="BACKGROUND_LOCKED"?(l.value="error",u.value=Q.failure):Q.code===409?(l.value="conflict",d.value=typeof Q.updatedAt=="number"?Q.updatedAt:null):(l.value="error",_())}catch{r.value?.projectId===Se&&(l.value="error",_())}finally{O()}}function B(){return new Promise(fe=>y.push(fe))}async function j(){x(),await F()}async function ee(){for(;;){if(h!==null){n.clear(h),h=null,await F();return}if(b){await B();continue}l.value==="error"&&await j();return}}async function D(){l.value!=="conflict"||!f||!r.value||(d.value!==null&&(r.value={...r.value,updatedAt:d.value}),l.value="dirty",await F())}async function Z(){const fe=r.value?.projectId??null;for(;;)if(h!==null)n.clear(h),h=null,await F();else if(b)await B();else break;if((r.value?.projectId??null)!==fe||(x(),l.value==="error"&&f&&(await F(),x(),(r.value?.projectId??null)!==fe)))return;const X=l.value;if(r.value=null,A(),l.value="saved",c.value=null,X==="conflict"||X==="error"||X==="too-large")throw new Error(`blocking-board project save failed before clear: ${X}`)}async function L(fe,X={}){const re=await t(`${ai}?pageNo=${fe}`,{method:"GET"}),Se=re.rslt.items;if(X.append){const Q=new Set(i.value.map($e=>$e.projectId));i.value=[...i.value,...Se.filter($e=>!Q.has($e.projectId))]}else i.value=Se;return re.rslt}async function V(fe,X){const re=await t(ai,{method:"POST",body:{name:fe,snapshot:JSON.parse(Dl(X))}});if(re.code!==200)throw new ace(re.code,re.issues);return A(),r.value={projectId:re.rslt.projectId,name:fe,updatedAt:re.rslt.updatedAt},l.value="saved",re.rslt.projectId}async function pe(fe){const X=await t(`${ai}/${fe}`,{method:"GET"}),re=PS(X.rslt.snapshot);if(!re.ok)throw new bm(re.issue);return A(),r.value={projectId:X.rslt.projectId,name:X.rslt.name,updatedAt:X.rslt.updatedAt},l.value="saved",c.value=o(),re.value}async function le(fe,X){for(;b;)await B();b=!0;try{const re=i.value.find($e=>$e.projectId===fe),Se=r.value?.projectId===fe?r.value.updatedAt:re?.updatedAt??0,Q=await t(`${ai}/${fe}`,{method:"PATCH",body:{name:X,expectedUpdatedAt:Se}});return Q.code===200&&(r.value?.projectId===fe&&(r.value={...r.value,name:X,updatedAt:Q.rslt.updatedAt}),re&&(re.name=X,re.updatedAt=Q.rslt.updatedAt)),Q}finally{O()}}async function me(fe){await t(`${ai}/${fe}`,{method:"DELETE"}),i.value=i.value.filter(X=>X.projectId!==fe),r.value?.projectId===fe&&(r.value=null)}async function oe(fe,X){if(!r.value)throw new Error("Open a Blocking Board project before uploading an asset.");return(await t(`${ai}/${r.value.projectId}/asset`,{method:"POST",body:{kind:fe,dataUrl:X}})).rslt.storageKey}return{projects:i,current:r,saveState:l,lastSavedAt:c,conflictUpdatedAt:fl(d),saveFailure:fl(u),sizeLevel:fl(p),list:L,create:V,open:pe,markDirty:K,saveNow:F,flushNow:ee,retrySave:j,overwriteAfterConflict:D,flushAndClearCurrent:Z,rename:le,remove:me,uploadAsset:oe}}const lce=/@(?:Image|Video)\d+/g;function qw(e,t){let n="",o=0;const a=[];for(const s of e.matchAll(lce)){const i=t.get(s[0]);i&&(n+=e.slice(o,s.index),a.push({assetId:i,charOffset:n.length}),o=s.index+s[0].length)}return n+=e.slice(o),{pmpt:n,mentions:a}}const cce="blocking-board/shot-ir/1",hk=.25,dce=8,uce=3,pce=1.2;function pd(e,t){return Math.hypot(t.x-e.x,t.y-e.y)}function fce(e,t){return Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI}function gm(e,t){const n={x:t.x-e.position.x,y:t.y-e.position.y},o=Math.hypot(n.x,n.y);if(o<1e-9)return"center";const a=ho(e.headingDeg),s=(n.x*a.x+n.y*a.y)/o;return s<-hk?"left":s>hk?"right":"center"}function mce(e,t){const n=[];for(let o=0;o<t.length;o+=1)for(let a=o+1;a<t.length;a+=1){const s=t[o],i=t[a],r=gm(e,s.position),l=gm(e,i.position);r==="left"&&l==="right"?n.push({subject:s.name,relation:"left-of",target:i.name,unit:"frame"}):r==="right"&&l==="left"&&n.push({subject:s.name,relation:"right-of",target:i.name,unit:"frame"})}return n}function hce(e,t){const n=e.fovH/2;return t.map(o=>({prop:o,dist:pd(e.position,o.position)})).filter(({prop:o,dist:a})=>a<=dce&&Math.abs(Io(e.headingDeg,fce(e.position,o.position)))<n).sort((o,a)=>o.dist-a.dist).slice(0,uce).map(({prop:o})=>o)}function bce(e,t,n){const o=[];for(const a of n){const s=pd(e.position,a.position);for(const i of t){if(pd(i.position,a.position)<pce){o.push({subject:i.name,relation:"near",target:a.name,unit:"room"});continue}const l=pd(e.position,i.position);o.push({subject:i.name,relation:l<s?"in-front-of":"behind",target:a.name,unit:"room"})}}return o}function gce(e,t,n){return[...mce(e,t),...bce(e,t,hce(e,n))]}const Zw=xn;function ou(e){return{startSec:e.startSec,endSec:e.endSec}}
246function Jw(e,t,n){return e.room.props.find(o=>o.id===n)??t.props.find(o=>o.id===n)}function Qw(e,t){return e.room.openings.find(n=>n.id===t)}function vce(e,t,n){if(n.targetPropId){const o=Jw(e,t,n.targetPropId);return o?{name:(o.catalogKey?Tt(o.catalogKey)?.labels.en:void 0)??o.name,kind:"prop"}:{}}if(n.targetOpeningId){const o=Qw(e,n.targetOpeningId);return o?{name:Tt(o.kind)?.labels.en??o.kind,kind:"opening"}:{}}return{}}function yce(e,t,n){const o=Jw(e,t,n);if(o)return Tt(o.catalogKey??o.kind)?.labels.en??o.name;const a=Qw(e,n);return a?Tt(a.kind)?.labels.en??a.kind:n}function kce(e,t){return t.castRefIds.map(n=>e.refs.characters.find(o=>o.id===n)).filter(n=>!!n).map(n=>({tag:n.tag,name:n.name}))}function Sce(e,t){const n=e-t;return n<-.4?"low":n>.4?"high":"eye"}function Ice(e,t){const n=[];for(const o of e.settled.actions){const a={startSec:o.settledStartSec,endSec:o.settledEndSec},s=Pi(t,a);if(!s)continue;const i=e.part.actors.find(l=>l.id===o.actorId),r=vce(e.snapshot,e.part,o);n.push({actionId:o.id,actorName:i?.name??"",actionType:o.actionType,actionClass:o.actionClass,...o.text.ko!==void 0?{textKo:o.text.ko}:{},...o.text.en!==void 0?{textEn:o.text.en}:{},...r.name!==void 0?{targetName:r.name}:{},...r.kind!==void 0?{targetKind:r.kind}:{},sourceRange:ou(a),range:ou(s),localRange:{startSec:s.startSec-t.startSec,endSec:s.endSec-t.startSec},continuing:o.settledStartSec<t.startSec-Zw})}return n}function wce(e,t){const n=[];for(const o of e.settled.dialogues){const a={startSec:o.settledStartSec,endSec:o.settledEndSec},s=Pi(t,a);if(!s)continue;const i=e.part.actors.find(r=>r.id===o.actorId);n.push({dialogueId:o.id,actorName:i?.name??"",line:o.line,lang:o.lang,mode:o.mode,sourceRange:ou(a),range:ou(s),localRange:{startSec:s.startSec-t.startSec,endSec:s.endSec-t.startSec},continuing:o.settledStartSec<t.startSec-Zw})}return n}function Mce(e,t){const n=[];for(const[o,a]of Object.entries(e.settled.pauseWindowsByActor)){const s=e.part.actors.find(i=>i.id===o);for(const i of a){const r=Pi(t,i);r&&n.push({actorName:s?.name??"",localRange:{startSec:r.startSec-t.startSec,endSec:r.endSec-t.startSec}})}}return n}function $ce(e,t){const n=[];for(const o of e.part.timeline.propEvents){const a={startSec:o.startSec,endSec:o.endSec},s=Pi(t,a);s&&n.push({targetName:yce(e.snapshot,e.part,o.targetId),open:o.state.open,localRange:{startSec:s.startSec-t.startSec,endSec:s.endSec-t.startSec}})}return n}function Ece(e,t,n){return e.actions.some(o=>o.actorId===t&&o.actionClass==="movement"&&Pi(n,{startSec:o.settledStartSec,endSec:o.settledEndSec})!==null)}function Ul(e){const{snapshot:t,partId:n,validation:o}=e,a=wu(o,n);if(a.length>0)return{ok:!1,code:"EXPORT_BLOCKED",issues:a};const s=t.parts.findIndex(h=>h.partId===n),i=t.parts[s];if(!i)return{ok:!1,code:"EXPORT_BLOCKED",issues:[]};const r=fs(i),l=wr(i,r),c=Vl({cuts:l.cuts,durationSec:i.durationSec,fps:t.settings.fps,pathPrefix:`parts[${s}].timeline`});if(kl(c))return{ok:!1,code:"EXPORT_BLOCKED",issues:c};const d=t.room,u={snapshot:t,part:i,settled:r,room:d},f=[...l.cuts].sort((h,b)=>h.inSec-b.inSec).map((h,b)=>xce(u,l.coverages,h,b+1));return{ok:!0,ir:{version:cce,partId:i.partId,durationSec:i.durationSec,fps:t.settings.fps,scene:{title:t.scene.title,roomKind:d.kind,lightTime:t.settings.lightTime,castTags:kce(t,i)},shots:f}}}function xce(e,t,n,o){const{snapshot:a,part:s,settled:i,room:r}=e,l={startSec:n.inSec,endSec:n.outSec},c=Wa(s,i,{coverages:t,cuts:[n]},r,n.inSec),d=s.cameras.find(K=>K.id===n.cameraId),u=t.find(K=>K.id===n.coverageId),p=c.camera?{position:c.camera.position,headingDeg:c.camera.headingDeg,fovH:c.camera.fovH}:{position:d?.position??{x:0,y:0},headingDeg:d?.headingDeg??0,fovH:60},h=(u?.subject.targetIds??[]).map(K=>s.actors.find(F=>F.id===K)).filter(K=>!!K),b=h.map(K=>{const F=c.actors[K.id],B=Math.hypot(F.position.x-p.position.x,F.position.y-p.position.y);return{actor:K,state:F,dist:B}}),I=[...b].sort((K,F)=>K.dist-F.dist),y=new Map,w=I.length;I.forEach((K,F)=>{const B=Math.min(2,Math.floor(F*3/w));y.set(K.actor.id,["foreground","middle","background"][B])});const M=b.map(({actor:K,state:F})=>{const B=K.refId?a.refs.characters.find(j=>j.id===K.refId):void 0;return{actorId:K.id,name:K.name,...B?{tag:B.tag}:{},pose:F.pose,depth:y.get(K.id)??"foreground",screenSide:gm(p,F.position),moving:Ece(i,K.id,l)}}),x=gce(p,b.map(({actor:K,state:F})=>({name:K.name,position:F.position})),r.props.map(K=>({name:K.name,position:K.center}))),_=h[0],O=_?Fa(wo(_),c.actors[_.id]?.pose):Fa(1.7),A=c.camera?.heightM??d?.heightM??1.6,N=Z0({part:s,resolved:{coverages:t,cuts:[n],issues:[]},actors:c.actors,room:r,cut:n,easing:"smooth"});return{cutId:n.id,index:o,inSec:n.inSec,outSec:n.outSec,camera:{name:d?.name??"",shotType:u?.shotType??"wide",lensMm:c.camera?.lensMm??d?.lensMm??35,fovH:c.camera?.fovH??p.fovH,move:N.primary,heightBand:Sce(A,O),subjectNames:(d?.subject?.targetIds??[]).map(K=>s.actors.find(F=>F.id===K)?.name).filter(K=>!!K),...d?.subject?.nodePath?{nodePath:d.subject.nodePath}:{}},cameraMoveCount:N.segments.length,subjects:M,actions:Ice(e,l),dialogues:wce(e,l),pauses:Mce(e,l),propEvents:$ce(e,l),intent:u?.shotIntent?.type??null,relations:x}}const Pce="video-ir/1.0",Cce={units:"m",origin:"room-center",xAxis:"east",yAxis:"south",heightAxis:"up",angleUnits:"deg",heading:"0=+x,90=+y"};function eM(e,t){return e<t?-1:e>t?1:0}function kr(e,t){return eM(e.id,t.id)}function fd(e,t){return e.timeRange.startSec-t.timeRange.startSec||e.timeRange.endSec-t.timeRange.endSec||kr(e,t)}function md(e,t){return e.atSec-t.atSec}function _a(e,t){return{startSec:e,endSec:t}}function zh(e){return{x:e.x,y:e.y}}function bk(e){return e?{type:e.type,confidence:e.confidence,source:e.source}:null}function gk(e){return{targetIds:[...e.targetIds],nodePath:e.nodePath??null}}function Bce(e,t){return{projectId:e.projectId,partId:t.partId,partTitle:t.title,sceneId:e.scene.sceneId,sceneTitle:e.scene.title,durationSec:t.durationSec,fps:e.settings.fps,easing:e.settings.easing,createdFrom:e.schemaVersion}}function vk(e,t){return{id:e.id,scope:t,kind:e.kind,catalogKey:e.catalogKey??null,
246name:e.name,center:zh(e.center),widthM:e.widthM,depthM:e.depthM,heightM:e.heightM??null,headingDeg:e.headingDeg,supportPropId:e.supportPropId??null,elevationM:e.elevationM??null}}function _ce(e,t){const n=e.room;return{coordinates:{...Cce},room:{kind:n.kind,widthM:n.widthM,depthM:n.depthM,outdoor:lu.includes(n.kind),walls:{north:n.walls.north,east:n.walls.east,south:n.walls.south,west:n.walls.west}},openings:n.openings.map(o=>({id:o.id,kind:o.kind,wall:o.wall,offsetM:o.offsetM,widthM:o.widthM,heightM:o.heightM})).sort(kr),props:[...n.props.map(o=>vk(o,"room")),...t.props.map(o=>vk(o,"part"))].sort(kr),light:{time:e.settings.lightTime,directionDeg:e.settings.lightDirectionDeg}}}function Ace(e,t){return t.actors.map(n=>({id:n.id,name:n.name,species:n.species,bodyType:n.bodyType,color:n.color,movementMode:n.movementMode,refId:n.refId??null,refTag:n.refId?e.refs.characters.find(o=>o.id===n.refId)?.tag??null:null,start:{position:zh(n.start.position),headingDeg:n.start.headingDeg,pose:n.start.pose,seatPropId:n.start.seatPropId??null},waypoints:n.path.waypoints.map(o=>({x:o.x,y:o.y,atSec:o.atSec??null,pauseSec:o.pauseSec})),positionKeys:n.positionKeys.map(o=>({atSec:o.atSec,x:o.x,y:o.y})).sort(md),facingKeys:n.facingKeys.map(o=>({atSec:o.atSec,headingDeg:o.headingDeg,targetId:o.targetId??null,...o.travel?{travel:!0}:{}})).sort(md),poseKeys:n.poseKeys.map(o=>({atSec:o.atSec,pose:o.pose,seatPropId:o.seatPropId??null})).sort(md)})).sort(kr)}function Tce(e,t){const n=e.cameras.map(s=>({id:s.id,name:s.name,position:zh(s.position),heightM:s.heightM,headingDeg:s.headingDeg,pitchDeg:s.pitchDeg,rollDeg:s.rollDeg,lensMm:s.lensMm,fovOverrideDeg:s.fovOverrideDeg??null,move:{type:s.move.type,amount:s.move.amount??null,direction:s.move.direction??null},subject:s.subject?gk(s.subject):null,keys:s.keys.map(i=>({atSec:i.atSec,x:i.x,y:i.y,heightM:i.heightM,headingDeg:i.headingDeg,pitchDeg:i.pitchDeg,rollDeg:i.rollDeg,lensMm:i.lensMm})).sort(md)})).sort(kr),o=t.coverages.map(s=>{const i=e.timeline.coverages.find(r=>r.id===s.id);return{id:s.id,cameraId:s.cameraId,shotType:s.shotType,subject:gk(s.subject),timingMode:s.timingMode,timeRange:_a(s.startSec,s.endSec),sourceTimeRange:_a(i.startSec,i.endSec),anchor:s.anchor?{targetId:s.anchor.targetId,eventType:s.anchor.eventType,offsetSec:s.anchor.offsetSec,resolvedSec:s.startSec}:null,intent:bk(s.shotIntent)}}).sort(fd),a=[...t.cuts].sort((s,i)=>s.inSec-i.inSec||kr(s,i)).map((s,i)=>{const r=t.coverages.find(c=>c.id===s.coverageId),l=e.timeline.cuts.find(c=>c.id===s.id);return{id:s.id,index:i+1,cameraId:s.cameraId,coverageId:s.coverageId,shotType:r.shotType,inSec:s.inSec,outSec:s.outSec,sourceTimeRange:_a(l.inSec,l.outSec),intent:bk(s.shotIntent??r.shotIntent)}});return{sensorWidthMm:Vm,aspect:"16:9",cameras:n,coverages:o,cuts:a}}function Rce(e,t,n){const o=n.actions.map(l=>({id:l.id,actorId:l.actorId??null,actionType:l.actionType,actionClass:l.actionClass,source:l.source,text:{ko:l.text.ko??null,en:l.text.en??null},motionId:l.motionId??null,targetPropId:l.targetPropId??null,targetOpeningId:l.targetOpeningId??null,timeRange:_a(l.settledStartSec,l.settledEndSec),sourceTimeRange:_a(l.startSec,l.endSec),pauseSegments:l.pauseSegments.map(c=>_a(c.startSec,c.endSec))})).sort(fd),a=n.dialogues.map(l=>({id:l.id,actorId:l.actorId,line:l.line,lang:l.lang,mode:l.mode,timeSource:l.timeSource,timeRange:_a(l.settledStartSec,l.settledEndSec),sourceTimeRange:_a(l.startSec,l.endSec)})).sort(fd),s=Object.entries(n.pauseWindowsByActor).flatMap(([l,c])=>c.map(d=>({actorId:l,dialogueId:d.dialogueId,timeRange:_a(d.startSec,d.endSec)}))).sort((l,c)=>l.timeRange.startSec-c.timeRange.startSec||eM(l.actorId,c.actorId)),i=l=>e.room.props.some(c=>c.id===l)||t.props.some(c=>
246c.id===l),r=t.timeline.propEvents.map(l=>({id:l.id,targetId:l.targetId,targetKind:i(l.targetId)?"prop":"opening",open:l.state.open,openAngleDeg:l.state.openAngleDeg??null,timeRange:_a(l.startSec,l.endSec)})).sort(fd);return{actions:o,dialogues:a,pauses:s,propEvents:r}}function Dce(e,t,n){if(e.schemaVersion!==Ha)return[Le("UNSUPPORTED_SCHEMA_VERSION",{path:"schemaVersion",params:{value:String(e.schemaVersion)}})];const o=`parts[${t}]`,a=Jk(e).filter(l=>l.severity==="error"&&(l.path.startsWith(o)||!l.path.startsWith("parts[")));if(a.length>0)return a;const s=n.issues.filter(l=>l.severity==="error").map(l=>({...l,path:Bn(o,l.path)}));if(s.length>0)return s;const i=e.parts[t],r=Vl({cuts:n.cuts,durationSec:i.durationSec,fps:e.settings.fps,pathPrefix:`${o}.timeline`});return kl(r)?r.filter(l=>l.severity==="error"):[]}function Oce(e){const{snapshot:t,partId:n,validation:o}=e,a=wu(o,n);if(a.length>0)return{ok:!1,code:"EXPORT_BLOCKED",issues:a};const s=t.parts.findIndex(d=>d.partId===n),i=t.parts[s];if(!i)return{ok:!1,code:"EXPORT_BLOCKED",issues:[]};const r=fs(i),l=wr(i,r),c=Dce(t,s,l);return c.length>0?{ok:!1,code:"EXPORT_BLOCKED",issues:c}:{ok:!0,ir:{schema:Pce,meta:Bce(t,i),spatial:_ce(t,i),cast:Ace(t,i),cinematic:Tce(i,l),temporal:Rce(t,i,r)}}}const tM={walk:{en:(e="the destination")=>`walks to ${e}`,ko:(e="목ì ì§")=>`${e} 쪽ì¼ë¡ 걸ì´ê°ë¤`},run:{en:(e="the destination")=>`runs to ${e}`,ko:(e="목ì ì§")=>`${e} 쪽ì¼ë¡ ë°ì´ê°ë¤`},enter:{en:(e="the door")=>`enters through ${e}`,ko:(e="문")=>`${e}ì¼ë¡ ë¤ì´ì¨ë¤`},exit:{en:(e="the door")=>`exits through ${e}`,ko:(e="문")=>`${e}ì¼ë¡ ëê°ë¤`},"sit-down":{en:(e="the seat")=>`sits down on ${e}`,ko:(e="ì리")=>`${e}ì ìëë¤`},"stand-up":{en:()=>"stands up",ko:()=>"ì¼ì´ëë¤"},nod:{en:()=>"nods",ko:()=>"ê³ ê°ë¥¼ ëëì¸ë¤"},"look-up":{en:()=>"looks up",ko:()=>"ê³ ê°ë¥¼ ë ë¤"},"look-down":{en:()=>"looks down",ko:()=>"ê³ ê°ë¥¼ ìì¸ë¤"},read:{en:e=>e?`reads ${e}`:"reads the papers",ko:e=>e?`${e}ì ì½ëë¤`:"ìë¥ë¥¼ ì½ëë¤"},turn:{en:e=>e?`turns toward ${e}`:"turns around",ko:e=>e?`${e} 쪽ì¼ë¡ ëì본ë¤`:"ëì본ë¤"},"open-door":{en:(e="the door")=>`opens ${e}`,ko:(e="문")=>`${e}ì ì°ë¤`},"close-door":{en:(e="the door")=>`closes ${e}`,ko:(e="문")=>`${e}ì ë«ëë¤`},"pick-up":{en:(e="it")=>`picks up ${e}`,ko:(e="ê·¸ê²")=>`${e}ì ì§ì´ë ë¤`},"put-down":{en:(e="it")=>`puts down ${e}`,ko:(e="ê·¸ê²")=>`${e}ì ë´ë ¤ëëë¤`},wave:{en:()=>"waves",ko:()=>"ìì íë ë¤"},bow:{en:()=>"bows",ko:()=>"ê³ ê° ìì¬ ì¸ì¬íë¤"},handshake:{en:(e="the other person")=>`shakes hands with ${e}`,ko:(e="ìë")=>`${e}ê³¼ ì
ìíë¤`},approach:{en:(e="the other person")=>`approaches ${e}`,ko:(e="ìë")=>`${e}ìê² ë¤ê°ê°ë¤`},stop:{en:()=>"stops",ko:()=>"ë©ì¶ë¤"}};function Nce(e,t){const n=e.toLowerCase();for(const o of[...t].sort((a,s)=>s.length-a.length))if(o&&n.startsWith(o.toLowerCase())){const a=e.slice(o.length),s=a.replace(/^\s+/,"");if(s.length>0&&s.length<a.length)return s}return e}function Lce(e,t,n,o){const a=e.text?.en;if(a)return{text:Nce(a,[t,...n]),translated:!1};const s=tM[e.actionType];return s?{text:s.en(o),translated:!0}:{text:e.actionType,translated:!0}}function Kce(e,t){for(const n of[...t].sort((o,a)=>a.length-o.length)){if(!n||!e.startsWith(n))continue;const o=e.slice(n.length),a=o.match(/^(?:ì´|ê°|ì|ë|ê»ì)?\s+/);if(a&&o.length>a[0].length)return o.slice(a[0].length)}return e}function Fce(e,t,n=[]){const o=e.text?.ko;if(o)return Kce(o,n);const a=tM[e.actionType];return a?a.ko(t):e.actionType}function nM(){return{allowed:new Set}}function oM(e,t){return e.allowed.add(t),t}function Gl(e,t){return oM(e,`${t.toFixed(1)}s`)}function Hce(e,t){return oM(t,`${Math.round(e)}°`)}const zce={wide:"Wide shot",full:"Full shot",medium:"Medium shot","close-up":"Close-up","extreme-close-up":"Extreme close-up",insert:"Insert shot"},jce={wide:"ìì´ë ì·",full:"í ì·",medium:"미ëì ì·","close-up":"í´ë¡ì¦ì
","extreme-close-up":"ìµì¤í¸ë¦¼ í´ë¡ì¦ì
",insert:"ì¸ìí¸"},Uce={low:"ë¡ì° ìµê¸",eye:"ìì´ ë 벨",high:"íì´ ìµê¸"},Gce={foreground:"the foreground",middle:"the middle ground",background:"the background"},Vce={foreground:"ì쪽",middle:"ì¤ê°",background:"ë¤ìª½"},aM={left:"screen-left",right:"screen-right",center:"center frame"},sM={left:"íë©´ ì¼ìª½",right:"íë©´ ì¤ë¥¸ìª½",center:"íë©´ ì¤ì"},Wce={stand:"stands",sit:"sits",kneel:"kneels",crouch:"crouches",lie:"lies down"},Xce={stand:"ì ìë¤",sit:"ìì ìë¤",kneel:"무ë¦ì ê¿ê³ ìë¤",crouch:"ì
í¬ë¦¬ê³ ìë¤",lie:"ëì ìë¤"},iM={"left-of":"screen-left of","right-of":"screen-right of","in-front-of":"in front of",behind:"behind",near:"near"},rM={"left-of":"íë©´ ì¼ìª½","right-of":"íë©´ ì¤ë¥¸ìª½","in-front-of":"ì",behind:"ë¤",near:"ê·¼ì²"},Yce={dawn:"dawn",day:"daytime",dusk:"dusk",night:"night"},qce={left:"ì¼ìª½",right:"ì¤ë¥¸ìª½",up:"ì",down:"ìë",in:"ì쪽",out:"ë°ê¹¥ìª½"};function lM(e){const t=e.direction;switch(e.type){case"static":return"static";case"handheld":return"handheld";case"dolly-in":return"slow dolly in";case"pull-back":return"slow pull back";case"tracking":return"tracking shot";case"pan":return t?`slow pan ${t}`:"slow pan";case"tilt":return t?`slow tilt ${t}`:"slow tilt";case"truck":return t?`slow truck ${t}`:"slow truck";case"arc":return t?`orbit ${t}`:"orbit";case"crane":return t?`crane ${t}`:"crane";case"zoom":return t?`slow zoom ${t}`:"slow zoom";case"whip-pan":return t?`whip pan ${t}`:"whip pan";case"spiral-in":return t?`spiral in ${t}`:"spiral in";case"spiral-out":return t?`spiral out ${t}`:"spiral out";default:return e.type}}function Zce(e){const t=e.direction?qce[e.direction]??e.direction:void 0;switch(e.type){case"static":return"ê³ ì ";case"handheld":return"í¸ëí¬ë";case"dolly-in":return"ì²ì²í ë¬ë¦¬ ì¸";case"pull-back":return"ì²ì²í íë°±";case"tracking":return"í¸ëí¹ ì·";case"pan":return t?`ì²ì²í í¬(${t})`:"ì²ì²í í¬";case"tilt":return t?`ì²ì²í í¸í¸(${t})`:"ì²ì²í í¸í¸";case"truck":return t?`ì²ì²í í¸ë(${t})`:"ì²ì²í í¸ë";case"arc":return t?`궤ë ì´ë(${t})`:"궤ë ì´ë";case"crane":return t?`í¬ë ì¸(${t})`:"í¬ë ì¸";case"zoom":return t?`ì²ì²í ì¤(${t})`:"ì²ì²í ì¤";case"whip-pan":return t?`í© í¬(${t})`:"í© í¬";case"spiral-in":return t?`ëì í ì ê·¼(${t})`:"ëì í ì ê·¼";case"spiral-out":return t?`ëì í ì´í(${t})`:"ëì í ì´í";default:return e.type}}const Pr={subjectPose:(e,t,n,o)=>`${e} ${t} ${n} in ${o}.`,relation:(e,t,n)=>`${e} is ${t} ${n}`,action:(e,t,n,o,a)=>`${e} ${t} from ${n} to ${o}${a?" (continuing)":""}.`,propEvent:(e,t,n,o)=>`The ${e} ${t?"opens":"closes"} from ${n} to ${o}.`,remain:(e,t)=>`${e} remains ${t}, not walking.`,video:e=>`${e} â follow only the actors' blocking and the camera movement; ignore its look and colors.`},Cr={subjectPose:(e,t,n,o)=>`${e}ê° ${n} ${o}ìì ${t}.`,relation:(e,t,n)=>`${e}ë ${n} ${t}ì ìë¤`,action:(e,t,n,o,a)=>`${e} ${t} ${n}ë¶í° ${o}ê¹ì§${a?" (ì´ì´ì)":""}.`,propEvent:(e,t,n,o)=>`${e}ì´(ê°) ${n}ë¶í° ${o}
246ê¹ì§ ${t?"ì´ë¦°ë¤":"ë«íë¤"}.`,remain:(e,t)=>`${e}ë ${t}, ìì§ì´ì§ ìëë¤.`,video:e=>`${e} â ì¸ë¬¼ ëì ê³¼ ì¹´ë©ë¼ ìì§ìë§ ë°ë¥¸ë¤. ìê¹ìì ìì ë°ë¥´ì§ ìëë¤.`};function ic(e){return e.rename??(t=>t)}function Jce(e,t,n){return n.partTime?{startSec:t+e.startSec,endSec:t+e.endSec}:e}function Qce(e){const t=new Set;for(const n of e.scene.castTags)t.add(n.name);for(const n of e.shots){for(const o of n.subjects)t.add(o.name);for(const o of n.actions)t.add(o.actorName),o.targetName&&t.add(o.targetName);for(const o of n.dialogues)t.add(o.actorName);for(const o of n.pauses)t.add(o.actorName);for(const o of n.propEvents)t.add(o.targetName);for(const o of n.relations)t.add(o.subject),t.add(o.target)}return t}function ede(e){const t={};return e.textKo!==void 0&&(t.ko=e.textKo),e.textEn!==void 0&&(t.en=e.textEn),{actionType:e.actionType,text:t}}function tde(e,t,n={}){if(e.relations.length===0)return"";const o=t==="en"?iM:rM,a=t==="en"?Pr:Cr,s=ic(n);return`${e.relations.map(i=>a.relation(s(i.subject),o[i.relation],s(i.target))).join("; ")}.`}function nde(e,t,n={}){const o=t==="en"?Pr:Cr,a=t==="en"?Wce:Xce,s=t==="en"?aM:sM,i=t==="en"?Gce:Vce,r=ic(n),l=e.subjects.map(d=>o.subjectPose(r(d.name),a[d.pose],s[d.screenSide]??d.screenSide,i[d.depth])),c=tde(e,t,n);return[...l,c].filter(Boolean).join(" ")}function ode(e,t,n,o={}){const a=n==="en"?Pr:Cr,s=ede(e),i=ic(o),r=i(e.actorName),l=e.targetName===void 0?void 0:i(e.targetName),c=[...new Set([e.actorName,...o.aliases?.(e.actorName)??[]].filter(Boolean))];let d;n==="en"?d=Lce(s,r,c,l).text:d=Fce(s,l,[r,...c]);const u=o.partTime?e.range:e.localRange;return{line:a.action(r,d,Gl(t,u.startSec),Gl(t,u.endSec),e.continuing)}}function ade(e,t,n,o={}){const a=n==="en"?Pr:Cr,s=ic(o);return e.propEvents.map(i=>{const r=Jce(i.localRange,e.inSec,o);return a.propEvent(s(i.targetName),i.open,Gl(t,r.startSec),Gl(t,r.endSec))})}function sde(e,t,n={}){const o=t==="en"?Pr:Cr,a=ic(n),s=new Set(e.subjects.filter(r=>r.moving).map(r=>r.name)),i=t==="en"?iM:rM;return e.subjects.filter(r=>!s.has(r.name)).map(r=>{const l=e.relations.find(d=>d.subject===r.name),c=l?t==="en"?`${i[l.relation]} ${a(l.target)}`:`${a(l.target)} ${i[l.relation]}`:t==="en"?aM[r.screenSide]??r.screenSide:sM[r.screenSide]??r.screenSide;return o.remain(a(r.name),c)})}function cM(e,t,n,o={}){return[nde(e,n,o),...e.actions.map(a=>ode(a,t,n,o).line),...ade(e,t,n,o),...sde(e,n,o)].filter(Boolean)}const ide=/-?\d+(\.\d+)?(e-?\d+)?/g,dM=/@(Image|Audio|Video)\d+/g,uM=/[[{]/g,pM=/\b[xyz]\s*:/gi,fM=/\b(Deg|Sec)\b/g,mM=/\bnodePath\b/g,hM=/\b(actor|cam|cov|cut|prop|door|ref|part)-[a-z0-9]/gi;function rde(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function lde(e,t){const n=[...t].filter(a=>a.length>0).sort((a,s)=>s.length-a.length);let o=e;for(const a of n){const i=/^\d+$/.test(a)?"[0-9.]":"[0-9]",r="(?<!"+i+")"+rde(a)+"(?!"+i+")";o=o.replace(new RegExp(r,"g")," ".repeat(a.length))}return o}function cde(e){return e.replace(dM,t=>" ".repeat(t.length))}function Yo(e,t,n,o){t.lastIndex=0;let a;for(;a=t.exec(e);)o.push({index:a.index,match:a[0],kind:n})}function dde(e,t){const n=cde(lde(e,t)),o=[];return Yo(n,ide,"number",o),Yo(n,uM,"bracket",o),Yo(n,pM,"coord-key",o),Yo(n,fM,"unit-word",o),Yo(n,mM,"node-path",o),Yo(n,hM,"internal-id",o),o.sort((a,s)=>a.index-s.index)}const ude=/\b(?:\d+\.\d+\s?(?:s|sec|secs|seconds)|\d+\s?(?:sec|secs|seconds)|\d*[1-9]\s?s)\b/gi;function yk(e,t){const n=[];Yo(e,ude,"time",n),Yo(e,uM,"bracket",n),Yo(e,pM,"coord-key",n),Yo(e,fM,"unit-word",n),Yo(e,mM,"node-path",n),Yo(e,hM,"internal-id",n);const o=[];return Yo(e,dM,"unknown-tag",o),n.push(...o.filter(a=>!t.has(a.match))),n.sort((a,s)=>a.index-s.index)}const pde=0xcbf29ce484222325n,fde=0x100000001b3n,mde=0xffffffffffffffffn;function bM(e){let t=pde;for(const n of new TextEncoder().encode(e))t^=BigInt(n),t=t*fde&mde;return t.toString(16).padStart(16,"0")}const hde=["sceneContext","references","location","format","optics","camera","propLock","performance","environment","timeline","style","output","locks","negative"],au={titles:{sceneContext:"SCENE CONTEXT",references:"ACTIVE REFERENCES",location:"LOCATION MAP AND LIGHTING",format:"FORMAT MODE",optics:"OPTICS",camera:"CAMERA",propLock:"PROP LOCK",performance:"PERFORMANCE",environment:"ENVIRONMENTAL MOTION",style:"STYLE",output:"OUTPUT SETTINGS",locks:"POSITIVE LOCKS",negative:"RESIDUAL NEGATIVE"},timelineTitle:(e,t)=>
246`ACTION TIMELINE â ${e} beats, ${t}`,timeUnit:"s",beatHead:(e,t,n)=>`${e} to ${t} â ${n}`,dialogue:(e,t,n,o)=>`Dialogue â ${e} (${t}â${n}): ${o}`,dialogueNone:"Dialogue â none",sfx:e=>`SFX: ${e}`,noAction:"The shot holds on the set.",locationPlate:"Location plate",scope:{background:"Governs spatial layout and texture only.",character:"Governs face, hair and wardrobe only.",prop:"Governs shape and color only.",animal:"Governs body shape, color and markings only."},withSpecies:(e,t)=>`${e} (${t})`,reference:(e,t,n,o)=>`${e} · ${t} â ${n?`${n}. `:""}${o}`,video:Pr.video,described:(e,t)=>`· ${e} â ${t}.`,noReferences:"No image references.",bullet:(e,t)=>`· ${e} â ${t}`,camera:(e,t,n,o,a)=>`CUT ${e}: ${t}, ${n}, ${o}, ${a}.`,band:{low:"low angle",eye:"eye-level",high:"high angle"},shot:e=>(zce[e]??e).toLowerCase(),format:(e,t)=>`${t?`Multi-cut, ${e} cuts.`:"Single cut."} At most one camera move per cut.`,optics:"FOV values are horizontal field of view. Each cut holds its field of view.",output:"Aspect ratio 16:9. Dialogue and on-location sound only. Real-time speed throughout.",locks:(e,t={people:!0,animals:!1})=>["· Each cut performs only its assigned camera move and holds its field of view.","· Real-time speed throughout.",...t.people?[e?"· Each person's face, hair and wardrobe match their @Image reference and stay consistent across cuts.":"· Each person's face, hair and wardrobe follow their description and stay consistent across cuts."]:[],...t.animals?[e?"· Each animal's body shape, color and markings match its @Image reference and stay consistent across cuts.":"· Each animal's body shape, color and markings follow its description and stay consistent across cuts."]:[],t.people?"· Each person keeps the same screen direction from cut to cut.":"· Each character keeps the same screen direction from cut to cut."],negative:"No on-screen subtitles, watermarks, or logos."},su={titles:{sceneContext:"ì¥ë©´",references:"ë í¼ë°ì¤",location:"ì¥ìì ì¡°ëª
",format:"íì",optics:"íê°",camera:"ì¹´ë©ë¼",propLock:"ìí ê³ ì ",performance:"ì°ê¸°",environment:"ì£¼ë³ ìì§ì",style:"ì¤íì¼",output:"ì¶ë ¥ ì¤ì ",locks:"ê³ ì ì¡°ê±´",negative:"ê¸ì§"},timelineTitle:(e,t)=>
246`ì¡ì
íìë¼ì¸ â ë¹í¸ ${e}ê°, ${t}`,timeUnit:"ì´",beatHead:(e,t,n)=>`${e}â${t} â ${n}`,dialogue:(e,t,n,o)=>`ëì¬ â ${e} (${t}â${n}): ${o}`,dialogueNone:"ëì¬ â ìì",sfx:e=>`í¨ê³¼ì: ${e}`,noAction:"íë©´ ì ìì§ì ìì´ ì¥ë©´ì ë³´ì¬ ì¤ë¤.",locationPlate:"ì¥ì ë°°ê²½",scope:{background:"ê³µê° ë°°ì¹ì ì§ê°ë§ ë°ë¥¸ë¤.",character:"ì¼êµ´Â·ë¨¸ë¦¬Â·ììë§ ë°ë¥¸ë¤.",prop:"모ìê³¼ ìë§ ë°ë¥¸ë¤.",animal:"몸 모ì·ì·무ë¬ë§ ë°ë¥¸ë¤."},withSpecies:(e,t)=>`${e}(${t})`,reference:(e,t,n,o)=>`${e} · ${t} â ${n?`${n}. `:""}${o}`,video:Cr.video,described:(e,t)=>`· ${e} â ${t}.`,noReferences:"ì´ë¯¸ì§ ë í¼ë°ì¤ ìì.",bullet:(e,t)=>`· ${e} â ${t}`,camera:(e,t,n,o,a)=>`CUT ${e}: ${t}, ${n}, ${o}, ${a}.`,band:Uce,shot:e=>jce[e]??e,format:(e,t)=>`${t?`ì¬ë¬ ì»·, ${e}ì»·.`:"í ì»·."} ì»·ë§ë¤ ì¹´ë©ë¼ ìì§ìì íëê¹ì§.`,optics:"íê° ê°ì ê°ë¡ íê°ì´ë¤. ê° ì»·ì ì»· ììì íê°ì ì ì§íë¤.",output:"íë©´ë¹ 16:9. ëì¬ì íì¥ìë§. ì²ìë¶í° ëê¹ì§ ì¤ì ìë.",locks:(e,t={people:!0,animals:!1})=>["· ê° ì»·ì ì í´ì§ ì¹´ë©ë¼ ìì§ì íëë§ íê³ íê°ì ì ì§íë¤.","· ì²ìë¶í° ëê¹ì§ ì¤ì ìë.",...t.people?[e?"· ê° ì¸ë¬¼ì ì¼êµ´Â·ë¨¸ë¦¬Â·ììì @Image ë í¼ë°ì¤ë¥¼ ë°ë¥´ë©° ì»· ì¬ì´ìì ë°ëì§ ìëë¤.":"· ì¸ë¬¼ì ì¼êµ´Â·ë¨¸ë¦¬Â·ììì ì¤ëª
ì ë°ë¥´ê³ ì»· ì¬ì´ì ë°ëì§ ìëë¤."]:[],...t.animals?[e?"· ê° ë물ì 몸 모ì·ì·무ë¬ë @Image ë í¼ë°ì¤ë¥¼ ë°ë¥´ë©° ì»· ì¬ì´ìì ë°ëì§ ìëë¤.":"· ë물ì 몸 모ì·ì·무ë¬ë ì¤ëª
ì ë°ë¥´ê³ ì»· ì¬ì´ì ë°ëì§ ìëë¤."]:[],t.people?"· ê° ì¸ë¬¼ì íë©´ ë°©í¥ì ì»·ì´ ë°ëì´ë ì ì§íë¤.":"· ê° ìºë¦í°ì íë©´ ë°©í¥ì ì»·ì´ ë°ëì´ë ì ì§íë¤."],negative:"ìë§Â·ìí°ë§í¬Â·ë¡ê³ ìì."},bde=500,gde=2e4;function gM(e,t,n){const o=new Map(n.items.map(d=>[d.key,d.tag])),a=e.sceneBackground?[{key:"background",kind:"background",nameKo:e.scene?.title??"",handoffName:null,description:"",tag:o.get("background")??null}]:[],s=[],i=new Set,r=(d,u)=>
246({key:u.id,kind:d,nameKo:u.name,handoffName:u.handoffName||null,description:u.description??"",tag:o.get(`${d==="character"?"char":"prop"}:${u.id}`)??null});for(const d of t.castRefIds){const u=e.refs.characters.find(f=>f.id===d);if(!u||i.has(u.id))continue;i.add(u.id);const p=t.actors.find(f=>f.refId===u.id);s.push({...r("character",u),...Xc(p?.species,u)})}for(const d of t.actors){const u=d.refId?e.refs.characters.find(f=>f.id===d.refId):void 0,p=u?.id??d.id;i.has(p)||(i.add(p),s.push(u?{...r("character",u),...Xc(d.species,u)}:{key:p,kind:"character",nameKo:d.name,handoffName:null,description:"",tag:null,...Xc(d.species,void 0)}))}const l=[];for(const d of[...e.room.props,...t.props]){const u=d.refId?e.refs.props.find(f=>f.id===d.refId):void 0,p=u?.id??d.id;i.has(p)||(i.add(p),l.push(u?r("prop",u):{key:p,kind:"prop",nameKo:d.name,handoffName:null,description:"",tag:null}))}for(const d of n.items){if(!d.key.startsWith("extra:")||!d.tag)continue;const u=d.key.slice(6),p=d.kind==="character"?"character":"prop",f=e.refs[p==="character"?"characters":"props"].find(b=>b.id===u);if(!f||i.has(f.id))continue;i.add(f.id),(p==="character"?s:l).push({...r(p,f),tag:d.tag,...p==="character"?Xc(f.species,f):{}})}const c=d=>[...d.filter(u=>u.tag),...d.filter(u=>!u.tag)];return[...a,...c(s),...c(l)]}function vde(e,t){const n=e.timeline.cuts.find(o=>o.id===t)?.direction?.trim();return n?{direction:n}:{}}function Xc(e,t){if(!e||e==="human"||!Dm(e))return{};const n=Ao[e].labels;return{species:t?.speciesName&&t.speciesNameEn||n.en,speciesKo:t?.speciesName||n.ko}}function yde(e){return typeof e=="string"&&e.length<=Yl&&y0.test(e)}function vM(e,t={}){const n=new Map;let o=0,a=0;for(const s of e){if(s.kind==="background")continue;const i=s.kind==="character"?`Person ${++o}`:`Prop ${++a}`,r=t[s.key]?.trim();n.set(s.key,s.handoffName??(yde(r)?r:i))}return n}function yM(e,t,n){const o=new Map,a=(s,i)=>{s&&i&&!o.has(s)&&o.set(s,i)};for(const s of t.actors)a(s.name,n.get(s.refId??s.id));for(const s of[...e.room.props,...t.props]){const i=n.get(s.refId??s.id)??n.get(s.id);a(s.name,i),a(Tt(s.catalogKey??s.kind)?.labels.en,i)}return s=>o.get(s)??s}function kM(e,t,n){const o=new Map;for(const a of t.actors){const s=a.refId?e.refs.characters.find(r=>r.id===a.refId):void 0,i=[a.name,...a.aliases??[],s?.name,...s?.aliases??[],s?.handoffName,n.get(a.refId??a.id)].filter(r=>!!r);o.set(a.name,[...new Set([...o.get(a.name)??[],...i])])}return a=>o.get(a)??[]}function SM(e,t,n,o=String){const a=n==="en"?au:su,s=n==="en"?lM(e.camera.move):Zce(e.camera.move);return a.camera(o(e.index),Hce(e.camera.fovH,t),a.band[e.camera.heightBand],a.shot(e.camera.shotType),s)}function kde(e){const{snapshot:t,partId:n,plan:o,budgetChars:a}=e,s=t.parts.find(f=>f.partId===n);if(!s)return null;const i=Ul({snapshot:t,partId:n,validation:Iu(t)});if(!i.ok)return null;const r=gM(t,s,o),l=vM(r),c=yM(t,s,l),d=kM(t,s,l),u=nM(),p=f=>{const h=s.timeline.dialogues.find(I=>I.id===f)?.actorId,b=s.actors.find(I=>I.id===h);return b?.refId??b?.id??""};return{scene:{title:t.scene?.title??"",roomKind:nS(t.room.kind)?.en??t.room.kind,lightTime:Yce[t.settings.lightTime]??t.settings.lightTime,style:t.styleDirection?.ko??""},subjects:r,beats:i.ir.shots.map(f=>({cutId:f.cutId,index:f.index,inSec:f.inSec,outSec:f.outSec,camera:SM(f,u,"en"),facts:cM(f,u,"en",{rename:c,aliases:d,partTime:!0}),dialogues:f.dialogues.map(h=>({speakerKey:p(h.dialogueId),line:h.line})),note:s.prompt?.cutTexts?.[f.cutId]?.ko??"",...vde(s,f.cutId)})),budgetChars:a}}function vm(e){return Array.isArray(e)?`[${e.map(vm).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).filter(([,n])=>n!==void 0).sort(([n],[o])=>n<o?-1:n>o?1:0).map(([n,o])=>`${JSON.stringify(n)}:${vm(o)}`).join(",")}}`:JSON.stringify(e)??"null"}function ef(e){return bM(vm(e))}function Sde(e){return e.promptMax===null?gde:Math.max(0,e.promptMax-e.codeLengthEn-bde)}const Ide=new Set(["sceneContext","location","propLock","performance","environment","style"]),kk=57344,wde=/[î-]/g;function Sk(e,t){return e.some(n=>n===t||t.startsWith(`${n}.`)||t.startsWith(`${n}[`))}function Ik(e){return e.trim().replace(/[.ã\s]+$/u,"")}function Mde(e){const t=e.filter(o=>o.kind==="character"),n=t.some(o=>o.species);return{people:t.length===0||t.some(o=>!o.species),animals:n}}function ym(e){const{snapshot:t,partId:n,plan:o,withVideo:a,stored:s,lang:i}=e,r=t.parts.find(q=>q.partId===n);
246if(!r)return{ok:!1,code:"EXPORT_BLOCKED",issues:[]};const l=Ul({snapshot:t,partId:n,validation:Iu(t)});if(!l.ok)return{ok:!1,code:"EXPORT_BLOCKED",issues:l.issues};const c=l.ir,d=i==="en"?au:su,u=s?.prose??null,p=s?.fieldIssues??[],f=gM(t,r,o),h=Object.fromEntries(Object.entries(u?.names??{}).filter(([q])=>!Sk(p,`names.${q}`))),b=vM(f,h),I=new Map(f.map(q=>[q.key,q])),y=q=>i==="en"?b.get(q)??q:I.get(q)?.nameKo??q,w=q=>{const de=I.get(q);return i==="en"?de?.species:de?.speciesKo},M=i==="en"?yM(t,r,b):q=>q,x=kM(t,r,b),_=new Set;for(const q of o.items)q.tag&&_.add(q.tag);a&&_.add("@Video1");const O=nM();O.allowed.add("16:9");const A=q=>{if(i==="en")return Gl(O,q);const de=`${q.toFixed(1)}${d.timeUnit}`;return O.allowed.add(de),de},N=[],K=q=>(N.push(q),String.fromCharCode(kk+N.length-1)),F=[],B=new Set;let j=!1;const ee=q=>{B.has(q)||(B.add(q),F.push({kind:"prose-fallback",field:q}))},D=(q,de)=>{if(!u||!de)return null;if(yk(de.en??"",_).length>0||yk(de.ko??"",_).length>0||Sk(p,q))return ee(q),null;const Ye=(de[i]??"").trim();return Ye?(j=!0,Ye):null},Z=new Map,L=(q,de)=>{const Ce=D(q,de);Ce&&Z.set(q,K(Ce))};L("sceneContext",u?.sceneContext);const V=[];for(const q of o.items){if(!q.tag)continue;const de=q.kind==="background"?"background":q.key.slice(q.key.indexOf(":")+1),Ce=q.kind==="background"?void 0:w(de),Ye=q.kind==="background"?d.locationPlate:i==="en"?y(de):q.name,tt=Ce?d.withSpecies(Ye,Ce):Ye,ht=D(`references.${de}`,u?.references?.[de]);V.push(d.reference(q.tag,tt,ht?K(Ik(ht)):null,d.scope[Ce?"animal":q.kind]))}a&&V.push(d.video("@Video1"));const pe=[];for(const q of f){if(q.kind==="background"||q.tag||!q.description.trim())continue;const de=D(`references.${q.key}`,u?.references?.[q.key]);if(de){const Ce=w(q.key),Ye=Ce?d.withSpecies(y(q.key),Ce):y(q.key);pe.push(d.described(Ye,K(Ik(de))))}}Z.set("references",[...V.length>0?V:[d.noReferences],...pe].join(` 247`)),L("location",u?.location),Z.set("format",d.format(K(String(c.shots.length)),c.shots.length>1)),Z.set("optics",d.optics),Z.set("camera",c.shots.map(q=>SM(q,O,i,de=>K(String(de)))).join(` 248`));const le=(q,de)=>{const Ce=[];for(const Ye of f){if(Ye.kind!==q)continue;const tt=D(`${de}.${Ye.key}`,u?.[de]?.[Ye.key]);if(!tt)continue;const ht=Ye.tag?`${Ye.tag} ${y(Ye.key)}`:y(Ye.key);Ce.push(d.bullet(ht,K(tt)))}return Ce},me=le("prop","propLock");me.length>0&&Z.set("propLock",me.join(` 249`));const oe=le("character","performance");oe.length>0&&Z.set("performance",oe.join(` 250`)),L("environment",u?.environment);const fe=c.shots.map((q,de)=>{const Ce=u?.beats?.[de],Ye=Ce&&Ce.cutId===q.cutId?Ce:null;u&&!Ye&&ee(`beats[${de}].text`);const tt=Ye?D(`beats[${de}].text`,Ye.text):null,ht=cM(q,O,i,{rename:M,aliases:x,partTime:!0}).join(" ")||d.noAction,Et=[d.beatHead(A(q.inSec),A(q.outSec),tt?K(tt):ht)];q.dialogues.length===0&&Et.push(d.dialogueNone);for(const Xt of q.dialogues)Et.push(d.dialogue(M(Xt.actorName),A(Xt.range.startSec),A(Xt.range.endSec),K(`{${Xt.line}}`)));const It=Ye?D(`beats[${de}].sfx`,Ye.sfx):null;return It&&Et.push(d.sfx(K(It))),Et.join(` 251`)});Z.set("timeline",fe.join(` 252 253`)),L("style",u?.style),Z.set("output",d.output),Z.set("locks",d.locks(o.imageCount>0,Mde(f)).join(` 254`)),Z.set("negative",d.negative);const X=q=>q==="timeline"?d.timelineTitle(K(String(c.shots.length)),A(c.durationSec)):d.titles[q],re=hde.filter(q=>Z.has(q)||!Ide.has(q)).map(q=>({id:q,title:X(q),body:Z.get(q)??""})),Se=new Set(O.allowed);for(const q of Qce(c))Se.add(q);for(const q of b.values())Se.add(q);for(const q of f)Se.add(q.nameKo);for(const q of o.items)q.tag&&Se.add(q.name);const Q=dde(re.map(q=>`${q.title} 255${q.body}`).join(` 256 257`),Se);if(Q.length>0)return{ok:!1,code:"PROMPT_COORDINATE_LEAK",leaks:Q};const $e=q=>q.replace(wde,de=>N[de.charCodeAt(0)-kk]??de),Fe=re.map(q=>({...q,title:$e(q.title),body:$e(q.body)})),Ze=Fe.map(q=>`${q.title} 258${q.body}`).join(` 259 260`),ue=qw(Ze,new Map([..._].map(q=>[q,q]))).pmpt.length;for(const q of c.shots)q.cameraMoveCount>1&&F.push({kind:"multi-move",cutIndex:q.index});const ye=o.limits?.promptMax;ye&&ue>ye&&F.push({kind:"over-limit",length:ue,max:ye});const Ue=new Map;for(const q of b.values()){const de=Ue.get(q.toLowerCase())??[];de.push(q),Ue.set(q.toLowerCase(),de)}const te=[...Ue.values()].filter(q=>q.length>1).map(q=>q[0]);return te.length>0&&F.push({kind:"name-duplicate",names:te}
260),{ok:!0,text:Ze,sections:Fe,length:ue,usedProse:j,warnings:F}}function IM(e,t,n){const o=e.parts.find(i=>i.partId===t),a=o?(({handoffRecording:i,prompt:r,...l})=>l)(o):null,s=Dl({room:e.room,parts:a?[a]:[],settings:e.settings});return bM(`${s} 261grayscale:${n?1:0}`)}const $de="@Video1";function Ede(e){const t=[],n=new Map;for(const l of e.plan.items)l.tag&&(n.set(l.tag,l.media.mdiaId),t.push({type:"image",url:l.media.url,role:null,tempMdiaId:l.media.mdiaId,wdth:l.media.wdth,hegt:l.media.hegt}));const o=e.recording;o&&(n.set($de,o.mdiaId),t.push({type:"video",url:o.url,role:null,tempMdiaId:o.mdiaId,wdth:o.wdth,hegt:o.hegt,duraSec:o.duraSec,fileExt:"mp4"}));const{pmpt:a,mentions:s}=qw(e.promptEn,n),i=t.map(l=>({...l,assetId:l.tempMdiaId})),r=rE({sharedPrompt:a,refAssets:i,bindings:{frame:{},order:i.map(l=>l.assetId)},mentions:s,modelStates:{[e.targetVideoModel]:{duraSec:Math.ceil(e.partDurationSec),arStr:"16:9"}}});return{tool:uf.VIDEO,ver:lE[uf.VIDEO],pmpt:a,ngtvPmpt:null,modlCode:e.targetVideoModel,chipMeta:null,refMdia:t,formState:r,baseUpdatedAt:e.baseUpdatedAt}}const xde=["#","time","camera","shot","lens","move","subjects","intent"];function wM(e){const t=e.shots.map(o=>({index:o.index,time:o.inSec.toFixed(1)+"-"+o.outSec.toFixed(1)+"s",camera:o.camera.name,shot:o.camera.shotType,lens:`${Math.round(o.camera.lensMm)}mm`,move:lM(o.camera.move),subjects:o.camera.subjectNames.join(", "),intent:o.intent??""}));return{text:[xde.join(" "),...t.map(o=>[o.index,o.time,o.camera,o.shot,o.lens,o.move,o.subjects,o.intent].join(" "))].join(` 262`),json:{rows:t}}}const Pde="blocking-board/shotbook/1",jh=45,Cde=30,wk=40,Mk=1920,tf=3,al=60,nf=36,Yc=576,$k=324,of=16,Bde=28,_de=200,af=524,Ade=96,Ek=192;function xk(e,t,n,o={}){const a=Ul({snapshot:e,partId:t,validation:n});if(!a.ok)return{ok:!1,code:"EXPORT_BLOCKED",issues:a.issues};if(a.ir.shots.length>(o.maxCuts??jh))return{ok:!1,code:"SHOTBOOK_TOO_MANY_CUTS",issues:[]};const s=e.parts.find(l=>l.partId===t),i=wr(s,fs(s)).cuts,r=wM(a.ir).json.rows;return{ok:!0,plan:{version:Pde,projectId:e.projectId,partId:t,sce
262neTitle:e.scene.title,partTitle:s.title,createdAt:Nde(o.now??new Date),cuts:a.ir.shots.map(l=>({index:l.index,cutId:l.cutId,cameraId:i.find(c=>c.id===l.cutId).cameraId,inSec:l.inSec,outSec:l.outSec,frameSec:(l.inSec+l.outSec)/2,lines:Tde(l,r.find(c=>c.index===l.index))}))}}}function sf(e,t){const n=Array.from(e);return n.length<=t?e:n.slice(0,t-1).join("")+"â¦"}const km=e=>String(e).padStart(2,"0");function Tde(e,t){const n=[`CUT ${km(t.index)} · ${t.time}`];t.camera&&n.push(sf(t.camera,Cde)),n.push(`${t.shot} · ${t.lens}`);const o=[...e.actions].sort((s,i)=>s.range.startSec-i.range.startSec||(s.actionId<i.actionId?-1:s.actionId>i.actionId?1:0));o.slice(0,2).forEach((s,i)=>{const r=sf(s.textKo??s.textEn??`${s.actorName} ${s.actionType}`,wk);n.push(i===1&&o.length>2?`${r} +${o.length-2}`:r)});const a=e.dialogues[0];return a&&n.push(`${a.actorName} "${sf(a.line.split(/\r?\n/)[0],wk)}"`),n}function Rde(e,t,n){const o=e.cuts.find(i=>i.cutId===t);if(o)return o;const a=e.cuts.find(i=>n>=i.inSec&&n<i.outSec);if(a)return a;const s=e.cuts.at(-1);return s&&n>=s.outSec-1e-6?s:null}function Dde(e){if(!Number.isInteger(e)||e<1||e>jh)throw new RangeError(`shotbook card count out of range: ${e}`);const t=Math.ceil(e/tf),n=Array.from({length:e},(o,a)=>{const s=al+a%tf*(Yc+nf),i=Ek+Math.floor(a/tf)*(af+nf);return{x:s,y:i,w:Yc,h:af,thumb:{x:s,y:i,w:Yc,h:$k},text:{x:s,y:i+$k,w:Yc,h:_de}}});return{width:Mk,height:Ek+t*af+(t-1)*nf+al,header:{x:al,y:al,w:Mk-2*al,h:Ade},cards:n}}function Ode(e){return[e.sceneTitle,`${e.partTitle} · ${e.createdAt}`]}function Nde(e){return`${e.getFullYear()}-${km(e.getMonth()+1)}-${km(e.getDate())}`}function Lde(e,t){return`cut${String(e).padStart(Math.max(2,String(t).length),"0")}.png`}function Kde(e,t){return{...e,files:{sheet:"shotbook.png",manifest:"shotbook.json",cuts:t}}}const Fde=1280,Hde=720,zde=5e3,qc='"Pretendard Variable", sans-serif',fa={titleFont:`700 32px ${qc}`,subFont:`400 20px ${qc}`,cardTitleFont:`700 20px ${qc}`,cardFont:`400 18px ${qc}`,background:"#ffffff",cardBorder:"#d4d4d4",thumbBackground:"#e9e6df",strongText:"#111111",text:"#444444"};function jde(e,t,n){const[o,a]=Ode(t);e.textBaseline="top",e.font=fa.titleFont,e.fillStyle=fa.strongText,e.fillText(o,n.header.x,n.header.y),e.font=fa.subFont,e.fillStyle=fa.text,e.fillText(a,n.header.x,n.header.y+48)}function Ude(e,t,n,o){const{thumb:a,text:s}=n;e.strokeStyle=fa.cardBorder,e.lineWidth=1,e.strokeRect(n.x,n.y,n.w,n.h),e.fillStyle=fa.thumbBackground,e.fillRect(a.x,a.y,a.w,a.h),e.drawImage(o,a.x,a.y,a.w,a.h),e.textBaseline="top",t.lines.forEach((i,r)=>{e.font=r===0?fa.cardTitleFont:fa.cardFont,e.fillStyle=r===0?fa.strongText:fa.text,e.fillText(i,s.x+of,s.y+of+r*Bde,s.w-2*of)})}async function Gde(e,t){const{snapshot:n,plan:o,mode:a}=e,s=a==="cut"?o.cuts.filter(c=>c.cutId===e.cutId):o.cuts;if(s.length===0)return{ok:!1,reason:"failed",error:new Error("no cut")};const i=()=>t.isCancelled?.()===!0,r=a!=="cut";let l=null;try{if(i())return{ok:!1,reason:"cancelled"};l=await t.createRenderer({width:Fde,height:Hde}),l.renderAt(n,o.partId,s[0].frameSec),await l.whenModelsReady(zde);let c=null,d=null,u=null;if(r){if(u=Dde(s.length),c=t.createCanvas(u.width,u.height),d=c.getContext("2d"),!d)throw new Error("2d context unavailable");d.fillStyle=fa.background,d.fillRect(0,0,u.width,u.height),jde(d,o,u)}const p=[];for(const[M,x]of s.entries()){if(i())return{ok:!1,reason:"cancelled"};if(l.renderAt(n,o.partId,x.frameSec).cutId!==x.cutId)throw new Error("frame cut mismatch");d&&u&&Ude(d,x,u.cards[M],l.canvas);const O=a==="sheet"?null:t.toBlob(l.canvas);if(O){const A=await O;if(!A)throw new Error("toBlob returned null");p.push(A)}t.onProgress?.(M+1,s.length)}if(i())return{ok:!1,reason:"cancelled"};const{projectId:f,partId:h}=o;if(a==="cut")return{ok:!0,files:[{name:Ka(f,h,`cut${s[0].index}`,"png"),blob:p[0]}]};const b=await t.toBlob(c);if(!b)throw new Error("toBlob returned null");if(a==="sheet")return{ok:!0,files:[{name:Ka(f,h,"shotbook","png"),blob:b}]};const I=s.map(M=>Lde(M.index,s.length)),y=(t.createZip??(()=>new cE))();y.file("shotbook.png",b),I.forEach((M,x)=>y.file(M,p[x])),y.file("shotbook.json",JSON.stringify(Kde(o,I),null,2));const w=await y.generateAsync({type:"blob",mimeType:"application/zip"});return{ok:!0,files:[{name:Ka(f,h,"shotbook","zip"),blob:w}]}}catch(c){return{ok:!1,reason:"failed",error:c}}finally{l?.dispose()}}function Vde(){return typeof navigator<"u"&&navigator.clipboard?navigator.clipboard:void 0}function Wde(e,t,n){if(typeof document>"u")return;const o=URL.createObjectURL(new Blob([t],{type:n})),a=document.createElement("a");a.href=o,a.download=e,a.click(),window.setTimeout(()=>URL.revokeObjectURL(o),0)}async function Xde(e){return(await xi(async()=>
262{const{loadFrameRenderer:t}=await Promise.resolve().then(()=>uhe);return{loadFrameRenderer:t}},void 0,import.meta.url)).loadFrameRenderer(e)}function Yde(e,t){const n=document.createElement("canvas");return n.width=e,n.height=t,n}function qde(e){return new Promise(t=>e.toBlob(t,"image/png"))}const Zde=2e3;function Jde(e,t,n){const o=G(null),a=G(!1),s=G(null);let i=null;const r=n.clipboard??Vde(),l=n.download??Wde,c=n.loadFrameRenderer??Xde,d=n.mediaHost??"",u=n.createCanvas??Yde,p=n.canvasToBlob??qde,f=n.downloadBlob??((Q,$e)=>Nu(Q,$e)),h=Sn(null);let b=!1;function I(Q){s.value=Q,i&&clearTimeout(i),i=setTimeout(()=>{s.value=null},Zde)}function y(Q,$e={}){const Fe=e.snapshot.value,Ze=e.activePartId.value,ue=$e.plan??Oa(Fe,Ze,{excluded:new Set}),ye=$e.prose!==void 0?$e.prose:n.freshProse?.(Ze,ue)??null;return ym({snapshot:Fe,partId:Ze,plan:ue,withVideo:!!$e.withVideo,stored:ye,lang:Q})}const w=C(()=>{const Q=e.snapshot.value,$e=e.activePartId.value,Fe=Oa(Q,$e,{excluded:new Set}),Ze=n.freshProse?.($e,Fe)??null,ue=y("en",{plan:Fe,prose:Ze});if(!ue.ok)return ue;const ye=y("ko",{plan:Fe,prose:Ze});return ye.ok?{ok:!0,ko:ye.text,en:ue.text,fresh:!!Ze}:ye});function M(Q){const $e=Oa(e.snapshot.value,e.activePartId.value,{excluded:Q.excluded});return y("en",{plan:$e,withVideo:Q.includeRecording&&$e.recording.allowed,prose:Q.prose})}function x(Q,$e){const Fe=y(Q);return Fe.ok&&Fe.text===$e}async function _(Q){try{return await r?.writeText(Q),!0}catch{return o.value="tool.blockingBoard.export.copyFailed",!1}}async function O(Q){o.value=null;const $e=w.value;if(!$e.ok)return;const Fe=$e[Q];if(!x(Q,Fe)){o.value="tool.blockingBoard.export.leakBody";return}await _(Fe)&&I(`all:${Q}`)}const A=Sn(null);let N=null;async function K(){const Q=await n.fetch(mb.USER_DRAFT,{query:{tool:uf.VIDEO}});return Q?.code===hb.Success?Q.rslt??null:null}async function F(){try{const Q=await K();return!!Q&&(!!Q.pmpt?.trim()||(Q.refMdia?.length??0)>0)}catch{return!1}}async function B(Q,$e,Fe){const Ze=e.snapshot.value,ue=IM(Ze,Q,$e),ye=Ze.parts.find(Ce=>Ce.partId===Q)?.handoffRecording??null;if(ye?.boardKey===ue)return ye;if(!n.recorder||!n.stageMdiaFile)return{error:"tool.blockingBoard.handoff.recordFailed"};A.value={step:"record"};const Ue=await n.recorder.start({snapshot:Ze,partId:Q,format:"mp4",grayscale:$e,deliver:"blob"});if(Fe.cancelled||Ue==="cancelled")return"cancelled";if(typeof Ue=="string")return{error:"tool.blockingBoard.handoff.recordFailed"};A.value={step:"upload"};const te=new File([Ue.blob],`blocking-board-${Q}-handoff.mp4`,{type:Ue.mimeType}),q=await n.stageMdiaFile(te,"video");if(Fe.cancelled)return"cancelled";if(!q?.tempMdiaId)return{error:"tool.blockingBoard.handoff.uploadFailed"};const de={mdiaId:q.tempMdiaId,url:q.url,wdth:q.wdth??null,hegt:q.hegt??null,duraSec:q.duraSec??Ue.durationSec,grayscale:$e,boardKey:ue};return e.dispatch({type:"part.setHandoffRecording",partId:Q,recording:de}),de}async function j(Q){if(N)return{ok:!1,error:"busy"};o.value=null;const $e=e.activePartId.value,Fe=Oa(e.snapshot.value,$e,{excluded:Q.excluded});if(Fe.overImageLimit)return o.value="tool.blockingBoard.handoff.overLimit",{ok:!1,error:o.value};const Ze=Q.includeRecording&&Fe.recording.allowed,ue=ym({snapshot:e.snapshot.value,partId:$e,plan:Fe,withVideo:Ze,stored:Q.prose,lang:"en"});if(!ue.ok)return{ok:!1,error:ue.code};if(ue.warnings.some(q=>q.kind==="name-duplicate"))return o.value="tool.blockingBoard.issue.handoffNameDuplicate",{ok:!1,error:"HANDOFF_NAME_DUPLICATE"};if(ue.text!==Q.promptEn)return o.value="tool.blockingBoard.handoff.prose.changed",{ok:!1,error:"HANDOFF_PROMPT_CHANGED"};const ye=ue.text,Ue={cancelled:!1};N=Ue,a.value=!0;const te=q=>(o.value=q,{ok:!1,error:q});try{let q=null;if(Ze){const tt=await B($e,Q.grayscale,Ue);if(tt==="cancelled")return{ok:!1,error:"cancelled"};if("error"in tt)return te(tt.error);q=tt}if(Ue.cancelled)return{ok:!1,error:"cancelled"};A.value={step:"save"};const de=await K();if(Ue.cancelled)return{ok:!1,error:"cancelled"};const Ce=Ede({plan:Fe,recording:q,promptEn:ye,targetVideoModel:e.snapshot.value.targetVideoModel,partDurationSec:e.snapshot.value.parts.find(tt=>tt.partId===$e)?.durationSec??0,baseUpdatedAt:de?.updatedAt??null}),Ye=await n.fetch(mb.USER_DRAFT,{method:"POST",body:Ce});return Ye?.code!==hb.Success?te("tool.blockingBoard.export.videoDraftConflict"):Ye.rslt?.stale?te("tool.blockingBoard.handoff.stale"):(await n.flushSave?.(),await n.router.push(n.localePath("/studio/video")),{ok:!0})}catch(q){return console.error("blocking-board send to video failed",q),te("tool.blockingBoard.export.sendVideoFailed")}finally{N===Ue&&(N=null),A.value=null,a.value=!1}}function ee(){N&&(N.cancelled=!0,n.recorder?.cancel())}function D(){const Q=e.snapshot.value;l(`blocking-board-${Q.projectId}.json`,Dl(Q),"application/json")}function Z(Q){const $e=e.snapshot.value,Fe=e.activePartId.value,Ze=Ul({snapshot:$e,partId:Fe,validation:t.report.value});if(!Ze.ok)return;const ue=wM(Ze.ir),ye=Ka($e.projectId,Fe,"shotlist",Q);Q==="txt"?l(ye,ue.text,"text/plain"):l(ye,JSON.stringify(ue.json),"application/json")}function L(){const Q=e.snapshot.value,$e=e.activePartId.value,Fe=Ul({snapshot:Q,partId:$e,validation:t.report.value});Fe.ok&&l(Ka(Q.projectId,$e,"shot-ir","json"),JSON.stringify(Fe.ir),"application/json")}function V(){const Q=e.snapshot.value,$e=e.activePartId.value,Fe=Oce({snapshot:Q,partId:$e,validation:t.report.value});if(!Fe.ok){o.value="tool.blockingBoard.issue.exportBlocked";return}l(Ka(Q.projectId,$e,"video-ir","json"),JSON.stringify(Fe.ir,null,2),"application/json")}const pe=C(()=>xk(e.snapshot.value,e.activePartId.value,t.report.value,{maxCuts:1/0}));function le(Q,$e){const Fe=pe.value;return Fe.ok?Rde(Fe.plan,Q,$e):null}function me(Q){console.error("blocking-board shotbook export failed",Q),o.value="tool.blockingBoard.export.shotbook.failed"}async function oe(Q,$e){if(h.value)return;o.value=null;const Fe=e.snapshot.value,Ze=xk(Fe,e.activePartId.value,t.report.value,{now:(n.now??(()=>new Date))(),maxCuts:Q==="cut"?1/0:jh});if(!Ze.ok){Ze.code==="SHOTBOOK_TOO_MANY_CUTS"&&(o.value="tool.blockingBoard.export.shotbook.tooManyCuts");return}if(!(Q==="cut"&&!Ze.plan.cuts.some(ue=>ue.cutId===$e))){b=!1,h.value={mode:Q,done:0,total:Q==="cut"?1:Ze.plan.cuts.length};try{const ue=await Gde({snapshot:Fe,plan:Ze.plan,mode:Q,cutId:$e},{createRenderer:ye=>c({...ye,mediaHost:d}),createCanvas:u,toBlob:p,onProgress:(ye,Ue)=>{h.value={mode:Q,done:ye,total:Ue}},isCancelled:()=>b});if(ue.ok)for(const ye of ue.files)f(ye.name,ye.blob);else ue.reason==="failed"&&me(ue.error)}catch(ue){me(ue)}finally{h.value=null}}}const fe=Q=>oe("cut",Q),X=()=>oe("sheet"),re=()=>oe("zip");function Se(){b=!0}return{prompt:w,handoffPrompt:M,error:o,busy:a,copied:s,copyAll:O,sendToVideo:j,sendProgress:A,cancelSendToVideo:ee,hasVideoDraftContent:F,downloadBoardJson:D,downloadShotlist:Z,downloadShotIR:L,downloadVideoIR:V,shotbookProgress:h,pngCutFor:le,downloadCutPng:fe,downloadShotbookPng:X,downloadShotbookZip:re,cancelShotbook:Se}}function rf(e,t,n){const o=ym({snapshot:e,partId:t,plan:n,withVideo:!1,stored:null,lang:"en"}),a=Sde({codeLengthEn:o.ok?o.length:0,promptMax:n.limits?.promptMax??null});return kde({snapshot:e,partId:t,plan:n,budgetChars:a})}function Qde(e){return[...e.refs.characters,...e.refs.props].map(t=>
262t.handoffName??"").filter(Boolean)}function eue(e,t,n,o){const a=e.parts.find(r=>r.partId===t),s=new Map;for(const r of[...a?.actors??[],...e.room.props,...a?.props??[]])r.refId&&r.refId!==r.id&&s.set(r.id,r.refId);if(s.size===0)return{prose:n,fieldIssues:o};const i=r=>Object.fromEntries(Object.entries(r??{}).map(([l,c])=>[s.get(l)??l,c]));return{prose:{...n,references:i(n.references),propLock:i(n.propLock),performance:i(n.performance)},fieldIssues:o.map(r=>r.replace(/^(references|propLock|performance)\.(.+)$/,(l,c,d)=>`${c}.${s.get(d)??d}`))}}function tue(e){const t=G("idle"),n=G(null);let o=null;function a(l,c){return l.parts.find(d=>d.partId===c)?.handoffProse??null}function s(l,c){const d=e.snapshot();if(!d)return!1;const u=a(d,l);if(!u)return!1;const p=rf(d,l,c);return!!p&&u.key===ef(p)}function i(){o&&(o.cancelled=!0,o=null,t.value="idle")}async function r(l,c){const d=e.snapshot();if(!d)return null;const u=rf(d,l,c.plan);if(!u)return null;const p=a(d,l);if(!c.force&&p&&p.key===ef(u))return t.value="ready",n.value=null,p;i();const f={cancelled:!1};o=f,t.value="writing",n.value=null;let h;try{h=await e.fetchProse({input:u,existingNames:Qde(d)})}catch(M){console.error("blocking-board handoff prose failed",M),h={ok:!1,failure:{code:"PROVIDER_FAILED",messageKey:xb("PROVIDER_FAILED")},meta:{providerId:"",modelId:"",attempts:0,elapsedMs:0}}}if(f.cancelled)return null;if(o=null,!h?.ok)return t.value="failed",n.value=h?.failure??{code:"PROVIDER_FAILED",messageKey:xb("PROVIDER_FAILED")},null;Object.keys(h.prose.names??{}).length>0&&e.dispatch({type:"refs.fillHandoffNames",partId:l,names:h.prose.names});const b=e.snapshot()??d,I=rf(b,l,c.plan),y=eue(b,l,h.prose,h.fieldIssues??[]),w={key:ef(I??u),prose:y.prose,fieldIssues:y.fieldIssues,createdAt:Date.now()};return e.dispatch({type:"part.setHandoffProse",partId:l,value:w}),t.value="ready",w}return{status:t,failure:n,ensureProse:r,cancel:i,isFresh:s}}const nue=500,oue=60,aue=new Set(["actor.add","prop.add","camera.add","opening.add","entity.duplicate"]),sue=new Set(["actor","prop","camera","opening"]);function iue(e){return`${e}-${crypto.randomUUID().slice(0,8)}`}function Pk(e,t){const n=new Set,o=e.parts.find(a=>a.partId===t);return o?.actors.forEach(a=>n.add(a.id)),o?.cameras.forEach(a=>n.add(a.id)),o?.props.forEach(a=>n.add(a.id)),e.room.props.forEach(a=>
262n.add(a.id)),e.room.openings.forEach(a=>n.add(a.id)),n}function rue(e){const t=e.idFactory??iue,n=e.now??Date.now,o=Sn(e.initial),a=G(e.initial.activePartId),s=G(0),i=Sn({ids:[],primary:null}),r=Sn(null),l=G(0),c=G(!1),d=[],u=[],p=G(0),f=G(0),h=G(!1);let b=null;const I=new Map,y=C(()=>o.value.parts.find(X=>X.partId===a.value)),w=C(()=>p.value>0),M=C(()=>f.value>0),x=C(()=>(p.value,f.value,s4({undo:d,redo:[...u].reverse(),truncated:h.value})));function _(){const X=i.value.ids.filter(Se=>RB(o.value,a.value,Se)),re=i.value.primary&&X.includes(i.value.primary)?i.value.primary:X.at(-1)??null;i.value={ids:X,primary:re}}function O(X,re,Se,Q){const $e=n();!!Q&&b!==null&&b.key===Q&&$e-b.atMs<=nue&&d.length>0||(d.push({snapshot:X,partId:re,selection:i.value,label:Se,coalesceKey:Q??null}),d.length>oue&&(d.shift(),h.value=!0)),u.length=0,p.value=d.length,f.value=0,b=Q?{key:Q,atMs:$e}:null}function A(X,re){const Se={partId:a.value,timeSec:s.value,idFactory:t,fps:o.value.settings.fps},Q=rv(o.value,X,Se);if(!Q.ok)return Q;const $e=hf(Q.snapshot);if(kl($e.issues))return{ok:!1,issue:$e.issues.find(Ue=>Ue.severity==="error")??Le("SCHEMA_INVALID",{path:""})};const Fe=aue.has(X.type)?Pk(o.value,Se.partId):null,Ze=o.value,ue=re?.label??cv([X],Ze,Q.snapshot,Se.partId);if(O(Ze,Se.partId,ue,re?.coalesceKey),o.value=Q.snapshot,l.value+=1,c.value=!0,_(),Fe){const ye=[...Pk(o.value,Se.partId)].filter(Ue=>!Fe.has(Ue));ye.length===1&&(i.value={ids:[ye[0]],primary:ye[0]})}return e.onCommit?.(l.value),{ok:!0,meta:Q.meta}}function N(X,re){const Se={partId:a.value,timeSec:s.value,idFactory:t,fps:o.value.settings.fps};let Q=o.value;for(const ue of X){const ye=rv(Q,ue,Se);if(!ye.ok)return ye;Q=ye.snapshot}const $e=hf(Q);if(kl($e.issues))return{ok:!1,issue:$e.issues.find(ye=>ye.severity==="error")??Le("SCHEMA_INVALID",{path:""})};const Fe=o.value,Ze=re?.label??cv(X,Fe,Q,Se.partId);return O(Fe,Se.partId,Ze,re?.coalesceKey),o.value=Q,l.value+=1,c.value=!0,_(),e.onCommit?.(l.value),{ok:!0}}function K(X,re){const Se=X.pop();if(Se)return re.push({snapshot:o.value,partId:Se.partId,selection:i.value,label:Se.label,coalesceKey:Se.coalesceKey}),Se}function F(X){const re=X.snapshot.activePartId!==X.partId?{...X.snapshot,activePartId:X.partId}:X.snapshot,Se=a.value!==X.partId;if(a.value=X.partId,o.value=re,Se){const Q=re.parts.find($e=>$e.partId===X.partId);Q&&s.value>Q.durationSec&&(s.value=Q.durationSec)}i.value=X.selection,_(),r.value=null,b=null,l.value+=1,c.value=!0,e.onCommit?.(l.value)}function B(){const X=K(d,u);X&&(p.value=d.length,f.value=u.length,F(X))}function j(){const X=K(u,d);X&&(p.value=d.length,f.value=u.length,F(X))}function ee(X){const{undo:re,redo:Se}=i4(x.value.index,X);for(let Q=0;Q<re;Q++)B();for(let Q=0;Q<Se;Q++)j()}function D(X){if(X===a.value)return;const re=o.value.parts.find(Se=>Se.partId===X);re&&(I.set(a.value,s.value),a.value=X,s.value=Math.min(I.get(X)??0,re.durationSec),i.value={ids:[],primary:null},o.value={...o.value,activePartId:X},c.value=!0,b=null,e.onCommit?.(l.value))}function Z(X,re={}){if(re.additive){if(i.value.ids.includes(X)){const Se=i.value.ids.filter(Q=>Q!==X);i.value={ids:Se,primary:Se.at(-1)??null};return}i.value={ids:[...i.value.ids,X],primary:X};return}i.value={ids:[X],primary:X}}function L(X){const re=X.filter(Se=>hS(o.value,a.value,Se));i.value={ids:re,primary:re.at(-1)??null}}function V(){i.value={ids:[],primary:null}}function pe(){c.value=!1}function le(){const X=i.value.ids.filter($e=>sue.has(ia(o.value,$e).kind));if(X.length===0)return{removed:0};const re=X.reduce(($e,Fe)=>$e+ia(o.value,Fe).cascade.length,0);if(re>0)return r.value={ids:X,cascadeCount:re},{needsConfirm:!0,cascadeCount:re};const Se=X.map($e=>({type:"entity.remove",id:$e}));return N(Se).ok?(V(),{removed:X.length}):{removed:0}}function me(){const X=r.value;if(!X)return 0;const re=X.ids.map(Q=>({type:"entity.remove",id:Q})),Se=N(re);return r.value=null,Se.ok?(V(),X.ids.length):0}function oe(){r.value=null}function fe(){const X=i.value.primary;if(!X)return null;const re=ia(o.value,X).kind;return re!=="actor"&&re!=="prop"&&re!=="camera"?null:A({type:"entity.duplicate",id:X})}return{snapshot:o,activePart:y,activePartId:a,timeSec:s,selection:i,revision:l,dirty:c,canUndo:w,canRedo:M,history:x,truncated:h,dispatch:A,commitMany:N,undo:B,redo:j,jumpTo:ee,setActivePart:D,select:Z,selectMany:L,clearSelection:V,markSaved:pe,pendingRemoval:r,removeSelection:le,confirmRemoval:me,cancelRemoval:oe,duplicateSelection:fe}}const lue=150,cue={set:(e,t)=>setTimeout(e,t),clear:e=>clearTimeout(e)},due=()=>({issues:[],byPart:{},errorCount:0,warningCount:0});function uue(e,t={}){const n=t.validate??Iu,o=t.timer??cue,a=t.debounceMs??lue,s=Sn({...due(),ranAt:-1}),i=G(!1),r=C(()=>i.value||s.value.ranAt!==e.revision.value);let l=null,c=!1;function d(){l!==null&&(o.clear(l),l=null),i.value=!1}function u(){l=null;const M=e.revision.value,x=n(e.snapshot.value);s.value={...x,ranAt:M},i.value=!1}function p(){c||(d(),i.value=!0,l=o.set(u,a))}Je(e.revision,()=>p(),{immediate:!0});function f(M={}){!M.force&&s.value.ranAt===e.revision.value||(d(),u())}function h(){c=!0,d()}function b(){c=!1,p()}function I(M){return s.value.issues.filter(x=>x.targetId===M)}const y=C(()=>s.value.errorCount),w=C(()=>s.value.warningCount);return{report:s,running:r,refresh:f,suspend:h,resume:b,issuesFor:I,errorCount:y,warningCount:w}}function pue(e){switch(e.type){case"actor.moveStart":case"actor.addWaypoint":case"actor.moveWaypoint":case"actor.replacePath":case"actor.translate":case"actor.movePositionKey":return e.actorId;default:return null}}function fue(e){const t=G(null);let n=null;function o(l){t.value=l,n=l?{revision:e.session.revision.value,partId:e.session.activePartId.value}:null}Je(()=>[e.session.revision.value,e.session.activePartId.value],([l,c])=>{n&&(l!==n.revision||c!==n.partId)&&o(null)});function a(l){const c=pue(l);
262if(!c){o(null);return}const d=xf(e.session.snapshot.value,e.session.activePartId.value,c);if(!d.ok||d.commands.length===0){o(null);return}o({actorId:c,segmentIndex:d.segmentIndex,points:d.points,preview:d.preview,obstacleId:d.obstacleId,commands:d.commands})}function s(){const l=t.value;if(!l)return;e.session.commitMany(l.commands).ok&&o(null)}function i(){o(null)}function r(l){const c=xf(e.session.snapshot.value,e.session.activePartId.value,l);if(!c.ok)return{ok:!1,issue:c.issue};if(c.commands.length===0)return{ok:!0};const d=e.session.commitMany(c.commands);return d.ok&&o(null),d}return{suggestion:t,afterCommand:a,apply:s,ignore:i,autoDetour:r}}const mue=10*1024*1024,hue=8e3,bue=["image/jpeg","image/png"];function gue(e){return new Promise(t=>{const n=new Image;n.onload=()=>t({width:n.naturalWidth,height:n.naturalHeight}),n.onerror=()=>t(null),n.src=e})}function vue(e,t={}){const n=t.createObjectURL??(y=>URL.createObjectURL(y)),o=t.revokeObjectURL??(y=>URL.revokeObjectURL(y)),a=t.readImageSize??gue,s=G(null),i=G(!1),r=Sn(null),l=C(()=>n7(e.snapshot.value.background,r.value));async function c(y){if(!bue.includes(y.type))return s.value=Le("SCHEMA_INVALID",{path:"photo",params:{detail:"must be jpg or png"}}),null;if(y.size>mue)return s.value=Le("PHOTO_TOO_LARGE",{path:"photo"}),null;const w=n(y),M=await a(w);return!M||Math.max(M.width,M.height)>hue?(o(w),s.value=Le("PHOTO_TOO_LARGE",{path:"photo"}),null):(s.value=null,{url:w,fileName:y.name.slice(0,gu),widthPx:M.width,heightPx:M.height})}function d(y){const w=r.value;w&&w.url!==y.url&&o(w.url),r.value=y,s.value=null}function u(y){y.url!==r.value?.url&&o(y.url)}async function p(y){const w=await c(y);if(!w)return null;const M=Ah(e.snapshot.value.background,w);if(M.kind!=="relink"){const x=e.dispatch({type:"background.set",fileName:w.fileName,widthPx:w.widthPx,heightPx:w.heightPx});if(!x.ok)return u(w),s.value=x.issue,null}return d(w),M}function f(y,w){e.dispatch({type:"background.setHomography",H:y,anchors:w})}function h(){return l.value===null?!1:(i.value=!0,!0)}function b(){i.value=!1}function I(){r.value&&o(r.value.url),r.value=null,i.value=!1}return{error:s,isOpen:i,photo:r,shownPhotoUrl:l,upload:p,loadPhotoFile:c,adoptPhoto:d,discardPhoto:u,applyHomography:f,open:h,close:b,dispose:I}}function yue(){const e=G(null);return{pick:e,start(t){e.value={...t}},cancel(){e.value=null}}}const MM="tool.blockingBoard.context",Co={separator:!0},Gt=(e,t,n={})=>({id:e,labelKey:`${MM}.${t}`,...n}),kue=["slow","normal","fast","run"],Ck=e=>kue.map(t=>({id:`${e}.${t}`,labelKey:`tool.blockingBoard.speed.${t}`})),Sue=[["talk","talk"],["nod","nod"],["bow","bow"],["wave","wave"],["point","point"],["pick-up","pickUp"],["open-door","openDoor"],["lie","lie"],["kneel","kneel"],["crouch","crouch"]],Iue=()=>Gt("motion","motion",{icon:"hand",children:Sue.map(([e,t])=>({id:`motion.${e}`,labelKey:`tool.blockingBoard.inspector.act.motions.${t}`}))});function Ba(e){const t=[];for(const n of e)n&&("separator"in n&&(t.length===0||"separator"in t[t.length-1])||t.push(n));for(;t.length>0&&"separator"in t[t.length-1];)t.pop();return t}function wue(e){const t=e.view==="2d",n=l=>t?l:null,o=e.target,a=[Gt("entity.rename","rename",{icon:"pencil"}),Gt("selection.duplicate","duplicate",{shortcut:"â§D",icon:"copy"}),Gt("visibility.hide","hide",{shortcut:"H",icon:"eye-off"}),Gt("lock.on","lock",{icon:"lock"}),Co,Gt("selection.delete","delete",{shortcut:"X",danger:!0,icon:"trash-2"})],s=Gt("view.frame","frame",{shortcut:"F",icon:"scan"}),i=Gt("xfm.move","move",{shortcut:"G",icon:"move"}),r=Gt("xfm.rotate","rotate",{shortcut:"R",icon:"rotate-cw"});switch(o.kind){case"locked":return Ba([Gt("lock.off","unlock",{icon:"lock-open"}),Gt("visibility.hide","hide",{icon:"eye-off"})]);case"actor":return Ba([Gt("actions","addAction",{icon:"list-plus",children:[Gt("pick.walk","walk",{icon:"footprints"}),Gt("pick.run","run",{icon:"zap"}),...o.hasSeat?[Gt("actor.sit","sit",{icon:"armchair"})]:[],Gt("actor.standUp","standUp",{icon:"arrow-up"}),Gt("pick.look","look",{icon:"eye"}),Iue()]}),o.hasMoves?Gt("move.lastSpeed","lastSpeed",{icon:"gauge",children:Ck("move.lastSpeed")}):null,Co,Gt("camera.forActor","cameraForActor",{icon:"video"}),s,Co,n(i),n(r),n(Co),...a]);case"prop":return Ba([o.hasSupport?Gt("prop.unstack","unstack",{icon:"layers"}):null,o.elevated?Gt("prop.ground","ground",{icon:"arrow-down-to-line"}):null,s,Co,n(i),n(r),n(Gt("xfm.scale","scale",{shortcut:"S",icon:"scaling"})),n(Co),...a]);case"camera":return Ba([e.workspace==="timing"?null:Gt("camera.lookThrough","lookThrough",{icon:"aperture"}),Gt("camera.insertKey","insertKey",{shortcut:"I",icon:"diamond"}),s,Co,n(i),n(r),n(Co),...a]);case"opening":return Ba([Gt("visibility.hide","hide",{icon:"eye-off"}),Gt("lock.on","lock",{icon:"lock"}),Co,Gt("selection.delete","delete",{shortcut:"X",danger:!0,icon:"trash-2"})]);case"multi":return Ba([s,Co,n(i),n(r),n(Co),...a.slice(1)]);case"floor":{const l=o.actor?{name:o.actor.name}:void 0;return Ba([...o.actor?[Gt("move.walkHere","walkHere",{labelParams:l,icon:"footprints"}),Gt("move.runHere","runHere",{labelParams:l,icon:"zap"}),o.actor.hasPath?Gt("path.insertHere","insertWaypointHere",{labelParams:l,icon:"map-pin-plus"}):null,Gt("look.here","lookHere",{labelParams:l,icon:"eye"}),Co]:[],Gt("add.openMenu","add",{shortcut:"â§A",icon:"plus"}),Co,n(Gt("view.fitRoom","fitRoom",{shortcut:"â§0",icon:"maximize"})),Gt("visibility.showAll","showAll",{shortcut:"â¥H",icon:"eye"}),Gt("room.settings","roomSettings",{icon:"settings"})])}case"path":return Ba([o.canAddWaypoint?Gt("path.addWaypoint","addWaypoint",{icon:"map-pin-plus"}):null,o.canSpeed?Gt("path.speed","segmentSpeed",{icon:"gauge",children:Ck("path.speed")}):null,Gt("path.lookHere","lookAtPoint",{icon:"eye"})]);case"facingKey":return Ba([Gt("facing.toTravel","toTravel",{icon:"navigation"}),Co,Gt("facing.remove","removeFacingKey",{danger:!0,icon:"trash-2"})]);case"waypoint":return Ba([Gt("waypoint.pause","pause",{icon:"pause",children:[0,1,2,3].map(l=>({id:`waypoint.pause.${l}`,labelKey:`${MM}.pauseSec`,labelParams:{n:l},checked:Math.abs(o.pauseSec-l)<.05}))}),Gt("waypoint.pose","poseHere",{icon:"person-standing",children:[{id:"wayp
262oint.pose.stand",labelKey:"tool.blockingBoard.pose.stand"},...o.canSit?[{id:"waypoint.pose.sit",labelKey:"tool.blockingBoard.pose.sit"}]:[],{id:"waypoint.pose.lie",labelKey:"tool.blockingBoard.pose.lie"}]}),Co,Gt("waypoint.remove","removeWaypoint",{danger:!0,icon:"trash-2"})])}}function Mue(e,t){const{hit:n}=e;if(n.kind==="facingKey")return{kind:"facingKey",actorId:n.actorId,index:n.index};const{snapshot:o,partId:a,selectionIds:s,lockedIds:i}=t,r=o.parts.find(u=>u.partId===a);if(n.kind==="path"){const u=r?.actors.find(p=>p.id===n.actorId);return{kind:"path",actorId:n.actorId,canSpeed:n.groupLast!==null,canAddWaypoint:(u?.positionKeys.length??0)<2}}if(n.kind==="waypoint"){const u=r?.actors.find(p=>p.id===n.actorId)?.path.waypoints[n.index];return{kind:"waypoint",actorId:n.actorId,index:n.index,pauseSec:u?.pauseSec??0,canSit:n.seatPropId!==null}}if(n.kind==="entity"){const u=n.id;if(i.includes(u))return{kind:"locked",id:u};if(s.includes(u)&&s.length>=2)return{kind:"multi",ids:[...s]};const p=r?.actors.find(h=>h.id===u);if(p&&r)return{kind:"actor",id:u,hasSeat:Ru(o,a,u).length>0,hasMoves:$s(p,r.durationSec).length>0};if(r?.cameras.some(h=>h.id===u))return{kind:"camera",id:u};const f=[...o.room.props,...r?.props??[]].find(h=>h.id===u);if(f)return{kind:"prop",id:u,hasSupport:!!f.supportPropId,elevated:(f.elevationM??0)>0};if(o.room.openings.some(h=>h.id===u))return{kind:"opening",id:u}}const l=s.length===1?s[0]:null,c=l!==null?r?.actors.find(u=>u.id===l):void 0;return{kind:"floor",actor:c&&e.floor!==null&&!i.includes(c.id)?{id:c.id,name:t.nameOf(c.id),hasPath:c.path.waypoints.length>0&&c.positionKeys.length<2}:null}}function $ue(e,t){const n=[...e.timeline.coverages].sort((a,s)=>a.startSec-s.startSec)[0];if(n)return{kind:"cutOnly",command:{type:"cut.add",coverageId:n.id,inSec:n.startSec,outSec:n.endSec}};const o=e.cameras.find(a=>a.id===t)??e.cameras[0];return o?{kind:"coverageFirst",command:{type:"coverage.add",cameraId:o.id,startSec:0,endSec:e.durationSec}}:{kind:"noCamera"}}const Eue=5,xue=.1;function Pue(e,t,n,o,a,s){const i={};for(const r of e.actors)i[r.id]=[];for(let r=Eue;r>=1;r-=1){const l=Math.max(0,a-r*xue),c=Wa(e,t,n,o,l,{easing:s.easing,tracks:s.tracks});for(const d of e.actors)i[d.id].push(c.actors[d.id].position)}return i}function Cue(e){const{primaryId:t,part:n,atSec:o,view:a}=e;return!t||!n.cameras.some(s=>s.id===t)?null:a?{type:"camera.addKey",cameraId:t,atSec:o,value:{x:a.position.x,y:a.position.y,heightM:a.heightM,headingDeg:a.headingDeg,pitchDeg:a.pitchDeg}}:{type:"camera.addKey",cameraId:t,atSec:o}}const ss="tool.blockingBoard.status",pn=(e,t)=>({keys:e,labelKey:`${ss}.hint.${t}`});function Bue(e){return e.transforming?[pn(["Enter"],"confirm"),pn(["Esc"],"cancel"),pn(["X","Y"],"axis"),pn(["Ctrl"],"snapOff")]:e.playing?[pn(["Space"],"pause"),pn(["J","K","L"],"shuttle"),pn(["[","]"],"cuts")]:e.workspace==="camera"?[pn(["0"],"lookThrough"),pn(["[","]"],"cuts"),...e.area==="stage2d"?[]:[pn(["S"],"splitCut")],pn(["I"],"insertKey")]:e.workspace==="timing"?[pn(["J","K","L"],"shuttle"),pn(["â","â"],"prevNextKey"),pn(["B"],"boxSelect"),pn(["P"],"loop")]:e.workspace==="output"?[]:e.selectionCount>=1&&e.area!=="none"&&e.area!=="properties"?e.area==="outliner"?[pn(["â§D"],"duplicate"),pn(["X"],"delete"),pn(["H"],"hide")]:e.area==="timeline"?[pn(["X"],"delete"),pn(["S"],"splitCut")]:e.area==="stage3d"?[pn(["ì°í´ë¦"],"quickMenu"),pn(["â§D"],"duplicate"),pn(["X"],"delete"),pn(["H"],"hide")]:[pn(["G"],"move"),pn(["R"],"rotate"),pn(["S"],"scale"),pn(["â§D"],"duplicate"),pn(["X"],"delete"),pn(["H"],"hide")]:[pn(["â§A"],"add"),pn(["ì°í´ë¦"],"quickMenu"),pn(["?"],"help")]}function _ue(e){const t=[];if(e.selectionCount===1){const n=e.primaryLabel;n&&"text"in n?t.push({key:`${ss}.selectedOne`,params:{name:n.text}}):n?t.push({key:`${ss}.selectedOne`,nameLabel:n}):t.push({key:`${ss}.selectedOne`,params:{name:""}})}else e.selectionCount>1&&t.push({key:`${ss}.selectedMany`,params:{n:e.selectionCount}});return e.playing&&e.activeCutNumber!==null&&t.push({key:`${ss}.playingCut`,params:{nn:String(e.activeCutNumber).padStart(2,"0")}}),e.workspace==="layout"&&t.push({key:`${ss}.objects`,params:{n:e.objectCount}}),t.push({key:`${ss}.part`,params:{i:e.partIndex,n:e.partCount}}),t.push({key:`${ss}.fps`,params:{fps:e.fps}}),{hints:Bue(e),right:t}}function Aue(e,t){const n=e.parts.find(a=>a.partId===t),o=e.room.openings.length+e.room.props.length;return n?o+n.actors.length+n.props.length+n.cameras.length:o}const $M="bb.timelineOpen",EM="bb.rightPanelClosed";function xM(e,t){try{return(t??globalThis.localStorage)?.getItem(e)==="1"}catch{return!1}}function PM(e,t,n){try{(n??globalThis.localStorage)?.setItem(e,t?"1":"0")}catch{}}function Tue(e){return xM($M,e)}function Rue(e,t){PM($M,e,t)}function Due(e){return xM(EM,e)}function Oue(e,t){PM(EM,e,t)}const Bk="bb.stage.options",hd={grid:!0,labels:!0,fov:"all",fovChosen:!1,paths:!0,axis:!1,issues:!0,snap:!0,detail:!1};function Nue(e){if(!e)return{...hd};try{const t=JSON.parse(e),n=typeof t.fovChosen=="boolean"?t.fovChosen:t.fov
262==="selected"||t.fov==="none";return{...hd,...t,fovChosen:n}}catch{return{...hd}}}function _k(e,t){return{...e,fov:t,fovChosen:!0}}function Lue(e,t){return e.fovChosen?e:{...e,fov:e.detail||t==="camera"?"all":"selected"}}function Ak(e){return typeof Element<"u"&&e instanceof Element?e:null}function Kue(){const e=G(null),t=G(null),n=C(()=>Ose({hovered:e.value,lastPressed:t.value}));function o(i){e.value=dk(Ak(i.target))}function a(i){t.value=dk(Ak(i.target))}function s(){e.value=null}return Jn(()=>{document.addEventListener("pointerover",o),document.addEventListener("pointerdown",a,!0),document.documentElement.addEventListener("pointerleave",s)}),wn(()=>{document.removeEventListener("pointerover",o),document.removeEventListener("pointerdown",a,!0),document.documentElement.removeEventListener("pointerleave",s)}),{hovered:fl(e),lastPressed:fl(t),current:n}}function Fue(e){function t(){const{area:r,source:l}=e.area.current.value,c=document.activeElement;return{area:r,areaSource:l,focus:Nse(c),textEntry:Vw(c),overlay:e.overlays.top.value?.name??null,...e.context()}}function n(r,l){const c=t(),d=jse(Lse(r),c,l);if(!d)return;const u=Xw(d,c);if(u==="overlay"){e.overlays.top.value?.onAction(d)!==!1&&r.preventDefault();return}r.preventDefault(),e.run(d,u)}function o(r){n(r,"down")}function a(r){n(r,"up")}function s(){if(e.context().viewportMode==="walk")for(const r of Gse())e.run(r,"stage3d")}let i=null;Jn(()=>{i=e.target??window,i.addEventListener("keydown",o),i.addEventListener("keyup",a),i.addEventListener("blur",s)}),wn(()=>{i?.removeEventListener("keydown",o),i?.removeEventListener("keyup",a),i?.removeEventListener("blur",s),i=null})}function Hue(e){return e.hasSession?e.view:e.view==="start"?"start":"list"}function zue(e){return Array.isArray(e)?e[0]:e}function Tk(e){const t=zue(e.project);return typeof t=="string"&&t?{view:"workbench",projectId:t}:"new"in e&&e.new!==void 0?{view:"start"}:{view:"list"}}function jue(e,t){return e?.back===t?"back":"replace"}const Uue={class:"bb-export-section bb-handoff-settings","data-section":"handoff-settings"},Gue={class:"bb-export-section-title"},Vue={class:"bb-handoff-help"},Wue={key:0,class:"bb-handoff-row","data-field":"sceneBackground"},Xue={class:"bb-handoff-label"},Yue={class:"bb-handoff-body"},que=["src","alt"],Zue={class:"bb-handoff-note"},Jue={class:"bb-handoff-row","data-field":"styleDirection"},Que={class:"bb-handoff-label"},epe=["maxlength","placeholder"],tpe={class:"bb-handoff-row","data-field":"targetVideoModel"},npe={class:"bb-handoff-label"},ope={class:"bb-handoff-body"},ape=["value"],spe=["value"],ipe={key:0,class:"bb-handoff-note"},rpe={class:"bb-handoff-row","data-field":"extraRefs"},lpe={class:"bb-handoff-label"},cpe={class:"bb-handoff-body","data-handoff-refs":""},dpe={class:"bb-handoff-note"},upe=["data-handoff-ref"],ppe=["src","alt"],fpe={class:"bb-handoff-ref-fields"},mpe={class:"bb-handoff-ref-line"},hpe=["value","aria-label","onBlur"],bpe={class:"bb-handoff-note"},gpe=["value","placeholder","aria-label","onBlur"],vpe={class:"bb-handoff-ref-line"},ype={class:"bb-handoff-btn"},kpe=["accept","disabled","onChange"],Spe=["onClick"],Ipe={key:0,class:"bb-handoff-error","data-handoff-ref-error":""},wpe={key:0,class:"bb-handoff-ref","data-handoff-ref-new":""},Mpe=["src"],$pe={class:"bb-handoff-ref-fields"},Epe={class:"bb-handoff-btn"},xpe=["accept","disabled"],Ppe={class:"bb-handoff-ref-line"},Cpe=["placeholder","aria-label"],Bpe=["aria-label"],_pe={value:"character"},Ape={value:"prop"},Tpe=["placeholder","aria-label"],Rpe={key:0,class:"bb-handoff-error"},Dpe={class:"bb-handoff-ref-line"},Ope=["disabled"],Npe={key:1},Lpe={class:"bb-handoff-image-count"},Kpe=nt({__name:"BbHandoffSettings",props:{snapshot:{},imageCount:{},imageLimit:{}},emits:["command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>Om().map(F=>({value:F,label:Uk[F]??F}))),s=C(()=>za(n.snapshot.targetVideoModel)?.maxSec??null),i=G(n.snapshot.styleDirection?.ko??"");Je(()=>n.snapshot.styleDirection?.ko??"",F=>{i.value=F});function r(){const F=i.value;F!==(n.snapshot.styleDirection?.ko??"")&&o("command",{type:"scene.setStyle",patch:{ko:F}})}function l(F){const B=F.target.value;B!==n.snapshot.targetVideoModel&&o("command",{type:"scene.setTargetModel",targetVideoModel:B})}const c=C(()=>[...n.snapshot.refs.characters.filter(F=>F.standalone).map(F=>({id:F.id,kind:"character",ref:F})),...n.snapshot.refs.props.filter(F=>F.standalone).map(F=>({id:F.id,kind:"prop",ref:F}))]);let d=null;try{d=$m().stageImgFile}catch{d=null}async function u(F){if(!tu.includes(F.type))return{errorKey:"tool.blockingBoard.refImage.badType"};if(F.size>fm)return{errorKey:"tool.blockingBoard.refImage.tooLarge"};const B=d?await d(F):null;return!B?.url||!B.tempMdiaId?{errorKey:"tool.blockingBoard.refImage.failed"}:{media:{mdiaId:B.tempMdiaId,url:B.url,wdth:B.wdth??null,hegt:B.hegt??null}}}const p=G(null),f=G({});async function h(F,B){const j=B.target,ee=j.files?.[0];if(!ee)return;f.value={...f.value,[F]:""},p.value=F;const D=await u(ee);p.value=null,"media"in D?o("command",{type:"ref.setMedia",target:{kind:"ref",refId:F},media:D.media}):f.value={...f.value,[F]:D.errorKey};try{j.value=""}catch{}}function b(F,B){const j=B.target,ee=j.value.trim();if(!ee){j.value=F.ref.name;return}ee!==F.ref.name&&o("command",{type:"ref.setInfo",target:{kind:"ref",id:F.id}
262,patch:{name:ee}})}function I(F,B){const j=B.target.value;j!==(F.ref.description??"")&&o("command",{type:"ref.setInfo",target:{kind:"ref",id:F.id},patch:{description:j}})}function y(F){o("command",{type:"ref.removeStandalone",refId:F})}const w=G(!1),M=G({kind:"prop",name:"",description:"",media:null}),x=G(!1),_=G("");function O(){M.value={kind:"prop",name:"",description:"",media:null},_.value="",w.value=!0}async function A(F){const B=F.target,j=B.files?.[0];if(!j)return;_.value="",x.value=!0;const ee=await u(j);x.value=!1,"media"in ee?M.value.media=ee.media:_.value=ee.errorKey;try{B.value=""}catch{}}const N=C(()=>!x.value&&!!M.value.media&&M.value.name.trim()!=="");function K(){const F=M.value,B=F.name.trim();if(!N.value||!F.media)return;const j=F.description.trim();o("command",{type:"ref.addStandalone",kind:F.kind,name:B,media:{...F.media},...j?{description:j}:{}}),w.value=!1}return(F,B)=>(v(),k("section",Uue,[m("span",Gue,S(F.$t("tool.blockingBoard.handoffSettings.title")),1),m("p",Vue,S(F.$t("tool.blockingBoard.handoffSettings.help")),1),e.snapshot.sceneBackground?(v(),k("div",Wue,[m("span",Xue,S(F.$t("tool.blockingBoard.scenePanel.background")),1),m("div",Yue,[m("img",{class:"bb-handoff-bg-thumb",src:e.snapshot.sceneBackground.url,alt:F.$t("tool.blockingBoard.scenePanel.background")},null,8,que),m("p",Zue,S(F.$t("tool.blockingBoard.scenePanel.backgroundLocked")),1)])])):H("",!0),m("label",Jue,[m("span",Que,S(F.$t("tool.blockingBoard.scenePanel.style")),1),Zt(m("textarea",{"onUpdate:modelValue":B[0]||(B[0]=j=>i.value=j),class:"bb-handoff-style",rows:"3",maxlength:g(dr),placeholder:F.$t("tool.blockingBoard.scenePanel.stylePlaceholder"),onBlur:r},null,40,epe),[[Nn,i.value]])]),m("label",tpe,[m("span",npe,S(F.$t("tool.blockingBoard.scenePanel.targetModel")),1),m("div",ope,[m("select",{class:"bb-handoff-select",value:e.snapshot.targetVideoModel,onChange:l},[(v(!0),k(ae,null,Me(a.value,j=>(v(),k("option",{key:j.value,value:j.value},S(j.label),9,spe))),128))],40,ape),s.value!==null?(v(),k("p",ipe,S(F.$t("tool.blockingBoard.handoffSettings.maxPart",{n:s.value})),1)):H("",!0)])]),m("div",rpe,[m("span",lpe,S(F.$t("tool.blockingBoard.handoffSettings.references.title")),1),m("div",cpe,[m("p",dpe,S(F.$t("tool.blockingBoard.handoffSettings.references.help")),1),(v(!0),k(ae,null,Me(c.value,j=>(v(),k("div",{key:j.id,class:"bb-handoff-ref","data-handoff-ref":j.id},[j.ref.media?(v(),k("img",{key:0,class:"bb-handoff-ref-thumb",src:j.ref.media.url,alt:j.ref.name},null,8,ppe)):H("",!0),m("div",fpe,[m("div",mpe,[m("input",{class:"bb-handoff-input",type:"text","data-handoff-ref-name":"",maxlength:"60",value:j.ref.name,"aria-label":F.$t("tool.blockingBoard.handoffSettings.references.name"),onBlur:ee=>b(j,ee)},null,40,hpe),m("span",bpe,S(F.$t(j.kind==="character"?"tool.blockingBoard.handoffSettings.references.kindCharacter":"tool.blockingBoard.handoffSettings.references.kindProp")),1)]),m("textarea",{class:"bb-handoff-style",rows:"2","data-handoff-ref-desc":"",maxlength:"500",value:j.ref.description??"",placeholder:F.$t("tool.blockingBoard.handoffSettings.references.descPlaceholder"),"aria-label":F.$t("tool.blockingBoard.handoffSettings.references.description"),onBlur:ee=>I(j,ee)},null,40,gpe),m("div",vpe,[m("label",ype,[We(S(p.value===j.id?F.$t("tool.blockingBoard.refImage.uploading"):F.$t("tool.blockingBoard.handoffSettings.references.replace"))+" ",1),m("input",{type:"file",class:"sr-only","data-handoff-ref-image":"",accept:g(nu),disabled:p.value===j.id,onChange:ee=>h(j.id,ee)},null,40,kpe)]),m("button",{type:"button",class:"bb-handoff-btn","data-handoff-ref-remove":"",onClick:ee=>y(j.id)},S(F.$t("tool.blockingBoard.handoffSettings.references.remove")),9,Spe)]),f.value[j.id]?(v(),k("p",Ipe,S(F.$t(f.value[j.id])),1)):H("",!0)])],8,upe))),128)),w.value?(v(),k("div",wpe,[M.value.media?(v(),k("img",{key:0,class:"bb-handoff-ref-thumb",src:M.value.media.url,alt:""},null,8,Mpe)):H("",!0),m("div",$pe,[m("label",Epe,[We(S(x.value?F.$t("tool.blockingBoard.refImage.uploading"):F.$t("tool.blockingBoard.handoffSettings.references.pick"))+" ",1),m("input",{type:"file",class:"sr-only","data-handoff-ref-new-image":"",accept:g(nu),disabled:x.value,onChange:A},null,40,xpe)]),m("div",Ppe,[Zt(m("input",{"onUpdate:modelValue":B[1]||(B[
2621]=j=>M.value.name=j),class:"bb-handoff-input",type:"text","data-handoff-ref-new-name":"",maxlength:"60",placeholder:F.$t("tool.blockingBoard.handoffSettings.references.namePlaceholder"),"aria-label":F.$t("tool.blockingBoard.handoffSettings.references.name")},null,8,Cpe),[[Nn,M.value.name]]),Zt(m("select",{"onUpdate:modelValue":B[2]||(B[2]=j=>M.value.kind=j),class:"bb-handoff-select bb-handoff-kind","data-handoff-ref-new-kind":"","aria-label":F.$t("tool.blockingBoard.handoffSettings.references.kind")},[m("option",_pe,S(F.$t("tool.blockingBoard.handoffSettings.references.kindCharacter")),1),m("option",Ape,S(F.$t("tool.blockingBoard.handoffSettings.references.kindProp")),1)],8,Bpe),[[ps,M.value.kind]])]),Zt(m("textarea",{"onUpdate:modelValue":B[3]||(B[3]=j=>M.value.description=j),class:"bb-handoff-style",rows:"2","data-handoff-ref-new-desc":"",maxlength:"500",placeholder:F.$t("tool.blockingBoard.handoffSettings.references.descPlaceholder"),"aria-label":F.$t("tool.blockingBoard.handoffSettings.references.description")},null,8,Tpe),[[Nn,M.value.description]]),_.value?(v(),k("p",Rpe,S(F.$t(_.value)),1)):H("",!0),m("div",Dpe,[m("button",{type:"button",class:"bb-handoff-btn","data-handoff-ref-new-confirm":"",disabled:!N.value,onClick:K},S(F.$t("tool.blockingBoard.handoffSettings.references.confirm")),9,Ope),m("button",{type:"button",class:"bb-handoff-btn",onClick:B[4]||(B[4]=j=>w.value=!1)},S(F.$t("tool.blockingBoard.handoffSettings.references.cancel")),1)])])])):(v(),k("div",Npe,[m("button",{type:"button",class:"bb-handoff-btn","data-handoff-ref-add":"",onClick:O},S(F.$t("tool.blockingBoard.handoffSettings.references.add")),1)]))])]),m("p",Lpe,S(F.$t("tool.blockingBoard.refImage.count",{n:e.imageCount,max:e.imageLimit??"â"})),1)]))}}),Fpe=Object.assign(ot(Kpe,[["__scopeId","data-v-2fca36c7"]]),{__name:"BbExportBbHandoffSettings"}),Hpe={class:"bb-indeterminate-bar",role:"progressbar","aria-valuemin":"0","aria-valuemax":"100"},zpe=nt({__name:"BbIndeterminateBar",setup(e){return(t,n)=>(v(),k("div",Hpe,[...n[0]||(n[0]=[m("div",{class:"bb-indeterminate-bar-fill"},null,-1)])]))}}),Sm=Object.assign(ot(zpe,[["__scopeId","data-v-4dcdb9a0"]]),{__name:"BbExportBbIndeterminateBar"}),iu=1280,ru=720,zs=30,jpe={mp4:["video/mp4;codecs=avc1.640028","video/mp4;codecs=avc1","video/mp4"],webm:["video/webm;codecs=vp9","video/webm;codecs=vp8"]},Zc={mp4:{ext:"mp4",mime:"video/mp4"},webm:{ext:"webm",mime:"video/webm"}},Im=6e6,Upe=1e4,Gpe=1e3,Vpe=2e3;function CM(e,t){const n=[];for(let o=0;o/t<e-xn;o++)n.push(o/t);return n}function Wpe(e,t,n){const o=e.parts.findIndex(i=>i.partId===t);if(o<0)return[Le("EXPORT_BLOCKED",{path:"parts"})];const a=e.parts[o],s=wu(n,t);return a.timeline.cuts.length===0&&!s.some(i=>i.code==="CUT_TRACK_EMPTY")&&s.push(Le("CUT_TRACK_EMPTY",{path:`parts[${o}].timeline.cuts`,timeRange:{startSec:0,endSec:a.durationSec}})),CM(a.durationSec,zs).length===0&&s.push(Le("EXPORT_BLOCKED",{path:`parts[${o}].durationSec`})),s}function lf(e,t){return e.hasRecorderApis?jpe[t].find(n=>e.isTypeSupported(n))??null:null}function BM(e,t,n){return e==="prepare"?0:e==="models"?5:e==="finalize"?95:n>0?5+Math.floor(90*t/n):5}function Xpe(e,t){return{targetId:e.targetId,timeSec:e.timeRange?.startSec,partId:Object.entries(t.byPart).find(([,n])=>n.includes(e))?.[0],path:e.path}}function Rk(e){return e.timeRange?`${e.timeRange.startSec.toFixed(1)}â${e.timeRange.endSec.toFixed(1)}s`:null}const Ype=["data-phase","role","aria-live"],qpe={class:"bb-rec-row"},Zpe={class:"bb-rec-step"},Jpe={class:"bb-rec-percent"},Qpe=["aria-valuenow"],efe={key:1,class:"bb-rec-done"},tfe={class:"bb-rec-blocked-title"},nfe={class:"bb-rec-no-files"},ofe={class:"bb-rec-issues"},afe=["data-code","data-target-id","onClick"],sfe={key:0,class:"bb-rec-issue-time"},ife={class:"bb-rec-failed-title"},rfe={class:"bb-rec-failed-message"},lfe={class:"bb-rec-failed-hint"},cfe=nt({__name:"BbRecordProgress",props:{status:{}},emits:["cancel","dismiss","issue"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>n.status.phase==="running"?BM(n.status.step,n.status.frame,n.status.frameCount):0);function s(i){return`tool.blockingBoard.hint.${i.toLowerCase().replace(/_([a-z])/g,(l,c)=>c.toUpperCase())}`}return(i,r)=>e.status.phase!=="idle"?(v(),k("div",{key:0,class:"bb-rec-progress","data-
262phase":e.status.phase,role:e.status.phase==="blocked"||e.status.phase==="failed"?"alert":"status","aria-live":e.status.phase==="running"||e.status.phase==="done"?"polite":void 0},[e.status.phase==="running"?(v(),k(ae,{key:0},[m("div",qpe,[m("span",Zpe,S(i.$t(`tool.blockingBoard.rec.step.${e.status.step}`,{n:e.status.frame,total:e.status.frameCount})),1),m("span",Jpe,S(a.value)+"%",1),m("button",{type:"button",class:"bb-rec-cancel btn-md",onClick:r[0]||(r[0]=l=>o("cancel"))},S(i.$t("tool.blockingBoard.rec.cancel")),1)]),m("div",{class:"bb-rec-bar",role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":a.value},[m("div",{class:"bb-rec-bar-fill",style:wt({width:`${a.value}%`})},null,4)],8,Qpe)],64)):e.status.phase==="done"?(v(),k("p",efe,S(i.$t("tool.blockingBoard.rec.done",{format:e.status.format==="mp4"?"MP4":"WebM"})),1)):e.status.phase==="blocked"?(v(),k(ae,{key:2},[m("p",tfe,S(i.$t("tool.blockingBoard.rec.blockedTitle",{count:e.status.issues.length})),1),m("p",nfe,S(i.$t("tool.blockingBoard.rec.noFiles")),1),m("ul",ofe,[(v(!0),k(ae,null,Me(e.status.issues,(l,c)=>(v(),k("li",{key:c},[m("button",{type:"button",class:"bb-rec-issue","data-code":l.code,"data-target-id":l.targetId,onClick:d=>o("issue",l)},[m("span",null,S(i.$t(l.messageKey,l.params??{})),1),g(Rk)(l)?(v(),k("span",sfe,S(g(Rk)(l)),1)):H("",!0)],8,afe)]))),128))]),m("button",{type:"button",class:"bb-rec-dismiss btn-md",onClick:r[1]||(r[1]=l=>o("dismiss"))},S(i.$t("tool.blockingBoard.rec.dismiss")),1)],64)):e.status.phase==="failed"?(v(),k(ae,{key:3},[m("p",ife,S(i.$t("tool.blockingBoard.rec.failedTitle")),1),m("p",rfe,S(i.$t(e.status.issue.messageKey,e.status.issue.params??{})),1),m("p",lfe,S(i.$t(s(e.status.issue.code))),1),m("button",{type:"button",class:"bb-rec-dismiss btn-md",onClick:r[2]||(r[2]=l=>o("dismiss"))},S(i.$t("tool.blockingBoard.rec.dismiss")),1)],64)):H("",!0)],8,Ype)):H("",!0)}}),dfe=Object.assign(ot(cfe,[["__scopeId","data-v-414e3393"]]),{__name:"BbExportBbRecordProgress"}),ufe=["role","aria-modal"],pfe={class:"bb-export-topbar"},ffe={id:"bb-export-title",class:"bb-export-title"},mfe=["aria-label"],hfe={class:"bb-export-layout"},bfe={class:"bb-export-main"},gfe={class:"bb-export-main-head"},vfe=["title"],yfe={class:"bb-export-blocked-issues"},kfe={role:"tablist",class:"bb-export-lang-tabs"},Sfe=["aria-selected"],Ife=["aria-selected"],wfe={key:0,class:"bb-export-prose-banner","data-export-prose-banner":""},Mfe={class:"bb-export-prose-text"},$fe=["disabled"],Efe={key:1,class:"bb-export-prompt","data-export-prompt":""},xfe={key:0,class:"bb-export-prompt-title"},Pfe={class:"bb-export-side"},Cfe={class:"bb-export-section","data-section":"copy"},Bfe=["disabled"],_fe=["disabled"],Afe=["disabled"],Tfe={class:"bb-export-section bb-export-downloads","data-section":"files"},Rfe={class:"bb-export-downloads-title bb-export-section-title"},Dfe={class:"bb-export-tiles"},Ofe={class:"bb-export-tile-name"},Nfe=["disabled"],Lfe={class:"bb-export-tile-name"},Kfe=["disabled"],Ffe={class:"bb-export-tile-name"},Hfe=["disabled"],zfe={class:"bb-export-tile-name"},jfe=["disabled"],Ufe={class:"bb-export-tile-name"},Gfe=["disabled"],Vfe={class:"bb-export-tile-name"},Wfe=["disabled"],Xfe={class:"bb-export-tile-name"},Yfe={class:"bb-export-advanced bb-export-tile-advanced"},qfe={class:"bb-export-tile-name"},Zfe=["disabled"],Jfe=["disabled"],Qfe={class:"bb-export-section","data-section":"record"},eme={class:"bb-export-section-title"},tme={class:"bb-rec-row"},nme=["aria-label"],ome=["aria-checked","disabled","title","onClick"],ame=["title"],sme=["checked","disabled"],ime=["disabled"],rme={key:0,class:"bb-rec-unsupported"},lme=nt({__name:"BbExportDrawer",props:{open:{type:Boolean},prompt:{default:null},proseFresh:{type:Boolean,default:!0},proseWriting:{type:Boolean,default:!1},blocked:{},lang:{},busy:{type:Boolean},copied:{},embedded:{type:Boolean},recording:{default:()=>({phase:"idle"})},recordSupported:{type:Boolean,default:!0},shotbookProgress:{default:null},pngCutNumber:{default:null},pngBusy:{type:Boolean},recordFormat:{default:"webm"},recordFormats:{default:()=>({mp4:!0,webm:!0})},recordGrayscale:{type:Boolean,default:!1},grayscaleSupported:{type:Boolean,default:!0},snapshot:{},imageCount:{},imageLimit:{}},emits:["close","update:lang","copy-all","write-prose","send-video","download-json","download-shotlist","download-png","download-ir","download-video-ir","record-start","update:record-format","update:record-grayscale","record-cancel","record-dismiss","record-issue","download-cut-png","download-shotbook-png","download-shotbook-zip","cancel-sh
262otbook","command"],setup(e,{emit:t}){const n=e,o=t,a=C(()=>!!n.blocked),s=C(()=>n.recording.phase==="running"),i=[{format:"mp4",key:"formatMp4",name:"MP4"},{format:"webm",key:"formatWebm",name:"WebM"}],r=C(()=>!!n.shotbookProgress),l=C(()=>n.prompt?n.prompt[n.lang]:""),c=new Set([...Object.values(au.titles),...Object.values(su.titles)]),d=[au,su].map(h=>h.timelineTitle("\0","").split("\0")[0]),u=C(()=>l.value.split(` 263`).map(h=>({text:h,title:c.has(h)||d.some(b=>h.startsWith(b))}))),p=G(null);let f=null;return Je(()=>n.open,async h=>{h?(f=document.activeElement instanceof HTMLElement?document.activeElement:null,await hn(),p.value?.focus()):(f?.focus(),f=null)}),(h,b)=>{const I=vn;return e.open||e.embedded?(v(),k("div",{key:0,class:qe(e.embedded?"bb-export-host":"bb-export-backdrop"),onClick:b[23]||(b[23]=un(y=>!e.embedded&&o("close"),["self"]))},[m("div",{class:qe(["bb-export-drawer",e.embedded?"bb-export-drawer--embedded":"shadow-smd1"]),role:e.embedded?"region":"dialog","aria-modal":e.embedded?void 0:"true","aria-labelledby":"bb-export-title"},[m("div",pfe,[m("h2",ffe,S(h.$t("tool.blockingBoard.export.title")),1),e.embedded?H("",!0):(v(),k("button",{key:0,ref_key:"closeButton",ref:p,type:"button",class:"bb-export-close btn-md","aria-label":h.$t("tool.blockingBoard.close"),onClick:b[0]||(b[0]=y=>o("close"))},[ce(I,{name:"i-lucide-x",class:"size-[16px]"})],8,mfe))]),m("div",hfe,[m("div",bfe,[m("div",gfe,[m("div",{class:qe(["bb-export-summary",{"bb-export-summary--blocked":a.value}]),title:e.blocked?h.$t("tool.blockingBoard.export.summaryBlocked"):h.$t("tool.blockingBoard.export.summaryOk")},[ce(I,{name:e.blocked?"i-lucide-circle-x":"i-lucide-circle-check",class:"bb-export-summary-icon"},null,8,["name"]),e.blocked?(v(),k(ae,{key:0},[We(S(h.$t("tool.blockingBoard.export.summaryBlocked"))+" ",1),m("ul",yfe,[(v(!0),k(ae,null,Me(e.blocked.issues,(y,w)=>(v(),k("li",{key:w},S(h.$t(y.messageKey,y.params??{})),1))),128))])],64)):(v(),k(ae,{key:1},[We(S(h.$t("tool.blockingBoard.export.summaryOk")),1)],64))],10,vfe),m("div",kfe,[m("button",{type:"button",role:"tab",class:"bb-export-lang-tab","data-export-lang":"ko","aria-selected":e.lang==="ko"?"true":"false",onClick:b[1]||(b[1]=y=>o("update:lang","ko"))},S(h.$t("tool.blockingBoard.export.langKo")),9,Sfe),m("button",{type:"button",role:"tab",class:"bb-export-lang-tab","data-export-lang":"en","aria-selected":e.lang==="en"?"true":"false",onClick:b[2]||(b[2]=y=>o("update:lang","en"))},S(h.$t("tool.blockingBoard.export.langEn")),9,Ife)])]),e.prompt&&!e.proseFresh?(v(),k("div",wfe,[m("div",Mfe,[m("span",null,S(h.$t(e.proseWriting?"tool.blockingBoard.handoff.prose.writing":"tool.blockingBoard.handoff.prose.banner")),1),e.proseWriting?(v(),et(Sm,{key:0,"data-export-prose-loading":""})):H("",!0)]),m("button",{type:"button",class:"btn-md bb-export-btn--secondary","data-export-write-prose":"",disabled:e.proseWriting,onClick:b[3]||(b[3]=y=>o("write-prose"))},S(h.$t("tool.blockingBoard.handoff.prose.write")),9,$fe)])):H("",!0),e.prompt?(v(),k("pre",Efe,[(v(!0),k(ae,null,Me(u.value,(y,w)=>(v(),k(ae,{key:w},[y.title?(v(),k("strong",xfe,S(y.text),1)):(v(),k(ae,{key:1},[We(S(y.text),1)],64)),b[24]||(b[24]=We(S(` 264`),-1))],64))),128))])):H("",!0)]),m("div",Pfe,[e.snapshot?(v(),et(Fpe,{key:0,snapshot:e.snapshot,"image-count":e.imageCount??0,"image-limit":e.imageLimit??null,onCommand:b[4]||(b[4]=y=>o("command",y))},null,8,["snapshot","image-count","image-limit"])):H("",!0),m("section",Cfe,[m("button",{type:"button",class:"bb-export-copy-all-ko btn-md bb-export-btn--primary bb-export-btn--main","data-export-copy":"ko",disabled:a.value,onClick:b[5]||(b[5]=y=>o("copy-all","ko"))},[ce(I,{name:"i-lucide-copy",class:"size-[16px]"}),e.copied==="all:ko"?(v(),k(ae,{key:0},[We(S(h.$t("tool.blockingBoard.export.copied")),1)],64)):(v(),k(ae,{key:1},[We(S(h.$t("tool.blockingBoard.export.copyAll"))+" · "+S(h.$t("tool.blockingBoard.export.langKo")),1)],64))],8,Bfe),m("button",{type:"button",class:"bb-export-copy-all-en btn-md bb-export-btn--secondary","data-export-copy":"en",disabled:a.value,onClick:b[6]||(b[6]=y=>o("copy-all","en"))},[e.copied==="all:en"?(v(),k(ae,{key:0}
264,[We(S(h.$t("tool.blockingBoard.export.copied")),1)],64)):(v(),k(ae,{key:1},[We(S(h.$t("tool.blockingBoard.export.copyAll"))+" · "+S(h.$t("tool.blockingBoard.export.langEn")),1)],64))],8,_fe),m("button",{type:"button",class:"bb-export-send-video btn-md bb-export-btn--secondary",disabled:a.value||e.busy,onClick:b[7]||(b[7]=y=>o("send-video"))},[ce(I,{name:"i-lucide-clapperboard",class:"size-[14px]"}),We(" "+S(h.$t("tool.blockingBoard.export.sendVideo")),1)],8,Afe)]),m("section",Tfe,[m("span",Rfe,S(h.$t("tool.blockingBoard.export.downloads")),1),m("div",Dfe,[m("button",{type:"button",class:"bb-export-download-json bb-export-tile",onClick:b[8]||(b[8]=y=>o("download-json"))},[m("span",Ofe,[ce(I,{name:"i-lucide-file-json",class:"bb-export-tile-icon"}),We(" "+S(h.$t("tool.blockingBoard.export.tile.board")),1)]),b[25]||(b[25]=m("span",{class:"bb-export-tile-format"},"JSON",-1))]),m("button",{type:"button",class:"bb-export-download-shotlist-txt bb-export-tile",disabled:a.value,onClick:b[9]||(b[9]=y=>o("download-shotlist","txt"))},[m("span",Lfe,[ce(I,{name:"i-lucide-list",class:"bb-export-tile-icon"}),We(" "+S(h.$t("tool.blockingBoard.export.downloadShotlist")),1)]),b[26]||(b[26]=m("span",{class:"bb-export-tile-format"},"TXT",-1))],8,Nfe),m("button",{type:"button",class:"bb-export-download-shotlist-json bb-export-tile",disabled:a.value,onClick:b[10]||(b[10]=y=>o("download-shotlist","json"))},[m("span",Ffe,[ce(I,{name:"i-lucide-list",class:"bb-export-tile-icon"}),We(" "+S(h.$t("tool.blockingBoard.export.downloadShotlist")),1)]),b[27]||(b[27]=m("span",{class:"bb-export-tile-format"},"JSON",-1))],8,Kfe),m("button",{type:"button",class:"bb-export-download-png bb-export-tile",disabled:e.pngBusy,onClick:b[11]||(b[11]=y=>o("download-png"))},[m("span",zfe,[ce(I,{name:"i-lucide-map",class:"bb-export-tile-icon"}
264),We(" "+S(h.$t("tool.blockingBoard.export.tile.plan")),1)]),b[28]||(b[28]=m("span",{class:"bb-export-tile-format"},"PNG",-1))],8,Hfe),m("button",{type:"button",class:"bb-shb-download-cut bb-export-tile",disabled:a.value||r.value||e.pngCutNumber==null,onClick:b[12]||(b[12]=y=>o("download-cut-png"))},[m("span",Ufe,[ce(I,{name:"i-lucide-image",class:"bb-export-tile-icon"}),e.shotbookProgress?.mode==="cut"?(v(),k(ae,{key:0},[We(S(h.$t("tool.blockingBoard.export.shotbook.progress",{done:e.shotbookProgress.done,total:e.shotbookProgress.total})),1)],64)):e.pngCutNumber!=null?(v(),k(ae,{key:1},[We(S(h.$t("tool.blockingBoard.export.shotbook.cutPng",{n:e.pngCutNumber})),1)],64)):(v(),k(ae,{key:2},[We(S(h.$t("tool.blockingBoard.export.shotbook.cutPngNone")),1)],64))]),b[29]||(b[29]=m("span",{class:"bb-export-tile-format"},"PNG",-1))],8,jfe),m("button",{type:"button",class:"bb-shb-download-sheet bb-export-tile",disabled:a.value||r.value,onClick:b[13]||(b[13]=y=>o("download-shotbook-png"))},[m("span",Vfe,[ce(I,{name:"i-lucide-layout-grid",class:"bb-export-tile-icon"}),e.shotbookProgress?.mode==="sheet"?(v(),k(ae,{key:0},[We(S(h.$t("tool.blockingBoard.export.shotbook.progress",{done:e.shotbookProgress.done,total:e.shotbookProgress.total})),1)],64)):(v(),k(ae,{key:1},[We(S(h.$t("tool.blockingBoard.export.tile.shotbook")),1)],64))]),b[30]||(b[30]=m("span",{class:"bb-export-tile-format"},"PNG",-1))],8,Gfe),m("button",{type:"button",class:"bb-shb-download-zip bb-export-tile",disabled:a.value||r.value,onClick:b[14]||(b[14]=y=>o("download-shotbook-zip"))},[m("span",Xfe,[ce(I,{name:"i-lucide-folder-archive",class:"bb-export-tile-icon"}),e.shotbookProgress?.mode==="zip"?(v(),k(ae,{key:0},[We(S(h.$t("tool.blockingBoard.export.shotbook.progress",{done:e.shotbookProgress.done,total:e.shotbookProgress.total})),1)],64)):(v(),k(ae,{key:1},[We(S(h.$t("tool.blockingBoard.export.tile.shotbook")),1)],64))]),b[31]||(b[31]=m("span",{class:"bb-export-tile-format"},"ZIP",-1))],8,Wfe),m("details",Yfe,[m("summary",null,[m("span",qfe,[ce(I,{name:"i-lucide-braces",class:"bb-export-tile-icon"}),We(" "+S(h.$t("tool.blockingBoard.export.advanced")),1)]),b[32]||(b[32]=m("span",{class:"bb-export-tile-format"},"Shot IR · Video IR",-1))]),m("button",{type:"button",class:"bb-export-download-ir btn-md bb-export-btn--quiet",disabled:a.value,onClick:b[15]||(b[15]=y=>o("download-ir"))},S(h.$t("tool.blockingBoard.export.downloadIr")),9,Zfe),m("button",{type:"button",class:"bb-vir-download btn-md bb-export-btn--quiet",disabled:a.value,onClick:b[16]||(b[16]=y=>o("download-video-ir"))},S(h.$t("tool.blockingBoard.export.downloadVideoIr")),9,Jfe)])]),r.value?(v(),k("button",{key:0,type:"button",class:"bb-shb-cancel btn-md bb-export-btn--quiet",onClick:b[17]||(b[17]=y=>o("cancel-shotbook"))},S(h.$t("tool.blockingBoard.export.shotbook.cancel")),1)):H("",!0)]),m("section",Qfe,[m("span",eme,S(h.$t("tool.blockingBoard.rec.start")),1),m("div",tme,[m("div",{role:"radiogroup",class:"bb-rec-formats","aria-label":h.$t("tool.blockingBoard.rec.start")},[(v(),k(ae,null,Me(i,y=>m("button",{key:y.format,type:"button",role:"radio",class:"bb-rec-format btn-md","aria-checked":e.recordFormat===y.format?"true":"false",disabled:!e.recordFormats[y.format]||s.value,title:e.recordFormats[y.format]?void 0:h.$t("tool.blockingBoard.rec.formatUnsupported",{format:y.name}),onClick:w=>o("update:record-format",y.format)},S(h.$t(`tool.blockingBoard.rec.${y.key}`)),9,ome)),64))],8,nme),m("label",{class:"bb-rec-grayscale",title:e.grayscaleSupported?void 0:h.$t("tool.blockingBoard.rec.grayscaleUnsupported")},[We(S(h.$t("tool.blockingBoard.rec.grayscale"))+" ",1),m("input",{type:"checkbox",class:"bb-switch",role:"switch",checked:e.recordGrayscale,disabled:!e.grayscaleSupported||s.value,onChange:b[18]||(b[18]=y=>o("update:record-grayscale",y.target.checked))},null,40,sme)],8,ame)]),m("button",{type:"button",class:"bb-rec-start btn-md bb-export-btn--secondary",disabled:!e.recordSupported||e.recording.phase==="running",onClick:b[19]||(b[19]=y=>o("record-start"))},[ce(I,{name:"i-lucide-circle-dot",class:"size-[14px]"}),We(" "+S(h.$t("tool.blockingBoard.rec.start")),1)],8,ime),e.recordSupported?H("",!0):(v(),k("span",rme,S(h.$t("tool.blockingBoard.rec.unsupported")),1)),e.recording.phase!=="idle"?(v(),et(dfe,{key:1,status:e.recording,onCancel:b[20]||(b[20]=y=>o("record-cancel")),onDismiss:b[21]||(b[21]=y=>o("record-dismiss")),onIssue:b[22]||(b[22]=y=>o("record-issue",y))},null,8,["status"])):H("",!0)])])])],10,ufe)],2)):H("",!0)}}}),cme=Object.assign(ot(lme,[["__scopeId","data-v-a4109bc5"]]),{__name:"BbExportDrawer"}),dme={key:0,class:"bb-handoff-modal"},ume={class:"bb-handoff-dialog shadow-smd1",role:"dialog","aria-modal":"true","aria-labelledby":"bb-handoff-title"},pme={class:"bb-handoff-header"},fme={id:"bb-handoff-title"},mme={class:"bb-handoff-body"},hme={class:"bb-handoff-section"},bme={class:"bb-handoff-section-head"},gme={class:"bb-handoff-count"},vme={key:0,class:"bb-handoff-note"},yme={key:1,class:"bb-handoff-list"},kme=["data-key"],Sme=["src"],Ime={class:"bb-handoff-item-tag"},wme={class:"bb-handoff-item-name"},Mme={key:0,class:"bb-handoff-item-kind"},$me=["aria-pressed","disabled","onClick"],Eme={key:2,class:"bb-handoff-over",role:"alert"},xme={class:"bb-handoff-section"},Pme={class:"bb-handoff-section-head"},Cme={class:"bb-handoff-toggle"},Bme=["checked","disabled"],_me={key:0,class:"bb-handoff-note bb-handoff-recording-reason"},Ame={class:"bb-handoff-toggle"},Tme=["disabled"],Rme={key:0,class:"bb-handoff-note bb-handoff-recording-reuse"},Dme={key:1,class:"bb-handoff-note bb-handoff-recording-new"},Ome={class:"bb-handoff-section bb-handoff-prompt"},Nme={class:"bb-handoff-section-head"},Lme={key:0,class:"bb-handoff-length","data-handoff-length":""},Kme={key:0,class:"bb-handoff-note bb-handoff-prose-writing",role:"status"},Fme={key:2,class:"bb-handoff-prose-error",role:"alert"},Hme={class:"bb-handoff-prose-actions"},zme=["disabled"],jme=["disabled"],Ume={key:3,class:"bb-handoff-preview","data-handoff-preview":""},Gme=["disabled"],Vme={key:5,class:"bb-handoff-warning","data-handoff-warning":"over-limit",role:"alert"},Wme={key:6,class:"bb-handoff-warning","data-handoff-warning":"multi-move"},Xme={key:7,class:"bb-handoff-warning bb-handoff-warning--error","data-handoff-warning":"name-duplicate",role:"alert"},Yme={key:0,class:"bb-handoff-overwrite"},qme={class:"bb-handoff-footer"},Zme=["data-step"],Jme=["aria-valuenow"],Qme={key:1,class:"bb-handoff-footer-note"},ehe=["disabled"],the=nt({__name:"BbVideoHandoffDialog",props:{open:{type:Boolean},snapshot:{},partId:{},mp4Supported:{type:Boolean},hasExistingDraft:{type:Boolean},progress:{},recordStatus:{},promptEn:{},promptLength:{},promptMax:{},proseStatus:{},proseFailureKey:{},warnings:{}},emits:["send","send-without-prose","rewrite","selection","cancel"],setup(e,{emit:t}){const n=e,o=t,a=G(new Set),s=G(!0),i=G(!0),r=C(()=>Oa(n.snapshot,n.partId,{excluded:a.value})),l=C(()=>n.snapshot.parts.find(F=>
264F.partId===n.partId)??null),c=C(()=>!!n.progress),d=C(()=>n.recordStatus?.phase==="running"?BM(n.recordStatus.step,n.recordStatus.frame,n.recordStatus.frameCount):0),u=C(()=>n.mp4Supported?r.value.recording.reason==="out-of-range"?"tool.blockingBoard.handoff.recordingOutOfRange":r.value.recording.allowed?null:"tool.blockingBoard.handoff.recordingNoLimit":"tool.blockingBoard.handoff.recordingNoMp4"),p=C(()=>!u.value&&s.value),f=C(()=>{const F=l.value?.handoffRecording;return!p.value||!F?!1:F.boardKey===IM(n.snapshot,n.partId,i.value)}),h=C(()=>n.proseStatus==="writing"),b=C(()=>n.proseStatus==="failed"),I=C(()=>n.warnings.flatMap(F=>F.kind==="multi-move"?[F.cutIndex]:[])),y=C(()=>n.warnings.find(F=>F.kind==="over-limit")),w=C(()=>n.warnings.flatMap(F=>F.kind==="name-duplicate"?F.names:[])),M=C(()=>!c.value&&!r.value.overImageLimit&&n.proseStatus==="ready"&&n.promptEn!==null&&w.value.length===0);function x(F){return`tool.blockingBoard.handoff.kind.${F}`}function _(F){const B=new Set(a.value);B.has(F)?B.delete(F):B.add(F),a.value=B}function O(){a.value=new Set,s.value=!0,i.value=!0}Je(()=>n.open,F=>{F&&O()},{immediate:!0});function A(){return{excluded:new Set(a.value),includeRecording:p.value,grayscale:i.value}}Je([()=>n.open,a,p,i],()=>{n.open&&o("selection",A())},{immediate:!0});function N(){M.value&&o("send",A())}function K(){c.value||r.value.overImageLimit||o("send-without-prose")}return(F,B)=>e.open?(v(),k("div",dme,[m("div",ume,[m("div",pme,[m("h2",fme,S(F.$t("tool.blockingBoard.handoff.title")),1)]),m("div",mme,[m("section",hme,[m("div",bme,[m("h3",null,S(F.$t("tool.blockingBoard.handoff.images")),1),m("span",gme,S(F.$t("tool.blockingBoard.handoff.count",{n:r.value.imageCount,limit:r.value.limits?.image??"â"})),1)]),r.value.items.length===0?(v(),k("p",vme,S(F.$t("tool.blockingBoard.handoff.noImages")),1)):(v(),k("ul",yme,[(v(!0),k(ae,null,Me(r.value.items,j=>(v(),k("li",{key:j.key,class:qe(["bb-handoff-item",{"bb-handoff-item-off":!j.tag}]),"data-key":j.key},[m("img",{src:j.media.url,alt:"",class:"bb-handoff-item-thumb"},null,8,Sme),m("span",Ime,S(j.tag??""),1),m("span",wme,S(j.kind==="background"?F.$t(x(j.kind)):j.name),1),j.kind!=="background"?(v(),k("span",Mme,S(F.$t(x(j.kind))),1)):H("",!0),m("button",{type:"button",class:"bb-handoff-item-exclude","aria-pressed":!j.tag,disabled:c.value,onClick:ee=>_(j.key)},S(F.$t(j.tag?"tool.blockingBoard.handoff.exclude":"tool.blockingBoard.handoff.include")),9,$me)],10,kme))),128))])),r.value.overImageLimit?(v(),k("p",Eme,S(F.$t("tool.blockingBoard.handoff.overLimit")),1)):H("",!0)]),m("section",xme,[m("div",Pme,[m("h3",null,S(F.$t("tool.blockingBoard.handoff.recording")),1)]),m("label",Cme,[m("input",{type:"checkbox",class:"bb-switch bb-handoff-include-recording",checked:p.value,disabled:!!u.value||c.value,onChange:B[0]||(B[0]=j=>s.value=j.target.checked)},null,40,Bme),m("span",null,S(F.$t("tool.blockingBoard.handoff.includeRecording")),1)]),u.value?(v(),k("p",_me,S(F.$t(u.value)),1)):H("",!0),m("label",Ame,[Zt(m("input",{"onUpdate:modelValue":B[1]||(B[1]=j=>i.value=j),type:"checkbox",class:"bb-switch bb-handoff-grayscale",disabled:!p.value||c.value},null,8,Tme),[[jk,i.value]]),m("span",null,S(F.$t("tool.blockingBoard.handoff.grayscale")),1)]),p.value?(v(),k(ae,{key:1},[f.value?(v(),k("p",Rme,S(F.$t("tool.blockingBoard.handoff.recordingReuse")),1)):(v(),k("p",Dme,S(F.$t("tool.blockingBoard.handoff.recordingNew",{sec:l.value?.durationSec??0})),1))],64)):H("",!0)]),m("section",Ome,[m("div",Nme,[m("h3",null,S(F.$t("tool.blockingBoard.handoff.prose.title")),1),e.promptEn?(v(),k("span",Lme,S(F.$t("tool.blockingBoard.handoff.prose.length",{n:e.promptLength,max:e.promptMax??"â"})),1)):H("",!0)]),h.value?(v(),k("p",Kme,S(F.$t("tool.blockingBoard.handoff.prose.writing")),1)):H("",!0),h.value?(v(),et(Sm,{key:1,"data-handoff-loading":""})):b.value?(v(),k("div",Fme,[m("span",null,S(e.proseFailureKey?F.$t(e.proseFailureKey):""),1),m("div",Hme,[m("button",{type:"button",class:"bb-handoff-small-btn bb-handoff-prose-retry",disabled:c.value,onClick:B[2]||(B[2]=j=>o("rewrite"))},S(F.$t("tool.blockingBoard.handoff.prose.retry")),9,zme),m("button",{type:"button",class:"bb-handoff-small-btn","data-handoff-without-prose":"",disabled:c.value||r.value.overImageLimit,onClick:K},S(F.$t("tool.blockingBoard.handoff.prose.withoutProse")),9,jme)])])):H("",!0),e.promptEn!==null?(v(),k("pre",Ume,S(e.promptEn),1)):H("",!0),e.proseStatus==="ready"?(v(),k("button",{key:4,type:"button",class:"bb-handoff-small-btn bb-handoff-rewrite","data-handoff-rewrite":"",disabled:c.value,onClick:B[3]||(B[3]=j=>o("rewrite"))},S(F.$t("tool.blockingBoard.handoff.prose.rewrite")),9,Gme)):H("",!0),y.value?(v(),k("p",Vme,S(F.$t("tool.blockingBoard.handoff.prose.overLimit",{n:y.value.length,max:y.value.max})),1)):H("",!0),I.value.length>0?(v(),k("p",Wme,S(F.$t("tool.blockingBoard.handoff.prose.multiMove",{cuts:I.value.join(", ")})),1)):H("",!0),w.value.length>0?(v(),k("p",Xme,S(F.$t("tool.blockingBoard.handoff.prose.nameDuplicate",{names:w.value.join(", ")})),1)):H("",!0)]),e.hasExistingDraft?(v(),k("p",Yme,S(F.$t("tool.blockingBoard.handoff.overwrite")),1)):H("",!0)]),m("div",qme,[e.progress?(v(),k("div",{key:0,class:"bb-handoff-footer-note bb-handoff-progress","data-step":e.progress.step,role:"status"},[m("span",null,S(F.$t(`tool.blockingBoard.handoff.step.${e.progress.step}`)),1),e.progress.step==="record"?(v(),k("div",{key:0,class:"bb-handoff-progress-bar",role:"progressbar","aria-valuemin":"
2640","aria-valuemax":"100","aria-valuenow":d.value},[m("div",{class:"bb-handoff-progress-fill",style:wt({width:`${d.value}%`})},null,4)],8,Jme)):(v(),et(Sm,{key:1}))],8,Zme)):(v(),k("span",Qme)),m("button",{type:"button",class:"bb-handoff-cancel",onClick:B[4]||(B[4]=j=>o("cancel"))},S(F.$t("tool.blockingBoard.cancel")),1),m("button",{type:"button",class:"bb-handoff-send",disabled:!M.value,onClick:N},S(F.$t("tool.blockingBoard.handoff.send")),9,ehe)])])])):H("",!0)}}),nhe=Object.assign(ot(the,[["__scopeId","data-v-b1f9fae4"]]),{__name:"BbExportBbVideoHandoffDialog"}),ohe="WEBM_FRAME_TRACE_v1",ahe=["TELEPORTATION_DETECTED","UNREALISTIC_SPEED","ACTOR_STATE_DESYNC"];function pl(e,t){const n=10**t;return Math.round(e*n)/n}function she(e,t,n,o){return{index:e,timeSec:pl(t,4),cutId:n.cutId,cameraId:n.cameraId,actors:o.map(a=>{const s=n.frameState.actors[a];return[pl(s.position.x,3),pl(s.position.y,3),pl(s.headingDeg,1),s.pose]})}}function ihe(e,t){return(e.byPart[t]??[]).filter(o=>ahe.includes(o.code)).map(o=>({code:o.code,severity:o.severity,targetId:o.targetId??null,startSec:o.timeRange?.startSec??null,endSec:o.timeRange?.endSec??null})).map((o,a)=>({h:o,i:a})).sort((o,a)=>{const s=o.h.startSec??1/0,i=a.h.startSec??1/0;return s===i?o.i-a.i:s-i}).map(({h:o})=>o)}function rhe(e){const t=e.snapshot.parts.find(n=>n.partId===e.partId);return{schema:ohe,projectId:e.snapshot.projectId,partId:e.partId,fps:zs,width:iu,height:ru,durationSec:t.durationSec,frameCount:e.frames.length,codec:e.codec,createdAt:new Date(e.createdAtMs).toISOString(),coordinates:{origin:"room-center",units:"m"},recordElapsedSec:pl(e.elapsedMs/1e3,2),actorIds:t.actors.map(n=>n.id),actorFields:["x","y","headingDeg","pose"],propEvents:t.timeline.propEvents.map(n=>({id:n.id,targetId:n.targetId,startSec:n.startSec,endSec:n.endSec,open:n.state.open,openAngleDeg:n.state.openAngleDeg??0})),hardConstraints:ihe(e.report,e.partId),frames:e.frames}}function lhe(e){const t=Sn({phase:"idle"}),n=C(()=>({mp4:lf(r(),"mp4")!==null,webm:lf(r(),"webm")!==null})),o=C(()=>n.value.mp4||n.value.webm),a=C(()=>e.supportsGrayscale());let s=null,i=null;function r(){return{hasRecorderApis:e.hasRecorderApis(),isTypeSupported:e.isTypeSupported}}function l(){i!==null&&(e.clearTimer(i),i=null)}function c(h,b,I){t.value={phase:"running",step:h,frame:b,frameCount:I}}async function d(h){if(t.value.phase==="running")return"busy";l();const{format:b}=h,I=lf(r(),b);if(!I)return t.value={phase:"failed",issue:Le("RECORDING_UNSUPPORTED",{path:""})},"unsupported";const y={cancelled:!1};s=y;const{partId:w}=h,M=structuredClone(h.snapshot);c("prepare",0,0);const x=e.validate(M),_=Wpe(M,w,x);if(_.length)return t.value={phase:"blocked",issues:_,report:x},s=null,"blocked";const O=M.parts.find(L=>L.partId===w),A=CM(O.durationSec,zs);let N=null,K=null,F=null,B=null,j=[],ee=null;function D(){return F?.state==="recording"&&F.stop(),t.value={phase:"idle"},"cancelled"}function Z(L){return new Promise((V,pe)=>{L.onstop=()=>V(),L.onerror=le=>{ee??(ee=le),pe(le)},L.stop()})}try{if(N=await e.loadFrameRenderer(),y.cancelled||(N.renderAt(M,w,A[0]),c("models",0,A.length),await N.whenModelsReady(Upe),y.cancelled))return D();const L=h.grayscale?e.createGrayscaleCopy(N.canvas):null;if(h.deliver==="blob"&&e.createCfrEncoder&&(B=await e.createCfrEncoder(L?.canvas??N.canvas,{width:iu,height:ru,fps:zs}),y.cancelled))return D();if(B){c("frames",0,A.length);for(let Se=0;Se<A.length;Se++)if(N.renderAt(M,w,A[Se]),L?.draw(),await B.addFrame(Se/zs,1/zs,Se%zs===0),c("frames",Se+1,A.length),y.cancelled)return D();c("finalize",A.length,A.length);const re=await B.finish();if(re.size===0)throw new Error("empty recording");return t.value={phase:"idle"},{result:"done",blob:re,mimeType:Zc.mp4.mime,durationSec:O.durationSec}}K=e.captureStream(L?.canvas??N.canvas);const V=K.getVideoTracks()[0],pe=e.createRecorder(K,I);F=pe,pe.ondataavailable=re=>{re.data.size>0&&j.push(re.data)},pe.onerror=re=>{ee??(ee=re)},pe.start(Gpe),c("frames",0,A.length);const le=O.actors.map(re=>re.id),me=[],oe=e.now();for(let re=0;re<A.length;re++){const Se=N.renderAt(M,w,A[re]);if(L?.draw(),V.requestFrame(),me.push(she(re,A[re],Se,le)),c("frames",re+1,A.length),await e.sleep(Math.max(0,oe+(re+1)*1e3/zs-e.now())),ee)throw ee;if(y.cancelled)return D()}if(c("finalize",A.length,A.length),await Z(pe),ee)throw ee;const fe=new Blob(j,{type:Zc[b].mime});if(fe.size===0)throw new Error("empty recording");
264if(h.deliver==="blob")return t.value={phase:"idle"},{result:"done",blob:fe,mimeType:Zc[b].mime,durationSec:O.durationSec};const X=rhe({snapshot:M,partId:w,codec:I,report:x,frames:me,createdAtMs:Date.now(),elapsedMs:e.now()-oe});return e.download(Ka(M.projectId,w,"preview",Zc[b].ext),fe),e.download(Ka(M.projectId,w,"trace","json"),new Blob([JSON.stringify(X)],{type:"application/json"})),t.value={phase:"done",format:b},i=e.setTimer(()=>{i=null,t.value={phase:"idle"}},Vpe),"done"}catch(L){return console.error("blocking-board recording failed",L),t.value={phase:"failed",issue:Le("RECORDING_FAILED",{path:""})},"failed"}finally{j=[],B?.close(),N?.dispose(),K?.getTracks().forEach(L=>L.stop()),s===y&&(s=null)}}function u(){s&&(s.cancelled=!0)}function p(){l(),t.value={phase:"idle"}}function f(){u(),l()}return{status:t,formats:n,supported:o,grayscaleSupported:a,start:d,cancel:u,dismiss:p,dispose:f}}const che=16/9,dhe=.001;function _M(e,t){if(Math.abs(t.width/t.height-che)>dhe)throw new RangeError(`frame renderer needs 16:9, got ${t.width}x${t.height}`);const n=t.canvas??document.createElement("canvas"),o=Pw(e,n,{dangerColor:t.dangerColor,mediaHost:t.mediaHost,glbLoader:t.glbLoader,glbCloner:t.glbCloner,motionLoader:t.motionLoader,pixelRatio:1,keepSharedCaches:!0,preserveDrawingBuffer:!0});o.resize(t.width,t.height);let a=null,s=null,i=null,r=[],l=[],c=!1;function d(f,h,b){if(c)throw new Error("frame renderer disposed");if(!a||a.snapshot!==f||a.partId!==h){if(s=u5(f,h),!s)throw new Error(`frame renderer: no part ${h}`);a={snapshot:f,partId:h};const M=t.mediaHost;r=M?[...new Set(s.part.actors.filter(x=>ks(x.species)==="humanoid").map(x=>am(M,om(x.bodyType))))]:[],l=mw(s.part,M??"")}const I=s,y=f5(I,f,b);o.build(f,h),o.setLight(f.settings.lightTime,f.settings.lightDirectionDeg);const w=y.camera?"camera":"free";return w!==i&&(i=w,o.setViewMode(i)),i==="free"&&o.setFreeView(Zi(f.room)),o.updateFrame(y,{part:I.part,settled:I.part.timeline,camera:y.camera,carried:Al(f,h,b)}),o.renderNow(),{cutId:y.activeCut?.id??null,cameraId:y.activeCut?.cameraId??null,frameState:y}}function u(f){return r.length===0&&l.length===0?Promise.resolve():Promise.race([Promise.all([...r.map(h=>uw(e,h,t.glbLoader)),...l.map(h=>fw(h,t.motionLoader))]).then(()=>{}),new Promise(h=>setTimeout(h,f))])}function p(){c||(c=!0,o.dispose())}return{canvas:n,renderAt:d,whenModelsReady:u,dispose:p}}async function AM(e){return _M(await Bw(),e)}const uhe=Object.freeze(Object.defineProperty({__proto__:null,createFrameRenderer:_M,loadFrameRenderer:AM},Symbol.toStringTag,{value:"Module"})),phe=["avc1.640028","avc1.42E01F"];async function fhe(e,t){const n=globalThis.VideoEncoder;if(typeof n?.isConfigSupported!="function")return null;let o=null;for(const u of phe)if((await n.isConfigSupported({codec:u,width:t.width,height:t.height,bitrate:Im,framerate:t.fps}).catch(()=>null))?.supported){o=u;break}if(!o)return null;const{BufferTarget:a,CanvasSource:s,Mp4OutputFormat:i,Output:r}=await xi(async()=>{const{BufferTarget:u,CanvasSource:p,Mp4OutputFormat:f,Output:h}=await import("./D7qoMgpv.js");return{BufferTarget:u,CanvasSource:p,Mp4OutputFormat:f,Output:h}},[],import.meta.url),l=new a,c=new r({format:new i({fastStart:"in-memory"}),target:l}),d=new s(e,{codec:"avc",fullCodecString:o,bitrate:Im,keyFrameInterval:30/t.fps,latencyMode:"quality"});return c.addVideoTrack(d,{frameRate:t.fps}),await c.start(),{addFrame:(u,p,f)=>d.add(u,p,f?{keyFrame:!0}:void 0),async finish(){return await c.finalize(),new Blob([l.buffer],{type:"video/mp4"})},close(){(c.state==="pending"||c.state==="started")&&c.cancel()}}}function mhe(e){return{hasRecorderApis:()=>typeof MediaRecorder<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"&&typeof globalThis.CanvasCaptureMediaStreamTrack?.prototype?.requestFrame=="function",isTypeSupported:t=>MediaRecorder.isTypeSupported(t),loadFrameRenderer:()=>AM({width:iu,height:ru,mediaHost:e.mediaHost}),captureStream:t=>t.captureStream(0),createRecorder:(t,n)=>new MediaRecorder(t,{mimeType:n,videoBitsPerSecond:Im}),supportsGrayscale:()=>{if(typeof document>"u")return!1;const t=document.createElement("canvas").getContext("2d");
264return!!t&&"filter"in t},createGrayscaleCopy:t=>{const n=document.createElement("canvas");n.width=iu,n.height=ru;const o=n.getContext("2d");return o.filter="grayscale(1)",{canvas:n,draw:()=>o.drawImage(t,0,0)}},validate:Iu,download:(t,n)=>Nu(t,n),now:()=>performance.now(),sleep:t=>new Promise(n=>setTimeout(n,t)),setTimer:(t,n)=>setTimeout(t,n),clearTimer:t=>clearTimeout(t),createCfrEncoder:fhe}}const hhe={class:"bb-conflict-banner","data-bb-conflict-banner":"",role:"alert"},bhe={class:"bb-conflict-body"},ghe={class:"bb-conflict-actions"},vhe=nt({__name:"BbConflictBanner",emits:["overwrite","reload"],setup(e){return(t,n)=>(v(),k("div",hhe,[m("p",bhe,S(t.$t("tool.blockingBoard.save.conflictBody")),1),m("div",ghe,[m("button",{type:"button",class:"bb-conflict-btn bb-conflict-overwrite",onClick:n[0]||(n[0]=o=>t.$emit("overwrite"))},S(t.$t("tool.blockingBoard.save.overwrite")),1),m("button",{type:"button",class:"bb-conflict-btn bb-conflict-reload",onClick:n[1]||(n[1]=o=>t.$emit("reload"))},S(t.$t("tool.blockingBoard.save.reload")),1)])]))}}),yhe=Object.assign(ot(vhe,[["__scopeId","data-v-9bb6f634"]]),{__name:"BbConflictBanner"});function khe(e,t,n,o){if(e<=0||t<=0)return{x:0,y:0,w:n,h:o};const a=Math.min(n/e,o/t),s=e*a,i=t*a;return{x:(n-s)/2,y:(o-i)/2,w:s,h:i}}const She=["fill","fill-opacity","fill-rule","stroke","stroke-width","stroke-opacity","stroke-dasharray","stroke-linecap","stroke-linejoin","opacity","display","visibility","font-family","font-size","font-weight","text-anchor","dominant-baseline","paint-order","vector-effect"],Ihe=[".bb-hit",".bb-actor-start-hit",".bb-actor-path-hit",".bb-camera-hit",".bb-opening-hit",".bb-actor-focus-ring"];function whe(e,t,n){const o=[e,...e.querySelectorAll("*")],a=[t,...t.querySelectorAll("*")],s=[];for(let i=0;i<o.length;i+=1){const r=a[i];if(!r)break;const l=n(o[i]);if(l.getPropertyValue("display")==="none"){s.push(r);continue}for(const c of She){const d=l.getPropertyValue(c);d&&r.style.setProperty(c,d)}}for(const i of s)i.remove()}function Mhe(e){for(const t of e.querySelectorAll(Ihe.join(",")))t.remove()}async function $he(e,t){const n=e.cloneNode(!0);whe(e,n,s=>getComputedStyle(s)),Mhe(n),n.setAttribute("width",String(t.width)),n.setAttribute("height",String(t.height)),n.setAttribute("xmlns","http://www.w3.org/2000/svg");const o=new XMLSerializer().serializeToString(n),a=URL.createObjectURL(new Blob([o],{type:"image/svg+xml;charset=utf-8"}));try{const s=await new Promise((c,d)=>{const u=new Image;u.onload=()=>c(u),u.onerror=()=>d(new Error("svg image load failed")),u.src=a}),i=document.createElement("canvas");i.width=t.width,i.height=t.height;const r=i.getContext("2d");if(!r)throw new Error("2d context unavailable");r.fillStyle=t.background,r.fillRect(0,0,i.width,i.height);const l=khe(s.width,s.height,i.width,i.height);return r.drawImage(s,l.x,l.y,l.w,l.h),await new Promise((c,d)=>{i.toBlob(u=>u?c(u):d(new Error("toBlob failed")),"image/png")})}finally{URL.revokeObjectURL(a)}}function Ehe(e){const t=()=>e.storage?.();function n(s){if(!s)return va();const i=e.snapshot(),r=T4(s,t());return i?K4(r,F4(i)):r}const o=Sn(n(e.projectId()));Je(e.projectId,s=>{o.value=n(s)});function a(s){o.value=s;const i=e.projectId();i&&R4(i,s,t())}return{state:o,hiddenIds:C(()=>o.value.hidden),lockedIds:C(()=>o.value.locked),hide:s=>a(b1(o.value,s)),show:s=>a(g1(o.value,s)),showAll:()=>a(D4(o.value)),toggleHidden:s=>a(O4(o.value,s)),lock:s=>a(v1(o.value,s)),unlock:s=>a(y1(o.value,s)),toggleLocked:s=>a(N4(o.value,s))}}const TM="bb.timeline.prefs",RM=60,cf={unit:"sec",snap:!0},df={zoomPxPerSec:RM,loop:null,collapsedActorIds:[]};function DM(e){return`bb.timeline.${e}`}function xhe(e){if(!e)return{...cf};try{const t=e.getItem(TM);if(!t)return{...cf};const n=JSON.parse(t);return{unit:n.unit==="frame"?"frame":"sec",snap:typeof n.snap=="boolean"?n.snap:!0}}catch{return{...cf}}}function Phe(e,t){if(t)try{t.setItem(TM,JSON.stringify(e))}catch{}}function Dk(e,t){if(!e)return{...df,collapsedActorIds:[]};try{const n=e.getItem(DM(t));if(!n)return{...df,collapsedActorIds:[]};const o=JSON.parse(n),a=o.zoomPxPerSec;return{zoomPxPerSec:typeof a=="number"&&a>=Hl&&a<=Lu?a:RM,loop:o.loop??null,collapsedActorIds:Array.isArray(o.collapsedActorIds)?o.collapsedActorIds:[]}}catch{return{...df,collapsedActorIds:[]}}}function Che(e,t,n){if(e)try{e.setItem(DM(t),JSON.stringify(n))}catch{}}function Bhe(e,t,n=24){const o=Math.min(e.endSec,t);return o-e.startSec<1/n-1e-9?null:{...e,endSec:o}}const _he={key:1,class:"bb-page-history"},Ahe={key:1,class:"bb-stage-column"},The=["aria-pressed","title"],Rhe={class:"bb-area-plan-mode",role:"group"},Dhe=["aria-pressed"],Ohe=["aria-pressed"],Nhe=["aria-pressed"],Lhe=["aria-pressed","title"],Khe={key:2,class:"bb-page-area-body","data-bb-area":"stage3d"},Fhe={key:3,class:"bb-page-area-body"},Hhe={class:"bb-page-area-body"},zhe={key:7,class:"bb-page-notice",role:"status"},jhe={key:10,class:"bb-page-creating",role:"status","aria-live":"polite"},Ok="bb.stage.mode",Nk="bb.panels",Uhe=1500,sl="tool.blockingBoard.inspector.rail",Ghe=4e3,Vhe="/api/v2/work/blocking-board/handoff-prose",Whe=300,Xhe=nt({__name:"blocking-board",setup(e){function t(){try{return Nue(localStorage.getItem(Bk))}catch{}return{...hd}}function n(){try{const E=localStorage.getItem(Ok);if(E==="2d"||E==="3d"||E==="split")return E}catch{}return"2d"}const o={left:!0,right:!0};function a(){try{const E=localStorage.getItem(Nk);if(E)return{...o,...JSON.parse(E)}}catch{}return{...o}}const s=G("list"),i=rce(),{showToast:r,showSuccessToast:l}=U$(),{t:c,locale:d}=mo(),u=Sn(null),p=Sn(null),f=Sn(null),h=Sn(null),b=Sn(null),I=Sn(null),y=Sn(null),w=G(!1),M=G(!1),x=G(null),_=G("ko"),O=G(!1),A=Sn(null),N=G(void 0),K=G(!1),F=G(null),B=G(t()),j=G(n()),ee=G("blocking"),D=G(xhe(typeof localStorage>"u"?void 0:localStorage)),Z=G(Dk(void 0,"")),L=G(!Tue());Je(L,E=>Rue(!E));const V=C(()=>te.value!=="timing"&&L.value),pe=G([]),le=G([]),me=G(!1),oe=G(!1),fe=G(null),X=G(null),re=G([]);let Se=null;const Q=G(null),$e=G(!1),Fe=G(!1),Ze=G(null),ue=G("camera"),ye=G(!1),Ue=G(!1),te=G("layout");Je(te,()=>{Ze.value=null});const q=C(()=>Lue(B.value,te.value)),de=typeof bd=="function"?String(bd().public.MEDIA_HOST??""):"",Ce=lhe(mhe({mediaHost:de})),Ye=G("webm"),tt=G(!1),ht=G(Lw()),Et=G(!1),It=G("2d"),Xt=G("free"),yt=G(!1),Ie=G(null),Be=G(null),lt=G(null),Ke=Ehe({projectId:()=>u.value?.snapshot.value.projectId??null,snapshot:()=>u.value?.snapshot.value??null}),ct=Sn({filter:"",chipKind:null,collapsed:[]});
264function xt(){ct.value={filter:"",chipKind:null,collapsed:[]}}const jt=Yw(),Jt=G(a()),Mn=G(Due()),At=C(()=>(u.value?.selection.value.ids.length??0)>0),Ae=C(()=>!Mn.value),Ve=G(1),Xe=G(!1),ne=C(()=>u.value?.snapshot.value.parts.find(E=>E.partId===u.value.activePartId.value)),W=C(()=>ne.value?fs(ne.value):null),ve=C(()=>ne.value&&W.value?wr(ne.value,W.value):null);let we=null;const Re=C(()=>{if(!ne.value||!W.value||!u.value)return null;const E=u.value.snapshot.value.room,P=X0(ne.value,E,W.value);if(we&&we.key===P)return we.tracks;const se=Y0(ne.value,W.value,E,{fps:u.value.snapshot.value.settings.fps});return we={key:P,tracks:se},se}),ut=mq(()=>u.value?.timeSec.value??0,()=>u.value?.snapshot.value.settings.fps??24);function bn(E){const P=ut.value;return!ne.value||!W.value?P:Zs(ne.value,W.value,E)(P).authoredSec}const Qn=C(()=>(u.value?.snapshot.value.parts??[]).map(E=>({partId:E.partId,title:E.title,durationSec:E.durationSec}))),ea=C(()=>ne.value?ph(ne.value,ut.value):{}),yn=C(()=>!u.value||!ne.value||!W.value||!ve.value?null:{...Wa(ne.value,W.value,ve.value,u.value.snapshot.value.room,ut.value,{easing:u.value.snapshot.value.settings.easing,tracks:Re.value??void 0}),openings:ea.value,motionClips:dh(ne.value,W.value,ut.value)}),Ln=G(!0);function co(E){const P=yn.value;if(!P||!u.value||!ne.value||!ve.value)return null;const se=WZ({followCut:E,selectedCameraId:As(),activeCutCameraId:P.activeCut?.cameraId??null});if(!se.cameraId)return null;const ke=se.source==="cut"&&P.camera?P.camera:di(ne.value,ve.value,P.actors,se.cameraId,ut.value,{easing:u.value.snapshot.value.settings.easing,room:u.value.snapshot.value.room}),Oe=ne.value.cameras.find(vt=>vt.id===se.cameraId);return ke&&Oe?{id:se.cameraId,source:se.source,state:ke,model:Oe}:null}const Mo=C(()=>co(Ln.value)),Fo=C(()=>co(!0)),bo=C(()=>co(yt.value)),Hn=C(()=>{const E=As();return ne.value?.cameras.find(P=>P.id===E)??null}),Ho=C(()=>{const E=yn.value,P=u.value,se=ne.value;return!E||!P||!se?null:Dw(P.snapshot.value,se,E,P.selection.value.ids)}),$o=C(()=>te.value==="timing"?It.value==="3d"&&Xt.value!=="camera":(te.value==="camera"||te.value==="layout"&&j.value!=="2d")&&ue.value!=="camera"),To=C(()=>{const E=yn.value,P=u.value,se=ne.value;if(!$o.value||!E||!P||!se||!ve.value)return[];const ke={hidden:Ke.hiddenIds.value},Oe=[];for(const vt of se.cameras){if(Xs(ke,vt.id))continue;const sn=di(se,ve.value,E.actors,vt.id,ut.value,{easing:P.snapshot.value.settings.easing,room:P.snapshot.value.room});sn&&Oe.push({id:vt.id,state:sn})}return Oe}),ta=C(()=>!f.value?.playing.value||!u.value||!ne.value||!W.value||!ve.value?null:Pue(ne.value,W.value,ve.value,u.value.snapshot.value.room,ut.value,{easing:u.value.snapshot.value.settings.easing,tracks:Re.value??void 0})),wa=C(()=>{if(!oe.value||te.value!=="timing")return null;const E=u.value,P=ne.value;if(!E||!P||!W.value||!ve.value)return null;const se=Yj(ut.value,P.durationSec);if(se.length===0)return null;const ke=Ke.hiddenIds.value,Oe=[];for(const vt of se){const sn=Wa(P,W.value,ve.value,E.snapshot.value.room,ut.value+vt,{easing:E.snapshot.value.settings.easing,tracks:Re.value??void 0});for(const Pn of P.actors){if(ke.includes(Pn.id))continue;const Ne=sn.actors[Pn.id];Ne&&Oe.push({actorId:Pn.id,position:Ne.position,offsetSec:vt})}}return Oe});Je(()=>ne.value?.durationSec,()=>f.value?.clampToDuration()),Je(B,E=>{try{localStorage.setItem(Bk,JSON.stringify(E))}catch{}},{deep:!0}),Je(j,E=>{try{localStorage.setItem(Ok,E)}catch{}}),Je(D,E=>Phe(E,localStorage),{deep:!0}),Je(Z,E=>{const P=u.value?.snapshot.value.projectId;P&&Che(localStorage,P,E)},{deep:!0}),Je([()=>Z.value.loop,ne],([E,P])=>{if(!f.value)return;if(!E||!P){f.value.setLoop(E?.enabled?E:null);return}const se=Bhe(E,P.durationSec,u.value?.snapshot.value.settings.fps);f.value.setLoop(E.enabled&&se?se:null)},{deep:!0}),Je(()=>u.value?.revision.value,()=>{le.value=[]});function na(E){Jt.value={...Jt.value,[E]:!Jt.value[E]};try{localStorage.setItem(Nk,JSON.stringify(Jt.value))}catch{}}function Eo(E){Mn.value=!E,Oue(!E)}function go(){Eo(!Ae.value)}const en={section:"detail",icon:"i-lucide-sliders-horizontal",labelKey:`${sl}.detail`},eo={actor:[{section:"act",icon:"i-lucide-footprints",labelKey:`${sl}.act`},{section:"pose",icon:"i-lucide-armchair",labelKey:`${sl}.pose`},en],prop:[{section:"basic",icon:"i-lucide-box",labelKey:`${sl}.basic`},en],camera:[{section:"lens",icon:"i-lucide-aperture",labelKey:`${sl}.lens`},en]},{kind:Ut}=$I(()=>({snapshot:u.value?.snapshot.value??null,partId:u.value?.activePartId.value??null,selection:u.value?.selection.value??null})),zo=C(()=>{const E=u.value?.selection.value.ids.length??0;return E===0?[{section:"room",icon:"i-lucide-square-dashed",labelKey:"tool.blockingBoard.stage.roomSettings"}]:E>1?[en]:eo[Ut.value]??[en]});async function nn(E){if(Eo(!0),(E==="room"||!At.value)&&so(),E==="detail"&&window.dispatchEvent(new CustomEvent("bb:detail-open")),E===null)return;await hn();const P=document.querySelector(`[data-section="${E}"]`),se=P?.closest(".bb-workbench-right");!P||!se||se.scrollTo({top:se.scrollTop+P.getBoundingClientRect().top-se.getBoundingClientRect().top})}const Ma=G$("(min-width: 900px)"),Zn=C(()=>!Ma.value);function so(){w.value=!1,u.value?.clearSelection(),Mn.value&&Eo(!0)}Xi(()=>{f.value?.pause()}),Xi(()=>Ce.dispose()),Xi(()=>{be&&clearTimeout(be)}),Je(()=>[u.value,u.value?.activePartId.value],()=>Ce.cancel());async function ge(){try{const E=await i.list(1);Ve.value=1,Xe.value=E.hasMore}catch(E){console.error("blocking-board project list failed",E)}}async function _e(){try{const E=await i.list(Ve.value+1,{append:!0});Ve.value=E.pageNo,Xe.value=E.hasMore}catch(E){console.error("blocking-board project list failed",E)}}async function R(E){try{await i.remove(E)}catch(P){console.error("blocking-board project remove failed",P),r(c("tool.blockingBoard.save.error"))}await ge()}Jn(async()=>{Ye.value=Ce.formats.value.mp4?"mp4":"webm",await ge()});function U(E){return`${E}-${crypto.randomUUID().slice(0,8)}`}async function Y(E){const P=await crypto.subtle.digest("SHA-256",
264new TextEncoder().encode(E));return[...new Uint8Array(P)].map(se=>se.toString(16).padStart(2,"0")).join("")}function he(E){const P=rue({initial:E,idFactory:U,onCommit:()=>i.markDirty(()=>P.snapshot.value)});u.value=P,Z.value=Dk(localStorage,E.projectId),pe.value=[],le.value=[],me.value=!1,oe.value=!1,p.value=fue({session:P}),f.value=bq({timeSec:P.timeSec,durationSec:()=>P.snapshot.value.parts.find(ke=>ke.partId===P.activePartId.value)?.durationSec??10,fps:()=>P.snapshot.value.settings.fps}),h.value=uue(P);const se=tue({snapshot:()=>P.snapshot.value,dispatch:ke=>{P.dispatch(ke)},fetchProse:ke=>$fetch(Vhe,{method:"POST",body:ke})});I.value=se,b.value=Jde(P,h.value,{fetch:$fetch,router:bb(),localePath:gb(),mediaHost:de,recorder:{start:ke=>Ce.start(ke),cancel:()=>Ce.cancel()},stageMdiaFile:(ke,Oe)=>jo?jo(ke,Oe):Promise.resolve(null),flushSave:()=>i.flushNow(),freshProse:(ke,Oe)=>se.isFresh(ke,Oe)?P.snapshot.value.parts.find(vt=>vt.partId===ke)?.handoffProse??null:null}),y.value?.dispose(),y.value=vue(P),F.value=null}const xe=AT({session:{dispatch:E=>u.value?u.value.dispatch(E):{ok:!1,issue:{code:"PROJECT_NOT_OPEN"}},snapshot:{get value(){return u.value.snapshot.value}},activePartId:{get value(){return u.value.activePartId.value}}},project:{uploadAsset:(E,P)=>i.uploadAsset(E,P)},idFactory:U,sha256:Y}),De=V$(),bt=bb(),Yt=gb(),Ft=()=>Yt("/studio/blocking-board");function Rt(){bt.push({path:Ft(),query:{new:null}})}function Lt(E,P=!1){const se={path:Ft(),query:{project:E}};P?bt.replace(se):bt.push(se)}function on(){jue(window.history.state,Ft())==="back"?bt.back():bt.replace(Ft())}async function Dt(E){try{const P=await i.open(E);return he(P),te.value="layout",s.value="workbench",xt(),!0}catch(P){if(console.error("blocking-board project open failed",P),P instanceof bm){const se=P.issue.messageKey.replace(".issue.",".hint.");return r(`${c(P.issue.messageKey)}. ${c(se)}`),!1}return r(c("tool.blockingBoard.save.error")),!1}}function Un(){return i.flushAndClearCurrent().catch(E=>{console.error("blocking-board project save failed",E),r(c("tool.blockingBoard.save.error"))})}async function Ro(){switch(Wb(i.saveState.value)){case"go":return!0;case"flush":return await i.flushNow(),Wb(i.saveState.value)==="go"?!0:window.confirm(c("tool.blockingBoard.save.leaveUnsaved"));case"confirm":return window.confirm(c("tool.blockingBoard.save.leaveUnsaved"))}}function xo(){const E=document.activeElement;E instanceof HTMLElement&&Vw(E)&&E.blur(),i.flushNow()}function Dn(){on()}W$(()=>s.value==="workbench"?Ro():!0),X$(E=>{if(s.value!=="workbench")return!0;const P=Tk(E.query);return P.view==="workbench"&&P.projectId===i.current.value?.projectId?!0:Ro()});function On(E){s.value!=="workbench"||!GC(i.saveState.value)||(E.preventDefault(),E.returnValue="")}Je(s,E=>{E==="workbench"?window.addEventListener("beforeunload",On):window.removeEventListener("beforeunload",On)}),Xi(()=>window.removeEventListener("beforeunload",On));async function $a(){const E=i.current.value?.projectId;if(E&&window.confirm(c("tool.blockingBoard.save.reloadConfirm"))){f.value?.pause();try{const P=await i.open(E);he(P)}catch(P){if(console.error("blocking-board project reload failed",P),P instanceof bm){const se=P.issue.messageKey.replace(".issue.",".hint.");r(`${c(P.issue.messageKey)}. ${c(se)}`);return}r(c("tool.blockingBoard.save.error"))}}}function Ja(){const E=Un();s.value="list",f.value?.pause(),u.value=null,p.value=null,f.value=null,h.value=null,I.value?.cancel(),I.value=null,b.value=null,Wn(),y.value?.dispose(),y.value=null,w.value=!1,Ue.value=!1,xt(),E.then(()=>ge())}async function ei(){f.value?.pause(),u.value=null,p.value=null,f.value=null,h.value=null,I.value?.cancel(),I.value=null,b.value=null,Wn(),y.value?.dispose(),y.value=null,w.value=!1,Ue.value=!1,await Un(),Br()}let Cs=null,jo=null;try{const E=$m();Cs=E.stageImgFile,jo=E.stageMdiaFile}catch{Cs=null,jo=null}let Ea=null;const Uo=Sn(null);function Br(){Uo.value?.cancel(),Ea?.stop(),Ea=q$(),Uo.value=Ea.run(()=>qie({stageImgFile:E=>Cs?Cs(E):Promise.resolve(null),createProject:(E,P)=>i.create(E,P),lang:()=>d.value?.startsWith("ko")===!1?"en":"ko"}))??null,s.value="start"}Xi(()=>Ea?.stop());function _r(E){const P=Uo.value?.result.value,se=P?.snapshot;if(!se)return;he({...se,projectId:E}),te.value="layout",xt(),Lt(E,!0);const ke=P.kindNotices??[];ke.length>0&&Ge(ke.map(Ar).join(" · "))}const ti={person:"tool.blockingBoard.create.references.kindCharacter",animal:"tool.blockingBoard.create.references.kindAnimal",prop:"tool.blockingBoard.create.references.kindPro
264p"};function Ar(E){return c("tool.blockingBoard.create.kindChanged",{name:E.name,from:c(ti[E.from]),to:c(ti[E.to])})}function xa(){Uo.value?.cancel(),on()}function Ni(){O.value=!1,N.value=void 0,Hue({view:s.value,hasSession:!!u.value})!==s.value&&on()}function Li(E){if(E==="json"){N.value=E,O.value=!0;return}const P=xu({projectId:"pending-import",name:c("tool.blockingBoard.import.blankDefaultName"),roomKind:"room",widthM:6,depthM:5,furnish:!1,idFactory:U});Ki({...P,format:"blank"},"new")}async function Tr(E){if(!u.value)return;const P=i.current.value?.projectId;if(P)try{(await i.rename(P,E))?.code!==200&&r(c("tool.blockingBoard.save.error"))}catch(se){console.error("blocking-board project rename failed",se),r(c("tool.blockingBoard.save.error"))}}function Bs(){O.value=!0}async function Ki(E,P){const se=u.value?_T(!0,P,E.format):null;if(se){const Oe=BS(u.value.snapshot.value,E,se);if(qA(Oe)){A.value={result:E,mode:se,diff:Oe};return}O.value=!1,await Fi(E,se,AS(Oe));return}O.value=!1;const ke=BT(!!u.value,P);if(ke.kind==="create"){f.value?.pause(),K.value=!0;try{const Oe=await i.create(E.snapshot.name||E.snapshot.scene.title||c("tool.blockingBoard.import.blankDefaultName"),E.snapshot);he({...E.snapshot,projectId:Oe}),te.value="layout",xt(),Lt(Oe,!0)}catch(Oe){console.error("blocking-board project create failed",Oe),s.value==="workbench"&&bt.replace(Ft()),r(c("tool.blockingBoard.import.createFailed"))}finally{K.value=!1}return}await xe.apply({ok:!0,format:E.format,preview:Rd(E),result:E,raw:JSON.stringify(E.snapshot)},ke.mode)}function Fi(E,P,se){return xe.apply({ok:!0,format:E.format,preview:Rd(E),result:E,raw:JSON.stringify(E.snapshot)},P,se)}async function Rr(E){const P=A.value;P&&(A.value=null,O.value=!1,await Fi(P.result,P.mode,E))}Je(()=>i.saveFailure.value,E=>{E==="BACKGROUND_LOCKED"&&r(c("tool.blockingBoard.save.backgroundLocked"))});function vo(E){const P=E.messageKey.replace(".issue.",".hint."),se=Dr.has(E.code)?E.params??{}:{},ke=c(E.messageKey,se).replace(/\s*\(\s*\)/g,"");r(`${ke}. ${c(P,se)}`)}const Dr=new Set(["DURATION_OUT_OF_MODEL_RANGE"]),z=G(null);let be=null;function Ge(E){z.value=E,be&&clearTimeout(be),be=setTimeout(()=>z.value=null,Ghe)}function He(E){return E?"text"in E?E.text:E.params?c(E.key,E.params):c(E.key):""}function gt(E){if(!ne.value)return;const se=E.find(Oe=>Oe.type==="actor.addFacingKey"&&!Oe.travel);if(se&&se.type==="actor.addFacingKey"){Ge(c("tool.blockingBoard.board.gaze.keyAdded",{name:He(zi.value[se.actorId]),t:se.atSec.toFixed(1)}));return}const ke=E.find(Oe=>Oe.type==="actor.setHeading");ke&&ke.type==="actor.setHeading"&&Bt(ke.actorId)&&Ge(c("tool.blockingBoard.board.gaze.walkingNote"))}function Bt(E){const P=ne.value,se=P?.actors.find(ke=>ke.id===E);return!!P&&!!se&&$s(se,P.durationSec).length>0}function Gn(E){const P=ne.value;if(!P)return E;const se=[];for(const ke of E){if(se.push(ke),ke.type!=="actor.addFacingKey"||ke.travel)continue;const Oe=P.actors.find(Pn=>Pn.id===ke.actorId),vt=Oe?$4(Oe,P.durationSec,ke.atSec):null;if(!vt||vt.type!=="actor.addFacingKey")continue;E.some(Pn=>Pn.type==="actor.addFacingKey"&&Pn.travel&&Pn.actorId===vt.actorId&&Math.abs(Pn.atSec-vt.atSec)<1e-6)||se.push(vt)}return se}function yo(E){if(E.type!=="camera.addKey")return E;const P=u.value,se=ne.value,ke=yn.value;if(!P||!se||!ke||!ve.value||Math.abs(E.atSec-P.timeSec.value)>1e-9)return E;const Oe=di(se,ve.value,ke.actors,E.cameraId,ut.value,{easing:P.snapshot.value.settings.easing,room:P.snapshot.value.room});if(!Oe)return E;const vt={x:Oe.position.x,y:Oe.position.y,heightM:Oe.heightM,headingDeg:Oe.headingDeg,pitchDeg:Oe.pitchDeg,rollDeg:Oe.rollDeg,lensMm:xl(Oe.lensMm)};return{...E,value:{...vt,...E.value}}}function an(E,P){const se=u.value;if(!se)return;E=_p(E,se.snapshot.value,se.activePartId.value),E=yo(E);const ke=Gn([E]);if(ke.length>1&&E.type==="actor.addFacingKey"){_s(ke,{...P,label:P?.label??{key:Tu[E.type],name:zi.value[E.actorId]}});return}const Oe=se.dispatch(E,P);if(!Oe.ok){console.error("blocking-board command rejected",Oe.issue),vo(Oe.issue);return}p.value?.afterCommand(E),gt([E]);const vt=Oe.meta?.outOfRangeParts?.length??0;if(E.type==="scene.setTargetModel"&&vt>0){const sn=za(E.targetVideoModel);r(c("tool.blockingBoard.scenePanel.targetModelOutOfRange",{n:vt,minSec:sn?.minSec??0,maxSec:sn?.maxSec??0}))}E.type==="part.setDuration"&&E.partId===se.activePartId.value&&f.value?.seek(Math.min(se.timeSec.value,E.durationSec))}function _s(E,P){const se=u.value;if(!se)return;const ke=se.commitMany(Gn(E.map(Oe=>_p(Oe,se.snapshot.value,se.activePartId.value))),P);
264if(!ke.ok){console.error("blocking-board commands rejected",ke.issue),vo(ke.issue);return}gt(E)}function zu(E){const P=ne.value,se=P?.actors.find(ke=>ke.id===E.actorId);!P||!se||f.value?.seek(Jf(se,E.index,P.durationSec))}function As(){const E=u.value;if(!E)return null;const P=E.selection.value.primary;return P&&E.snapshot.value.parts.find(ke=>ke.partId===E.activePartId.value)?.cameras.some(ke=>ke.id===P)?P:null}function Or(E){const P=As();P&&an({type:"camera.setField",cameraId:P,patch:E})}function Nr(E){const P=As();!P||!u.value||an({type:"camera.addKey",cameraId:P,atSec:u.value.timeSec.value,value:{x:E.position.x,y:E.position.y,heightM:E.heightM,headingDeg:E.headingDeg,pitchDeg:E.pitchDeg}})}function rc(E){F.value=E,E?h.value?.suspend():h.value?.resume()}function $(E,P){w.value=!1,u.value?.select(E,{additive:P})}function J(E){w.value=!1,u.value?.selectMany(E)}function T(E,P){an({type:"entity.rename",id:E,name:P})}function Ee(E){const P=Ke.hiddenIds.value.includes(E);if(Ke.toggleHidden(E),!P){const se=u.value;se&&se.selectMany(se.selection.value.ids.filter(ke=>ke!==E))}}function ze(E,P){const se=u.value;if(se)switch(E){case"duplicate":{const ke=se.duplicateSelection();ke&&!ke.ok&&vo(ke.issue);return}case"hide":Ke.hide(P),se.selectMany(se.selection.value.ids.filter(ke=>!P.includes(ke)));return;case"show":Ke.show(P);return;case"lock":Ke.lock(P);return;case"unlock":Ke.unlock(P);return;case"unsupport":{const ke=P[0];if(!ke)return;const Oe=Vf(se.snapshot.value,se.activePartId.value,ke);Oe&&an(Oe);return}case"delete":se.removeSelection()}}function at({id:E,seekSec:P}){u.value?.select(E),P!==void 0&&f.value?.seek(P)}function st(E){f.value?.pause(),u.value?.setActivePart(E),u.value?.select(E)}function pt(){p.value?.apply()}function ln(){p.value?.ignore()}function Ct(E){const P=p.value?.autoDetour(E);if(!P||P.ok)return;const se=P.issue.messageKey.replace(".issue.",".hint.");r(`${c(P.issue.messageKey)}. ${c(se)}`)}function dt(E){const P=u.value;P&&(E.partId&&E.partId!==P.activePartId.value&&(f.value?.pause(),P.setActivePart(E.partId)),Ct(E.actorId))}function Qe(){u.value?.confirmRemoval()}function Pt(){u.value?.cancelRemoval()}async function qt(E){const P=u.value?.snapshot.value.background,se=await y.value?.upload(E);if(y.value?.error.value){kt();return}se?.kind==="reset"&&se.hadAlignment&&r(c("tool.blockingBoard.align.relinkReset")),se?.kind==="relink"&&se.nameDiffers&&r(c("tool.blockingBoard.align.relinkNameDiffers",{name:P?.fileName??""}))}function kt(){const E=y.value?.error.value;if(!E)return;const P=E.messageKey.replace(".issue.",".hint.");r(`${c(E.messageKey)}. ${c(P)}`)}const An={load:async E=>{const P=await y.value?.loadPhotoFile(E)??null;return P||kt(),P},discard:E=>y.value?.discardPhoto(E)};function Vn(){u.value&&(M.value=!0)}function Wn(){M.value&&x.value?.cancel(),M.value=!1}function Do(E){const P=u.value;if(P){if(E.commands.length){const se=P.snapshot.value.parts.find(Oe=>Oe.partId===P.activePartId.value)?.actors.find(Oe=>Oe.id===E.actorId),ke=P.commitMany(E.commands,{label:{key:"tool.blockingBoard.imagePath.historyLabel",params:{name:se?.name??""}}});if(!ke.ok){vo(ke.issue);return}}E.adoptPhoto&&y.value?.adoptPhoto(E.adoptPhoto),M.value=!1,P.select(E.actorId)}}function Pa(){y.value?.open()}function Qa(){if(!u.value?.snapshot.value.background){r(c("tool.blockingBoard.stage.backgroundPhotoFirst"));return}w.value=!0}function Hi(E,P){y.value?.applyHomography(E,P),y.value?.close()}function Lr(){y.value?.close()}function ju(){w.value=!1,y.value?.open()||r(c("tool.blockingBoard.align.photoMissing"))}const Uh=C(()=>({detour:p.value?.suggestion.value??null}));function Gh(E){const P=u.value;P&&(E.partId&&E.partId!==P.activePartId.value&&(f.value?.pause(),P.setActivePart(E.partId)),E.targetId&&(P.select(E.targetId),w.value=!1),E.timeSec!==void 0&&f.value?.seek(E.timeSec),E.targetId&&fe.value?.focusOn(E.targetId))}const lc=Kue(),Vh=OE();function ni(E,P){let se=null;Je(E,ke=>{ke&&!se?se=Vh.open(P):!ke&&se&&(se(),se=null)},{immediate:!0})}ni(()=>s.value==="start",{name:"startScreen",onAction:E=>{if(E.id!=="overlay.close")return!1;xa()}}),ni(()=>!!y.value?.isOpen.value,{name:"photoAlign",onAction:E=>{if(E.id!=="overlay.close")return!1;Lr()}}),ni(()=>M.value,{name:"imagePath",onAction:E=>{if(E.id!=="overlay.close")return!1;x.value?.cancel()}}),ni(()=>!!u.value?.pendingRemoval.value,{name:"removalConfirm",onAction:E=>{if(E.id==="overlay.close")Pt();else if(E.id==="overlay.confirm")Qe();else return!1}});const io=yue();ni(()=>io.pick.value!==null,{name:"boardPick",onAction:E=>{if(E.id!=="overlay.close")return!1;
264io.cancel()}});function Wh(){(te.value==="layout"?fe.value:Ie.value)?.shakeHud?.()}function es(E,P){const se=u.value;if(!se)return!1;if(!E.ok)return r(c(`tool.blockingBoard.board.pick.fail.${E.reason}`)),!1;const ke=()=>ne.value?.timeline.actions.map(sn=>sn.id)??[],Oe=new Set(ke()),vt=se.commitMany(Gn(E.commands),{label:E.label});return vt.ok?(E.extendedTo!==null&&(r(c("tool.blockingBoard.board.partExtended",{n:E.extendedTo})),hn(()=>X.value?.runKeyAction({id:"timeline.fit"}))),E.move&&OM(ke().filter(sn=>!Oe.has(sn))),P?.quiet||NM(E),!0):(vo(vt.issue),!1)}function OM(E){Se&&clearTimeout(Se),re.value=E,Se=setTimeout(()=>{re.value=[],Se=null},Uhe)}wn(()=>{Se&&clearTimeout(Se)});function NM(E){const P=u.value;if(!P)return;const se=Oe=>E.commands.some(vt=>vt.type===Oe);if(E.departSec!==void 0){Ge(c(`tool.blockingBoard.board.pick.${E.lookAhead?"movedLookAhead":"moved"}`,{name:He(E.label.name),from:E.departSec.toFixed(1),to:(E.endSec-rr).toFixed(1)}));return}const ke=E.commands.find(Oe=>Oe.type==="actor.setHeading");if(ke&&ke.type==="actor.setHeading"&&!se("actor.setPose")&&Bt(ke.actorId)){Ge(c("tool.blockingBoard.board.gaze.walkingNote"));return}(E.commands.some(Oe=>Oe.type==="actor.addFacingKey"&&!Oe.travel)||se("actor.addPoseKey")||se("action.add"))&&Ge(c("tool.blockingBoard.board.notice.applied",{t:P.timeSec.value.toFixed(1),what:Zu(E.label)}))}function Xh(E){const P=Mt.waypointsPerActor;return E.path.waypoints.length<P?!1:(r(c("tool.blockingBoard.context.waypointLimit",{max:P})),!0)}function LM(E,P){const se=u.value,ke=se?.snapshot.value.parts.find(Oe=>Oe.partId===se.activePartId.value)?.actors.find(Oe=>Oe.id===E);!se||!ke||Xh(ke)||an({type:"actor.addWaypoint",actorId:E,index:Yf(ke,P),point:P})}function Uu(E,P){if(!es(E)||!E.ok)return!1;if(P?.follow&&u.value){const se=u.value.snapshot.value.settings.fps;f.value?.seek(Math.ceil(E.endSec*se-1e-6)/se)}return!0}function Yh(E){const P=u.value;P&&es(d1({snapshot:P.snapshot.value,partId:P.activePartId.value,actorId:E,playheadSec:P.timeSec.value}))}function Gu(E){const P=u.value,se=ne.value;if(!P||!se)return;const ke=se.actors.find(Oe=>Oe.id===E.id);if(ke){const Oe=yn.value?.actors[ke.id]?.position??ke.start.position;an(xh(ke,Oe,E.headingDeg,P.timeSec.value,bn(ke.id)));return}if(se.cameras.some(Oe=>Oe.id===E.id)){an({type:"camera.setField",cameraId:E.id,patch:{headingDeg:E.headingDeg}});return}an({type:"prop.rotate",propId:E.id,headingDeg:E.headingDeg})}function KM(E){const P=u.value?.selection.value.primary;P&&io.start({kind:E,actorId:P})}function FM(E){f.value?.seek(E)}function HM(E){const P=u.value;if(!P)return!1;const se=[...P.snapshot.value.room.props,...ne.value?.props??[]].find(ke=>ke.id===E);return!!se&&!!Tt(se.catalogKey??se.kind)?.seat}function zM(E){io.start({kind:"opening",opening:E})}function jM(E,P){const se=u.value;if(!se)return;const ke=H1(E),Oe=F1(se.snapshot.value.room,P,ke.widthM);if(!Oe){Wh();return}const vt=se.dispatch({type:"opening.add",kind:E.kind,wall:Oe.wall,offsetM:Oe.offsetM,widthM:ke.widthM,heightM:ke.heightM,...ke.sillM!==void 0?{sillM:ke.sillM}:{}});vt.ok||(vt.issue.code==="OPENING_OVERLAP"?r(c("tool.blockingBoard.board.pick.fail.openingOverlap")):vo(vt.issue))}function cc(E){const P=u.value,se=io.pick.value;if(se?.kind==="opening"&&se.opening){jM(se.opening,E.point);return}if(!P||!se?.actorId)return;const ke={snapshot:P.snapshot.value,partId:P.activePartId.value,actorId:se.actorId,playheadSec:P.timeSec.value};if(se.kind==="walk"||se.kind==="run"){Uu(Ol(ke,E.point,se.kind==="walk"?"walk":"run"),{follow:!0});return}if(se.kind==="sit"){if(!E.targetId||!HM(E.targetId)){Wh();return}es(l1(ke,E.targetId))&&io.cancel();return}const Oe=E.targetId?{id:E.targetId}:{point:E.point};es(pv(ke,Oe)),io.cancel()}function dc(E){const P=u.value;P&&es(f1({snapshot:P.snapshot.value,partId:P.activePartId.value,actorId:E.actorId},E.last,E.preset))}const Go=G(null);function uc(E){Go.value={ctx:E.ctx,hit:E.hit,choices:I9(E.ctx,E.hit),x:E.clientX,y:E.clientY}}function UM(E){const P=Go.value;Go.value=null;const se=u.value;if(!P||!se)return;const ke=x9(P.ctx,P.hit,E);if(ke.moveResult){Uu(ke.moveResult);return}if(ke.commands.length>0){const Oe=se.commitMany(ke.commands.map(vt=>_p(vt,se.snapshot.value,se.activePartId.value)),{label:{key:"tool.blockingBoard.history.cmd.dropChoice"}});if(!Oe.ok){vo(Oe.issue);return}}ke.noticeKey&&r(c(`tool.blockingBoard.${ke.noticeKey}`))}ni(()=>Go.value!==null,{name:"dropChoice",onAction:E=>{if(E.id!=="overlay.close")return!1;Go.value=null}}),Fue({area:lc,overlays:Vh,context:()=>({dragging:$e.value||Fe.value,transform:Ze.value?.mode??null,viewportMode:te.value==="camera"||j.value!=="2d"?ue.value:null,workspace:te.value}),run:Vu});function Vu(E,P){if(E.id==="add.openMenu"){v$(E.arg.at);return}if(E.id==="camera.insertKey"){Zh();return}if(E.id==="stage.cancelDrag"&&Fe.value){X.value?.runKeyAction({id:"timeline.cancelDrag"});return}switch(P){case"stage2d":GM()?.runKeyAction?.(E);return;case"stage3d":VM()?.runKeyAction?.(E);return;case"timeline":X.value?.runKeyAction(E);return;case"outliner":Q.value?.runKeyAction?.(E);return;case"page":Kr(E)}}function GM(){return te.value==="layout"?fe.value:Ie.value}const qh=()=>te.value==="timing"&&It.value==="3d";
264function VM(){return te.value==="camera"?lt.value:qh()?Be.value:fe.value}function WM(){return te.value==="camera"?lt.value?.currentViewPayload()??null:qh()?Be.value?.currentViewPayload()??null:fe.value?.currentViewPayload()??null}function Zh(E){const P=u.value,se=ne.value;if(!P||!se)return;const ke=(E??lc.current.value.area)==="stage3d"?WM():null,Oe=Cue({primaryId:P.selection.value.primary,part:se,atSec:P.timeSec.value,view:ke});Oe?an(Oe):r(c("tool.blockingBoard.camera.insertKeyNoCamera"))}function XM(E){if(!u.value)return;const se=new Set(ne.value?.cameras.map(Oe=>Oe.id)??[]);an(E);const ke=ne.value?.cameras.find(Oe=>!se.has(Oe.id));ke&&pc(ke.id)}function pc(E){if(te.value==="timing")return;const P=u.value,se=ne.value;!P||!se||!E||!se.cameras.some(ke=>ke.id===E)||(P.selection.value.primary!==E&&$(E,!1),Ln.value=!1,ue.value="camera",te.value==="layout"&&j.value==="2d"&&(j.value="split"))}function Kr(E){const P=u.value;if(P)switch(E.id){case"shots.splitAtPlayhead":ep();return;case"playback.toggle":f.value?.playing.value?f.value?.pause():f.value?.play();return;case"playback.shuttleBack":f.value?.shuttle(-1);return;case"playback.shuttleForward":f.value?.shuttle(1);return;case"playback.stop":f.value?.stop();return;case"playback.prevCut":case"playback.nextCut":{if(!ve.value)return;const se=ZY(ve.value.cuts,P.timeSec.value,E.id==="playback.prevCut"?-1:1);se!==null&&f.value?.seek(se);return}case"history.undo":P.undo();return;case"history.redo":P.redo();return;case"selection.delete":P.removeSelection();return;case"selection.duplicate":{const se=P.duplicateSelection();se&&!se.ok&&vo(se.issue);return}case"selection.clear":P.clearSelection(),w.value=!1;return;case"help.open":ye.value=!0;return;case"history.openPanel":Ue.value=!Ue.value;return;case"save.now":xo();return;case"visibility.hideSelected":{const se=k1(P.snapshot.value,P.activePartId.value,P.selection.value.ids);if(!se.length)return;Ke.hide(se),P.selectMany(P.selection.value.ids.filter(ke=>!se.includes(ke)));return}case"visibility.showAll":Ke.showAll()}}const fc=C(()=>h.value?.report.value??null),YM=C(()=>h.value?.running.value??!1),Fr=C(()=>fc.value?.issues??[]),Jh=C(()=>fc.value&&u.value?wu(fc.value,u.value.activePartId.value).length:0),qM=C(()=>{const E=b.value?.prompt.value;return E&&E.ok?{ko:E.ko,en:E.en}:null}),ZM=C(()=>{const E=b.value?.prompt.value;return!!E&&E.ok&&E.fresh});function JM(E){return`tool.blockingBoard.issue.${E.toLowerCase().replace(/_([a-z])/g,(se,ke)=>ke.toUpperCase())}`}const QM=C(()=>{const E=b.value?.prompt.value;if(!E||E.ok)return null;const P=E,se=P.issues&&P.issues.length>0?P.issues:[{code:P.code,severity:"error",path:"",messageKey:JM(P.code)}];return{code:P.code,issues:se}});Je(()=>b.value?.error.value,E=>{E&&(r(c(E)),b.value.error.value=null)}),Je(()=>b.value?.copied.value,E=>{E&&l(c("tool.blockingBoard.export.copiedToast"))});function e$(){te.value="output"}async function t$(E){await b.value?.copyAll(E)}const Hr=G(!1),Wu=G(!1),mc=Sn({excluded:new Set,includeRecording:!0,grayscale:!0});let Xu=null;function Qh(E){const P=u.value;return Oa(P.snapshot.value,P.activePartId.value,{excluded:E})}async function hc(E,P={}){const se=I.value,ke=u.value;if(!se||!ke)return;const Oe=ke.activePartId.value,vt=Qh(E);!await se.ensureProse(Oe,{plan:vt,force:P.force})&&P.toast&&se.status.value==="failed"&&se.failure.value&&r(c(se.failure.value.messageKey))}const zr=C(()=>{const E=b.value,P=I.value,se=u.value;if(!E||!P||!se||!Hr.value||P.status.value==="writing")return null;const ke=se.activePartId.value,{excluded:Oe,includeRecording:vt}=mc.value,sn=Qh(Oe),Pn=P.status.value==="ready"&&P.isFresh(ke,sn)?se.snapshot.value.parts.find(gn=>gn.partId===ke)?.handoffProse??null:null,Ne=E.handoffPrompt({excluded:Oe,includeRecording:vt,prose:Pn});return Ne.ok?{result:Ne,stored:Pn,max:sn.limits?.promptMax??null}:null});async function n$(){const E=b.value;!E||!u.value||(Wu.value=!1,Xu=null,Hr.value=!0,Wu.value=await E.hasVideoDraftContent())}function o$(E){mc.value=E;const P=[...E.excluded].sort().join("|");P!==Xu&&(Xu=P,hc(E.excluded))}async function eb(E,P){const se=b.value,ke=zr.value;if(!se||!ke)return;const Oe=await se.sendToVideo({...E,prose:P?ke.stored:null,promptEn:ke.result.text});Oe.ok?Hr.value=!1:Oe.error==="HANDOFF_PROMPT_CHANGED"&&hc(E.excluded)}function a$(E){return eb(E,!0)}function s$(){return eb(mc.value,!1)}function i$(){const E=b.value;E?.sendProgress.value?E.cancelSendToVideo():(I.value?.cancel(),Hr.value=!1)}function Yu(E){b.value?.downloadShotlist(E)}const tb=C(()=>{const E=u.value,P=b.value;return!E||!P?null:P.pngCutFor(E.selection.value.primary,ut.value)?.index??null});function nb(){const E=u.value,P=E?b.value?.pngCutFor(E.selection.value.primary,ut.value):null;P&&b.value.downloadCutPng(P.cutId)}function r$(){const E=u.value;E&&Ce.start({snapshot:E.snapshot.value,partId:E.activePartId.value,format:Ye.value,grayscale:tt.value})}function l$(E){const P=Ce.status.value;P.phase==="blocked"&&(te.value="layout",Gh(Xpe(E,P.report)),Ce.dismiss())}const la=G(null);function ob(){const E=u.value;!E||la.value||(la.value={snapshot:E.snapshot.value,partId:E.activePartId.value,timeSec:ut.value,frameState:yn.value,options:q.value})}async function c$(E){try{const P=await $he(E,{width:1920,height:1080,background:"#e9e6df"});Nu(`blocking-board-${u.value?.snapshot.value.projectId??"board"}.png`,P)}catch(P){console.error("blocking-board 2d png export failed",P),r(c("tool.blockingBoard.export.pngFailed"))}finally{la.value=null}}function d$(){r(c("tool.blockingBoard.export.pngFailed")),la.value=null}const u$=C(()=>Jh.value>0),p$=C(()=>{const E=u.value,P=E?LC(E.snapshot.value,E.selection.value):{canDupl
264icate:!1,canDelete:!1};return FC({workspace:te.value,isMac:jt,canUndo:E?.canUndo.value??!1,canRedo:E?.canRedo.value??!1,canDuplicate:P.canDuplicate,canDelete:P.canDelete,exportBlocked:u$.value,stageMode:j.value,stageOptions:q.value,pipOpen:ht.value,perfLight:Et.value,panels:Jt.value,rightOpen:Ae.value,timelineCollapsed:L.value,hasSelection:At.value,cutPngNumber:tb.value,shotbookRunning:!!b.value?.shotbookProgress.value})}),f$={"view.grid":"grid","view.labels":"labels","view.paths":"paths","view.axis":"axis","view.issues":"issues","view.snap":"snap"},m$={"view.stage2d":"2d","view.stage3d":"3d","view.stageSplit":"split"},h$={"view.fovAll":"all","view.fovSelected":"selected","view.fovNone":"none"};function ab(E){ht.value=E,Kw(E)}function b$(E){const P=f$[E];if(P){B.value={...B.value,[P]:B.value[P]===!1};return}const se=m$[E];if(se){j.value=se;return}const ke=h$[E];if(ke){B.value=_k(B.value,ke);return}switch(E){case"file.new":Rt();return;case"file.import":Bs();return;case"file.save":xo();return;case"file.downloadJson":b.value?.downloadBoardJson();return;case"file.downloadShotlistTxt":Yu("txt");return;case"file.downloadShotlistJson":Yu("json");return;case"file.downloadPng":ob();return;case"file.downloadIr":b.value?.downloadShotIR();return;case"file.downloadVideoIr":b.value?.downloadVideoIR();return;case"file.downloadCutPng":nb();return;case"file.downloadShotbookPng":b.value?.downloadShotbookPng();return;case"file.downloadShotbookZip":b.value?.downloadShotbookZip();return;case"file.back":Dn();return;case"edit.undo":u.value?.undo();return;case"edit.redo":u.value?.redo();return;case"edit.history":Ue.value=!0;return;case"edit.duplicate":Kr({id:"selection.duplicate"});return;case"edit.delete":Kr({id:"selection.delete"});return;case"edit.roomSettings":so();return;case"edit.imagePath":Vn();return;case"view.pip":ab(!ht.value);return;case"view.perfLight":Et.value=!Et.value;return;case"view.outliner":na("left");return;case"view.properties":go();return;case"view.timeline":L.value=!L.value;return;case"view.hide":Kr({id:"visibility.hideSelected"});return;case"view.showAll":Kr({id:"visibility.showAll"});return;case"view.shortcuts":ye.value=!0}}function sb(){Vu({id:"add.openMenu",arg:{at:"center"}},"stage2d")}const ts=G(null),ib=G(Uw()),g$=C(()=>d?.value??"ko");function v$(E){if(!u.value)return;const P=lc.current.value.area==="stage3d"?te.value==="camera"?lt.value?.placementFor(E)??null:fe.value?.placementFor3d(E)??null:null,se=fe.value??Ie.value,ke=P??se?.placementFor?.(E)??null;ts.value={anchor:ke?.client??{x:window.innerWidth/2,y:window.innerHeight/2},at:ke?.board??{x:0,y:0},atCursor:E==="cursor"&&ke!==null}}function y$(E){const P=u.value,se=ts.value;ts.value=null,!(!P||!se)&&(an(Gw(E,se.at,P.snapshot.value.room)),ib.value=eoe(toe(E)))}const Ca=G(null);function bc(E){const P=u.value;if(!P)return;const se=Mue(E,{snapshot:P.snapshot.value,partId:P.activePartId.value,selectionIds:P.selection.value.ids,lockedIds:Ke.lockedIds.value,
264nameOf:ke=>He(zi.value[ke])});Ca.value={req:E,target:se,entries:wue({view:E.view,target:se,workspace:te.value})}}ni(()=>Ca.value!==null,{name:"contextMenu",onAction:E=>{if(E.id!=="overlay.close")return!1;Ca.value=null}});function qu(E,P){const se={id:E};Vu(se,Xw(se,{area:P==="3d"?"stage3d":"stage2d"}))}const k$=["slow","normal","fast","run"];async function S$(E){const P=Ca.value;Ca.value=null;const se=u.value;if(!P||!se)return;const ke=P.target,Oe=P.req.hit,vt=ne.value,sn=gn=>({snapshot:se.snapshot.value,partId:se.activePartId.value,actorId:gn,playheadSec:se.timeSec.value}),Pn=()=>ke.kind==="multi"?ke.ids:"id"in ke?[ke.id]:[],Ne=k$.find(gn=>E.endsWith(`.${gn}`));if(E==="selection.duplicate"||E==="selection.delete"||E==="visibility.showAll"){qu(E,P.req.view);return}if(E==="visibility.hide"){const gn=Pn();Ke.hide(gn),se.selectMany(se.selection.value.ids.filter(uo=>!gn.includes(uo)));return}if(E==="lock.on"){Ke.lock(Pn());return}if(E==="lock.off"){Ke.unlock(Pn());return}if(E==="view.frame"){qu(P.req.view==="3d"?"view3d.frameSelected":"stage2d.frameSelected",P.req.view);return}if(E==="view.fitRoom"){qu("stage2d.zoomFitRoom","2d");return}if(E==="xfm.move"||E==="xfm.rotate"||E==="xfm.scale"){fe.value?.runXfmAt?.(E,P.req.floor)??Ie.value?.runXfmAt?.(E,P.req.floor);return}if(E==="add.openMenu"){ts.value={anchor:{x:P.req.clientX,y:P.req.clientY},at:P.req.floor??{x:0,y:0},atCursor:P.req.floor!==null};return}if(E==="room.settings"){so();return}if(ke.kind==="floor"){if(!ke.actor||!P.req.floor)return;E==="move.walkHere"||E==="move.runHere"?Uu(Ol(sn(ke.actor.id),P.req.floor,E==="move.runHere"?"run":"walk")):E==="path.insertHere"?LM(ke.actor.id,P.req.floor):E==="look.here"&&es(pv(sn(ke.actor.id),{point:P.req.floor}));return}if(Oe.kind==="waypoint"){const gn=vt?.actors.find(vc=>vc.id===Oe.actorId),uo=gn?.path.waypoints[Oe.index];if(!vt||!gn||!uo)return;const{actorId:Ts,index:Ur}=Oe;if(E.startsWith("waypoint.pause."))an({type:"actor.setWaypointPause",actorId:Ts,index:Ur,pauseSec:Number(E.slice(15))});else if(E==="waypoint.remove")an({type:"actor.removeWaypoint",actorId:Ts,index:Ur});else if(E.startsWith("waypoint.pose.")){const vc=E.slice(14),L$=Jf(gn,Ur,vt.durationSec)+uo.pauseSec,K$=vc==="sit"&&Oe.seatPropId?{seatPropId:Oe.seatPropId}:{};an({type:"actor.addPoseKey",actorId:Ts,atSec:L$,pose:vc,...K$})}return}if(Oe.kind==="path"){const gn=vt?.actors.find(uo=>uo.id===Oe.actorId);if(!vt||!gn)return;if(E==="path.addWaypoint"){if(Xh(gn))return;an({type:"actor.addWaypoint",actorId:Oe.actorId,index:Oe.insertIndex,point:Oe.point})}else if(E.startsWith("path.speed.")&&Ne&&Oe.groupLast!==null)dc({actorId:Oe.actorId,last:Oe.groupLast,preset:Ne});else if(E==="path.lookHere"){const uo=mn(gn,Oe.atSec,{durationSec:vt.durationSec}).headingDeg;an({type:"actor.addFacingKey",actorId:Oe.actorId,atSec:Oe.atSec,headingDeg:uo}),f.value?.seek(Oe.atSec)}return}if(Oe.kind==="facingKey"){const gn=vt?.actors.find(uo=>uo.id===Oe.actorId)?.facingKeys[Oe.index];if(!gn)return;E==="facing.toTravel"?_s([{type:"actor.removeFacingKey",actorId:Oe.actorId,index:Oe.index},{type:"actor.addFacingKey",actorId:Oe.actorId,atSec:gn.atSec,headingDeg:gn.headingDeg,travel:!0}],{label:{key:"tool.blockingBoard.history.cmd.facingToTravel"}}):E==="facing.remove"&&an({type:"actor.removeFacingKey",actorId:Oe.actorId,index:Oe.index});return}if("id"in ke){if(E==="entity.rename"){Jt.value.left||na("left"),await hn(),await Q.value?.renameById(ke.id);return}if(E==="pick.walk"||E==="pick.run"||E==="pick.look"){io.start({kind:E.slice(5),actorId:ke.id});return}if(E==="actor.sit"){Yh(ke.id);return}if(E==="actor.standUp"){es(u1(sn(ke.id)));return}if(E.startsWith("motion.")){es(p1(sn(ke.id),E.slice(7)));return}if(E.startsWith("move.lastSpeed.")){const gn=vt?.actors.find(Ts=>Ts.id===ke.id),uo=vt&&gn?$s(gn,vt.durationSec).at(-1)?.last:void 0;Ne&&uo!==void 0&&dc({actorId:ke.id,last:uo,preset:Ne});return}if(E==="camera.forActor"){I$(ke.id);return}if(E==="prop.unstack"){const gn=Vf(se.snapshot.value,se.activePartId.value,ke.id);gn&&an(gn);return}if(E==="prop.ground"){an({type:"prop.setElevation",propId:ke.id,elevationM:null});return}if(E==="camera.lookThrough"){pc(ke.id);return}
264E==="camera.insertKey"&&Zh(P.req.view==="3d"?"stage3d":"stage2d")}}function gc(E){if(E.kind==="sit"){Yh(E.actorId);return}io.start({kind:E.kind,actorId:E.actorId})}function I$(E){const P=u.value,ke=ne.value?.actors.find(Ur=>Ur.id===E);if(!P||!ke)return;const Oe=yn.value?.actors[ke.id],vt=Oe?.position??ke.start.position,sn=In(Oe?.headingDeg??ke.start.headingDeg),Pn={x:vt.x+sn.x*2,y:vt.y+sn.y*2},Ne="quick.aimCamera",gn=P.dispatch({type:"camera.add",position:Pn,headingDeg:Ms(Pn,vt)},{coalesceKey:Ne,label:{key:"tool.blockingBoard.history.aimCameraAtActor",name:zi.value[ke.id]}});if(!gn.ok){vo(gn.issue);return}const uo=P.selection.value.primary;if(!uo)return;const Ts=P.dispatch({type:"camera.aimAt",cameraId:uo,targetIds:[ke.id]},{coalesceKey:Ne});Ts.ok||vo(Ts.issue),pc(uo)}function rb(){B.value={...B.value,detail:B.value.detail!==!0}}const w$={all:"selected",selected:"none",none:"all"},M$={all:"fovAll",selected:"fovSelected",none:"fovNone"};function $$(){B.value=_k(B.value,w$[q.value.fov??"all"])}function E$(){Ie.value?.runKeyAction?.({id:"stage2d.frameSelected"})}const zi=C(()=>u.value?ka(u.value.snapshot.value):{}),lb=C(()=>{const E=yn.value?.activeCut;return!E||!ne.value?null:Oi(ne.value.timeline.cuts).get(E.id)??null}),cb=C(()=>{const E=u.value;if(!E)return null;const P=E.snapshot.value.parts,se=E.selection.value.primary;return _ue({workspace:te.value,area:te.value==="layout"&&j.value==="3d"?"stage3d":lc.current.value.area,transforming:Ze.value!==null,playing:f.value?.playing.value??!1,selectionCount:E.selection.value.ids.length,primaryLabel:se?zi.value[se]??null:null,objectCount:Aue(E.snapshot.value,E.activePartId.value),partIndex:P.findIndex(ke=>ke.partId===E.activePartId.value)+1,partCount:P.length,fps:E.snapshot.value.settings.fps,activeCutNumber:lb.value})});function Zu(E){const P=E.name?He(E.name):void 0,se=P!==void 0?{...E.params,name:P}:E.params;return se?c(E.key,se):c(E.key)}const ji=C(()=>u.value?.history.value??null),x$=C(()=>{const E=ji.value,P=E&&E.index>0?E.entries[E.index-1]:void 0;return P?Zu(P.label):null}),P$=C(()=>{const E=ji.value,P=E?E.entries[E.index]:void 0;return P?Zu(P.label):null}),C$=C(()=>{const E=lb.value,P=Fo.value;if(E===null||!P)return;const se=zi.value[P.id],ke=se?"text"in se?se.text:c(se.key,se.params??{}):"";return c("tool.blockingBoard.workspace.followViewCut",{nn:String(E).padStart(2,"0"),camera:ke})}),db=C(()=>{const E=u.value;return E?{snapshot:E.snapshot.value,partId:E.activePartId.value,timeSec:ut.value,frameState:yn.value,ghostTrail:ta.value,onionSkin:wa.value,selection:E.selection.value,readonly:!1,options:q.value,dragPreview:F.value,overlays:Uh.value,issues:Fr.value,authoredSecOf:bn,background:E.snapshot.value.background,photoUrl:y.value?.shownPhotoUrl.value??null,viewingCameraId:Mo.value?.id??null,hiddenIds:Ke.hiddenIds.value,lockedIds:Ke.lockedIds.value,pick:io.pick.value,playing:f.value?.playing.value??!1,addMarker:Go.value?.ctx.rawPoint??null}:null}),B$={select:$,"select-many":J,"drag-preview":rc,"drag-commit":an,"commit-many":_s,"context-menu":bc,"actor-act":gc,"detour-apply":pt,"detour-ignore":ln,"update:dragging":E=>{$e.value=E},"update:xfm":E=>{Ze.value=E},notice:E=>r(c(E)),pick:cc,"pick-cancel":io.cancel,"segment-speed":dc,"drop-choice":uc},Ju=C(()=>ne.value?Fte(ne.value,ve.value):[]),_$=C(()=>Hte(Ju.value,ut.value)),A$=C(()=>Object.fromEntries((ne.value?.cameras??[]).map((E,P)=>[E.id,ui(E,c("tool.blockingBoard.cameraFallback",{n:P+1}))]))),Qu=G({}),ub=Sn([]);let jr=null;function T$(){const E=u.value,P=ne.value;if(!E||!P||!W.value||!ve.value)return[];const se=E.snapshot.value,ke=Cw(se,P.partId),Oe={part:P,settled:W.value,resolved:ve.value,tracks:Re.value},vt=[];for(const sn of Ju.value){const Pn=jte(se,Oe,{cutId:sn.cutId,inSec:sn.inSec},ke);Pn&&vt.push(Pn)}return vt}function pb(){jr!==null&&clearTimeout(jr),jr=null}Je(()=>[te.value,u.value?.snapshot.value,u.value?.activePartId.value,f.value?.playing.value??!1],([E,,,P])=>{pb(),!(E!=="camera"||P)&&(jr=setTimeout(()=>{jr=null,ub.value=T$()},Whe))},{immediate:!0}),wn(pb);function R$(E,P,se){Qu.value={...Qu.value,[E]:se}}function ep(){const E=u.value,P=ne.value;if(!E||!P)return;if(P.timeline.cuts.length===0){D$();return}const se=ve.value?.cuts??P.timeline.cuts,ke=JY(se,E.timeSec.value),Oe=E.timeSec.value,vt=1/E.snapshot.value.settings.fps;
264if(!ke||Oe-ke.inSec<vt-xn||ke.outSec-Oe<vt-xn){r(c("tool.blockingBoard.shotList.noCutHere"));return}const sn=tw(se,P.timeline.cuts,ke.id);an({type:"cut.split",cutId:ke.id,atSec:Oe-sn})}function D$(){const E=u.value,P=$ue(ne.value,E.selection.value.primary);if(P.kind==="noCamera"){r(c("tool.blockingBoard.shotList.noCamera"));return}const se={key:"tool.blockingBoard.history.cmd.firstCut"};if(P.kind==="cutOnly"){an(P.command,{label:se});return}const ke="shot.firstCut",Oe=new Set(ne.value.timeline.coverages.map(Ne=>Ne.id)),vt=E.dispatch(P.command,{coalesceKey:ke,label:se});if(!vt.ok){vo(vt.issue);return}const sn=ne.value.timeline.coverages.find(Ne=>!Oe.has(Ne.id));if(!sn)return;const Pn=E.dispatch({type:"cut.add",coverageId:sn.id,inSec:sn.startSec,outSec:sn.endSec},{coalesceKey:ke});Pn.ok||vo(Pn.issue)}function O$(E){te.value!=="timing"&&(ue.value=E)}function N$(E){te.value!=="timing"&&(Ln.value=E)}return Je(()=>De.query,E=>{const P=Tk(E);if(P.view==="workbench"){if(u.value&&i.current.value?.projectId===P.projectId){s.value="workbench";return}s.value==="start"&&Uo.value?.cancel(),Dt(P.projectId).then(se=>{se||bt.replace(Ft())});return}if(P.view==="start"){s.value!=="start"&&ei();return}s.value==="workbench"?Ja():s.value==="start"&&(Uo.value?.cancel(),s.value="list")},{immediate:!0}),(E,P)=>{const se=RE,ke=E2,Oe=zk,vt=L2,sn=IK,Pn=jK;return v(),k("section",{class:qe(["bb-page bb-ui",{"bb-page--workbench":s.value==="workbench"}])},[s.value==="list"?(v(),et(se,{key:0,projects:g(i).projects.value,"has-more":Xe.value,onCreate:Rt,onOpen:Lt,onRemove:R,onMore:_e},null,8,["projects","has-more"])):s.value==="start"&&g(Uo)?(v(),et(qle,{key:1,create:g(Uo),onBlank:P[0]||(P[0]=Ne=>Li("blank")),onJson:P[1]||(P[1]=Ne=>Li("json")),onCreated:_r,onBack:xa},null,8,["create"])):(v(),et(vt,{key:2,layout:"board",workspace:te.value,narrow:Zn.value,"timeline-collapsed":V.value,"left-collapsed":!Jt.value.left,"right-collapsed":!Ae.value},{top:rn(()=>[ce(ke,{"project-name":g(i).current.value?.name??"","save-state":g(i).saveState.value,"last-saved-at":g(u)?g(i).lastSavedAt.value:null,"size-level":g(i).sizeLevel.value,"can-export":!!g(u),"error-count":Jh.value,"left-open":Jt.value.left,"right-open":Ae.value,"can-rename":g(XC)(g(i).saveState.value,!!g(u)),workspace:te.value,menus:p$.value,"can-undo":g(u)?.canUndo.value??!1,"can-redo":g(u)?.canRedo.value??!1,"undo-label":x$.value,"redo-label":P$.value,"is-mac":g(jt),narrow:Zn.value,"history-open":Ue.value,onBack:Dn,onRetry:P[2]||(P[2]=Ne=>g(i).retrySave()),onRename:Tr,onImport:Bs,onExport:e$,onToggleLeft:P[3]||(P[3]=Ne=>na("left")),onToggleRight:go,"onUpdate:workspace":P[4]||(P[4]=Ne=>te.value=Ne),onMenuAction:b$,onUndo:P[5]||(P[5]=Ne=>g(u)?.undo()),onRedo:P[6]||(P[6]=Ne=>g(u)?.redo()),onOpenAddMenu:sb,onToggleHistory:P[7]||(P[7]=Ne=>Ue.value=!Ue.value)},null,8,["project-name","save-state","last-saved-at","size-level","can-export","error-count","left-open","right-open","can-rename","workspace","menus","can-undo","can-redo","undo-label","redo-label","is-mac","narrow","history-open"]),g(i).saveState.value==="conflict"?(v(),et(yhe,{key:0,onOverwrite:P[8]||(P[8]=Ne=>g(i).overwriteAfterConflict()),onReload:$a})):H("",!0),g(u)&&Ue.value&&ji.value?(v(),k("div",_he,[ce(lie,{entries:ji.value.entries,index:ji.value.index,truncated:ji.value.truncated,onJump:P[9]||(P[9]=Ne=>g(u).jumpTo(Ne)),onClose:P[10]||(P[10]=Ne=>Ue.value=!1)},null,8,["entries","index","truncated"])])):H("",!0)]),left:rn(()=>[g(u)?(v(),et(RY,{key:0,ref_key:"sidePanelRef",ref:Q,snapshot:g(u).snapshot.value,"part-id":g(u).activePartId.value,selection:g(u).selection.value,issues:Fr.value,report:fc.value??void 0,running:YM.value,filter:g(ct).filter,"chip-kind":g(ct).chipKind,collapsed:g(ct).collapsed,"view-state":g(Ke).state.value,"active-camera-id":yn.value?.activeCut?.cameraId??null,onSelect:$,onRename:T,onNavigate:Gh,onAutoDetour:dt,onAdd:sb,"onUpdate:filter":P[11]||(P[11]=Ne=>ct.value={...g(ct),filter:Ne}),"onUpdate:chipKind":P[12]||(P[12]=Ne=>ct.value={...g(ct),chipKind:Ne}),"onUpdate:collapsed":P[13]||(P[13]=Ne=>ct.value={...g(ct),collapsed:Ne}),onToggleHidden:Ee,onToggleLocked:P[14]||(P[14]=Ne=>g(Ke).toggleLocked(Ne)),onRowAction:ze},null,8,["snapshot","part-id","selection","issues","report","running","filter","chip-kind","collapsed","view-state","active-camera-id"])):H("",!0)]),stage:rn(()=>[g(u)&&g(y)?.isOpen.value&&g(y).shownPhotoUrl.value&&g(u).snapshot.value.background?(v(),et(VW,{key:0,"photo-url":g(y).shownPhotoUrl.value,"width-px":g(u).snapshot.value.background.widthPx,"height-px":g(u).snapshot.value.background.heightPx,room:g(u).snapshot.value.room,onApply:Hi,onCancel:Lr},null,8,["photo-url","width-px","height-px","room"])):g(u)?(v(),k("div",Ahe,[ce(Uae,{ref_key:"stageRef",ref:fe,onAddCamera:XM,mode:j.value,"onUpdate:mode":P[15]||(P[15]=Ne=>j.value=Ne),"viewport-mode":ue.value,"onUpdate:viewportMode":P[16]||(P[16]=Ne=>ue.value=Ne),snapshot:g(u).snapshot.value,"part-id":g(u).activePartId.value,"time-sec":g(ut),"frame-state":yn.value,"ghost-trail":ta.value,selection:g(u).selection.value,readonly:!1,options:q.value,"drag-preview":F.value,"add-marker":Go.value?Go.value.ctx.rawPoint:ts.value?.atCursor?ts.value.at:null,overlays:Uh.value,issues:Fr.value,"authored-sec-of":bn,"display-camera":Mo.value,"follow-cut":Ln.value,playing:g(f)?.playing.value??!1,"selection-bounds":Ho.value,"camera-states":To.value,"selected-camera":Hn.value,"pip-open":ht.value,"perf-light":Et.value,settled:ne.value?.timeline??{actions:[],dialogues:[],propEvents:[],coverages:[],cuts:[]},"photo-url":g(y)?.shownPhotoUrl.value??null,"pending-removal":g(u).pendingRemoval.value,"hidden-ids":g(Ke).hiddenIds.value,"locked-ids":g(Ke).lockedIds.value,pick:g(io).pick.value,onSelect:$,onSelectMany:J,onDragPreview:rc,onDragCommit:an,onCommitMany:_s,onDetourApply:pt,onDetourIgnore:ln,onRemovalConfirm:Qe,onRemovalCancel:Pt,onCommand:an,onApplyView:Or,onAddKey:Nr,onPhotoUpload:qt,onPhotoAlign:Pa,onPhotoSelect:Qa,onRoomSettings:so,"onUpdate:options":P[17]||(P[17]=Ne=>B.value=Ne),"onUpdate:followCut":P[18]||(P[18]=Ne=>Ln.value=Ne),"onUpdate:dragging":P[19]||(P[19]=Ne=>$e.value=Ne),onNotice:P[20]||(P[20]=Ne=>g(r)(g(c)(Ne))),"onUpdate:xfm":P[21]||(P[21]=Ne=>
264Ze.value=Ne),"onUpdate:pipOpen":ab,"onUpdate:perfLight":P[22]||(P[22]=Ne=>Et.value=Ne),onOpenShortcuts:P[23]||(P[23]=Ne=>ye.value=!0),onContextMenu:bc,onActorAct:gc,onPick:cc,onPickCancel:P[24]||(P[24]=Ne=>g(io).cancel()),onSegmentSpeed:dc,onDropChoice:uc,onPickOpening:zM,onRotateCommit:Gu},null,8,["mode","viewport-mode","snapshot","part-id","time-sec","frame-state","ghost-trail","selection","options","drag-preview","add-marker","overlays","issues","display-camera","follow-cut","playing","selection-bounds","camera-states","selected-camera","pip-open","perf-light","settled","photo-url","pending-removal","hidden-ids","locked-ids","pick"])])):H("",!0)]),right:rn(()=>[Ae.value?g(u)&&w.value&&g(u).snapshot.value.background?(v(),et(Lj,{key:1,background:g(u).snapshot.value.background,"photo-loaded":g(y)?.shownPhotoUrl.value!=null,"photo-url":g(y)?.shownPhotoUrl.value??null,onCommand:an,onRealign:ju,onReplace:qt,onCollapse:go},null,8,["background","photo-loaded","photo-url"])):g(u)?(v(),et(wj,{key:2,snapshot:g(u).snapshot.value,"part-id":g(u).activePartId.value,selection:g(u).selection.value,issues:Fr.value,"time-sec":g(u).timeSec.value,"frame-state":yn.value,"authored-sec-of":bn,picking:g(io).pick.value?.kind??null,onCommand:an,onFocusWaypoint:zu,onAutoDetour:Ct,onCollapse:go,onLookThrough:pc,onSelect:at,onPick:KM,onIntent:es,onSeek:FM,onNotice:P[25]||(P[25]=Ne=>g(r)(g(c)(Ne)))},null,8,["snapshot","part-id","selection","issues","time-sec","frame-state","picking"])):H("",!0):(v(),et(jj,{key:0,items:zo.value,onExpand:nn},null,8,["items"]))]),timeline:rn(()=>[g(u)&&ne.value&&W.value&&ve.value?(v(),et(UZ,{key:0,ref_key:"timelineRef",ref:X,part:ne.value,settled:W.value,resolved:ve.value,"time-sec":g(u).timeSec.value,fps:g(u).snapshot.value.settings.fps,playing:g(f)?.playing.value??!1,selection:g(u).selection.value,mode:te.value==="camera"?"cut":ee.value,"mode-switch-hidden":te.value==="camera",variant:te.value==="timing"?"timing":"compact",issues:Fr.value,"zoom-px-per-sec":Z.value.zoomPxPerSec,collapsed:V.value,parts:Qn.value,"active-part-id":g(u).activePartId.value,unit:D.value.unit,loop:Z.value.loop,speed:g(f)?.speed.value??1,rate:g(f)?.rate.value??1,snap:D.value.snap,"hidden-ids":g(Ke).hiddenIds.value,"locked-ids":g(Ke).lockedIds.value,"collapsed-actor-ids":Z.value.collapsedActorIds,"timing-collapsed":pe.value,"key-selection":le.value,"box-select-armed":me.value,"flash-ids":re.value,onSelectPart:st,"onUpdate:mode":P[26]||(P[26]=Ne=>ee.value=Ne),"onUpdate:zoomPxPerSec":P[27]||(P[27]=Ne=>Z.value={...Z.value,zoomPxPerSec:Ne}),"onUpdate:collapsed":P[28]||(P[28]=Ne=>L.value=Ne),"onUpdate:unit":P[29]||(P[29]=Ne=>D.value={...D.value,unit:Ne}),"onUpdate:loop":P[30]||(P[30]=Ne=>Z.value={...Z.value,loop:Ne}),"onUpdate:speed":P[31]||(P[31]=Ne=>g(f)?.setSpeed(Ne)),"onUpdate:snap":P[32]||(P[32]=Ne=>D.value={...D.value,snap:Ne}),"onUpdate:collapsedActorIds":P[33]||(P[33]=Ne=>Z.value={...Z.value,collapsedActorIds:Ne}),"onUpdate:timingCollapsed":P[34]||(P[34]=Ne=>pe.value=Ne),"onUpdate:keySelection":P[35]||(P[35]=Ne=>le.value=Ne),"onUpdate:boxSelectArmed":P[36]||(P[36]=Ne=>me.value=Ne),"onUpdate:dragging":P[37]||(P[37]=Ne=>Fe.value=Ne),onToggleHidden:P[38]||(P[38]=Ne=>g(Ke).toggleHidden(Ne)),onToggleLocked:P[39]||(P[39]=Ne=>g(Ke).toggleLocked(Ne)),onPlay:P[40]||(P[40]=Ne=>g(f)?.play()),onPause:P[41]||(P[41]=Ne=>g(f)?.pause()),onSeek:P[42]||(P[42]=Ne=>g(f)?.seek(Ne)),onSelect:$,onCommand:an,onCommands:_s,onSplitAtPlayhead:ep},null,8,["part","settled","resolved","time-sec","fps","playing","selection","mode","mode-switch-hidden","variant","issues","zoom-px-per-sec","collapsed","parts","active-part-id","unit","loop","speed","rate","snap","hidden-ids","locked-ids","collapsed-actor-ids","timing-collapsed","key-selection","box-select-armed","flash-ids"])):H("",!0)]),status:rn(()=>[!Zn.value&&cb.value?(v(),et(tce,{key:0,content:cb.value},null,8,["content"])):H("",!0)]),shots:rn(()=>[ne.value?(v(),et(dse,{key:0,rows:Ju.value,"camera-names":A$.value,"active-cut-id":_$.value,thumbnails:Qu.value,"part-title":ne.value.title,onSeek:P[43]||(P[43]=Ne=>g(f)?.seek(Ne)),onSelect:$,"onUpdate:followCut":P[44]||(P[44]=Ne=>Ln.value=Ne),onSplitCut:ep,onSetCamera:P[45]||(P[45]=(Ne,gn)=>an({type:"cut.setCamera",cutId:Ne,cameraId:gn}))},null,8,["rows","camera-names","active-cut-id","thumbnails","part-title"])):H("",!0)]),plan:rn(()=>[g(u)?(v(),k(ae,{key:0},[te.value==="camera"?(v(),et(dd,{key:0,title:g(c)("tool.blockingBoard.workspace.plan"),subtitle:g(c)("tool.blockingBoard.workspace.planTop")},{default:rn(()=>[m("button",{type:"button",class:"bb-area-fov",onClick:$$},S(g(c)("tool.blockingBoard.stage.quickFov"))+" · "+S(g(c)(`tool.blockingBoard.stage.${M$[q.value.fov??"all"]}`)),1),m("button",{type:"button",class:"bb-area-frame",onClick:E$},S(g(c)("tool.blockingBoard.workspace.frameSelected"))+" F ",1),m("button",{type:"button",class:"bb-area-detail","aria-pressed":B.value.detail===!0,title:g(c)("tool.blockingBoard.stage.detailHint"),onClick:rb},S(g(c)("tool.blockingBoard.stage.detail")),9,The)]),_:1},8,["title","subtitle"])):(v(),et(dd,{key:1,title:g(c)("tool.blockingBoard.workspace.plan")},{default:rn(()=>[m("div",Rhe,[m("button",{type:"button","data-mode":"2d","aria-pressed":It.value==="2d",onClick:P[46]||(P[46]=Ne=>It.value="2d")},S(g(c)("tool.blockingBoard.viewport.mode2d")),9,Dhe),m("button",{type:"button","data-mode":"3d","aria-pressed":It.value==="3d",onClick:P[47]||(P[47]=Ne
264=>It.value="3d")},S(g(c)("tool.blockingBoard.viewport.mode3d")),9,Ohe)]),te.value==="timing"?(v(),k("button",{key:0,type:"button",class:"bb-tim-onion","aria-pressed":oe.value,onClick:P[48]||(P[48]=Ne=>oe.value=!oe.value)},S(oe.value?g(c)("tool.blockingBoard.timing.onionOn"):g(c)("tool.blockingBoard.timing.onion")),9,Nhe)):H("",!0),m("button",{type:"button",class:"bb-area-detail","aria-pressed":B.value.detail===!0,title:g(c)("tool.blockingBoard.stage.detailHint"),onClick:rb},S(g(c)("tool.blockingBoard.stage.detail")),9,Lhe)]),_:1},8,["title"])),te.value==="timing"&&It.value==="3d"&&ne.value?(v(),k("div",Khe,[ce(Oe,null,{default:rn(()=>[ce(lm,{ref_key:"timingPlan3dRef",ref:Be,snapshot:g(u).snapshot.value,"part-id":g(u).activePartId.value,"time-sec":g(ut),"frame-state":yn.value,settled:ne.value.timeline,"active-camera-id":As(),mode:Xt.value,"perf-light":Et.value,"show-prop-labels":B.value.labels!==!1,"display-camera":bo.value,"follow-cut":yt.value,playing:g(f)?.playing.value??!1,"selection-bounds":Ho.value,"selected-camera":Hn.value,"selection-ids":g(u).selection.value.ids,"hidden-ids":g(Ke).hiddenIds.value,"locked-ids":g(Ke).lockedIds.value,"camera-states":To.value,pick:g(io).pick.value,"onUpdate:mode":P[49]||(P[49]=Ne=>Xt.value=Ne),"onUpdate:followCut":P[50]||(P[50]=Ne=>yt.value=Ne),onApplyView:Or,onAddKey:Nr,onSelect:$,onSelectMany:J,onDragCommit:an,onDropChoice:uc,"onUpdate:dragging":P[51]||(P[51]=Ne=>$e.value=Ne),onPick:cc,onPickCancel:P[52]||(P[52]=Ne=>g(io).cancel()),onRotateCommit:Gu,onContextMenu:bc,onActorAct:gc},null,8,["snapshot","part-id","time-sec","frame-state","settled","active-camera-id","mode","perf-light","show-prop-labels","display-camera","follow-cut","playing","selection-bounds","selected-camera","selection-ids","hidden-ids","locked-ids","camera-states","pick"])]),_:1})])):db.value?(v(),k("div",Fhe,[ce(Ll,Mm({ref_key:"planBoardRef",ref:Ie},db.value,Y$(B$)),null,16)])):H("",!0)],64)):H("",!0)]),view:rn(()=>[g(u)&&ne.value?(v(),k(ae,{key:0},[te.value==="timing"?(v(),et(dd,{key:0,title:g(c)("tool.blockingBoard.workspace.followView"),subtitle:C$.value,"dot-color":"var(--color-accented)"},{default:rn(()=>[ce(_w,{"active-view":lt.value?.activeView??null,onView:P[53]||(P[53]=Ne=>lt.value?.gizmoView(Ne))},null,8,["active-view"])]),_:1},8,["title","subtitle"])):H("",!0),m("div",Hhe,[ce(Oe,null,{default:rn(()=>[ce(lm,{ref_key:"viewRef",ref:lt,snapshot:g(u).snapshot.value,"part-id":g(u).activePartId.value,"time-sec":g(ut),"frame-state":yn.value,settled:ne.value.timeline,"active-camera-id":As(),mode:te.value==="timing"?"camera":ue.value,"perf-light":Et.value,"show-prop-labels":B.value.labels!==!1,"display-camera":te.value==="timing"?Fo.value:Mo.value,"follow-cut":te.value==="timing"?!0:Ln.value,playing:g(f)?.playing.value??!1,"selection-bounds":Ho.value,"selected-camera":Hn.value,"selection-ids":g(u).selection.value.ids,"hidden-ids":g(Ke).hiddenIds.value,"locked-ids":g(Ke).lockedIds.value,"camera-states":te.value==="camera"?To.value:[],"thumbnail-requests":te.value==="camera"?g(ub):[],"header-hidden":te.value==="timing",pick:g(io).pick.value,"onUpdate:mode":O$,"onUpdate:followCut":N$,onApplyView:Or,onAddKey:Nr,onSelect:$,onSelectMany:J,onDragCommit:an,onDropChoice:uc,"onUpdate:dragging":P[54]||(P[54]=Ne=>$e.value=Ne),onThumbnail:R$,onPick:cc,onPickCancel:P[55]||(P[55]=Ne=>g(io).cancel()),onRotateCommit:Gu,onContextMenu:bc,onActorAct:gc},null,8,["snapshot","part-id","time-sec","frame-state","settled","active-camera-id","mode","perf-light","show-prop-labels","display-camera","follow-cut","playing","selection-bounds","selected-camera","selection-ids","hidden-ids","locked-ids","camera-states","thumbnail-requests","header-hidden","pick"])]),_:1})])],64)):H("",!0)]),export:rn(()=>[g(u)?(v(),et(cme,{key:0,embedded:"",open:te.value==="output",prompt:qM.value,"prose-fresh":ZM.value,"prose-writing":g(I)?.status.value==="writing",blocked:QM.value,lang:_.value,busy:g(b)?.busy.value??!1,copied:g(b)?.copied.value??null,snapshot:g(u).snapshot.value,"image-count":g(Oa)(g(u).snapshot.value,g(u).activePartId.value,{excluded:new Set}).imageCount,"image-limit":g(Oa)(g(u).snapshot.value,g(u).activePartId.value,{excluded:new Set}).limits?.image??null,onCommand:an,"onUpdate:lang":P[56]||(P[56]=Ne=>_.value=Ne),onCopyAll:t$,onWriteProse:P[57]||(P[57]=Ne=>hc(new Set,{toast:!0})),onSendVideo:n$,onDownloadJson:P[58]||(P[58]=Ne=>g(b)?.downloadBoardJson()),onDownloadShotlist:Yu,onDownloadPng:ob,onDownloadIr:P[59]||(P[59]=Ne=>g(b)?.downloadShotIR()),onDownloadVideoIr:P[60]||(P[60]=Ne=>g(b)?.downloadVideoIR()),recording:g(Ce).status.value,"record-supported":g(Ce).supported.value,"record-format":Ye.value,"record-formats":g(Ce).formats.value,"onUpdate:recordFormat":P[61]||(P[61]=Ne=>Ye.value=Ne),"record-grayscale":tt.value,"grayscale-supported":g(Ce).grayscaleSupported.value,"onUpdate:recordGrayscale":P[62]||(P[62]=Ne=>tt.value=Ne),onRecordStart:r$,onRecordCancel:P[63]||(P[63]=Ne=>g(Ce).cancel()),onRecordDismiss:P[64]||(P[64]=Ne=>g(Ce).dismiss()),onRecordIssue:l$,"shotbook-progress":g(b)?.shotbookProgress.value??null,"png-cut-number":tb.value,"png-busy":la.value!==null,onDownloadCutPng:nb,onDownloadShotbookPng:P[65]||(P[65]=Ne=>g(b)?.downloadShotbookPng()),onDownloadShotbookZip:P[66]||(P[66]=Ne=>g(b)?.downloadShotbookZip()),onCancelShotbook:P[67]||(P[67]=Ne=>g(b)?.cancelShotbook())},null,8,["open","prompt","prose-fresh","prose-writing","blocked","lang","busy","copied","snapshot","image-count","
264image-limit","recording","record-supported","record-format","record-formats","record-grayscale","grayscale-supported","shotbook-progress","png-cut-number","png-busy"])):H("",!0)]),_:1},8,["workspace","narrow","timeline-collapsed","left-collapsed","right-collapsed"])),g(u)?(v(),et(nhe,{key:3,open:Hr.value,snapshot:g(u).snapshot.value,"part-id":g(u).activePartId.value,"mp4-supported":g(Ce).formats.value.mp4,"has-existing-draft":Wu.value,progress:g(b)?.sendProgress.value??null,"record-status":g(Ce).status.value,"prompt-en":zr.value?.result.text??null,"prompt-length":zr.value?.result.length??0,"prompt-max":zr.value?.max??null,"prose-status":g(I)?.status.value??"idle","prose-failure-key":g(I)?.failure.value?.messageKey??null,warnings:zr.value?.result.warnings??[],onSelection:o$,onSend:a$,onSendWithoutProse:s$,onRewrite:P[68]||(P[68]=Ne=>hc(g(mc).excluded,{force:!0})),onCancel:i$},null,8,["open","snapshot","part-id","mp4-supported","has-existing-draft","progress","record-status","prompt-en","prompt-length","prompt-max","prose-status","prose-failure-key","warnings"])):H("",!0),ce(sn,{open:O.value,"current-empty":!g(u),"has-background":!!g(u)?.snapshot.value.sceneBackground,"max-part-duration-sec":g(u)?g(za)(g(u).snapshot.value.targetVideoModel)?.maxSec??null:null,"initial-tab":N.value,onApply:Ki,onClose:Ni},null,8,["open","current-empty","has-background","max-part-duration-sec","initial-tab"]),ce(Pn,{open:!!g(A),diff:g(A)?.diff??null,current:g(u)?.snapshot.value??null,incoming:g(A)?.result??null,onApply:Rr,onCancel:P[69]||(P[69]=Ne=>A.value=null)},null,8,["open","diff","current","incoming"]),ce(Eie,{open:ye.value,"is-mac":g(jt),onClose:P[70]||(P[70]=Ne=>ye.value=!1)},null,8,["open","is-mac"]),Ca.value?(v(),et(Y1,{key:4,x:Ca.value.req.clientX,y:Ca.value.req.clientY,entries:Ca.value.entries,onRun:S$,onClose:P[71]||(P[71]=Ne=>Ca.value=null)},null,8,["x","y","entries"])):H("",!0),Go.value?(v(),et(Tse,{key:5,x:Go.value.x,y:Go.value.y,choices:Go.value.choices,onChoose:UM,onClose:P[72]||(P[72]=Ne=>Go.value=null)},null,8,["x","y","choices"])):H("",!0),ts.value?(v(),et(Pse,{key:6,anchor:ts.value.anchor,locale:g$.value,recent:ib.value,onPick:y$,onClose:P[73]||(P[73]=Ne=>ts.value=null)},null,8,["anchor","locale","recent"])):H("",!0),z.value&&s.value==="workbench"?(v(),k("div",zhe,S(z.value),1)):H("",!0),g(u)&&M.value?(v(),et(zX,{key:8,ref_key:"imagePathEditorRef",ref:x,snapshot:g(u).snapshot.value,"part-id":g(u).activePartId.value,"primary-id":g(u).selection.value.primary,photo:g(y)?.shownPhotoUrl.value?g(y).photo.value:null,"photo-loader":An,onApply:Do,onCancel:P[74]||(P[74]=Ne=>M.value=!1)},null,8,["snapshot","part-id","primary-id","photo"])):H("",!0),la.value?(v(),et(Bse,{key:9,snapshot:la.value.snapshot,"part-id":la.value.partId,"time-sec":la.value.timeSec,"frame-state":la.value.frameState,options:la.value.options,"authored-sec-of":bn,onReady:c$,onError:d$},null,8,["snapshot","part-id","time-sec","frame-state","options"])):H("",!0),K.value?(v(),k("div",jhe,S(g(c)("tool.blockingBoard.import.creating")),1)):H("",!0)],2)}}}),Yhe=ot(Xhe,[["__scopeId","data-v-361b6061"]]),ube=Object.freeze(Object.defineProperty({__proto__:null,default:Yhe},Symbol.toStringTag,{value:"Module"}));export{Y2 as B,rbe as C,Pl as M,lS as P,eg as S,ah as a,cS as b,Bu as c,aa as d,Yi as e,ch as f,ec as g,ZS as h,bR as i,Ws as j,cbe as k,dbe as l,lh as m,ih as n,_R as o,qS as p,lbe as q,ube as r,xr as s};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.