floor-editor-ts 1.1.3 โ†’ 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -56901,7 +56901,7 @@ var root_7$4 = /* @__PURE__ */ from_html(`<div class="absolute right-0 top-full
56901
56901
  var root_1$10 = /* @__PURE__ */ from_html(`<div class="h-12 bg-gradient-to-r from-slate-800 to-slate-700 flex items-center px-4 gap-3 shrink-0 shadow-sm"><!> <div class="h-5 w-px bg-white/20"></div> <div class="flex items-center gap-1"><!> <button class="text-white/80 hover:text-white text-xs hover:bg-white/10 px-1.5 py-0.5 rounded transition-colors" title="Add Floor" aria-label="Add Floor">+</button> <span class="text-white/40 text-[10px] ml-1"> </span></div> <div class="flex-1"></div> <button class="p-1.5 text-white/80 hover:text-white hover:bg-white/10 rounded transition-colors" title="Undo (Ctrl+Z)" aria-label="Undo"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg></button> <button class="p-1.5 text-white/80 hover:text-white hover:bg-white/10 rounded transition-colors" title="Redo (Ctrl+Y)" aria-label="Redo"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><path d="M20.49 15a9 9 0 1 1-2.13-9.36L23 10"></path></svg></button> <div class="h-5 w-px bg-white/20"></div> <button aria-label="Snap to Grid"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg></button> <!> <button aria-label="Toggle Furniture"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="12" width="20" height="8" rx="1"></rect><path d="M4 12V7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v5"></path><line x1="12" y1="12" x2="12" y2="20"></line></svg></button> <div class="h-5 w-px bg-white/20"></div> <!> <button class="p-1.5 text-white/80 hover:text-white hover:bg-white/10 rounded transition-colors" title="Version History" aria-label="Version History"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg></button> <button class="px-2 py-1.5 text-white/80 hover:text-white hover:bg-white/10 rounded transition-colors" title="Area Summary" aria-label="Area Summary"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><path d="M3 9h18"></path><path d="M9 3v18"></path></svg></button> <button class="px-2 py-1.5 text-white/80 hover:text-white hover:bg-white/10 rounded transition-colors" title="Settings" aria-label="Settings"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></button> <div class="h-5 w-px bg-white/20"></div> <div class="relative"><button class="px-3 py-1.5 text-sm text-white/90 hover:text-white hover:bg-white/10 rounded transition-colors flex items-center gap-1.5"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg> Export</button> <!></div> <span><!></span> <button class="px-3 py-1.5 text-sm bg-white text-slate-800 font-semibold rounded-lg hover:bg-blue-50 transition-colors shadow-sm">Save</button></div>`);
56902
56902
  var root_13$2 = /* @__PURE__ */ from_html(`<div class="absolute right-0 top-full mt-1 bg-white rounded-lg shadow-lg border border-gray-200 py-1 w-48 z-50"><button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 6 2 18 2 18 9"></polyline><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path><rect x="6" y="14" width="12" height="8"></rect></svg> Print Layout</button> <div class="h-px bg-gray-100 my-1"></div> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><path d="M21 15l-5-5L5 21"></path></svg> Export 2D as PNG</button> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5z"></path><path d="M2 17l10 5 10-5"></path><path d="M2 12l10 5 10-5"></path></svg> Export 3D as PNG</button> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 19V5"></path><path d="M5 12l7-7 7 7"></path></svg> Export as SVG</button> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path><path d="M8 16h2"></path><path d="M14 16h2"></path></svg> Export as DXF</button> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path><path d="M9 16h6"></path></svg> Export as DWG</button> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path><path d="M16 11v6"></path><path d="M8 11v6"></path><path d="M12 11v6"></path></svg> Export as PDF</button> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path></svg> Download JSON</button> <div class="h-px bg-gray-100 my-1"></div> <button class="w-full px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 text-left flex items-center gap-2"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg> Import JSON</button></div>`);
56903
56903
  var root_12$2 = /* @__PURE__ */ from_html(`<div class="h-12 bg-gradient-to-r from-slate-800 to-slate-700 flex items-center justify-between px-4 gap-3 shrink-0 shadow-sm"><span class="font-semibold text-white text-sm px-2 py-0.5 rounded transition-colors"> </span> <div class="relative"><button class="px-3 py-1.5 text-sm text-white/90 hover:text-white hover:bg-white/10 rounded transition-colors flex items-center gap-1.5"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg> Import</button> <!></div></div>`);
56904
- var root_14$1 = /* @__PURE__ */ from_html(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/40"><div class="bg-white rounded-xl shadow-2xl w-[420px] max-h-[80vh] overflow-hidden"><div class="flex items-center justify-between px-5 py-3 border-b border-gray-200"><h2 class="text-base font-semibold text-gray-800">๐Ÿ“ Area Summary</h2> <button class="text-gray-400 hover:text-gray-600 text-xl leading-none">&times;</button></div> <div class="overflow-y-auto max-h-[calc(80vh-52px)] p-1"><!></div></div></div>`);
56904
+ var root_14$2 = /* @__PURE__ */ from_html(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/40"><div class="bg-white rounded-xl shadow-2xl w-[420px] max-h-[80vh] overflow-hidden"><div class="flex items-center justify-between px-5 py-3 border-b border-gray-200"><h2 class="text-base font-semibold text-gray-800">๐Ÿ“ Area Summary</h2> <button class="text-gray-400 hover:text-gray-600 text-xl leading-none">&times;</button></div> <div class="overflow-y-auto max-h-[calc(80vh-52px)] p-1"><!></div></div></div>`);
56905
56905
  var root$5 = /* @__PURE__ */ from_html(`<!> <!> <!> <!>`, 1);
56906
56906
  function TopBar($$anchor, $$props) {
56907
56907
  push($$props, true);
@@ -57345,7 +57345,7 @@ function TopBar($$anchor, $$props) {
57345
57345
  });
57346
57346
  var node_11 = sibling(node_10, 2);
57347
57347
  var consequent_9 = ($$anchor) => {
57348
- var div_9 = root_14$1();
57348
+ var div_9 = root_14$2();
57349
57349
  var div_10 = child(div_9);
57350
57350
  var div_11 = child(div_10);
57351
57351
  var button_37 = sibling(child(div_11), 2);
@@ -58016,16 +58016,16 @@ var root_1$8 = /* @__PURE__ */ from_html(`<div class="space-y-1"><h3 class="text
58016
58016
  var root_6$4 = /* @__PURE__ */ from_html(`<button class="flex flex-col items-center gap-1.5 p-3 rounded-lg border-2 border-gray-100 hover:border-blue-300 hover:bg-blue-50 transition-colors cursor-grab active:cursor-grabbing" draggable="true"><div class="w-12 h-12 rounded-lg bg-gray-50 flex items-center justify-center text-2xl font-mono"> </div> <span class="text-xs font-medium text-gray-600"> </span></button>`);
58017
58017
  var root_7$3 = /* @__PURE__ */ from_html(`<button class="flex flex-col items-center gap-1.5 p-3 rounded-lg border-2 border-gray-100 hover:border-green-300 hover:bg-green-50 transition-colors cursor-grab active:cursor-grabbing" draggable="true"><div class="w-12 h-12 rounded-lg bg-green-50 flex items-center justify-center text-lg"><!></div> <span class="text-xs font-medium text-gray-600"> </span> <span class="text-[10px] text-gray-400"> </span></button>`);
58018
58018
  var root_5$4 = /* @__PURE__ */ from_html(`<div class="space-y-2"><h3 class="text-xs font-semibold text-gray-400 uppercase mb-2">Room Presets</h3> <p class="text-xs text-gray-400 mb-3">Click to add a room shape to the canvas</p> <div class="grid grid-cols-2 gap-2"></div> <hr class="my-3 border-gray-200"/> <h3 class="text-xs font-semibold text-gray-400 uppercase mb-2">Room Templates</h3> <p class="text-xs text-gray-400 mb-3">Pre-furnished rooms โ€” walls + furniture in one click</p> <div class="grid grid-cols-2 gap-2"></div></div>`);
58019
- var root_16$1 = /* @__PURE__ */ from_html(`<button class="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 w-5 h-5 flex items-center justify-center rounded-full hover:bg-gray-100" title="Clear search"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>`);
58020
- var root_17$2 = /* @__PURE__ */ from_html(`<div class="text-[10px] text-gray-400 px-1"> </div>`);
58019
+ var root_16$2 = /* @__PURE__ */ from_html(`<button class="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 w-5 h-5 flex items-center justify-center rounded-full hover:bg-gray-100" title="Clear search"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>`);
58020
+ var root_17$1 = /* @__PURE__ */ from_html(`<div class="text-[10px] text-gray-400 px-1"> </div>`);
58021
58021
  var root_18$2 = /* @__PURE__ */ from_html(`<button> </button>`);
58022
58022
  var root_20$2 = /* @__PURE__ */ from_html(`<button draggable="true"><span role="button" tabindex="0"> </span> <div class="w-8 h-8 rounded-lg flex items-center justify-center"><div class="w-4 h-4 rounded-sm"></div></div> <span class="text-[10px] font-medium text-gray-600 leading-tight text-center"> </span></button>`);
58023
58023
  var root_19$2 = /* @__PURE__ */ from_html(`<div class="mt-1"><h4 class="text-[10px] font-semibold text-gray-400 uppercase mb-1.5">Recent</h4> <div class="grid grid-cols-2 gap-2"></div></div> <hr class="border-gray-100"/>`, 1);
58024
58024
  var root_22$2 = /* @__PURE__ */ from_html(`<span class="text-xs font-medium text-gray-600"> <mark class="bg-yellow-200 text-gray-800 rounded-sm px-0.5"> </mark> </span>`);
58025
- var root_23$1 = /* @__PURE__ */ from_html(`<span class="text-xs font-medium text-gray-600"> </span>`);
58025
+ var root_23$2 = /* @__PURE__ */ from_html(`<span class="text-xs font-medium text-gray-600"> </span>`);
58026
58026
  var root_21$2 = /* @__PURE__ */ from_html(`<button draggable="true"><span role="button" tabindex="0"> </span> <div class="w-10 h-10 rounded-lg flex items-center justify-center"><div class="w-5 h-5 rounded-sm"></div></div> <!> <span class="text-[10px] text-gray-400"> </span></button>`);
58027
- var root_15$2 = /* @__PURE__ */ from_html(`<div class="space-y-2"><div class="relative"><input type="text" placeholder="Search furniture..." class="w-full px-3 py-2 pr-8 border border-gray-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-200 focus:border-blue-400 outline-none"/> <!></div> <!> <div class="flex flex-wrap gap-1 max-h-24 overflow-y-auto"><button>All</button> <button> </button> <!></div> <!> <div class="grid grid-cols-2 gap-2 mt-2"></div></div>`);
58028
- var root_24 = /* @__PURE__ */ from_html(`<div class="fixed z-50 pointer-events-none"><div class="bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden" style="width: 220px;"><div class="w-full h-[120px] bg-gray-50 flex items-center justify-center p-3"><div class="w-16 h-16 rounded-xl flex items-center justify-center"><div class="w-10 h-10 rounded-md"></div></div></div> <div class="p-3 space-y-1.5"><div class="flex items-center gap-2"><span class="text-sm font-semibold text-gray-800"> </span> <span class="px-1.5 py-0.5 rounded-full text-[9px] font-semibold text-white"> </span></div> <div class="text-xs text-gray-500"> </div></div></div></div>`);
58027
+ var root_15$1 = /* @__PURE__ */ from_html(`<div class="space-y-2"><div class="relative"><input type="text" placeholder="Search furniture..." class="w-full px-3 py-2 pr-8 border border-gray-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-200 focus:border-blue-400 outline-none"/> <!></div> <!> <div class="flex flex-wrap gap-1 max-h-24 overflow-y-auto"><button>All</button> <button> </button> <!></div> <!> <div class="grid grid-cols-2 gap-2 mt-2"></div></div>`);
58028
+ var root_24$1 = /* @__PURE__ */ from_html(`<div class="fixed z-50 pointer-events-none"><div class="bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden" style="width: 220px;"><div class="w-full h-[120px] bg-gray-50 flex items-center justify-center p-3"><div class="w-16 h-16 rounded-xl flex items-center justify-center"><div class="w-10 h-10 rounded-md"></div></div></div> <div class="p-3 space-y-1.5"><div class="flex items-center gap-2"><span class="text-sm font-semibold text-gray-800"> </span> <span class="px-1.5 py-0.5 rounded-full text-[9px] font-semibold text-white"> </span></div> <div class="text-xs text-gray-500"> </div></div></div></div>`);
58029
58029
  var root_25 = /* @__PURE__ */ from_html(`<div class="fixed inset-0 bg-black/50 z-50 flex items-center justify-center"><div class="bg-white rounded-xl shadow-2xl w-80 p-5"><h3 class="text-sm font-bold text-gray-800 mb-1">Import RoomPlan</h3> <p class="text-xs text-gray-400 mb-4"> </p> <div class="space-y-3"><label class="flex items-start gap-2.5 cursor-pointer"><input type="checkbox" class="accent-blue-500 mt-0.5"/> <div><div class="text-sm font-medium text-gray-700">Straighten walls</div> <div class="text-xs text-gray-400">Snap near-horizontal/vertical walls to axis</div></div></label> <label class="flex items-start gap-2.5 cursor-pointer"><input type="checkbox" class="accent-blue-500 mt-0.5"/> <div><div class="text-sm font-medium text-gray-700">Enforce orthogonal <span class="text-xs text-blue-400 font-mono"> </span></div> <div class="text-xs text-gray-400">Force all walls to 90ยฐ/180ยฐ angles</div></div></label> <label class="block"><div class="text-xs text-gray-500 mb-1">Corner merge distance (cm)</div> <input type="number" min="0" max="50" step="5" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label></div> <div class="flex gap-2 mt-5"><button class="flex-1 px-3 py-2 border border-gray-200 rounded-lg text-sm text-gray-600 hover:bg-gray-50 transition-colors">Cancel</button> <button class="flex-1 px-3 py-2 bg-blue-500 text-white rounded-lg text-sm font-medium hover:bg-blue-600 transition-colors">Import</button></div></div></div>`);
58030
58030
  var root$4 = /* @__PURE__ */ from_html(`<div class="relative w-64 bg-white border-r border-gray-200 flex flex-col h-full overflow-hidden"><div class="flex border-b border-gray-200"><button>Build</button> <button>Rooms</button> <button>Objects</button></div> <div class="flex-1 overflow-y-auto p-3"><!></div> <button title="Layers Panel (L)" aria-label="Toggle Layers Panel">๐Ÿ—‚</button> <button title="Undo History" aria-label="Toggle Undo History">โŸฒ</button> <button class="absolute bottom-4 left-4 w-8 h-8 rounded-full bg-slate-700 text-white text-sm font-bold shadow-lg hover:bg-slate-600 transition-colors z-50" title="Keyboard Shortcuts (?)" aria-label="Keyboard Shortcuts">?</button></div> <!> <!>`, 1);
58031
58031
  function BuildPanel($$anchor, $$props) {
@@ -58570,13 +58570,13 @@ function BuildPanel($$anchor, $$props) {
58570
58570
  append($$anchor, div_16);
58571
58571
  };
58572
58572
  var consequent_13 = ($$anchor) => {
58573
- var div_21 = root_15$2();
58573
+ var div_21 = root_15$1();
58574
58574
  var div_22 = child(div_21);
58575
58575
  var input_1 = child(div_22);
58576
58576
  remove_input_defaults(input_1);
58577
58577
  var node_3 = sibling(input_1, 2);
58578
58578
  var consequent_9 = ($$anchor) => {
58579
- var button_18 = root_16$1();
58579
+ var button_18 = root_16$2();
58580
58580
  delegated("click", button_18, () => set(search, ""));
58581
58581
  append($$anchor, button_18);
58582
58582
  };
@@ -58586,7 +58586,7 @@ function BuildPanel($$anchor, $$props) {
58586
58586
  reset(div_22);
58587
58587
  var node_4 = sibling(div_22, 2);
58588
58588
  var consequent_10 = ($$anchor) => {
58589
- var div_23 = root_17$2();
58589
+ var div_23 = root_17$1();
58590
58590
  var text_17 = child(div_23);
58591
58591
  reset(div_23);
58592
58592
  template_effect(() => {
@@ -58711,7 +58711,7 @@ function BuildPanel($$anchor, $$props) {
58711
58711
  };
58712
58712
  var d = /* @__PURE__ */ user_derived(() => get(s) && get(item).name.toLowerCase().includes(get(s)));
58713
58713
  var alternate_1 = ($$anchor) => {
58714
- var span_12 = root_23$1();
58714
+ var span_12 = root_23$2();
58715
58715
  var text_26 = child(span_12, true);
58716
58716
  reset(span_12);
58717
58717
  template_effect(() => set_text(text_26, get(item).name));
@@ -58788,7 +58788,7 @@ function BuildPanel($$anchor, $$props) {
58788
58788
  var node_8 = sibling(div, 2);
58789
58789
  var consequent_14 = ($$anchor) => {
58790
58790
  const item = /* @__PURE__ */ user_derived(() => get(hoveredItem));
58791
- var div_32 = root_24();
58791
+ var div_32 = root_24$1();
58792
58792
  var div_33 = child(div_32);
58793
58793
  var div_34 = child(div_33);
58794
58794
  var div_35 = child(div_34);
@@ -59159,19 +59159,20 @@ var root_5$3 = /* @__PURE__ */ from_html(`<div class="space-y-2"><span class="te
59159
59159
  var root_1$7 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-gray-200 rounded flex items-center justify-center text-xs">โ–ญ</span> Wall Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" disabled="" class="w-full px-2 py-1 border border-gray-200 rounded text-sm bg-gray-50"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <div class="flex items-center gap-2"><span class="text-xs text-gray-500">Curved</span> <button> </button></div> <div><div class="flex border-b border-gray-200 mb-3"><button>Interior</button> <button>Exterior</button></div> <!></div></div>`, 1);
59160
59160
  var root_8$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-amber-100 rounded flex items-center justify-center text-xs">๐Ÿšช</span> Door Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Type</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>Single</option><option>Double</option><option>Sliding</option><option>French</option><option>Pocket</option><option>Bifold</option></select></label> <label class="block"><span class="text-xs text-gray-500">Hinge Side</span> <div class="flex gap-2"><button>Left</button> <button>Right</button></div></label> <label class="block"><span class="text-xs text-gray-500">Opens</span> <div class="flex gap-2"><button>Inward</button> <button>Outward</button></div></label></div>`, 1);
59161
59161
  var root_9$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-cyan-100 rounded flex items-center justify-center text-xs">๐ŸชŸ</span> Window Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Type</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>Standard</option><option>Fixed</option><option>Casement</option><option>Sliding</option><option>Bay</option></select></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label></div>`, 1);
59162
- var root_11$1 = /* @__PURE__ */ from_html(`<button></button>`);
59163
- var root_10$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-purple-100 rounded flex items-center justify-center text-xs"> </span> <button> </button></h3> <div class="space-y-3"><div><div class="flex items-center gap-1 mb-2"><span class="text-xs text-gray-500">Color</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="text-gray-400"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg></div> <div class="grid grid-cols-5 gap-1.5 mb-2"></div> <div class="flex items-center gap-2"><span class="text-xs text-gray-500">Custom:</span> <input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/></div></div> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Material</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>Wood</option><option>Metal</option><option>Fabric</option><option>Leather</option><option>Glass</option><option>Plastic</option><option>Stone</option><option>Ceramic</option></select></label> <label class="block"><span class="text-xs text-gray-500">Rotation (degrees)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <div class="flex gap-1"><button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Rotate 90ยฐ left">โ†บ 90ยฐ</button> <button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Rotate 90ยฐ right">โ†ป 90ยฐ</button></div> <div class="flex gap-1"><button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Flip horizontally">โ†” Flip H</button> <button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Flip vertically">โ†• Flip V</button></div> <button class="w-full px-2 py-1.5 border border-gray-300 rounded text-sm text-gray-600 hover:bg-gray-50 transition-colors">Reset to defaults</button></div>`, 1);
59164
- var root_13$1 = /* @__PURE__ */ from_html(`<option> </option>`);
59165
- var root_14 = /* @__PURE__ */ from_html(`<button></button>`);
59166
- var root_17$1 = /* @__PURE__ */ from_html(`<button><div class="w-full h-12 rounded-md mb-1 overflow-hidden"></div> <div class="text-center leading-3 text-[10px] text-gray-600 truncate"> </div></button>`);
59167
- var root_15$1 = /* @__PURE__ */ from_html(`<div><span class="text-xs font-medium text-gray-600 mb-1.5 block"> </span> <div class="grid grid-cols-3 gap-1.5"></div></div>`);
59168
- var root_12$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-green-100 rounded flex items-center justify-center text-xs">โฌœ</span> Room Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Room Type</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"></select></label> <label class="block"><span class="text-xs text-gray-500">Room Name</span> <input type="text" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Category</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>๐Ÿ  Indoor</option><option>๐ŸŒณ Outdoor</option><option>๐Ÿš— Garage</option><option>๐Ÿ”ง Utility</option></select></label> <div><span class="text-xs text-gray-500">Area</span> <p class="text-sm text-gray-700"> </p></div> <div><span class="text-xs text-gray-500 mb-1.5 block">Room Color</span> <div class="grid grid-cols-5 gap-1.5 mb-2"></div> <div class="flex items-center gap-2"><span class="text-xs text-gray-500">Custom:</span> <input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/></div></div> <div><div class="flex items-center gap-1 mb-2"><span class="text-xs text-gray-500">Floor Material</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="text-gray-400"><path d="M3 3h18v18H3z"></path><path d="M8 8h8v8H8z"></path></svg></div> <div class="space-y-3"></div></div></div>`, 1);
59169
- var root_18$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-gray-200 rounded flex items-center justify-center text-xs">๐Ÿชœ</span> Stair Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Type</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>Straight</option><option>L-Shaped</option><option>U-Shaped</option><option>Spiral</option></select></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Risers</span> <input type="number" min="3" max="30" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Direction</span> <div class="flex gap-2"><button>Up โ†‘</button> <button>Down โ†“</button></div></label> <label class="block"><span class="text-xs text-gray-500">Rotation (degrees)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label></div>`, 1);
59170
- var root_20$1 = /* @__PURE__ */ from_html(`<button></button>`);
59171
- var root_21$1 = /* @__PURE__ */ from_html(`<label class="block"><span class="text-xs text-gray-500">Rotation (degrees)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label>`);
59172
- var root_19$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-gray-200 rounded flex items-center justify-center text-xs">๐Ÿ›๏ธ</span> Column Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Shape</span> <div class="flex gap-2"><button>โญ• Round</button> <button>โฌœ Square</button></div></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="10" max="200" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="50" max="1000" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <div><span class="text-xs text-gray-500 mb-1.5 block">Color</span> <div class="grid grid-cols-5 gap-1.5 mb-2"></div> <div class="flex items-center gap-2"><span class="text-xs text-gray-500">Custom:</span> <input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/></div></div> <!></div>`, 1);
59173
- var root_22$1 = /* @__PURE__ */ from_html(`<div class="space-y-3"><h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-emerald-100 rounded flex items-center justify-center text-xs">๐Ÿท๏ธ</span> Text Annotation</h3> <label class="block"><span class="text-xs text-gray-500">Text</span> <input type="text" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Font Size</span> <input type="number" min="8" max="72" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Color</span> <div class="flex items-center gap-2"><input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/> <span class="text-xs text-gray-400"> </span></div></label> <label class="block"><span class="text-xs text-gray-500">Rotation (ยฐ)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">X</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Y</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label></div>`);
59174
- var root_23 = /* @__PURE__ */ from_html(`<div class="mt-4 pt-3 border-t border-gray-200"><h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-blue-100 rounded flex items-center justify-center text-xs">๐Ÿ–ผ๏ธ</span> Background Image</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Opacity</span> <input type="range" min="0.05" max="1" step="0.05" class="w-full"/></label> <label class="block"><span class="text-xs text-gray-500">Scale</span> <input type="range" min="0.1" max="5" step="0.05" class="w-full"/></label> <label class="block"><span class="text-xs text-gray-500">Rotation</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <div class="flex gap-2"><button> </button> <button class="flex-1 px-2 py-1.5 border rounded text-sm border-gray-200 hover:bg-gray-50">๐Ÿ“ Set Scale</button></div> <button class="w-full px-2 py-1.5 border border-red-300 rounded text-sm text-red-600 hover:bg-red-50">Remove Image</button></div></div>`);
59162
+ var root_11$1 = /* @__PURE__ */ from_html(`<label class="block"><span class="text-xs text-gray-500">Camera Name</span> <input type="text" placeholder="Display name" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Camera Serial</span> <input type="text" placeholder="Device serial" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label>`, 1);
59163
+ var root_12$1 = /* @__PURE__ */ from_html(`<button></button>`);
59164
+ var root_10$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-purple-100 rounded flex items-center justify-center text-xs"> </span> <button> </button></h3> <div class="space-y-3"><!> <div><div class="flex items-center gap-1 mb-2"><span class="text-xs text-gray-500">Color</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="text-gray-400"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg></div> <div class="grid grid-cols-5 gap-1.5 mb-2"></div> <div class="flex items-center gap-2"><span class="text-xs text-gray-500">Custom:</span> <input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/></div></div> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="1" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Material</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>Wood</option><option>Metal</option><option>Fabric</option><option>Leather</option><option>Glass</option><option>Plastic</option><option>Stone</option><option>Ceramic</option></select></label> <label class="block"><span class="text-xs text-gray-500">Rotation (degrees)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <div class="flex gap-1"><button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Rotate 90ยฐ left">โ†บ 90ยฐ</button> <button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Rotate 90ยฐ right">โ†ป 90ยฐ</button></div> <div class="flex gap-1"><button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Flip horizontally">โ†” Flip H</button> <button class="flex-1 px-2 py-1.5 border border-gray-200 rounded text-sm hover:bg-gray-50 transition-colors" title="Flip vertically">โ†• Flip V</button></div> <button class="w-full px-2 py-1.5 border border-gray-300 rounded text-sm text-gray-600 hover:bg-gray-50 transition-colors">Reset to defaults</button></div>`, 1);
59165
+ var root_14$1 = /* @__PURE__ */ from_html(`<option> </option>`);
59166
+ var root_15 = /* @__PURE__ */ from_html(`<button></button>`);
59167
+ var root_18$1 = /* @__PURE__ */ from_html(`<button><div class="w-full h-12 rounded-md mb-1 overflow-hidden"></div> <div class="text-center leading-3 text-[10px] text-gray-600 truncate"> </div></button>`);
59168
+ var root_16$1 = /* @__PURE__ */ from_html(`<div><span class="text-xs font-medium text-gray-600 mb-1.5 block"> </span> <div class="grid grid-cols-3 gap-1.5"></div></div>`);
59169
+ var root_13$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-green-100 rounded flex items-center justify-center text-xs">โฌœ</span> Room Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Room Type</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"></select></label> <label class="block"><span class="text-xs text-gray-500">Room Name</span> <input type="text" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Category</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>๐Ÿ  Indoor</option><option>๐ŸŒณ Outdoor</option><option>๐Ÿš— Garage</option><option>๐Ÿ”ง Utility</option></select></label> <div><span class="text-xs text-gray-500">Area</span> <p class="text-sm text-gray-700"> </p></div> <div><span class="text-xs text-gray-500 mb-1.5 block">Room Color</span> <div class="grid grid-cols-5 gap-1.5 mb-2"></div> <div class="flex items-center gap-2"><span class="text-xs text-gray-500">Custom:</span> <input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/></div></div> <div><div class="flex items-center gap-1 mb-2"><span class="text-xs text-gray-500">Floor Material</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="text-gray-400"><path d="M3 3h18v18H3z"></path><path d="M8 8h8v8H8z"></path></svg></div> <div class="space-y-3"></div></div></div>`, 1);
59170
+ var root_19$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-gray-200 rounded flex items-center justify-center text-xs">๐Ÿชœ</span> Stair Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Type</span> <select class="w-full px-2 py-1 border border-gray-200 rounded text-sm"><option>Straight</option><option>L-Shaped</option><option>U-Shaped</option><option>Spiral</option></select></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Risers</span> <input type="number" min="3" max="30" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Direction</span> <div class="flex gap-2"><button>Up โ†‘</button> <button>Down โ†“</button></div></label> <label class="block"><span class="text-xs text-gray-500">Rotation (degrees)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label></div>`, 1);
59171
+ var root_21$1 = /* @__PURE__ */ from_html(`<button></button>`);
59172
+ var root_22$1 = /* @__PURE__ */ from_html(`<label class="block"><span class="text-xs text-gray-500">Rotation (degrees)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label>`);
59173
+ var root_20$1 = /* @__PURE__ */ from_html(`<h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-gray-200 rounded flex items-center justify-center text-xs">๐Ÿ›๏ธ</span> Column Properties</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Shape</span> <div class="flex gap-2"><button>โญ• Round</button> <button>โฌœ Square</button></div></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="10" max="200" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500"> </span> <input type="number" min="50" max="1000" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <div><span class="text-xs text-gray-500 mb-1.5 block">Color</span> <div class="grid grid-cols-5 gap-1.5 mb-2"></div> <div class="flex items-center gap-2"><span class="text-xs text-gray-500">Custom:</span> <input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/></div></div> <!></div>`, 1);
59174
+ var root_23$1 = /* @__PURE__ */ from_html(`<div class="space-y-3"><h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-emerald-100 rounded flex items-center justify-center text-xs">๐Ÿท๏ธ</span> Text Annotation</h3> <label class="block"><span class="text-xs text-gray-500">Text</span> <input type="text" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Font Size</span> <input type="number" min="8" max="72" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Color</span> <div class="flex items-center gap-2"><input type="color" class="w-8 h-6 rounded border border-gray-200 cursor-pointer"/> <span class="text-xs text-gray-400"> </span></div></label> <label class="block"><span class="text-xs text-gray-500">Rotation (ยฐ)</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">X</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <label class="block"><span class="text-xs text-gray-500">Y</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label></div>`);
59175
+ var root_24 = /* @__PURE__ */ from_html(`<div class="mt-4 pt-3 border-t border-gray-200"><h3 class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2"><span class="w-6 h-6 bg-blue-100 rounded flex items-center justify-center text-xs">๐Ÿ–ผ๏ธ</span> Background Image</h3> <div class="space-y-3"><label class="block"><span class="text-xs text-gray-500">Opacity</span> <input type="range" min="0.05" max="1" step="0.05" class="w-full"/></label> <label class="block"><span class="text-xs text-gray-500">Scale</span> <input type="range" min="0.1" max="5" step="0.05" class="w-full"/></label> <label class="block"><span class="text-xs text-gray-500">Rotation</span> <input type="number" class="w-full px-2 py-1 border border-gray-200 rounded text-sm"/></label> <div class="flex gap-2"><button> </button> <button class="flex-1 px-2 py-1.5 border rounded text-sm border-gray-200 hover:bg-gray-50">๐Ÿ“ Set Scale</button></div> <button class="w-full px-2 py-1.5 border border-red-300 rounded text-sm text-red-600 hover:bg-red-50">Remove Image</button></div></div>`);
59175
59176
  var root$3 = /* @__PURE__ */ from_html(`<div style="top: 48px; bottom: 36px;"><!> <!></div>`);
59176
59177
  function PropertiesPanel($$anchor, $$props) {
59177
59178
  push($$props, true);
@@ -59337,6 +59338,14 @@ function PropertiesPanel($$anchor, $$props) {
59337
59338
  if (!get(selectedFurniture)) return;
59338
59339
  updateFurniture(get(selectedFurniture).id, { rotation: Number(e.target.value) });
59339
59340
  }
59341
+ function onFurnitureName(e) {
59342
+ if (!get(selectedFurniture)) return;
59343
+ updateFurniture(get(selectedFurniture).id, { name: e.target.value });
59344
+ }
59345
+ function onFurnitureSerial(e) {
59346
+ if (!get(selectedFurniture)) return;
59347
+ updateFurniture(get(selectedFurniture).id, { serial: e.target.value });
59348
+ }
59340
59349
  function resetFurnitureDefaults() {
59341
59350
  if (!get(selectedFurniture)) return;
59342
59351
  updateFurniture(get(selectedFurniture).id, {
@@ -60026,7 +60035,7 @@ function PropertiesPanel($$anchor, $$props) {
60026
60035
  delegated("input", input_13, onWindowSill);
60027
60036
  append($$anchor, fragment_2);
60028
60037
  };
60029
- var consequent_4 = ($$anchor) => {
60038
+ var consequent_5 = ($$anchor) => {
60030
60039
  var fragment_3 = root_10$1();
60031
60040
  var h3 = first_child(fragment_3);
60032
60041
  var span_14 = child(h3);
@@ -60038,7 +60047,30 @@ function PropertiesPanel($$anchor, $$props) {
60038
60047
  reset(button_13);
60039
60048
  reset(h3);
60040
60049
  var div_15 = sibling(h3, 2);
60041
- var div_16 = child(div_15);
60050
+ var node_4 = child(div_15);
60051
+ var consequent_4 = ($$anchor) => {
60052
+ var fragment_4 = root_11$1();
60053
+ var label_18 = first_child(fragment_4);
60054
+ var input_14 = sibling(child(label_18), 2);
60055
+ remove_input_defaults(input_14);
60056
+ reset(label_18);
60057
+ var label_19 = sibling(label_18, 2);
60058
+ var input_15 = sibling(child(label_19), 2);
60059
+ remove_input_defaults(input_15);
60060
+ reset(label_19);
60061
+ template_effect(() => {
60062
+ var _$$get$name, _$$get$serial;
60063
+ set_value(input_14, (_$$get$name = get(selectedFurniture).name) !== null && _$$get$name !== void 0 ? _$$get$name : "");
60064
+ set_value(input_15, (_$$get$serial = get(selectedFurniture).serial) !== null && _$$get$serial !== void 0 ? _$$get$serial : "");
60065
+ });
60066
+ delegated("input", input_14, onFurnitureName);
60067
+ delegated("input", input_15, onFurnitureSerial);
60068
+ append($$anchor, fragment_4);
60069
+ };
60070
+ if_block(node_4, ($$render) => {
60071
+ if (get(selectedFurniture).catalogId === "camera") $$render(consequent_4);
60072
+ });
60073
+ var div_16 = sibling(node_4, 2);
60042
60074
  var div_17 = sibling(child(div_16), 2);
60043
60075
  each(div_17, 20, () => [
60044
60076
  "#ffffff",
@@ -60052,7 +60084,7 @@ function PropertiesPanel($$anchor, $$props) {
60052
60084
  "#dc143c",
60053
60085
  "#228b22"
60054
60086
  ], index$1, ($$anchor, color) => {
60055
- var button_14 = root_11$1();
60087
+ var button_14 = root_12$1();
60056
60088
  template_effect(($0) => {
60057
60089
  set_class(button_14, 1, `w-6 h-6 rounded border-2 hover:border-gray-300 transition-colors ${$0 !== null && $0 !== void 0 ? $0 : ""}`);
60058
60090
  set_style(button_14, `background-color: ${color !== null && color !== void 0 ? color : ""}`);
@@ -60066,33 +60098,33 @@ function PropertiesPanel($$anchor, $$props) {
60066
60098
  });
60067
60099
  reset(div_17);
60068
60100
  var div_18 = sibling(div_17, 2);
60069
- var input_14 = sibling(child(div_18), 2);
60070
- remove_input_defaults(input_14);
60101
+ var input_16 = sibling(child(div_18), 2);
60102
+ remove_input_defaults(input_16);
60071
60103
  reset(div_18);
60072
60104
  reset(div_16);
60073
- var label_18 = sibling(div_16, 2);
60074
- var span_15 = child(label_18);
60105
+ var label_20 = sibling(div_16, 2);
60106
+ var span_15 = child(label_20);
60075
60107
  var text_18 = child(span_15);
60076
60108
  reset(span_15);
60077
- var input_15 = sibling(span_15, 2);
60078
- remove_input_defaults(input_15);
60079
- reset(label_18);
60080
- var label_19 = sibling(label_18, 2);
60081
- var span_16 = child(label_19);
60109
+ var input_17 = sibling(span_15, 2);
60110
+ remove_input_defaults(input_17);
60111
+ reset(label_20);
60112
+ var label_21 = sibling(label_20, 2);
60113
+ var span_16 = child(label_21);
60082
60114
  var text_19 = child(span_16);
60083
60115
  reset(span_16);
60084
- var input_16 = sibling(span_16, 2);
60085
- remove_input_defaults(input_16);
60086
- reset(label_19);
60087
- var label_20 = sibling(label_19, 2);
60088
- var span_17 = child(label_20);
60116
+ var input_18 = sibling(span_16, 2);
60117
+ remove_input_defaults(input_18);
60118
+ reset(label_21);
60119
+ var label_22 = sibling(label_21, 2);
60120
+ var span_17 = child(label_22);
60089
60121
  var text_20 = child(span_17);
60090
60122
  reset(span_17);
60091
- var input_17 = sibling(span_17, 2);
60092
- remove_input_defaults(input_17);
60093
- reset(label_20);
60094
- var label_21 = sibling(label_20, 2);
60095
- var select_2 = sibling(child(label_21), 2);
60123
+ var input_19 = sibling(span_17, 2);
60124
+ remove_input_defaults(input_19);
60125
+ reset(label_22);
60126
+ var label_23 = sibling(label_22, 2);
60127
+ var select_2 = sibling(child(label_23), 2);
60096
60128
  var option_11 = child(select_2);
60097
60129
  option_11.value = option_11.__value = "Wood";
60098
60130
  var option_12 = sibling(option_11);
@@ -60112,12 +60144,12 @@ function PropertiesPanel($$anchor, $$props) {
60112
60144
  reset(select_2);
60113
60145
  var select_2_value;
60114
60146
  init_select(select_2);
60115
- reset(label_21);
60116
- var label_22 = sibling(label_21, 2);
60117
- var input_18 = sibling(child(label_22), 2);
60118
- remove_input_defaults(input_18);
60119
- reset(label_22);
60120
- var div_19 = sibling(label_22, 2);
60147
+ reset(label_23);
60148
+ var label_24 = sibling(label_23, 2);
60149
+ var input_20 = sibling(child(label_24), 2);
60150
+ remove_input_defaults(input_20);
60151
+ reset(label_24);
60152
+ var div_19 = sibling(label_24, 2);
60121
60153
  var button_15 = child(div_19);
60122
60154
  var button_16 = sibling(button_15, 2);
60123
60155
  reset(div_19);
@@ -60134,18 +60166,18 @@ function PropertiesPanel($$anchor, $$props) {
60134
60166
  set_class(button_13, 1, `ml-auto px-1.5 py-0.5 rounded text-xs border transition-colors ${get(selectedFurniture).locked ? "bg-amber-100 border-amber-400 text-amber-700" : "border-gray-200 hover:bg-gray-50 text-gray-500"}`);
60135
60167
  set_attribute(button_13, "title", get(selectedFurniture).locked ? "Unlock (Ctrl+L)" : "Lock (Ctrl+L)");
60136
60168
  set_text(text_17, get(selectedFurniture).locked ? "๐Ÿ”’ Locked" : "๐Ÿ”“");
60137
- set_value(input_14, $2);
60169
+ set_value(input_16, $2);
60138
60170
  set_text(text_18, `Width (${$3 !== null && $3 !== void 0 ? $3 : ""})`);
60139
- set_value(input_15, $4);
60171
+ set_value(input_17, $4);
60140
60172
  set_text(text_19, `Depth (${$5 !== null && $5 !== void 0 ? $5 : ""})`);
60141
- set_value(input_16, $6);
60173
+ set_value(input_18, $6);
60142
60174
  set_text(text_20, `Height (${$7 !== null && $7 !== void 0 ? $7 : ""})`);
60143
- set_value(input_17, $8);
60175
+ set_value(input_19, $8);
60144
60176
  if (select_2_value !== (select_2_value = (_$$get$material = get(selectedFurniture).material) !== null && _$$get$material !== void 0 ? _$$get$material : "Wood")) {
60145
60177
  var _select_2$__value, _$$get$material2, _$$get$material3;
60146
60178
  select_2.value = (_select_2$__value = select_2.__value = (_$$get$material2 = get(selectedFurniture).material) !== null && _$$get$material2 !== void 0 ? _$$get$material2 : "Wood") !== null && _select_2$__value !== void 0 ? _select_2$__value : "", select_option(select_2, (_$$get$material3 = get(selectedFurniture).material) !== null && _$$get$material3 !== void 0 ? _$$get$material3 : "Wood");
60147
60179
  }
60148
- set_value(input_18, $9);
60180
+ set_value(input_20, $9);
60149
60181
  }, [
60150
60182
  () => {
60151
60183
  var _getCatalogItem$icon, _getCatalogItem2;
@@ -60179,12 +60211,12 @@ function PropertiesPanel($$anchor, $$props) {
60179
60211
  delegated("click", button_13, () => {
60180
60212
  if (get(selectedFurniture)) toggleFurnitureLock(get(selectedFurniture).id);
60181
60213
  });
60182
- delegated("input", input_14, (e) => onFurnitureColor(e.target.value));
60183
- delegated("input", input_15, onFurnitureWidth);
60184
- delegated("input", input_16, onFurnitureDepth);
60185
- delegated("input", input_17, onFurnitureHeight);
60214
+ delegated("input", input_16, (e) => onFurnitureColor(e.target.value));
60215
+ delegated("input", input_17, onFurnitureWidth);
60216
+ delegated("input", input_18, onFurnitureDepth);
60217
+ delegated("input", input_19, onFurnitureHeight);
60186
60218
  delegated("change", select_2, onFurnitureMaterial);
60187
- delegated("input", input_18, onFurnitureRotation);
60219
+ delegated("input", input_20, onFurnitureRotation);
60188
60220
  delegated("click", button_15, () => {
60189
60221
  if (get(selectedFurniture)) updateFurniture(get(selectedFurniture).id, { rotation: get(selectedFurniture).rotation - 90 });
60190
60222
  });
@@ -60214,13 +60246,13 @@ function PropertiesPanel($$anchor, $$props) {
60214
60246
  delegated("click", button_19, resetFurnitureDefaults);
60215
60247
  append($$anchor, fragment_3);
60216
60248
  };
60217
- var consequent_6 = ($$anchor) => {
60218
- var fragment_4 = root_12$1();
60219
- var div_21 = sibling(first_child(fragment_4), 2);
60220
- var label_23 = child(div_21);
60221
- var select_3 = sibling(child(label_23), 2);
60249
+ var consequent_7 = ($$anchor) => {
60250
+ var fragment_5 = root_13$1();
60251
+ var div_21 = sibling(first_child(fragment_5), 2);
60252
+ var label_25 = child(div_21);
60253
+ var select_3 = sibling(child(label_25), 2);
60222
60254
  each(select_3, 21, () => roomTypes, index$1, ($$anchor, rt) => {
60223
- var option_19 = root_13$1();
60255
+ var option_19 = root_14$1();
60224
60256
  var text_21 = child(option_19);
60225
60257
  reset(option_19);
60226
60258
  var option_19_value = {};
@@ -60237,13 +60269,13 @@ function PropertiesPanel($$anchor, $$props) {
60237
60269
  reset(select_3);
60238
60270
  var select_3_value;
60239
60271
  init_select(select_3);
60240
- reset(label_23);
60241
- var label_24 = sibling(label_23, 2);
60242
- var input_19 = sibling(child(label_24), 2);
60243
- remove_input_defaults(input_19);
60244
- reset(label_24);
60245
- var label_25 = sibling(label_24, 2);
60246
- var select_4 = sibling(child(label_25), 2);
60272
+ reset(label_25);
60273
+ var label_26 = sibling(label_25, 2);
60274
+ var input_21 = sibling(child(label_26), 2);
60275
+ remove_input_defaults(input_21);
60276
+ reset(label_26);
60277
+ var label_27 = sibling(label_26, 2);
60278
+ var select_4 = sibling(child(label_27), 2);
60247
60279
  var option_20 = child(select_4);
60248
60280
  option_20.value = option_20.__value = "indoor";
60249
60281
  var option_21 = sibling(option_20);
@@ -60255,8 +60287,8 @@ function PropertiesPanel($$anchor, $$props) {
60255
60287
  reset(select_4);
60256
60288
  var select_4_value;
60257
60289
  init_select(select_4);
60258
- reset(label_25);
60259
- var div_22 = sibling(label_25, 2);
60290
+ reset(label_27);
60291
+ var div_22 = sibling(label_27, 2);
60260
60292
  var p = sibling(child(div_22), 2);
60261
60293
  var text_22 = child(p, true);
60262
60294
  reset(p);
@@ -60264,7 +60296,7 @@ function PropertiesPanel($$anchor, $$props) {
60264
60296
  var div_23 = sibling(div_22, 2);
60265
60297
  var div_24 = sibling(child(div_23), 2);
60266
60298
  each(div_24, 21, () => roomColorPresets, index$1, ($$anchor, preset) => {
60267
- var button_20 = root_14();
60299
+ var button_20 = root_15();
60268
60300
  template_effect(() => {
60269
60301
  var _$$get$color5;
60270
60302
  set_class(button_20, 1, `w-7 h-7 rounded-md border-2 hover:border-gray-300 transition-colors ${get(selectedRoom).color === get(preset).color ? "border-blue-500 ring-1 ring-blue-200" : "border-gray-200"}`);
@@ -60276,28 +60308,28 @@ function PropertiesPanel($$anchor, $$props) {
60276
60308
  });
60277
60309
  reset(div_24);
60278
60310
  var div_25 = sibling(div_24, 2);
60279
- var input_20 = sibling(child(div_25), 2);
60280
- remove_input_defaults(input_20);
60311
+ var input_22 = sibling(child(div_25), 2);
60312
+ remove_input_defaults(input_22);
60281
60313
  reset(div_25);
60282
60314
  reset(div_23);
60283
60315
  var div_26 = sibling(div_23, 2);
60284
60316
  var div_27 = sibling(child(div_26), 2);
60285
60317
  each(div_27, 21, () => textureGroups, index$1, ($$anchor, group) => {
60286
- var div_28 = root_15$1();
60318
+ var div_28 = root_16$1();
60287
60319
  var span_18 = child(div_28);
60288
60320
  var text_23 = child(span_18, true);
60289
60321
  reset(span_18);
60290
60322
  var div_29 = sibling(span_18, 2);
60291
60323
  each(div_29, 21, () => get(group).ids, index$1, ($$anchor, matId) => {
60292
60324
  const mat = /* @__PURE__ */ user_derived(() => floorMaterials.find((m) => m.id === get(matId)));
60293
- var fragment_5 = comment();
60294
- var node_4 = first_child(fragment_5);
60295
- var consequent_5 = ($$anchor) => {
60325
+ var fragment_6 = comment();
60326
+ var node_5 = first_child(fragment_6);
60327
+ var consequent_6 = ($$anchor) => {
60296
60328
  const texPath = /* @__PURE__ */ user_derived(() => {
60297
60329
  var _floorTexPaths$$$get$;
60298
60330
  return (_floorTexPaths$$$get$ = floorTexPaths[get(mat).id]) !== null && _floorTexPaths$$$get$ !== void 0 ? _floorTexPaths$$$get$ : "";
60299
60331
  });
60300
- var button_21 = root_17$1();
60332
+ var button_21 = root_18$1();
60301
60333
  var div_30 = child(button_21);
60302
60334
  var div_31 = sibling(div_30, 2);
60303
60335
  var text_24 = child(div_31, true);
@@ -60312,10 +60344,10 @@ function PropertiesPanel($$anchor, $$props) {
60312
60344
  delegated("click", button_21, () => onRoomFloor(get(mat).id));
60313
60345
  append($$anchor, button_21);
60314
60346
  };
60315
- if_block(node_4, ($$render) => {
60316
- if (get(mat)) $$render(consequent_5);
60347
+ if_block(node_5, ($$render) => {
60348
+ if (get(mat)) $$render(consequent_6);
60317
60349
  });
60318
- append($$anchor, fragment_5);
60350
+ append($$anchor, fragment_6);
60319
60351
  });
60320
60352
  reset(div_29);
60321
60353
  reset(div_28);
@@ -60331,16 +60363,16 @@ function PropertiesPanel($$anchor, $$props) {
60331
60363
  var _select_3$__value;
60332
60364
  select_3.value = (_select_3$__value = select_3.__value = $0) !== null && _select_3$__value !== void 0 ? _select_3$__value : "", select_option(select_3, $0);
60333
60365
  }
60334
- set_value(input_19, get(selectedRoom).name);
60366
+ set_value(input_21, get(selectedRoom).name);
60335
60367
  if (select_4_value !== (select_4_value = (_$$get$roomType = get(selectedRoom).roomType) !== null && _$$get$roomType !== void 0 ? _$$get$roomType : "indoor")) {
60336
60368
  var _select_4$__value, _$$get$roomType2, _$$get$roomType3;
60337
60369
  select_4.value = (_select_4$__value = select_4.__value = (_$$get$roomType2 = get(selectedRoom).roomType) !== null && _$$get$roomType2 !== void 0 ? _$$get$roomType2 : "indoor") !== null && _select_4$__value !== void 0 ? _select_4$__value : "", select_option(select_4, (_$$get$roomType3 = get(selectedRoom).roomType) !== null && _$$get$roomType3 !== void 0 ? _$$get$roomType3 : "indoor");
60338
60370
  }
60339
60371
  set_text(text_22, $1);
60340
- set_value(input_20, (_$$get$color6 = get(selectedRoom).color) !== null && _$$get$color6 !== void 0 ? _$$get$color6 : "#ffffff");
60372
+ set_value(input_22, (_$$get$color6 = get(selectedRoom).color) !== null && _$$get$color6 !== void 0 ? _$$get$color6 : "#ffffff");
60341
60373
  }, [() => get(selectedRoomType)(), () => formatArea(get(selectedRoom).area, get(settings).units)]);
60342
60374
  delegated("change", select_3, onRoomType);
60343
- delegated("input", input_19, onRoomName);
60375
+ delegated("input", input_21, onRoomName);
60344
60376
  delegated("change", select_4, (e) => {
60345
60377
  if (get(selectedRoom)) {
60346
60378
  const v = e.target.value;
@@ -60348,14 +60380,14 @@ function PropertiesPanel($$anchor, $$props) {
60348
60380
  updateDetectedRoom(get(selectedRoom).id, { roomType: v });
60349
60381
  }
60350
60382
  });
60351
- delegated("input", input_20, (e) => onRoomColor(e.target.value));
60352
- append($$anchor, fragment_4);
60383
+ delegated("input", input_22, (e) => onRoomColor(e.target.value));
60384
+ append($$anchor, fragment_5);
60353
60385
  };
60354
- var consequent_7 = ($$anchor) => {
60355
- var fragment_6 = root_18$1();
60356
- var div_32 = sibling(first_child(fragment_6), 2);
60357
- var label_26 = child(div_32);
60358
- var select_5 = sibling(child(label_26), 2);
60386
+ var consequent_8 = ($$anchor) => {
60387
+ var fragment_7 = root_19$1();
60388
+ var div_32 = sibling(first_child(fragment_7), 2);
60389
+ var label_28 = child(div_32);
60390
+ var select_5 = sibling(child(label_28), 2);
60359
60391
  var option_24 = child(select_5);
60360
60392
  option_24.value = option_24.__value = "straight";
60361
60393
  var option_25 = sibling(option_24);
@@ -60367,35 +60399,35 @@ function PropertiesPanel($$anchor, $$props) {
60367
60399
  reset(select_5);
60368
60400
  var select_5_value;
60369
60401
  init_select(select_5);
60370
- reset(label_26);
60371
- var label_27 = sibling(label_26, 2);
60372
- var span_19 = child(label_27);
60373
- var text_25 = child(span_19);
60374
- reset(span_19);
60375
- var input_21 = sibling(span_19, 2);
60376
- remove_input_defaults(input_21);
60377
- reset(label_27);
60378
- var label_28 = sibling(label_27, 2);
60379
- var span_20 = child(label_28);
60380
- var text_26 = child(span_20);
60381
- reset(span_20);
60382
- var input_22 = sibling(span_20, 2);
60383
- remove_input_defaults(input_22);
60384
60402
  reset(label_28);
60385
60403
  var label_29 = sibling(label_28, 2);
60386
- var input_23 = sibling(child(label_29), 2);
60404
+ var span_19 = child(label_29);
60405
+ var text_25 = child(span_19);
60406
+ reset(span_19);
60407
+ var input_23 = sibling(span_19, 2);
60387
60408
  remove_input_defaults(input_23);
60388
60409
  reset(label_29);
60389
60410
  var label_30 = sibling(label_29, 2);
60390
- var div_33 = sibling(child(label_30), 2);
60391
- var button_22 = child(div_33);
60392
- var button_23 = sibling(button_22, 2);
60393
- reset(div_33);
60411
+ var span_20 = child(label_30);
60412
+ var text_26 = child(span_20);
60413
+ reset(span_20);
60414
+ var input_24 = sibling(span_20, 2);
60415
+ remove_input_defaults(input_24);
60394
60416
  reset(label_30);
60395
60417
  var label_31 = sibling(label_30, 2);
60396
- var input_24 = sibling(child(label_31), 2);
60397
- remove_input_defaults(input_24);
60418
+ var input_25 = sibling(child(label_31), 2);
60419
+ remove_input_defaults(input_25);
60398
60420
  reset(label_31);
60421
+ var label_32 = sibling(label_31, 2);
60422
+ var div_33 = sibling(child(label_32), 2);
60423
+ var button_22 = child(div_33);
60424
+ var button_23 = sibling(button_22, 2);
60425
+ reset(div_33);
60426
+ reset(label_32);
60427
+ var label_33 = sibling(label_32, 2);
60428
+ var input_26 = sibling(child(label_33), 2);
60429
+ remove_input_defaults(input_26);
60430
+ reset(label_33);
60399
60431
  reset(div_32);
60400
60432
  template_effect(($0, $1, $2, $3) => {
60401
60433
  if (select_5_value !== (select_5_value = get(selectedStair).stairType || "straight")) {
@@ -60403,13 +60435,13 @@ function PropertiesPanel($$anchor, $$props) {
60403
60435
  select_5.value = (_select_5$__value = select_5.__value = get(selectedStair).stairType || "straight") !== null && _select_5$__value !== void 0 ? _select_5$__value : "", select_option(select_5, get(selectedStair).stairType || "straight");
60404
60436
  }
60405
60437
  set_text(text_25, `Width (${$0 !== null && $0 !== void 0 ? $0 : ""})`);
60406
- set_value(input_21, $1);
60438
+ set_value(input_23, $1);
60407
60439
  set_text(text_26, `Depth (${$2 !== null && $2 !== void 0 ? $2 : ""})`);
60408
- set_value(input_22, $3);
60409
- set_value(input_23, get(selectedStair).riserCount);
60440
+ set_value(input_24, $3);
60441
+ set_value(input_25, get(selectedStair).riserCount);
60410
60442
  set_class(button_22, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${get(selectedStair).direction === "up" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60411
60443
  set_class(button_23, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${get(selectedStair).direction === "down" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60412
- set_value(input_24, get(selectedStair).rotation);
60444
+ set_value(input_26, get(selectedStair).rotation);
60413
60445
  }, [
60414
60446
  () => unitLabel(),
60415
60447
  () => displayValue(get(selectedStair).width),
@@ -60417,41 +60449,41 @@ function PropertiesPanel($$anchor, $$props) {
60417
60449
  () => displayValue(get(selectedStair).depth)
60418
60450
  ]);
60419
60451
  delegated("change", select_5, (e) => updateStair(get(selectedStair).id, { stairType: e.target.value }));
60420
- delegated("input", input_21, (e) => updateStair(get(selectedStair).id, { width: inputToCm(Number(e.target.value)) }));
60421
- delegated("input", input_22, (e) => updateStair(get(selectedStair).id, { depth: inputToCm(Number(e.target.value)) }));
60422
- delegated("input", input_23, (e) => updateStair(get(selectedStair).id, { riserCount: Number(e.target.value) }));
60452
+ delegated("input", input_23, (e) => updateStair(get(selectedStair).id, { width: inputToCm(Number(e.target.value)) }));
60453
+ delegated("input", input_24, (e) => updateStair(get(selectedStair).id, { depth: inputToCm(Number(e.target.value)) }));
60454
+ delegated("input", input_25, (e) => updateStair(get(selectedStair).id, { riserCount: Number(e.target.value) }));
60423
60455
  delegated("click", button_22, () => updateStair(get(selectedStair).id, { direction: "up" }));
60424
60456
  delegated("click", button_23, () => updateStair(get(selectedStair).id, { direction: "down" }));
60425
- delegated("input", input_24, (e) => updateStair(get(selectedStair).id, { rotation: Number(e.target.value) }));
60426
- append($$anchor, fragment_6);
60457
+ delegated("input", input_26, (e) => updateStair(get(selectedStair).id, { rotation: Number(e.target.value) }));
60458
+ append($$anchor, fragment_7);
60427
60459
  };
60428
- var consequent_9 = ($$anchor) => {
60429
- var fragment_7 = root_19$1();
60430
- var div_34 = sibling(first_child(fragment_7), 2);
60431
- var label_32 = child(div_34);
60432
- var div_35 = sibling(child(label_32), 2);
60460
+ var consequent_10 = ($$anchor) => {
60461
+ var fragment_8 = root_20$1();
60462
+ var div_34 = sibling(first_child(fragment_8), 2);
60463
+ var label_34 = child(div_34);
60464
+ var div_35 = sibling(child(label_34), 2);
60433
60465
  var button_24 = child(div_35);
60434
60466
  var button_25 = sibling(button_24, 2);
60435
60467
  reset(div_35);
60436
- reset(label_32);
60437
- var label_33 = sibling(label_32, 2);
60438
- var span_21 = child(label_33);
60468
+ reset(label_34);
60469
+ var label_35 = sibling(label_34, 2);
60470
+ var span_21 = child(label_35);
60439
60471
  var text_27 = child(span_21);
60440
60472
  reset(span_21);
60441
- var input_25 = sibling(span_21, 2);
60442
- remove_input_defaults(input_25);
60443
- reset(label_33);
60444
- var label_34 = sibling(label_33, 2);
60445
- var span_22 = child(label_34);
60473
+ var input_27 = sibling(span_21, 2);
60474
+ remove_input_defaults(input_27);
60475
+ reset(label_35);
60476
+ var label_36 = sibling(label_35, 2);
60477
+ var span_22 = child(label_36);
60446
60478
  var text_28 = child(span_22);
60447
60479
  reset(span_22);
60448
- var input_26 = sibling(span_22, 2);
60449
- remove_input_defaults(input_26);
60450
- reset(label_34);
60451
- var div_36 = sibling(label_34, 2);
60480
+ var input_28 = sibling(span_22, 2);
60481
+ remove_input_defaults(input_28);
60482
+ reset(label_36);
60483
+ var div_36 = sibling(label_36, 2);
60452
60484
  var div_37 = sibling(child(div_36), 2);
60453
60485
  each(div_37, 21, () => columnColorPresets, index$1, ($$anchor, preset) => {
60454
- var button_26 = root_20$1();
60486
+ var button_26 = root_21$1();
60455
60487
  template_effect(() => {
60456
60488
  var _$$get$color7;
60457
60489
  set_class(button_26, 1, `w-7 h-7 rounded-md border-2 hover:border-gray-300 transition-colors ${get(selectedColumn).color === get(preset).color ? "border-blue-500 ring-1 ring-blue-200" : "border-gray-200"}`);
@@ -60463,32 +60495,32 @@ function PropertiesPanel($$anchor, $$props) {
60463
60495
  });
60464
60496
  reset(div_37);
60465
60497
  var div_38 = sibling(div_37, 2);
60466
- var input_27 = sibling(child(div_38), 2);
60467
- remove_input_defaults(input_27);
60498
+ var input_29 = sibling(child(div_38), 2);
60499
+ remove_input_defaults(input_29);
60468
60500
  reset(div_38);
60469
60501
  reset(div_36);
60470
- var node_5 = sibling(div_36, 2);
60471
- var consequent_8 = ($$anchor) => {
60472
- var label_35 = root_21$1();
60473
- var input_28 = sibling(child(label_35), 2);
60474
- remove_input_defaults(input_28);
60475
- reset(label_35);
60476
- template_effect(() => set_value(input_28, get(selectedColumn).rotation));
60477
- delegated("input", input_28, (e) => updateColumn(get(selectedColumn).id, { rotation: Number(e.target.value) }));
60478
- append($$anchor, label_35);
60502
+ var node_6 = sibling(div_36, 2);
60503
+ var consequent_9 = ($$anchor) => {
60504
+ var label_37 = root_22$1();
60505
+ var input_30 = sibling(child(label_37), 2);
60506
+ remove_input_defaults(input_30);
60507
+ reset(label_37);
60508
+ template_effect(() => set_value(input_30, get(selectedColumn).rotation));
60509
+ delegated("input", input_30, (e) => updateColumn(get(selectedColumn).id, { rotation: Number(e.target.value) }));
60510
+ append($$anchor, label_37);
60479
60511
  };
60480
- if_block(node_5, ($$render) => {
60481
- if (get(selectedColumn).shape === "square") $$render(consequent_8);
60512
+ if_block(node_6, ($$render) => {
60513
+ if (get(selectedColumn).shape === "square") $$render(consequent_9);
60482
60514
  });
60483
60515
  reset(div_34);
60484
60516
  template_effect(($0, $1, $2, $3) => {
60485
60517
  set_class(button_24, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${get(selectedColumn).shape === "round" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60486
60518
  set_class(button_25, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${get(selectedColumn).shape === "square" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60487
60519
  set_text(text_27, `${get(selectedColumn).shape === "round" ? "Diameter" : "Side Length"} (${$0 !== null && $0 !== void 0 ? $0 : ""})`);
60488
- set_value(input_25, $1);
60520
+ set_value(input_27, $1);
60489
60521
  set_text(text_28, `Height (${$2 !== null && $2 !== void 0 ? $2 : ""})`);
60490
- set_value(input_26, $3);
60491
- set_value(input_27, get(selectedColumn).color);
60522
+ set_value(input_28, $3);
60523
+ set_value(input_29, get(selectedColumn).color);
60492
60524
  }, [
60493
60525
  () => unitLabel(),
60494
60526
  () => displayValue(get(selectedColumn).diameter),
@@ -60497,87 +60529,87 @@ function PropertiesPanel($$anchor, $$props) {
60497
60529
  ]);
60498
60530
  delegated("click", button_24, () => updateColumn(get(selectedColumn).id, { shape: "round" }));
60499
60531
  delegated("click", button_25, () => updateColumn(get(selectedColumn).id, { shape: "square" }));
60500
- delegated("input", input_25, (e) => updateColumn(get(selectedColumn).id, { diameter: inputToCm(Number(e.target.value)) }));
60501
- delegated("input", input_26, (e) => updateColumn(get(selectedColumn).id, { height: inputToCm(Number(e.target.value)) }));
60502
- delegated("input", input_27, (e) => updateColumn(get(selectedColumn).id, { color: e.target.value }));
60503
- append($$anchor, fragment_7);
60532
+ delegated("input", input_27, (e) => updateColumn(get(selectedColumn).id, { diameter: inputToCm(Number(e.target.value)) }));
60533
+ delegated("input", input_28, (e) => updateColumn(get(selectedColumn).id, { height: inputToCm(Number(e.target.value)) }));
60534
+ delegated("input", input_29, (e) => updateColumn(get(selectedColumn).id, { color: e.target.value }));
60535
+ append($$anchor, fragment_8);
60504
60536
  };
60505
- var consequent_10 = ($$anchor) => {
60506
- var div_39 = root_22$1();
60507
- var label_36 = sibling(child(div_39), 2);
60508
- var input_29 = sibling(child(label_36), 2);
60509
- remove_input_defaults(input_29);
60510
- reset(label_36);
60511
- var label_37 = sibling(label_36, 2);
60512
- var input_30 = sibling(child(label_37), 2);
60513
- remove_input_defaults(input_30);
60514
- reset(label_37);
60515
- var label_38 = sibling(label_37, 2);
60516
- var div_40 = sibling(child(label_38), 2);
60517
- var input_31 = child(div_40);
60537
+ var consequent_11 = ($$anchor) => {
60538
+ var div_39 = root_23$1();
60539
+ var label_38 = sibling(child(div_39), 2);
60540
+ var input_31 = sibling(child(label_38), 2);
60518
60541
  remove_input_defaults(input_31);
60519
- var span_23 = sibling(input_31, 2);
60520
- var text_29 = child(span_23, true);
60521
- reset(span_23);
60522
- reset(div_40);
60523
60542
  reset(label_38);
60524
60543
  var label_39 = sibling(label_38, 2);
60525
60544
  var input_32 = sibling(child(label_39), 2);
60526
60545
  remove_input_defaults(input_32);
60527
60546
  reset(label_39);
60528
60547
  var label_40 = sibling(label_39, 2);
60529
- var input_33 = sibling(child(label_40), 2);
60548
+ var div_40 = sibling(child(label_40), 2);
60549
+ var input_33 = child(div_40);
60530
60550
  remove_input_defaults(input_33);
60551
+ var span_23 = sibling(input_33, 2);
60552
+ var text_29 = child(span_23, true);
60553
+ reset(span_23);
60554
+ reset(div_40);
60531
60555
  reset(label_40);
60532
60556
  var label_41 = sibling(label_40, 2);
60533
60557
  var input_34 = sibling(child(label_41), 2);
60534
60558
  remove_input_defaults(input_34);
60535
60559
  reset(label_41);
60560
+ var label_42 = sibling(label_41, 2);
60561
+ var input_35 = sibling(child(label_42), 2);
60562
+ remove_input_defaults(input_35);
60563
+ reset(label_42);
60564
+ var label_43 = sibling(label_42, 2);
60565
+ var input_36 = sibling(child(label_43), 2);
60566
+ remove_input_defaults(input_36);
60567
+ reset(label_43);
60536
60568
  reset(div_39);
60537
60569
  template_effect(($0, $1) => {
60538
- set_value(input_29, get(selectedTextAnnotation).text);
60539
- set_value(input_30, get(selectedTextAnnotation).fontSize);
60540
- set_value(input_31, get(selectedTextAnnotation).color);
60570
+ set_value(input_31, get(selectedTextAnnotation).text);
60571
+ set_value(input_32, get(selectedTextAnnotation).fontSize);
60572
+ set_value(input_33, get(selectedTextAnnotation).color);
60541
60573
  set_text(text_29, get(selectedTextAnnotation).color);
60542
- set_value(input_32, get(selectedTextAnnotation).rotation);
60543
- set_value(input_33, $0);
60544
- set_value(input_34, $1);
60574
+ set_value(input_34, get(selectedTextAnnotation).rotation);
60575
+ set_value(input_35, $0);
60576
+ set_value(input_36, $1);
60545
60577
  }, [() => Math.round(get(selectedTextAnnotation).x), () => Math.round(get(selectedTextAnnotation).y)]);
60546
- delegated("input", input_29, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { text: e.target.value }));
60547
- delegated("input", input_30, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { fontSize: Number(e.target.value) }));
60548
- delegated("input", input_31, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { color: e.target.value }));
60549
- delegated("input", input_32, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { rotation: Number(e.target.value) }));
60550
- delegated("input", input_33, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { x: Number(e.target.value) }));
60551
- delegated("input", input_34, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { y: Number(e.target.value) }));
60578
+ delegated("input", input_31, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { text: e.target.value }));
60579
+ delegated("input", input_32, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { fontSize: Number(e.target.value) }));
60580
+ delegated("input", input_33, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { color: e.target.value }));
60581
+ delegated("input", input_34, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { rotation: Number(e.target.value) }));
60582
+ delegated("input", input_35, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { x: Number(e.target.value) }));
60583
+ delegated("input", input_36, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { y: Number(e.target.value) }));
60552
60584
  append($$anchor, div_39);
60553
60585
  };
60554
60586
  if_block(node, ($$render) => {
60555
60587
  if (get(selectedWall)) $$render(consequent_1);
60556
60588
  else if (get(selectedDoor)) $$render(consequent_2, 1);
60557
60589
  else if (get(selectedWindow)) $$render(consequent_3, 2);
60558
- else if (get(selectedFurniture)) $$render(consequent_4, 3);
60559
- else if (get(selectedRoom)) $$render(consequent_6, 4);
60560
- else if (get(selectedStair)) $$render(consequent_7, 5);
60561
- else if (get(selectedColumn)) $$render(consequent_9, 6);
60562
- else if (get(selectedTextAnnotation)) $$render(consequent_10, 7);
60590
+ else if (get(selectedFurniture)) $$render(consequent_5, 3);
60591
+ else if (get(selectedRoom)) $$render(consequent_7, 4);
60592
+ else if (get(selectedStair)) $$render(consequent_8, 5);
60593
+ else if (get(selectedColumn)) $$render(consequent_10, 6);
60594
+ else if (get(selectedTextAnnotation)) $$render(consequent_11, 7);
60563
60595
  });
60564
- var node_6 = sibling(node, 2);
60565
- var consequent_11 = ($$anchor) => {
60566
- var div_41 = root_23();
60596
+ var node_7 = sibling(node, 2);
60597
+ var consequent_12 = ($$anchor) => {
60598
+ var div_41 = root_24();
60567
60599
  var div_42 = sibling(child(div_41), 2);
60568
- var label_42 = child(div_42);
60569
- var input_35 = sibling(child(label_42), 2);
60570
- remove_input_defaults(input_35);
60571
- reset(label_42);
60572
- var label_43 = sibling(label_42, 2);
60573
- var input_36 = sibling(child(label_43), 2);
60574
- remove_input_defaults(input_36);
60575
- reset(label_43);
60576
- var label_44 = sibling(label_43, 2);
60600
+ var label_44 = child(div_42);
60577
60601
  var input_37 = sibling(child(label_44), 2);
60578
60602
  remove_input_defaults(input_37);
60579
60603
  reset(label_44);
60580
- var div_43 = sibling(label_44, 2);
60604
+ var label_45 = sibling(label_44, 2);
60605
+ var input_38 = sibling(child(label_45), 2);
60606
+ remove_input_defaults(input_38);
60607
+ reset(label_45);
60608
+ var label_46 = sibling(label_45, 2);
60609
+ var input_39 = sibling(child(label_46), 2);
60610
+ remove_input_defaults(input_39);
60611
+ reset(label_46);
60612
+ var div_43 = sibling(label_46, 2);
60581
60613
  var button_27 = child(div_43);
60582
60614
  var text_30 = child(button_27, true);
60583
60615
  reset(button_27);
@@ -60587,15 +60619,15 @@ function PropertiesPanel($$anchor, $$props) {
60587
60619
  reset(div_42);
60588
60620
  reset(div_41);
60589
60621
  template_effect(() => {
60590
- set_value(input_35, get(floor).backgroundImage.opacity);
60591
- set_value(input_36, get(floor).backgroundImage.scale);
60592
- set_value(input_37, get(floor).backgroundImage.rotation);
60622
+ set_value(input_37, get(floor).backgroundImage.opacity);
60623
+ set_value(input_38, get(floor).backgroundImage.scale);
60624
+ set_value(input_39, get(floor).backgroundImage.rotation);
60593
60625
  set_class(button_27, 1, `flex-1 px-2 py-1.5 border rounded text-sm ${get(floor).backgroundImage.locked ? "bg-amber-100 border-amber-400 text-amber-700" : "border-gray-200 hover:bg-gray-50"}`);
60594
60626
  set_text(text_30, get(floor).backgroundImage.locked ? "๐Ÿ”’ Locked" : "๐Ÿ”“ Unlocked");
60595
60627
  });
60596
- delegated("input", input_35, (e) => updateBackgroundImage({ opacity: Number(e.target.value) }));
60597
- delegated("input", input_36, (e) => updateBackgroundImage({ scale: Number(e.target.value) }));
60598
- delegated("input", input_37, (e) => updateBackgroundImage({ rotation: Number(e.target.value) }));
60628
+ delegated("input", input_37, (e) => updateBackgroundImage({ opacity: Number(e.target.value) }));
60629
+ delegated("input", input_38, (e) => updateBackgroundImage({ scale: Number(e.target.value) }));
60630
+ delegated("input", input_39, (e) => updateBackgroundImage({ rotation: Number(e.target.value) }));
60599
60631
  delegated("click", button_27, () => updateBackgroundImage({ locked: !get(floor).backgroundImage.locked }));
60600
60632
  delegated("click", button_28, () => {
60601
60633
  calibrationPoints.set([]);
@@ -60604,9 +60636,9 @@ function PropertiesPanel($$anchor, $$props) {
60604
60636
  delegated("click", button_29, () => setBackgroundImage(void 0));
60605
60637
  append($$anchor, div_41);
60606
60638
  };
60607
- if_block(node_6, ($$render) => {
60639
+ if_block(node_7, ($$render) => {
60608
60640
  var _$$get16;
60609
- if (get(hasBgImage) && ((_$$get16 = get(floor)) === null || _$$get16 === void 0 ? void 0 : _$$get16.backgroundImage)) $$render(consequent_11);
60641
+ if (get(hasBgImage) && ((_$$get16 = get(floor)) === null || _$$get16 === void 0 ? void 0 : _$$get16.backgroundImage)) $$render(consequent_12);
60610
60642
  });
60611
60643
  reset(div);
60612
60644
  template_effect(() => classes = set_class(div, 1, `${is3D() ? "w-80" : "w-64"} shrink-0 bg-white border-l border-gray-200 flex flex-col overflow-y-auto p-3 fixed right-0 z-40 shadow-lg`, null, classes, { hidden: !get(hasSelection) }));
@@ -61704,17 +61736,19 @@ function getHeatmapColor(t, alpha = 1) {
61704
61736
  }
61705
61737
  return `rgba(${r}, ${g}, ${b}, ${alpha})`;
61706
61738
  }
61707
- var drawCamera = (ctx, w, d, color, heatmapMatrix, hasPerson = false, showHeatmap = false) => {
61739
+ var drawCamera = (ctx, w, d, color, heatmapMatrix, hasPerson = false, showHeatmap = false, showCameraCones = false, highlighted = false) => {
61708
61740
  const bodyRadius = 4;
61709
61741
  const lensR = Math.min(w, d) * .25;
61710
61742
  const range = Math.max(w, d) * 6;
61711
61743
  const fov = Math.PI / 2;
61712
- if (showHeatmap) {
61744
+ if (showHeatmap || showCameraCones) {
61713
61745
  var _heatmapMatrix$;
61714
61746
  ctx.save();
61715
61747
  const coneGradient = ctx.createRadialGradient(0, 0, 0, 0, 0, range);
61716
- coneGradient.addColorStop(0, color + "55");
61717
- coneGradient.addColorStop(.45, color + "22");
61748
+ const innerAlpha = highlighted ? "88" : showHeatmap ? "55" : "22";
61749
+ const midAlpha = highlighted ? "55" : showHeatmap ? "22" : "11";
61750
+ coneGradient.addColorStop(0, color + innerAlpha);
61751
+ coneGradient.addColorStop(.45, color + midAlpha);
61718
61752
  coneGradient.addColorStop(1, color + "00");
61719
61753
  ctx.fillStyle = coneGradient;
61720
61754
  ctx.globalCompositeOperation = "lighter";
@@ -61723,8 +61757,18 @@ var drawCamera = (ctx, w, d, color, heatmapMatrix, hasPerson = false, showHeatma
61723
61757
  ctx.arc(0, 0, range, -fov / 2, fov / 2);
61724
61758
  ctx.closePath();
61725
61759
  ctx.fill();
61760
+ if (highlighted) {
61761
+ ctx.strokeStyle = "#fbbf24";
61762
+ ctx.lineWidth = 2.5;
61763
+ ctx.globalCompositeOperation = "source-over";
61764
+ ctx.beginPath();
61765
+ ctx.moveTo(0, 0);
61766
+ ctx.arc(0, 0, range, -fov / 2, fov / 2);
61767
+ ctx.closePath();
61768
+ ctx.stroke();
61769
+ }
61726
61770
  ctx.restore();
61727
- if ((heatmapMatrix === null || heatmapMatrix === void 0 ? void 0 : heatmapMatrix.length) && ((_heatmapMatrix$ = heatmapMatrix[0]) === null || _heatmapMatrix$ === void 0 ? void 0 : _heatmapMatrix$.length)) {
61771
+ if (showHeatmap && (heatmapMatrix === null || heatmapMatrix === void 0 ? void 0 : heatmapMatrix.length) && ((_heatmapMatrix$ = heatmapMatrix[0]) === null || _heatmapMatrix$ === void 0 ? void 0 : _heatmapMatrix$.length)) {
61728
61772
  const rows = heatmapMatrix.length;
61729
61773
  const cols = heatmapMatrix[0].length;
61730
61774
  const maxValue = Math.max(...heatmapMatrix.flat());
@@ -61754,7 +61798,7 @@ var drawCamera = (ctx, w, d, color, heatmapMatrix, hasPerson = false, showHeatma
61754
61798
  ctx.restore();
61755
61799
  }
61756
61800
  }
61757
- if (hasPerson) {
61801
+ if (showHeatmap && hasPerson) {
61758
61802
  const now = Date.now();
61759
61803
  if (persons.length < MAX_PERSONS && now - lastSpawnTime > SPAWN_INTERVAL) {
61760
61804
  lastSpawnTime = now;
@@ -61794,7 +61838,7 @@ var drawCamera = (ctx, w, d, color, heatmapMatrix, hasPerson = false, showHeatma
61794
61838
  ctx.restore();
61795
61839
  return true;
61796
61840
  });
61797
- } else persons = [];
61841
+ } else if (showHeatmap) persons = [];
61798
61842
  } else persons = [];
61799
61843
  ctx.fillStyle = color + "40";
61800
61844
  ctx.strokeStyle = color;
@@ -61890,12 +61934,12 @@ var iconDrawers = {
61890
61934
  * @param w - pixel width (catalogWidth * zoom)
61891
61935
  * @param d - pixel depth (catalogDepth * zoom)
61892
61936
  */
61893
- function drawFurnitureIcon(ctx, catalogId, w, d, color, strokeColor, heatmapMatrix, hasPerson = false, showHeatmap = false) {
61937
+ function drawFurnitureIcon(ctx, catalogId, w, d, color, strokeColor, heatmapMatrix, hasPerson = false, showHeatmap = false, showCameraCones = false, highlighted = false) {
61894
61938
  ctx.fillStyle = color + "60";
61895
61939
  ctx.strokeStyle = strokeColor;
61896
61940
  ctx.lineWidth = 1;
61897
61941
  const drawer = iconDrawers[catalogId];
61898
- if (drawer) drawer(ctx, w, d, color, heatmapMatrix, hasPerson, showHeatmap);
61942
+ if (drawer) drawer(ctx, w, d, color, heatmapMatrix, hasPerson, showHeatmap, showCameraCones, highlighted);
61899
61943
  else {
61900
61944
  roundRect(ctx, -w / 2, -d / 2, w, d, 2);
61901
61945
  ctx.fill();
@@ -63311,8 +63355,8 @@ function drawWindowDistanceDimensions(cs, wall, window, dimSettings) {
63311
63355
  ctx.fillText(labelText, midPoint.x, midPoint.y);
63312
63356
  }
63313
63357
  }
63314
- function drawFurnitureItem(cs, item, selected) {
63315
- var _item$scale$x, _item$scale, _item$scale$y, _item$scale2, _item$width, _item$depth, _item$color;
63358
+ function drawFurnitureItem(cs, item, selected, options) {
63359
+ var _item$scale$x, _item$scale, _item$scale$y, _item$scale2, _item$width, _item$depth, _options$showCameraCo, _options$showCameraLa, _item$color;
63316
63360
  const { ctx, zoom } = cs;
63317
63361
  const cat = getCatalogItem(item.catalogId);
63318
63362
  if (!cat) return;
@@ -63322,6 +63366,10 @@ function drawFurnitureItem(cs, item, selected) {
63322
63366
  const w = ((_item$width = item.width) !== null && _item$width !== void 0 ? _item$width : cat.width) * Math.abs(sx) * zoom;
63323
63367
  const d = ((_item$depth = item.depth) !== null && _item$depth !== void 0 ? _item$depth : cat.depth) * Math.abs(sy) * zoom;
63324
63368
  const angle = item.rotation * Math.PI / 180;
63369
+ const highlighted = !!((options === null || options === void 0 ? void 0 : options.selectedCameraSerial) && item.serial && item.serial === options.selectedCameraSerial);
63370
+ const showCameraCones = (_options$showCameraCo = options === null || options === void 0 ? void 0 : options.showCameraCones) !== null && _options$showCameraCo !== void 0 ? _options$showCameraCo : false;
63371
+ const showCameraLabels = (_options$showCameraLa = options === null || options === void 0 ? void 0 : options.showCameraLabels) !== null && _options$showCameraLa !== void 0 ? _options$showCameraLa : true;
63372
+ const isCamera = item.catalogId === "camera";
63325
63373
  ctx.save();
63326
63374
  ctx.translate(s.x, s.y);
63327
63375
  ctx.rotate(angle);
@@ -63329,14 +63377,17 @@ function drawFurnitureItem(cs, item, selected) {
63329
63377
  const itemColor = (_item$color = item.color) !== null && _item$color !== void 0 ? _item$color : cat.color;
63330
63378
  const strokeColor = selected ? "#3b82f6" : itemColor;
63331
63379
  ctx.lineWidth = selected ? 2 : 1;
63332
- drawFurnitureIcon(ctx, item.catalogId, w, d, itemColor, strokeColor, item.heatmapMatrix, item.hasPerson, item.showHeatmap);
63380
+ drawFurnitureIcon(ctx, item.catalogId, w, d, itemColor, strokeColor, item.heatmapMatrix, item.hasPerson, item.showHeatmap, isCamera ? showCameraCones : false, isCamera ? highlighted : false);
63333
63381
  const fontSize = Math.max(8, Math.min(12, Math.min(w, d) * .2));
63334
- if (Math.min(w, d) > 20) {
63335
- ctx.fillStyle = "#374151";
63382
+ if (showCameraLabels && Math.min(w, d) > 20) {
63383
+ var _item$name;
63384
+ const label = isCamera ? (_item$name = item.name) !== null && _item$name !== void 0 ? _item$name : cat.name : cat.name;
63385
+ ctx.fillStyle = highlighted ? "#b45309" : "#374151";
63336
63386
  ctx.font = `${fontSize * .7}px sans-serif`;
63337
63387
  ctx.textAlign = "center";
63338
63388
  ctx.textBaseline = "middle";
63339
- ctx.fillText(cat.name, 0, d / 2 + fontSize * .8);
63389
+ if (isCamera) ctx.fillText(label, -w / 2 - fontSize * 1.2, 0);
63390
+ else ctx.fillText(label, 0, d / 2 + fontSize * .8);
63340
63391
  }
63341
63392
  if (selected) {
63342
63393
  ctx.strokeStyle = "#3b82f6";
@@ -64506,34 +64557,36 @@ function hitTestTextAnnotation(wp, floor, ctx, zoom) {
64506
64557
  //#region src/lib/components/editor/FloorPlanCanvas.svelte
64507
64558
  init_client();
64508
64559
  init_index_client();
64509
- var root_2$3 = /* @__PURE__ */ from_html(`<input type="text" class="absolute bg-white border-2 border-blue-500 rounded px-2 py-1 text-sm text-center shadow-lg outline-none"/>`);
64560
+ var root_1$4 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-2 z-10 px-2 py-1 bg-white/85 rounded text-sm font-semibold text-gray-700 shadow pointer-events-none"> </div>`);
64510
64561
  var root_3$3 = /* @__PURE__ */ from_html(`<input type="text" class="absolute bg-white border-2 border-blue-500 rounded px-2 py-1 text-sm text-center shadow-lg outline-none"/>`);
64511
- var root_4$2 = /* @__PURE__ */ from_html(`<div class="absolute inset-0 flex items-center justify-center pointer-events-none"><div class="text-center opacity-60"><div class="text-5xl mb-3">๐Ÿ </div> <div class="text-sm font-medium text-gray-500">Start building your floor plan</div> <div class="text-xs text-gray-400 mt-1">Draw walls with <span class="font-mono bg-gray-100 px-1 rounded">W</span> or drag items from the sidebar</div></div></div>`);
64512
- var root_5 = /* @__PURE__ */ from_html(`<canvas width="180" height="120" class="absolute bottom-10 right-2 rounded-lg shadow-lg border border-gray-300 cursor-crosshair bg-white" style="z-index: 15;"></canvas>`);
64513
- var root_6$1 = /* @__PURE__ */ from_html(`<span> </span> <span> </span> <span class="text-gray-300">|</span>`, 1);
64514
- var root_8 = /* @__PURE__ */ from_html(`<span> </span>`);
64562
+ var root_4$2 = /* @__PURE__ */ from_html(`<input type="text" class="absolute bg-white border-2 border-blue-500 rounded px-2 py-1 text-sm text-center shadow-lg outline-none"/>`);
64563
+ var root_5 = /* @__PURE__ */ from_html(`<div class="absolute inset-0 flex items-center justify-center pointer-events-none"><div class="text-center opacity-60"><div class="text-5xl mb-3">๐Ÿ </div> <div class="text-sm font-medium text-gray-500">Start building your floor plan</div> <div class="text-xs text-gray-400 mt-1">Draw walls with <span class="font-mono bg-gray-100 px-1 rounded">W</span> or drag items from the sidebar</div></div></div>`);
64564
+ var root_6$1 = /* @__PURE__ */ from_html(`<canvas width="180" height="120" class="absolute bottom-10 right-2 rounded-lg shadow-lg border border-gray-300 cursor-crosshair bg-white" style="z-index: 15;"></canvas>`);
64565
+ var root_7 = /* @__PURE__ */ from_html(`<span> </span> <span> </span> <span class="text-gray-300">|</span>`, 1);
64515
64566
  var root_9 = /* @__PURE__ */ from_html(`<span> </span>`);
64516
64567
  var root_10 = /* @__PURE__ */ from_html(`<span> </span>`);
64517
- var root_7 = /* @__PURE__ */ from_html(`<span> </span> <!> <!> <!> <span class="text-gray-300">|</span>`, 1);
64518
- var root_11 = /* @__PURE__ */ from_html(`<span class="text-blue-600 font-medium"> </span> <span class="text-gray-300">|</span>`, 1);
64519
- var root_13 = /* @__PURE__ */ from_html(`<label class="flex items-center gap-2 py-0.5 cursor-pointer hover:bg-gray-50 rounded px-1"><input type="checkbox" class="accent-blue-500"/> <span> </span></label>`);
64520
- var root_12 = /* @__PURE__ */ from_html(`<div class="absolute bottom-12 right-2 z-20 bg-white rounded-lg shadow-lg border border-gray-200 p-3 text-xs min-w-[160px]"><div class="font-semibold text-gray-700 mb-2">Layers</div> <!> <hr class="my-1 border-gray-100"/> <label class="flex items-center gap-2 py-0.5 cursor-pointer hover:bg-gray-50 rounded px-1"><input type="checkbox" class="accent-blue-500"/> <span>Room Labels</span></label> <label class="flex items-center gap-2 py-0.5 cursor-pointer hover:bg-gray-50 rounded px-1"><input type="checkbox" class="accent-blue-500"/> <span>Dimensions</span></label></div>`);
64521
- var root_16 = /* @__PURE__ */ from_html(`<button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700" title="Flip swing" aria-label="Flip swing"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M7 16V4m0 0L3 8m4-4l4 4M17 8v12m0 0l4-4m-4 4l-4-4"></path></svg></button>`);
64522
- var root_17 = /* @__PURE__ */ from_html(`<button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700" title="Split wall at midpoint" aria-label="Split wall at midpoint"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M4 12h4M16 12h4"></path></svg></button>`);
64523
- var root_15 = /* @__PURE__ */ from_html(`<div class="absolute z-40 flex items-center gap-0.5 bg-white rounded-lg shadow-lg border border-gray-200 px-1 py-0.5"><button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700" title="Duplicate" aria-label="Duplicate"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button> <!> <!> <div class="w-px h-5 bg-gray-200 mx-0.5"></div> <button class="w-7 h-7 flex items-center justify-center rounded hover:bg-red-50 text-gray-400 hover:text-red-600" title="Delete" aria-label="Delete"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2m3 0v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6h14"></path></svg></button></div>`);
64524
- var root_18 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-blue-600 text-white px-3 py-1 rounded-full text-xs shadow">Click to add wall segment ยท Double-click to finish ยท C to close loop ยท
64568
+ var root_11 = /* @__PURE__ */ from_html(`<span> </span>`);
64569
+ var root_8 = /* @__PURE__ */ from_html(`<span> </span> <!> <!> <!> <span class="text-gray-300">|</span>`, 1);
64570
+ var root_12 = /* @__PURE__ */ from_html(`<span class="text-blue-600 font-medium"> </span> <span class="text-gray-300">|</span>`, 1);
64571
+ var root_14 = /* @__PURE__ */ from_html(`<label class="flex items-center gap-2 py-0.5 cursor-pointer hover:bg-gray-50 rounded px-1"><input type="checkbox" class="accent-blue-500"/> <span> </span></label>`);
64572
+ var root_13 = /* @__PURE__ */ from_html(`<div class="absolute bottom-12 right-2 z-20 bg-white rounded-lg shadow-lg border border-gray-200 p-3 text-xs min-w-[160px]"><div class="font-semibold text-gray-700 mb-2">Layers</div> <!> <hr class="my-1 border-gray-100"/> <label class="flex items-center gap-2 py-0.5 cursor-pointer hover:bg-gray-50 rounded px-1"><input type="checkbox" class="accent-blue-500"/> <span>Room Labels</span></label> <label class="flex items-center gap-2 py-0.5 cursor-pointer hover:bg-gray-50 rounded px-1"><input type="checkbox" class="accent-blue-500"/> <span>Dimensions</span></label></div>`);
64573
+ var root_17 = /* @__PURE__ */ from_html(`<button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700" title="Flip swing" aria-label="Flip swing"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M7 16V4m0 0L3 8m4-4l4 4M17 8v12m0 0l4-4m-4 4l-4-4"></path></svg></button>`);
64574
+ var root_18 = /* @__PURE__ */ from_html(`<button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700" title="Split wall at midpoint" aria-label="Split wall at midpoint"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M4 12h4M16 12h4"></path></svg></button>`);
64575
+ var root_16 = /* @__PURE__ */ from_html(`<div class="absolute z-40 flex items-center gap-0.5 bg-white rounded-lg shadow-lg border border-gray-200 px-1 py-0.5"><button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700" title="Duplicate" aria-label="Duplicate"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button> <!> <!> <div class="w-px h-5 bg-gray-200 mx-0.5"></div> <button class="w-7 h-7 flex items-center justify-center rounded hover:bg-red-50 text-gray-400 hover:text-red-600" title="Delete" aria-label="Delete"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2m3 0v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6h14"></path></svg></button></div>`);
64576
+ var root_19 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-blue-600 text-white px-3 py-1 rounded-full text-xs shadow">Click to add wall segment ยท Double-click to finish ยท C to close loop ยท
64525
64577
  Esc to cancel</div>`);
64526
- var root_19 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-purple-600 text-white px-3 py-1 rounded-full text-xs shadow"> </div>`);
64527
- var root_20 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-red-600 text-white px-3 py-1 rounded-full text-xs shadow">Right-click two points to measure ยท M to exit ยท Esc to cancel</div>`);
64528
- var root_21 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-emerald-600 text-white px-3 py-1 rounded-full text-xs shadow">Click to place text label ยท Esc to cancel</div>`);
64529
- var root_22 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-indigo-600 text-white px-3 py-1 rounded-full text-xs shadow"> </div>`);
64530
- var root_1$4 = /* @__PURE__ */ from_html(`<!> <!> <!> <!> <div class="absolute bottom-2 right-2 bg-white/80 rounded px-2 py-1 text-xs text-gray-500 flex gap-3"><!> <!> <!> <span> </span> <button class="hover:text-gray-700" title="Zoom to Fit (F)">โŠž Fit</button> <button class="hover:text-gray-700" title="Toggle Grid (G)"> </button> <button class="hover:text-gray-700" title="Toggle Snap to Grid (S)"> </button> <button class="hover:text-gray-700" title="Toggle Furniture"> </button> <button class="hover:text-gray-700" title="Layer Visibility">๐Ÿ—‚ Layers</button> <button class="hover:text-gray-700" title="Toggle Rulers"> </button> <button class="hover:text-gray-700" title="Toggle Mini-map"> </button></div> <!> <!> <!> <!> <!> <!> <!> <div class="absolute bottom-3 left-3 z-20 flex items-center gap-1 bg-white rounded-lg shadow-lg border border-gray-200 px-1 py-0.5"><button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-600 hover:text-gray-800 font-bold text-lg" title="Zoom Out (โˆ’)" aria-label="Zoom out">โˆ’</button> <button class="min-w-[3.5rem] h-7 flex items-center justify-center rounded hover:bg-gray-100 text-xs font-medium text-gray-600 hover:text-gray-800 tabular-nums" title="Reset to 100%" aria-label="Zoom to 100%"> </button> <button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-600 hover:text-gray-800 font-bold text-lg" title="Zoom In (+)" aria-label="Zoom in">+</button> <div class="w-px h-5 bg-gray-200"></div> <button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700 text-sm" title="Zoom to Fit (F)" aria-label="Zoom to fit">โŠž</button></div> <!>`, 1);
64531
- var root$1 = /* @__PURE__ */ from_html(`<div class="w-full h-full relative overflow-hidden" role="application"><div><canvas aria-label="Floor plan editor canvas"></canvas></div> <!></div>`);
64578
+ var root_20 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-purple-600 text-white px-3 py-1 rounded-full text-xs shadow"> </div>`);
64579
+ var root_21 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-red-600 text-white px-3 py-1 rounded-full text-xs shadow">Right-click two points to measure ยท M to exit ยท Esc to cancel</div>`);
64580
+ var root_22 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-emerald-600 text-white px-3 py-1 rounded-full text-xs shadow">Click to place text label ยท Esc to cancel</div>`);
64581
+ var root_23 = /* @__PURE__ */ from_html(`<div class="absolute top-2 left-1/2 -translate-x-1/2 bg-indigo-600 text-white px-3 py-1 rounded-full text-xs shadow"> </div>`);
64582
+ var root_2$3 = /* @__PURE__ */ from_html(`<!> <!> <!> <!> <div class="absolute bottom-2 right-2 bg-white/80 rounded px-2 py-1 text-xs text-gray-500 flex gap-3"><!> <!> <!> <span> </span> <button class="hover:text-gray-700" title="Zoom to Fit (F)">โŠž Fit</button> <button class="hover:text-gray-700" title="Toggle Grid (G)"> </button> <button class="hover:text-gray-700" title="Toggle Snap to Grid (S)"> </button> <button class="hover:text-gray-700" title="Toggle Furniture"> </button> <button class="hover:text-gray-700" title="Layer Visibility">๐Ÿ—‚ Layers</button> <button class="hover:text-gray-700" title="Toggle Rulers"> </button> <button class="hover:text-gray-700" title="Toggle Mini-map"> </button></div> <!> <!> <!> <!> <!> <!> <!> <div class="absolute bottom-3 left-3 z-20 flex items-center gap-1 bg-white rounded-lg shadow-lg border border-gray-200 px-1 py-0.5"><button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-600 hover:text-gray-800 font-bold text-lg" title="Zoom Out (โˆ’)" aria-label="Zoom out">โˆ’</button> <button class="min-w-[3.5rem] h-7 flex items-center justify-center rounded hover:bg-gray-100 text-xs font-medium text-gray-600 hover:text-gray-800 tabular-nums" title="Reset to 100%" aria-label="Zoom to 100%"> </button> <button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-600 hover:text-gray-800 font-bold text-lg" title="Zoom In (+)" aria-label="Zoom in">+</button> <div class="w-px h-5 bg-gray-200"></div> <button class="w-7 h-7 flex items-center justify-center rounded hover:bg-gray-100 text-gray-500 hover:text-gray-700 text-sm" title="Zoom to Fit (F)" aria-label="Zoom to fit">โŠž</button></div> <!>`, 1);
64583
+ var root$1 = /* @__PURE__ */ from_html(`<div class="w-full h-full relative overflow-hidden" role="application"><div><canvas aria-label="Floor plan editor canvas"></canvas></div> <!> <!></div>`);
64532
64584
  function FloorPlanCanvas($$anchor, $$props) {
64533
64585
  push($$props, true);
64534
64586
  const $panMode = () => store_get(panMode, "$panMode", $$stores);
64535
64587
  const $projectSettings = () => store_get(projectSettings, "$projectSettings", $$stores);
64536
64588
  const [$$stores, $$cleanup] = setup_stores();
64589
+ let selectedCameraSerial = prop($$props, "selectedCameraSerial", 3, null), showCameraCones = prop($$props, "showCameraCones", 3, false), showCameraLabels = prop($$props, "showCameraLabels", 3, true);
64537
64590
  let canvas;
64538
64591
  let ctx;
64539
64592
  let width = /* @__PURE__ */ state(800);
@@ -64621,6 +64674,15 @@ function FloorPlanCanvas($$anchor, $$props) {
64621
64674
  user_effect(() => {
64622
64675
  if ($$props.viewOnly) set(showRulers, false);
64623
64676
  });
64677
+ user_effect(() => {
64678
+ selectedCameraSerial();
64679
+ showCameraCones();
64680
+ showCameraLabels();
64681
+ $$props.projectName;
64682
+ $$props.heatmapEnabled;
64683
+ $$props.heatmapMatrix;
64684
+ markDirty();
64685
+ });
64624
64686
  let layerVis = /* @__PURE__ */ state(proxy({
64625
64687
  walls: true,
64626
64688
  doors: true,
@@ -65056,7 +65118,11 @@ function FloorPlanCanvas($$anchor, $$props) {
65056
65118
  drawWindowOnWall(getCS(), wall, win);
65057
65119
  }
65058
65120
  function drawFurniture(item, selected) {
65059
- drawFurnitureItem(getCS(), item, selected);
65121
+ drawFurnitureItem(getCS(), item, selected, {
65122
+ selectedCameraSerial: selectedCameraSerial(),
65123
+ showCameraCones: showCameraCones(),
65124
+ showCameraLabels: showCameraLabels()
65125
+ });
65060
65126
  }
65061
65127
  let placementWallSnap = /* @__PURE__ */ state(null);
65062
65128
  function drawFurniturePreview() {
@@ -68974,11 +69040,22 @@ function FloorPlanCanvas($$anchor, $$props) {
68974
69040
  bind_this(canvas_1, ($$value) => canvas = $$value, () => canvas);
68975
69041
  reset(div_1);
68976
69042
  var node = sibling(div_1, 2);
68977
- var consequent_20 = ($$anchor) => {
68978
- var fragment = root_1$4();
68979
- var node_1 = first_child(fragment);
68980
- var consequent = ($$anchor) => {
68981
- var input = root_2$3();
69043
+ var consequent = ($$anchor) => {
69044
+ var div_2 = root_1$4();
69045
+ var text_1 = child(div_2, true);
69046
+ reset(div_2);
69047
+ template_effect(() => set_text(text_1, $$props.projectName));
69048
+ append($$anchor, div_2);
69049
+ };
69050
+ if_block(node, ($$render) => {
69051
+ if ($$props.viewOnly && $$props.projectName) $$render(consequent);
69052
+ });
69053
+ var node_1 = sibling(node, 2);
69054
+ var consequent_21 = ($$anchor) => {
69055
+ var fragment = root_2$3();
69056
+ var node_2 = first_child(fragment);
69057
+ var consequent_1 = ($$anchor) => {
69058
+ var input = root_3$3();
68982
69059
  remove_input_defaults(input);
68983
69060
  autofocus(input, true);
68984
69061
  template_effect(() => {
@@ -69011,12 +69088,12 @@ function FloorPlanCanvas($$anchor, $$props) {
69011
69088
  });
69012
69089
  append($$anchor, input);
69013
69090
  };
69014
- if_block(node_1, ($$render) => {
69015
- if (get(editingRoomId)) $$render(consequent);
69091
+ if_block(node_2, ($$render) => {
69092
+ if (get(editingRoomId)) $$render(consequent_1);
69016
69093
  });
69017
- var node_2 = sibling(node_1, 2);
69018
- var consequent_1 = ($$anchor) => {
69019
- var input_1 = root_3$3();
69094
+ var node_3 = sibling(node_2, 2);
69095
+ var consequent_2 = ($$anchor) => {
69096
+ var input_1 = root_4$2();
69020
69097
  remove_input_defaults(input_1);
69021
69098
  autofocus(input_1, true);
69022
69099
  template_effect(() => {
@@ -69063,148 +69140,148 @@ function FloorPlanCanvas($$anchor, $$props) {
69063
69140
  });
69064
69141
  append($$anchor, input_1);
69065
69142
  };
69066
- if_block(node_2, ($$render) => {
69067
- if (get(editingTextAnnotationId)) $$render(consequent_1);
69068
- });
69069
- var node_3 = sibling(node_2, 2);
69070
- var consequent_2 = ($$anchor) => {
69071
- append($$anchor, root_4$2());
69072
- };
69073
69143
  if_block(node_3, ($$render) => {
69074
- if (get(currentFloor) && get(currentFloor).walls.length === 0 && get(currentFloor).furniture.length === 0 && get(currentFloor).doors.length === 0 && !$$props.viewOnly) $$render(consequent_2);
69144
+ if (get(editingTextAnnotationId)) $$render(consequent_2);
69075
69145
  });
69076
69146
  var node_4 = sibling(node_3, 2);
69077
69147
  var consequent_3 = ($$anchor) => {
69078
- var canvas_2 = root_5();
69148
+ append($$anchor, root_5());
69149
+ };
69150
+ if_block(node_4, ($$render) => {
69151
+ if (get(currentFloor) && get(currentFloor).walls.length === 0 && get(currentFloor).furniture.length === 0 && get(currentFloor).doors.length === 0 && !$$props.viewOnly) $$render(consequent_3);
69152
+ });
69153
+ var node_5 = sibling(node_4, 2);
69154
+ var consequent_4 = ($$anchor) => {
69155
+ var canvas_2 = root_6$1();
69079
69156
  bind_this(canvas_2, ($$value) => minimapCanvas = $$value, () => minimapCanvas);
69080
69157
  delegated("click", canvas_2, onMinimapClick);
69081
69158
  append($$anchor, canvas_2);
69082
69159
  };
69083
- if_block(node_4, ($$render) => {
69084
- if (get(showMinimap) && get(currentFloor) && get(currentFloor).walls.length > 0) $$render(consequent_3);
69160
+ if_block(node_5, ($$render) => {
69161
+ if (get(showMinimap) && get(currentFloor) && get(currentFloor).walls.length > 0) $$render(consequent_4);
69085
69162
  });
69086
- var div_3 = sibling(node_4, 2);
69087
- var node_5 = child(div_3);
69088
- var consequent_4 = ($$anchor) => {
69089
- var fragment_1 = root_6$1();
69163
+ var div_4 = sibling(node_5, 2);
69164
+ var node_6 = child(div_4);
69165
+ var consequent_5 = ($$anchor) => {
69166
+ var fragment_1 = root_7();
69090
69167
  var span = first_child(fragment_1);
69091
- var text_1 = child(span);
69168
+ var text_2 = child(span);
69092
69169
  reset(span);
69093
69170
  var span_1 = sibling(span, 2);
69094
- var text_2 = child(span_1, true);
69171
+ var text_3 = child(span_1, true);
69095
69172
  reset(span_1);
69096
69173
  next(2);
69097
69174
  template_effect(($0) => {
69098
69175
  var _$$get$length;
69099
- set_text(text_1, `${(_$$get$length = get(detectedRooms).length) !== null && _$$get$length !== void 0 ? _$$get$length : ""} room${get(detectedRooms).length !== 1 ? "s" : ""}`);
69100
- set_text(text_2, $0);
69176
+ set_text(text_2, `${(_$$get$length = get(detectedRooms).length) !== null && _$$get$length !== void 0 ? _$$get$length : ""} room${get(detectedRooms).length !== 1 ? "s" : ""}`);
69177
+ set_text(text_3, $0);
69101
69178
  }, [() => formatArea(get(detectedRooms).reduce((s, r) => s + r.area, 0), $projectSettings().units)]);
69102
69179
  append($$anchor, fragment_1);
69103
69180
  };
69104
- if_block(node_5, ($$render) => {
69105
- if (get(detectedRooms).length > 0) $$render(consequent_4);
69181
+ if_block(node_6, ($$render) => {
69182
+ if (get(detectedRooms).length > 0) $$render(consequent_5);
69106
69183
  });
69107
- var node_6 = sibling(node_5, 2);
69108
- var consequent_8 = ($$anchor) => {
69109
- var fragment_2 = root_7();
69184
+ var node_7 = sibling(node_6, 2);
69185
+ var consequent_9 = ($$anchor) => {
69186
+ var fragment_2 = root_8();
69110
69187
  var span_2 = first_child(fragment_2);
69111
- var text_3 = child(span_2);
69188
+ var text_4 = child(span_2);
69112
69189
  reset(span_2);
69113
- var node_7 = sibling(span_2, 2);
69114
- var consequent_5 = ($$anchor) => {
69115
- var span_3 = root_8();
69116
- var text_4 = child(span_3);
69190
+ var node_8 = sibling(span_2, 2);
69191
+ var consequent_6 = ($$anchor) => {
69192
+ var span_3 = root_9();
69193
+ var text_5 = child(span_3);
69117
69194
  reset(span_3);
69118
69195
  template_effect(() => {
69119
69196
  var _$$get$doors$length;
69120
- return set_text(text_4, `${(_$$get$doors$length = get(currentFloor).doors.length) !== null && _$$get$doors$length !== void 0 ? _$$get$doors$length : ""} door${get(currentFloor).doors.length !== 1 ? "s" : ""}`);
69197
+ return set_text(text_5, `${(_$$get$doors$length = get(currentFloor).doors.length) !== null && _$$get$doors$length !== void 0 ? _$$get$doors$length : ""} door${get(currentFloor).doors.length !== 1 ? "s" : ""}`);
69121
69198
  });
69122
69199
  append($$anchor, span_3);
69123
69200
  };
69124
- if_block(node_7, ($$render) => {
69125
- if (get(currentFloor).doors.length > 0) $$render(consequent_5);
69201
+ if_block(node_8, ($$render) => {
69202
+ if (get(currentFloor).doors.length > 0) $$render(consequent_6);
69126
69203
  });
69127
- var node_8 = sibling(node_7, 2);
69128
- var consequent_6 = ($$anchor) => {
69129
- var span_4 = root_9();
69130
- var text_5 = child(span_4);
69204
+ var node_9 = sibling(node_8, 2);
69205
+ var consequent_7 = ($$anchor) => {
69206
+ var span_4 = root_10();
69207
+ var text_6 = child(span_4);
69131
69208
  reset(span_4);
69132
69209
  template_effect(() => {
69133
69210
  var _$$get$windows$length;
69134
- return set_text(text_5, `${(_$$get$windows$length = get(currentFloor).windows.length) !== null && _$$get$windows$length !== void 0 ? _$$get$windows$length : ""} window${get(currentFloor).windows.length !== 1 ? "s" : ""}`);
69211
+ return set_text(text_6, `${(_$$get$windows$length = get(currentFloor).windows.length) !== null && _$$get$windows$length !== void 0 ? _$$get$windows$length : ""} window${get(currentFloor).windows.length !== 1 ? "s" : ""}`);
69135
69212
  });
69136
69213
  append($$anchor, span_4);
69137
69214
  };
69138
- if_block(node_8, ($$render) => {
69139
- if (get(currentFloor).windows.length > 0) $$render(consequent_6);
69215
+ if_block(node_9, ($$render) => {
69216
+ if (get(currentFloor).windows.length > 0) $$render(consequent_7);
69140
69217
  });
69141
- var node_9 = sibling(node_8, 2);
69142
- var consequent_7 = ($$anchor) => {
69143
- var span_5 = root_10();
69144
- var text_6 = child(span_5);
69218
+ var node_10 = sibling(node_9, 2);
69219
+ var consequent_8 = ($$anchor) => {
69220
+ var span_5 = root_11();
69221
+ var text_7 = child(span_5);
69145
69222
  reset(span_5);
69146
69223
  template_effect(() => {
69147
69224
  var _$$get$furniture$leng;
69148
- return set_text(text_6, `${(_$$get$furniture$leng = get(currentFloor).furniture.length) !== null && _$$get$furniture$leng !== void 0 ? _$$get$furniture$leng : ""} object${get(currentFloor).furniture.length !== 1 ? "s" : ""}`);
69225
+ return set_text(text_7, `${(_$$get$furniture$leng = get(currentFloor).furniture.length) !== null && _$$get$furniture$leng !== void 0 ? _$$get$furniture$leng : ""} object${get(currentFloor).furniture.length !== 1 ? "s" : ""}`);
69149
69226
  });
69150
69227
  append($$anchor, span_5);
69151
69228
  };
69152
- if_block(node_9, ($$render) => {
69153
- if (get(currentFloor).furniture.length > 0) $$render(consequent_7);
69229
+ if_block(node_10, ($$render) => {
69230
+ if (get(currentFloor).furniture.length > 0) $$render(consequent_8);
69154
69231
  });
69155
69232
  next(2);
69156
69233
  template_effect(() => {
69157
69234
  var _$$get$walls$length;
69158
- return set_text(text_3, `${(_$$get$walls$length = get(currentFloor).walls.length) !== null && _$$get$walls$length !== void 0 ? _$$get$walls$length : ""} wall${get(currentFloor).walls.length !== 1 ? "s" : ""}`);
69235
+ return set_text(text_4, `${(_$$get$walls$length = get(currentFloor).walls.length) !== null && _$$get$walls$length !== void 0 ? _$$get$walls$length : ""} wall${get(currentFloor).walls.length !== 1 ? "s" : ""}`);
69159
69236
  });
69160
69237
  append($$anchor, fragment_2);
69161
69238
  };
69162
- if_block(node_6, ($$render) => {
69163
- if (get(currentFloor)) $$render(consequent_8);
69239
+ if_block(node_7, ($$render) => {
69240
+ if (get(currentFloor)) $$render(consequent_9);
69164
69241
  });
69165
- var node_10 = sibling(node_6, 2);
69166
- var consequent_9 = ($$anchor) => {
69167
- var fragment_3 = root_11();
69242
+ var node_11 = sibling(node_7, 2);
69243
+ var consequent_10 = ($$anchor) => {
69244
+ var fragment_3 = root_12();
69168
69245
  var span_6 = first_child(fragment_3);
69169
- var text_7 = child(span_6);
69246
+ var text_8 = child(span_6);
69170
69247
  reset(span_6);
69171
69248
  next(2);
69172
69249
  template_effect(() => {
69173
69250
  var _$$get$size;
69174
- return set_text(text_7, `${(_$$get$size = get(currentSelectedIds).size) !== null && _$$get$size !== void 0 ? _$$get$size : ""} selected`);
69251
+ return set_text(text_8, `${(_$$get$size = get(currentSelectedIds).size) !== null && _$$get$size !== void 0 ? _$$get$size : ""} selected`);
69175
69252
  });
69176
69253
  append($$anchor, fragment_3);
69177
69254
  };
69178
- if_block(node_10, ($$render) => {
69179
- if (get(currentSelectedIds).size > 1) $$render(consequent_9);
69255
+ if_block(node_11, ($$render) => {
69256
+ if (get(currentSelectedIds).size > 1) $$render(consequent_10);
69180
69257
  });
69181
- var span_7 = sibling(node_10, 2);
69182
- var text_8 = child(span_7);
69258
+ var span_7 = sibling(node_11, 2);
69259
+ var text_9 = child(span_7);
69183
69260
  reset(span_7);
69184
69261
  var button = sibling(span_7, 2);
69185
69262
  var button_1 = sibling(button, 2);
69186
- var text_9 = child(button_1);
69263
+ var text_10 = child(button_1);
69187
69264
  reset(button_1);
69188
69265
  var button_2 = sibling(button_1, 2);
69189
- var text_10 = child(button_2);
69266
+ var text_11 = child(button_2);
69190
69267
  reset(button_2);
69191
69268
  var button_3 = sibling(button_2, 2);
69192
- var text_11 = child(button_3);
69269
+ var text_12 = child(button_3);
69193
69270
  reset(button_3);
69194
69271
  var button_4 = sibling(button_3, 2);
69195
69272
  var button_5 = sibling(button_4, 2);
69196
- var text_12 = child(button_5);
69273
+ var text_13 = child(button_5);
69197
69274
  reset(button_5);
69198
69275
  var button_6 = sibling(button_5, 2);
69199
- var text_13 = child(button_6);
69200
- text_13.nodeValue = "๐Ÿ—บ Map";
69276
+ var text_14 = child(button_6);
69277
+ text_14.nodeValue = "๐Ÿ—บ Map";
69201
69278
  reset(button_6);
69202
- reset(div_3);
69203
- var node_11 = sibling(div_3, 2);
69204
- var consequent_10 = ($$anchor) => {
69205
- var div_4 = root_12();
69206
- var node_12 = sibling(child(div_4), 2);
69207
- each(node_12, 16, () => [
69279
+ reset(div_4);
69280
+ var node_12 = sibling(div_4, 2);
69281
+ var consequent_11 = ($$anchor) => {
69282
+ var div_5 = root_13();
69283
+ var node_13 = sibling(child(div_5), 2);
69284
+ each(node_13, 16, () => [
69208
69285
  ["walls", "Walls"],
69209
69286
  ["doors", "Doors"],
69210
69287
  ["windows", "Windows"],
@@ -69217,16 +69294,16 @@ function FloorPlanCanvas($$anchor, $$props) {
69217
69294
  var $$array = /* @__PURE__ */ user_derived(() => to_array($$item, 2));
69218
69295
  let key = () => get($$array)[0];
69219
69296
  let label = () => get($$array)[1];
69220
- var label_1 = root_13();
69297
+ var label_1 = root_14();
69221
69298
  var input_2 = child(label_1);
69222
69299
  remove_input_defaults(input_2);
69223
69300
  var span_8 = sibling(input_2, 2);
69224
- var text_14 = child(span_8, true);
69301
+ var text_15 = child(span_8, true);
69225
69302
  reset(span_8);
69226
69303
  reset(label_1);
69227
69304
  template_effect(() => {
69228
69305
  set_checked(input_2, get(layerVis)[key()]);
69229
- set_text(text_14, label());
69306
+ set_text(text_15, label());
69230
69307
  });
69231
69308
  delegated("change", input_2, () => layerVisibility.update((v) => ({
69232
69309
  ...v,
@@ -69234,7 +69311,7 @@ function FloorPlanCanvas($$anchor, $$props) {
69234
69311
  })));
69235
69312
  append($$anchor, label_1);
69236
69313
  });
69237
- var label_2 = sibling(node_12, 4);
69314
+ var label_2 = sibling(node_13, 4);
69238
69315
  var input_3 = child(label_2);
69239
69316
  remove_input_defaults(input_3);
69240
69317
  next(2);
@@ -69244,16 +69321,16 @@ function FloorPlanCanvas($$anchor, $$props) {
69244
69321
  remove_input_defaults(input_4);
69245
69322
  next(2);
69246
69323
  reset(label_3);
69247
- reset(div_4);
69324
+ reset(div_5);
69248
69325
  bind_checked(input_3, () => get(showRoomLabels), ($$value) => set(showRoomLabels, $$value));
69249
69326
  bind_checked(input_4, () => get(showDimensions), ($$value) => set(showDimensions, $$value));
69250
- append($$anchor, div_4);
69327
+ append($$anchor, div_5);
69251
69328
  };
69252
- if_block(node_11, ($$render) => {
69253
- if (get(showLayerPanel)) $$render(consequent_10);
69329
+ if_block(node_12, ($$render) => {
69330
+ if (get(showLayerPanel)) $$render(consequent_11);
69254
69331
  });
69255
- var node_13 = sibling(node_11, 2);
69256
- var consequent_14 = ($$anchor) => {
69332
+ var node_14 = sibling(node_12, 2);
69333
+ var consequent_15 = ($$anchor) => {
69257
69334
  const el = /* @__PURE__ */ user_derived(() => (() => {
69258
69335
  const f = get(currentFloor);
69259
69336
  const wall = f.walls.find((w) => w.id === get(currentSelectedId));
@@ -69286,24 +69363,24 @@ function FloorPlanCanvas($$anchor, $$props) {
69286
69363
  return null;
69287
69364
  })());
69288
69365
  var fragment_4 = comment();
69289
- var node_14 = first_child(fragment_4);
69290
- var consequent_13 = ($$anchor) => {
69291
- var div_5 = root_15();
69292
- var button_7 = child(div_5);
69293
- var node_15 = sibling(button_7, 2);
69294
- var consequent_11 = ($$anchor) => {
69295
- var button_8 = root_16();
69366
+ var node_15 = first_child(fragment_4);
69367
+ var consequent_14 = ($$anchor) => {
69368
+ var div_6 = root_16();
69369
+ var button_7 = child(div_6);
69370
+ var node_16 = sibling(button_7, 2);
69371
+ var consequent_12 = ($$anchor) => {
69372
+ var button_8 = root_17();
69296
69373
  delegated("click", button_8, () => {
69297
69374
  if (get(el).door) updateDoor(get(el).door.id, { swingDirection: get(el).door.swingDirection === "left" ? "right" : "left" });
69298
69375
  });
69299
69376
  append($$anchor, button_8);
69300
69377
  };
69301
- if_block(node_15, ($$render) => {
69302
- if (get(el).type === "door" && get(el).door) $$render(consequent_11);
69378
+ if_block(node_16, ($$render) => {
69379
+ if (get(el).type === "door" && get(el).door) $$render(consequent_12);
69303
69380
  });
69304
- var node_16 = sibling(node_15, 2);
69305
- var consequent_12 = ($$anchor) => {
69306
- var button_9 = root_17();
69381
+ var node_17 = sibling(node_16, 2);
69382
+ var consequent_13 = ($$anchor) => {
69383
+ var button_9 = root_18();
69307
69384
  delegated("click", button_9, () => {
69308
69385
  if (get(currentSelectedId)) {
69309
69386
  if (splitWall(get(currentSelectedId), .5)) selectedElementId.set(null);
@@ -69311,14 +69388,14 @@ function FloorPlanCanvas($$anchor, $$props) {
69311
69388
  });
69312
69389
  append($$anchor, button_9);
69313
69390
  };
69314
- if_block(node_16, ($$render) => {
69315
- if (get(el).type === "wall" && get(currentSelectedId) && get(currentSelectedIds).size === 0) $$render(consequent_12);
69391
+ if_block(node_17, ($$render) => {
69392
+ if (get(el).type === "wall" && get(currentSelectedId) && get(currentSelectedIds).size === 0) $$render(consequent_13);
69316
69393
  });
69317
- var button_10 = sibling(node_16, 4);
69318
- reset(div_5);
69394
+ var button_10 = sibling(node_17, 4);
69395
+ reset(div_6);
69319
69396
  template_effect(() => {
69320
69397
  var _$$get$pos$x;
69321
- return set_style(div_5, `left: ${(_$$get$pos$x = get(el).pos.x) !== null && _$$get$pos$x !== void 0 ? _$$get$pos$x : ""}px; top: ${get(el).pos.y - 44}px; transform: translateX(-50%);`);
69398
+ return set_style(div_6, `left: ${(_$$get$pos$x = get(el).pos.x) !== null && _$$get$pos$x !== void 0 ? _$$get$pos$x : ""}px; top: ${get(el).pos.y - 44}px; transform: translateX(-50%);`);
69322
69399
  });
69323
69400
  delegated("click", button_7, () => {
69324
69401
  if (!get(currentSelectedId) || !get(currentFloor)) return;
@@ -69341,72 +69418,72 @@ function FloorPlanCanvas($$anchor, $$props) {
69341
69418
  selectedElementId.set(null);
69342
69419
  }
69343
69420
  });
69344
- append($$anchor, div_5);
69421
+ append($$anchor, div_6);
69345
69422
  };
69346
- if_block(node_14, ($$render) => {
69347
- if (get(el)) $$render(consequent_13);
69423
+ if_block(node_15, ($$render) => {
69424
+ if (get(el)) $$render(consequent_14);
69348
69425
  });
69349
69426
  append($$anchor, fragment_4);
69350
69427
  };
69351
- if_block(node_13, ($$render) => {
69352
- if ((get(currentSelectedId) || get(currentSelectedIds).size > 0) && get(currentFloor) && get(currentTool) === "select") $$render(consequent_14);
69428
+ if_block(node_14, ($$render) => {
69429
+ if ((get(currentSelectedId) || get(currentSelectedIds).size > 0) && get(currentFloor) && get(currentTool) === "select") $$render(consequent_15);
69353
69430
  });
69354
- var node_17 = sibling(node_13, 2);
69355
- var consequent_15 = ($$anchor) => {
69356
- append($$anchor, root_18());
69357
- };
69358
- if_block(node_17, ($$render) => {
69359
- if (get(currentTool) === "wall" && get(wallStart)) $$render(consequent_15);
69360
- });
69361
- var node_18 = sibling(node_17, 2);
69431
+ var node_18 = sibling(node_14, 2);
69362
69432
  var consequent_16 = ($$anchor) => {
69363
- var div_7 = root_19();
69364
- var text_15 = child(div_7);
69365
- reset(div_7);
69366
- template_effect(() => {
69367
- var _$$get13;
69368
- return set_text(text_15, `Click to place ยท Scroll or R to rotate (${(_$$get13 = get(currentPlacingRotation)) !== null && _$$get13 !== void 0 ? _$$get13 : ""}ยฐ) ยท Esc
69369
- to cancel`);
69370
- });
69371
- append($$anchor, div_7);
69433
+ append($$anchor, root_19());
69372
69434
  };
69373
69435
  if_block(node_18, ($$render) => {
69374
- if (get(currentPlacingId) && get(currentTool) === "furniture") $$render(consequent_16);
69436
+ if (get(currentTool) === "wall" && get(wallStart)) $$render(consequent_16);
69375
69437
  });
69376
69438
  var node_19 = sibling(node_18, 2);
69377
69439
  var consequent_17 = ($$anchor) => {
69378
- append($$anchor, root_20());
69440
+ var div_8 = root_20();
69441
+ var text_16 = child(div_8);
69442
+ reset(div_8);
69443
+ template_effect(() => {
69444
+ var _$$get13;
69445
+ return set_text(text_16, `Click to place ยท Scroll or R to rotate (${(_$$get13 = get(currentPlacingRotation)) !== null && _$$get13 !== void 0 ? _$$get13 : ""}ยฐ) ยท Esc
69446
+ to cancel`);
69447
+ });
69448
+ append($$anchor, div_8);
69379
69449
  };
69380
69450
  if_block(node_19, ($$render) => {
69381
- if (get(measuring)) $$render(consequent_17);
69451
+ if (get(currentPlacingId) && get(currentTool) === "furniture") $$render(consequent_17);
69382
69452
  });
69383
69453
  var node_20 = sibling(node_19, 2);
69384
69454
  var consequent_18 = ($$anchor) => {
69385
69455
  append($$anchor, root_21());
69386
69456
  };
69387
69457
  if_block(node_20, ($$render) => {
69388
- if (get(textAnnotationMode)) $$render(consequent_18);
69458
+ if (get(measuring)) $$render(consequent_18);
69389
69459
  });
69390
69460
  var node_21 = sibling(node_20, 2);
69391
69461
  var consequent_19 = ($$anchor) => {
69392
- var div_10 = root_22();
69393
- var text_16 = child(div_10);
69394
- reset(div_10);
69395
- template_effect(() => set_text(text_16, `${get(annotationStart) ? "Click second point to create annotation" : "Click first point"} ยท N to exit ยท Esc to cancel`));
69396
- append($$anchor, div_10);
69462
+ append($$anchor, root_22());
69397
69463
  };
69398
69464
  if_block(node_21, ($$render) => {
69399
- if (get(annotating)) $$render(consequent_19);
69465
+ if (get(textAnnotationMode)) $$render(consequent_19);
69400
69466
  });
69401
- var div_11 = sibling(node_21, 2);
69402
- var button_11 = child(div_11);
69467
+ var node_22 = sibling(node_21, 2);
69468
+ var consequent_20 = ($$anchor) => {
69469
+ var div_11 = root_23();
69470
+ var text_17 = child(div_11);
69471
+ reset(div_11);
69472
+ template_effect(() => set_text(text_17, `${get(annotationStart) ? "Click second point to create annotation" : "Click first point"} ยท N to exit ยท Esc to cancel`));
69473
+ append($$anchor, div_11);
69474
+ };
69475
+ if_block(node_22, ($$render) => {
69476
+ if (get(annotating)) $$render(consequent_20);
69477
+ });
69478
+ var div_12 = sibling(node_22, 2);
69479
+ var button_11 = child(div_12);
69403
69480
  var button_12 = sibling(button_11, 2);
69404
- var text_17 = child(button_12);
69481
+ var text_18 = child(button_12);
69405
69482
  reset(button_12);
69406
69483
  var button_13 = sibling(button_12, 2);
69407
69484
  var button_14 = sibling(button_13, 4);
69408
- reset(div_11);
69409
- ContextMenu(sibling(div_11, 2), {
69485
+ reset(div_12);
69486
+ ContextMenu(sibling(div_12, 2), {
69410
69487
  get x() {
69411
69488
  return get(ctxMenuX);
69412
69489
  },
@@ -69440,12 +69517,12 @@ function FloorPlanCanvas($$anchor, $$props) {
69440
69517
  onaction: handleContextMenuAction
69441
69518
  });
69442
69519
  template_effect(($0, $1) => {
69443
- set_text(text_8, `Zoom: ${$0 !== null && $0 !== void 0 ? $0 : ""}%`);
69444
- set_text(text_9, `${get(showGrid) ? "โ–ฆ" : "โ–ข"} Grid`);
69445
- set_text(text_10, `${get(currentSnapToGrid) ? "๐Ÿงฒ" : "โ†”"} Snap`);
69446
- set_text(text_11, `${get(showFurniture) ? "๐Ÿช‘" : "๐Ÿ‘ป"} Furniture`);
69447
- set_text(text_12, `${get(showRulers) ? "๐Ÿ“" : "๐Ÿ“"} Rulers`);
69448
- set_text(text_17, `${$1 !== null && $1 !== void 0 ? $1 : ""}%`);
69520
+ set_text(text_9, `Zoom: ${$0 !== null && $0 !== void 0 ? $0 : ""}%`);
69521
+ set_text(text_10, `${get(showGrid) ? "โ–ฆ" : "โ–ข"} Grid`);
69522
+ set_text(text_11, `${get(currentSnapToGrid) ? "๐Ÿงฒ" : "โ†”"} Snap`);
69523
+ set_text(text_12, `${get(showFurniture) ? "๐Ÿช‘" : "๐Ÿ‘ป"} Furniture`);
69524
+ set_text(text_13, `${get(showRulers) ? "๐Ÿ“" : "๐Ÿ“"} Rulers`);
69525
+ set_text(text_18, `${$1 !== null && $1 !== void 0 ? $1 : ""}%`);
69449
69526
  }, [() => Math.round(get(zoom) * 100), () => Math.round(get(zoom) * 100)]);
69450
69527
  delegated("click", button, () => zoomToFit());
69451
69528
  delegated("click", button_1, () => set(showGrid, !get(showGrid)));
@@ -69477,8 +69554,8 @@ function FloorPlanCanvas($$anchor, $$props) {
69477
69554
  delegated("click", button_14, () => zoomToFit());
69478
69555
  append($$anchor, fragment);
69479
69556
  };
69480
- if_block(node, ($$render) => {
69481
- if (!$$props.viewOnly) $$render(consequent_20);
69557
+ if_block(node_1, ($$render) => {
69558
+ if (!$$props.viewOnly) $$render(consequent_21);
69482
69559
  });
69483
69560
  reset(div);
69484
69561
  template_effect(($0) => {
@@ -70481,7 +70558,11 @@ var DEFAULT_CONFIG = {
70481
70558
  floorMaxWidth: 600,
70482
70559
  floorMaxHeight: 400,
70483
70560
  heatmapEnabled: false,
70484
- heatmapMatrix: []
70561
+ heatmapMatrix: [],
70562
+ projectName: void 0,
70563
+ selectedCameraSerial: null,
70564
+ showCameraCones: false,
70565
+ showCameraLabels: true
70485
70566
  };
70486
70567
  function normalizeConfig(value) {
70487
70568
  if (!value || typeof value !== "object") return { ...DEFAULT_CONFIG };
@@ -70527,6 +70608,13 @@ function App($$anchor, $$props) {
70527
70608
  user_effect(() => {
70528
70609
  currentProject.set(normalizeFloorData(get(floorData)));
70529
70610
  });
70611
+ user_effect(() => {
70612
+ if (!get(config).projectName) return;
70613
+ currentProject.update((p) => p ? {
70614
+ ...p,
70615
+ name: get(config).projectName
70616
+ } : p);
70617
+ });
70530
70618
  onMount(() => {
70531
70619
  let saveTimeout;
70532
70620
  const unsub = currentProject.subscribe((p) => {
@@ -70626,6 +70714,22 @@ function App($$anchor, $$props) {
70626
70714
  var _$$get6;
70627
70715
  return (_$$get6 = get(config)) === null || _$$get6 === void 0 ? void 0 : _$$get6.heatmapEnabled;
70628
70716
  });
70717
+ let $5 = /* @__PURE__ */ user_derived(() => {
70718
+ var _$$get7;
70719
+ return (_$$get7 = get(config)) === null || _$$get7 === void 0 ? void 0 : _$$get7.projectName;
70720
+ });
70721
+ let $6 = /* @__PURE__ */ user_derived(() => {
70722
+ var _$$get8;
70723
+ return (_$$get8 = get(config)) === null || _$$get8 === void 0 ? void 0 : _$$get8.selectedCameraSerial;
70724
+ });
70725
+ let $7 = /* @__PURE__ */ user_derived(() => {
70726
+ var _$$get9;
70727
+ return (_$$get9 = get(config)) === null || _$$get9 === void 0 ? void 0 : _$$get9.showCameraCones;
70728
+ });
70729
+ let $8 = /* @__PURE__ */ user_derived(() => {
70730
+ var _$$get10;
70731
+ return (_$$get10 = get(config)) === null || _$$get10 === void 0 ? void 0 : _$$get10.showCameraLabels;
70732
+ });
70629
70733
  FloorPlanCanvas(node_3, {
70630
70734
  get viewOnly() {
70631
70735
  return get($0);
@@ -70641,6 +70745,18 @@ function App($$anchor, $$props) {
70641
70745
  },
70642
70746
  get heatmapEnabled() {
70643
70747
  return get($4);
70748
+ },
70749
+ get projectName() {
70750
+ return get($5);
70751
+ },
70752
+ get selectedCameraSerial() {
70753
+ return get($6);
70754
+ },
70755
+ get showCameraCones() {
70756
+ return get($7);
70757
+ },
70758
+ get showCameraLabels() {
70759
+ return get($8);
70644
70760
  }
70645
70761
  });
70646
70762
  }