@eyeon/map 2.0.41 → 2.0.44

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.
Files changed (57) hide show
  1. package/dist/assets/MapViewer.css +1 -1
  2. package/dist/assets/index.css +1 -1
  3. package/dist/chunks/MapViewer.js +2668 -2515
  4. package/dist/chunks/MapViewer.js.map +1 -1
  5. package/dist/chunks/responsive.js +1715 -1579
  6. package/dist/chunks/responsive.js.map +1 -1
  7. package/dist/chunks/wheelZoom.js +160 -160
  8. package/dist/chunks/wheelZoom.js.map +1 -1
  9. package/dist/core/import/index.d.ts +7 -0
  10. package/dist/core/import/index.d.ts.map +1 -1
  11. package/dist/core/index.d.ts +1 -0
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/core/index.js +255 -246
  14. package/dist/core/outdoorDecoration.d.ts +3 -2
  15. package/dist/core/outdoorDecoration.d.ts.map +1 -1
  16. package/dist/core/routing/pathfinding.d.ts +7 -1
  17. package/dist/core/routing/pathfinding.d.ts.map +1 -1
  18. package/dist/core/types.d.ts +5 -0
  19. package/dist/core/types.d.ts.map +1 -1
  20. package/dist/core/verticalTransport.d.ts +37 -0
  21. package/dist/core/verticalTransport.d.ts.map +1 -0
  22. package/dist/core/websiteModal.d.ts +51 -9
  23. package/dist/core/websiteModal.d.ts.map +1 -1
  24. package/dist/editor/MapEditor.d.ts +8 -1
  25. package/dist/editor/MapEditor.d.ts.map +1 -1
  26. package/dist/editor/canvas/EditorCanvas.d.ts.map +1 -1
  27. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts +3 -1
  28. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts.map +1 -1
  29. package/dist/editor/connectorAssignments.d.ts +42 -5
  30. package/dist/editor/connectorAssignments.d.ts.map +1 -1
  31. package/dist/editor/index.css +200 -2
  32. package/dist/editor/index.js +4878 -4467
  33. package/dist/editor/index.js.map +1 -1
  34. package/dist/editor/labels.d.ts +21 -5
  35. package/dist/editor/labels.d.ts.map +1 -1
  36. package/dist/editor/panels/ClassicMapFooter.d.ts +8 -4
  37. package/dist/editor/panels/ClassicMapFooter.d.ts.map +1 -1
  38. package/dist/editor/panels/ConnectorAssign.d.ts +3 -1
  39. package/dist/editor/panels/ConnectorAssign.d.ts.map +1 -1
  40. package/dist/editor/panels/FloorsPanel.d.ts.map +1 -1
  41. package/dist/editor/panels/Inspector.d.ts +8 -3
  42. package/dist/editor/panels/Inspector.d.ts.map +1 -1
  43. package/dist/editor/panels/LeftRail.d.ts +2 -1
  44. package/dist/editor/panels/LeftRail.d.ts.map +1 -1
  45. package/dist/editor/panels/PreviewOverlay.d.ts +3 -1
  46. package/dist/editor/panels/PreviewOverlay.d.ts.map +1 -1
  47. package/dist/viewer/MapViewer.d.ts +5 -0
  48. package/dist/viewer/MapViewer.d.ts.map +1 -1
  49. package/dist/viewer/components/MapScene.d.ts +6 -1
  50. package/dist/viewer/components/MapScene.d.ts.map +1 -1
  51. package/dist/viewer/components/SvgVectorLayer.d.ts +6 -1
  52. package/dist/viewer/components/SvgVectorLayer.d.ts.map +1 -1
  53. package/dist/viewer/index.css +81 -2
  54. package/dist/viewer/index.js +4 -4
  55. package/dist/viewer/ui/WebsiteSidebar.d.ts +17 -2
  56. package/dist/viewer/ui/WebsiteSidebar.d.ts.map +1 -1
  57. package/package.json +1 -1
@@ -1,170 +1,170 @@
1
- import { bI as S, b9 as w, b7 as M, b2 as L, bb as _, bX as N, aT as O, B as T, cl as $, d as y, bt as v, at as k, bN as x, bL as F, k as W } from "./responsive.js";
2
- function V(e, d, r) {
3
- var i, o, u, a;
4
- const c = S(e), t = [];
5
- for (const n of c.elements) {
6
- if (!n.d || n.interactive || d != null && d.has(n.id) || /^parking[-_]?lines?(?:[-_]|$)/i.test(n.id) || n.id.toLowerCase().startsWith("route-path") || w(n.id) || M(n.id) || L(n.id) || _(n.id)) continue;
7
- const f = N(n.id, r), I = (f == null ? void 0 : f.fill) ?? (O(n.id) ? T(r) : (i = n.style) == null ? void 0 : i.fill), l = (f == null ? void 0 : f.stroke) ?? ((o = n.style) == null ? void 0 : o.stroke), m = (f == null ? void 0 : f.strokeWidth) ?? ((u = n.style) == null ? void 0 : u.strokeWidth);
8
- t.push({
9
- id: n.id,
10
- d: n.d,
11
- fill: I && I !== "none" ? I : void 0,
12
- stroke: l && l !== "none" ? l : void 0,
13
- strokeWidth: m,
14
- opacity: (a = n.style) == null ? void 0 : a.opacity
1
+ import { bL as S, bc as w, ba as M, b5 as _, be as L, b_ as O, aV as $, G as F, co as N, d as y, bw as b, av as k, bQ as x, bO as T, k as W } from "./responsive.js";
2
+ function U(e, f, c, s = !1) {
3
+ var t, u, l, o;
4
+ const n = S(e), i = [];
5
+ for (const r of n.elements) {
6
+ if (!r.d || r.interactive || r.inBackground && !s || f != null && f.has(r.id) || /^parking[-_]?lines?(?:[-_]|$)/i.test(r.id) || r.id.toLowerCase().startsWith("route-path") || w(r.id) || M(r.id) || _(r.id) || L(r.id)) continue;
7
+ const a = O(r.id, c), h = (a == null ? void 0 : a.fill) ?? ($(r.id) ? F(c) : (t = r.style) == null ? void 0 : t.fill), m = (a == null ? void 0 : a.stroke) ?? ((u = r.style) == null ? void 0 : u.stroke), d = (a == null ? void 0 : a.strokeWidth) ?? ((l = r.style) == null ? void 0 : l.strokeWidth);
8
+ i.push({
9
+ id: r.id,
10
+ d: r.d,
11
+ fill: h && h !== "none" ? h : void 0,
12
+ stroke: m && m !== "none" ? m : void 0,
13
+ strokeWidth: d,
14
+ opacity: (o = r.style) == null ? void 0 : o.opacity
15
15
  });
16
16
  }
17
- return $(t, (n) => n.id);
17
+ return N(i, (r) => r.id);
18
18
  }
19
- function P(e, d, r, c = y) {
20
- const t = e.filter((n) => r.includes(n.id));
21
- if (t.length < 2) return null;
22
- const i = t.reduce((n, f) => f.id < n.id ? f : n), o = [];
23
- for (const n of t)
24
- n.id !== i.id && k(n, i) <= c && o.push(n.id);
25
- if (o.length === 0) return null;
26
- const u = new Set(o), a = [];
27
- for (const n of d) {
28
- let f = !1;
29
- if (u.has(n.fromAnchorId) && (n.fromAnchorId = i.id, f = !0), u.has(n.toAnchorId) && (n.toAnchorId = i.id, f = !0), n.fromAnchorId === n.toAnchorId) {
30
- a.push(n.id);
19
+ function P(e, f, c, s = y) {
20
+ const n = e.filter((o) => c.includes(o.id));
21
+ if (n.length < 2) return null;
22
+ const i = n.reduce((o, r) => r.id < o.id ? r : o), t = [];
23
+ for (const o of n)
24
+ o.id !== i.id && k(o, i) <= s && t.push(o.id);
25
+ if (t.length === 0) return null;
26
+ const u = new Set(t), l = [];
27
+ for (const o of f) {
28
+ let r = !1;
29
+ if (u.has(o.fromAnchorId) && (o.fromAnchorId = i.id, r = !0), u.has(o.toAnchorId) && (o.toAnchorId = i.id, r = !0), o.fromAnchorId === o.toAnchorId) {
30
+ l.push(o.id);
31
31
  continue;
32
32
  }
33
- f && a.push(n.id);
33
+ r && l.push(o.id);
34
34
  }
35
35
  return {
36
36
  survivingAnchorId: i.id,
37
- removedAnchorIds: o,
38
- rewiredEdgeIds: a
37
+ removedAnchorIds: t,
38
+ rewiredEdgeIds: l
39
39
  };
40
40
  }
41
- function D(e, d = y) {
42
- const r = [], c = /* @__PURE__ */ new Set();
43
- for (let t = 0; t < e.length; t++) {
44
- if (c.has(e[t].id)) continue;
45
- const i = [e[t].id];
46
- for (let o = t + 1; o < e.length; o++)
47
- c.has(e[o].id) || e[t].levelId === e[o].levelId && k(e[t], e[o]) <= d && (i.push(e[o].id), c.add(e[o].id));
48
- i.length > 1 && (c.add(e[t].id), r.push(i));
41
+ function D(e, f = y) {
42
+ const c = [], s = /* @__PURE__ */ new Set();
43
+ for (let n = 0; n < e.length; n++) {
44
+ if (s.has(e[n].id)) continue;
45
+ const i = [e[n].id];
46
+ for (let t = n + 1; t < e.length; t++)
47
+ s.has(e[t].id) || e[n].levelId === e[t].levelId && k(e[n], e[t]) <= f && (i.push(e[t].id), s.add(e[t].id));
48
+ i.length > 1 && (s.add(e[n].id), c.push(i));
49
49
  }
50
- return r;
50
+ return c;
51
51
  }
52
- function R(e, d, r = y) {
53
- const c = e.slice(), t = d.map((n) => ({ ...n })), i = /* @__PURE__ */ new Set();
54
- for (const n of D(c, r)) {
55
- const f = P(c, t, n, r);
56
- if (f)
57
- for (const I of f.removedAnchorIds) i.add(I);
52
+ function R(e, f, c = y) {
53
+ const s = e.slice(), n = f.map((o) => ({ ...o })), i = /* @__PURE__ */ new Set();
54
+ for (const o of D(s, c)) {
55
+ const r = P(s, n, o, c);
56
+ if (r)
57
+ for (const a of r.removedAnchorIds) i.add(a);
58
58
  }
59
- const o = c.filter((n) => !i.has(n.id)), u = /* @__PURE__ */ new Set(), a = [];
60
- for (const n of t) {
61
- if (i.has(n.fromAnchorId) || i.has(n.toAnchorId) || n.fromAnchorId === n.toAnchorId) continue;
62
- const f = Math.min(n.fromAnchorId, n.toAnchorId), I = Math.max(n.fromAnchorId, n.toAnchorId), l = `${f}|${I}`;
63
- u.has(l) || (u.add(l), a.push(n));
59
+ const t = s.filter((o) => !i.has(o.id)), u = /* @__PURE__ */ new Set(), l = [];
60
+ for (const o of n) {
61
+ if (i.has(o.fromAnchorId) || i.has(o.toAnchorId) || o.fromAnchorId === o.toAnchorId) continue;
62
+ const r = Math.min(o.fromAnchorId, o.toAnchorId), a = Math.max(o.fromAnchorId, o.toAnchorId), h = `${r}|${a}`;
63
+ u.has(h) || (u.add(h), l.push(o));
64
64
  }
65
- return { anchors: o, edges: a };
65
+ return { anchors: t, edges: l };
66
66
  }
67
- function X(e, d, r, c = y) {
68
- let t = null;
69
- for (const o of d) {
70
- const u = v(e, o);
71
- u && (!t || u.distance < t.distance) && (t = { point: u.point, distance: u.distance });
67
+ function Y(e, f, c, s = y) {
68
+ let n = null;
69
+ for (const t of f) {
70
+ const u = b(e, t);
71
+ u && (!n || u.distance < n.distance) && (n = { point: u.point, distance: u.distance });
72
72
  }
73
- if (!t) return null;
74
- const i = r.find(
75
- (o) => o.levelId === e.levelId && k(o, t.point) <= c
73
+ if (!n) return null;
74
+ const i = c.find(
75
+ (t) => t.levelId === e.levelId && k(t, n.point) <= s
76
76
  );
77
77
  return {
78
78
  unitAnchorId: e.id,
79
- junctionAnchor: i ? { x: i.x, y: i.y, existingId: i.id } : { x: t.point.x, y: t.point.y },
79
+ junctionAnchor: i ? { x: i.x, y: i.y, existingId: i.id } : { x: n.point.x, y: n.point.y },
80
80
  edge: {
81
81
  fromAnchorId: e.id,
82
82
  toAnchorId: i == null ? void 0 : i.id
83
83
  }
84
84
  };
85
85
  }
86
- function Y(e, d, r, c) {
87
- if (r.length === 0) return null;
88
- const t = r.flat();
89
- if (t.length === 0) return null;
90
- let i = 0, o = 0;
91
- for (const n of t)
92
- i += n.x, o += n.y;
93
- const u = { x: i / t.length, y: o / t.length }, a = x(u, r) ? u : t[0];
86
+ function X(e, f, c, s) {
87
+ if (c.length === 0) return null;
88
+ const n = c.flat();
89
+ if (n.length === 0) return null;
90
+ let i = 0, t = 0;
91
+ for (const o of n)
92
+ i += o.x, t += o.y;
93
+ const u = { x: i / n.length, y: t / n.length }, l = x(u, c) ? u : n[0];
94
94
  return {
95
- id: c,
96
- levelId: d,
95
+ id: s,
96
+ levelId: f,
97
97
  shapeId: e,
98
98
  kind: "unit",
99
- x: a.x,
100
- y: a.y,
99
+ x: l.x,
100
+ y: l.y,
101
101
  connectorId: null
102
102
  };
103
103
  }
104
- function q(e, d, r = 20) {
104
+ function q(e, f, c = 20) {
105
105
  if (e.length === 0)
106
106
  return { anchors: [], edges: [] };
107
- let c = 1 / 0, t = 1 / 0, i = -1 / 0, o = -1 / 0;
108
- for (const s of e)
109
- for (const h of s)
110
- c = Math.min(c, h.x), t = Math.min(t, h.y), i = Math.max(i, h.x), o = Math.max(o, h.y);
111
- const u = Math.max(1, Math.ceil((i - c) / r)), a = Math.max(1, Math.ceil((o - t) / r)), n = [];
112
- for (let s = 0; s < a; s++)
113
- for (let h = 0; h < u; h++) {
114
- const p = c + (h + 0.5) * r, g = t + (s + 0.5) * r, A = { x: p, y: g };
115
- x(A, e) && (d.length > 0 && x(A, d) || n.push({ key: `${h},${s}`, x: p, y: g, col: h, row: s }));
107
+ let s = 1 / 0, n = 1 / 0, i = -1 / 0, t = -1 / 0;
108
+ for (const d of e)
109
+ for (const I of d)
110
+ s = Math.min(s, I.x), n = Math.min(n, I.y), i = Math.max(i, I.x), t = Math.max(t, I.y);
111
+ const u = Math.max(1, Math.ceil((i - s) / c)), l = Math.max(1, Math.ceil((t - n) / c)), o = [];
112
+ for (let d = 0; d < l; d++)
113
+ for (let I = 0; I < u; I++) {
114
+ const p = s + (I + 0.5) * c, g = n + (d + 0.5) * c, A = { x: p, y: g };
115
+ x(A, e) && (f.length > 0 && x(A, f) || o.push({ key: `${I},${d}`, x: p, y: g, col: I, row: d }));
116
116
  }
117
- const f = new Map(n.map((s) => [s.key, s])), I = n.map((s) => ({
118
- tempId: s.key,
119
- x: s.x,
120
- y: s.y,
117
+ const r = new Map(o.map((d) => [d.key, d])), a = o.map((d) => ({
118
+ tempId: d.key,
119
+ x: d.x,
120
+ y: d.y,
121
121
  kind: "junction"
122
- })), l = [], m = /* @__PURE__ */ new Set();
123
- for (const s of n) {
124
- const h = [
125
- [s.col + 1, s.row],
126
- [s.col, s.row + 1]
122
+ })), h = [], m = /* @__PURE__ */ new Set();
123
+ for (const d of o) {
124
+ const I = [
125
+ [d.col + 1, d.row],
126
+ [d.col, d.row + 1]
127
127
  ];
128
- for (const [p, g] of h) {
128
+ for (const [p, g] of I) {
129
129
  const A = `${p},${g}`;
130
- if (!f.has(A)) continue;
131
- const b = s.key < A ? `${s.key}|${A}` : `${A}|${s.key}`;
132
- m.has(b) || (m.add(b), l.push({ fromTempId: s.key, toTempId: A }));
130
+ if (!r.has(A)) continue;
131
+ const v = d.key < A ? `${d.key}|${A}` : `${A}|${d.key}`;
132
+ m.has(v) || (m.add(v), h.push({ fromTempId: d.key, toTempId: A }));
133
133
  }
134
134
  }
135
- return { anchors: I, edges: l };
135
+ return { anchors: a, edges: h };
136
136
  }
137
- function Z(e, d, r, c, t = y) {
138
- const i = [], o = [];
139
- let u = c;
140
- const a = (f, I) => {
141
- const l = i.find(
142
- (s) => k(s, { x: f, y: I }) <= t
137
+ function Q(e, f, c, s, n = y) {
138
+ const i = [], t = [];
139
+ let u = s;
140
+ const l = (r, a) => {
141
+ const h = i.find(
142
+ (d) => k(d, { x: r, y: a }) <= n
143
143
  );
144
- if (l) return l.id;
144
+ if (h) return h.id;
145
145
  const m = u++;
146
146
  return i.push({
147
147
  id: m,
148
- levelId: d,
148
+ levelId: f,
149
149
  shapeId: null,
150
150
  kind: "junction",
151
- x: f,
152
- y: I,
151
+ x: r,
152
+ y: a,
153
153
  connectorId: null
154
154
  }), m;
155
155
  };
156
- for (const f of e) {
157
- const I = F(f);
158
- for (const l of I)
159
- for (let m = 0; m < l.length - 1; m++) {
160
- const s = a(l[m].x, l[m].y), h = a(l[m + 1].x, l[m + 1].y);
161
- s === h || o.some(
162
- (g) => g.fromAnchorId === s && g.toAnchorId === h || g.fromAnchorId === h && g.toAnchorId === s
163
- ) || o.push({
156
+ for (const r of e) {
157
+ const a = T(r);
158
+ for (const h of a)
159
+ for (let m = 0; m < h.length - 1; m++) {
160
+ const d = l(h[m].x, h[m].y), I = l(h[m + 1].x, h[m + 1].y);
161
+ d === I || t.some(
162
+ (g) => g.fromAnchorId === d && g.toAnchorId === I || g.fromAnchorId === I && g.toAnchorId === d
163
+ ) || t.push({
164
164
  id: u++,
165
- mapId: r,
166
- fromAnchorId: s,
167
- toAnchorId: h,
165
+ mapId: c,
166
+ fromAnchorId: d,
167
+ toAnchorId: I,
168
168
  weight: null,
169
169
  directed: !1,
170
170
  accessible: !0,
@@ -172,8 +172,8 @@ function Z(e, d, r, c, t = y) {
172
172
  });
173
173
  }
174
174
  }
175
- const n = R(i, o, t);
176
- return { anchors: n.anchors, edges: n.edges, nextId: u };
175
+ const o = R(i, t, n);
176
+ return { anchors: o.anchors, edges: o.edges, nextId: u };
177
177
  }
178
178
  function C(e) {
179
179
  return e === "entrance" ? "entrance" : e === "connector" ? "connector" : "unit";
@@ -181,65 +181,65 @@ function C(e) {
181
181
  function K(e) {
182
182
  return e === "entrance" ? "entrance_link" : "unit_link";
183
183
  }
184
- function H(e, d, r) {
185
- if (x(e, d)) return "inside";
186
- for (const c of d) {
187
- if (c.length < 2) continue;
188
- const t = [...c, c[0]], i = v(e, t);
189
- if (i && i.distance <= r) return "near";
184
+ function G(e, f, c) {
185
+ if (x(e, f)) return "inside";
186
+ for (const s of f) {
187
+ if (s.length < 2) continue;
188
+ const n = [...s, s[0]], i = b(e, n);
189
+ if (i && i.distance <= c) return "near";
190
190
  }
191
191
  return null;
192
192
  }
193
- function j(e, d, r) {
194
- let c = null;
195
- for (const t of d) {
196
- if (!W.includes(t.kind)) continue;
197
- const i = t.geometry.polygons ?? [];
193
+ function H(e, f, c) {
194
+ let s = null;
195
+ for (const n of f) {
196
+ if (!W.includes(n.kind)) continue;
197
+ const i = n.geometry.polygons ?? [];
198
198
  if (i.length === 0) continue;
199
- const o = H(e, i, r);
200
- if (o === "inside") return t;
201
- o === "near" && c == null && (c = t);
199
+ const t = G(e, i, c);
200
+ if (t === "inside") return n;
201
+ t === "near" && s == null && (s = n);
202
202
  }
203
- return c;
203
+ return s;
204
204
  }
205
- function J(e, d, r, c = y * 3) {
206
- const t = /* @__PURE__ */ new Map();
207
- for (const o of d)
208
- t.set(o.fromAnchorId, (t.get(o.fromAnchorId) ?? 0) + 1), t.set(o.toAnchorId, (t.get(o.toAnchorId) ?? 0) + 1);
205
+ function Z(e, f, c, s = y * 3) {
206
+ const n = /* @__PURE__ */ new Map();
207
+ for (const t of f)
208
+ n.set(t.fromAnchorId, (n.get(t.fromAnchorId) ?? 0) + 1), n.set(t.toAnchorId, (n.get(t.toAnchorId) ?? 0) + 1);
209
209
  let i = 0;
210
- for (const o of e) {
211
- if (o.shapeId != null) continue;
212
- const u = j(o, r, c);
213
- if (!u || (o.shapeId = u.id, o.kind = C(u.kind), i += 1, (t.get(o.id) ?? 0) > 1)) continue;
214
- const a = K(o.kind);
215
- for (const n of d)
216
- (n.fromAnchorId === o.id || n.toAnchorId === o.id) && (n.kind = a);
210
+ for (const t of e) {
211
+ if (t.shapeId != null) continue;
212
+ const u = H(t, c, s);
213
+ if (!u || (t.shapeId = u.id, t.kind = C(u.kind), i += 1, (n.get(t.id) ?? 0) > 1)) continue;
214
+ const l = K(t.kind);
215
+ for (const o of f)
216
+ (o.fromAnchorId === t.id || o.toAnchorId === t.id) && (o.kind = l);
217
217
  }
218
218
  return i;
219
219
  }
220
- const B = 0.95, E = 1;
221
- function G(e = E) {
222
- return Math.pow(B, e);
220
+ const V = 0.95, E = 1;
221
+ function j(e = E) {
222
+ return Math.pow(V, e);
223
223
  }
224
- function Q(e, d, r) {
225
- if (d === 0) return e;
226
- const c = G((r == null ? void 0 : r.zoomSpeed) ?? E), t = d < 0 ? e / c : e * c, i = (r == null ? void 0 : r.min) ?? Number.NEGATIVE_INFINITY, o = (r == null ? void 0 : r.max) ?? Number.POSITIVE_INFINITY;
227
- return Math.min(o, Math.max(i, t));
224
+ function J(e, f, c) {
225
+ if (f === 0) return e;
226
+ const s = j((c == null ? void 0 : c.zoomSpeed) ?? E), n = f < 0 ? e / s : e * s, i = (c == null ? void 0 : c.min) ?? Number.NEGATIVE_INFINITY, t = (c == null ? void 0 : c.max) ?? Number.POSITIVE_INFINITY;
227
+ return Math.min(t, Math.max(i, n));
228
228
  }
229
229
  export {
230
- B as W,
230
+ V as W,
231
231
  E as a,
232
- J as b,
233
- X as c,
232
+ Z as b,
233
+ Y as c,
234
234
  q as d,
235
235
  R as e,
236
236
  D as f,
237
- G as g,
238
- Z as i,
239
- Q as n,
240
- V as o,
237
+ j as g,
238
+ Q as i,
239
+ J as n,
240
+ U as o,
241
241
  C as r,
242
- Y as u,
242
+ X as u,
243
243
  P as w
244
244
  };
245
245
  //# sourceMappingURL=wheelZoom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wheelZoom.js","sources":["../../src/core/outdoorDecoration.ts","../../src/core/routing/graph-tools.ts","../../src/core/wheelZoom.ts"],"sourcesContent":["import {\n parseSvgString,\n isInteractiveGroupLabel,\n isRouteFolderLabel,\n isRoutePathLabel,\n isStoreFolderLabel,\n} from './import';\nimport { amenityHouseFill, isAmenityLayerId } from './shapeFill';\nimport {\n resolveLayerStyle,\n sortByOutdoorSvgPaintOrder,\n type StaticLayerTheme,\n} from './layerStyles';\n\nexport interface OutdoorDecorationPath {\n id: string;\n d: string;\n fill?: string;\n stroke?: string;\n strokeWidth?: number;\n opacity?: number;\n}\n\n/**\n * Paths the assign viewer draws from the live outdoor SVG: house-style\n * decoration (green area, parking lanes, icons) and any other\n * non-interactive art. Interactive / store folders stay out — those are\n * `cm_shapes` rows.\n */\nexport function outdoorDecorationFromSvg(\n svgText: string,\n suppressIds?: ReadonlySet<string>,\n theme?: StaticLayerTheme | null,\n): OutdoorDecorationPath[] {\n const parsed = parseSvgString(svgText);\n const out: OutdoorDecorationPath[] = [];\n for (const el of parsed.elements) {\n if (!el.d) continue;\n if (el.interactive) continue;\n if (suppressIds?.has(el.id)) continue;\n if (/^parking[-_]?lines?(?:[-_]|$)/i.test(el.id)) continue;\n if (el.id.toLowerCase().startsWith('route-path')) continue;\n if (isRoutePathLabel(el.id) || isRouteFolderLabel(el.id)) continue;\n if (isInteractiveGroupLabel(el.id) || isStoreFolderLabel(el.id)) continue;\n\n const layer = resolveLayerStyle(el.id, theme);\n const fill =\n layer?.fill ??\n (isAmenityLayerId(el.id) ? amenityHouseFill(theme) : el.style?.fill);\n const stroke = layer?.stroke ?? el.style?.stroke;\n const strokeWidth = layer?.strokeWidth ?? el.style?.strokeWidth;\n out.push({\n id: el.id,\n d: el.d,\n fill: fill && fill !== 'none' ? fill : undefined,\n stroke: stroke && stroke !== 'none' ? stroke : undefined,\n strokeWidth,\n opacity: el.style?.opacity,\n });\n }\n // Parking lanes move under green areas. Later special shapes stay on top.\n return sortByOutdoorSvgPaintOrder(out, (item) => item.id);\n}\n","import type {\n AnchorKind,\n AutoConnectResult,\n CmAnchor,\n CmRouteEdge,\n ShapeGeometry,\n ShapeKind,\n SkeletonSuggestion,\n Vec2,\n WeldResult,\n} from '../types';\nimport { DEFAULT_WELD_TOLERANCE, INTERACTIVE_SHAPE_KINDS } from '../types';\nimport {\n distance,\n nearestPointOnPolyline,\n pathToPolygons,\n pointInPolygons,\n} from '../geometry';\n\nexport interface AnchorLike {\n id: number;\n x: number;\n y: number;\n levelId: number;\n shapeId?: number | null;\n kind?: string;\n}\n\nexport interface EdgeLike {\n id: number;\n fromAnchorId: number;\n toAnchorId: number;\n}\n\n/**\n * Weld anchors within tolerance into the surviving (lowest id) anchor.\n * Rewires edges that referenced removed anchors.\n */\nexport function weldAnchors(\n anchors: AnchorLike[],\n edges: EdgeLike[],\n candidateIds: number[],\n tolerance = DEFAULT_WELD_TOLERANCE,\n): WeldResult | null {\n const candidates = anchors.filter((a) => candidateIds.includes(a.id));\n if (candidates.length < 2) return null;\n\n // Cluster by proximity from the first candidate's position centroid of group\n const surviving = candidates.reduce((min, a) => (a.id < min.id ? a : min));\n const removed: number[] = [];\n\n for (const a of candidates) {\n if (a.id === surviving.id) continue;\n if (distance(a, surviving) <= tolerance) {\n removed.push(a.id);\n }\n }\n\n if (removed.length === 0) return null;\n\n const removedSet = new Set(removed);\n const rewired: number[] = [];\n\n for (const edge of edges) {\n let changed = false;\n if (removedSet.has(edge.fromAnchorId)) {\n edge.fromAnchorId = surviving.id;\n changed = true;\n }\n if (removedSet.has(edge.toAnchorId)) {\n edge.toAnchorId = surviving.id;\n changed = true;\n }\n // Drop self-loops\n if (edge.fromAnchorId === edge.toAnchorId) {\n rewired.push(edge.id);\n continue;\n }\n if (changed) rewired.push(edge.id);\n }\n\n return {\n survivingAnchorId: surviving.id,\n removedAnchorIds: removed,\n rewiredEdgeIds: rewired,\n };\n}\n\n/**\n * Find all pairs of anchors within tolerance that should be welded.\n */\nexport function findWeldCandidates(\n anchors: AnchorLike[],\n tolerance = DEFAULT_WELD_TOLERANCE,\n): number[][] {\n const groups: number[][] = [];\n const used = new Set<number>();\n\n for (let i = 0; i < anchors.length; i++) {\n if (used.has(anchors[i].id)) continue;\n const group = [anchors[i].id];\n for (let j = i + 1; j < anchors.length; j++) {\n if (used.has(anchors[j].id)) continue;\n if (\n anchors[i].levelId === anchors[j].levelId &&\n distance(anchors[i], anchors[j]) <= tolerance\n ) {\n group.push(anchors[j].id);\n used.add(anchors[j].id);\n }\n }\n if (group.length > 1) {\n used.add(anchors[i].id);\n groups.push(group);\n }\n }\n return groups;\n}\n\n/**\n * Merge coincident anchors and drop overlapping undirected edges.\n * Two SVG imports of the same ROUTES layer stack a second copy on top of\n * the first — dragging one junction then leaves the twin behind.\n */\nexport function collapseDuplicateRouteGraph<\n A extends AnchorLike,\n E extends EdgeLike,\n>(\n anchors: A[],\n edges: E[],\n tolerance = DEFAULT_WELD_TOLERANCE,\n): { anchors: A[]; edges: E[] } {\n const nextAnchors = anchors.slice();\n const nextEdges = edges.map((edge) => ({ ...edge }));\n const removed = new Set<number>();\n for (const group of findWeldCandidates(nextAnchors, tolerance)) {\n const result = weldAnchors(nextAnchors, nextEdges, group, tolerance);\n if (!result) continue;\n for (const id of result.removedAnchorIds) removed.add(id);\n }\n const alive = nextAnchors.filter((anchor) => !removed.has(anchor.id));\n const seen = new Set<string>();\n const uniqueEdges: E[] = [];\n for (const edge of nextEdges) {\n if (removed.has(edge.fromAnchorId) || removed.has(edge.toAnchorId)) continue;\n if (edge.fromAnchorId === edge.toAnchorId) continue;\n const lo = Math.min(edge.fromAnchorId, edge.toAnchorId);\n const hi = Math.max(edge.fromAnchorId, edge.toAnchorId);\n const key = `${lo}|${hi}`;\n if (seen.has(key)) continue;\n seen.add(key);\n uniqueEdges.push(edge);\n }\n return { anchors: alive, edges: uniqueEdges };\n}\n\n/**\n * Auto-connect a unit anchor to the nearest walkable segment via perpendicular projection.\n */\nexport function autoConnectUnitAnchor(\n unitAnchor: AnchorLike,\n walkablePolylines: Vec2[][],\n existingJunctions: AnchorLike[],\n weldTolerance = DEFAULT_WELD_TOLERANCE,\n): AutoConnectResult | null {\n let best: { point: Vec2; distance: number } | null = null;\n\n for (const line of walkablePolylines) {\n const hit = nearestPointOnPolyline(unitAnchor, line);\n if (hit && (!best || hit.distance < best.distance)) {\n best = { point: hit.point, distance: hit.distance };\n }\n }\n\n if (!best) return null;\n\n // Reuse existing junction if within weld tolerance\n const existing = existingJunctions.find(\n (j) =>\n j.levelId === unitAnchor.levelId &&\n distance(j, best!.point) <= weldTolerance,\n );\n\n return {\n unitAnchorId: unitAnchor.id,\n junctionAnchor: existing\n ? { x: existing.x, y: existing.y, existingId: existing.id }\n : { x: best.point.x, y: best.point.y },\n edge: {\n fromAnchorId: unitAnchor.id,\n toAnchorId: existing?.id,\n },\n };\n}\n\n/**\n * Place a unit anchor at the centroid of a shape's polygons, if the point lies inside.\n */\nexport function unitAnchorFromShape(\n shapeId: number,\n levelId: number,\n polygons: Vec2[][],\n tempId: number,\n): CmAnchor | null {\n if (polygons.length === 0) return null;\n const flat = polygons.flat();\n if (flat.length === 0) return null;\n\n let sx = 0;\n let sy = 0;\n for (const p of flat) {\n sx += p.x;\n sy += p.y;\n }\n const c = { x: sx / flat.length, y: sy / flat.length };\n\n // Prefer centroid if inside; otherwise use first polygon's average of extremes\n const point = pointInPolygons(c, polygons) ? c : flat[0];\n\n return {\n id: tempId,\n levelId,\n shapeId,\n kind: 'unit',\n x: point.x,\n y: point.y,\n connectorId: null,\n };\n}\n\n/**\n * Build a simple medial-axis-ish skeleton from walkable polygons minus voids.\n * This is a pragmatic approximation: sample a grid inside walkable, reject void cells,\n * connect adjacent free cells into a sparse graph, then prune to a polyline network.\n */\nexport function buildAutoSkeleton(\n walkablePolygons: Vec2[][],\n voidPolygons: Vec2[][],\n cellSize = 20,\n): SkeletonSuggestion {\n if (walkablePolygons.length === 0) {\n return { anchors: [], edges: [] };\n }\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const poly of walkablePolygons) {\n for (const p of poly) {\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n }\n\n const cols = Math.max(1, Math.ceil((maxX - minX) / cellSize));\n const rows = Math.max(1, Math.ceil((maxY - minY) / cellSize));\n const free: Array<{ key: string; x: number; y: number; col: number; row: number }> = [];\n\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const x = minX + (col + 0.5) * cellSize;\n const y = minY + (row + 0.5) * cellSize;\n const pt = { x, y };\n if (!pointInPolygons(pt, walkablePolygons)) continue;\n if (voidPolygons.length > 0 && pointInPolygons(pt, voidPolygons)) continue;\n free.push({ key: `${col},${row}`, x, y, col, row });\n }\n }\n\n const byKey = new Map(free.map((c) => [c.key, c]));\n const anchors = free.map((c) => ({\n tempId: c.key,\n x: c.x,\n y: c.y,\n kind: 'junction' as const,\n }));\n\n const edges: Array<{ fromTempId: string; toTempId: string }> = [];\n const seen = new Set<string>();\n\n for (const cell of free) {\n const neighbors = [\n [cell.col + 1, cell.row],\n [cell.col, cell.row + 1],\n ];\n for (const [nc, nr] of neighbors) {\n const nk = `${nc},${nr}`;\n if (!byKey.has(nk)) continue;\n const edgeKey = cell.key < nk ? `${cell.key}|${nk}` : `${nk}|${cell.key}`;\n if (seen.has(edgeKey)) continue;\n seen.add(edgeKey);\n edges.push({ fromTempId: cell.key, toTempId: nk });\n }\n }\n\n return { anchors, edges };\n}\n\n/**\n * Convert ROUTES-group SVG line endpoints into welded anchors + edges.\n * This is the key converter step that repairs coincident-but-disconnected joins.\n *\n * Anchors land in raw SVG user space (Y down), the same space as shape\n * geometry. There is intentionally no viewbox-height flip here — mirroring\n * routes without mirroring shapes would silently desynchronise the two.\n */\nexport function importRoutePaths(\n pathDs: string[],\n levelId: number,\n mapId: number,\n startId: number,\n weldTolerance = DEFAULT_WELD_TOLERANCE,\n): { anchors: CmAnchor[]; edges: CmRouteEdge[]; nextId: number } {\n const anchors: CmAnchor[] = [];\n const edges: CmRouteEdge[] = [];\n let nextId = startId;\n\n const findOrCreate = (x: number, y: number): number => {\n const existing = anchors.find(\n (a) => distance(a, { x, y }) <= weldTolerance,\n );\n if (existing) return existing.id;\n const id = nextId++;\n anchors.push({\n id,\n levelId,\n shapeId: null,\n kind: 'junction',\n x,\n y,\n connectorId: null,\n });\n return id;\n };\n\n for (const d of pathDs) {\n const polys = pathToPolygons(d);\n for (const poly of polys) {\n for (let i = 0; i < poly.length - 1; i++) {\n const a = findOrCreate(poly[i].x, poly[i].y);\n const b = findOrCreate(poly[i + 1].x, poly[i + 1].y);\n if (a === b) continue;\n // Avoid duplicate edges\n const dup = edges.some(\n (e) =>\n (e.fromAnchorId === a && e.toAnchorId === b) ||\n (e.fromAnchorId === b && e.toAnchorId === a),\n );\n if (dup) continue;\n edges.push({\n id: nextId++,\n mapId,\n fromAnchorId: a,\n toAnchorId: b,\n weight: null,\n directed: false,\n accessible: true,\n kind: 'walk',\n });\n }\n }\n }\n\n const collapsed = collapseDuplicateRouteGraph(anchors, edges, weldTolerance);\n return { anchors: collapsed.anchors, edges: collapsed.edges, nextId };\n}\n\nexport function routeAnchorKindForShape(kind: ShapeKind): AnchorKind {\n if (kind === 'entrance') return 'entrance';\n if (kind === 'connector') return 'connector';\n return 'unit';\n}\n\nfunction routeLinkKind(kind: AnchorKind): CmRouteEdge['kind'] {\n return kind === 'entrance' ? 'entrance_link' : 'unit_link';\n}\n\n/** `inside` matches v1's store-mesh hit; `near` is a door-step fallback. */\nfunction pointOnPolygons(\n point: Vec2,\n polygons: Vec2[][],\n tolerance: number,\n): 'inside' | 'near' | null {\n if (pointInPolygons(point, polygons)) return 'inside';\n for (const poly of polygons) {\n if (poly.length < 2) continue;\n const closed = [...poly, poly[0]];\n const hit = nearestPointOnPolyline(point, closed);\n if (hit && hit.distance <= tolerance) return 'near';\n }\n return null;\n}\n\nexport interface AttachableImportShape {\n id: number;\n kind: ShapeKind;\n geometry: Pick<ShapeGeometry, 'polygons'>;\n}\n\nfunction shapeUnderImportedAnchor(\n point: Vec2,\n shapes: AttachableImportShape[],\n insideTolerance: number,\n): AttachableImportShape | null {\n let near: AttachableImportShape | null = null;\n for (const shape of shapes) {\n if (!INTERACTIVE_SHAPE_KINDS.includes(shape.kind)) continue;\n const polys = shape.geometry.polygons ?? [];\n if (polys.length === 0) continue;\n const hit = pointOnPolygons(point, polys, insideTolerance);\n if (hit === 'inside') return shape;\n if (hit === 'near' && near == null) near = shape;\n }\n return near;\n}\n\n/**\n * Check every imported route vertex. If it falls inside (or on) a store /\n * amenity / kiosk / connector, it becomes that shape's orange destination.\n * A shape may own any number of those points so pathfinding can leave from\n * the nearest door. Corridor through-points keep `walk` edges; leaf stubs\n * become `unit_link`.\n */\nexport function attachImportedRouteAnchors(\n anchors: CmAnchor[],\n edges: CmRouteEdge[],\n shapes: AttachableImportShape[],\n insideTolerance = DEFAULT_WELD_TOLERANCE * 3,\n): number {\n const degree = new Map<number, number>();\n for (const edge of edges) {\n degree.set(edge.fromAnchorId, (degree.get(edge.fromAnchorId) ?? 0) + 1);\n degree.set(edge.toAnchorId, (degree.get(edge.toAnchorId) ?? 0) + 1);\n }\n\n let attached = 0;\n for (const anchor of anchors) {\n if (anchor.shapeId != null) continue;\n const shape = shapeUnderImportedAnchor(anchor, shapes, insideTolerance);\n if (!shape) continue;\n anchor.shapeId = shape.id;\n anchor.kind = routeAnchorKindForShape(shape.kind);\n attached += 1;\n if ((degree.get(anchor.id) ?? 0) > 1) continue;\n const linkKind = routeLinkKind(anchor.kind);\n for (const edge of edges) {\n if (edge.fromAnchorId === anchor.id || edge.toAnchorId === anchor.id) {\n edge.kind = linkKind;\n }\n }\n }\n\n return attached;\n}\n","/**\n * Wheel / trackpad zoom curve for every map surface.\n *\n * PORTAL default MapViewer uses drei → three-stdlib OrbitControls, whose\n * `getZoomScale()` is `Math.pow(0.95, zoomSpeed)` **per wheel event** (not\n * scaled by `deltaY`). Edit Map / Wayfinding must use the same step or they\n * feel slower than the assign map.\n *\n * Scroll up zooms in; the caller keeps the pointer over the same map point\n * (`panAfterZoom` on the SVG canvas, `zoomToCursor` on OrbitControls).\n */\n\n/** three-stdlib OrbitControls `Math.pow(0.95, zoomSpeed)` base. */\nexport const WHEEL_ZOOM_BASE = 0.95;\n/** drei / three-stdlib default `zoomSpeed`. */\nexport const WHEEL_ZOOM_SPEED = 1;\n\n/**\n * OrbitControls dolly scale for one wheel event: `0.95 ** zoomSpeed`.\n * Sign of `deltaY` is ignored here; `nextZoomFromWheel` applies in vs out.\n */\nexport function wheelDollyScale(zoomSpeed = WHEEL_ZOOM_SPEED): number {\n return Math.pow(WHEEL_ZOOM_BASE, zoomSpeed);\n}\n\n/**\n * Next SVG / orthographic zoom from a wheel event.\n * `deltaY < 0` zooms in. Pan separately so the cursor stays on the same point.\n */\nexport function nextZoomFromWheel(\n currentZoom: number,\n deltaY: number,\n options?: {\n zoomSpeed?: number;\n min?: number;\n max?: number;\n },\n): number {\n if (deltaY === 0) return currentZoom;\n const scale = wheelDollyScale(options?.zoomSpeed ?? WHEEL_ZOOM_SPEED);\n const next = deltaY < 0 ? currentZoom / scale : currentZoom * scale;\n const min = options?.min ?? Number.NEGATIVE_INFINITY;\n const max = options?.max ?? Number.POSITIVE_INFINITY;\n return Math.min(max, Math.max(min, next));\n}\n"],"names":["outdoorDecorationFromSvg","svgText","suppressIds","theme","parsed","parseSvgString","out","el","isRoutePathLabel","isRouteFolderLabel","isInteractiveGroupLabel","isStoreFolderLabel","layer","resolveLayerStyle","fill","isAmenityLayerId","amenityHouseFill","_a","stroke","_b","strokeWidth","_c","_d","sortByOutdoorSvgPaintOrder","item","weldAnchors","anchors","edges","candidateIds","tolerance","DEFAULT_WELD_TOLERANCE","candidates","a","surviving","min","removed","distance","removedSet","rewired","edge","changed","findWeldCandidates","groups","used","i","group","j","collapseDuplicateRouteGraph","nextAnchors","nextEdges","result","id","alive","anchor","seen","uniqueEdges","lo","hi","key","autoConnectUnitAnchor","unitAnchor","walkablePolylines","existingJunctions","weldTolerance","best","line","hit","nearestPointOnPolyline","existing","unitAnchorFromShape","shapeId","levelId","polygons","tempId","flat","sx","sy","p","c","point","pointInPolygons","buildAutoSkeleton","walkablePolygons","voidPolygons","cellSize","minX","minY","maxX","maxY","poly","cols","rows","free","row","col","x","y","pt","byKey","cell","neighbors","nc","nr","nk","edgeKey","importRoutePaths","pathDs","mapId","startId","nextId","findOrCreate","d","polys","pathToPolygons","b","e","collapsed","routeAnchorKindForShape","kind","routeLinkKind","pointOnPolygons","closed","shapeUnderImportedAnchor","shapes","insideTolerance","near","shape","INTERACTIVE_SHAPE_KINDS","attachImportedRouteAnchors","degree","attached","linkKind","WHEEL_ZOOM_BASE","WHEEL_ZOOM_SPEED","wheelDollyScale","zoomSpeed","nextZoomFromWheel","currentZoom","deltaY","options","scale","next","max"],"mappings":"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"}
1
+ {"version":3,"file":"wheelZoom.js","sources":["../../src/core/outdoorDecoration.ts","../../src/core/routing/graph-tools.ts","../../src/core/wheelZoom.ts"],"sourcesContent":["import {\n parseSvgString,\n isInteractiveGroupLabel,\n isRouteFolderLabel,\n isRoutePathLabel,\n isStoreFolderLabel,\n} from './import';\nimport { amenityHouseFill, isAmenityLayerId } from './shapeFill';\nimport {\n resolveLayerStyle,\n sortByOutdoorSvgPaintOrder,\n type StaticLayerTheme,\n} from './layerStyles';\n\nexport interface OutdoorDecorationPath {\n id: string;\n d: string;\n fill?: string;\n stroke?: string;\n strokeWidth?: number;\n opacity?: number;\n}\n\n/**\n * Paths the assign viewer draws from the live outdoor SVG: house-style\n * decoration (green area, parking lanes, icons) and any other\n * non-interactive art. Interactive / store folders stay out — those are\n * `cm_shapes` rows. The BACKGROUND group is Google Map artwork: omit it\n * unless `includeBackground` is set.\n */\nexport function outdoorDecorationFromSvg(\n svgText: string,\n suppressIds?: ReadonlySet<string>,\n theme?: StaticLayerTheme | null,\n includeBackground = false,\n): OutdoorDecorationPath[] {\n const parsed = parseSvgString(svgText);\n const out: OutdoorDecorationPath[] = [];\n for (const el of parsed.elements) {\n if (!el.d) continue;\n if (el.interactive) continue;\n if (el.inBackground && !includeBackground) continue;\n if (suppressIds?.has(el.id)) continue;\n if (/^parking[-_]?lines?(?:[-_]|$)/i.test(el.id)) continue;\n if (el.id.toLowerCase().startsWith('route-path')) continue;\n if (isRoutePathLabel(el.id) || isRouteFolderLabel(el.id)) continue;\n if (isInteractiveGroupLabel(el.id) || isStoreFolderLabel(el.id)) continue;\n\n const layer = resolveLayerStyle(el.id, theme);\n const fill =\n layer?.fill ??\n (isAmenityLayerId(el.id) ? amenityHouseFill(theme) : el.style?.fill);\n const stroke = layer?.stroke ?? el.style?.stroke;\n const strokeWidth = layer?.strokeWidth ?? el.style?.strokeWidth;\n out.push({\n id: el.id,\n d: el.d,\n fill: fill && fill !== 'none' ? fill : undefined,\n stroke: stroke && stroke !== 'none' ? stroke : undefined,\n strokeWidth,\n opacity: el.style?.opacity,\n });\n }\n // Parking lanes move under green areas. Later special shapes stay on top.\n return sortByOutdoorSvgPaintOrder(out, (item) => item.id);\n}\n","import type {\n AnchorKind,\n AutoConnectResult,\n CmAnchor,\n CmRouteEdge,\n ShapeGeometry,\n ShapeKind,\n SkeletonSuggestion,\n Vec2,\n WeldResult,\n} from '../types';\nimport { DEFAULT_WELD_TOLERANCE, INTERACTIVE_SHAPE_KINDS } from '../types';\nimport {\n distance,\n nearestPointOnPolyline,\n pathToPolygons,\n pointInPolygons,\n} from '../geometry';\n\nexport interface AnchorLike {\n id: number;\n x: number;\n y: number;\n levelId: number;\n shapeId?: number | null;\n kind?: string;\n}\n\nexport interface EdgeLike {\n id: number;\n fromAnchorId: number;\n toAnchorId: number;\n}\n\n/**\n * Weld anchors within tolerance into the surviving (lowest id) anchor.\n * Rewires edges that referenced removed anchors.\n */\nexport function weldAnchors(\n anchors: AnchorLike[],\n edges: EdgeLike[],\n candidateIds: number[],\n tolerance = DEFAULT_WELD_TOLERANCE,\n): WeldResult | null {\n const candidates = anchors.filter((a) => candidateIds.includes(a.id));\n if (candidates.length < 2) return null;\n\n // Cluster by proximity from the first candidate's position centroid of group\n const surviving = candidates.reduce((min, a) => (a.id < min.id ? a : min));\n const removed: number[] = [];\n\n for (const a of candidates) {\n if (a.id === surviving.id) continue;\n if (distance(a, surviving) <= tolerance) {\n removed.push(a.id);\n }\n }\n\n if (removed.length === 0) return null;\n\n const removedSet = new Set(removed);\n const rewired: number[] = [];\n\n for (const edge of edges) {\n let changed = false;\n if (removedSet.has(edge.fromAnchorId)) {\n edge.fromAnchorId = surviving.id;\n changed = true;\n }\n if (removedSet.has(edge.toAnchorId)) {\n edge.toAnchorId = surviving.id;\n changed = true;\n }\n // Drop self-loops\n if (edge.fromAnchorId === edge.toAnchorId) {\n rewired.push(edge.id);\n continue;\n }\n if (changed) rewired.push(edge.id);\n }\n\n return {\n survivingAnchorId: surviving.id,\n removedAnchorIds: removed,\n rewiredEdgeIds: rewired,\n };\n}\n\n/**\n * Find all pairs of anchors within tolerance that should be welded.\n */\nexport function findWeldCandidates(\n anchors: AnchorLike[],\n tolerance = DEFAULT_WELD_TOLERANCE,\n): number[][] {\n const groups: number[][] = [];\n const used = new Set<number>();\n\n for (let i = 0; i < anchors.length; i++) {\n if (used.has(anchors[i].id)) continue;\n const group = [anchors[i].id];\n for (let j = i + 1; j < anchors.length; j++) {\n if (used.has(anchors[j].id)) continue;\n if (\n anchors[i].levelId === anchors[j].levelId &&\n distance(anchors[i], anchors[j]) <= tolerance\n ) {\n group.push(anchors[j].id);\n used.add(anchors[j].id);\n }\n }\n if (group.length > 1) {\n used.add(anchors[i].id);\n groups.push(group);\n }\n }\n return groups;\n}\n\n/**\n * Merge coincident anchors and drop overlapping undirected edges.\n * Two SVG imports of the same ROUTES layer stack a second copy on top of\n * the first — dragging one junction then leaves the twin behind.\n */\nexport function collapseDuplicateRouteGraph<\n A extends AnchorLike,\n E extends EdgeLike,\n>(\n anchors: A[],\n edges: E[],\n tolerance = DEFAULT_WELD_TOLERANCE,\n): { anchors: A[]; edges: E[] } {\n const nextAnchors = anchors.slice();\n const nextEdges = edges.map((edge) => ({ ...edge }));\n const removed = new Set<number>();\n for (const group of findWeldCandidates(nextAnchors, tolerance)) {\n const result = weldAnchors(nextAnchors, nextEdges, group, tolerance);\n if (!result) continue;\n for (const id of result.removedAnchorIds) removed.add(id);\n }\n const alive = nextAnchors.filter((anchor) => !removed.has(anchor.id));\n const seen = new Set<string>();\n const uniqueEdges: E[] = [];\n for (const edge of nextEdges) {\n if (removed.has(edge.fromAnchorId) || removed.has(edge.toAnchorId)) continue;\n if (edge.fromAnchorId === edge.toAnchorId) continue;\n const lo = Math.min(edge.fromAnchorId, edge.toAnchorId);\n const hi = Math.max(edge.fromAnchorId, edge.toAnchorId);\n const key = `${lo}|${hi}`;\n if (seen.has(key)) continue;\n seen.add(key);\n uniqueEdges.push(edge);\n }\n return { anchors: alive, edges: uniqueEdges };\n}\n\n/**\n * Auto-connect a unit anchor to the nearest walkable segment via perpendicular projection.\n */\nexport function autoConnectUnitAnchor(\n unitAnchor: AnchorLike,\n walkablePolylines: Vec2[][],\n existingJunctions: AnchorLike[],\n weldTolerance = DEFAULT_WELD_TOLERANCE,\n): AutoConnectResult | null {\n let best: { point: Vec2; distance: number } | null = null;\n\n for (const line of walkablePolylines) {\n const hit = nearestPointOnPolyline(unitAnchor, line);\n if (hit && (!best || hit.distance < best.distance)) {\n best = { point: hit.point, distance: hit.distance };\n }\n }\n\n if (!best) return null;\n\n // Reuse existing junction if within weld tolerance\n const existing = existingJunctions.find(\n (j) =>\n j.levelId === unitAnchor.levelId &&\n distance(j, best!.point) <= weldTolerance,\n );\n\n return {\n unitAnchorId: unitAnchor.id,\n junctionAnchor: existing\n ? { x: existing.x, y: existing.y, existingId: existing.id }\n : { x: best.point.x, y: best.point.y },\n edge: {\n fromAnchorId: unitAnchor.id,\n toAnchorId: existing?.id,\n },\n };\n}\n\n/**\n * Place a unit anchor at the centroid of a shape's polygons, if the point lies inside.\n */\nexport function unitAnchorFromShape(\n shapeId: number,\n levelId: number,\n polygons: Vec2[][],\n tempId: number,\n): CmAnchor | null {\n if (polygons.length === 0) return null;\n const flat = polygons.flat();\n if (flat.length === 0) return null;\n\n let sx = 0;\n let sy = 0;\n for (const p of flat) {\n sx += p.x;\n sy += p.y;\n }\n const c = { x: sx / flat.length, y: sy / flat.length };\n\n // Prefer centroid if inside; otherwise use first polygon's average of extremes\n const point = pointInPolygons(c, polygons) ? c : flat[0];\n\n return {\n id: tempId,\n levelId,\n shapeId,\n kind: 'unit',\n x: point.x,\n y: point.y,\n connectorId: null,\n };\n}\n\n/**\n * Build a simple medial-axis-ish skeleton from walkable polygons minus voids.\n * This is a pragmatic approximation: sample a grid inside walkable, reject void cells,\n * connect adjacent free cells into a sparse graph, then prune to a polyline network.\n */\nexport function buildAutoSkeleton(\n walkablePolygons: Vec2[][],\n voidPolygons: Vec2[][],\n cellSize = 20,\n): SkeletonSuggestion {\n if (walkablePolygons.length === 0) {\n return { anchors: [], edges: [] };\n }\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const poly of walkablePolygons) {\n for (const p of poly) {\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n }\n\n const cols = Math.max(1, Math.ceil((maxX - minX) / cellSize));\n const rows = Math.max(1, Math.ceil((maxY - minY) / cellSize));\n const free: Array<{ key: string; x: number; y: number; col: number; row: number }> = [];\n\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const x = minX + (col + 0.5) * cellSize;\n const y = minY + (row + 0.5) * cellSize;\n const pt = { x, y };\n if (!pointInPolygons(pt, walkablePolygons)) continue;\n if (voidPolygons.length > 0 && pointInPolygons(pt, voidPolygons)) continue;\n free.push({ key: `${col},${row}`, x, y, col, row });\n }\n }\n\n const byKey = new Map(free.map((c) => [c.key, c]));\n const anchors = free.map((c) => ({\n tempId: c.key,\n x: c.x,\n y: c.y,\n kind: 'junction' as const,\n }));\n\n const edges: Array<{ fromTempId: string; toTempId: string }> = [];\n const seen = new Set<string>();\n\n for (const cell of free) {\n const neighbors = [\n [cell.col + 1, cell.row],\n [cell.col, cell.row + 1],\n ];\n for (const [nc, nr] of neighbors) {\n const nk = `${nc},${nr}`;\n if (!byKey.has(nk)) continue;\n const edgeKey = cell.key < nk ? `${cell.key}|${nk}` : `${nk}|${cell.key}`;\n if (seen.has(edgeKey)) continue;\n seen.add(edgeKey);\n edges.push({ fromTempId: cell.key, toTempId: nk });\n }\n }\n\n return { anchors, edges };\n}\n\n/**\n * Convert ROUTES-group SVG line endpoints into welded anchors + edges.\n * This is the key converter step that repairs coincident-but-disconnected joins.\n *\n * Anchors land in raw SVG user space (Y down), the same space as shape\n * geometry. There is intentionally no viewbox-height flip here — mirroring\n * routes without mirroring shapes would silently desynchronise the two.\n */\nexport function importRoutePaths(\n pathDs: string[],\n levelId: number,\n mapId: number,\n startId: number,\n weldTolerance = DEFAULT_WELD_TOLERANCE,\n): { anchors: CmAnchor[]; edges: CmRouteEdge[]; nextId: number } {\n const anchors: CmAnchor[] = [];\n const edges: CmRouteEdge[] = [];\n let nextId = startId;\n\n const findOrCreate = (x: number, y: number): number => {\n const existing = anchors.find(\n (a) => distance(a, { x, y }) <= weldTolerance,\n );\n if (existing) return existing.id;\n const id = nextId++;\n anchors.push({\n id,\n levelId,\n shapeId: null,\n kind: 'junction',\n x,\n y,\n connectorId: null,\n });\n return id;\n };\n\n for (const d of pathDs) {\n const polys = pathToPolygons(d);\n for (const poly of polys) {\n for (let i = 0; i < poly.length - 1; i++) {\n const a = findOrCreate(poly[i].x, poly[i].y);\n const b = findOrCreate(poly[i + 1].x, poly[i + 1].y);\n if (a === b) continue;\n // Avoid duplicate edges\n const dup = edges.some(\n (e) =>\n (e.fromAnchorId === a && e.toAnchorId === b) ||\n (e.fromAnchorId === b && e.toAnchorId === a),\n );\n if (dup) continue;\n edges.push({\n id: nextId++,\n mapId,\n fromAnchorId: a,\n toAnchorId: b,\n weight: null,\n directed: false,\n accessible: true,\n kind: 'walk',\n });\n }\n }\n }\n\n const collapsed = collapseDuplicateRouteGraph(anchors, edges, weldTolerance);\n return { anchors: collapsed.anchors, edges: collapsed.edges, nextId };\n}\n\nexport function routeAnchorKindForShape(kind: ShapeKind): AnchorKind {\n if (kind === 'entrance') return 'entrance';\n if (kind === 'connector') return 'connector';\n return 'unit';\n}\n\nfunction routeLinkKind(kind: AnchorKind): CmRouteEdge['kind'] {\n return kind === 'entrance' ? 'entrance_link' : 'unit_link';\n}\n\n/** `inside` matches v1's store-mesh hit; `near` is a door-step fallback. */\nfunction pointOnPolygons(\n point: Vec2,\n polygons: Vec2[][],\n tolerance: number,\n): 'inside' | 'near' | null {\n if (pointInPolygons(point, polygons)) return 'inside';\n for (const poly of polygons) {\n if (poly.length < 2) continue;\n const closed = [...poly, poly[0]];\n const hit = nearestPointOnPolyline(point, closed);\n if (hit && hit.distance <= tolerance) return 'near';\n }\n return null;\n}\n\nexport interface AttachableImportShape {\n id: number;\n kind: ShapeKind;\n geometry: Pick<ShapeGeometry, 'polygons'>;\n}\n\nfunction shapeUnderImportedAnchor(\n point: Vec2,\n shapes: AttachableImportShape[],\n insideTolerance: number,\n): AttachableImportShape | null {\n let near: AttachableImportShape | null = null;\n for (const shape of shapes) {\n if (!INTERACTIVE_SHAPE_KINDS.includes(shape.kind)) continue;\n const polys = shape.geometry.polygons ?? [];\n if (polys.length === 0) continue;\n const hit = pointOnPolygons(point, polys, insideTolerance);\n if (hit === 'inside') return shape;\n if (hit === 'near' && near == null) near = shape;\n }\n return near;\n}\n\n/**\n * Check every imported route vertex. If it falls inside (or on) a store /\n * amenity / kiosk / connector, it becomes that shape's orange destination.\n * A shape may own any number of those points so pathfinding can leave from\n * the nearest door. Corridor through-points keep `walk` edges; leaf stubs\n * become `unit_link`.\n */\nexport function attachImportedRouteAnchors(\n anchors: CmAnchor[],\n edges: CmRouteEdge[],\n shapes: AttachableImportShape[],\n insideTolerance = DEFAULT_WELD_TOLERANCE * 3,\n): number {\n const degree = new Map<number, number>();\n for (const edge of edges) {\n degree.set(edge.fromAnchorId, (degree.get(edge.fromAnchorId) ?? 0) + 1);\n degree.set(edge.toAnchorId, (degree.get(edge.toAnchorId) ?? 0) + 1);\n }\n\n let attached = 0;\n for (const anchor of anchors) {\n if (anchor.shapeId != null) continue;\n const shape = shapeUnderImportedAnchor(anchor, shapes, insideTolerance);\n if (!shape) continue;\n anchor.shapeId = shape.id;\n anchor.kind = routeAnchorKindForShape(shape.kind);\n attached += 1;\n if ((degree.get(anchor.id) ?? 0) > 1) continue;\n const linkKind = routeLinkKind(anchor.kind);\n for (const edge of edges) {\n if (edge.fromAnchorId === anchor.id || edge.toAnchorId === anchor.id) {\n edge.kind = linkKind;\n }\n }\n }\n\n return attached;\n}\n","/**\n * Wheel / trackpad zoom curve for every map surface.\n *\n * PORTAL default MapViewer uses drei → three-stdlib OrbitControls, whose\n * `getZoomScale()` is `Math.pow(0.95, zoomSpeed)` **per wheel event** (not\n * scaled by `deltaY`). Edit Map / Wayfinding must use the same step or they\n * feel slower than the assign map.\n *\n * Scroll up zooms in; the caller keeps the pointer over the same map point\n * (`panAfterZoom` on the SVG canvas, `zoomToCursor` on OrbitControls).\n */\n\n/** three-stdlib OrbitControls `Math.pow(0.95, zoomSpeed)` base. */\nexport const WHEEL_ZOOM_BASE = 0.95;\n/** drei / three-stdlib default `zoomSpeed`. */\nexport const WHEEL_ZOOM_SPEED = 1;\n\n/**\n * OrbitControls dolly scale for one wheel event: `0.95 ** zoomSpeed`.\n * Sign of `deltaY` is ignored here; `nextZoomFromWheel` applies in vs out.\n */\nexport function wheelDollyScale(zoomSpeed = WHEEL_ZOOM_SPEED): number {\n return Math.pow(WHEEL_ZOOM_BASE, zoomSpeed);\n}\n\n/**\n * Next SVG / orthographic zoom from a wheel event.\n * `deltaY < 0` zooms in. Pan separately so the cursor stays on the same point.\n */\nexport function nextZoomFromWheel(\n currentZoom: number,\n deltaY: number,\n options?: {\n zoomSpeed?: number;\n min?: number;\n max?: number;\n },\n): number {\n if (deltaY === 0) return currentZoom;\n const scale = wheelDollyScale(options?.zoomSpeed ?? WHEEL_ZOOM_SPEED);\n const next = deltaY < 0 ? currentZoom / scale : currentZoom * scale;\n const min = options?.min ?? Number.NEGATIVE_INFINITY;\n const max = options?.max ?? Number.POSITIVE_INFINITY;\n return Math.min(max, Math.max(min, next));\n}\n"],"names":["outdoorDecorationFromSvg","svgText","suppressIds","theme","includeBackground","parsed","parseSvgString","out","el","isRoutePathLabel","isRouteFolderLabel","isInteractiveGroupLabel","isStoreFolderLabel","layer","resolveLayerStyle","fill","isAmenityLayerId","amenityHouseFill","_a","stroke","_b","strokeWidth","_c","_d","sortByOutdoorSvgPaintOrder","item","weldAnchors","anchors","edges","candidateIds","tolerance","DEFAULT_WELD_TOLERANCE","candidates","a","surviving","min","removed","distance","removedSet","rewired","edge","changed","findWeldCandidates","groups","used","i","group","j","collapseDuplicateRouteGraph","nextAnchors","nextEdges","result","id","alive","anchor","seen","uniqueEdges","lo","hi","key","autoConnectUnitAnchor","unitAnchor","walkablePolylines","existingJunctions","weldTolerance","best","line","hit","nearestPointOnPolyline","existing","unitAnchorFromShape","shapeId","levelId","polygons","tempId","flat","sx","sy","p","c","point","pointInPolygons","buildAutoSkeleton","walkablePolygons","voidPolygons","cellSize","minX","minY","maxX","maxY","poly","cols","rows","free","row","col","x","y","pt","byKey","cell","neighbors","nc","nr","nk","edgeKey","importRoutePaths","pathDs","mapId","startId","nextId","findOrCreate","d","polys","pathToPolygons","b","e","collapsed","routeAnchorKindForShape","kind","routeLinkKind","pointOnPolygons","closed","shapeUnderImportedAnchor","shapes","insideTolerance","near","shape","INTERACTIVE_SHAPE_KINDS","attachImportedRouteAnchors","degree","attached","linkKind","WHEEL_ZOOM_BASE","WHEEL_ZOOM_SPEED","wheelDollyScale","zoomSpeed","nextZoomFromWheel","currentZoom","deltaY","options","scale","next","max"],"mappings":"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"}
@@ -7,6 +7,11 @@ export declare function isRoutePathLabel(label: string): boolean;
7
7
  * Child layer names are ignored — same idea as the INTERACTIVE group.
8
8
  */
9
9
  export declare function isRouteFolderLabel(label: string): boolean;
10
+ /**
11
+ * Outdoor artwork drawn only when Settings background is Google Map.
12
+ * `BACKGROUND`, `BACKGROUND-2`, data-name="BACKGROUND".
13
+ */
14
+ export declare function isBackgroundGroupLabel(label: string): boolean;
10
15
  /**
11
16
  * Geometry that becomes a walking-path edge. `<line>` / `<polyline>` always
12
17
  * count; an open `<path>` of straight M/L/H/V commands counts as line
@@ -33,6 +38,8 @@ export interface RawSvgElement {
33
38
  interactive?: boolean;
34
39
  /** Resolved fill/stroke after group inheritance + CSS class inlining. */
35
40
  style?: SvgPresentationStyle;
41
+ /** Inside an outdoor `BACKGROUND` group. Shown only with a Google Map background. */
42
+ inBackground?: boolean;
36
43
  }
37
44
  export interface ParsedSvg {
38
45
  viewbox: ViewBox | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/import/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/import/index.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export * from './hostChrome';
8
8
  export * from './hoverTooltip';
9
9
  export * from './currentLocation';
10
10
  export * from './viewerReset';
11
+ export * from './verticalTransport';
11
12
  export * from './websiteModal';
12
13
  export * from './publicShapes';
13
14
  export * from './layerStyles';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}