floor-editor-ts 1.3.0 → 1.3.2

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.
@@ -6392,6 +6392,11 @@ function updateBackgroundImage(updates) {
6392
6392
  if (f.backgroundImage) Object.assign(f.backgroundImage, updates);
6393
6393
  });
6394
6394
  }
6395
+ var cameraThumbnailOpacity = writable(.65);
6396
+ function updateCameraThumbnailOpacity(opacity) {
6397
+ const clamped = Math.min(1, Math.max(.05, opacity));
6398
+ cameraThumbnailOpacity.set(clamped);
6399
+ }
6395
6400
  function addColumn(position, shape = "round") {
6396
6401
  const id = uid$1();
6397
6402
  mutate((f) => {
@@ -6989,19 +6994,34 @@ var DEFAULT_CONFIG = {
6989
6994
  showCameraLabels: true,
6990
6995
  cameraHeatmapMatrix: [],
6991
6996
  siteCameras: [],
6992
- cameraThumbnail: ""
6997
+ cameraThumbnail: "",
6998
+ cameraThumbnailOpacity: .65,
6999
+ canvasBackground: "#f8f9fa",
7000
+ floorPlateBackground: "#f8f9fa"
6993
7001
  };
6994
7002
  function normalizeConfig(value) {
6995
7003
  if (!value || typeof value !== "object") return { ...DEFAULT_CONFIG };
6996
7004
  const siteCameras = Array.isArray(value.siteCameras) ? value.siteCameras.filter((c) => !!c && typeof c === "object" && typeof c.serial === "string" && typeof c.name === "string") : DEFAULT_CONFIG.siteCameras;
6997
7005
  const image = typeof value.cameraThumbnail === "string" ? value.cameraThumbnail ? value.cameraThumbnail : DEFAULT_CONFIG.cameraThumbnail : DEFAULT_CONFIG.cameraThumbnail;
7006
+ const opacity = typeof value.cameraThumbnailOpacity === "number" && value.cameraThumbnailOpacity >= 0 && value.cameraThumbnailOpacity <= 1 ? value.cameraThumbnailOpacity : DEFAULT_CONFIG.cameraThumbnailOpacity;
7007
+ const canvasBackground = normalizeColor$1(value.canvasBackground, DEFAULT_CONFIG.canvasBackground);
7008
+ const floorPlateBackground = normalizeColor$1(value.floorPlateBackground, DEFAULT_CONFIG.floorPlateBackground);
6998
7009
  return {
6999
7010
  ...DEFAULT_CONFIG,
7000
7011
  ...value,
7001
7012
  siteCameras,
7002
- cameraThumbnail: image
7013
+ cameraThumbnail: image,
7014
+ cameraThumbnailOpacity: opacity,
7015
+ canvasBackground,
7016
+ floorPlateBackground
7003
7017
  };
7004
7018
  }
7019
+ function normalizeColor$1(value, fallback) {
7020
+ if (typeof value !== "string") return fallback;
7021
+ const trimmed = value.trim();
7022
+ if (/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(trimmed)) return trimmed;
7023
+ return fallback;
7024
+ }
7005
7025
  function normalizeFloorData(data) {
7006
7026
  if (!data || typeof data !== "object") return createDefaultProject();
7007
7027
  if (!Array.isArray(data.floors) || data.floors.length === 0) return createDefaultProject();
@@ -58101,9 +58121,9 @@ var root_17$2 = /* @__PURE__ */ from_html(`<div class="text-[10px] text-gray-400
58101
58121
  var root_18$2 = /* @__PURE__ */ from_html(`<button> </button>`);
58102
58122
  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>`);
58103
58123
  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);
58104
- 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>`);
58124
+ var root_22$1 = /* @__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>`);
58105
58125
  var root_23$2 = /* @__PURE__ */ from_html(`<span class="text-xs font-medium text-gray-600"> </span>`);
58106
- var root_21$1 = /* @__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>`);
58126
+ 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>`);
58107
58127
  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>`);
58108
58128
  var root_24$2 = /* @__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>`);
58109
58129
  var root_25$1 = /* @__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>`);
@@ -58761,7 +58781,7 @@ function BuildPanel($$anchor, $$props) {
58761
58781
  var div_29 = sibling(node_6, 2);
58762
58782
  each(div_29, 21, () => get(filtered), index$1, ($$anchor, item) => {
58763
58783
  const s = /* @__PURE__ */ user_derived(() => get(search).toLowerCase());
58764
- var button_23 = root_21$1();
58784
+ var button_23 = root_21$2();
58765
58785
  var span_10 = child(button_23);
58766
58786
  var text_22 = child(span_10, true);
58767
58787
  reset(span_10);
@@ -58771,7 +58791,7 @@ function BuildPanel($$anchor, $$props) {
58771
58791
  var node_7 = sibling(div_30, 2);
58772
58792
  var consequent_12 = ($$anchor) => {
58773
58793
  const idx = /* @__PURE__ */ user_derived(() => get(item).name.toLowerCase().indexOf(get(s)));
58774
- var span_11 = root_22$2();
58794
+ var span_11 = root_22$1();
58775
58795
  var text_23 = child(span_11, true);
58776
58796
  var mark = sibling(text_23);
58777
58797
  var text_24 = child(mark, true);
@@ -59354,17 +59374,18 @@ var root_12$1 = /* @__PURE__ */ from_html(`<label class="block"><span class="tex
59354
59374
  var root_15$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);
59355
59375
  var root_16 = /* @__PURE__ */ from_html(`<button></button>`);
59356
59376
  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);
59357
- var root_18$1 = /* @__PURE__ */ from_html(`<option> </option>`);
59358
- var root_19$1 = /* @__PURE__ */ from_html(`<button></button>`);
59359
- var root_22$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>`);
59360
- var root_20$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>`);
59361
- var root_17$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);
59362
- var root_23$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);
59363
- var root_25 = /* @__PURE__ */ from_html(`<button></button>`);
59364
- var root_26 = /* @__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>`);
59365
- var root_24$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);
59366
- var root_27 = /* @__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>`);
59367
- var root_28 = /* @__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>`);
59377
+ var root_18$1 = /* @__PURE__ */ from_html(`<label class="block pb-3 border-b border-gray-200"><span class="text-xs text-gray-500"> </span> <input type="range" min="0.05" max="1" step="0.05" class="w-full"/></label>`);
59378
+ var root_19$1 = /* @__PURE__ */ from_html(`<option> </option>`);
59379
+ var root_20$1 = /* @__PURE__ */ from_html(`<button></button>`);
59380
+ var root_23$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>`);
59381
+ var root_21$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>`);
59382
+ var root_17$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);
59383
+ var root_24$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);
59384
+ var root_26 = /* @__PURE__ */ from_html(`<button></button>`);
59385
+ var root_27 = /* @__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>`);
59386
+ var root_25 = /* @__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);
59387
+ var root_28 = /* @__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>`);
59388
+ var root_29 = /* @__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>`);
59368
59389
  var root$3 = /* @__PURE__ */ from_html(`<div data-properties-panel="" style="top: 48px; bottom: 36px;"><!> <!></div>`);
59369
59390
  function PropertiesPanel($$anchor, $$props) {
59370
59391
  push($$props, true);
@@ -59402,7 +59423,7 @@ function PropertiesPanel($$anchor, $$props) {
59402
59423
  function unitLabel() {
59403
59424
  return get(settings).units === "imperial" ? "in" : "cm";
59404
59425
  }
59405
- let is3D = prop($$props, "is3D", 3, false), siteCameras = prop($$props, "siteCameras", 19, () => []);
59426
+ let is3D = prop($$props, "is3D", 3, false), siteCameras = prop($$props, "siteCameras", 19, () => []), cameraThumbnail = prop($$props, "cameraThumbnail", 3, "");
59406
59427
  let wallSideTab = /* @__PURE__ */ state("interior");
59407
59428
  let selectedWall = /* @__PURE__ */ user_derived(() => {
59408
59429
  var _$$get$walls$find, _$$get;
@@ -59436,17 +59457,25 @@ function PropertiesPanel($$anchor, $$props) {
59436
59457
  var _$$get8;
59437
59458
  return !!((_$$get8 = get(floor)) === null || _$$get8 === void 0 ? void 0 : _$$get8.backgroundImage);
59438
59459
  });
59460
+ let hasCameraThumbnailOverlay = /* @__PURE__ */ user_derived(() => {
59461
+ var _cameraThumbnail, _$$get9;
59462
+ return !!((_cameraThumbnail = cameraThumbnail()) === null || _cameraThumbnail === void 0 ? void 0 : _cameraThumbnail.trim()) && !((_$$get9 = get(floor)) === null || _$$get9 === void 0 ? void 0 : _$$get9.backgroundImage);
59463
+ });
59464
+ let thumbOpacity = /* @__PURE__ */ state(.65);
59465
+ cameraThumbnailOpacity.subscribe((v) => {
59466
+ set(thumbOpacity, v, true);
59467
+ });
59439
59468
  let selectedRoom = /* @__PURE__ */ user_derived(() => {
59440
- var _ref, _$$get$rooms$find, _$$get9;
59441
- return (_ref = (_$$get$rooms$find = (_$$get9 = get(floor)) === null || _$$get9 === void 0 || (_$$get9 = _$$get9.rooms) === null || _$$get9 === void 0 ? void 0 : _$$get9.find((r) => r.id === get(selRoomId))) !== null && _$$get$rooms$find !== void 0 ? _$$get$rooms$find : get(detectedRooms).find((r) => r.id === get(selRoomId))) !== null && _ref !== void 0 ? _ref : null;
59469
+ var _ref, _$$get$rooms$find, _$$get10;
59470
+ return (_ref = (_$$get$rooms$find = (_$$get10 = get(floor)) === null || _$$get10 === void 0 || (_$$get10 = _$$get10.rooms) === null || _$$get10 === void 0 ? void 0 : _$$get10.find((r) => r.id === get(selRoomId))) !== null && _$$get$rooms$find !== void 0 ? _$$get$rooms$find : get(detectedRooms).find((r) => r.id === get(selRoomId))) !== null && _ref !== void 0 ? _ref : null;
59442
59471
  });
59443
59472
  let selectedDoorWall = /* @__PURE__ */ user_derived(() => {
59444
- var _ref2, _$$get10;
59445
- return (_ref2 = get(selectedDoor) && ((_$$get10 = get(floor)) === null || _$$get10 === void 0 || (_$$get10 = _$$get10.walls) === null || _$$get10 === void 0 ? void 0 : _$$get10.find((w) => w.id === get(selectedDoor).wallId))) !== null && _ref2 !== void 0 ? _ref2 : null;
59473
+ var _ref2, _$$get11;
59474
+ return (_ref2 = get(selectedDoor) && ((_$$get11 = get(floor)) === null || _$$get11 === void 0 || (_$$get11 = _$$get11.walls) === null || _$$get11 === void 0 ? void 0 : _$$get11.find((w) => w.id === get(selectedDoor).wallId))) !== null && _ref2 !== void 0 ? _ref2 : null;
59446
59475
  });
59447
59476
  let selectedWindowWall = /* @__PURE__ */ user_derived(() => {
59448
- var _ref3, _$$get11;
59449
- return (_ref3 = get(selectedWindow) && ((_$$get11 = get(floor)) === null || _$$get11 === void 0 || (_$$get11 = _$$get11.walls) === null || _$$get11 === void 0 ? void 0 : _$$get11.find((w) => w.id === get(selectedWindow).wallId))) !== null && _ref3 !== void 0 ? _ref3 : null;
59477
+ var _ref3, _$$get12;
59478
+ return (_ref3 = get(selectedWindow) && ((_$$get12 = get(floor)) === null || _$$get12 === void 0 || (_$$get12 = _$$get12.walls) === null || _$$get12 === void 0 ? void 0 : _$$get12.find((w) => w.id === get(selectedWindow).wallId))) !== null && _ref3 !== void 0 ? _ref3 : null;
59450
59479
  });
59451
59480
  function calcWallLength(wall) {
59452
59481
  if (wall.curvePoint) {
@@ -59543,9 +59572,9 @@ function PropertiesPanel($$anchor, $$props) {
59543
59572
  }
59544
59573
  const useSiteCameraSelect = /* @__PURE__ */ user_derived(() => siteCameras().length > 0);
59545
59574
  const usedCameraSerials = /* @__PURE__ */ user_derived(() => {
59546
- var _$$get12;
59575
+ var _$$get13;
59547
59576
  const used = /* @__PURE__ */ new Set();
59548
- if (!((_$$get12 = get(floor)) === null || _$$get12 === void 0 ? void 0 : _$$get12.furniture) || !get(selectedFurniture)) return used;
59577
+ if (!((_$$get13 = get(floor)) === null || _$$get13 === void 0 ? void 0 : _$$get13.furniture) || !get(selectedFurniture)) return used;
59549
59578
  for (const item of get(floor).furniture) {
59550
59579
  if (item.catalogId !== "camera" || item.id === get(selectedFurniture).id) continue;
59551
59580
  if (item.serial) used.add(item.serial);
@@ -60132,7 +60161,7 @@ function PropertiesPanel($$anchor, $$props) {
60132
60161
  reset(label_11);
60133
60162
  reset(div_11);
60134
60163
  template_effect(($0, $1, $2, $3, $4, $5, $6, $7) => {
60135
- var _$$get13, _$$get14, _$$get15, _$$get16;
60164
+ var _$$get14, _$$get15, _$$get16, _$$get17;
60136
60165
  set_text(text_6, `Width (${$0 !== null && $0 !== void 0 ? $0 : ""})`);
60137
60166
  set_value(input_5, $1);
60138
60167
  set_text(text_7, `Distance from A (${$2 !== null && $2 !== void 0 ? $2 : ""})`);
@@ -60145,10 +60174,10 @@ function PropertiesPanel($$anchor, $$props) {
60145
60174
  var _select$__value;
60146
60175
  select.value = (_select$__value = select.__value = get(selectedDoor).type) !== null && _select$__value !== void 0 ? _select$__value : "", select_option(select, get(selectedDoor).type);
60147
60176
  }
60148
- set_class(button_9, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${((_$$get13 = get(selectedDoor)) === null || _$$get13 === void 0 ? void 0 : _$$get13.swingDirection) === "left" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60149
- set_class(button_10, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${((_$$get14 = get(selectedDoor)) === null || _$$get14 === void 0 ? void 0 : _$$get14.swingDirection) === "right" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60150
- set_class(button_11, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${!((_$$get15 = get(selectedDoor)) === null || _$$get15 === void 0 ? void 0 : _$$get15.flipSide) ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60151
- set_class(button_12, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${((_$$get16 = get(selectedDoor)) === null || _$$get16 === void 0 ? void 0 : _$$get16.flipSide) ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60177
+ set_class(button_9, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${((_$$get14 = get(selectedDoor)) === null || _$$get14 === void 0 ? void 0 : _$$get14.swingDirection) === "left" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60178
+ set_class(button_10, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${((_$$get15 = get(selectedDoor)) === null || _$$get15 === void 0 ? void 0 : _$$get15.swingDirection) === "right" ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60179
+ set_class(button_11, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${!((_$$get16 = get(selectedDoor)) === null || _$$get16 === void 0 ? void 0 : _$$get16.flipSide) ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60180
+ set_class(button_12, 1, `flex-1 px-2 py-1.5 border rounded text-sm transition-colors ${((_$$get17 = get(selectedDoor)) === null || _$$get17 === void 0 ? void 0 : _$$get17.flipSide) ? "bg-blue-100 border-blue-400 text-blue-700" : "border-gray-200 hover:bg-gray-50"}`);
60152
60181
  }, [
60153
60182
  () => unitLabel(),
60154
60183
  () => displayValue(get(selectedDoor).width),
@@ -60540,19 +60569,38 @@ function PropertiesPanel($$anchor, $$props) {
60540
60569
  delegated("click", button_19, resetFurnitureDefaults);
60541
60570
  append($$anchor, fragment_3);
60542
60571
  };
60543
- var consequent_9 = ($$anchor) => {
60572
+ var consequent_10 = ($$anchor) => {
60544
60573
  var fragment_7 = root_17$1();
60545
60574
  var div_21 = sibling(first_child(fragment_7), 2);
60546
- var label_26 = child(div_21);
60547
- var select_4 = sibling(child(label_26), 2);
60575
+ var node_8 = child(div_21);
60576
+ var consequent_8 = ($$anchor) => {
60577
+ var label_26 = root_18$1();
60578
+ var span_19 = child(label_26);
60579
+ var text_23 = child(span_19);
60580
+ reset(span_19);
60581
+ var input_21 = sibling(span_19, 2);
60582
+ remove_input_defaults(input_21);
60583
+ reset(label_26);
60584
+ template_effect(($0) => {
60585
+ set_text(text_23, `Camera Thumbnail Opacity (${$0 !== null && $0 !== void 0 ? $0 : ""}%)`);
60586
+ set_value(input_21, get(thumbOpacity));
60587
+ }, [() => Math.round(get(thumbOpacity) * 100)]);
60588
+ delegated("input", input_21, (e) => updateCameraThumbnailOpacity(Number(e.target.value)));
60589
+ append($$anchor, label_26);
60590
+ };
60591
+ if_block(node_8, ($$render) => {
60592
+ if (get(hasCameraThumbnailOverlay)) $$render(consequent_8);
60593
+ });
60594
+ var label_27 = sibling(node_8, 2);
60595
+ var select_4 = sibling(child(label_27), 2);
60548
60596
  each(select_4, 21, () => roomTypes, index$1, ($$anchor, rt) => {
60549
- var option_21 = root_18$1();
60550
- var text_23 = child(option_21);
60597
+ var option_21 = root_19$1();
60598
+ var text_24 = child(option_21);
60551
60599
  reset(option_21);
60552
60600
  var option_21_value = {};
60553
60601
  template_effect(() => {
60554
60602
  var _$$get$icon, _$$get$label;
60555
- set_text(text_23, `${(_$$get$icon = get(rt).icon) !== null && _$$get$icon !== void 0 ? _$$get$icon : ""} ${(_$$get$label = get(rt).label) !== null && _$$get$label !== void 0 ? _$$get$label : ""}`);
60603
+ set_text(text_24, `${(_$$get$icon = get(rt).icon) !== null && _$$get$icon !== void 0 ? _$$get$icon : ""} ${(_$$get$label = get(rt).label) !== null && _$$get$label !== void 0 ? _$$get$label : ""}`);
60556
60604
  if (option_21_value !== (option_21_value = get(rt).id)) {
60557
60605
  var _option_21$__value;
60558
60606
  option_21.value = (_option_21$__value = option_21.__value = get(rt).id) !== null && _option_21$__value !== void 0 ? _option_21$__value : "";
@@ -60563,13 +60611,13 @@ function PropertiesPanel($$anchor, $$props) {
60563
60611
  reset(select_4);
60564
60612
  var select_4_value;
60565
60613
  init_select(select_4);
60566
- reset(label_26);
60567
- var label_27 = sibling(label_26, 2);
60568
- var input_21 = sibling(child(label_27), 2);
60569
- remove_input_defaults(input_21);
60570
60614
  reset(label_27);
60571
60615
  var label_28 = sibling(label_27, 2);
60572
- var select_5 = sibling(child(label_28), 2);
60616
+ var input_22 = sibling(child(label_28), 2);
60617
+ remove_input_defaults(input_22);
60618
+ reset(label_28);
60619
+ var label_29 = sibling(label_28, 2);
60620
+ var select_5 = sibling(child(label_29), 2);
60573
60621
  var option_22 = child(select_5);
60574
60622
  option_22.value = option_22.__value = "indoor";
60575
60623
  var option_23 = sibling(option_22);
@@ -60581,16 +60629,16 @@ function PropertiesPanel($$anchor, $$props) {
60581
60629
  reset(select_5);
60582
60630
  var select_5_value;
60583
60631
  init_select(select_5);
60584
- reset(label_28);
60585
- var div_22 = sibling(label_28, 2);
60632
+ reset(label_29);
60633
+ var div_22 = sibling(label_29, 2);
60586
60634
  var p_1 = sibling(child(div_22), 2);
60587
- var text_24 = child(p_1, true);
60635
+ var text_25 = child(p_1, true);
60588
60636
  reset(p_1);
60589
60637
  reset(div_22);
60590
60638
  var div_23 = sibling(div_22, 2);
60591
60639
  var div_24 = sibling(child(div_23), 2);
60592
60640
  each(div_24, 21, () => roomColorPresets, index$1, ($$anchor, preset) => {
60593
- var button_20 = root_19$1();
60641
+ var button_20 = root_20$1();
60594
60642
  template_effect(() => {
60595
60643
  var _$$get$color5;
60596
60644
  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"}`);
@@ -60602,50 +60650,50 @@ function PropertiesPanel($$anchor, $$props) {
60602
60650
  });
60603
60651
  reset(div_24);
60604
60652
  var div_25 = sibling(div_24, 2);
60605
- var input_22 = sibling(child(div_25), 2);
60606
- remove_input_defaults(input_22);
60653
+ var input_23 = sibling(child(div_25), 2);
60654
+ remove_input_defaults(input_23);
60607
60655
  reset(div_25);
60608
60656
  reset(div_23);
60609
60657
  var div_26 = sibling(div_23, 2);
60610
60658
  var div_27 = sibling(child(div_26), 2);
60611
60659
  each(div_27, 21, () => textureGroups, index$1, ($$anchor, group) => {
60612
- var div_28 = root_20$1();
60613
- var span_19 = child(div_28);
60614
- var text_25 = child(span_19, true);
60615
- reset(span_19);
60616
- var div_29 = sibling(span_19, 2);
60660
+ var div_28 = root_21$1();
60661
+ var span_20 = child(div_28);
60662
+ var text_26 = child(span_20, true);
60663
+ reset(span_20);
60664
+ var div_29 = sibling(span_20, 2);
60617
60665
  each(div_29, 21, () => get(group).ids, index$1, ($$anchor, matId) => {
60618
60666
  const mat = /* @__PURE__ */ user_derived(() => floorMaterials.find((m) => m.id === get(matId)));
60619
60667
  var fragment_8 = comment();
60620
- var node_8 = first_child(fragment_8);
60621
- var consequent_8 = ($$anchor) => {
60668
+ var node_9 = first_child(fragment_8);
60669
+ var consequent_9 = ($$anchor) => {
60622
60670
  const texPath = /* @__PURE__ */ user_derived(() => {
60623
60671
  var _floorTexPaths$$$get$;
60624
60672
  return (_floorTexPaths$$$get$ = floorTexPaths[get(mat).id]) !== null && _floorTexPaths$$$get$ !== void 0 ? _floorTexPaths$$$get$ : "";
60625
60673
  });
60626
- var button_21 = root_22$1();
60674
+ var button_21 = root_23$1();
60627
60675
  var div_30 = child(button_21);
60628
60676
  var div_31 = sibling(div_30, 2);
60629
- var text_26 = child(div_31, true);
60677
+ var text_27 = child(div_31, true);
60630
60678
  reset(div_31);
60631
60679
  reset(button_21);
60632
60680
  template_effect(() => {
60633
60681
  set_class(button_21, 1, `p-1 rounded-lg border-2 hover:border-gray-300 transition-all text-xs ${get(selectedRoom).floorTexture === get(mat).id ? "border-blue-500 ring-2 ring-blue-200 shadow-sm" : "border-gray-200"}`);
60634
60682
  set_attribute(button_21, "title", get(mat).name);
60635
60683
  set_style(div_30, get(texPath) ? `background-image: url(${get(texPath)}); background-size: cover; background-position: center;` : `background-color: ${get(mat).color}`);
60636
- set_text(text_26, get(mat).name);
60684
+ set_text(text_27, get(mat).name);
60637
60685
  });
60638
60686
  delegated("click", button_21, () => onRoomFloor(get(mat).id));
60639
60687
  append($$anchor, button_21);
60640
60688
  };
60641
- if_block(node_8, ($$render) => {
60642
- if (get(mat)) $$render(consequent_8);
60689
+ if_block(node_9, ($$render) => {
60690
+ if (get(mat)) $$render(consequent_9);
60643
60691
  });
60644
60692
  append($$anchor, fragment_8);
60645
60693
  });
60646
60694
  reset(div_29);
60647
60695
  reset(div_28);
60648
- template_effect(() => set_text(text_25, get(group).label));
60696
+ template_effect(() => set_text(text_26, get(group).label));
60649
60697
  append($$anchor, div_28);
60650
60698
  });
60651
60699
  reset(div_27);
@@ -60657,16 +60705,16 @@ function PropertiesPanel($$anchor, $$props) {
60657
60705
  var _select_4$__value;
60658
60706
  select_4.value = (_select_4$__value = select_4.__value = get(selectedRoomType)) !== null && _select_4$__value !== void 0 ? _select_4$__value : "", select_option(select_4, get(selectedRoomType));
60659
60707
  }
60660
- set_value(input_21, get(selectedRoom).name);
60708
+ set_value(input_22, get(selectedRoom).name);
60661
60709
  if (select_5_value !== (select_5_value = (_$$get$roomType = get(selectedRoom).roomType) !== null && _$$get$roomType !== void 0 ? _$$get$roomType : "indoor")) {
60662
60710
  var _select_5$__value, _$$get$roomType2, _$$get$roomType3;
60663
60711
  select_5.value = (_select_5$__value = select_5.__value = (_$$get$roomType2 = get(selectedRoom).roomType) !== null && _$$get$roomType2 !== void 0 ? _$$get$roomType2 : "indoor") !== null && _select_5$__value !== void 0 ? _select_5$__value : "", select_option(select_5, (_$$get$roomType3 = get(selectedRoom).roomType) !== null && _$$get$roomType3 !== void 0 ? _$$get$roomType3 : "indoor");
60664
60712
  }
60665
- set_text(text_24, $0);
60666
- set_value(input_22, (_$$get$color6 = get(selectedRoom).color) !== null && _$$get$color6 !== void 0 ? _$$get$color6 : "#ffffff");
60713
+ set_text(text_25, $0);
60714
+ set_value(input_23, (_$$get$color6 = get(selectedRoom).color) !== null && _$$get$color6 !== void 0 ? _$$get$color6 : "#ffffff");
60667
60715
  }, [() => formatArea(get(selectedRoom).area, get(settings).units)]);
60668
60716
  delegated("change", select_4, onRoomType);
60669
- delegated("input", input_21, onRoomName);
60717
+ delegated("input", input_22, onRoomName);
60670
60718
  delegated("change", select_5, (e) => {
60671
60719
  if (get(selectedRoom)) {
60672
60720
  const v = e.target.value;
@@ -60674,14 +60722,14 @@ function PropertiesPanel($$anchor, $$props) {
60674
60722
  updateDetectedRoom(get(selectedRoom).id, { roomType: v });
60675
60723
  }
60676
60724
  });
60677
- delegated("input", input_22, (e) => onRoomColor(e.target.value));
60725
+ delegated("input", input_23, (e) => onRoomColor(e.target.value));
60678
60726
  append($$anchor, fragment_7);
60679
60727
  };
60680
- var consequent_10 = ($$anchor) => {
60681
- var fragment_9 = root_23$1();
60728
+ var consequent_11 = ($$anchor) => {
60729
+ var fragment_9 = root_24$1();
60682
60730
  var div_32 = sibling(first_child(fragment_9), 2);
60683
- var label_29 = child(div_32);
60684
- var select_6 = sibling(child(label_29), 2);
60731
+ var label_30 = child(div_32);
60732
+ var select_6 = sibling(child(label_30), 2);
60685
60733
  var option_26 = child(select_6);
60686
60734
  option_26.value = option_26.__value = "straight";
60687
60735
  var option_27 = sibling(option_26);
@@ -60693,13 +60741,6 @@ function PropertiesPanel($$anchor, $$props) {
60693
60741
  reset(select_6);
60694
60742
  var select_6_value;
60695
60743
  init_select(select_6);
60696
- reset(label_29);
60697
- var label_30 = sibling(label_29, 2);
60698
- var span_20 = child(label_30);
60699
- var text_27 = child(span_20);
60700
- reset(span_20);
60701
- var input_23 = sibling(span_20, 2);
60702
- remove_input_defaults(input_23);
60703
60744
  reset(label_30);
60704
60745
  var label_31 = sibling(label_30, 2);
60705
60746
  var span_21 = child(label_31);
@@ -60709,33 +60750,40 @@ function PropertiesPanel($$anchor, $$props) {
60709
60750
  remove_input_defaults(input_24);
60710
60751
  reset(label_31);
60711
60752
  var label_32 = sibling(label_31, 2);
60712
- var input_25 = sibling(child(label_32), 2);
60753
+ var span_22 = child(label_32);
60754
+ var text_29 = child(span_22);
60755
+ reset(span_22);
60756
+ var input_25 = sibling(span_22, 2);
60713
60757
  remove_input_defaults(input_25);
60714
60758
  reset(label_32);
60715
60759
  var label_33 = sibling(label_32, 2);
60716
- var div_33 = sibling(child(label_33), 2);
60760
+ var input_26 = sibling(child(label_33), 2);
60761
+ remove_input_defaults(input_26);
60762
+ reset(label_33);
60763
+ var label_34 = sibling(label_33, 2);
60764
+ var div_33 = sibling(child(label_34), 2);
60717
60765
  var button_22 = child(div_33);
60718
60766
  var button_23 = sibling(button_22, 2);
60719
60767
  reset(div_33);
60720
- reset(label_33);
60721
- var label_34 = sibling(label_33, 2);
60722
- var input_26 = sibling(child(label_34), 2);
60723
- remove_input_defaults(input_26);
60724
60768
  reset(label_34);
60769
+ var label_35 = sibling(label_34, 2);
60770
+ var input_27 = sibling(child(label_35), 2);
60771
+ remove_input_defaults(input_27);
60772
+ reset(label_35);
60725
60773
  reset(div_32);
60726
60774
  template_effect(($0, $1, $2, $3) => {
60727
60775
  if (select_6_value !== (select_6_value = get(selectedStair).stairType || "straight")) {
60728
60776
  var _select_6$__value;
60729
60777
  select_6.value = (_select_6$__value = select_6.__value = get(selectedStair).stairType || "straight") !== null && _select_6$__value !== void 0 ? _select_6$__value : "", select_option(select_6, get(selectedStair).stairType || "straight");
60730
60778
  }
60731
- set_text(text_27, `Width (${$0 !== null && $0 !== void 0 ? $0 : ""})`);
60732
- set_value(input_23, $1);
60733
- set_text(text_28, `Depth (${$2 !== null && $2 !== void 0 ? $2 : ""})`);
60734
- set_value(input_24, $3);
60735
- set_value(input_25, get(selectedStair).riserCount);
60779
+ set_text(text_28, `Width (${$0 !== null && $0 !== void 0 ? $0 : ""})`);
60780
+ set_value(input_24, $1);
60781
+ set_text(text_29, `Depth (${$2 !== null && $2 !== void 0 ? $2 : ""})`);
60782
+ set_value(input_25, $3);
60783
+ set_value(input_26, get(selectedStair).riserCount);
60736
60784
  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"}`);
60737
60785
  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"}`);
60738
- set_value(input_26, get(selectedStair).rotation);
60786
+ set_value(input_27, get(selectedStair).rotation);
60739
60787
  }, [
60740
60788
  () => unitLabel(),
60741
60789
  () => displayValue(get(selectedStair).width),
@@ -60743,29 +60791,22 @@ function PropertiesPanel($$anchor, $$props) {
60743
60791
  () => displayValue(get(selectedStair).depth)
60744
60792
  ]);
60745
60793
  delegated("change", select_6, (e) => updateStair(get(selectedStair).id, { stairType: e.target.value }));
60746
- delegated("input", input_23, (e) => updateStair(get(selectedStair).id, { width: inputToCm(Number(e.target.value)) }));
60747
- delegated("input", input_24, (e) => updateStair(get(selectedStair).id, { depth: inputToCm(Number(e.target.value)) }));
60748
- delegated("input", input_25, (e) => updateStair(get(selectedStair).id, { riserCount: Number(e.target.value) }));
60794
+ delegated("input", input_24, (e) => updateStair(get(selectedStair).id, { width: inputToCm(Number(e.target.value)) }));
60795
+ delegated("input", input_25, (e) => updateStair(get(selectedStair).id, { depth: inputToCm(Number(e.target.value)) }));
60796
+ delegated("input", input_26, (e) => updateStair(get(selectedStair).id, { riserCount: Number(e.target.value) }));
60749
60797
  delegated("click", button_22, () => updateStair(get(selectedStair).id, { direction: "up" }));
60750
60798
  delegated("click", button_23, () => updateStair(get(selectedStair).id, { direction: "down" }));
60751
- delegated("input", input_26, (e) => updateStair(get(selectedStair).id, { rotation: Number(e.target.value) }));
60799
+ delegated("input", input_27, (e) => updateStair(get(selectedStair).id, { rotation: Number(e.target.value) }));
60752
60800
  append($$anchor, fragment_9);
60753
60801
  };
60754
- var consequent_12 = ($$anchor) => {
60755
- var fragment_10 = root_24$1();
60802
+ var consequent_13 = ($$anchor) => {
60803
+ var fragment_10 = root_25();
60756
60804
  var div_34 = sibling(first_child(fragment_10), 2);
60757
- var label_35 = child(div_34);
60758
- var div_35 = sibling(child(label_35), 2);
60805
+ var label_36 = child(div_34);
60806
+ var div_35 = sibling(child(label_36), 2);
60759
60807
  var button_24 = child(div_35);
60760
60808
  var button_25 = sibling(button_24, 2);
60761
60809
  reset(div_35);
60762
- reset(label_35);
60763
- var label_36 = sibling(label_35, 2);
60764
- var span_22 = child(label_36);
60765
- var text_29 = child(span_22);
60766
- reset(span_22);
60767
- var input_27 = sibling(span_22, 2);
60768
- remove_input_defaults(input_27);
60769
60810
  reset(label_36);
60770
60811
  var label_37 = sibling(label_36, 2);
60771
60812
  var span_23 = child(label_37);
@@ -60774,10 +60815,17 @@ function PropertiesPanel($$anchor, $$props) {
60774
60815
  var input_28 = sibling(span_23, 2);
60775
60816
  remove_input_defaults(input_28);
60776
60817
  reset(label_37);
60777
- var div_36 = sibling(label_37, 2);
60818
+ var label_38 = sibling(label_37, 2);
60819
+ var span_24 = child(label_38);
60820
+ var text_31 = child(span_24);
60821
+ reset(span_24);
60822
+ var input_29 = sibling(span_24, 2);
60823
+ remove_input_defaults(input_29);
60824
+ reset(label_38);
60825
+ var div_36 = sibling(label_38, 2);
60778
60826
  var div_37 = sibling(child(div_36), 2);
60779
60827
  each(div_37, 21, () => columnColorPresets, index$1, ($$anchor, preset) => {
60780
- var button_26 = root_25();
60828
+ var button_26 = root_26();
60781
60829
  template_effect(() => {
60782
60830
  var _$$get$color7;
60783
60831
  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"}`);
@@ -60789,32 +60837,32 @@ function PropertiesPanel($$anchor, $$props) {
60789
60837
  });
60790
60838
  reset(div_37);
60791
60839
  var div_38 = sibling(div_37, 2);
60792
- var input_29 = sibling(child(div_38), 2);
60793
- remove_input_defaults(input_29);
60840
+ var input_30 = sibling(child(div_38), 2);
60841
+ remove_input_defaults(input_30);
60794
60842
  reset(div_38);
60795
60843
  reset(div_36);
60796
- var node_9 = sibling(div_36, 2);
60797
- var consequent_11 = ($$anchor) => {
60798
- var label_38 = root_26();
60799
- var input_30 = sibling(child(label_38), 2);
60800
- remove_input_defaults(input_30);
60801
- reset(label_38);
60802
- template_effect(() => set_value(input_30, get(selectedColumn).rotation));
60803
- delegated("input", input_30, (e) => updateColumn(get(selectedColumn).id, { rotation: Number(e.target.value) }));
60804
- append($$anchor, label_38);
60844
+ var node_10 = sibling(div_36, 2);
60845
+ var consequent_12 = ($$anchor) => {
60846
+ var label_39 = root_27();
60847
+ var input_31 = sibling(child(label_39), 2);
60848
+ remove_input_defaults(input_31);
60849
+ reset(label_39);
60850
+ template_effect(() => set_value(input_31, get(selectedColumn).rotation));
60851
+ delegated("input", input_31, (e) => updateColumn(get(selectedColumn).id, { rotation: Number(e.target.value) }));
60852
+ append($$anchor, label_39);
60805
60853
  };
60806
- if_block(node_9, ($$render) => {
60807
- if (get(selectedColumn).shape === "square") $$render(consequent_11);
60854
+ if_block(node_10, ($$render) => {
60855
+ if (get(selectedColumn).shape === "square") $$render(consequent_12);
60808
60856
  });
60809
60857
  reset(div_34);
60810
60858
  template_effect(($0, $1, $2, $3) => {
60811
60859
  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"}`);
60812
60860
  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"}`);
60813
- set_text(text_29, `${get(selectedColumn).shape === "round" ? "Diameter" : "Side Length"} (${$0 !== null && $0 !== void 0 ? $0 : ""})`);
60814
- set_value(input_27, $1);
60815
- set_text(text_30, `Height (${$2 !== null && $2 !== void 0 ? $2 : ""})`);
60816
- set_value(input_28, $3);
60817
- set_value(input_29, get(selectedColumn).color);
60861
+ set_text(text_30, `${get(selectedColumn).shape === "round" ? "Diameter" : "Side Length"} (${$0 !== null && $0 !== void 0 ? $0 : ""})`);
60862
+ set_value(input_28, $1);
60863
+ set_text(text_31, `Height (${$2 !== null && $2 !== void 0 ? $2 : ""})`);
60864
+ set_value(input_29, $3);
60865
+ set_value(input_30, get(selectedColumn).color);
60818
60866
  }, [
60819
60867
  () => unitLabel(),
60820
60868
  () => displayValue(get(selectedColumn).diameter),
@@ -60823,33 +60871,29 @@ function PropertiesPanel($$anchor, $$props) {
60823
60871
  ]);
60824
60872
  delegated("click", button_24, () => updateColumn(get(selectedColumn).id, { shape: "round" }));
60825
60873
  delegated("click", button_25, () => updateColumn(get(selectedColumn).id, { shape: "square" }));
60826
- delegated("input", input_27, (e) => updateColumn(get(selectedColumn).id, { diameter: inputToCm(Number(e.target.value)) }));
60827
- delegated("input", input_28, (e) => updateColumn(get(selectedColumn).id, { height: inputToCm(Number(e.target.value)) }));
60828
- delegated("input", input_29, (e) => updateColumn(get(selectedColumn).id, { color: e.target.value }));
60874
+ delegated("input", input_28, (e) => updateColumn(get(selectedColumn).id, { diameter: inputToCm(Number(e.target.value)) }));
60875
+ delegated("input", input_29, (e) => updateColumn(get(selectedColumn).id, { height: inputToCm(Number(e.target.value)) }));
60876
+ delegated("input", input_30, (e) => updateColumn(get(selectedColumn).id, { color: e.target.value }));
60829
60877
  append($$anchor, fragment_10);
60830
60878
  };
60831
- var consequent_13 = ($$anchor) => {
60832
- var div_39 = root_27();
60833
- var label_39 = sibling(child(div_39), 2);
60834
- var input_31 = sibling(child(label_39), 2);
60835
- remove_input_defaults(input_31);
60836
- reset(label_39);
60837
- var label_40 = sibling(label_39, 2);
60879
+ var consequent_14 = ($$anchor) => {
60880
+ var div_39 = root_28();
60881
+ var label_40 = sibling(child(div_39), 2);
60838
60882
  var input_32 = sibling(child(label_40), 2);
60839
60883
  remove_input_defaults(input_32);
60840
60884
  reset(label_40);
60841
60885
  var label_41 = sibling(label_40, 2);
60842
- var div_40 = sibling(child(label_41), 2);
60843
- var input_33 = child(div_40);
60886
+ var input_33 = sibling(child(label_41), 2);
60844
60887
  remove_input_defaults(input_33);
60845
- var span_24 = sibling(input_33, 2);
60846
- var text_31 = child(span_24, true);
60847
- reset(span_24);
60848
- reset(div_40);
60849
60888
  reset(label_41);
60850
60889
  var label_42 = sibling(label_41, 2);
60851
- var input_34 = sibling(child(label_42), 2);
60890
+ var div_40 = sibling(child(label_42), 2);
60891
+ var input_34 = child(div_40);
60852
60892
  remove_input_defaults(input_34);
60893
+ var span_25 = sibling(input_34, 2);
60894
+ var text_32 = child(span_25, true);
60895
+ reset(span_25);
60896
+ reset(div_40);
60853
60897
  reset(label_42);
60854
60898
  var label_43 = sibling(label_42, 2);
60855
60899
  var input_35 = sibling(child(label_43), 2);
@@ -60859,22 +60903,26 @@ function PropertiesPanel($$anchor, $$props) {
60859
60903
  var input_36 = sibling(child(label_44), 2);
60860
60904
  remove_input_defaults(input_36);
60861
60905
  reset(label_44);
60906
+ var label_45 = sibling(label_44, 2);
60907
+ var input_37 = sibling(child(label_45), 2);
60908
+ remove_input_defaults(input_37);
60909
+ reset(label_45);
60862
60910
  reset(div_39);
60863
60911
  template_effect(($0, $1) => {
60864
- set_value(input_31, get(selectedTextAnnotation).text);
60865
- set_value(input_32, get(selectedTextAnnotation).fontSize);
60866
- set_value(input_33, get(selectedTextAnnotation).color);
60867
- set_text(text_31, get(selectedTextAnnotation).color);
60868
- set_value(input_34, get(selectedTextAnnotation).rotation);
60869
- set_value(input_35, $0);
60870
- set_value(input_36, $1);
60912
+ set_value(input_32, get(selectedTextAnnotation).text);
60913
+ set_value(input_33, get(selectedTextAnnotation).fontSize);
60914
+ set_value(input_34, get(selectedTextAnnotation).color);
60915
+ set_text(text_32, get(selectedTextAnnotation).color);
60916
+ set_value(input_35, get(selectedTextAnnotation).rotation);
60917
+ set_value(input_36, $0);
60918
+ set_value(input_37, $1);
60871
60919
  }, [() => Math.round(get(selectedTextAnnotation).x), () => Math.round(get(selectedTextAnnotation).y)]);
60872
- delegated("input", input_31, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { text: e.target.value }));
60873
- delegated("input", input_32, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { fontSize: Number(e.target.value) }));
60874
- delegated("input", input_33, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { color: e.target.value }));
60875
- delegated("input", input_34, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { rotation: Number(e.target.value) }));
60876
- delegated("input", input_35, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { x: Number(e.target.value) }));
60877
- delegated("input", input_36, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { y: Number(e.target.value) }));
60920
+ delegated("input", input_32, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { text: e.target.value }));
60921
+ delegated("input", input_33, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { fontSize: Number(e.target.value) }));
60922
+ delegated("input", input_34, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { color: e.target.value }));
60923
+ delegated("input", input_35, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { rotation: Number(e.target.value) }));
60924
+ delegated("input", input_36, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { x: Number(e.target.value) }));
60925
+ delegated("input", input_37, (e) => updateTextAnnotation(get(selectedTextAnnotation).id, { y: Number(e.target.value) }));
60878
60926
  append($$anchor, div_39);
60879
60927
  };
60880
60928
  if_block(node, ($$render) => {
@@ -60882,20 +60930,16 @@ function PropertiesPanel($$anchor, $$props) {
60882
60930
  else if (get(selectedDoor)) $$render(consequent_2, 1);
60883
60931
  else if (get(selectedWindow)) $$render(consequent_3, 2);
60884
60932
  else if (get(selectedFurniture)) $$render(consequent_7, 3);
60885
- else if (get(selectedRoom)) $$render(consequent_9, 4);
60886
- else if (get(selectedStair)) $$render(consequent_10, 5);
60887
- else if (get(selectedColumn)) $$render(consequent_12, 6);
60888
- else if (get(selectedTextAnnotation)) $$render(consequent_13, 7);
60933
+ else if (get(selectedRoom)) $$render(consequent_10, 4);
60934
+ else if (get(selectedStair)) $$render(consequent_11, 5);
60935
+ else if (get(selectedColumn)) $$render(consequent_13, 6);
60936
+ else if (get(selectedTextAnnotation)) $$render(consequent_14, 7);
60889
60937
  });
60890
- var node_10 = sibling(node, 2);
60891
- var consequent_14 = ($$anchor) => {
60892
- var div_41 = root_28();
60938
+ var node_11 = sibling(node, 2);
60939
+ var consequent_15 = ($$anchor) => {
60940
+ var div_41 = root_29();
60893
60941
  var div_42 = sibling(child(div_41), 2);
60894
- var label_45 = child(div_42);
60895
- var input_37 = sibling(child(label_45), 2);
60896
- remove_input_defaults(input_37);
60897
- reset(label_45);
60898
- var label_46 = sibling(label_45, 2);
60942
+ var label_46 = child(div_42);
60899
60943
  var input_38 = sibling(child(label_46), 2);
60900
60944
  remove_input_defaults(input_38);
60901
60945
  reset(label_46);
@@ -60903,9 +60947,13 @@ function PropertiesPanel($$anchor, $$props) {
60903
60947
  var input_39 = sibling(child(label_47), 2);
60904
60948
  remove_input_defaults(input_39);
60905
60949
  reset(label_47);
60906
- var div_43 = sibling(label_47, 2);
60950
+ var label_48 = sibling(label_47, 2);
60951
+ var input_40 = sibling(child(label_48), 2);
60952
+ remove_input_defaults(input_40);
60953
+ reset(label_48);
60954
+ var div_43 = sibling(label_48, 2);
60907
60955
  var button_27 = child(div_43);
60908
- var text_32 = child(button_27, true);
60956
+ var text_33 = child(button_27, true);
60909
60957
  reset(button_27);
60910
60958
  var button_28 = sibling(button_27, 2);
60911
60959
  reset(div_43);
@@ -60913,15 +60961,15 @@ function PropertiesPanel($$anchor, $$props) {
60913
60961
  reset(div_42);
60914
60962
  reset(div_41);
60915
60963
  template_effect(() => {
60916
- set_value(input_37, get(floor).backgroundImage.opacity);
60917
- set_value(input_38, get(floor).backgroundImage.scale);
60918
- set_value(input_39, get(floor).backgroundImage.rotation);
60964
+ set_value(input_38, get(floor).backgroundImage.opacity);
60965
+ set_value(input_39, get(floor).backgroundImage.scale);
60966
+ set_value(input_40, get(floor).backgroundImage.rotation);
60919
60967
  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"}`);
60920
- set_text(text_32, get(floor).backgroundImage.locked ? "🔒 Locked" : "🔓 Unlocked");
60968
+ set_text(text_33, get(floor).backgroundImage.locked ? "🔒 Locked" : "🔓 Unlocked");
60921
60969
  });
60922
- delegated("input", input_37, (e) => updateBackgroundImage({ opacity: Number(e.target.value) }));
60923
- delegated("input", input_38, (e) => updateBackgroundImage({ scale: Number(e.target.value) }));
60924
- delegated("input", input_39, (e) => updateBackgroundImage({ rotation: Number(e.target.value) }));
60970
+ delegated("input", input_38, (e) => updateBackgroundImage({ opacity: Number(e.target.value) }));
60971
+ delegated("input", input_39, (e) => updateBackgroundImage({ scale: Number(e.target.value) }));
60972
+ delegated("input", input_40, (e) => updateBackgroundImage({ rotation: Number(e.target.value) }));
60925
60973
  delegated("click", button_27, () => updateBackgroundImage({ locked: !get(floor).backgroundImage.locked }));
60926
60974
  delegated("click", button_28, () => {
60927
60975
  calibrationPoints.set([]);
@@ -60930,9 +60978,9 @@ function PropertiesPanel($$anchor, $$props) {
60930
60978
  delegated("click", button_29, () => setBackgroundImage(void 0));
60931
60979
  append($$anchor, div_41);
60932
60980
  };
60933
- if_block(node_10, ($$render) => {
60934
- var _$$get17;
60935
- if (get(hasBgImage) && ((_$$get17 = get(floor)) === null || _$$get17 === void 0 ? void 0 : _$$get17.backgroundImage)) $$render(consequent_14);
60981
+ if_block(node_11, ($$render) => {
60982
+ var _$$get18;
60983
+ if (get(hasBgImage) && ((_$$get18 = get(floor)) === null || _$$get18 === void 0 ? void 0 : _$$get18.backgroundImage)) $$render(consequent_15);
60936
60984
  });
60937
60985
  reset(div);
60938
60986
  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) }));
@@ -64717,7 +64765,7 @@ function FloorPlanCanvas($$anchor, $$props) {
64717
64765
  const $panMode = () => store_get(panMode, "$panMode", $$stores);
64718
64766
  const $projectSettings = () => store_get(projectSettings, "$projectSettings", $$stores);
64719
64767
  const [$$stores, $$cleanup] = setup_stores();
64720
- let selectedCameraSerial = prop($$props, "selectedCameraSerial", 3, null), showCameraCones = prop($$props, "showCameraCones", 3, false), showCameraLabels = prop($$props, "showCameraLabels", 3, true), cameraHeatmapMatrix = prop($$props, "cameraHeatmapMatrix", 19, () => []), cameraThumbnail = prop($$props, "cameraThumbnail", 3, "");
64768
+ let selectedCameraSerial = prop($$props, "selectedCameraSerial", 3, null), showCameraCones = prop($$props, "showCameraCones", 3, false), showCameraLabels = prop($$props, "showCameraLabels", 3, true), cameraHeatmapMatrix = prop($$props, "cameraHeatmapMatrix", 19, () => []), cameraThumbnail = prop($$props, "cameraThumbnail", 3, ""), canvasBackground = prop($$props, "canvasBackground", 3, "#2E353F"), floorPlateBackground = prop($$props, "floorPlateBackground", 3, "#ffffff");
64721
64769
  let canvas;
64722
64770
  let ctx;
64723
64771
  let width = /* @__PURE__ */ state(800);
@@ -64817,6 +64865,8 @@ function FloorPlanCanvas($$anchor, $$props) {
64817
64865
  showCameraLabels();
64818
64866
  cameraHeatmapMatrix();
64819
64867
  cameraThumbnail();
64868
+ canvasBackground();
64869
+ floorPlateBackground();
64820
64870
  $$props.projectName;
64821
64871
  $$props.heatmapEnabled;
64822
64872
  $$props.heatmapMatrix;
@@ -64894,6 +64944,7 @@ function FloorPlanCanvas($$anchor, $$props) {
64894
64944
  let isCalibrating = /* @__PURE__ */ state(false);
64895
64945
  let calPoints = /* @__PURE__ */ state(proxy([]));
64896
64946
  let bgImage = /* @__PURE__ */ state(null);
64947
+ let thumbnailOpacity = /* @__PURE__ */ state(.65);
64897
64948
  user_effect(() => {
64898
64949
  var _$$get, _cameraThumbnail$trim, _cameraThumbnail;
64899
64950
  const floorBgUrl = (_$$get = get(currentFloor)) === null || _$$get === void 0 || (_$$get = _$$get.backgroundImage) === null || _$$get === void 0 ? void 0 : _$$get.dataUrl;
@@ -65648,31 +65699,55 @@ function FloorPlanCanvas($$anchor, $$props) {
65648
65699
  function drawColumn$1(col, selected) {
65649
65700
  drawColumn(getCS(), col, selected);
65650
65701
  }
65702
+ function getCameraThumbnailBounds(floor = get(currentFloor)) {
65703
+ if (!floor) return null;
65704
+ return getFloorBounds(floor, { includeWallThickness: true });
65705
+ }
65706
+ function drawFloorPlateBackground() {
65707
+ var _$$get3;
65708
+ if (!((_$$get3 = get(currentFloor)) === null || _$$get3 === void 0 || (_$$get3 = _$$get3.walls) === null || _$$get3 === void 0 ? void 0 : _$$get3.length)) return;
65709
+ const bounds = getCameraThumbnailBounds(get(currentFloor));
65710
+ if (!bounds) return;
65711
+ const topLeft = worldToScreen(bounds.minX, bounds.minY);
65712
+ const bottomRight = worldToScreen(bounds.maxX, bounds.maxY);
65713
+ ctx.fillStyle = floorPlateBackground();
65714
+ ctx.fillRect(topLeft.x, topLeft.y, bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
65715
+ }
65716
+ function isCameraThumbnailOverlayActive() {
65717
+ var _cameraThumbnail2, _$$get4;
65718
+ return !!(((_cameraThumbnail2 = cameraThumbnail()) === null || _cameraThumbnail2 === void 0 ? void 0 : _cameraThumbnail2.trim()) && get(bgImage) && !((_$$get4 = get(currentFloor)) === null || _$$get4 === void 0 ? void 0 : _$$get4.backgroundImage));
65719
+ }
65651
65720
  function drawBackgroundImage() {
65652
- if (!get(bgImage) || !get(currentFloor)) return;
65721
+ var _$$get5;
65722
+ if (!get(bgImage) || !((_$$get5 = get(currentFloor)) === null || _$$get5 === void 0 ? void 0 : _$$get5.backgroundImage)) return;
65653
65723
  const bg = get(currentFloor).backgroundImage;
65654
65724
  ctx.save();
65655
- if (bg) {
65656
- const s = worldToScreen(bg.position.x, bg.position.y);
65657
- ctx.globalAlpha = bg.opacity;
65658
- ctx.translate(s.x, s.y);
65659
- ctx.rotate(bg.rotation * Math.PI / 180);
65660
- const sw = get(bgImage).width * bg.scale * get(zoom);
65661
- const sh = get(bgImage).height * bg.scale * get(zoom);
65662
- ctx.drawImage(get(bgImage), -sw / 2, -sh / 2, sw, sh);
65663
- } else if (cameraThumbnail()) {
65664
- const bounds = getFloorBounds(get(currentFloor), { includeWallThickness: true });
65665
- if (!bounds) {
65666
- ctx.restore();
65667
- return;
65668
- }
65669
- ctx.globalAlpha = .85;
65670
- const topLeft = worldToScreen(bounds.minX, bounds.minY);
65671
- const bottomRight = worldToScreen(bounds.maxX, bounds.maxY);
65672
- ctx.drawImage(get(bgImage), topLeft.x, topLeft.y, bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
65673
- }
65725
+ ctx.globalAlpha = bg.opacity;
65726
+ const s = worldToScreen(bg.position.x, bg.position.y);
65727
+ ctx.translate(s.x, s.y);
65728
+ ctx.rotate(bg.rotation * Math.PI / 180);
65729
+ const sw = get(bgImage).width * bg.scale * get(zoom);
65730
+ const sh = get(bgImage).height * bg.scale * get(zoom);
65731
+ ctx.drawImage(get(bgImage), -sw / 2, -sh / 2, sw, sh);
65674
65732
  ctx.restore();
65675
65733
  }
65734
+ function drawCameraThumbnail() {
65735
+ if (!isCameraThumbnailOverlayActive() || !get(bgImage) || !get(currentFloor)) return;
65736
+ const bounds = getCameraThumbnailBounds();
65737
+ if (!bounds) return;
65738
+ ctx.save();
65739
+ ctx.globalAlpha = get(thumbnailOpacity);
65740
+ const topLeft = worldToScreen(bounds.minX, bounds.minY);
65741
+ const bottomRight = worldToScreen(bounds.maxX, bounds.maxY);
65742
+ ctx.drawImage(get(bgImage), topLeft.x, topLeft.y, bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
65743
+ ctx.restore();
65744
+ }
65745
+ function drawFloorHeatmapLayer() {
65746
+ var _$$props$heatmapMatri, _$$props$heatmapMatri2;
65747
+ const floor = get(currentFloor);
65748
+ if (!floor || !$$props.heatmapEnabled || !((_$$props$heatmapMatri = $$props.heatmapMatrix) === null || _$$props$heatmapMatri === void 0 ? void 0 : _$$props$heatmapMatri.length)) return;
65749
+ drawFloorHeatmap(getCS(), floor, (_$$props$heatmapMatri2 = $$props.heatmapMatrix) !== null && _$$props$heatmapMatri2 !== void 0 ? _$$props$heatmapMatri2 : [], get(detectedRooms));
65750
+ }
65676
65751
  function getFloorWallBounds(floor = get(currentFloor)) {
65677
65752
  var _floor$walls;
65678
65753
  if (!(floor === null || floor === void 0 || (_floor$walls = floor.walls) === null || _floor$walls === void 0 ? void 0 : _floor$walls.length)) return null;
@@ -65720,7 +65795,7 @@ function FloorPlanCanvas($$anchor, $$props) {
65720
65795
  }
65721
65796
  canvasDirty = false;
65722
65797
  ctx.clearRect(0, 0, get(width), get(height));
65723
- ctx.fillStyle = "#f8f9fa";
65798
+ ctx.fillStyle = canvasBackground();
65724
65799
  ctx.fillRect(0, 0, get(width), get(height));
65725
65800
  if (!$$props.viewOnly) drawGrid();
65726
65801
  if (!$$props.viewOnly && get(layerVis).guides) drawGuides$1();
@@ -65742,11 +65817,8 @@ function FloorPlanCanvas($$anchor, $$props) {
65742
65817
  function isSelected(id) {
65743
65818
  return id === selId || multiIds.has(id);
65744
65819
  }
65820
+ drawFloorPlateBackground();
65745
65821
  drawRooms$1();
65746
- if (floor && $$props.heatmapEnabled && $$props.heatmapMatrix && $$props.heatmapMatrix.length > 0) {
65747
- var _$$props$heatmapMatri;
65748
- drawFloorHeatmap(getCS(), floor, (_$$props$heatmapMatri = $$props.heatmapMatrix) !== null && _$$props$heatmapMatri !== void 0 ? _$$props$heatmapMatri : [], get(detectedRooms));
65749
- }
65750
65822
  if (!$$props.viewOnly) drawSnapPoints$1();
65751
65823
  if (get(layerVis).walls) {
65752
65824
  for (const w of floor.walls) drawWall$1(w, isSelected(w.id));
@@ -66333,6 +66405,7 @@ function FloorPlanCanvas($$anchor, $$props) {
66333
66405
  if (get(layerVis).annotations && floor) drawAnnotations$1(floor);
66334
66406
  if (get(annotating) && get(annotationStart)) drawAnnotationPreview();
66335
66407
  if (floor) drawTextAnnotations$1(floor);
66408
+ drawCameraThumbnail();
66336
66409
  if (get(draggingHandle) === "rotate" && get(currentSelectedId) && get(currentFloor)) {
66337
66410
  const fi = get(currentFloor).furniture.find((f) => f.id === get(currentSelectedId));
66338
66411
  if (fi) {
@@ -66369,6 +66442,7 @@ function FloorPlanCanvas($$anchor, $$props) {
66369
66442
  ctx.setLineDash([]);
66370
66443
  ctx.restore();
66371
66444
  }
66445
+ drawFloorHeatmapLayer();
66372
66446
  drawMinimap$1();
66373
66447
  requestAnimationFrame(draw);
66374
66448
  }
@@ -66494,6 +66568,10 @@ function FloorPlanCanvas($$anchor, $$props) {
66494
66568
  }
66495
66569
  }
66496
66570
  document.addEventListener("paste", handlePaste);
66571
+ const unsubThumbOpacity = cameraThumbnailOpacity.subscribe((v) => {
66572
+ set(thumbnailOpacity, v, true);
66573
+ markDirty();
66574
+ });
66497
66575
  return () => {
66498
66576
  resizeObs.disconnect();
66499
66577
  unsub1();
@@ -66513,6 +66591,7 @@ function FloorPlanCanvas($$anchor, $$props) {
66513
66591
  unsubZoom();
66514
66592
  unsubCamX();
66515
66593
  unsubCamY();
66594
+ unsubThumbOpacity();
66516
66595
  unsub_col();
66517
66596
  unsub_cols();
66518
66597
  unsub_layers();
@@ -66683,7 +66762,7 @@ function FloorPlanCanvas($$anchor, $$props) {
66683
66762
  return findRoomAt(p, get(detectedRooms), get(currentFloor).walls);
66684
66763
  }
66685
66764
  function onMouseDown(e) {
66686
- var _$$get3;
66765
+ var _$$get6;
66687
66766
  if ($$props.viewOnly) return;
66688
66767
  markDirty();
66689
66768
  if (e.button === 1 || e.button === 0 && (get(spaceDown) || $panMode() || e.shiftKey && get(currentTool) === "select")) {
@@ -66764,7 +66843,7 @@ function FloorPlanCanvas($$anchor, $$props) {
66764
66843
  placingStair.set(false);
66765
66844
  return;
66766
66845
  }
66767
- if (tool === "select" && ((_$$get3 = get(currentFloor)) === null || _$$get3 === void 0 ? void 0 : _$$get3.guides)) {
66846
+ if (tool === "select" && ((_$$get6 = get(currentFloor)) === null || _$$get6 === void 0 ? void 0 : _$$get6.guides)) {
66768
66847
  const GUIDE_HIT = 6 / get(zoom);
66769
66848
  for (const g of get(currentFloor).guides) {
66770
66849
  if (g.orientation === "horizontal" && Math.abs(wp.y - g.position) < GUIDE_HIT) {
@@ -66833,9 +66912,9 @@ function FloorPlanCanvas($$anchor, $$props) {
66833
66912
  const dist = Math.hypot(newPts[1].x - newPts[0].x, newPts[1].y - newPts[0].y);
66834
66913
  const realDist = prompt("Enter the real-world distance between these two points (in cm):");
66835
66914
  if (realDist && Number(realDist) > 0) {
66836
- var _$$get4;
66915
+ var _$$get7;
66837
66916
  const pixelsPerCm = dist / Number(realDist);
66838
- if ((_$$get4 = get(currentFloor)) === null || _$$get4 === void 0 ? void 0 : _$$get4.backgroundImage) updateBackgroundImage({ scale: get(currentFloor).backgroundImage.scale * (1 / pixelsPerCm) });
66917
+ if ((_$$get7 = get(currentFloor)) === null || _$$get7 === void 0 ? void 0 : _$$get7.backgroundImage) updateBackgroundImage({ scale: get(currentFloor).backgroundImage.scale * (1 / pixelsPerCm) });
66839
66918
  }
66840
66919
  calibrationMode.set(false);
66841
66920
  return [];
@@ -67205,7 +67284,7 @@ function FloorPlanCanvas($$anchor, $$props) {
67205
67284
  }
67206
67285
  }
67207
67286
  function onMouseMove(e) {
67208
- var _$$get5, _$$get6, _$$get7, _$$get8;
67287
+ var _$$get8, _$$get9, _$$get10, _$$get11;
67209
67288
  if ($$props.viewOnly) return;
67210
67289
  markDirty();
67211
67290
  const rect = canvas.getBoundingClientRect();
@@ -67223,7 +67302,7 @@ function FloorPlanCanvas($$anchor, $$props) {
67223
67302
  } : r));
67224
67303
  return;
67225
67304
  }
67226
- if (get(draggingGuideId) && ((_$$get5 = get(currentFloor)) === null || _$$get5 === void 0 ? void 0 : _$$get5.guides)) {
67305
+ if (get(draggingGuideId) && ((_$$get8 = get(currentFloor)) === null || _$$get8 === void 0 ? void 0 : _$$get8.guides)) {
67227
67306
  const g = get(currentFloor).guides.find((g) => g.id === get(draggingGuideId));
67228
67307
  if (g) {
67229
67308
  const newPos = g.orientation === "horizontal" ? get(mousePos).y : get(mousePos).x;
@@ -67379,7 +67458,7 @@ function FloorPlanCanvas($$anchor, $$props) {
67379
67458
  }
67380
67459
  }
67381
67460
  }
67382
- if (get(draggingTextAnnotationId) && ((_$$get6 = get(currentFloor)) === null || _$$get6 === void 0 ? void 0 : _$$get6.textAnnotations)) {
67461
+ if (get(draggingTextAnnotationId) && ((_$$get9 = get(currentFloor)) === null || _$$get9 === void 0 ? void 0 : _$$get9.textAnnotations)) {
67383
67462
  const basePos = {
67384
67463
  x: get(mousePos).x - textAnnotationDragOffset.x,
67385
67464
  y: get(mousePos).y - textAnnotationDragOffset.y
@@ -67396,7 +67475,7 @@ function FloorPlanCanvas($$anchor, $$props) {
67396
67475
  }, true);
67397
67476
  }
67398
67477
  }
67399
- if (get(draggingColumnId) && ((_$$get7 = get(currentFloor)) === null || _$$get7 === void 0 ? void 0 : _$$get7.columns)) {
67478
+ if (get(draggingColumnId) && ((_$$get10 = get(currentFloor)) === null || _$$get10 === void 0 ? void 0 : _$$get10.columns)) {
67400
67479
  const basePos = {
67401
67480
  x: get(mousePos).x - columnDragOffset.x,
67402
67481
  y: get(mousePos).y - columnDragOffset.y
@@ -67406,7 +67485,7 @@ function FloorPlanCanvas($$anchor, $$props) {
67406
67485
  y: snap(basePos.y)
67407
67486
  });
67408
67487
  }
67409
- if (get(draggingStairId) && ((_$$get8 = get(currentFloor)) === null || _$$get8 === void 0 ? void 0 : _$$get8.stairs)) {
67488
+ if (get(draggingStairId) && ((_$$get11 = get(currentFloor)) === null || _$$get11 === void 0 ? void 0 : _$$get11.stairs)) {
67410
67489
  const basePos = {
67411
67490
  x: get(mousePos).x - stairDragOffset.x,
67412
67491
  y: get(mousePos).y - stairDragOffset.y
@@ -67417,12 +67496,12 @@ function FloorPlanCanvas($$anchor, $$props) {
67417
67496
  });
67418
67497
  }
67419
67498
  if (get(draggingFurnitureId)) {
67420
- var _$$get9;
67499
+ var _$$get12;
67421
67500
  const basePos = {
67422
67501
  x: get(mousePos).x - dragOffset.x,
67423
67502
  y: get(mousePos).y - dragOffset.y
67424
67503
  };
67425
- const fi = (_$$get9 = get(currentFloor)) === null || _$$get9 === void 0 ? void 0 : _$$get9.furniture.find((f) => f.id === get(draggingFurnitureId));
67504
+ const fi = (_$$get12 = get(currentFloor)) === null || _$$get12 === void 0 ? void 0 : _$$get12.furniture.find((f) => f.id === get(draggingFurnitureId));
67426
67505
  if (fi) {
67427
67506
  const wallSnap = snapFurnitureToWall(basePos, fi.catalogId, fi.rotation);
67428
67507
  if (wallSnap) {
@@ -67435,13 +67514,13 @@ function FloorPlanCanvas($$anchor, $$props) {
67435
67514
  wallAngle: wallSnap.wallAngle
67436
67515
  }, true);
67437
67516
  } else {
67438
- var _$$get10;
67517
+ var _$$get13;
67439
67518
  const snapped = {
67440
67519
  x: snap(basePos.x),
67441
67520
  y: snap(basePos.y)
67442
67521
  };
67443
67522
  const GUIDE_SNAP = 10;
67444
- if ((_$$get10 = get(currentFloor)) === null || _$$get10 === void 0 ? void 0 : _$$get10.guides) for (const g of get(currentFloor).guides) {
67523
+ if ((_$$get13 = get(currentFloor)) === null || _$$get13 === void 0 ? void 0 : _$$get13.guides) for (const g of get(currentFloor).guides) {
67445
67524
  if (g.orientation === "horizontal" && Math.abs(snapped.y - g.position) < GUIDE_SNAP) snapped.y = g.position;
67446
67525
  if (g.orientation === "vertical" && Math.abs(snapped.x - g.position) < GUIDE_SNAP) snapped.x = g.position;
67447
67526
  }
@@ -68137,8 +68216,8 @@ function FloorPlanCanvas($$anchor, $$props) {
68137
68216
  }
68138
68217
  }
68139
68218
  let cursorStyle = /* @__PURE__ */ user_derived(() => {
68140
- var _$$get11;
68141
- return get(spaceDown) || get(isPanning) || $panMode() || get(shiftDown) && get(currentTool) === "select" ? "grab" : get(draggingFurnitureId) ? "move" : get(draggingRoomId) ? "move" : get(draggingMultiSelect) ? "move" : get(draggingDoorId) ? "move" : get(draggingWindowId) ? "move" : get(draggingStairId) ? "move" : get(draggingColumnId) ? "move" : get(draggingTextAnnotationId) ? "move" : get(draggingWallParallel) ? "move" : get(draggingCurveHandle) ? "crosshair" : get(draggingWallEndpoint) ? "crosshair" : get(draggingHandle) === "rotate" ? "grabbing" : get(draggingHandle) === "resize-t" || get(draggingHandle) === "resize-b" ? "ns-resize" : get(draggingHandle) === "resize-l" || get(draggingHandle) === "resize-r" ? "ew-resize" : ((_$$get11 = get(draggingHandle)) === null || _$$get11 === void 0 ? void 0 : _$$get11.startsWith("resize")) ? "nwse-resize" : get(currentTool) === "text" ? "text" : get(currentTool) === "select" ? "default" : get(currentTool) === "furniture" ? "copy" : get(currentTool) === "door" || get(currentTool) === "window" ? get(placementPreview) ? "crosshair" : "not-allowed" : "crosshair";
68219
+ var _$$get14;
68220
+ return get(spaceDown) || get(isPanning) || $panMode() || get(shiftDown) && get(currentTool) === "select" ? "grab" : get(draggingFurnitureId) ? "move" : get(draggingRoomId) ? "move" : get(draggingMultiSelect) ? "move" : get(draggingDoorId) ? "move" : get(draggingWindowId) ? "move" : get(draggingStairId) ? "move" : get(draggingColumnId) ? "move" : get(draggingTextAnnotationId) ? "move" : get(draggingWallParallel) ? "move" : get(draggingCurveHandle) ? "crosshair" : get(draggingWallEndpoint) ? "crosshair" : get(draggingHandle) === "rotate" ? "grabbing" : get(draggingHandle) === "resize-t" || get(draggingHandle) === "resize-b" ? "ns-resize" : get(draggingHandle) === "resize-l" || get(draggingHandle) === "resize-r" ? "ew-resize" : ((_$$get14 = get(draggingHandle)) === null || _$$get14 === void 0 ? void 0 : _$$get14.startsWith("resize")) ? "nwse-resize" : get(currentTool) === "text" ? "text" : get(currentTool) === "select" ? "default" : get(currentTool) === "furniture" ? "copy" : get(currentTool) === "door" || get(currentTool) === "window" ? get(placementPreview) ? "crosshair" : "not-allowed" : "crosshair";
68142
68221
  });
68143
68222
  var div = root$1();
68144
68223
  event("keydown", $window, onKeyDown);
@@ -68225,8 +68304,8 @@ function FloorPlanCanvas($$anchor, $$props) {
68225
68304
  }
68226
68305
  set(editingTextAnnotationId, null);
68227
68306
  } else if (e.key === "Escape") {
68228
- var _$$get12;
68229
- if ((_$$get12 = get(currentFloor)) === null || _$$get12 === void 0 ? void 0 : _$$get12.textAnnotations) {
68307
+ var _$$get15;
68308
+ if ((_$$get15 = get(currentFloor)) === null || _$$get15 === void 0 ? void 0 : _$$get15.textAnnotations) {
68230
68309
  const ta = get(currentFloor).textAnnotations.find((t) => t.id === get(editingTextAnnotationId));
68231
68310
  if (ta && ta.text === "Text" && !get(editingTextAnnotationValue).trim()) {
68232
68311
  removeTextAnnotation(get(editingTextAnnotationId));
@@ -68578,8 +68657,8 @@ function FloorPlanCanvas($$anchor, $$props) {
68578
68657
  var text_16 = child(div_8);
68579
68658
  reset(div_8);
68580
68659
  template_effect(() => {
68581
- var _$$get13;
68582
- return set_text(text_16, `Click to place · Scroll or R to rotate (${(_$$get13 = get(currentPlacingRotation)) !== null && _$$get13 !== void 0 ? _$$get13 : ""}°) · Esc
68660
+ var _$$get16;
68661
+ return set_text(text_16, `Click to place · Scroll or R to rotate (${(_$$get16 = get(currentPlacingRotation)) !== null && _$$get16 !== void 0 ? _$$get16 : ""}°) · Esc
68583
68662
  to cancel`);
68584
68663
  });
68585
68664
  append($$anchor, div_8);
@@ -69677,6 +69756,9 @@ function App($$anchor, $$props) {
69677
69756
  let config = /* @__PURE__ */ state(proxy({ ...DEFAULT_CONFIG }));
69678
69757
  (_$$props$stores = $$props.stores) === null || _$$props$stores === void 0 || _$$props$stores.floorData.subscribe((v) => set(floorData, v, true));
69679
69758
  (_$$props$stores2 = $$props.stores) === null || _$$props$stores2 === void 0 || _$$props$stores2.config.subscribe((v) => set(config, normalizeConfig(v), true));
69759
+ user_effect(() => {
69760
+ if (get(config).cameraThumbnailOpacity != null) cameraThumbnailOpacity.set(get(config).cameraThumbnailOpacity);
69761
+ });
69680
69762
  let commandPaletteOpen = /* @__PURE__ */ state(false);
69681
69763
  let printOpen = /* @__PURE__ */ state(false);
69682
69764
  let mode = /* @__PURE__ */ state("2d");
@@ -69818,6 +69900,14 @@ function App($$anchor, $$props) {
69818
69900
  var _$$get12;
69819
69901
  return ((_$$get12 = get(config)) === null || _$$get12 === void 0 ? void 0 : _$$get12.cameraThumbnail) || "";
69820
69902
  });
69903
+ let $11 = /* @__PURE__ */ user_derived(() => {
69904
+ var _$$get13;
69905
+ return (_$$get13 = get(config)) === null || _$$get13 === void 0 ? void 0 : _$$get13.canvasBackground;
69906
+ });
69907
+ let $12 = /* @__PURE__ */ user_derived(() => {
69908
+ var _$$get14;
69909
+ return (_$$get14 = get(config)) === null || _$$get14 === void 0 ? void 0 : _$$get14.floorPlateBackground;
69910
+ });
69821
69911
  FloorPlanCanvas(node_3, {
69822
69912
  get viewOnly() {
69823
69913
  return get($0);
@@ -69851,6 +69941,12 @@ function App($$anchor, $$props) {
69851
69941
  },
69852
69942
  get cameraThumbnail() {
69853
69943
  return get($10);
69944
+ },
69945
+ get canvasBackground() {
69946
+ return get($11);
69947
+ },
69948
+ get floorPlateBackground() {
69949
+ return get($12);
69854
69950
  }
69855
69951
  });
69856
69952
  }
@@ -69879,8 +69975,12 @@ function App($$anchor, $$props) {
69879
69975
  {
69880
69976
  let $0 = /* @__PURE__ */ user_derived(() => get(mode) === "3d");
69881
69977
  let $1 = /* @__PURE__ */ user_derived(() => {
69882
- var _$$get$siteCameras, _$$get13;
69883
- return (_$$get$siteCameras = (_$$get13 = get(config)) === null || _$$get13 === void 0 ? void 0 : _$$get13.siteCameras) !== null && _$$get$siteCameras !== void 0 ? _$$get$siteCameras : [];
69978
+ var _$$get$siteCameras, _$$get15;
69979
+ return (_$$get$siteCameras = (_$$get15 = get(config)) === null || _$$get15 === void 0 ? void 0 : _$$get15.siteCameras) !== null && _$$get$siteCameras !== void 0 ? _$$get$siteCameras : [];
69980
+ });
69981
+ let $2 = /* @__PURE__ */ user_derived(() => {
69982
+ var _$$get$cameraThumbnai, _$$get16;
69983
+ return (_$$get$cameraThumbnai = (_$$get16 = get(config)) === null || _$$get16 === void 0 ? void 0 : _$$get16.cameraThumbnail) !== null && _$$get$cameraThumbnai !== void 0 ? _$$get$cameraThumbnai : "";
69884
69984
  });
69885
69985
  PropertiesPanel($$anchor, {
69886
69986
  get is3D() {
@@ -69888,6 +69988,9 @@ function App($$anchor, $$props) {
69888
69988
  },
69889
69989
  get siteCameras() {
69890
69990
  return get($1);
69991
+ },
69992
+ get cameraThumbnail() {
69993
+ return get($2);
69891
69994
  }
69892
69995
  });
69893
69996
  }