@griddle/vue 0.1.1 → 0.1.3

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.
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
- import { defineComponent as Te, ref as k, computed as w, watch as He, onMounted as De, onBeforeUnmount as Me, nextTick as Le, openBlock as P, createElementBlock as H, normalizeStyle as $, normalizeClass as be, createElementVNode as Ge, createCommentVNode as oe, Fragment as we, renderList as Ce, renderSlot as ze, createBlock as Ne, withCtx as Ae, normalizeProps as Fe, guardReactiveProps as Oe, toDisplayString as _e, shallowRef as Xe } from "vue";
2
- import { resolveLoop as Be, loopPeriod as Ke, PanController as Ue, loopInstances as Ve, DragController as $e, visibleRange as qe, visibleTiles as Je, gridContentSize as je, GroupDragController as Qe, computeTileLayout as We, resolveStickyStacking as Ze, isOutOfFlow as et, pixelsToPin as tt, Grid as nt } from "@griddle/core";
3
- const ot = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost", "aria-hidden", "onPointerdown"], it = ["data-griddle-handle", "onPointerdown"], at = ["data-griddle-tile"], Ye = "a, button, input, textarea, select, [contenteditable]", lt = 4, rt = /* @__PURE__ */ Te({
1
+ import { defineComponent as Le, ref as H, computed as p, watch as Ee, onMounted as Ge, onBeforeUnmount as Me, nextTick as $e, openBlock as k, createElementBlock as E, normalizeStyle as G, normalizeClass as Ce, createElementVNode as Ne, createCommentVNode as ne, Fragment as he, renderList as Ie, renderSlot as Se, createBlock as Oe, withCtx as Be, normalizeProps as Fe, guardReactiveProps as Ke, toDisplayString as Ue, shallowRef as Te } from "vue";
2
+ import { resolveLoop as Ve, loopPeriod as Je, PanController as qe, loopInstances as je, DragController as Ae, visibleRange as Qe, visibleTiles as Ze, gridContentSize as et, GroupDragController as tt, computeTileLayout as We, resolveStickyStacking as nt, isOutOfFlow as it, pixelsToPin as ot, Grid as lt } from "@griddle/core";
3
+ import { animateReposition as _e, liftTransition as at } from "./animation.js";
4
+ const rt = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost", "aria-hidden", "onPointerdown"], st = ["data-griddle-handle", "onPointerdown"], dt = ["data-griddle-tile"], De = "a, button, input, textarea, select, [contenteditable]", ut = 4, ct = /* @__PURE__ */ Le({
4
5
  __name: "LoopGrid",
5
6
  props: {
6
7
  api: {},
@@ -10,228 +11,227 @@ const ot = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost",
10
11
  selection: {}
11
12
  },
12
13
  emits: ["selectionChange", "dragStart", "dragEnd", "resizeStart", "resizeEnd", "cameraChange"],
13
- setup(B, { emit: z }) {
14
- const s = B, f = z, K = k(null), N = k(null), v = w(() => s.api.config.value), u = w(() => Be(v.value)), h = w(() => {
15
- var t;
16
- return ((t = u.value) == null ? void 0 : t.interaction) === "edit";
17
- }), m = w(() => v.value.gap ?? 0), y = w(() => m.value / 2), x = w(() => v.value.unitWidth + m.value), W = w(() => v.value.unitHeight + m.value), ue = w(() => Ke(v.value, s.api.tiles.value)), F = new Ue();
18
- He(u, (t) => {
19
- t && F.setPhysics({ friction: t.friction, ease: t.ease, maxVelocity: t.maxVelocity });
14
+ setup(B, { emit: S }) {
15
+ const d = B, w = S, F = H(null), $ = H(null), v = p(() => d.api.config.value), u = p(() => Ve(v.value)), g = p(() => {
16
+ var e;
17
+ return ((e = u.value) == null ? void 0 : e.interaction) === "edit";
18
+ }), m = p(() => v.value.gap ?? 0), b = p(() => m.value / 2), f = p(() => v.value.unitWidth + m.value), X = p(() => v.value.unitHeight + m.value), de = p(() => Je(v.value, d.api.tiles.value)), A = new qe();
19
+ Ee(u, (e) => {
20
+ e && A.setPhysics({ friction: e.friction, ease: e.ease, maxVelocity: e.maxVelocity });
20
21
  }, { immediate: !0 });
21
- const O = k({ cxCell: 0, cyCell: 0, vw: 1e3, vh: 800 });
22
- let U = null, ie = 0, L = null;
23
- function j(t) {
24
- t.preventDefault();
25
- const e = t.deltaMode === 1 ? 16 : t.deltaMode === 2 ? 100 : 1;
26
- F.scrollBy(t.deltaX * e, t.deltaY * e);
22
+ const _ = H({ cxCell: 0, cyCell: 0, vw: 1e3, vh: 800 });
23
+ let U = null, ie = 0, W = null;
24
+ function q(e) {
25
+ e.preventDefault();
26
+ const i = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? 100 : 1;
27
+ A.scrollBy(e.deltaX * i, e.deltaY * i);
27
28
  }
28
- function Q(t) {
29
- ie = requestAnimationFrame(Q);
30
- const e = F.tick(t), o = N.value;
31
- o && (o.style.transform = `translate3d(${-e.x}px, ${-e.y}px, 0)`);
32
- const a = K.value;
33
- a && s.showGrid !== !1 && (a.style.backgroundPosition = `${-e.x % x.value}px ${-e.y % W.value}px`);
34
- const r = Math.floor(e.x / x.value), p = Math.floor(e.y / W.value), g = O.value;
35
- (r !== g.cxCell || p !== g.cyCell) && (O.value = { ...g, cxCell: r, cyCell: p }), (!U || U.x !== e.x || U.y !== e.y || U.isMoving !== e.isMoving || U.isDragging !== e.isDragging) && (U = e, f("cameraChange", e));
29
+ function j(e) {
30
+ ie = requestAnimationFrame(j);
31
+ const i = A.tick(e), n = $.value;
32
+ n && (n.style.transform = `translate3d(${-i.x}px, ${-i.y}px, 0)`);
33
+ const l = F.value;
34
+ l && d.showGrid !== !1 && (l.style.backgroundPosition = `${-i.x % f.value}px ${-i.y % X.value}px`);
35
+ const r = Math.floor(i.x / f.value), s = Math.floor(i.y / X.value), c = _.value;
36
+ (r !== c.cxCell || s !== c.cyCell) && (_.value = { ...c, cxCell: r, cyCell: s }), (!U || U.x !== i.x || U.y !== i.y || U.isMoving !== i.isMoving || U.isDragging !== i.isDragging) && (U = i, w("cameraChange", i));
36
37
  }
37
- const ae = w(() => {
38
- s.api.version.value;
39
- const t = 2 * x.value, e = 2 * W.value;
40
- return Ve(v.value, s.api.tiles.value, {
41
- x: O.value.cxCell * x.value - t,
42
- y: O.value.cyCell * W.value - e,
43
- width: O.value.vw + x.value + 2 * t,
44
- height: O.value.vh + W.value + 2 * e
38
+ const oe = p(() => {
39
+ d.api.version.value;
40
+ const e = 2 * f.value, i = 2 * X.value;
41
+ return je(v.value, d.api.tiles.value, {
42
+ x: _.value.cxCell * f.value - e,
43
+ y: _.value.cyCell * X.value - i,
44
+ width: _.value.vw + f.value + 2 * e,
45
+ height: _.value.vh + X.value + 2 * i
45
46
  });
46
47
  });
47
- let C = null, R = !1;
48
- function le(t) {
49
- var a;
50
- const e = !!t.target.closest("[data-griddle-tile]");
51
- if (h.value && !e && S(/* @__PURE__ */ new Set()), !((a = u.value) != null && a.dragPan) || t.button !== 0) return;
52
- const o = v.value.dragIgnoreFrom ?? Ye;
53
- o && t.target.closest(o) || (C = { pointerId: t.pointerId, startX: t.clientX, startY: t.clientY, moved: !1 });
48
+ let I = null, z = !1;
49
+ function ue(e) {
50
+ var l;
51
+ const i = !!e.target.closest("[data-griddle-tile]");
52
+ if (g.value && !i && R(/* @__PURE__ */ new Set()), !((l = u.value) != null && l.dragPan) || e.button !== 0) return;
53
+ const n = v.value.dragIgnoreFrom ?? De;
54
+ n && e.target.closest(n) || (I = { pointerId: e.pointerId, startX: e.clientX, startY: e.clientY, moved: !1 });
54
55
  }
55
- function re(t) {
56
- R && (R = !1, t.preventDefault(), t.stopPropagation());
56
+ function ce(e) {
57
+ z && (z = !1, e.preventDefault(), e.stopPropagation());
57
58
  }
58
- const Y = k(/* @__PURE__ */ new Set()), T = w(() => s.selection ?? Y.value);
59
- function S(t) {
60
- s.selection || (Y.value = t), f("selectionChange", t);
59
+ const Y = H(/* @__PURE__ */ new Set()), T = p(() => d.selection ?? Y.value);
60
+ function R(e) {
61
+ d.selection || (Y.value = e), w("selectionChange", e);
61
62
  }
62
- const G = new $e(s.api.grid), I = k(null);
63
- let he = 0, fe = 0;
64
- const _ = k(null);
65
- function Z() {
66
- s.api.tiles.value = s.api.grid.tiles, s.api.version.value++;
63
+ const D = new Ae(d.api.grid), x = H(null);
64
+ let fe = 0, xe = 0;
65
+ const K = H(null);
66
+ function me() {
67
+ d.api.tiles.value = d.api.grid.tiles, d.api.version.value++;
67
68
  }
68
- function D(t) {
69
- return t.kx === 0 && t.ky === 0;
69
+ function N(e) {
70
+ return e.kx === 0 && e.ky === 0;
70
71
  }
71
- function ee(t) {
72
- return h.value && !D(t);
72
+ function Q(e) {
73
+ return g.value && !N(e);
73
74
  }
74
- function xe(t, e) {
75
- if (!h.value || !D(e)) return;
76
- const o = e.tile;
77
- if (o.draggable === !1 || t.target.dataset.griddleHandle) return;
78
- const a = v.value.dragIgnoreFrom ?? Ye;
79
- if (!(a && t.target.closest(a))) {
80
- if (t.metaKey || t.ctrlKey) {
81
- t.preventDefault();
75
+ function le(e, i) {
76
+ if (!g.value || !N(i)) return;
77
+ const n = i.tile;
78
+ if (n.draggable === !1 || e.target.dataset.griddleHandle) return;
79
+ const l = v.value.dragIgnoreFrom ?? De;
80
+ if (!(l && e.target.closest(l))) {
81
+ if (e.metaKey || e.ctrlKey) {
82
+ e.preventDefault();
82
83
  const r = new Set(T.value);
83
- r.has(o.id) ? r.delete(o.id) : r.add(o.id), S(r), t.stopPropagation();
84
+ r.has(n.id) ? r.delete(n.id) : r.add(n.id), R(r), e.stopPropagation();
84
85
  return;
85
86
  }
86
- S(/* @__PURE__ */ new Set([o.id])), G.start(o.id) && (he = t.clientX, fe = t.clientY, I.value = {
87
- tileId: o.id,
88
- instanceLeft: e.left,
89
- instanceTop: e.top,
90
- pickupCol: o.col,
91
- pickupRow: o.row,
87
+ R(/* @__PURE__ */ new Set([n.id])), D.start(n.id) && (fe = e.clientX, xe = e.clientY, x.value = {
88
+ tileId: n.id,
89
+ instanceLeft: i.left,
90
+ instanceTop: i.top,
91
+ pickupCol: n.col,
92
+ pickupRow: n.row,
92
93
  deltaX: 0,
93
94
  deltaY: 0,
94
- indicatorCol: o.col,
95
- indicatorRow: o.row
96
- }, f("dragStart", o.id), t.stopPropagation());
95
+ indicatorCol: n.col,
96
+ indicatorRow: n.row
97
+ }, w("dragStart", n.id), e.stopPropagation());
97
98
  }
98
99
  }
99
- function te(t, e, o) {
100
- if (!h.value) return;
101
- const a = e.tile;
102
- if (a.resizable === !1) return;
103
- t.currentTarget.setPointerCapture(t.pointerId);
104
- const r = a.col * x.value + y.value, p = a.row * W.value + y.value;
105
- _.value = {
106
- tileId: a.id,
107
- instanceKey: e.key,
108
- instanceDx: e.left - r,
109
- instanceDy: e.top - p,
110
- corner: o,
111
- startPointerX: t.clientX,
112
- startPointerY: t.clientY,
113
- startW: a.w,
114
- startH: a.h,
115
- startCol: a.col,
116
- startRow: a.row,
117
- previewW: a.w,
118
- previewH: a.h,
119
- previewCol: a.col,
120
- previewRow: a.row
121
- }, f("resizeStart", a.id), t.stopPropagation();
100
+ function ae(e, i, n) {
101
+ if (!g.value) return;
102
+ const l = i.tile;
103
+ if (l.resizable === !1) return;
104
+ e.currentTarget.setPointerCapture(e.pointerId);
105
+ const r = l.col * f.value + b.value, s = l.row * X.value + b.value;
106
+ K.value = {
107
+ tileId: l.id,
108
+ instanceKey: i.key,
109
+ instanceDx: i.left - r,
110
+ instanceDy: i.top - s,
111
+ corner: n,
112
+ startPointerX: e.clientX,
113
+ startPointerY: e.clientY,
114
+ startW: l.w,
115
+ startH: l.h,
116
+ startCol: l.col,
117
+ startRow: l.row,
118
+ previewW: l.w,
119
+ previewH: l.h,
120
+ previewCol: l.col,
121
+ previewRow: l.row
122
+ }, w("resizeStart", l.id), e.stopPropagation();
122
123
  }
123
- function se(t) {
124
- if (C && t.pointerId === C.pointerId) {
125
- const a = performance.now();
126
- C.moved ? F.dragMove(t.clientX, t.clientY, a) : Math.hypot(t.clientX - C.startX, t.clientY - C.startY) >= lt && (C.moved = !0, F.dragStart(C.startX, C.startY, a), F.dragMove(t.clientX, t.clientY, a));
124
+ function ve(e) {
125
+ if (I && e.pointerId === I.pointerId) {
126
+ const l = performance.now();
127
+ I.moved ? A.dragMove(e.clientX, e.clientY, l) : Math.hypot(e.clientX - I.startX, e.clientY - I.startY) >= ut && (I.moved = !0, A.dragStart(I.startX, I.startY, l), A.dragMove(e.clientX, e.clientY, l));
127
128
  return;
128
129
  }
129
- const e = I.value;
130
- if (e) {
131
- const a = t.clientX - he, r = t.clientY - fe, p = {
132
- col: e.pickupCol + Math.round(a / x.value),
133
- row: e.pickupRow + Math.round(r / W.value)
134
- }, g = G.update(p);
135
- I.value = {
136
- ...e,
137
- deltaX: a,
130
+ const i = x.value;
131
+ if (i) {
132
+ const l = e.clientX - fe, r = e.clientY - xe, s = {
133
+ col: i.pickupCol + Math.round(l / f.value),
134
+ row: i.pickupRow + Math.round(r / X.value)
135
+ }, c = D.update(s);
136
+ x.value = {
137
+ ...i,
138
+ deltaX: l,
138
139
  deltaY: r,
139
- indicatorCol: g.indicatorCell ? g.indicatorCell.col : null,
140
- indicatorRow: g.indicatorCell ? g.indicatorCell.row : null
141
- }, g.changed && Z();
140
+ indicatorCol: c.indicatorCell ? c.indicatorCell.col : null,
141
+ indicatorRow: c.indicatorCell ? c.indicatorCell.row : null
142
+ }, c.changed && me();
142
143
  }
143
- const o = _.value;
144
- if (o) {
145
- const a = t.clientX - o.startPointerX, r = t.clientY - o.startPointerY;
146
- let p = 0, g = 0, M = 0, E = 0;
147
- const A = Math.round(a / x.value), b = Math.round(r / W.value);
148
- (o.corner === "se" || o.corner === "ne") && (p = A), (o.corner === "se" || o.corner === "sw") && (g = b), (o.corner === "sw" || o.corner === "nw") && (p = -A, M = A), (o.corner === "ne" || o.corner === "nw") && (g = -b, E = b);
149
- const X = s.api.grid.getTile(o.tileId), Ie = (X == null ? void 0 : X.minW) ?? 1, Pe = (X == null ? void 0 : X.minH) ?? 1, ke = Math.min((X == null ? void 0 : X.maxW) ?? 1 / 0, v.value.cols), ye = Math.min((X == null ? void 0 : X.maxH) ?? 1 / 0, v.value.rows), ve = Math.min(ke, Math.max(Ie, o.startW + p)), pe = Math.min(ye, Math.max(Pe, o.startH + g)), ge = o.startCol + M, Ee = o.startRow + E;
150
- (ve !== o.previewW || pe !== o.previewH || ge !== o.previewCol || Ee !== o.previewRow) && (_.value = { ...o, previewW: ve, previewH: pe, previewCol: ge, previewRow: Ee });
144
+ const n = K.value;
145
+ if (n) {
146
+ const l = e.clientX - n.startPointerX, r = e.clientY - n.startPointerY;
147
+ let s = 0, c = 0, h = 0, C = 0;
148
+ const y = Math.round(l / f.value), L = Math.round(r / X.value);
149
+ (n.corner === "se" || n.corner === "ne") && (s = y), (n.corner === "se" || n.corner === "sw") && (c = L), (n.corner === "sw" || n.corner === "nw") && (s = -y, h = y), (n.corner === "ne" || n.corner === "nw") && (c = -L, C = L);
150
+ const P = d.api.grid.getTile(n.tileId), pe = (P == null ? void 0 : P.minW) ?? 1, M = (P == null ? void 0 : P.minH) ?? 1, ke = Math.min((P == null ? void 0 : P.maxW) ?? 1 / 0, v.value.cols), He = Math.min((P == null ? void 0 : P.maxH) ?? 1 / 0, v.value.rows), ye = Math.min(ke, Math.max(pe, n.startW + s)), be = Math.min(He, Math.max(M, n.startH + c)), ge = n.startCol + h, we = n.startRow + C;
151
+ (ye !== n.previewW || be !== n.previewH || ge !== n.previewCol || we !== n.previewRow) && (K.value = { ...n, previewW: ye, previewH: be, previewCol: ge, previewRow: we });
151
152
  }
152
153
  }
153
- function V(t) {
154
- if (C && t.pointerId === C.pointerId) {
155
- C.moved && (F.dragEnd(performance.now()), R = !0), C = null;
154
+ function O(e) {
155
+ if (I && e.pointerId === I.pointerId) {
156
+ I.moved && (A.dragEnd(performance.now()), z = !0), I = null;
156
157
  return;
157
158
  }
158
- if (I.value) {
159
- const o = I.value.tileId, { committed: a } = G.end();
160
- I.value = null, Z(), f("dragEnd", o, a);
159
+ if (x.value) {
160
+ const n = x.value.tileId, { committed: l } = D.end();
161
+ x.value = null, me(), w("dragEnd", n, l);
161
162
  }
162
- const e = _.value;
163
- if (e) {
164
- const o = s.api.grid.getTile(e.tileId);
165
- let a = !1;
166
- if (o) {
167
- const r = { col: e.previewCol, row: e.previewRow };
168
- (r.col !== o.col || r.row !== o.row) && s.api.moveTile(e.tileId, r), e.previewW !== o.w || e.previewH !== o.h ? a = s.api.resizeTile(e.tileId, { w: e.previewW, h: e.previewH }) : a = e.previewCol !== e.startCol || e.previewRow !== e.startRow || e.previewW !== e.startW || e.previewH !== e.startH;
163
+ const i = K.value;
164
+ if (i) {
165
+ const n = d.api.grid.getTile(i.tileId);
166
+ let l = !1;
167
+ if (n) {
168
+ const r = { col: i.previewCol, row: i.previewRow };
169
+ (r.col !== n.col || r.row !== n.row) && d.api.moveTile(i.tileId, r), i.previewW !== n.w || i.previewH !== n.h ? l = d.api.resizeTile(i.tileId, { w: i.previewW, h: i.previewH }) : l = i.previewCol !== i.startCol || i.previewRow !== i.startRow || i.previewW !== i.startW || i.previewH !== i.startH;
169
170
  }
170
- _.value = null, f("resizeEnd", e.tileId, a);
171
+ K.value = null, w("resizeEnd", i.tileId, l);
171
172
  }
172
173
  }
173
- function me(t) {
174
- t.key === "Escape" && h.value && S(/* @__PURE__ */ new Set());
174
+ function re(e) {
175
+ e.key === "Escape" && g.value && R(/* @__PURE__ */ new Set());
175
176
  }
176
- De(() => {
177
- const t = K.value;
178
- if (t) {
179
- t.addEventListener("wheel", j, { passive: !1 });
180
- const e = () => {
181
- const o = O.value;
182
- (t.clientWidth !== o.vw || t.clientHeight !== o.vh) && (O.value = { ...o, vw: t.clientWidth, vh: t.clientHeight });
177
+ Ge(() => {
178
+ const e = F.value;
179
+ if (e) {
180
+ e.addEventListener("wheel", q, { passive: !1 });
181
+ const i = () => {
182
+ const n = _.value;
183
+ (e.clientWidth !== n.vw || e.clientHeight !== n.vh) && (_.value = { ...n, vw: e.clientWidth, vh: e.clientHeight });
183
184
  };
184
- e(), L = new ResizeObserver(e), L.observe(t);
185
+ i(), W = new ResizeObserver(i), W.observe(e);
185
186
  }
186
- ie = requestAnimationFrame(Q), window.addEventListener("pointermove", se), window.addEventListener("pointerup", V), window.addEventListener("pointercancel", V), window.addEventListener("keydown", me);
187
+ ie = requestAnimationFrame(j), window.addEventListener("pointermove", ve), window.addEventListener("pointerup", O), window.addEventListener("pointercancel", O), window.addEventListener("keydown", re);
187
188
  }), Me(() => {
188
- var t;
189
- cancelAnimationFrame(ie), (t = K.value) == null || t.removeEventListener("wheel", j), L == null || L.disconnect(), window.removeEventListener("pointermove", se), window.removeEventListener("pointerup", V), window.removeEventListener("pointercancel", V), window.removeEventListener("keydown", me);
189
+ var e;
190
+ cancelAnimationFrame(ie), (e = F.value) == null || e.removeEventListener("wheel", q), W == null || W.disconnect(), window.removeEventListener("pointermove", ve), window.removeEventListener("pointerup", O), window.removeEventListener("pointercancel", O), window.removeEventListener("keydown", re);
190
191
  });
191
- const ce = /* @__PURE__ */ new Map(), de = /* @__PURE__ */ new Map();
192
- function ne(t, e) {
193
- e ? ce.set(t, e) : ce.delete(t);
192
+ const Z = /* @__PURE__ */ new Map(), se = /* @__PURE__ */ new Map();
193
+ function Re(e, i) {
194
+ i ? Z.set(e, i) : Z.delete(e);
194
195
  }
195
- He(() => s.api.version.value, async () => {
196
- var o;
197
- await Le();
198
- const t = ((o = I.value) == null ? void 0 : o.tileId) ?? null, e = /* @__PURE__ */ new Set();
199
- for (const a of ae.value) {
200
- const r = a.key;
201
- e.add(r);
202
- const p = a.left, g = a.top;
203
- if (h.value && a.tile.id !== t) {
204
- const M = de.get(r), E = ce.get(r);
205
- if (M && E) {
206
- const A = M.x - p, b = M.y - g;
207
- (A !== 0 || b !== 0) && Math.abs(A) < ue.value.width / 2 && Math.abs(b) < ue.value.height / 2 && (E.style.transition = "none", E.style.transform = `translate(${A}px, ${b}px)`, requestAnimationFrame(() => {
208
- E.style.transition = "transform 220ms cubic-bezier(.2,.7,.2,1)", E.style.transform = "translate(0,0)";
209
- }));
196
+ Ee(() => d.api.version.value, async () => {
197
+ var n;
198
+ await $e();
199
+ const e = ((n = x.value) == null ? void 0 : n.tileId) ?? null, i = /* @__PURE__ */ new Set();
200
+ for (const l of oe.value) {
201
+ const r = l.key;
202
+ i.add(r);
203
+ const s = l.left, c = l.top;
204
+ if (g.value && l.tile.id !== e) {
205
+ const h = se.get(r), C = Z.get(r);
206
+ if (h && C) {
207
+ const y = h.x - s, L = h.y - c;
208
+ (y !== 0 || L !== 0) && Math.abs(y) < de.value.width / 2 && Math.abs(L) < de.value.height / 2 && _e(C, y, L, v.value.animation);
210
209
  }
211
210
  }
212
- de.set(r, { x: p, y: g });
211
+ se.set(r, { x: s, y: c });
213
212
  }
214
- for (const a of de.keys())
215
- e.has(a) || de.delete(a);
213
+ for (const l of se.keys())
214
+ i.has(l) || se.delete(l);
216
215
  });
217
- const q = w(() => {
218
- var o;
219
- const e = s.showGrid !== !1 ? {
216
+ const ze = p(() => {
217
+ var n;
218
+ const i = d.showGrid !== !1 ? {
220
219
  backgroundImage: "linear-gradient(to right, rgba(0,0,0,0.08) 1px, transparent 1px), linear-gradient(to bottom, rgba(0,0,0,0.08) 1px, transparent 1px)",
221
- backgroundSize: `${x.value}px ${W.value}px`,
220
+ backgroundSize: `${f.value}px ${X.value}px`,
222
221
  backgroundPosition: "0 0"
223
222
  } : {};
224
223
  return {
225
224
  position: "relative",
226
225
  overflow: "hidden",
227
- height: typeof s.height == "number" ? s.height + "px" : s.height ?? "100%",
226
+ height: typeof d.height == "number" ? d.height + "px" : d.height ?? "100%",
228
227
  touchAction: "none",
229
228
  userSelect: "none",
230
- cursor: !h.value && ((o = u.value) != null && o.dragPan) ? "grab" : void 0,
229
+ willChange: "translate",
230
+ cursor: !g.value && ((n = u.value) != null && n.dragPan) ? "grab" : void 0,
231
231
  "--griddle-tile-radius": (v.value.tileRadius ?? 4) + "px",
232
- ...e
232
+ ...i
233
233
  };
234
- }), Se = w(() => ({
234
+ }), ee = p(() => ({
235
235
  position: "absolute",
236
236
  top: "0",
237
237
  left: "0",
@@ -239,99 +239,99 @@ const ot = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost",
239
239
  height: "0",
240
240
  willChange: "transform"
241
241
  }));
242
- function Re(t) {
243
- const e = _.value, o = (e == null ? void 0 : e.instanceKey) === t.key;
244
- let a = t.left, r = t.top, p = t.width, g = t.height;
245
- o && e && (a = e.previewCol * x.value + y.value + e.instanceDx, r = e.previewRow * W.value + y.value + e.instanceDy, p = e.previewW * v.value.unitWidth + (e.previewW - 1) * m.value, g = e.previewH * v.value.unitHeight + (e.previewH - 1) * m.value);
246
- const M = ee(t), E = h.value && D(t) && T.value.has(t.tile.id);
242
+ function V(e) {
243
+ const i = K.value, n = (i == null ? void 0 : i.instanceKey) === e.key;
244
+ let l = e.left, r = e.top, s = e.width, c = e.height;
245
+ n && i && (l = i.previewCol * f.value + b.value + i.instanceDx, r = i.previewRow * X.value + b.value + i.instanceDy, s = i.previewW * v.value.unitWidth + (i.previewW - 1) * m.value, c = i.previewH * v.value.unitHeight + (i.previewH - 1) * m.value);
246
+ const h = Q(e), C = g.value && N(e) && T.value.has(e.tile.id);
247
247
  return {
248
248
  position: "absolute",
249
- left: a + "px",
249
+ left: l + "px",
250
250
  top: r + "px",
251
- width: p + "px",
252
- height: g + "px",
251
+ width: s + "px",
252
+ height: c + "px",
253
253
  boxSizing: "border-box",
254
- cursor: h.value && D(t) ? "grab" : void 0,
254
+ cursor: g.value && N(e) ? "grab" : void 0,
255
255
  userSelect: "none",
256
256
  // Ghosts are display-only: pointer-transparent (so the gesture falls
257
257
  // through to drag-pan) and dimmed to mark the editable copy.
258
- pointerEvents: M ? "none" : void 0,
259
- zIndex: o ? 10 : 1,
260
- opacity: o ? 0.85 : M ? 0.55 : 1,
261
- boxShadow: E ? "0 0 0 3px rgba(59, 91, 219, 0.85), inset 0 0 0 1px rgba(59, 91, 219, 0.3)" : "",
258
+ pointerEvents: h ? "none" : void 0,
259
+ zIndex: n ? 10 : 1,
260
+ opacity: n ? 0.85 : h ? 0.55 : 1,
261
+ boxShadow: C ? "0 0 0 3px rgba(59, 91, 219, 0.85), inset 0 0 0 1px rgba(59, 91, 219, 0.3)" : "",
262
262
  borderRadius: (v.value.tileRadius ?? 4) + "px"
263
263
  };
264
264
  }
265
- const J = w(
266
- () => I.value ? s.api.grid.getTile(I.value.tileId) ?? null : null
267
- ), n = w(() => {
268
- const t = I.value, e = J.value;
269
- return !t || !e ? {} : {
265
+ const te = p(
266
+ () => x.value ? d.api.grid.getTile(x.value.tileId) ?? null : null
267
+ ), Pe = p(() => {
268
+ const e = x.value, i = te.value;
269
+ return !e || !i ? {} : {
270
270
  position: "absolute",
271
- left: t.instanceLeft + "px",
272
- top: t.instanceTop + "px",
273
- width: e.w * v.value.unitWidth + (e.w - 1) * m.value + "px",
274
- height: e.h * v.value.unitHeight + (e.h - 1) * m.value + "px",
271
+ left: e.instanceLeft + "px",
272
+ top: e.instanceTop + "px",
273
+ width: i.w * v.value.unitWidth + (i.w - 1) * m.value + "px",
274
+ height: i.h * v.value.unitHeight + (i.h - 1) * m.value + "px",
275
275
  boxSizing: "border-box",
276
276
  cursor: "grabbing",
277
277
  userSelect: "none",
278
278
  zIndex: 20,
279
279
  opacity: 0.85,
280
- transform: `translate(${t.deltaX}px, ${t.deltaY}px)`,
280
+ transform: `translate(${e.deltaX}px, ${e.deltaY}px)`,
281
281
  filter: "drop-shadow(0 8px 16px rgba(0,0,0,0.18))",
282
282
  borderRadius: (v.value.tileRadius ?? 4) + "px",
283
283
  pointerEvents: "none"
284
284
  };
285
- }), i = w(() => {
286
- const t = I.value;
287
- if (!t || t.indicatorCol === null || t.indicatorRow === null) return null;
288
- const e = s.api.grid.getTile(t.tileId);
289
- return e ? {
290
- left: t.indicatorCol * x.value + y.value,
291
- top: t.indicatorRow * W.value + y.value,
292
- width: e.w * v.value.unitWidth + (e.w - 1) * m.value,
293
- height: e.h * v.value.unitHeight + (e.h - 1) * m.value
285
+ }), J = p(() => {
286
+ const e = x.value;
287
+ if (!e || e.indicatorCol === null || e.indicatorRow === null) return null;
288
+ const i = d.api.grid.getTile(e.tileId);
289
+ return i ? {
290
+ left: e.indicatorCol * f.value + b.value,
291
+ top: e.indicatorRow * X.value + b.value,
292
+ width: i.w * v.value.unitWidth + (i.w - 1) * m.value,
293
+ height: i.h * v.value.unitHeight + (i.h - 1) * m.value
294
294
  } : null;
295
295
  });
296
- function l(t) {
297
- return t.resizeHandles ?? v.value.resizeHandles ?? ["se"];
296
+ function t(e) {
297
+ return e.resizeHandles ?? v.value.resizeHandles ?? ["se"];
298
298
  }
299
- function c(t) {
300
- const o = {
299
+ function o(e) {
300
+ const n = {
301
301
  position: "absolute",
302
302
  width: "12px",
303
303
  height: "12px",
304
304
  background: "rgba(60,60,60,0.7)",
305
305
  border: "2px solid white",
306
306
  borderRadius: "3px",
307
- cursor: `${t}-resize`,
307
+ cursor: `${e}-resize`,
308
308
  touchAction: "none"
309
309
  };
310
- return t === "nw" ? { ...o, top: -12 / 2 + "px", left: -12 / 2 + "px" } : t === "ne" ? { ...o, top: -12 / 2 + "px", right: -12 / 2 + "px" } : t === "sw" ? { ...o, bottom: -12 / 2 + "px", left: -12 / 2 + "px" } : { ...o, bottom: -12 / 2 + "px", right: -12 / 2 + "px" };
310
+ return e === "nw" ? { ...n, top: -12 / 2 + "px", left: -12 / 2 + "px" } : e === "ne" ? { ...n, top: -12 / 2 + "px", right: -12 / 2 + "px" } : e === "sw" ? { ...n, bottom: -12 / 2 + "px", left: -12 / 2 + "px" } : { ...n, bottom: -12 / 2 + "px", right: -12 / 2 + "px" };
311
311
  }
312
- const d = w(() => s.className ?? "");
313
- return (t, e) => (P(), H("div", {
312
+ const a = p(() => d.className ?? "");
313
+ return (e, i) => (k(), E("div", {
314
314
  ref_key: "viewportEl",
315
- ref: K,
316
- class: be(d.value),
317
- style: $(q.value),
318
- onPointerdown: le,
319
- onClickCapture: re
315
+ ref: F,
316
+ class: Ce(a.value),
317
+ style: G(ze.value),
318
+ onPointerdown: ue,
319
+ onClickCapture: ce
320
320
  }, [
321
- Ge("div", {
321
+ Ne("div", {
322
322
  ref_key: "planeEl",
323
- ref: N,
324
- style: $(Se.value)
323
+ ref: $,
324
+ style: G(ee.value)
325
325
  }, [
326
- i.value ? (P(), H("div", {
326
+ J.value ? (k(), E("div", {
327
327
  key: 0,
328
328
  class: "griddle-drop-indicator",
329
- style: $({
329
+ style: G({
330
330
  position: "absolute",
331
- left: i.value.left + "px",
332
- top: i.value.top + "px",
333
- width: i.value.width + "px",
334
- height: i.value.height + "px",
331
+ left: J.value.left + "px",
332
+ top: J.value.top + "px",
333
+ width: J.value.width + "px",
334
+ height: J.value.height + "px",
335
335
  boxSizing: "border-box",
336
336
  border: "2px dashed rgba(59, 91, 219, 0.55)",
337
337
  background: "rgba(59, 91, 219, 0.08)",
@@ -339,55 +339,55 @@ const ot = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost",
339
339
  pointerEvents: "none",
340
340
  zIndex: 5
341
341
  })
342
- }, null, 4)) : oe("", !0),
343
- (P(!0), H(we, null, Ce(ae.value, (o) => {
344
- var a;
345
- return P(), H(we, {
346
- key: o.key
342
+ }, null, 4)) : ne("", !0),
343
+ (k(!0), E(he, null, Ie(oe.value, (n) => {
344
+ var l;
345
+ return k(), E(he, {
346
+ key: n.key
347
347
  }, [
348
- I.value && o.tile.id === I.value.tileId ? oe("", !0) : (P(), H("div", {
348
+ x.value && n.tile.id === x.value.tileId ? ne("", !0) : (k(), E("div", {
349
349
  key: 0,
350
- "data-griddle-tile": o.tile.id,
351
- "data-griddle-instance": o.key,
352
- "data-griddle-ghost": ee(o) ? "" : void 0,
353
- "aria-hidden": D(o) ? void 0 : !0,
354
- class: be(["griddle-tile", {
355
- "griddle-resizing": ((a = _.value) == null ? void 0 : a.instanceKey) === o.key,
356
- "griddle-selected": h.value && D(o) && T.value.has(o.tile.id)
350
+ "data-griddle-tile": n.tile.id,
351
+ "data-griddle-instance": n.key,
352
+ "data-griddle-ghost": Q(n) ? "" : void 0,
353
+ "aria-hidden": N(n) ? void 0 : !0,
354
+ class: Ce(["griddle-tile", {
355
+ "griddle-resizing": ((l = K.value) == null ? void 0 : l.instanceKey) === n.key,
356
+ "griddle-selected": g.value && N(n) && T.value.has(n.tile.id)
357
357
  }]),
358
- style: $(Re(o)),
358
+ style: G(V(n)),
359
359
  ref_for: !0,
360
- ref: (r) => ne(o.key, r),
361
- onPointerdown: (r) => xe(r, o)
360
+ ref: (r) => Re(n.key, r),
361
+ onPointerdown: (r) => le(r, n)
362
362
  }, [
363
- ze(t.$slots, "tile", {
364
- tile: o.tile,
365
- selected: h.value && D(o) && T.value.has(o.tile.id)
363
+ Se(e.$slots, "tile", {
364
+ tile: n.tile,
365
+ selected: g.value && N(n) && T.value.has(n.tile.id)
366
366
  }),
367
- h.value && D(o) && o.tile.resizable !== !1 ? (P(!0), H(we, { key: 0 }, Ce(l(o.tile), (r) => (P(), H("div", {
367
+ g.value && N(n) && n.tile.resizable !== !1 ? (k(!0), E(he, { key: 0 }, Ie(t(n.tile), (r) => (k(), E("div", {
368
368
  key: r,
369
369
  "data-griddle-handle": r,
370
- style: $(c(r)),
371
- onPointerdown: (p) => te(p, o, r)
372
- }, null, 44, it))), 128)) : oe("", !0)
373
- ], 46, ot))
370
+ style: G(o(r)),
371
+ onPointerdown: (s) => ae(s, n, r)
372
+ }, null, 44, st))), 128)) : ne("", !0)
373
+ ], 46, rt))
374
374
  ], 64);
375
375
  }), 128)),
376
- I.value && J.value ? (P(), H("div", {
376
+ x.value && te.value ? (k(), E("div", {
377
377
  key: 1,
378
- "data-griddle-tile": J.value.id,
378
+ "data-griddle-tile": te.value.id,
379
379
  class: "griddle-tile griddle-dragging",
380
- style: $(n.value)
380
+ style: G(Pe.value)
381
381
  }, [
382
- ze(t.$slots, "tile", {
383
- tile: J.value,
384
- selected: T.value.has(J.value.id)
382
+ Se(e.$slots, "tile", {
383
+ tile: te.value,
384
+ selected: T.value.has(te.value.id)
385
385
  })
386
- ], 12, at)) : oe("", !0)
386
+ ], 12, dt)) : ne("", !0)
387
387
  ], 4)
388
388
  ], 38));
389
389
  }
390
- }), st = ["data-griddle-tile", "onPointerdown"], dt = ["data-griddle-handle", "onPointerdown"], ut = "a, button, input, textarea, select, [contenteditable]", pt = /* @__PURE__ */ Te({
390
+ }), vt = ["data-griddle-tile", "onPointerdown"], pt = ["data-griddle-handle", "onPointerdown"], gt = "a, button, input, textarea, select, [contenteditable]", wt = 12, mt = /* @__PURE__ */ Le({
391
391
  __name: "GriddleGrid",
392
392
  props: {
393
393
  api: {},
@@ -397,395 +397,429 @@ const ot = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost",
397
397
  selection: {}
398
398
  },
399
399
  emits: ["selectionChange", "drawCreate", "dragStart", "dragEnd", "resizeStart", "resizeEnd", "cameraChange"],
400
- setup(B, { emit: z }) {
401
- const s = B, f = z, K = w(() => {
402
- var n;
403
- return ((n = s.api.config.value.loop) == null ? void 0 : n.enabled) === !0;
404
- }), N = k(null), v = k({ scrollX: 0, scrollY: 0, width: 1e3, height: 800 }), u = w(() => s.api.config.value), h = w(() => u.value.gap ?? 0), m = w(() => h.value / 2), y = w(() => u.value.unitWidth + h.value), x = w(() => u.value.unitHeight + h.value), W = w(() => qe(u.value, v.value, 4)), ue = w(() => Je(s.api.tiles.value, W.value)), F = w(() => je(u.value, s.api.tiles.value)), O = w(() => {
405
- const n = u.value.scroll !== "none", i = {
400
+ setup(B, { emit: S }) {
401
+ const d = B, w = S, F = p(() => {
402
+ var t;
403
+ return ((t = d.api.config.value.loop) == null ? void 0 : t.enabled) === !0;
404
+ }), $ = H(null), v = H({ scrollX: 0, scrollY: 0, width: 1e3, height: 800 }), u = p(() => d.api.config.value), g = p(() => u.value.gap ?? 0), m = p(() => g.value / 2), b = p(() => u.value.unitWidth + g.value), f = p(() => u.value.unitHeight + g.value), X = p(() => Qe(u.value, v.value, 4)), de = p(() => Ze(d.api.tiles.value, X.value)), A = p(() => et(u.value, d.api.tiles.value)), _ = p(() => {
405
+ const t = u.value.scroll !== "none", o = {
406
406
  position: "relative",
407
- overflow: n ? "auto" : "visible",
408
- height: n ? s.height ?? "100%" : s.height ?? "auto"
407
+ overflow: t ? "auto" : "visible",
408
+ height: t ? d.height ?? "100%" : d.height ?? "auto"
409
409
  };
410
- return n && (i.touchAction = "none"), i;
411
- }), U = w(() => {
412
- const i = s.showGrid !== !1 ? {
410
+ return t && (o.touchAction = "none"), o;
411
+ }), U = p(() => {
412
+ const o = d.showGrid !== !1 ? {
413
413
  backgroundImage: "linear-gradient(to right, rgba(0,0,0,0.08) 1px, transparent 1px), linear-gradient(to bottom, rgba(0,0,0,0.08) 1px, transparent 1px)",
414
- backgroundSize: `${y.value}px ${x.value}px`
414
+ backgroundSize: `${b.value}px ${f.value}px`
415
415
  } : {};
416
416
  return {
417
417
  position: "relative",
418
- width: F.value.width || "100%",
419
- height: F.value.height || "100%",
418
+ width: A.value.width || "100%",
419
+ height: A.value.height || "100%",
420
420
  minWidth: "100%",
421
421
  minHeight: "100%",
422
422
  // Expose tile radius as a CSS variable so user tile content can pick it up.
423
423
  "--griddle-tile-radius": (u.value.tileRadius ?? 4) + "px",
424
- ...i
424
+ ...o
425
425
  };
426
- }), ie = k(/* @__PURE__ */ new Set()), L = w(() => s.selection ?? ie.value), j = w(() => {
427
- var n;
428
- return new Set(((n = Y.value) == null ? void 0 : n.tileIds) ?? []);
426
+ }), ie = H(/* @__PURE__ */ new Set()), W = p(() => d.selection ?? ie.value), q = p(() => {
427
+ var t;
428
+ return new Set(((t = Y.value) == null ? void 0 : t.tileIds) ?? []);
429
429
  });
430
- function Q(n) {
431
- s.selection || (ie.value = n), f("selectionChange", n);
430
+ function j(t) {
431
+ d.selection || (ie.value = t), w("selectionChange", t);
432
432
  }
433
- const ae = new $e(s.api.grid), C = new Qe(s.api.grid), R = k(null);
434
- let le = 0, re = 0;
435
- const Y = k(null), T = k(null), S = k(null), G = k(null);
436
- function I(n, i) {
437
- if (i.draggable === !1 || n.target.dataset.griddleHandle) return;
438
- const l = u.value.dragIgnoreFrom ?? ut;
439
- if (l && n.target.closest(l)) return;
440
- const c = n.metaKey || n.ctrlKey;
441
- if (u.value.enablePositioning && et(i)) {
442
- n.currentTarget.setPointerCapture(n.pointerId);
443
- const e = We({
444
- tile: i,
433
+ const oe = new Ae(d.api.grid), I = new tt(d.api.grid), z = H(null);
434
+ let ue = 0, ce = 0;
435
+ const Y = H(null), T = H(null), R = H(null), D = H(null);
436
+ let x = null;
437
+ function fe(t) {
438
+ const o = d.api.grid.getTile(t.tileId);
439
+ if (!o) return !1;
440
+ try {
441
+ t.tileElement.setPointerCapture(t.pointerId);
442
+ } catch {
443
+ return !1;
444
+ }
445
+ if (ue = t.startPointerX, ce = t.startPointerY, t.mode === "pin") {
446
+ const a = We({
447
+ tile: o,
445
448
  config: u.value,
446
449
  scrollX: v.value.scrollX,
447
450
  scrollY: v.value.scrollY,
448
451
  viewportWidth: v.value.width,
449
452
  viewportHeight: v.value.height
450
- }), o = i.position === "fixed" ? { x: e.left - v.value.scrollX, y: e.top - v.value.scrollY } : { x: e.left, y: e.top };
451
- T.value = {
452
- tileId: i.id,
453
- startPinPx: o,
454
- startPointerX: n.clientX,
455
- startPointerY: n.clientY
456
- }, f("dragStart", i.id), n.stopPropagation();
457
- return;
453
+ }), e = o.position === "fixed" ? { x: a.left - v.value.scrollX, y: a.top - v.value.scrollY } : { x: a.left, y: a.top };
454
+ return T.value = {
455
+ tileId: o.id,
456
+ startPinPx: e,
457
+ startPointerX: t.startPointerX,
458
+ startPointerY: t.startPointerY
459
+ }, w("dragStart", o.id), !0;
458
460
  }
459
- if (c) {
460
- n.preventDefault();
461
- const e = new Set(L.value);
462
- e.has(i.id) ? e.delete(i.id) : e.add(i.id), Q(e), n.stopPropagation();
461
+ return t.mode === "group" ? I.start(t.groupTileIds) ? (Y.value = {
462
+ tileIds: t.groupTileIds,
463
+ deltaX: 0,
464
+ deltaY: 0,
465
+ committedDcol: 0,
466
+ committedDrow: 0
467
+ }, w("dragStart", o.id), !0) : !1 : oe.start(o.id) ? (z.value = {
468
+ tileId: o.id,
469
+ pickupCol: o.col,
470
+ pickupRow: o.row,
471
+ deltaX: 0,
472
+ deltaY: 0,
473
+ indicatorCol: o.col,
474
+ indicatorRow: o.row
475
+ }, w("dragStart", o.id), !0) : !1;
476
+ }
477
+ function xe(t, o) {
478
+ if (t.button !== 0 || o.draggable === !1 || t.target.dataset.griddleHandle) return;
479
+ const a = u.value.dragIgnoreFrom ?? gt;
480
+ if (a && t.target.closest(a)) return;
481
+ const e = t.metaKey || t.ctrlKey;
482
+ if (u.value.enablePositioning && it(o)) {
483
+ x = {
484
+ pointerId: t.pointerId,
485
+ tileId: o.id,
486
+ tileElement: t.currentTarget,
487
+ startPointerX: t.clientX,
488
+ startPointerY: t.clientY,
489
+ mode: "pin",
490
+ groupTileIds: []
491
+ }, t.stopPropagation();
463
492
  return;
464
493
  }
465
- const d = L.value.has(i.id);
466
- d || Q(/* @__PURE__ */ new Set([i.id])), n.currentTarget.setPointerCapture(n.pointerId);
467
- const t = d ? L.value : /* @__PURE__ */ new Set([i.id]);
468
- if (t.size > 1) {
469
- const e = Array.from(t);
470
- if (!C.start(e)) return;
471
- le = n.clientX, re = n.clientY, Y.value = {
472
- tileIds: e,
473
- deltaX: 0,
474
- deltaY: 0,
475
- committedDcol: 0,
476
- committedDrow: 0
477
- }, f("dragStart", i.id), n.stopPropagation();
494
+ if (e) {
495
+ t.preventDefault();
496
+ const r = new Set(W.value);
497
+ r.has(o.id) ? r.delete(o.id) : r.add(o.id), j(r), t.stopPropagation();
478
498
  return;
479
499
  }
480
- ae.start(i.id) && (le = n.clientX, re = n.clientY, R.value = {
481
- tileId: i.id,
482
- pickupCol: i.col,
483
- pickupRow: i.row,
484
- deltaX: 0,
485
- deltaY: 0,
486
- indicatorCol: i.col,
487
- indicatorRow: i.row
488
- }, f("dragStart", i.id), n.stopPropagation());
500
+ const i = W.value.has(o.id);
501
+ i || j(/* @__PURE__ */ new Set([o.id]));
502
+ const n = i ? W.value : /* @__PURE__ */ new Set([o.id]), l = Array.from(n);
503
+ x = {
504
+ pointerId: t.pointerId,
505
+ tileId: o.id,
506
+ tileElement: t.currentTarget,
507
+ startPointerX: t.clientX,
508
+ startPointerY: t.clientY,
509
+ mode: l.length > 1 ? "group" : "single",
510
+ groupTileIds: l
511
+ }, t.stopPropagation();
489
512
  }
490
- function he(n) {
491
- var o;
492
- if (n.target.closest("[data-griddle-tile]") || ((o = u.value.interactive) == null ? void 0 : o.drawToCreate) === !1) return;
493
- Q(/* @__PURE__ */ new Set());
494
- const i = N.value;
495
- if (!i) return;
496
- const l = i.getBoundingClientRect(), c = n.clientX - l.left + i.scrollLeft, d = n.clientY - l.top + i.scrollTop, t = Math.floor(c / y.value), e = Math.floor(d / x.value);
497
- G.value = { anchorCol: t, anchorRow: e, currentCol: t, currentRow: e }, i.setPointerCapture(n.pointerId);
513
+ function K(t) {
514
+ var r;
515
+ if (t.target.closest("[data-griddle-tile]") || ((r = u.value.interactive) == null ? void 0 : r.drawToCreate) === !1) return;
516
+ j(/* @__PURE__ */ new Set());
517
+ const o = $.value;
518
+ if (!o) return;
519
+ const a = o.getBoundingClientRect(), e = t.clientX - a.left + o.scrollLeft, i = t.clientY - a.top + o.scrollTop, n = Math.floor(e / b.value), l = Math.floor(i / f.value);
520
+ D.value = { anchorCol: n, anchorRow: l, currentCol: n, currentRow: l }, o.setPointerCapture(t.pointerId);
498
521
  }
499
- function fe(n, i, l) {
500
- i.resizable !== !1 && (n.currentTarget.setPointerCapture(n.pointerId), S.value = {
501
- tileId: i.id,
502
- corner: l,
503
- startPointerX: n.clientX,
504
- startPointerY: n.clientY,
505
- startW: i.w,
506
- startH: i.h,
507
- startCol: i.col,
508
- startRow: i.row,
509
- previewW: i.w,
510
- previewH: i.h,
511
- previewCol: i.col,
512
- previewRow: i.row
513
- }, f("resizeStart", i.id), n.stopPropagation());
522
+ function me(t, o, a) {
523
+ o.resizable !== !1 && (t.currentTarget.setPointerCapture(t.pointerId), R.value = {
524
+ tileId: o.id,
525
+ corner: a,
526
+ startPointerX: t.clientX,
527
+ startPointerY: t.clientY,
528
+ startW: o.w,
529
+ startH: o.h,
530
+ startCol: o.col,
531
+ startRow: o.row,
532
+ previewW: o.w,
533
+ previewH: o.h,
534
+ previewCol: o.col,
535
+ previewRow: o.row
536
+ }, w("resizeStart", o.id), t.stopPropagation());
514
537
  }
515
- function _(n) {
516
- var t, e;
517
- if (G.value) {
518
- const o = N.value;
519
- if (o) {
520
- const a = o.getBoundingClientRect(), r = n.clientX - a.left + o.scrollLeft, p = n.clientY - a.top + o.scrollTop, g = Math.max(0, Math.floor(r / y.value)), M = Math.max(0, Math.floor(p / x.value));
521
- G.value = { ...G.value, currentCol: g, currentRow: M };
538
+ function N(t) {
539
+ var l, r;
540
+ if (D.value) {
541
+ const s = $.value;
542
+ if (s) {
543
+ const c = s.getBoundingClientRect(), h = t.clientX - c.left + s.scrollLeft, C = t.clientY - c.top + s.scrollTop, y = Math.max(0, Math.floor(h / b.value)), L = Math.max(0, Math.floor(C / f.value));
544
+ D.value = { ...D.value, currentCol: y, currentRow: L };
522
545
  }
523
546
  return;
524
547
  }
525
- const i = T.value, l = Y.value, c = R.value, d = S.value;
526
- if (i) {
527
- const o = n.clientX - i.startPointerX, a = n.clientY - i.startPointerY, r = { x: i.startPinPx.x + o, y: i.startPinPx.y + a }, p = tt(r, u.value);
528
- s.api.grid.setTilePinned(i.tileId, p);
548
+ const o = x;
549
+ if (o && t.pointerId === o.pointerId) {
550
+ if (Math.hypot(
551
+ t.clientX - o.startPointerX,
552
+ t.clientY - o.startPointerY
553
+ ) <= wt || (x = null, !fe(o))) return;
554
+ t.preventDefault();
529
555
  }
530
- if (l) {
531
- const o = n.clientX - le, a = n.clientY - re, r = Math.round(o / y.value), p = Math.round(a / x.value), g = C.update({ dcol: r, drow: p });
556
+ const a = T.value, e = Y.value, i = z.value, n = R.value;
557
+ if (a) {
558
+ const s = t.clientX - a.startPointerX, c = t.clientY - a.startPointerY, h = { x: a.startPinPx.x + s, y: a.startPinPx.y + c }, C = ot(h, u.value);
559
+ d.api.grid.setTilePinned(a.tileId, C);
560
+ }
561
+ if (e) {
562
+ const s = t.clientX - ue, c = t.clientY - ce, h = Math.round(s / b.value), C = Math.round(c / f.value), y = I.update({ dcol: h, drow: C });
532
563
  Y.value = {
533
- ...l,
534
- deltaX: o,
535
- deltaY: a,
536
- committedDcol: ((t = g.indicatorDelta) == null ? void 0 : t.dcol) ?? l.committedDcol,
537
- committedDrow: ((e = g.indicatorDelta) == null ? void 0 : e.drow) ?? l.committedDrow
538
- }, g.changed && Z();
564
+ ...e,
565
+ deltaX: s,
566
+ deltaY: c,
567
+ committedDcol: ((l = y.indicatorDelta) == null ? void 0 : l.dcol) ?? e.committedDcol,
568
+ committedDrow: ((r = y.indicatorDelta) == null ? void 0 : r.drow) ?? e.committedDrow
569
+ }, y.changed && Q();
539
570
  }
540
- if (c) {
541
- const o = n.clientX - le, a = n.clientY - re, r = c.pickupCol + Math.round(o / y.value), p = c.pickupRow + Math.round(a / x.value), g = ae.update({ col: r, row: p });
542
- R.value = {
543
- ...c,
544
- deltaX: o,
545
- deltaY: a,
546
- indicatorCol: g.indicatorCell ? g.indicatorCell.col : null,
547
- indicatorRow: g.indicatorCell ? g.indicatorCell.row : null
548
- }, g.changed && Z();
571
+ if (i) {
572
+ const s = t.clientX - ue, c = t.clientY - ce, h = i.pickupCol + Math.round(s / b.value), C = i.pickupRow + Math.round(c / f.value), y = oe.update({ col: h, row: C });
573
+ z.value = {
574
+ ...i,
575
+ deltaX: s,
576
+ deltaY: c,
577
+ indicatorCol: y.indicatorCell ? y.indicatorCell.col : null,
578
+ indicatorRow: y.indicatorCell ? y.indicatorCell.row : null
579
+ }, y.changed && Q();
549
580
  }
550
- if (d) {
551
- const o = n.clientX - d.startPointerX, a = n.clientY - d.startPointerY;
552
- let r = 0, p = 0, g = 0, M = 0;
553
- const E = Math.round(o / y.value), A = Math.round(a / x.value);
554
- (d.corner === "se" || d.corner === "ne") && (r = E), (d.corner === "se" || d.corner === "sw") && (p = A), (d.corner === "sw" || d.corner === "nw") && (r = -E, g = E), (d.corner === "ne" || d.corner === "nw") && (p = -A, M = A);
555
- const b = s.api.grid.getTile(d.tileId), X = (b == null ? void 0 : b.minW) ?? 1, Ie = (b == null ? void 0 : b.minH) ?? 1, Pe = (b == null ? void 0 : b.maxW) ?? 1 / 0, ke = (b == null ? void 0 : b.maxH) ?? 1 / 0, ye = Math.min(Pe, Math.max(X, d.startW + r)), ve = Math.min(ke, Math.max(Ie, d.startH + p)), pe = d.startCol + g, ge = d.startRow + M;
556
- (ye !== d.previewW || ve !== d.previewH || pe !== d.previewCol || ge !== d.previewRow) && (S.value = { ...d, previewW: ye, previewH: ve, previewCol: pe, previewRow: ge });
581
+ if (n) {
582
+ const s = t.clientX - n.startPointerX, c = t.clientY - n.startPointerY;
583
+ let h = 0, C = 0, y = 0, L = 0;
584
+ const P = Math.round(s / b.value), pe = Math.round(c / f.value);
585
+ (n.corner === "se" || n.corner === "ne") && (h = P), (n.corner === "se" || n.corner === "sw") && (C = pe), (n.corner === "sw" || n.corner === "nw") && (h = -P, y = P), (n.corner === "ne" || n.corner === "nw") && (C = -pe, L = pe);
586
+ const M = d.api.grid.getTile(n.tileId), ke = (M == null ? void 0 : M.minW) ?? 1, He = (M == null ? void 0 : M.minH) ?? 1, ye = (M == null ? void 0 : M.maxW) ?? 1 / 0, be = (M == null ? void 0 : M.maxH) ?? 1 / 0, ge = Math.min(ye, Math.max(ke, n.startW + h)), we = Math.min(be, Math.max(He, n.startH + C)), Xe = n.startCol + y, Ye = n.startRow + L;
587
+ (ge !== n.previewW || we !== n.previewH || Xe !== n.previewCol || Ye !== n.previewRow) && (R.value = { ...n, previewW: ge, previewH: we, previewCol: Xe, previewRow: Ye });
557
588
  }
558
589
  }
559
- function Z() {
560
- s.api.tiles.value = s.api.grid.tiles, s.api.version.value++;
590
+ function Q() {
591
+ d.api.tiles.value = d.api.grid.tiles, d.api.version.value++;
561
592
  }
562
- function D() {
563
- if (G.value) {
564
- const i = G.value, l = Math.min(i.anchorCol, i.currentCol), c = Math.min(i.anchorRow, i.currentRow), d = Math.max(1, Math.abs(i.currentCol - i.anchorCol) + 1), t = Math.max(1, Math.abs(i.currentRow - i.anchorRow) + 1);
565
- G.value = null, f("drawCreate", { col: l, row: c, w: d, h: t });
593
+ function le(t) {
594
+ if ((x == null ? void 0 : x.pointerId) === t.pointerId) {
595
+ x = null;
596
+ return;
597
+ }
598
+ if (D.value) {
599
+ const a = D.value, e = Math.min(a.anchorCol, a.currentCol), i = Math.min(a.anchorRow, a.currentRow), n = Math.max(1, Math.abs(a.currentCol - a.anchorCol) + 1), l = Math.max(1, Math.abs(a.currentRow - a.anchorRow) + 1);
600
+ D.value = null, w("drawCreate", { col: e, row: i, w: n, h: l });
566
601
  return;
567
602
  }
568
603
  if (T.value) {
569
- const i = T.value.tileId;
570
- T.value = null, f("dragEnd", i, !0);
604
+ const a = T.value.tileId;
605
+ T.value = null, w("dragEnd", a, !0);
571
606
  }
572
607
  if (Y.value) {
573
- const i = Y.value.tileIds, { committed: l } = C.end();
574
- Y.value = null, Z();
575
- const c = i[0];
576
- c !== void 0 && f("dragEnd", c, l);
608
+ const a = Y.value.tileIds, { committed: e } = I.end();
609
+ Y.value = null, Q();
610
+ const i = a[0];
611
+ i !== void 0 && w("dragEnd", i, e);
577
612
  }
578
- if (R.value) {
579
- const i = R.value.tileId, { committed: l } = ae.end();
580
- R.value = null, Z(), f("dragEnd", i, l);
613
+ if (z.value) {
614
+ const a = z.value.tileId, { committed: e } = oe.end();
615
+ z.value = null, Q(), w("dragEnd", a, e);
581
616
  }
582
- const n = S.value;
583
- if (n) {
584
- const i = s.api.grid.getTile(n.tileId);
585
- let l = !1;
586
- i && ((n.previewCol !== i.col || n.previewRow !== i.row) && s.api.moveTile(n.tileId, { col: n.previewCol, row: n.previewRow }), n.previewW !== i.w || n.previewH !== i.h ? l = s.api.resizeTile(n.tileId, { w: n.previewW, h: n.previewH }) : l = n.previewCol !== n.startCol || n.previewRow !== n.startRow || n.previewW !== n.startW || n.previewH !== n.startH), S.value = null, f("resizeEnd", n.tileId, l);
617
+ const o = R.value;
618
+ if (o) {
619
+ const a = d.api.grid.getTile(o.tileId);
620
+ let e = !1;
621
+ a && ((o.previewCol !== a.col || o.previewRow !== a.row) && d.api.moveTile(o.tileId, { col: o.previewCol, row: o.previewRow }), o.previewW !== a.w || o.previewH !== a.h ? e = d.api.resizeTile(o.tileId, { w: o.previewW, h: o.previewH }) : e = o.previewCol !== o.startCol || o.previewRow !== o.startRow || o.previewW !== o.startW || o.previewH !== o.startH), R.value = null, w("resizeEnd", o.tileId, e);
587
622
  }
588
623
  }
589
- function ee() {
590
- const n = N.value;
591
- n && (v.value = {
592
- scrollX: n.scrollLeft,
593
- scrollY: n.scrollTop,
594
- width: n.clientWidth,
595
- height: n.clientHeight
624
+ function ae() {
625
+ const t = $.value;
626
+ t && (v.value = {
627
+ scrollX: t.scrollLeft,
628
+ scrollY: t.scrollTop,
629
+ width: t.clientWidth,
630
+ height: t.clientHeight
596
631
  });
597
632
  }
598
- function xe(n) {
599
- n.key === "Escape" && Q(/* @__PURE__ */ new Set());
633
+ function ve(t) {
634
+ t.key === "Escape" && j(/* @__PURE__ */ new Set());
600
635
  }
601
- let te = null;
602
- De(() => {
603
- ee();
604
- const n = N.value;
605
- n && (n.addEventListener("scroll", ee, { passive: !0 }), te = new ResizeObserver(ee), te.observe(n)), window.addEventListener("pointermove", _), window.addEventListener("pointerup", D), window.addEventListener("pointercancel", D), window.addEventListener("keydown", xe);
636
+ let O = null;
637
+ Ge(() => {
638
+ ae();
639
+ const t = $.value;
640
+ t && (t.addEventListener("scroll", ae, { passive: !0 }), O = new ResizeObserver(ae), O.observe(t)), window.addEventListener("pointermove", N), window.addEventListener("pointerup", le), window.addEventListener("pointercancel", le), window.addEventListener("keydown", ve);
606
641
  }), Me(() => {
607
- const n = N.value;
608
- n && n.removeEventListener("scroll", ee), te == null || te.disconnect(), window.removeEventListener("pointermove", _), window.removeEventListener("pointerup", D), window.removeEventListener("pointercancel", D), window.removeEventListener("keydown", xe);
642
+ x = null;
643
+ const t = $.value;
644
+ t && t.removeEventListener("scroll", ae), O == null || O.disconnect(), window.removeEventListener("pointermove", N), window.removeEventListener("pointerup", le), window.removeEventListener("pointercancel", le), window.removeEventListener("keydown", ve);
609
645
  });
610
- const se = /* @__PURE__ */ new Map(), V = /* @__PURE__ */ new Map();
611
- function me(n, i) {
612
- i ? se.set(n, i) : se.delete(n);
646
+ const re = /* @__PURE__ */ new Map(), Z = /* @__PURE__ */ new Map();
647
+ function se(t, o) {
648
+ o ? re.set(t, o) : re.delete(t);
613
649
  }
614
- He(() => s.api.version.value, async () => {
615
- var l;
616
- await Le();
617
- const n = ((l = R.value) == null ? void 0 : l.tileId) ?? null, i = j.value;
618
- for (const c of s.api.tiles.value) {
619
- const d = c.col * y.value + m.value, t = c.row * x.value + m.value;
620
- if (c.id === n || i.has(c.id)) {
621
- V.set(c.id, { x: d, y: t });
650
+ Ee(() => d.api.version.value, async () => {
651
+ var a;
652
+ await $e();
653
+ const t = ((a = z.value) == null ? void 0 : a.tileId) ?? null, o = q.value;
654
+ for (const e of d.api.tiles.value) {
655
+ const i = e.col * b.value + m.value, n = e.row * f.value + m.value;
656
+ if (e.id === t || o.has(e.id)) {
657
+ Z.set(e.id, { x: i, y: n });
622
658
  continue;
623
659
  }
624
- const e = V.get(c.id), o = se.get(c.id);
625
- if (e && o) {
626
- const a = e.x - d, r = e.y - t;
627
- (a !== 0 || r !== 0) && (o.style.transition = "none", o.style.transform = `translate(${a}px, ${r}px)`, requestAnimationFrame(() => {
628
- o.style.transition = "transform 220ms cubic-bezier(.2,.7,.2,1)", o.style.transform = "translate(0,0)";
629
- }));
660
+ const l = Z.get(e.id), r = re.get(e.id);
661
+ if (l && r) {
662
+ const s = l.x - i, c = l.y - n;
663
+ (s !== 0 || c !== 0) && _e(r, s, c, u.value.animation);
630
664
  }
631
- V.set(c.id, { x: d, y: t });
665
+ Z.set(e.id, { x: i, y: n });
632
666
  }
633
667
  });
634
- const ce = w(() => {
635
- var d, t;
636
- const n = /* @__PURE__ */ new Map(), i = [], l = Y.value, c = j.value;
637
- for (const e of ue.value) {
638
- let o;
639
- if (((d = S.value) == null ? void 0 : d.tileId) === e.id) {
640
- const a = S.value.previewW, r = S.value.previewH;
641
- o = {
642
- left: S.value.previewCol * y.value + m.value,
643
- top: S.value.previewRow * x.value + m.value,
644
- width: a * u.value.unitWidth + (a - 1) * h.value,
645
- height: r * u.value.unitHeight + (r - 1) * h.value,
668
+ const Re = p(() => {
669
+ var i, n;
670
+ const t = /* @__PURE__ */ new Map(), o = [], a = Y.value, e = q.value;
671
+ for (const l of de.value) {
672
+ let r;
673
+ if (((i = R.value) == null ? void 0 : i.tileId) === l.id) {
674
+ const s = R.value.previewW, c = R.value.previewH;
675
+ r = {
676
+ left: R.value.previewCol * b.value + m.value,
677
+ top: R.value.previewRow * f.value + m.value,
678
+ width: s * u.value.unitWidth + (s - 1) * g.value,
679
+ height: c * u.value.unitHeight + (c - 1) * g.value,
646
680
  zIndex: 10,
647
681
  effective: "static"
648
682
  };
649
- } else if (((t = R.value) == null ? void 0 : t.tileId) === e.id) {
650
- const a = R.value;
651
- o = {
652
- left: a.pickupCol * y.value + m.value,
653
- top: a.pickupRow * x.value + m.value,
654
- width: e.w * u.value.unitWidth + (e.w - 1) * h.value,
655
- height: e.h * u.value.unitHeight + (e.h - 1) * h.value,
656
- transform: `translate(${a.deltaX}px, ${a.deltaY}px)`,
683
+ } else if (((n = z.value) == null ? void 0 : n.tileId) === l.id) {
684
+ const s = z.value;
685
+ r = {
686
+ left: s.pickupCol * b.value + m.value,
687
+ top: s.pickupRow * f.value + m.value,
688
+ width: l.w * u.value.unitWidth + (l.w - 1) * g.value,
689
+ height: l.h * u.value.unitHeight + (l.h - 1) * g.value,
690
+ transform: `translate(${s.deltaX}px, ${s.deltaY}px)`,
657
691
  zIndex: 20,
658
692
  effective: "static"
659
693
  };
660
- } else if (l && c.has(e.id)) {
661
- const a = C.pickupCell(e.id), r = (a ? a.col * y.value : e.col * y.value) + m.value, p = (a ? a.row * x.value : e.row * x.value) + m.value;
662
- o = {
663
- left: r,
664
- top: p,
665
- width: e.w * u.value.unitWidth + (e.w - 1) * h.value,
666
- height: e.h * u.value.unitHeight + (e.h - 1) * h.value,
667
- transform: `translate(${l.deltaX}px, ${l.deltaY}px)`,
694
+ } else if (a && e.has(l.id)) {
695
+ const s = I.pickupCell(l.id), c = (s ? s.col * b.value : l.col * b.value) + m.value, h = (s ? s.row * f.value : l.row * f.value) + m.value;
696
+ r = {
697
+ left: c,
698
+ top: h,
699
+ width: l.w * u.value.unitWidth + (l.w - 1) * g.value,
700
+ height: l.h * u.value.unitHeight + (l.h - 1) * g.value,
701
+ transform: `translate(${a.deltaX}px, ${a.deltaY}px)`,
668
702
  zIndex: 20,
669
703
  effective: "static"
670
704
  };
671
705
  } else
672
- o = We({
673
- tile: e,
706
+ r = We({
707
+ tile: l,
674
708
  config: u.value,
675
709
  scrollX: v.value.scrollX,
676
710
  scrollY: v.value.scrollY,
677
711
  viewportWidth: v.value.width,
678
712
  viewportHeight: v.value.height
679
- }), o.effective === "sticky" && i.push({ tile: e, layout: o });
680
- n.set(e.id, o);
713
+ }), r.effective === "sticky" && o.push({ tile: l, layout: r });
714
+ t.set(l.id, r);
681
715
  }
682
- return i.length > 1 && Ze(i), n;
716
+ return o.length > 1 && nt(o), t;
683
717
  });
684
- function de(n) {
685
- var a, r, p;
686
- const i = ((a = R.value) == null ? void 0 : a.tileId) === n.id, l = j.value.has(n.id) && Y.value !== null, c = ((r = T.value) == null ? void 0 : r.tileId) === n.id, d = ((p = S.value) == null ? void 0 : p.tileId) === n.id, t = L.value.has(n.id), e = ce.value.get(n.id) ?? {
718
+ function ze(t) {
719
+ var s, c, h;
720
+ const o = ((s = z.value) == null ? void 0 : s.tileId) === t.id, a = q.value.has(t.id) && Y.value !== null, e = ((c = T.value) == null ? void 0 : c.tileId) === t.id, i = ((h = R.value) == null ? void 0 : h.tileId) === t.id, n = W.value.has(t.id), l = Re.value.get(t.id) ?? {
687
721
  left: 0,
688
722
  top: 0,
689
723
  width: 0,
690
724
  height: 0,
691
725
  zIndex: 1
692
- }, o = i || c || l;
726
+ }, r = o || e || a;
693
727
  return {
694
728
  position: "absolute",
695
- left: e.left + "px",
696
- top: e.top + "px",
697
- width: e.width + "px",
698
- height: e.height + "px",
729
+ left: l.left + "px",
730
+ top: l.top + "px",
731
+ width: l.width + "px",
732
+ height: l.height + "px",
699
733
  boxSizing: "border-box",
700
- cursor: o ? "grabbing" : "grab",
734
+ cursor: r ? "grabbing" : "grab",
701
735
  userSelect: "none",
702
- zIndex: e.zIndex,
703
- opacity: o || d ? 0.85 : 1,
704
- willChange: "transform",
705
- transform: e.transform ?? "",
706
- filter: o ? "drop-shadow(0 8px 16px rgba(0,0,0,0.18))" : "",
707
- transition: o ? "filter 120ms ease-out, opacity 120ms ease-out" : "",
708
- boxShadow: t ? "0 0 0 3px rgba(59, 91, 219, 0.85), inset 0 0 0 1px rgba(59, 91, 219, 0.3)" : "",
736
+ zIndex: l.zIndex,
737
+ opacity: r || i ? 0.85 : 1,
738
+ willChange: "transform, translate",
739
+ transform: l.transform ?? "",
740
+ filter: r ? "drop-shadow(0 8px 16px rgba(0,0,0,0.18))" : "",
741
+ transition: r ? at(u.value.animation) : "",
742
+ boxShadow: n ? "0 0 0 3px rgba(59, 91, 219, 0.85), inset 0 0 0 1px rgba(59, 91, 219, 0.3)" : "",
709
743
  borderRadius: (u.value.tileRadius ?? 4) + "px"
710
744
  };
711
745
  }
712
- const ne = w(() => {
713
- const n = R.value;
714
- if (!n || n.indicatorCol === null || n.indicatorRow === null) return null;
715
- const i = s.api.grid.getTile(n.tileId);
716
- return i ? {
717
- left: n.indicatorCol * y.value + m.value,
718
- top: n.indicatorRow * x.value + m.value,
719
- width: i.w * u.value.unitWidth + (i.w - 1) * h.value,
720
- height: i.h * u.value.unitHeight + (i.h - 1) * h.value
746
+ const ee = p(() => {
747
+ const t = z.value;
748
+ if (!t || t.indicatorCol === null || t.indicatorRow === null) return null;
749
+ const o = d.api.grid.getTile(t.tileId);
750
+ return o ? {
751
+ left: t.indicatorCol * b.value + m.value,
752
+ top: t.indicatorRow * f.value + m.value,
753
+ width: o.w * u.value.unitWidth + (o.w - 1) * g.value,
754
+ height: o.h * u.value.unitHeight + (o.h - 1) * g.value
721
755
  } : null;
722
- }), q = w(() => {
723
- const n = G.value;
724
- if (!n) return null;
725
- const i = Math.min(n.anchorCol, n.currentCol), l = Math.min(n.anchorRow, n.currentRow), c = Math.max(1, Math.abs(n.currentCol - n.anchorCol) + 1), d = Math.max(1, Math.abs(n.currentRow - n.anchorRow) + 1);
756
+ }), V = p(() => {
757
+ const t = D.value;
758
+ if (!t) return null;
759
+ const o = Math.min(t.anchorCol, t.currentCol), a = Math.min(t.anchorRow, t.currentRow), e = Math.max(1, Math.abs(t.currentCol - t.anchorCol) + 1), i = Math.max(1, Math.abs(t.currentRow - t.anchorRow) + 1);
726
760
  return {
727
- left: i * y.value + m.value,
728
- top: l * x.value + m.value,
729
- width: c * u.value.unitWidth + (c - 1) * h.value,
730
- height: d * u.value.unitHeight + (d - 1) * h.value,
731
- label: `${c}×${d}`
761
+ left: o * b.value + m.value,
762
+ top: a * f.value + m.value,
763
+ width: e * u.value.unitWidth + (e - 1) * g.value,
764
+ height: i * u.value.unitHeight + (i - 1) * g.value,
765
+ label: `${e}×${i}`
732
766
  };
733
767
  });
734
- function Se(n) {
735
- return n.resizeHandles ?? u.value.resizeHandles ?? ["se"];
768
+ function te(t) {
769
+ return t.resizeHandles ?? u.value.resizeHandles ?? ["se"];
736
770
  }
737
- function Re(n) {
738
- const l = {
771
+ function Pe(t) {
772
+ const a = {
739
773
  position: "absolute",
740
774
  width: "12px",
741
775
  height: "12px",
742
776
  background: "rgba(60,60,60,0.7)",
743
777
  border: "2px solid white",
744
778
  borderRadius: "3px",
745
- cursor: `${n}-resize`,
779
+ cursor: `${t}-resize`,
746
780
  touchAction: "none"
747
781
  };
748
- return n === "nw" ? { ...l, top: -12 / 2 + "px", left: -12 / 2 + "px" } : n === "ne" ? { ...l, top: -12 / 2 + "px", right: -12 / 2 + "px" } : n === "sw" ? { ...l, bottom: -12 / 2 + "px", left: -12 / 2 + "px" } : { ...l, bottom: -12 / 2 + "px", right: -12 / 2 + "px" };
782
+ return t === "nw" ? { ...a, top: -12 / 2 + "px", left: -12 / 2 + "px" } : t === "ne" ? { ...a, top: -12 / 2 + "px", right: -12 / 2 + "px" } : t === "sw" ? { ...a, bottom: -12 / 2 + "px", left: -12 / 2 + "px" } : { ...a, bottom: -12 / 2 + "px", right: -12 / 2 + "px" };
749
783
  }
750
- const J = w(() => s.className ?? "");
751
- return (n, i) => K.value ? (P(), Ne(rt, {
784
+ const J = p(() => d.className ?? "");
785
+ return (t, o) => F.value ? (k(), Oe(ct, {
752
786
  key: 0,
753
787
  api: B.api,
754
788
  "class-name": J.value,
755
789
  height: B.height,
756
790
  "show-grid": B.showGrid,
757
- selection: s.selection,
758
- onSelectionChange: i[0] || (i[0] = (l) => f("selectionChange", l)),
759
- onDragStart: i[1] || (i[1] = (l) => f("dragStart", l)),
760
- onDragEnd: i[2] || (i[2] = (l, c) => f("dragEnd", l, c)),
761
- onResizeStart: i[3] || (i[3] = (l) => f("resizeStart", l)),
762
- onResizeEnd: i[4] || (i[4] = (l, c) => f("resizeEnd", l, c)),
763
- onCameraChange: i[5] || (i[5] = (l) => f("cameraChange", l))
791
+ selection: d.selection,
792
+ onSelectionChange: o[0] || (o[0] = (a) => w("selectionChange", a)),
793
+ onDragStart: o[1] || (o[1] = (a) => w("dragStart", a)),
794
+ onDragEnd: o[2] || (o[2] = (a, e) => w("dragEnd", a, e)),
795
+ onResizeStart: o[3] || (o[3] = (a) => w("resizeStart", a)),
796
+ onResizeEnd: o[4] || (o[4] = (a, e) => w("resizeEnd", a, e)),
797
+ onCameraChange: o[5] || (o[5] = (a) => w("cameraChange", a))
764
798
  }, {
765
- tile: Ae((l) => [
766
- ze(n.$slots, "tile", Fe(Oe(l)))
799
+ tile: Be((a) => [
800
+ Se(t.$slots, "tile", Fe(Ke(a)))
767
801
  ]),
768
802
  _: 3
769
- }, 8, ["api", "class-name", "height", "show-grid", "selection"])) : (P(), H("div", {
803
+ }, 8, ["api", "class-name", "height", "show-grid", "selection"])) : (k(), E("div", {
770
804
  key: 1,
771
805
  ref_key: "scrollEl",
772
- ref: N,
773
- class: be(J.value),
774
- style: $(O.value),
775
- onPointerdown: he
806
+ ref: $,
807
+ class: Ce(J.value),
808
+ style: G(_.value),
809
+ onPointerdown: K
776
810
  }, [
777
- Ge("div", {
778
- style: $(U.value)
811
+ Ne("div", {
812
+ style: G(U.value)
779
813
  }, [
780
- ne.value ? (P(), H("div", {
814
+ ee.value ? (k(), E("div", {
781
815
  key: 0,
782
816
  class: "griddle-drop-indicator",
783
- style: $({
817
+ style: G({
784
818
  position: "absolute",
785
- left: ne.value.left + "px",
786
- top: ne.value.top + "px",
787
- width: ne.value.width + "px",
788
- height: ne.value.height + "px",
819
+ left: ee.value.left + "px",
820
+ top: ee.value.top + "px",
821
+ width: ee.value.width + "px",
822
+ height: ee.value.height + "px",
789
823
  boxSizing: "border-box",
790
824
  border: "2px dashed rgba(59, 91, 219, 0.55)",
791
825
  background: "rgba(59, 91, 219, 0.08)",
@@ -793,16 +827,16 @@ const ot = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost",
793
827
  pointerEvents: "none",
794
828
  zIndex: 5
795
829
  })
796
- }, null, 4)) : oe("", !0),
797
- q.value ? (P(), H("div", {
830
+ }, null, 4)) : ne("", !0),
831
+ V.value ? (k(), E("div", {
798
832
  key: 1,
799
833
  class: "griddle-draw-ghost",
800
- style: $({
834
+ style: G({
801
835
  position: "absolute",
802
- left: q.value.left + "px",
803
- top: q.value.top + "px",
804
- width: q.value.width + "px",
805
- height: q.value.height + "px",
836
+ left: V.value.left + "px",
837
+ top: V.value.top + "px",
838
+ width: V.value.width + "px",
839
+ height: V.value.height + "px",
806
840
  boxSizing: "border-box",
807
841
  border: "2px dashed rgba(59, 91, 219, 0.55)",
808
842
  background: "rgba(59, 91, 219, 0.08)",
@@ -817,59 +851,59 @@ const ot = ["data-griddle-tile", "data-griddle-instance", "data-griddle-ghost",
817
851
  color: "rgba(59, 91, 219, 0.8)",
818
852
  userSelect: "none"
819
853
  })
820
- }, _e(q.value.label), 5)) : oe("", !0),
821
- (P(!0), H(we, null, Ce(ue.value, (l) => {
822
- var c, d, t;
823
- return P(), H("div", {
824
- key: l.id,
825
- "data-griddle-tile": l.id,
826
- class: be(["griddle-tile", {
827
- "griddle-dragging": ((c = R.value) == null ? void 0 : c.tileId) === l.id || ((d = T.value) == null ? void 0 : d.tileId) === l.id || Y.value !== null && j.value.has(l.id),
828
- "griddle-resizing": ((t = S.value) == null ? void 0 : t.tileId) === l.id,
829
- "griddle-selected": L.value.has(l.id)
854
+ }, Ue(V.value.label), 5)) : ne("", !0),
855
+ (k(!0), E(he, null, Ie(de.value, (a) => {
856
+ var e, i, n;
857
+ return k(), E("div", {
858
+ key: a.id,
859
+ "data-griddle-tile": a.id,
860
+ class: Ce(["griddle-tile", {
861
+ "griddle-dragging": ((e = z.value) == null ? void 0 : e.tileId) === a.id || ((i = T.value) == null ? void 0 : i.tileId) === a.id || Y.value !== null && q.value.has(a.id),
862
+ "griddle-resizing": ((n = R.value) == null ? void 0 : n.tileId) === a.id,
863
+ "griddle-selected": W.value.has(a.id)
830
864
  }]),
831
- style: $(de(l)),
832
- onPointerdown: (e) => I(e, l),
865
+ style: G(ze(a)),
866
+ onPointerdown: (l) => xe(l, a),
833
867
  ref_for: !0,
834
- ref: (e) => me(l.id, e)
868
+ ref: (l) => se(a.id, l)
835
869
  }, [
836
- ze(n.$slots, "tile", {
837
- tile: l,
838
- selected: L.value.has(l.id)
870
+ Se(t.$slots, "tile", {
871
+ tile: a,
872
+ selected: W.value.has(a.id)
839
873
  }),
840
- l.resizable !== !1 ? (P(!0), H(we, { key: 0 }, Ce(Se(l), (e) => (P(), H("div", {
841
- key: e,
842
- "data-griddle-handle": e,
843
- style: $(Re(e)),
844
- onPointerdown: (o) => fe(o, l, e)
845
- }, null, 44, dt))), 128)) : oe("", !0)
846
- ], 46, st);
874
+ a.resizable !== !1 ? (k(!0), E(he, { key: 0 }, Ie(te(a), (l) => (k(), E("div", {
875
+ key: l,
876
+ "data-griddle-handle": l,
877
+ style: G(Pe(l)),
878
+ onPointerdown: (r) => me(r, a, l)
879
+ }, null, 44, pt))), 128)) : ne("", !0)
880
+ ], 46, vt);
847
881
  }), 128))
848
882
  ], 4)
849
883
  ], 38));
850
884
  }
851
885
  });
852
- function gt(B) {
853
- const z = new nt(B.config, B.tiles ?? []), s = Xe(z.tiles), f = Xe(z.config), K = k(0), N = z.changes.on(() => {
854
- s.value = z.tiles, f.value = z.config, K.value++;
886
+ function yt(B) {
887
+ const S = new lt(B.config, B.tiles ?? []), d = Te(S.tiles), w = Te(S.config), F = H(0), $ = S.changes.on(() => {
888
+ d.value = S.tiles, w.value = S.config, F.value++;
855
889
  });
856
- return Me(N), {
857
- grid: z,
858
- tiles: s,
859
- config: f,
860
- version: K,
861
- moveTile: (u, h) => z.moveTile(u, h),
862
- resizeTile: (u, h) => z.resizeTile(u, h),
863
- addTile: (u) => z.addTile(u),
864
- removeTile: (u) => z.removeTile(u),
865
- updateConfig: (u) => z.updateConfig(u),
866
- toJSON: () => z.toJSON(),
867
- loadJSON: (u) => z.loadJSON(u)
890
+ return Me($), {
891
+ grid: S,
892
+ tiles: d,
893
+ config: w,
894
+ version: F,
895
+ moveTile: (u, g) => S.moveTile(u, g),
896
+ resizeTile: (u, g) => S.resizeTile(u, g),
897
+ addTile: (u) => S.addTile(u),
898
+ removeTile: (u) => S.removeTile(u),
899
+ updateConfig: (u) => S.updateConfig(u),
900
+ toJSON: () => S.toJSON(),
901
+ loadJSON: (u) => S.loadJSON(u)
868
902
  };
869
903
  }
870
904
  export {
871
- pt as GriddleGrid,
872
- rt as GriddleLoopGrid,
873
- gt as useGriddle
905
+ mt as GriddleGrid,
906
+ ct as GriddleLoopGrid,
907
+ yt as useGriddle
874
908
  };
875
909
  //# sourceMappingURL=index.js.map