@hypen-space/web 0.4.82 → 0.4.84
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/canvas/events.d.ts +30 -2
- package/dist/canvas/events.js +112 -30
- package/dist/canvas/events.js.map +1 -1
- package/dist/canvas/input.d.ts +15 -2
- package/dist/canvas/input.js +43 -24
- package/dist/canvas/input.js.map +1 -1
- package/dist/canvas/layout.js +479 -96
- package/dist/canvas/layout.js.map +1 -1
- package/dist/canvas/paint.d.ts +4 -0
- package/dist/canvas/paint.js +141 -29
- package/dist/canvas/paint.js.map +1 -1
- package/dist/canvas/props.d.ts +55 -0
- package/dist/canvas/props.js +121 -0
- package/dist/canvas/props.js.map +1 -0
- package/dist/canvas/renderer.d.ts +13 -0
- package/dist/canvas/renderer.js +109 -11
- package/dist/canvas/renderer.js.map +1 -1
- package/dist/canvas/scroll.d.ts +27 -3
- package/dist/canvas/scroll.js +66 -26
- package/dist/canvas/scroll.js.map +1 -1
- package/dist/canvas/selection.js +3 -4
- package/dist/canvas/selection.js.map +1 -1
- package/dist/canvas/utils.d.ts +23 -3
- package/dist/canvas/utils.js +90 -30
- package/dist/canvas/utils.js.map +1 -1
- package/dist/dom/applicators/border.js +9 -0
- package/dist/dom/applicators/border.js.map +1 -1
- package/dist/dom/applicators/font.js +18 -1
- package/dist/dom/applicators/font.js.map +1 -1
- package/dist/dom/applicators/layout.js +44 -8
- package/dist/dom/applicators/layout.js.map +1 -1
- package/dist/dom/applicators/margin.js +18 -53
- package/dist/dom/applicators/margin.js.map +1 -1
- package/dist/dom/applicators/padding.js +21 -33
- package/dist/dom/applicators/padding.js.map +1 -1
- package/dist/dom/applicators/typography.js +13 -1
- package/dist/dom/applicators/typography.js.map +1 -1
- package/dist/dom/components/column.d.ts +11 -2
- package/dist/dom/components/column.js +12 -4
- package/dist/dom/components/column.js.map +1 -1
- package/dist/dom/components/image.js +9 -3
- package/dist/dom/components/image.js.map +1 -1
- package/dist/dom/components/input.js +11 -0
- package/dist/dom/components/input.js.map +1 -1
- package/dist/dom/components/textarea.js +8 -0
- package/dist/dom/components/textarea.js.map +1 -1
- package/dist/dom/renderer.d.ts +18 -0
- package/dist/dom/renderer.js +87 -3
- package/dist/dom/renderer.js.map +1 -1
- package/package.json +2 -2
- package/src/canvas/PARITY.md +254 -0
- package/src/canvas/events.ts +113 -32
- package/src/canvas/input.ts +44 -25
- package/src/canvas/layout.ts +492 -91
- package/src/canvas/paint.ts +143 -29
- package/src/canvas/props.ts +117 -0
- package/src/canvas/renderer.ts +132 -11
- package/src/canvas/scroll.ts +62 -29
- package/src/canvas/selection.ts +3 -4
- package/src/canvas/utils.ts +83 -31
- package/src/dom/applicators/border.ts +9 -0
- package/src/dom/applicators/font.ts +16 -1
- package/src/dom/applicators/layout.ts +34 -7
- package/src/dom/applicators/margin.ts +16 -43
- package/src/dom/applicators/padding.ts +19 -27
- package/src/dom/applicators/typography.ts +11 -1
- package/src/dom/components/column.ts +12 -4
- package/src/dom/components/image.ts +8 -3
- package/src/dom/components/input.ts +11 -0
- package/src/dom/components/textarea.ts +8 -0
- package/src/dom/renderer.ts +92 -3
package/dist/canvas/events.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare class CanvasEventManager {
|
|
|
17
17
|
private hoveredNode;
|
|
18
18
|
private focusedNode;
|
|
19
19
|
private mouseDownNode;
|
|
20
|
+
private focusChangeHandler;
|
|
20
21
|
private boundOnMouseMove;
|
|
21
22
|
private boundOnMouseDown;
|
|
22
23
|
private boundOnMouseUp;
|
|
@@ -30,12 +31,27 @@ export declare class CanvasEventManager {
|
|
|
30
31
|
* Set the root node for hit testing
|
|
31
32
|
*/
|
|
32
33
|
setRootNode(node: VirtualNode | null): void;
|
|
34
|
+
/**
|
|
35
|
+
* Subscribe to focus changes. Used by the renderer to mount the
|
|
36
|
+
* `InputOverlay` HTML element when an Input/Textarea gains focus and
|
|
37
|
+
* unmount it when focus moves away. Without this hookup the canvas
|
|
38
|
+
* Input painted as a pretty pill but a click on it did nothing — the
|
|
39
|
+
* overlay was constructed but never invoked.
|
|
40
|
+
*/
|
|
41
|
+
setFocusChangeHandler(fn: ((next: VirtualNode | null, prev: VirtualNode | null) => void) | null): void;
|
|
33
42
|
/**
|
|
34
43
|
* Setup canvas event listeners
|
|
35
44
|
*/
|
|
36
45
|
private setupEventListeners;
|
|
37
46
|
/**
|
|
38
|
-
* Get canvas coordinates from mouse event
|
|
47
|
+
* Get canvas coordinates from mouse event.
|
|
48
|
+
*
|
|
49
|
+
* Returns LOGICAL pixels (CSS pixels), matching the layout coordinate
|
|
50
|
+
* space. Layout is computed in logical units because the renderer calls
|
|
51
|
+
* `ctx.scale(dpr, dpr)` once at setup; do NOT multiply by `canvas.width /
|
|
52
|
+
* rect.width` here — that would land hit tests in canvas-pixel space (2x
|
|
53
|
+
* on a HiDPI Mac), with the practical effect that the cursor changes to a
|
|
54
|
+
* pointer above the actual element instead of on it.
|
|
39
55
|
*/
|
|
40
56
|
private getCanvasCoordinates;
|
|
41
57
|
/**
|
|
@@ -43,9 +59,19 @@ export declare class CanvasEventManager {
|
|
|
43
59
|
*/
|
|
44
60
|
private hitTest;
|
|
45
61
|
/**
|
|
46
|
-
* Recursively test node and children
|
|
62
|
+
* Recursively test node and children. Absolute-positioned siblings are
|
|
63
|
+
* checked first because they paint on top (see `paint.ts` overlay
|
|
64
|
+
* ordering) — without this, a click on the Story's close-button overlay
|
|
65
|
+
* lands on the underlying Image instead.
|
|
47
66
|
*/
|
|
48
67
|
private hitTestNode;
|
|
68
|
+
/**
|
|
69
|
+
* Walk up from a node to find the nearest clickable ancestor (or the node
|
|
70
|
+
* itself if it's clickable). Returns null if none. Used so that hovering
|
|
71
|
+
* a non-clickable child of a Button (e.g. the Icon inside a transparent
|
|
72
|
+
* nav button) still resolves to the Button for cursor + click purposes.
|
|
73
|
+
*/
|
|
74
|
+
private findClickableAncestor;
|
|
49
75
|
/**
|
|
50
76
|
* Handle mouse move
|
|
51
77
|
*/
|
|
@@ -79,6 +105,8 @@ export declare class CanvasEventManager {
|
|
|
79
105
|
* Set focused node
|
|
80
106
|
*/
|
|
81
107
|
private setFocus;
|
|
108
|
+
/** Public for the renderer's overlay-blur path. */
|
|
109
|
+
clearFocus(): void;
|
|
82
110
|
/**
|
|
83
111
|
* Update cursor based on node
|
|
84
112
|
*/
|
package/dist/canvas/events.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { isPointInRoundedRect } from "./utils.js";
|
|
7
7
|
import { getScrollAwareBounds } from "./scroll.js";
|
|
8
|
+
import { resolveEventAction } from "./props.js";
|
|
8
9
|
/**
|
|
9
10
|
* Canvas Event Manager
|
|
10
11
|
*/
|
|
@@ -15,6 +16,7 @@ export class CanvasEventManager {
|
|
|
15
16
|
hoveredNode = null;
|
|
16
17
|
focusedNode = null;
|
|
17
18
|
mouseDownNode = null;
|
|
19
|
+
focusChangeHandler = null;
|
|
18
20
|
// Bound handler references for cleanup
|
|
19
21
|
boundOnMouseMove;
|
|
20
22
|
boundOnMouseDown;
|
|
@@ -35,6 +37,16 @@ export class CanvasEventManager {
|
|
|
35
37
|
setRootNode(node) {
|
|
36
38
|
this.rootNode = node;
|
|
37
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Subscribe to focus changes. Used by the renderer to mount the
|
|
42
|
+
* `InputOverlay` HTML element when an Input/Textarea gains focus and
|
|
43
|
+
* unmount it when focus moves away. Without this hookup the canvas
|
|
44
|
+
* Input painted as a pretty pill but a click on it did nothing — the
|
|
45
|
+
* overlay was constructed but never invoked.
|
|
46
|
+
*/
|
|
47
|
+
setFocusChangeHandler(fn) {
|
|
48
|
+
this.focusChangeHandler = fn;
|
|
49
|
+
}
|
|
38
50
|
/**
|
|
39
51
|
* Setup canvas event listeners
|
|
40
52
|
*/
|
|
@@ -57,15 +69,20 @@ export class CanvasEventManager {
|
|
|
57
69
|
this.canvas.addEventListener("keyup", this.boundOnKeyUp);
|
|
58
70
|
}
|
|
59
71
|
/**
|
|
60
|
-
* Get canvas coordinates from mouse event
|
|
72
|
+
* Get canvas coordinates from mouse event.
|
|
73
|
+
*
|
|
74
|
+
* Returns LOGICAL pixels (CSS pixels), matching the layout coordinate
|
|
75
|
+
* space. Layout is computed in logical units because the renderer calls
|
|
76
|
+
* `ctx.scale(dpr, dpr)` once at setup; do NOT multiply by `canvas.width /
|
|
77
|
+
* rect.width` here — that would land hit tests in canvas-pixel space (2x
|
|
78
|
+
* on a HiDPI Mac), with the practical effect that the cursor changes to a
|
|
79
|
+
* pointer above the actual element instead of on it.
|
|
61
80
|
*/
|
|
62
81
|
getCanvasCoordinates(e) {
|
|
63
82
|
const rect = this.canvas.getBoundingClientRect();
|
|
64
|
-
const scaleX = this.canvas.width / rect.width;
|
|
65
|
-
const scaleY = this.canvas.height / rect.height;
|
|
66
83
|
return {
|
|
67
|
-
x:
|
|
68
|
-
y:
|
|
84
|
+
x: e.clientX - rect.left,
|
|
85
|
+
y: e.clientY - rect.top,
|
|
69
86
|
};
|
|
70
87
|
}
|
|
71
88
|
/**
|
|
@@ -77,7 +94,10 @@ export class CanvasEventManager {
|
|
|
77
94
|
return this.hitTestNode(this.rootNode, point);
|
|
78
95
|
}
|
|
79
96
|
/**
|
|
80
|
-
* Recursively test node and children
|
|
97
|
+
* Recursively test node and children. Absolute-positioned siblings are
|
|
98
|
+
* checked first because they paint on top (see `paint.ts` overlay
|
|
99
|
+
* ordering) — without this, a click on the Story's close-button overlay
|
|
100
|
+
* lands on the underlying Image instead.
|
|
81
101
|
*/
|
|
82
102
|
hitTestNode(node, point) {
|
|
83
103
|
if (!node.visible || !node.layout)
|
|
@@ -85,9 +105,20 @@ export class CanvasEventManager {
|
|
|
85
105
|
const bounds = getScrollAwareBounds(node);
|
|
86
106
|
if (!bounds)
|
|
87
107
|
return null;
|
|
88
|
-
//
|
|
108
|
+
// Front-to-back order: absolute overlays (newest in paint stack)
|
|
109
|
+
// first, then flow children in reverse paint order.
|
|
89
110
|
for (let i = node.children.length - 1; i >= 0; i--) {
|
|
90
111
|
const child = node.children[i];
|
|
112
|
+
if (child.props.position !== "absolute")
|
|
113
|
+
continue;
|
|
114
|
+
const hit = this.hitTestNode(child, point);
|
|
115
|
+
if (hit)
|
|
116
|
+
return hit;
|
|
117
|
+
}
|
|
118
|
+
for (let i = node.children.length - 1; i >= 0; i--) {
|
|
119
|
+
const child = node.children[i];
|
|
120
|
+
if (child.props.position === "absolute")
|
|
121
|
+
continue;
|
|
91
122
|
const hit = this.hitTestNode(child, point);
|
|
92
123
|
if (hit)
|
|
93
124
|
return hit;
|
|
@@ -99,12 +130,31 @@ export class CanvasEventManager {
|
|
|
99
130
|
}
|
|
100
131
|
return null;
|
|
101
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Walk up from a node to find the nearest clickable ancestor (or the node
|
|
135
|
+
* itself if it's clickable). Returns null if none. Used so that hovering
|
|
136
|
+
* a non-clickable child of a Button (e.g. the Icon inside a transparent
|
|
137
|
+
* nav button) still resolves to the Button for cursor + click purposes.
|
|
138
|
+
*/
|
|
139
|
+
findClickableAncestor(node) {
|
|
140
|
+
let current = node;
|
|
141
|
+
while (current) {
|
|
142
|
+
if (current.clickable)
|
|
143
|
+
return current;
|
|
144
|
+
current = current.parent;
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
102
148
|
/**
|
|
103
149
|
* Handle mouse move
|
|
104
150
|
*/
|
|
105
151
|
onMouseMove(e) {
|
|
106
152
|
const point = this.getCanvasCoordinates(e);
|
|
107
|
-
const
|
|
153
|
+
const hit = this.hitTest(point);
|
|
154
|
+
// Resolve to the clickable ancestor so the cursor stays a pointer over
|
|
155
|
+
// the whole Button surface (not flashing back to default whenever the
|
|
156
|
+
// mouse passes over the Button's non-clickable Icon child).
|
|
157
|
+
const node = this.findClickableAncestor(hit) ?? hit;
|
|
108
158
|
// Update hover state
|
|
109
159
|
if (node !== this.hoveredNode) {
|
|
110
160
|
// Leave old node
|
|
@@ -129,7 +179,10 @@ export class CanvasEventManager {
|
|
|
129
179
|
*/
|
|
130
180
|
onMouseDown(e) {
|
|
131
181
|
const point = this.getCanvasCoordinates(e);
|
|
132
|
-
|
|
182
|
+
// Same lift-to-clickable as hover so a click on a Button's Icon child
|
|
183
|
+
// dispatches against the Button (where `onClick` actually lives).
|
|
184
|
+
const hit = this.hitTest(point);
|
|
185
|
+
const node = this.findClickableAncestor(hit) ?? hit;
|
|
133
186
|
this.mouseDownNode = node;
|
|
134
187
|
if (node && node.clickable) {
|
|
135
188
|
this.dispatchNodeEvent(node, "mousedown", {
|
|
@@ -151,7 +204,8 @@ export class CanvasEventManager {
|
|
|
151
204
|
*/
|
|
152
205
|
onMouseUp(e) {
|
|
153
206
|
const point = this.getCanvasCoordinates(e);
|
|
154
|
-
const
|
|
207
|
+
const hit = this.hitTest(point);
|
|
208
|
+
const node = this.findClickableAncestor(hit) ?? hit;
|
|
155
209
|
if (node && node.clickable) {
|
|
156
210
|
this.dispatchNodeEvent(node, "mouseup", {
|
|
157
211
|
button: e.button,
|
|
@@ -159,14 +213,19 @@ export class CanvasEventManager {
|
|
|
159
213
|
clientY: e.clientY,
|
|
160
214
|
});
|
|
161
215
|
}
|
|
162
|
-
this.mouseDownNode
|
|
216
|
+
// NOTE: do NOT clear `this.mouseDownNode` here — the browser fires
|
|
217
|
+
// `click` after `mouseup`, and onClick uses mouseDownNode to verify
|
|
218
|
+
// press+release happened on the same target. Clearing here meant the
|
|
219
|
+
// click handler always saw `null` and silently dropped every click.
|
|
220
|
+
// The click handler clears mouseDownNode itself.
|
|
163
221
|
}
|
|
164
222
|
/**
|
|
165
223
|
* Handle click
|
|
166
224
|
*/
|
|
167
225
|
onClick(e) {
|
|
168
226
|
const point = this.getCanvasCoordinates(e);
|
|
169
|
-
const
|
|
227
|
+
const hit = this.hitTest(point);
|
|
228
|
+
const node = this.findClickableAncestor(hit) ?? hit;
|
|
170
229
|
if (node && node.clickable && node === this.mouseDownNode) {
|
|
171
230
|
this.dispatchNodeEvent(node, "click", {
|
|
172
231
|
button: e.button,
|
|
@@ -174,6 +233,7 @@ export class CanvasEventManager {
|
|
|
174
233
|
clientY: e.clientY,
|
|
175
234
|
});
|
|
176
235
|
}
|
|
236
|
+
this.mouseDownNode = null;
|
|
177
237
|
}
|
|
178
238
|
/**
|
|
179
239
|
* Handle double click
|
|
@@ -238,17 +298,24 @@ export class CanvasEventManager {
|
|
|
238
298
|
setFocus(node) {
|
|
239
299
|
if (node === this.focusedNode)
|
|
240
300
|
return;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
301
|
+
const prev = this.focusedNode;
|
|
302
|
+
if (prev) {
|
|
303
|
+
prev.focused = false;
|
|
304
|
+
this.dispatchNodeEvent(prev, "blur", {});
|
|
244
305
|
}
|
|
245
306
|
this.focusedNode = node;
|
|
246
307
|
if (node) {
|
|
247
308
|
node.focused = true;
|
|
248
309
|
this.dispatchNodeEvent(node, "focus", {});
|
|
249
310
|
}
|
|
311
|
+
if (this.focusChangeHandler)
|
|
312
|
+
this.focusChangeHandler(node, prev);
|
|
250
313
|
this.requestRedraw();
|
|
251
314
|
}
|
|
315
|
+
/** Public for the renderer's overlay-blur path. */
|
|
316
|
+
clearFocus() {
|
|
317
|
+
this.setFocus(null);
|
|
318
|
+
}
|
|
252
319
|
/**
|
|
253
320
|
* Update cursor based on node
|
|
254
321
|
*/
|
|
@@ -257,28 +324,43 @@ export class CanvasEventManager {
|
|
|
257
324
|
this.canvas.style.cursor = "default";
|
|
258
325
|
return;
|
|
259
326
|
}
|
|
260
|
-
|
|
327
|
+
let cursor = node.props.cursor;
|
|
328
|
+
if (!cursor) {
|
|
329
|
+
const t = node.type.toLowerCase();
|
|
330
|
+
if (t === "input" || t === "textarea")
|
|
331
|
+
cursor = "text";
|
|
332
|
+
else if (node.clickable)
|
|
333
|
+
cursor = "pointer";
|
|
334
|
+
else
|
|
335
|
+
cursor = "default";
|
|
336
|
+
}
|
|
261
337
|
this.canvas.style.cursor = cursor;
|
|
262
338
|
}
|
|
263
339
|
/**
|
|
264
340
|
* Dispatch event to engine
|
|
265
341
|
*/
|
|
266
342
|
dispatchNodeEvent(node, eventType, data) {
|
|
267
|
-
//
|
|
268
|
-
|
|
269
|
-
//
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
nodeId: node.id,
|
|
278
|
-
timestamp: Date.now(),
|
|
279
|
-
...data,
|
|
280
|
-
});
|
|
343
|
+
// Engine emits event applicators in camelCase (`onClick`, `onChange`). The
|
|
344
|
+
// older flat form `onclick` is still accepted. After prop normalisation the
|
|
345
|
+
// value is either a string (action name) or an object carrying an action
|
|
346
|
+
// name at `"0"` plus an auxiliary payload (e.g. `{ "0": "@router.push",
|
|
347
|
+
// to: "/notifications" }` for `@router.push(to: "/notifications")`).
|
|
348
|
+
const camel = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;
|
|
349
|
+
let spec = node.props[camel] ?? node.props[`on${eventType}`] ?? node.props[eventType];
|
|
350
|
+
// Actionable components fall back to the bare `action` prop on click.
|
|
351
|
+
if (spec == null && eventType === "click") {
|
|
352
|
+
spec = node.props.action;
|
|
281
353
|
}
|
|
354
|
+
const resolved = resolveEventAction(spec);
|
|
355
|
+
if (!resolved)
|
|
356
|
+
return;
|
|
357
|
+
this.engine.dispatchAction(resolved.actionName, {
|
|
358
|
+
type: eventType,
|
|
359
|
+
nodeId: node.id,
|
|
360
|
+
timestamp: Date.now(),
|
|
361
|
+
...resolved.payload,
|
|
362
|
+
...data,
|
|
363
|
+
});
|
|
282
364
|
}
|
|
283
365
|
/**
|
|
284
366
|
* Request redraw from renderer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/canvas/events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/canvas/events.ts"],"names":[],"mappings":"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"}
|
package/dist/canvas/input.d.ts
CHANGED
|
@@ -20,7 +20,12 @@ export declare class InputOverlay {
|
|
|
20
20
|
private engine;
|
|
21
21
|
constructor(container: HTMLElement | null);
|
|
22
22
|
/**
|
|
23
|
-
* Show input overlay for a node
|
|
23
|
+
* Show input overlay for a node.
|
|
24
|
+
*
|
|
25
|
+
* Type comparison is case-insensitive — the engine emits `"Input"` /
|
|
26
|
+
* `"Textarea"`, but the overlay branch was looking for lowercase
|
|
27
|
+
* `"textarea"` and always created an `<input>` (so multi-line typing
|
|
28
|
+
* couldn't enter newlines and the visible caret was the wrong height).
|
|
24
29
|
*/
|
|
25
30
|
showInput(node: VirtualNode, canvasBounds: DOMRect, onChange: (value: string) => void, engine?: BindEngine | null): void;
|
|
26
31
|
/**
|
|
@@ -36,7 +41,15 @@ export declare class InputOverlay {
|
|
|
36
41
|
*/
|
|
37
42
|
private styleOverlay;
|
|
38
43
|
/**
|
|
39
|
-
* Position overlay over canvas node
|
|
44
|
+
* Position overlay over canvas node.
|
|
45
|
+
*
|
|
46
|
+
* `bounds` is in canvas-local CSS pixels (the layout coordinate space
|
|
47
|
+
* the renderer paints into after `ctx.scale(dpr, dpr)`). The overlay is
|
|
48
|
+
* mounted on `document.body`, so we add `canvasBounds.left/top`
|
|
49
|
+
* (page coords from `getBoundingClientRect`) to land at the right
|
|
50
|
+
* absolute position regardless of where the canvas sits on the page.
|
|
51
|
+
* Adding `window.scrollX/Y` keeps the overlay pinned to the canvas
|
|
52
|
+
* even when the page scrolls between focus and reposition.
|
|
40
53
|
*/
|
|
41
54
|
private positionOverlay;
|
|
42
55
|
/**
|
package/dist/canvas/input.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handle text input using DOM overlay elements
|
|
5
5
|
*/
|
|
6
|
-
import { getAbsoluteBounds } from "./utils.js";
|
|
6
|
+
import { getAbsoluteBounds, cssLengthToPx } from "./utils.js";
|
|
7
7
|
/**
|
|
8
8
|
* Input Overlay Manager
|
|
9
9
|
*/
|
|
@@ -18,7 +18,12 @@ export class InputOverlay {
|
|
|
18
18
|
this.container = container || {};
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Show input overlay for a node
|
|
21
|
+
* Show input overlay for a node.
|
|
22
|
+
*
|
|
23
|
+
* Type comparison is case-insensitive — the engine emits `"Input"` /
|
|
24
|
+
* `"Textarea"`, but the overlay branch was looking for lowercase
|
|
25
|
+
* `"textarea"` and always created an `<input>` (so multi-line typing
|
|
26
|
+
* couldn't enter newlines and the visible caret was the wrong height).
|
|
22
27
|
*/
|
|
23
28
|
showInput(node, canvasBounds, onChange, engine) {
|
|
24
29
|
// Skip if document is not available (non-browser environment)
|
|
@@ -31,7 +36,7 @@ export class InputOverlay {
|
|
|
31
36
|
const bounds = getAbsoluteBounds(node);
|
|
32
37
|
if (!bounds)
|
|
33
38
|
return;
|
|
34
|
-
const isMultiline = node.type === "textarea";
|
|
39
|
+
const isMultiline = node.type.toLowerCase() === "textarea";
|
|
35
40
|
this.overlay = isMultiline
|
|
36
41
|
? document.createElement("textarea")
|
|
37
42
|
: document.createElement("input");
|
|
@@ -45,8 +50,10 @@ export class InputOverlay {
|
|
|
45
50
|
this.overlay.addEventListener("input", this.onInput.bind(this));
|
|
46
51
|
this.overlay.addEventListener("blur", this.onBlur.bind(this));
|
|
47
52
|
this.overlay.addEventListener("keydown", this.onKeyDown.bind(this));
|
|
48
|
-
//
|
|
49
|
-
|
|
53
|
+
// Mount on document.body so absolute positioning is relative to the
|
|
54
|
+
// viewport (`canvasBounds.left/top` are page coords too) — no
|
|
55
|
+
// dependency on the canvas's wrapper having `position: relative`.
|
|
56
|
+
document.body.appendChild(this.overlay);
|
|
50
57
|
this.overlay.focus();
|
|
51
58
|
this.focusedNode = node;
|
|
52
59
|
}
|
|
@@ -83,23 +90,33 @@ export class InputOverlay {
|
|
|
83
90
|
const props = node.props;
|
|
84
91
|
// Position
|
|
85
92
|
this.positionOverlay(bounds, canvasBounds);
|
|
86
|
-
// Font and text styling
|
|
87
|
-
|
|
93
|
+
// Font and text styling — go through `cssLengthToPx` so values that
|
|
94
|
+
// arrive in `rem` ("0.875rem" for `text-sm`) round to real pixels
|
|
95
|
+
// instead of `parseFloat`'s bare 0.875 (which made the caret disappear).
|
|
96
|
+
const fontSize = cssLengthToPx(props.fontSize) ?? 16;
|
|
88
97
|
const fontWeight = props.fontWeight || "normal";
|
|
89
98
|
const fontFamily = props.fontFamily || "system-ui, sans-serif";
|
|
90
99
|
const color = props.color || "#000000";
|
|
100
|
+
const padTop = cssLengthToPx(props.paddingTop ?? props.padding) ?? 0;
|
|
101
|
+
const padRight = cssLengthToPx(props.paddingRight ?? props.padding) ?? 0;
|
|
102
|
+
const padBottom = cssLengthToPx(props.paddingBottom ?? props.padding) ?? 0;
|
|
103
|
+
const padLeft = cssLengthToPx(props.paddingLeft ?? props.padding) ?? 0;
|
|
104
|
+
const borderRadius = cssLengthToPx(props.borderRadius) ?? 4;
|
|
91
105
|
Object.assign(this.overlay.style, {
|
|
92
106
|
fontSize: `${fontSize}px`,
|
|
93
|
-
fontWeight: fontWeight,
|
|
107
|
+
fontWeight: String(fontWeight),
|
|
94
108
|
fontFamily: fontFamily,
|
|
95
109
|
color: color,
|
|
96
110
|
border: "none",
|
|
97
|
-
outline: "
|
|
111
|
+
outline: "none",
|
|
98
112
|
backgroundColor: props.backgroundColor || "#ffffff",
|
|
99
|
-
padding: `${
|
|
100
|
-
borderRadius: `${
|
|
113
|
+
padding: `${padTop}px ${padRight}px ${padBottom}px ${padLeft}px`,
|
|
114
|
+
borderRadius: `${borderRadius}px`,
|
|
101
115
|
boxSizing: "border-box",
|
|
102
116
|
resize: "none",
|
|
117
|
+
// Keep the overlay above the canvas; the Bun-served stage has no
|
|
118
|
+
// stacking context of its own so a plain z-index works.
|
|
119
|
+
zIndex: "1000",
|
|
103
120
|
});
|
|
104
121
|
// Placeholder
|
|
105
122
|
if (props.placeholder) {
|
|
@@ -111,25 +128,27 @@ export class InputOverlay {
|
|
|
111
128
|
}
|
|
112
129
|
}
|
|
113
130
|
/**
|
|
114
|
-
* Position overlay over canvas node
|
|
131
|
+
* Position overlay over canvas node.
|
|
132
|
+
*
|
|
133
|
+
* `bounds` is in canvas-local CSS pixels (the layout coordinate space
|
|
134
|
+
* the renderer paints into after `ctx.scale(dpr, dpr)`). The overlay is
|
|
135
|
+
* mounted on `document.body`, so we add `canvasBounds.left/top`
|
|
136
|
+
* (page coords from `getBoundingClientRect`) to land at the right
|
|
137
|
+
* absolute position regardless of where the canvas sits on the page.
|
|
138
|
+
* Adding `window.scrollX/Y` keeps the overlay pinned to the canvas
|
|
139
|
+
* even when the page scrolls between focus and reposition.
|
|
115
140
|
*/
|
|
116
141
|
positionOverlay(bounds, canvasBounds) {
|
|
117
142
|
if (!this.overlay)
|
|
118
143
|
return;
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
const scaleX = canvasBounds.width / canvas.width;
|
|
122
|
-
const scaleY = canvasBounds.height / canvas.height;
|
|
123
|
-
const left = bounds.x * scaleX;
|
|
124
|
-
const top = bounds.y * scaleY;
|
|
125
|
-
const width = bounds.width * scaleX;
|
|
126
|
-
const height = bounds.height * scaleY;
|
|
144
|
+
const sx = typeof window !== "undefined" ? window.scrollX : 0;
|
|
145
|
+
const sy = typeof window !== "undefined" ? window.scrollY : 0;
|
|
127
146
|
Object.assign(this.overlay.style, {
|
|
128
147
|
position: "absolute",
|
|
129
|
-
left: `${left}px`,
|
|
130
|
-
top: `${top}px`,
|
|
131
|
-
width: `${width}px`,
|
|
132
|
-
height: `${height}px`,
|
|
148
|
+
left: `${canvasBounds.left + sx + bounds.x}px`,
|
|
149
|
+
top: `${canvasBounds.top + sy + bounds.y}px`,
|
|
150
|
+
width: `${bounds.width}px`,
|
|
151
|
+
height: `${bounds.height}px`,
|
|
133
152
|
});
|
|
134
153
|
}
|
|
135
154
|
/**
|
package/dist/canvas/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/canvas/input.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/canvas/input.ts"],"names":[],"mappings":"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"}
|