mudlet-map-editor 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ import type { MudletMap } from '../mapIO';
2
+ import type { Command } from './types';
3
+ export interface SaveSessionArgs {
4
+ fileName: string;
5
+ map: MudletMap;
6
+ undoStack: Command[];
7
+ currentAreaId: number | null;
8
+ currentZ: number;
9
+ existingId?: string;
10
+ }
11
+ export declare function saveSessionAsync(args: SaveSessionArgs): Promise<string>;
@@ -0,0 +1,18 @@
1
+ import type { MudletMap } from '../mapIO';
2
+ import type { Command } from './types';
3
+ export interface SaveSessionRequest {
4
+ reqId: number;
5
+ fileName: string;
6
+ map: MudletMap;
7
+ undoStack: Command[];
8
+ currentAreaId: number | null;
9
+ currentZ: number;
10
+ existingId?: string;
11
+ }
12
+ export type SaveSessionResponse = {
13
+ reqId: number;
14
+ id: string;
15
+ } | {
16
+ reqId: number;
17
+ error: string;
18
+ };
package/dist-lib/index.js CHANGED
@@ -278,7 +278,7 @@ function ne({ label: e, value: t, options: n, onChange: r, searchable: a, emptyT
278
278
  let t = D[e];
279
279
  t && (r(t.value), d(!1));
280
280
  };
281
- return i(() => {
281
+ i(() => {
282
282
  if (!u) {
283
283
  g("");
284
284
  return;
@@ -295,7 +295,9 @@ function ne({ label: e, value: t, options: n, onChange: r, searchable: a, emptyT
295
295
  u,
296
296
  _,
297
297
  D
298
- ]), /* @__PURE__ */ m("div", {
298
+ ]);
299
+ let A = S.current?.closest(".mudlet-editor-root") ?? document.body;
300
+ return /* @__PURE__ */ m("div", {
299
301
  className: "dropdown-select",
300
302
  children: [/* @__PURE__ */ m("button", {
301
303
  ref: S,
@@ -350,7 +352,7 @@ function ne({ label: e, value: t, options: n, onChange: r, searchable: a, emptyT
350
352
  children: e.label
351
353
  }, e.value))]
352
354
  })]
353
- })] }), document.body)]
355
+ })] }), A)]
354
356
  });
355
357
  }
356
358
  //#endregion
@@ -6389,7 +6391,14 @@ function Qt({ entries: e }) {
6389
6391
  });
6390
6392
  }
6391
6393
  function $t({ onClose: e }) {
6392
- let [t, n] = c(!1), r = Gt.filter((e) => e.detail === "Read" || e.detail === "I/O" || e.kind !== "function"), i = Gt.filter((e) => e.detail === "Write");
6394
+ let [t, n] = c(!1), r = Gt.filter((e) => e.detail === "Read" || e.detail === "I/O" || e.kind !== "function"), i = Gt.filter((e) => e.detail === "Write"), a = async () => {
6395
+ let e = Zt();
6396
+ try {
6397
+ await navigator.clipboard.writeText(e), n(!0), setTimeout(() => n(!1), 1500);
6398
+ } catch {
6399
+ window.prompt("Copy the prompt text:", e);
6400
+ }
6401
+ }, o = document.querySelector(".mudlet-editor-root") ?? document.body;
6393
6402
  return v(/* @__PURE__ */ p("div", {
6394
6403
  className: "modal-overlay",
6395
6404
  onClick: e,
@@ -6438,14 +6447,7 @@ function $t({ onClose: e }) {
6438
6447
  }), /* @__PURE__ */ p("button", {
6439
6448
  type: "button",
6440
6449
  className: "ai-prompt-copy-btn",
6441
- onClick: async () => {
6442
- let e = Zt();
6443
- try {
6444
- await navigator.clipboard.writeText(e), n(!0), setTimeout(() => n(!1), 1500);
6445
- } catch {
6446
- window.prompt("Copy the prompt text:", e);
6447
- }
6448
- },
6450
+ onClick: a,
6449
6451
  title: "Copy AI-friendly API reference to clipboard",
6450
6452
  children: t ? "Copied!" : "Copy for AI"
6451
6453
  })]
@@ -6548,7 +6550,7 @@ function $t({ onClose: e }) {
6548
6550
  ]
6549
6551
  })]
6550
6552
  })
6551
- }), document.body);
6553
+ }), o);
6552
6554
  }
6553
6555
  //#endregion
6554
6556
  //#region src/components/panels/ScriptLibraryModal.tsx
@@ -6640,7 +6642,7 @@ function en({ library: e, currentName: t, onLoad: n, onDelete: r, onClose: a })
6640
6642
  }
6641
6643
  //#endregion
6642
6644
  //#region src/components/panels/ScriptPanel.tsx
6643
- var tn = r(() => import("./ScriptCodeEditor-Dtgis0Nh.js"));
6645
+ var tn = r(() => import("./ScriptCodeEditor-BHx_AhoB.js"));
6644
6646
  function nn() {
6645
6647
  let { t: e } = d("panels");
6646
6648
  return /* @__PURE__ */ m("div", {
@@ -9740,7 +9742,7 @@ function Cr({ value: e, options: t, onChange: n, searchPlaceholder: r = "Search
9740
9742
  let t = S[e];
9741
9743
  t && (n(t), o(!1));
9742
9744
  };
9743
- return i(() => {
9745
+ i(() => {
9744
9746
  if (!a) {
9745
9747
  u("");
9746
9748
  return;
@@ -9757,7 +9759,9 @@ function Cr({ value: e, options: t, onChange: n, searchPlaceholder: r = "Search
9757
9759
  a,
9758
9760
  d,
9759
9761
  S
9760
- ]), /* @__PURE__ */ m("div", {
9762
+ ]);
9763
+ let T = y.current?.closest(".mudlet-editor-root") ?? document.body;
9764
+ return /* @__PURE__ */ m("div", {
9761
9765
  className: "dropdown-select",
9762
9766
  style: { flex: 1 },
9763
9767
  children: [/* @__PURE__ */ m("button", {
@@ -9812,7 +9816,7 @@ function Cr({ value: e, options: t, onChange: n, searchPlaceholder: r = "Search
9812
9816
  children: t
9813
9817
  }, t))]
9814
9818
  })]
9815
- })] }), document.body)]
9819
+ })] }), T)]
9816
9820
  });
9817
9821
  }
9818
9822
  //#endregion
@@ -16246,9 +16250,9 @@ function va(e, t) {
16246
16250
  if (e.currentAreaId == null) return !1;
16247
16251
  let t = r.getArea(e.currentAreaId);
16248
16252
  return t ? t.getRooms().every((t) => t.z !== e.currentZ) : !1;
16249
- }, () => i.getViewportBounds()), y = i.konvaBackend;
16250
- y.addLiveEffect("editor.marquee", o), y.addLiveEffect("editor.selection", s), y.addLiveEffect("editor.hover", c), y.addLiveEffect("editor.rubberband", l), y.addLiveEffect("editor.snap", u), y.addLiveEffect("editor.connectHandles", d), y.addLiveEffect("editor.customLinePreview", f), y.addLiveEffect("editor.selectedLink", p), y.addLiveEffect("editor.labelHalo", m), y.addLiveEffect("editor.selectionCenter", h), y.addLiveEffect("editor.ghostRooms", g), y.addLiveEffect("editor.route", _), y.addLiveEffect("editor.gridOverlay", v);
16251
- let x = {
16253
+ }, () => i.getViewportBounds());
16254
+ i.addLiveEffect("editor.marquee", o), i.addLiveEffect("editor.selection", s), i.addLiveEffect("editor.hover", c), i.addLiveEffect("editor.rubberband", l), i.addLiveEffect("editor.snap", u), i.addLiveEffect("editor.connectHandles", d), i.addLiveEffect("editor.customLinePreview", f), i.addLiveEffect("editor.selectedLink", p), i.addLiveEffect("editor.labelHalo", m), i.addLiveEffect("editor.selectionCenter", h), i.addLiveEffect("editor.ghostRooms", g), i.addLiveEffect("editor.route", _), i.addLiveEffect("editor.gridOverlay", v);
16255
+ let y = {
16252
16256
  renderer: i,
16253
16257
  reader: r,
16254
16258
  settings: n,
@@ -16267,18 +16271,18 @@ function va(e, t) {
16267
16271
  i.refresh(), s.syncPositions(), c.syncPositions(), u.syncPositions(), d.syncPositions(), m.syncPositions(), h.syncPositions(), g.syncPositions(), _.syncPositions();
16268
16272
  },
16269
16273
  destroy() {
16270
- delete t.dataset.editorCursor, S(), y.removeLiveEffect("editor.selection"), y.removeLiveEffect("editor.hover"), y.removeLiveEffect("editor.rubberband"), y.removeLiveEffect("editor.snap"), y.removeLiveEffect("editor.connectHandles"), o.destroy(), y.removeLiveEffect("editor.marquee"), s.destroy(), c.destroy(), l.destroy(), u.destroy(), d.destroy(), f.destroy(), y.removeLiveEffect("editor.customLinePreview"), p.destroy(), y.removeLiveEffect("editor.selectedLink"), m.destroy(), y.removeLiveEffect("editor.labelHalo"), h.destroy(), y.removeLiveEffect("editor.selectionCenter"), g.destroy(), y.removeLiveEffect("editor.ghostRooms"), _.destroy(), y.removeLiveEffect("editor.route"), v.destroy(), y.removeLiveEffect("editor.gridOverlay"), i.destroy();
16274
+ delete t.dataset.editorCursor, x(), i.removeLiveEffect("editor.selection"), i.removeLiveEffect("editor.hover"), i.removeLiveEffect("editor.rubberband"), i.removeLiveEffect("editor.snap"), i.removeLiveEffect("editor.connectHandles"), o.destroy(), i.removeLiveEffect("editor.marquee"), s.destroy(), c.destroy(), l.destroy(), u.destroy(), d.destroy(), f.destroy(), i.removeLiveEffect("editor.customLinePreview"), p.destroy(), i.removeLiveEffect("editor.selectedLink"), m.destroy(), i.removeLiveEffect("editor.labelHalo"), h.destroy(), i.removeLiveEffect("editor.selectionCenter"), g.destroy(), i.removeLiveEffect("editor.ghostRooms"), _.destroy(), i.removeLiveEffect("editor.route"), v.destroy(), i.removeLiveEffect("editor.gridOverlay"), i.destroy();
16271
16275
  }
16272
16276
  };
16273
- a.current = x;
16274
- let S = _a({
16277
+ a.current = y;
16278
+ let x = _a({
16275
16279
  renderer: i,
16276
16280
  container: t,
16277
16281
  settings: n,
16278
- refresh: () => x.refresh(),
16279
- scene: x
16282
+ refresh: () => y.refresh(),
16283
+ scene: y
16280
16284
  });
16281
- return x;
16285
+ return y;
16282
16286
  }
16283
16287
  //#endregion
16284
16288
  //#region src/editor/clipboard.ts
@@ -16407,8 +16411,62 @@ function wa(e, t, n, r, i) {
16407
16411
  }, i);
16408
16412
  }
16409
16413
  //#endregion
16414
+ //#region src/editor/sessionSaver.ts
16415
+ var Ta = null, Ea = !1, Da = 1, Oa = /* @__PURE__ */ new Map();
16416
+ function ka(e) {
16417
+ for (let t of Oa.values()) t.reject(e);
16418
+ Oa.clear();
16419
+ }
16420
+ function Aa() {
16421
+ if (Ea) return null;
16422
+ if (Ta) return Ta;
16423
+ try {
16424
+ return Ta = new Worker(new URL(
16425
+ /* @vite-ignore */
16426
+ "" + new URL("assets/sessionWorker-DrI4-wnQ.js", import.meta.url).href,
16427
+ "" + import.meta.url
16428
+ ), { type: "module" }), Ta.onmessage = (e) => {
16429
+ let t = e.data, n = Oa.get(t.reqId);
16430
+ n && (Oa.delete(t.reqId), "error" in t ? n.reject(Error(t.error)) : n.resolve(t.id));
16431
+ }, Ta.onerror = () => {
16432
+ Ea = !0, ka(/* @__PURE__ */ Error("session worker error")), Ta?.terminate(), Ta = null;
16433
+ }, Ta;
16434
+ } catch {
16435
+ return Ea = !0, null;
16436
+ }
16437
+ }
16438
+ function ja(e) {
16439
+ return qr(e.fileName, e.map, e.undoStack, e.currentAreaId, e.currentZ, e.existingId);
16440
+ }
16441
+ async function Ma(e) {
16442
+ let t = Aa();
16443
+ if (t) {
16444
+ let n = Da++;
16445
+ try {
16446
+ return await new Promise((r, i) => {
16447
+ Oa.set(n, {
16448
+ resolve: r,
16449
+ reject: i
16450
+ });
16451
+ try {
16452
+ let r = {
16453
+ reqId: n,
16454
+ ...e
16455
+ };
16456
+ t.postMessage(r);
16457
+ } catch (e) {
16458
+ Oa.delete(n), i(e instanceof Error ? e : Error(String(e)));
16459
+ }
16460
+ });
16461
+ } catch (e) {
16462
+ Ea = !0, Ta?.terminate(), Ta = null, console.warn("Session worker save failed; falling back to main thread:", e);
16463
+ }
16464
+ }
16465
+ return ja(e);
16466
+ }
16467
+ //#endregion
16410
16468
  //#region src/App.tsx
16411
- function Ta() {
16469
+ function Na() {
16412
16470
  return {
16413
16471
  top: 104,
16414
16472
  right: z.getState().panelWidth + 24,
@@ -16416,7 +16474,7 @@ function Ta() {
16416
16474
  left: 24
16417
16475
  };
16418
16476
  }
16419
- var Ea = {
16477
+ var Pa = {
16420
16478
  1: "select",
16421
16479
  2: "connect",
16422
16480
  3: "unlink",
@@ -16425,7 +16483,7 @@ var Ea = {
16425
16483
  6: "delete",
16426
16484
  7: "pan",
16427
16485
  8: "paint"
16428
- }, Da = {
16486
+ }, Fa = {
16429
16487
  ArrowLeft: {
16430
16488
  dx: -1,
16431
16489
  dy: 0
@@ -16443,30 +16501,30 @@ var Ea = {
16443
16501
  dy: -1
16444
16502
  }
16445
16503
  };
16446
- function Oa(e, t) {
16504
+ function Ia(e, t) {
16447
16505
  let n = Oe.t.bind(Oe), r = [n(`editor:status.${e}`, { count: t.count })];
16448
16506
  return t.externalExitsStubbed > 0 && r.push(n("editor:status.externalExitsStubbed", { count: t.externalExitsStubbed })), t.externalSpecialExitsDropped > 0 && r.push(n("editor:status.specialExitsDropped", { count: t.externalSpecialExitsDropped })), r.join(" · ");
16449
16507
  }
16450
- function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16451
- let { t: r } = d("editor"), a = s(null), l = s(null), u = B((e) => e.map), h = B((e) => e.swatchPaletteOpen), g = u != null, _ = B((e) => e.currentAreaId), v = B((e) => e.currentZ), y = B((e) => e.activeTool), b = B((e) => e.pending), x = B((e) => e.hover), S = B((e) => e.spaceHeld), C = B((e) => e.panelCollapsed), w = B((e) => e.dataVersion), T = B((e) => e.panRequest), [E, D] = c(!1), [O, k] = c(!1), [A, j] = c(!1), [M, P] = c(!1), [F, I] = c(() => new URLSearchParams(window.location.search).get("map")), L = o(() => e.flatMap((e) => e.swatchSets?.() ?? []), [e]), R = o(() => e.flatMap((e) => e.sidebarTabs?.() ?? []), [e]), V = o(() => e.flatMap((e) => e.roomPanelSections?.() ?? []), [e]), H = o(() => {
16508
+ function La({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16509
+ let { t: r } = d("editor"), a = s(null), l = s(null), u = B((e) => e.map), h = B((e) => e.swatchPaletteOpen), g = u != null, _ = B((e) => e.currentAreaId), v = B((e) => e.currentZ), y = B((e) => e.activeTool), b = B((e) => e.pending), x = B((e) => e.hover), S = B((e) => e.spaceHeld), C = B((e) => e.panelCollapsed), w = B((e) => e.undo), T = B((e) => e.redo), E = B((e) => e.panRequest), [D, O] = c(!1), [k, A] = c(!1), [j, M] = c(!1), [P, F] = c(!1), [I, L] = c(() => new URLSearchParams(window.location.search).get("map")), R = o(() => e.flatMap((e) => e.swatchSets?.() ?? []), [e]), V = o(() => e.flatMap((e) => e.sidebarTabs?.() ?? []), [e]), H = o(() => e.flatMap((e) => e.roomPanelSections?.() ?? []), [e]), U = o(() => {
16452
16510
  for (let t of e) if (typeof t.renderLogo == "function") return t.renderLogo();
16453
- }, [e]), U = o(() => {
16511
+ }, [e]), ee = o(() => {
16454
16512
  let t = e.map((e) => e.toolbarActions).filter((e) => typeof e == "function");
16455
16513
  if (t.length !== 0) return (e) => t.reduce((e, t) => t(e), e);
16456
16514
  }, [e]);
16457
16515
  i(() => {
16458
- z.setState({ pluginSwatchSets: L });
16459
- }, [L]), i(() => {
16516
+ z.setState({ pluginSwatchSets: R });
16517
+ }, [R]), i(() => {
16460
16518
  e.length !== 0 && (async () => {
16461
16519
  for (let t of e) await t.onAppReady?.();
16462
16520
  })();
16463
16521
  }, []), i(() => {
16464
- import("./ScriptCodeEditor-Dtgis0Nh.js");
16522
+ import("./ScriptCodeEditor-BHx_AhoB.js");
16465
16523
  }, []);
16466
- let ee = s(u);
16524
+ let W = s(u);
16467
16525
  i(() => {
16468
- let t = ee.current;
16469
- if (ee.current = u, u && u !== t) for (let t of e) t.onMapOpened?.(u);
16526
+ let t = W.current;
16527
+ if (W.current = u, u && u !== t) for (let t of e) t.onMapOpened?.(u);
16470
16528
  else if (t && !u) for (let t of e) t.onMapClosed?.();
16471
16529
  }, [u]), i(() => {
16472
16530
  if (!u) {
@@ -16494,21 +16552,21 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16494
16552
  let t = Pe();
16495
16553
  Object.keys(t).length > 0 && Ie(e, t);
16496
16554
  let { currentAreaId: n, currentZ: r } = z.getState();
16497
- return n != null && e.setArea(n, r, Ta()), () => {
16555
+ return n != null && e.setArea(n, r, Na()), () => {
16498
16556
  e.destroy(), l.current = null;
16499
16557
  };
16500
16558
  }, [u]), i(() => {
16501
16559
  let e = l.current;
16502
16560
  if (!e || !g || _ == null) return;
16503
16561
  let t = z.getState().navigateTo;
16504
- t ? (z.setState({ navigateTo: null }), e.setAreaAt(_, v, t.mapX, t.mapY)) : e.setArea(_, v, Ta());
16562
+ t ? (z.setState({ navigateTo: null }), e.setAreaAt(_, v, t.mapX, t.mapY)) : e.setArea(_, v, Na());
16505
16563
  }, [
16506
16564
  _,
16507
16565
  v,
16508
16566
  g
16509
16567
  ]), i(() => {
16510
- !T || !l.current || (z.setState({ panRequest: null }), l.current.renderer.camera.panToMapPoint(T.mapX, T.mapY), l.current.refresh());
16511
- }, [T]), i(() => {
16568
+ !E || !l.current || (z.setState({ panRequest: null }), l.current.renderer.camera.panToMapPoint(E.mapX, E.mapY), l.current.refresh());
16569
+ }, [E]), i(() => {
16512
16570
  let e = a.current;
16513
16571
  if (!e) return;
16514
16572
  if (S) {
@@ -16546,12 +16604,19 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16546
16604
  let { map: e, loaded: t, undo: n, currentAreaId: r, currentZ: i, sessionId: a } = z.getState();
16547
16605
  if (!e || !t) return;
16548
16606
  let o = setTimeout(() => {
16549
- qr(t.fileName, e, n, r, i, a ?? void 0).then((e) => {
16607
+ Ma({
16608
+ fileName: t.fileName,
16609
+ map: e,
16610
+ undoStack: n,
16611
+ currentAreaId: r,
16612
+ currentZ: i,
16613
+ existingId: a ?? void 0
16614
+ }).then((e) => {
16550
16615
  a || z.setState({ sessionId: e });
16551
16616
  }).catch(console.error);
16552
16617
  }, 1500);
16553
16618
  return () => clearTimeout(o);
16554
- }, [w]), i(() => {
16619
+ }, [w, T]), i(() => {
16555
16620
  let e = (e) => {
16556
16621
  let t = e;
16557
16622
  if (!t) return !1;
@@ -16568,15 +16633,15 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16568
16633
  return;
16569
16634
  }
16570
16635
  if ((t.ctrlKey || t.metaKey) && t.key.toLowerCase() === "f") {
16571
- t.preventDefault(), j((e) => !e);
16636
+ t.preventDefault(), M((e) => !e);
16572
16637
  return;
16573
16638
  }
16574
16639
  if ((t.ctrlKey || t.metaKey) && !t.shiftKey && t.key.toLowerCase() === "z") {
16575
- t.preventDefault(), re();
16640
+ t.preventDefault(), ie();
16576
16641
  return;
16577
16642
  }
16578
16643
  if ((t.ctrlKey || t.metaKey) && (t.shiftKey && t.key.toLowerCase() === "z" || t.key.toLowerCase() === "y")) {
16579
- t.preventDefault(), ie();
16644
+ t.preventDefault(), G();
16580
16645
  return;
16581
16646
  }
16582
16647
  if ((t.ctrlKey || t.metaKey) && !t.shiftKey && t.key.toLowerCase() === "c") {
@@ -16588,7 +16653,7 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16588
16653
  return;
16589
16654
  }
16590
16655
  if ((t.ctrlKey || t.metaKey) && !t.shiftKey && t.key.toLowerCase() === "v") {
16591
- ne();
16656
+ re();
16592
16657
  return;
16593
16658
  }
16594
16659
  if ((t.ctrlKey || t.metaKey) && !t.shiftKey && t.key.toLowerCase() === "d") {
@@ -16608,7 +16673,7 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16608
16673
  kind: "room",
16609
16674
  ids: n.newIds
16610
16675
  },
16611
- status: Oa("duplicated", n)
16676
+ status: Ia("duplicated", n)
16612
16677
  });
16613
16678
  return;
16614
16679
  }
@@ -16627,7 +16692,7 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16627
16692
  return;
16628
16693
  }
16629
16694
  if (t.key === "Delete" || t.key === "Backspace") {
16630
- W();
16695
+ ne();
16631
16696
  return;
16632
16697
  }
16633
16698
  if (t.key === "g" || t.key === "G") {
@@ -16635,13 +16700,13 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16635
16700
  return;
16636
16701
  }
16637
16702
  if (t.key === "f" || t.key === "F") {
16638
- l.current?.renderer.fitArea(Ta());
16703
+ l.current?.renderer.fitArea(Na());
16639
16704
  return;
16640
16705
  }
16641
- if (Ea[t.key]) {
16706
+ if (Pa[t.key]) {
16642
16707
  let e = z.getState();
16643
16708
  e.pending?.kind === "customLine" && l.current && (qn(e.pending, l.current), z.bumpData()), z.setState({
16644
- activeTool: Ea[t.key],
16709
+ activeTool: Pa[t.key],
16645
16710
  pending: null
16646
16711
  });
16647
16712
  return;
@@ -16657,14 +16722,14 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16657
16722
  } });
16658
16723
  return;
16659
16724
  }
16660
- if (Da[t.key]) {
16725
+ if (Fa[t.key]) {
16661
16726
  let e = z.getState();
16662
16727
  if (e.activeTool !== "select" || !e.selection || !e.map) return;
16663
16728
  if (e.selection.kind === "label") {
16664
16729
  let { id: n, areaId: i } = e.selection, a = l.current?.reader.getLabelSnapshot(i, n);
16665
16730
  if (!a) return;
16666
16731
  t.preventDefault();
16667
- let o = (t.shiftKey ? 5 : 1) * e.gridStep, s = Da[t.key], c = s.dx * o, u = s.dy * o, d = [...a.pos], f = [
16732
+ let o = (t.shiftKey ? 5 : 1) * e.gridStep, s = Fa[t.key], c = s.dx * o, u = s.dy * o, d = [...a.pos], f = [
16668
16733
  a.pos[0] + c,
16669
16734
  a.pos[1] + u,
16670
16735
  a.pos[2]
@@ -16683,7 +16748,7 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16683
16748
  }
16684
16749
  if (e.selection.kind !== "room") return;
16685
16750
  t.preventDefault();
16686
- let n = (t.shiftKey ? 5 : 1) * e.gridStep, i = Da[t.key], a = i.dx * n, o = i.dy * n, s = [];
16751
+ let n = (t.shiftKey ? 5 : 1) * e.gridStep, i = Fa[t.key], a = i.dx * n, o = i.dy * n, s = [];
16687
16752
  for (let t of e.selection.ids) {
16688
16753
  let n = e.map.rooms[t];
16689
16754
  if (!n) continue;
@@ -16726,9 +16791,9 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16726
16791
  }
16727
16792
  };
16728
16793
  window.addEventListener("keydown", i), window.addEventListener("keyup", t), window.addEventListener("blur", n);
16729
- let a = () => l.current?.renderer.fitArea(Ta());
16730
- return window.addEventListener("editor:undo", re), window.addEventListener("editor:redo", ie), window.addEventListener("editor:fit", a), () => {
16731
- window.removeEventListener("keydown", i), window.removeEventListener("keyup", t), window.removeEventListener("blur", n), window.removeEventListener("editor:undo", re), window.removeEventListener("editor:redo", ie), window.removeEventListener("editor:fit", a);
16794
+ let a = () => l.current?.renderer.fitArea(Na());
16795
+ return window.addEventListener("editor:undo", ie), window.addEventListener("editor:redo", G), window.addEventListener("editor:fit", a), () => {
16796
+ window.removeEventListener("keydown", i), window.removeEventListener("keyup", t), window.removeEventListener("blur", n), window.removeEventListener("editor:undo", ie), window.removeEventListener("editor:redo", G), window.removeEventListener("editor:fit", a);
16732
16797
  };
16733
16798
  }, []), i(() => {
16734
16799
  let e = (e) => {
@@ -16742,7 +16807,7 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16742
16807
  window.removeEventListener("dragover", e), window.removeEventListener("drop", t);
16743
16808
  };
16744
16809
  }, []);
16745
- let W = () => {
16810
+ let ne = () => {
16746
16811
  let e = z.getState();
16747
16812
  if (!e.map) return;
16748
16813
  let t = e.selection;
@@ -16908,7 +16973,7 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16908
16973
  return;
16909
16974
  }
16910
16975
  }
16911
- }, ne = () => {
16976
+ }, re = () => {
16912
16977
  let e = z.getState();
16913
16978
  if (!e.map || !e.clipboard || e.currentAreaId == null) return;
16914
16979
  let t, n;
@@ -16929,12 +16994,12 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16929
16994
  kind: "room",
16930
16995
  ids: r.newIds
16931
16996
  },
16932
- status: Oa("pasted", r)
16997
+ status: Ia("pasted", r)
16933
16998
  }));
16934
- }, re = () => {
16999
+ }, ie = () => {
16935
17000
  let { changed: e, structural: t } = at(l.current);
16936
17001
  e && (l.current?.refresh(), t ? z.bumpStructure() : z.bumpData(), z.setState({ status: r("status.undone") }));
16937
- }, ie = () => {
17002
+ }, G = () => {
16938
17003
  let { changed: e, structural: t } = ot(l.current);
16939
17004
  e && (l.current?.refresh(), t ? z.bumpStructure() : z.bumpData(), z.setState({ status: r("status.redone") }));
16940
17005
  };
@@ -16951,44 +17016,44 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16951
17016
  !g && /* @__PURE__ */ p(ni, {}),
16952
17017
  /* @__PURE__ */ p(Me, {
16953
17018
  title: n,
16954
- logo: H,
16955
- transformActions: U,
16956
- onHelpClick: () => D(!0),
16957
- onLoadFromUrl: () => k(!0),
17019
+ logo: U,
17020
+ transformActions: ee,
17021
+ onHelpClick: () => O(!0),
17022
+ onLoadFromUrl: () => A(!0),
16958
17023
  onSave: (t) => {
16959
17024
  for (let n of e) n.onMapSave?.(t);
16960
17025
  },
16961
- onSearchClick: () => j((e) => !e),
16962
- onSettingsClick: () => P(!0)
17026
+ onSearchClick: () => M((e) => !e),
17027
+ onSettingsClick: () => F(!0)
16963
17028
  }),
16964
17029
  /* @__PURE__ */ p(Br, {
16965
17030
  sceneRef: l,
16966
- extraTabs: R,
16967
- pluginRoomSections: V
17031
+ extraTabs: V,
17032
+ pluginRoomSections: H
16968
17033
  })
16969
17034
  ]
16970
17035
  }),
16971
17036
  /* @__PURE__ */ p(Vr, { sceneRef: l }),
16972
17037
  h && /* @__PURE__ */ p(ri, { sceneRef: l }),
16973
17038
  e.map((e, n) => /* @__PURE__ */ p(t, { children: e.renderOverlay?.() }, n)),
16974
- A && g && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("div", {
17039
+ j && g && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("div", {
16975
17040
  style: {
16976
17041
  position: "fixed",
16977
17042
  inset: 0,
16978
17043
  zIndex: 399
16979
17044
  },
16980
- onMouseDown: () => j(!1)
16981
- }), /* @__PURE__ */ p(Ti, { onClose: () => j(!1) })] }),
17045
+ onMouseDown: () => M(!1)
17046
+ }), /* @__PURE__ */ p(Ti, { onClose: () => M(!1) })] }),
16982
17047
  /* @__PURE__ */ p(Ei, { sceneRef: l }),
16983
- M && g && /* @__PURE__ */ p(Re, {
16984
- onClose: () => P(!1),
17048
+ P && g && /* @__PURE__ */ p(Re, {
17049
+ onClose: () => F(!1),
16985
17050
  sceneRef: l
16986
17051
  }),
16987
- E && /* @__PURE__ */ p(ae, { onClose: () => D(!1) }),
16988
- (O || F) && /* @__PURE__ */ p(ze, {
16989
- initialUrl: F ?? void 0,
17052
+ D && /* @__PURE__ */ p(ae, { onClose: () => O(!1) }),
17053
+ (k || I) && /* @__PURE__ */ p(ze, {
17054
+ initialUrl: I ?? void 0,
16990
17055
  onClose: () => {
16991
- k(!1), I(null);
17056
+ A(!1), L(null);
16992
17057
  }
16993
17058
  })
16994
17059
  ]
@@ -16996,9 +17061,9 @@ function ka({ plugins: e = [], title: n = "Mudlet Map Editor" }) {
16996
17061
  }
16997
17062
  //#endregion
16998
17063
  //#region src/editor/mapBytes.ts
16999
- function Aa() {
17064
+ function Ra() {
17000
17065
  let { map: e } = z.getState();
17001
17066
  return e ? H(e) : null;
17002
17067
  }
17003
17068
  //#endregion
17004
- export { ka as App, Ae as LanguageSwitcher, Te as addTranslations, Ee as changeLanguage, De as getCurrentLanguage, Aa as getMapBytes, W as loadUrlIntoStore, X as pushCommand, z as store, B as useEditorState };
17069
+ export { La as App, Ae as LanguageSwitcher, Te as addTranslations, Ee as changeLanguage, De as getCurrentLanguage, Ra as getMapBytes, W as loadUrlIntoStore, X as pushCommand, z as store, B as useEditorState };
@@ -109,7 +109,7 @@ var n = /* @__PURE__ */ ((e) => (e[e.ES3 = 0] = "ES3", e[e.ES5 = 1] = "ES5", e[e
109
109
  onlyVisible: !1
110
110
  }, {}, {}, i);
111
111
  function s() {
112
- return import("./tsMode-J2Knw729.js");
112
+ return import("./tsMode-BnfSMFGJ.js");
113
113
  }
114
114
  e.onLanguage("typescript", () => s().then((e) => e.setupTypeScript(a))), e.onLanguage("javascript", () => s().then((e) => e.setupJavaScript(o)));
115
115
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { a as e, c as t, f as n, h as r, o as i, p as a } from "./editor.api2-PX2PsJx9.js";
2
- import { r as o } from "./monaco.contribution-CRzon75s.js";
2
+ import { r as o } from "./monaco.contribution-CoQcDhVH.js";
3
3
  //#region node_modules/monaco-editor/esm/vs/common/workers.js
4
4
  function s(e, t) {
5
5
  let n = globalThis.MonacoEnvironment;
@@ -66,7 +66,7 @@ var d = class {
66
66
  moduleId: "vs/language/typescript/tsWorker",
67
67
  createWorker: () => new Worker(new URL(
68
68
  /* @vite-ignore */
69
- "/assets/ts.worker-C20_IzgO.js",
69
+ "" + new URL("assets/ts.worker-BcKzzBCP.js", import.meta.url).href,
70
70
  "" + import.meta.url
71
71
  ), { type: "module" }),
72
72
  label: this._modeId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mudlet-map-editor",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "type": "module",
5
5
  "description": "Mudlet Map Editor",
6
6
  "keywords": [
@@ -52,7 +52,7 @@
52
52
  "konva": "^10.2.5",
53
53
  "monaco-editor": "^0.55.1",
54
54
  "mudlet-map-binary-reader": "^0.9.0",
55
- "mudlet-map-renderer": "0.42.1-konva",
55
+ "mudlet-map-renderer": "^2.3.1",
56
56
  "react": "^19.2.5",
57
57
  "react-dom": "^19.2.5",
58
58
  "react-i18next": "^17.0.6"