@canvus/core 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/drop-zone.d.ts.map +1 -1
- package/dist/drop-zone.js +16 -0
- package/dist/drop-zone.js.map +1 -1
- package/dist/handlers/clipboard.handler.d.ts +22 -0
- package/dist/handlers/clipboard.handler.d.ts.map +1 -0
- package/dist/handlers/clipboard.handler.js +349 -0
- package/dist/handlers/clipboard.handler.js.map +1 -0
- package/dist/handlers/command.handler.d.ts +18 -0
- package/dist/handlers/command.handler.d.ts.map +1 -0
- package/dist/handlers/command.handler.js +430 -0
- package/dist/handlers/command.handler.js.map +1 -0
- package/dist/handlers/drag.handler.d.ts +22 -0
- package/dist/handlers/drag.handler.d.ts.map +1 -0
- package/dist/handlers/drag.handler.js +669 -0
- package/dist/handlers/drag.handler.js.map +1 -0
- package/dist/handlers/draw.handler.d.ts +37 -0
- package/dist/handlers/draw.handler.d.ts.map +1 -0
- package/dist/handlers/draw.handler.js +210 -0
- package/dist/handlers/draw.handler.js.map +1 -0
- package/dist/handlers/index.d.ts +10 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +12 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/pan.handler.d.ts +34 -0
- package/dist/handlers/pan.handler.d.ts.map +1 -0
- package/dist/handlers/pan.handler.js +95 -0
- package/dist/handlers/pan.handler.js.map +1 -0
- package/dist/handlers/resize.handler.d.ts +26 -0
- package/dist/handlers/resize.handler.d.ts.map +1 -0
- package/dist/handlers/resize.handler.js +487 -0
- package/dist/handlers/resize.handler.js.map +1 -0
- package/dist/handlers/selection.handler.d.ts +22 -0
- package/dist/handlers/selection.handler.d.ts.map +1 -0
- package/dist/handlers/selection.handler.js +259 -0
- package/dist/handlers/selection.handler.js.map +1 -0
- package/dist/handlers/spacing.handler.d.ts +29 -0
- package/dist/handlers/spacing.handler.d.ts.map +1 -0
- package/dist/handlers/spacing.handler.js +326 -0
- package/dist/handlers/spacing.handler.js.map +1 -0
- package/dist/handlers/types.d.ts +204 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +10 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/shadow-mount.d.ts.map +1 -1
- package/dist/shadow-mount.js +51 -2
- package/dist/shadow-mount.js.map +1 -1
- package/dist/workspace.d.ts +149 -68
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +349 -2208
- package/dist/workspace.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────
|
|
2
|
+
// canvus/src/handlers/resize.handler.ts
|
|
3
|
+
// Handles hit-testing and dragging for 8-anchor element resize handles.
|
|
4
|
+
// ─────────────────────────────────────────────────────────────
|
|
5
|
+
import { anchorCursor, computeAlignmentGuides } from "../renderer.js";
|
|
6
|
+
import { detectLayout, parseGridTracks } from "../layout.js";
|
|
7
|
+
/**
|
|
8
|
+
* Maps a resize anchor to the CSS properties it affects.
|
|
9
|
+
*/
|
|
10
|
+
export function getLockedPropertiesForAnchor(anchor) {
|
|
11
|
+
const props = [];
|
|
12
|
+
const affectsWidth = anchor === "e" || anchor === "w" ||
|
|
13
|
+
anchor === "ne" || anchor === "nw" ||
|
|
14
|
+
anchor === "se" || anchor === "sw";
|
|
15
|
+
const affectsHeight = anchor === "n" || anchor === "s" ||
|
|
16
|
+
anchor === "ne" || anchor === "nw" ||
|
|
17
|
+
anchor === "se" || anchor === "sw";
|
|
18
|
+
if (affectsWidth)
|
|
19
|
+
props.push("width");
|
|
20
|
+
if (affectsHeight)
|
|
21
|
+
props.push("height");
|
|
22
|
+
return props;
|
|
23
|
+
}
|
|
24
|
+
/** Helper to compute resized bounds. */
|
|
25
|
+
function computeResizedRect(start, anchor, dx, dy, minSize, symmetrical) {
|
|
26
|
+
let { x, y, width, height } = start;
|
|
27
|
+
const affectsLeft = anchor === "nw" || anchor === "w" || anchor === "sw";
|
|
28
|
+
const affectsRight = anchor === "ne" || anchor === "e" || anchor === "se";
|
|
29
|
+
const affectsTop = anchor === "nw" || anchor === "n" || anchor === "ne";
|
|
30
|
+
const affectsBottom = anchor === "sw" || anchor === "s" || anchor === "se";
|
|
31
|
+
if (symmetrical) {
|
|
32
|
+
const centerX = start.x + start.width / 2;
|
|
33
|
+
const centerY = start.y + start.height / 2;
|
|
34
|
+
if (affectsRight) {
|
|
35
|
+
width = Math.max(minSize, start.width + 2 * dx);
|
|
36
|
+
}
|
|
37
|
+
else if (affectsLeft) {
|
|
38
|
+
width = Math.max(minSize, start.width - 2 * dx);
|
|
39
|
+
}
|
|
40
|
+
if (affectsBottom) {
|
|
41
|
+
height = Math.max(minSize, start.height + 2 * dy);
|
|
42
|
+
}
|
|
43
|
+
else if (affectsTop) {
|
|
44
|
+
height = Math.max(minSize, start.height - 2 * dy);
|
|
45
|
+
}
|
|
46
|
+
x = centerX - width / 2;
|
|
47
|
+
y = centerY - height / 2;
|
|
48
|
+
return { x, y, width, height };
|
|
49
|
+
}
|
|
50
|
+
if (affectsRight) {
|
|
51
|
+
width = Math.max(minSize, width + dx);
|
|
52
|
+
}
|
|
53
|
+
if (affectsLeft) {
|
|
54
|
+
const newWidth = Math.max(minSize, width - dx);
|
|
55
|
+
x = x + (width - newWidth); // Shift origin to compensate.
|
|
56
|
+
width = newWidth;
|
|
57
|
+
}
|
|
58
|
+
if (affectsBottom) {
|
|
59
|
+
height = Math.max(minSize, height + dy);
|
|
60
|
+
}
|
|
61
|
+
if (affectsTop) {
|
|
62
|
+
const newHeight = Math.max(minSize, height - dy);
|
|
63
|
+
y = y + (height - newHeight);
|
|
64
|
+
height = newHeight;
|
|
65
|
+
}
|
|
66
|
+
return { x, y, width, height };
|
|
67
|
+
}
|
|
68
|
+
// ── Layout Grid Helpers ─────────────────────────────────────
|
|
69
|
+
function getGridStart(element, dimension) {
|
|
70
|
+
const cs = getComputedStyle(element);
|
|
71
|
+
const startVal = cs.getPropertyValue(`grid-${dimension}-start`);
|
|
72
|
+
const val = cs.getPropertyValue(`grid-${dimension}`);
|
|
73
|
+
const startNum = parseInt(startVal, 10);
|
|
74
|
+
if (!isNaN(startNum))
|
|
75
|
+
return startNum;
|
|
76
|
+
if (val) {
|
|
77
|
+
const match = val.match(/^\s*(\d+)/);
|
|
78
|
+
if (match && match[1]) {
|
|
79
|
+
return parseInt(match[1], 10);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return getRealGridStart(element, dimension);
|
|
83
|
+
}
|
|
84
|
+
function getRealGridStart(element, dimension) {
|
|
85
|
+
const parent = element.parentElement;
|
|
86
|
+
if (!parent)
|
|
87
|
+
return 1;
|
|
88
|
+
let current = parent;
|
|
89
|
+
let offset = 0;
|
|
90
|
+
let gap = 0;
|
|
91
|
+
let tracks = [];
|
|
92
|
+
let definingGrid = null;
|
|
93
|
+
while (current) {
|
|
94
|
+
const cs = getComputedStyle(current);
|
|
95
|
+
const display = cs.display;
|
|
96
|
+
if (display.includes("grid")) {
|
|
97
|
+
const template = cs.getPropertyValue(`grid-template-${dimension}s`);
|
|
98
|
+
if (template && !template.includes("subgrid")) {
|
|
99
|
+
definingGrid = current;
|
|
100
|
+
gap = parseFloat(cs.getPropertyValue(`${dimension}-gap`)) || 0;
|
|
101
|
+
tracks = parseGridTracks(template, gap);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const nextParent = current.parentElement;
|
|
106
|
+
if (!nextParent)
|
|
107
|
+
break;
|
|
108
|
+
const currentRect = current.getBoundingClientRect();
|
|
109
|
+
const parentRect = nextParent.getBoundingClientRect();
|
|
110
|
+
const pcs = getComputedStyle(nextParent);
|
|
111
|
+
const padLeft = parseFloat(pcs.paddingLeft) || 0;
|
|
112
|
+
const padTop = parseFloat(pcs.paddingTop) || 0;
|
|
113
|
+
offset += (dimension === "column")
|
|
114
|
+
? (currentRect.left - parentRect.left - padLeft)
|
|
115
|
+
: (currentRect.top - parentRect.top - padTop);
|
|
116
|
+
current = nextParent;
|
|
117
|
+
}
|
|
118
|
+
if (!definingGrid || tracks.length === 0)
|
|
119
|
+
return 1;
|
|
120
|
+
const elRect = element.getBoundingClientRect();
|
|
121
|
+
const defRect = definingGrid.getBoundingClientRect();
|
|
122
|
+
const defStyle = getComputedStyle(definingGrid);
|
|
123
|
+
const defPadLeft = parseFloat(defStyle.paddingLeft) || 0;
|
|
124
|
+
const defPadTop = parseFloat(defStyle.paddingTop) || 0;
|
|
125
|
+
const elOffset = (dimension === "column")
|
|
126
|
+
? (elRect.left - defRect.left - defPadLeft)
|
|
127
|
+
: (elRect.top - defRect.top - defPadTop);
|
|
128
|
+
const cellIndex = getCellIndexAtOffset(elOffset, tracks, gap);
|
|
129
|
+
if (parent !== definingGrid) {
|
|
130
|
+
const parentRect = parent.getBoundingClientRect();
|
|
131
|
+
const parentOffset = (dimension === "column")
|
|
132
|
+
? (parentRect.left - defRect.left - defPadLeft)
|
|
133
|
+
: (parentRect.top - defRect.top - defPadTop);
|
|
134
|
+
const parentCellIndex = getCellIndexAtOffset(parentOffset, tracks, gap);
|
|
135
|
+
return Math.max(1, cellIndex - parentCellIndex + 1);
|
|
136
|
+
}
|
|
137
|
+
return cellIndex;
|
|
138
|
+
}
|
|
139
|
+
function getCellIndexAtOffset(offset, tracks, gap) {
|
|
140
|
+
for (let i = 0; i < tracks.length; i++) {
|
|
141
|
+
const t = tracks[i];
|
|
142
|
+
if (offset <= t.start + t.size + gap / 2) {
|
|
143
|
+
return i + 1;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return tracks.length;
|
|
147
|
+
}
|
|
148
|
+
function getGridSpan(element, dimension) {
|
|
149
|
+
const cs = getComputedStyle(element);
|
|
150
|
+
const startVal = cs.getPropertyValue(`grid-${dimension}-start`);
|
|
151
|
+
const endVal = cs.getPropertyValue(`grid-${dimension}-end`);
|
|
152
|
+
const val = cs.getPropertyValue(`grid-${dimension}`);
|
|
153
|
+
const spanMatch = (startVal + " " + endVal + " " + val).match(/span\s+(\d+)/i);
|
|
154
|
+
if (spanMatch && spanMatch[1]) {
|
|
155
|
+
return parseInt(spanMatch[1], 10);
|
|
156
|
+
}
|
|
157
|
+
const startNum = parseInt(startVal, 10);
|
|
158
|
+
const endNum = parseInt(endVal, 10);
|
|
159
|
+
if (!isNaN(startNum) && !isNaN(endNum) && endNum > startNum) {
|
|
160
|
+
return endNum - startNum;
|
|
161
|
+
}
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Manages the element resizing gesture.
|
|
166
|
+
*/
|
|
167
|
+
export class ResizeHandler {
|
|
168
|
+
id = "resize";
|
|
169
|
+
ctx;
|
|
170
|
+
_isResizing = false;
|
|
171
|
+
_activeAnchor = null;
|
|
172
|
+
_resizeStartRect = null;
|
|
173
|
+
_dragStartCanvas = null;
|
|
174
|
+
_dragStartStyles = null;
|
|
175
|
+
constructor(ctx) {
|
|
176
|
+
this.ctx = ctx;
|
|
177
|
+
}
|
|
178
|
+
get isResizing() {
|
|
179
|
+
return this._isResizing;
|
|
180
|
+
}
|
|
181
|
+
get activeAnchor() {
|
|
182
|
+
return this._activeAnchor;
|
|
183
|
+
}
|
|
184
|
+
// ── InteractionHandler Interface ────────────────
|
|
185
|
+
claim(e, canvasPos, hitNodeId, containerRect) {
|
|
186
|
+
if (e.button !== 0 || this.ctx.previewMode)
|
|
187
|
+
return false;
|
|
188
|
+
// Calculate isDoubleClick early to prevent handles/adjusters from intercepting double-clicks on small/nested nodes
|
|
189
|
+
const now = Date.now();
|
|
190
|
+
const targetEl = e.composedPath()[0];
|
|
191
|
+
const isSameTarget = targetEl !== null && this.ctx.lastPointerDownTarget !== null &&
|
|
192
|
+
(targetEl === this.ctx.lastPointerDownTarget || this.ctx.lastPointerDownTarget.contains(targetEl) || targetEl.contains(this.ctx.lastPointerDownTarget));
|
|
193
|
+
const isDoubleClick = (now - this.ctx.lastPointerDownTime < 350) && (hitNodeId !== null &&
|
|
194
|
+
this.ctx.lastPointerDownId !== null &&
|
|
195
|
+
(hitNodeId === this.ctx.lastPointerDownId || isSameTarget || this.ctx.tree.isAncestor(this.ctx.lastPointerDownId, hitNodeId)));
|
|
196
|
+
if (isDoubleClick)
|
|
197
|
+
return false;
|
|
198
|
+
if (this.ctx.selectedIds.size === 1) {
|
|
199
|
+
const selId = this.ctx.selectedIds.values().next().value;
|
|
200
|
+
const selNode = this.ctx.tree.get(selId);
|
|
201
|
+
if (selNode?.currentRect) {
|
|
202
|
+
const localX = e.clientX - containerRect.x;
|
|
203
|
+
const localY = e.clientY - containerRect.y;
|
|
204
|
+
const anchor = this.ctx.renderer.hitTestHandle(localX, localY, selNode.currentRect, this.ctx.viewport);
|
|
205
|
+
if (anchor) {
|
|
206
|
+
// Property lock check for resize
|
|
207
|
+
const affectedProps = getLockedPropertiesForAnchor(anchor);
|
|
208
|
+
const lockedProps = affectedProps.filter(p => this.ctx.isPropertyLocked(selId, p));
|
|
209
|
+
if (lockedProps.length > 0) {
|
|
210
|
+
for (const prop of lockedProps) {
|
|
211
|
+
this.ctx.notifyPropertyLockInteraction(selId, prop);
|
|
212
|
+
}
|
|
213
|
+
return true; // Claim and block
|
|
214
|
+
}
|
|
215
|
+
this._isResizing = true;
|
|
216
|
+
this._activeAnchor = anchor;
|
|
217
|
+
this._dragStartCanvas = canvasPos;
|
|
218
|
+
this._resizeStartRect = { ...selNode.currentRect };
|
|
219
|
+
const contentRoot = this.ctx.mount.getContentRoot(selId);
|
|
220
|
+
if (contentRoot) {
|
|
221
|
+
this._dragStartStyles = {
|
|
222
|
+
"grid-column-start": contentRoot.style.gridColumnStart || null,
|
|
223
|
+
"grid-column-end": contentRoot.style.gridColumnEnd || null,
|
|
224
|
+
"grid-row-start": contentRoot.style.gridRowStart || null,
|
|
225
|
+
"grid-row-end": contentRoot.style.gridRowEnd || null,
|
|
226
|
+
"position": contentRoot.style.position || null,
|
|
227
|
+
"left": contentRoot.style.left || null,
|
|
228
|
+
"top": contentRoot.style.top || null,
|
|
229
|
+
"width": contentRoot.style.width || null,
|
|
230
|
+
"height": contentRoot.style.height || null,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
this.ctx.render();
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
onPointerMove(e, canvasPos, _containerRect) {
|
|
241
|
+
if (!this._isResizing || !this._activeAnchor || !this._dragStartCanvas || !this._resizeStartRect)
|
|
242
|
+
return;
|
|
243
|
+
const selId = this.ctx.selectedIds.values().next().value;
|
|
244
|
+
const node = this.ctx.tree.get(selId);
|
|
245
|
+
if (!node)
|
|
246
|
+
return;
|
|
247
|
+
this.ctx.safeSetPointerCapture(e.pointerId);
|
|
248
|
+
this.ctx.container.style.cursor = anchorCursor(this._activeAnchor);
|
|
249
|
+
this.ctx.canvas.style.pointerEvents = "auto";
|
|
250
|
+
this.ctx.emitInteraction("resize-node", { handler: this.id });
|
|
251
|
+
const dx = canvasPos.x - this._dragStartCanvas.x;
|
|
252
|
+
const dy = canvasPos.y - this._dragStartCanvas.y;
|
|
253
|
+
const wrapper = this.ctx.mount.getWrapper(selId);
|
|
254
|
+
let parentIsGrid = false;
|
|
255
|
+
let gridInfo = null;
|
|
256
|
+
let parentRect = null;
|
|
257
|
+
let padLeft = 0;
|
|
258
|
+
let padTop = 0;
|
|
259
|
+
if (node.parentId !== null) {
|
|
260
|
+
const parentContent = this.ctx.mount.getContentRoot(node.parentId);
|
|
261
|
+
if (parentContent) {
|
|
262
|
+
gridInfo = detectLayout(parentContent);
|
|
263
|
+
if (gridInfo.mode === "grid" || gridInfo.mode === "inline-grid") {
|
|
264
|
+
parentIsGrid = true;
|
|
265
|
+
const parentNode = this.ctx.tree.get(node.parentId);
|
|
266
|
+
parentRect = parentNode?.currentRect ?? null;
|
|
267
|
+
const cs = getComputedStyle(parentContent);
|
|
268
|
+
padLeft = parseFloat(cs.paddingLeft) || 0;
|
|
269
|
+
padTop = parseFloat(cs.paddingTop) || 0;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (parentIsGrid && gridInfo && parentRect && wrapper) {
|
|
274
|
+
const colTracks = parseGridTracks(gridInfo.gridTemplateColumns || "", gridInfo.gap.column);
|
|
275
|
+
const rowTracks = parseGridTracks(gridInfo.gridTemplateRows || "", gridInfo.gap.row);
|
|
276
|
+
const contentRoot = this.ctx.mount.getContentRoot(selId);
|
|
277
|
+
if (contentRoot) {
|
|
278
|
+
const colStart = getGridStart(contentRoot, "column");
|
|
279
|
+
const rowStart = getGridStart(contentRoot, "row");
|
|
280
|
+
const colSpan = getGridSpan(contentRoot, "column");
|
|
281
|
+
const rowSpan = getGridSpan(contentRoot, "row");
|
|
282
|
+
const cx = canvasPos.x - parentRect.x - padLeft;
|
|
283
|
+
const cy = canvasPos.y - parentRect.y - padTop;
|
|
284
|
+
let newColStart = colStart;
|
|
285
|
+
let newColSpan = colSpan;
|
|
286
|
+
let newRowStart = rowStart;
|
|
287
|
+
let newRowSpan = rowSpan;
|
|
288
|
+
const anchor = this._activeAnchor;
|
|
289
|
+
// West / East column resizing
|
|
290
|
+
if (anchor.includes("w")) {
|
|
291
|
+
const colEndIndex = colStart + colSpan;
|
|
292
|
+
for (let i = 0; i < colTracks.length; i++) {
|
|
293
|
+
const c = colTracks[i];
|
|
294
|
+
if (cx <= c.start + c.size + gridInfo.gap.column / 2) {
|
|
295
|
+
newColStart = Math.min(i + 1, colEndIndex - 1);
|
|
296
|
+
newColSpan = colEndIndex - newColStart;
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else if (anchor.includes("e")) {
|
|
302
|
+
for (let i = 0; i < colTracks.length; i++) {
|
|
303
|
+
const c = colTracks[i];
|
|
304
|
+
if (cx <= c.start + c.size + gridInfo.gap.column / 2) {
|
|
305
|
+
newColSpan = Math.max(1, (i + 1) - colStart + 1);
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
newColSpan = Math.max(1, (i + 1) - colStart + 1);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// North / South row resizing
|
|
312
|
+
if (anchor.includes("n")) {
|
|
313
|
+
const rowEndIndex = rowStart + rowSpan;
|
|
314
|
+
for (let i = 0; i < rowTracks.length; i++) {
|
|
315
|
+
const r = rowTracks[i];
|
|
316
|
+
if (cy <= r.start + r.size + gridInfo.gap.row / 2) {
|
|
317
|
+
newRowStart = Math.min(i + 1, rowEndIndex - 1);
|
|
318
|
+
newRowSpan = rowEndIndex - newRowStart;
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
else if (anchor.includes("s")) {
|
|
324
|
+
for (let i = 0; i < rowTracks.length; i++) {
|
|
325
|
+
const r = rowTracks[i];
|
|
326
|
+
if (cy <= r.start + r.size + gridInfo.gap.row / 2) {
|
|
327
|
+
newRowSpan = Math.max(1, (i + 1) - rowStart + 1);
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
newRowSpan = Math.max(1, (i + 1) - rowStart + 1);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
this.ctx.mount.setNodeStyles(selId, {
|
|
334
|
+
"grid-column-start": `${newColStart}`,
|
|
335
|
+
"grid-column-end": `span ${newColSpan}`,
|
|
336
|
+
"grid-row-start": `${newRowStart}`,
|
|
337
|
+
"grid-row-end": `span ${newRowSpan}`,
|
|
338
|
+
});
|
|
339
|
+
this.ctx.remeasureSubtree(selId);
|
|
340
|
+
if (node.parentId) {
|
|
341
|
+
this.ctx.remeasureSubtree(node.parentId);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
// 1. Compute new rect from anchor delta.
|
|
347
|
+
const newRect = computeResizedRect(this._resizeStartRect, this._activeAnchor, dx, dy, this.ctx.minResizeSize, e.altKey);
|
|
348
|
+
// 2. Style surgery — direct DOM mutation.
|
|
349
|
+
this.ctx.mount.setNodeRect(selId, newRect);
|
|
350
|
+
// 3. Synchronous reflow + measurement.
|
|
351
|
+
this.ctx.remeasureSubtree(selId);
|
|
352
|
+
}
|
|
353
|
+
// 4. Compute alignment guides.
|
|
354
|
+
if (this.ctx.enableSnapGuides && node.currentRect) {
|
|
355
|
+
const otherRects = this.ctx.getOtherRects(selId);
|
|
356
|
+
this.ctx.guides = computeAlignmentGuides(node.currentRect, otherRects, this.ctx.snapThreshold);
|
|
357
|
+
}
|
|
358
|
+
// 5. Notify.
|
|
359
|
+
if (node.currentRect) {
|
|
360
|
+
this.ctx.callbacks.onNodeRectChange?.(selId, node.currentRect);
|
|
361
|
+
}
|
|
362
|
+
// 6. Render overlay.
|
|
363
|
+
this.ctx.container.style.cursor = anchorCursor(this._activeAnchor);
|
|
364
|
+
this.ctx.canvas.style.pointerEvents = "auto";
|
|
365
|
+
this.ctx.render();
|
|
366
|
+
}
|
|
367
|
+
onPointerUp(e, _canvasPos, _containerRect) {
|
|
368
|
+
if (!this._isResizing || !this._activeAnchor)
|
|
369
|
+
return;
|
|
370
|
+
this._isResizing = false;
|
|
371
|
+
this._activeAnchor = null;
|
|
372
|
+
this._dragStartCanvas = null;
|
|
373
|
+
const operations = [];
|
|
374
|
+
let commitId = null;
|
|
375
|
+
if (this.ctx.selectedIds.size === 1) {
|
|
376
|
+
commitId = this.ctx.selectedIds.values().next().value;
|
|
377
|
+
}
|
|
378
|
+
if (commitId && this._resizeStartRect) {
|
|
379
|
+
const node = this.ctx.tree.get(commitId);
|
|
380
|
+
if (node?.currentRect) {
|
|
381
|
+
let parentIsGrid = false;
|
|
382
|
+
if (node.parentId !== null) {
|
|
383
|
+
const parentContent = this.ctx.mount.getContentRoot(node.parentId);
|
|
384
|
+
if (parentContent) {
|
|
385
|
+
const info = detectLayout(parentContent);
|
|
386
|
+
parentIsGrid = info.mode === "grid" || info.mode === "inline-grid";
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
if (parentIsGrid) {
|
|
390
|
+
const contentRoot = this.ctx.mount.getContentRoot(commitId);
|
|
391
|
+
if (contentRoot && this._dragStartStyles) {
|
|
392
|
+
const payload = {};
|
|
393
|
+
const undoPayload = {};
|
|
394
|
+
let styleChanged = false;
|
|
395
|
+
const styleProps = [
|
|
396
|
+
"grid-column-start",
|
|
397
|
+
"grid-column-end",
|
|
398
|
+
"grid-row-start",
|
|
399
|
+
"grid-row-end",
|
|
400
|
+
];
|
|
401
|
+
for (const prop of styleProps) {
|
|
402
|
+
const val = contentRoot.style.getPropertyValue(prop) || null;
|
|
403
|
+
const origVal = this._dragStartStyles[prop] || null;
|
|
404
|
+
if (val !== origVal) {
|
|
405
|
+
payload[prop] = val;
|
|
406
|
+
undoPayload[prop] = origVal;
|
|
407
|
+
styleChanged = true;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
if (styleChanged) {
|
|
411
|
+
operations.push({
|
|
412
|
+
type: "update-style",
|
|
413
|
+
nodeId: commitId,
|
|
414
|
+
payload,
|
|
415
|
+
undoPayload
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
const finalRect = node.currentRect;
|
|
422
|
+
const startRect = this._resizeStartRect;
|
|
423
|
+
if (finalRect.width !== startRect.width || finalRect.height !== startRect.height ||
|
|
424
|
+
finalRect.x !== startRect.x || finalRect.y !== startRect.y) {
|
|
425
|
+
const payload = {
|
|
426
|
+
width: `${finalRect.width}px`,
|
|
427
|
+
height: `${finalRect.height}px`
|
|
428
|
+
};
|
|
429
|
+
const undoPayload = {
|
|
430
|
+
width: `${startRect.width}px`,
|
|
431
|
+
height: `${startRect.height}px`
|
|
432
|
+
};
|
|
433
|
+
if (node.parentId === null) {
|
|
434
|
+
payload.left = `${finalRect.x}px`;
|
|
435
|
+
payload.top = `${finalRect.y}px`;
|
|
436
|
+
undoPayload.left = `${startRect.x}px`;
|
|
437
|
+
undoPayload.top = `${startRect.y}px`;
|
|
438
|
+
}
|
|
439
|
+
operations.push({
|
|
440
|
+
type: "update-style",
|
|
441
|
+
nodeId: commitId,
|
|
442
|
+
payload,
|
|
443
|
+
undoPayload
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
this.ctx.callbacks.onNodeRectChange?.(commitId, node.currentRect);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
this._resizeStartRect = null;
|
|
451
|
+
this._dragStartStyles = null;
|
|
452
|
+
// Clear guides.
|
|
453
|
+
this.ctx.guides = [];
|
|
454
|
+
// Release pointer capture.
|
|
455
|
+
try {
|
|
456
|
+
this.ctx.container.releasePointerCapture(e.pointerId);
|
|
457
|
+
}
|
|
458
|
+
catch { }
|
|
459
|
+
if (operations.length > 0) {
|
|
460
|
+
this.ctx.callbacks.onOperationsGenerated?.(operations);
|
|
461
|
+
}
|
|
462
|
+
this.ctx.canvas.style.pointerEvents = "none";
|
|
463
|
+
this.ctx.emitInteraction(null);
|
|
464
|
+
this.ctx.render();
|
|
465
|
+
// ── Flat String Bridge ────────────────────────
|
|
466
|
+
if (commitId) {
|
|
467
|
+
const node = this.ctx.tree.get(commitId);
|
|
468
|
+
const commitTarget = (node && node.parentId !== null) ? node.parentId : commitId;
|
|
469
|
+
const html = this.ctx.mount.extractHTML(commitTarget);
|
|
470
|
+
if (html) {
|
|
471
|
+
this.ctx.callbacks.onHTMLCommit?.(commitTarget, html);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
onCancel() {
|
|
476
|
+
this._isResizing = false;
|
|
477
|
+
this._activeAnchor = null;
|
|
478
|
+
this._resizeStartRect = null;
|
|
479
|
+
this._dragStartCanvas = null;
|
|
480
|
+
this._dragStartStyles = null;
|
|
481
|
+
this.ctx.guides = [];
|
|
482
|
+
this.ctx.container.style.cursor = "default";
|
|
483
|
+
this.ctx.emitInteraction(null);
|
|
484
|
+
this.ctx.render();
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=resize.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resize.handler.js","sourceRoot":"","sources":["../../src/handlers/resize.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Rect, Vec2 } from "../types.js";
|
|
2
|
+
import type { InteractionHandler, WorkspaceContext } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Fallback interaction handler managing marquee selection, click selections, and container drill-down scoping.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SelectionHandler implements InteractionHandler {
|
|
7
|
+
readonly id = "selection";
|
|
8
|
+
private ctx;
|
|
9
|
+
private _isMarqueeSelecting;
|
|
10
|
+
private _marqueeStartCanvas;
|
|
11
|
+
private _marqueeCurrentCanvas;
|
|
12
|
+
private readonly _preMarqueeSelectedIds;
|
|
13
|
+
private _marqueeEnteredContainerId;
|
|
14
|
+
constructor(ctx: WorkspaceContext);
|
|
15
|
+
get isMarqueeSelecting(): boolean;
|
|
16
|
+
getMarqueeRect(): Rect | null;
|
|
17
|
+
claim(e: PointerEvent, canvasPos: Vec2, hitNodeId: string | null, _containerRect: Rect): boolean;
|
|
18
|
+
onPointerMove(e: PointerEvent, canvasPos: Vec2, _containerRect: Rect): void;
|
|
19
|
+
onPointerUp(e: PointerEvent, _canvasPos: Vec2, _containerRect: Rect): void;
|
|
20
|
+
onCancel(): void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=selection.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/selection.handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGvE;;GAEG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,QAAQ,CAAC,EAAE,eAAe;IAE1B,OAAO,CAAC,GAAG,CAAmB;IAE9B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,qBAAqB,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAC5D,OAAO,CAAC,0BAA0B,CAAuB;gBAE7C,GAAG,EAAE,gBAAgB;IAIjC,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,cAAc,IAAI,IAAI,GAAG,IAAI;IAc7B,KAAK,CACH,CAAC,EAAE,YAAY,EACf,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,cAAc,EAAE,IAAI,GACnB,OAAO;IAmJV,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,GAAG,IAAI;IAsD3E,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,GAAG,IAAI;IAwB1E,QAAQ,IAAI,IAAI;CAOjB"}
|