@hypen-space/web 0.4.980 → 0.5.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/README.md +20 -13
- package/dist/canvas/accessibility.d.ts +118 -11
- package/dist/canvas/accessibility.js +470 -108
- package/dist/canvas/accessibility.js.map +1 -1
- package/dist/canvas/dispatch.d.ts +24 -0
- package/dist/canvas/dispatch.js +62 -0
- package/dist/canvas/dispatch.js.map +1 -0
- package/dist/canvas/editing.d.ts +178 -0
- package/dist/canvas/editing.js +590 -0
- package/dist/canvas/editing.js.map +1 -0
- package/dist/canvas/events.d.ts +28 -23
- package/dist/canvas/events.js +90 -103
- package/dist/canvas/events.js.map +1 -1
- package/dist/canvas/focus.d.ts +78 -0
- package/dist/canvas/focus.js +182 -0
- package/dist/canvas/focus.js.map +1 -0
- package/dist/canvas/index.d.ts +3 -2
- package/dist/canvas/index.js +3 -2
- package/dist/canvas/index.js.map +1 -1
- package/dist/canvas/layout.js +68 -98
- package/dist/canvas/layout.js.map +1 -1
- package/dist/canvas/paint.d.ts +16 -3
- package/dist/canvas/paint.js +449 -110
- package/dist/canvas/paint.js.map +1 -1
- package/dist/canvas/renderer.d.ts +28 -4
- package/dist/canvas/renderer.js +201 -81
- package/dist/canvas/renderer.js.map +1 -1
- package/dist/canvas/selection.js +31 -177
- package/dist/canvas/selection.js.map +1 -1
- package/dist/canvas/text-geometry.d.ts +72 -0
- package/dist/canvas/text-geometry.js +244 -0
- package/dist/canvas/text-geometry.js.map +1 -0
- package/dist/canvas/text.js +44 -18
- package/dist/canvas/text.js.map +1 -1
- package/dist/canvas/types.d.ts +10 -1
- package/dist/canvas/utils.d.ts +0 -23
- package/dist/canvas/utils.js +3 -67
- package/dist/canvas/utils.js.map +1 -1
- package/dist/canvas/variants.d.ts +52 -0
- package/dist/canvas/variants.js +156 -0
- package/dist/canvas/variants.js.map +1 -0
- package/dist/dom/a11y-styles.d.ts +20 -0
- package/dist/dom/a11y-styles.js +61 -0
- package/dist/dom/a11y-styles.js.map +1 -0
- package/dist/dom/applicators/aria.d.ts +19 -0
- package/dist/dom/applicators/aria.js +36 -0
- package/dist/dom/applicators/aria.js.map +1 -0
- package/dist/dom/applicators/events.d.ts +7 -0
- package/dist/dom/applicators/events.js +36 -8
- package/dist/dom/applicators/events.js.map +1 -1
- package/dist/dom/applicators/font.d.ts +11 -6
- package/dist/dom/applicators/font.js +16 -27
- package/dist/dom/applicators/font.js.map +1 -1
- package/dist/dom/applicators/index.js +51 -45
- package/dist/dom/applicators/index.js.map +1 -1
- package/dist/dom/canvas/index.js +2 -2
- package/dist/dom/canvas/index.js.map +1 -1
- package/dist/dom/components/app.js +2 -2
- package/dist/dom/components/app.js.map +1 -1
- package/dist/dom/components/audio.js +2 -2
- package/dist/dom/components/audio.js.map +1 -1
- package/dist/dom/components/avatar.js +3 -4
- package/dist/dom/components/avatar.js.map +1 -1
- package/dist/dom/components/badge.js +3 -4
- package/dist/dom/components/badge.js.map +1 -1
- package/dist/dom/components/button.js +2 -2
- package/dist/dom/components/button.js.map +1 -1
- package/dist/dom/components/card.js +2 -2
- package/dist/dom/components/card.js.map +1 -1
- package/dist/dom/components/center.js +2 -2
- package/dist/dom/components/center.js.map +1 -1
- package/dist/dom/components/checkbox.js +4 -5
- package/dist/dom/components/checkbox.js.map +1 -1
- package/dist/dom/components/column.js +2 -2
- package/dist/dom/components/column.js.map +1 -1
- package/dist/dom/components/container.js +2 -2
- package/dist/dom/components/container.js.map +1 -1
- package/dist/dom/components/divider.js +2 -2
- package/dist/dom/components/divider.js.map +1 -1
- package/dist/dom/components/grid.js +10 -10
- package/dist/dom/components/grid.js.map +1 -1
- package/dist/dom/components/heading.js +4 -6
- package/dist/dom/components/heading.js.map +1 -1
- package/dist/dom/components/hypenapp.d.ts +25 -1
- package/dist/dom/components/hypenapp.js +215 -247
- package/dist/dom/components/hypenapp.js.map +1 -1
- package/dist/dom/components/icon.js +4 -5
- package/dist/dom/components/icon.js.map +1 -1
- package/dist/dom/components/image.js +2 -2
- package/dist/dom/components/image.js.map +1 -1
- package/dist/dom/components/index.d.ts +2 -2
- package/dist/dom/components/index.js +9 -2
- package/dist/dom/components/index.js.map +1 -1
- package/dist/dom/components/input.js +2 -2
- package/dist/dom/components/input.js.map +1 -1
- package/dist/dom/components/link.js +2 -2
- package/dist/dom/components/link.js.map +1 -1
- package/dist/dom/components/list.js +2 -2
- package/dist/dom/components/list.js.map +1 -1
- package/dist/dom/components/paragraph.js +3 -4
- package/dist/dom/components/paragraph.js.map +1 -1
- package/dist/dom/components/progressbar.js +3 -3
- package/dist/dom/components/progressbar.js.map +1 -1
- package/dist/dom/components/route.js +2 -2
- package/dist/dom/components/route.js.map +1 -1
- package/dist/dom/components/router.js +2 -2
- package/dist/dom/components/router.js.map +1 -1
- package/dist/dom/components/row.js +10 -10
- package/dist/dom/components/row.js.map +1 -1
- package/dist/dom/components/select.js +3 -4
- package/dist/dom/components/select.js.map +1 -1
- package/dist/dom/components/slider.js +2 -2
- package/dist/dom/components/slider.js.map +1 -1
- package/dist/dom/components/spacer.js +2 -2
- package/dist/dom/components/spacer.js.map +1 -1
- package/dist/dom/components/spinner.js +27 -13
- package/dist/dom/components/spinner.js.map +1 -1
- package/dist/dom/components/stack.js +10 -10
- package/dist/dom/components/stack.js.map +1 -1
- package/dist/dom/components/switch.js +5 -6
- package/dist/dom/components/switch.js.map +1 -1
- package/dist/dom/components/tabs.d.ts +27 -0
- package/dist/dom/components/tabs.js +69 -0
- package/dist/dom/components/tabs.js.map +1 -0
- package/dist/dom/components/text.js +4 -7
- package/dist/dom/components/text.js.map +1 -1
- package/dist/dom/components/textarea.js +2 -2
- package/dist/dom/components/textarea.js.map +1 -1
- package/dist/dom/components/video.js +2 -2
- package/dist/dom/components/video.js.map +1 -1
- package/dist/dom/components/visuallyhidden.d.ts +9 -0
- package/dist/dom/components/visuallyhidden.js +26 -0
- package/dist/dom/components/visuallyhidden.js.map +1 -0
- package/dist/dom/debug.js +6 -8
- package/dist/dom/debug.js.map +1 -1
- package/dist/dom/index.d.ts +0 -1
- package/dist/dom/index.js +0 -1
- package/dist/dom/index.js.map +1 -1
- package/dist/dom/operability.d.ts +100 -0
- package/dist/dom/operability.js +298 -0
- package/dist/dom/operability.js.map +1 -0
- package/dist/dom/renderer.d.ts +98 -5
- package/dist/dom/renderer.js +400 -66
- package/dist/dom/renderer.js.map +1 -1
- package/dist/dom/route-focus.d.ts +42 -0
- package/dist/dom/route-focus.js +88 -0
- package/dist/dom/route-focus.js.map +1 -0
- package/dist/dom/semantics.d.ts +35 -0
- package/dist/dom/semantics.js +184 -0
- package/dist/dom/semantics.js.map +1 -0
- package/dist/variants.d.ts +90 -0
- package/dist/variants.js +206 -0
- package/dist/variants.js.map +1 -0
- package/package.json +2 -2
- package/src/canvas/QUICKSTART.md +16 -11
- package/src/canvas/README.md +63 -34
- package/src/canvas/accessibility.ts +507 -115
- package/src/canvas/dispatch.ts +78 -0
- package/src/canvas/editing.ts +697 -0
- package/src/canvas/events.ts +104 -115
- package/src/canvas/focus.ts +216 -0
- package/src/canvas/index.ts +8 -9
- package/src/canvas/layout.ts +68 -103
- package/src/canvas/paint.ts +509 -109
- package/src/canvas/renderer.ts +239 -99
- package/src/canvas/selection.ts +52 -210
- package/src/canvas/text-geometry.ts +311 -0
- package/src/canvas/text.ts +45 -18
- package/src/canvas/types.ts +28 -1
- package/src/canvas/utils.ts +3 -69
- package/src/canvas/variants.ts +172 -0
- package/src/dom/README.md +8 -7
- package/src/dom/a11y-styles.ts +65 -0
- package/src/dom/applicators/aria.ts +41 -0
- package/src/dom/applicators/events.ts +39 -7
- package/src/dom/applicators/font.ts +16 -29
- package/src/dom/applicators/index.ts +61 -46
- package/src/dom/canvas/index.ts +2 -2
- package/src/dom/components/app.ts +2 -2
- package/src/dom/components/audio.ts +2 -2
- package/src/dom/components/avatar.ts +3 -4
- package/src/dom/components/badge.ts +3 -4
- package/src/dom/components/button.ts +2 -2
- package/src/dom/components/card.ts +2 -2
- package/src/dom/components/center.ts +2 -2
- package/src/dom/components/checkbox.ts +4 -5
- package/src/dom/components/column.ts +2 -2
- package/src/dom/components/container.ts +2 -2
- package/src/dom/components/divider.ts +2 -2
- package/src/dom/components/grid.ts +10 -10
- package/src/dom/components/heading.ts +4 -6
- package/src/dom/components/hypenapp.ts +246 -274
- package/src/dom/components/icon.ts +4 -5
- package/src/dom/components/image.ts +2 -2
- package/src/dom/components/index.ts +10 -3
- package/src/dom/components/input.ts +2 -2
- package/src/dom/components/link.ts +2 -2
- package/src/dom/components/list.ts +2 -2
- package/src/dom/components/paragraph.ts +3 -4
- package/src/dom/components/progressbar.ts +3 -3
- package/src/dom/components/route.ts +2 -2
- package/src/dom/components/router.ts +2 -2
- package/src/dom/components/row.ts +10 -10
- package/src/dom/components/select.ts +3 -4
- package/src/dom/components/slider.ts +2 -2
- package/src/dom/components/spacer.ts +2 -2
- package/src/dom/components/spinner.ts +34 -16
- package/src/dom/components/stack.ts +10 -10
- package/src/dom/components/switch.ts +5 -6
- package/src/dom/components/tabs.ts +76 -0
- package/src/dom/components/text.ts +4 -7
- package/src/dom/components/textarea.ts +2 -2
- package/src/dom/components/video.ts +2 -2
- package/src/dom/components/visuallyhidden.ts +30 -0
- package/src/dom/debug.ts +6 -8
- package/src/dom/index.ts +0 -8
- package/src/dom/operability.ts +312 -0
- package/src/dom/renderer.ts +457 -66
- package/src/dom/route-focus.ts +98 -0
- package/src/dom/semantics.ts +199 -0
- package/src/variants.ts +249 -0
- package/dist/canvas/input.d.ts +0 -76
- package/dist/canvas/input.js +0 -207
- package/dist/canvas/input.js.map +0 -1
- package/dist/client.d.ts +0 -36
- package/dist/client.js +0 -47
- package/dist/client.js.map +0 -1
- package/src/canvas/input.ts +0 -251
- package/src/client.ts +0 -88
package/dist/canvas/events.d.ts
CHANGED
|
@@ -3,42 +3,52 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Hit testing and event handling for canvas nodes
|
|
5
5
|
*/
|
|
6
|
-
import type { VirtualNode } from "./types.js";
|
|
6
|
+
import type { VirtualNode, Point } from "./types.js";
|
|
7
|
+
import type { FocusManager } from "./focus.js";
|
|
7
8
|
interface IEngine {
|
|
8
9
|
dispatchAction(name: string, payload?: any): void;
|
|
9
10
|
}
|
|
10
11
|
/**
|
|
11
12
|
* Canvas Event Manager
|
|
13
|
+
*
|
|
14
|
+
* Pointer-side interaction: hit testing, hover/pressed state, cursor, and
|
|
15
|
+
* click dispatch. Focus is NOT owned here — the pointer path funnels into
|
|
16
|
+
* the {@link FocusManager}, which treats real DOM focus on the
|
|
17
|
+
* accessibility-mirror (canvas fallback content) as the single source of
|
|
18
|
+
* truth. Keyboard events likewise arrive via the mirror (a canvas without
|
|
19
|
+
* tabindex never receives them), so this class attaches no key listeners.
|
|
12
20
|
*/
|
|
13
21
|
export declare class CanvasEventManager {
|
|
14
22
|
private canvas;
|
|
15
23
|
private engine;
|
|
16
24
|
private rootNode;
|
|
17
25
|
private hoveredNode;
|
|
18
|
-
private focusedNode;
|
|
19
26
|
private mouseDownNode;
|
|
20
|
-
private
|
|
27
|
+
private focusManager;
|
|
28
|
+
private editablePointerHandler;
|
|
29
|
+
private scratchBounds;
|
|
21
30
|
private boundOnMouseMove;
|
|
22
31
|
private boundOnMouseDown;
|
|
23
32
|
private boundOnMouseUp;
|
|
24
33
|
private boundOnClick;
|
|
25
34
|
private boundOnDoubleClick;
|
|
26
35
|
private boundOnContextMenu;
|
|
27
|
-
private boundOnKeyDown;
|
|
28
|
-
private boundOnKeyUp;
|
|
29
36
|
constructor(canvas: HTMLCanvasElement, engine: IEngine);
|
|
30
37
|
/**
|
|
31
38
|
* Set the root node for hit testing
|
|
32
39
|
*/
|
|
33
40
|
setRootNode(node: VirtualNode | null): void;
|
|
34
41
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
* Wire the focus manager the pointer path reports into. Clicking a
|
|
43
|
+
* focusable node focuses its mirror element; clicking anything else
|
|
44
|
+
* clears mirror focus.
|
|
45
|
+
*/
|
|
46
|
+
setFocusManager(fm: FocusManager | null): void;
|
|
47
|
+
/**
|
|
48
|
+
* Called with (node, point) when a mousedown lands on a focusable node —
|
|
49
|
+
* the renderer maps the point to a caret position for editable nodes.
|
|
40
50
|
*/
|
|
41
|
-
|
|
51
|
+
setEditablePointerHandler(fn: ((node: VirtualNode, point: Point) => void) | null): void;
|
|
42
52
|
/**
|
|
43
53
|
* Setup canvas event listeners
|
|
44
54
|
*/
|
|
@@ -63,6 +73,11 @@ export declare class CanvasEventManager {
|
|
|
63
73
|
* checked first because they paint on top (see `paint.ts` overlay
|
|
64
74
|
* ordering) — without this, a click on the Story's close-button overlay
|
|
65
75
|
* lands on the underlying Image instead.
|
|
76
|
+
*
|
|
77
|
+
* `scrollX`/`scrollY` accumulate the ancestors' scroll offsets down the
|
|
78
|
+
* recursion (the translation paint applies) so no per-node ancestor walk
|
|
79
|
+
* is needed. Subtrees behind a clipping container are pruned when the
|
|
80
|
+
* point falls outside the container — nothing inside can be visible there.
|
|
66
81
|
*/
|
|
67
82
|
private hitTestNode;
|
|
68
83
|
/**
|
|
@@ -96,23 +111,13 @@ export declare class CanvasEventManager {
|
|
|
96
111
|
* Handle context menu (right-click)
|
|
97
112
|
*/
|
|
98
113
|
private onContextMenu;
|
|
99
|
-
/**
|
|
100
|
-
* Handle keyboard events
|
|
101
|
-
*/
|
|
102
|
-
private onKeyDown;
|
|
103
|
-
private onKeyUp;
|
|
104
|
-
/**
|
|
105
|
-
* Set focused node
|
|
106
|
-
*/
|
|
107
|
-
private setFocus;
|
|
108
|
-
/** Public for the renderer's overlay-blur path. */
|
|
109
|
-
clearFocus(): void;
|
|
110
114
|
/**
|
|
111
115
|
* Update cursor based on node
|
|
112
116
|
*/
|
|
113
117
|
private updateCursor;
|
|
114
118
|
/**
|
|
115
|
-
* Dispatch event to engine
|
|
119
|
+
* Dispatch event to engine (shared resolver — same payload shape as the
|
|
120
|
+
* mirror's keyboard/AT path).
|
|
116
121
|
*/
|
|
117
122
|
private dispatchNodeEvent;
|
|
118
123
|
/**
|
package/dist/canvas/events.js
CHANGED
|
@@ -4,19 +4,28 @@
|
|
|
4
4
|
* Hit testing and event handling for canvas nodes
|
|
5
5
|
*/
|
|
6
6
|
import { isPointInRoundedRect } from "./utils.js";
|
|
7
|
-
import {
|
|
8
|
-
import { resolveEventAction } from "./props.js";
|
|
7
|
+
import { dispatchNodeEvent } from "./dispatch.js";
|
|
9
8
|
/**
|
|
10
9
|
* Canvas Event Manager
|
|
10
|
+
*
|
|
11
|
+
* Pointer-side interaction: hit testing, hover/pressed state, cursor, and
|
|
12
|
+
* click dispatch. Focus is NOT owned here — the pointer path funnels into
|
|
13
|
+
* the {@link FocusManager}, which treats real DOM focus on the
|
|
14
|
+
* accessibility-mirror (canvas fallback content) as the single source of
|
|
15
|
+
* truth. Keyboard events likewise arrive via the mirror (a canvas without
|
|
16
|
+
* tabindex never receives them), so this class attaches no key listeners.
|
|
11
17
|
*/
|
|
12
18
|
export class CanvasEventManager {
|
|
13
19
|
canvas;
|
|
14
20
|
engine;
|
|
15
21
|
rootNode = null;
|
|
16
22
|
hoveredNode = null;
|
|
17
|
-
focusedNode = null;
|
|
18
23
|
mouseDownNode = null;
|
|
19
|
-
|
|
24
|
+
focusManager = null;
|
|
25
|
+
editablePointerHandler = null;
|
|
26
|
+
// Reused for the per-node rounded-rect test so hit testing allocates
|
|
27
|
+
// nothing per visited node.
|
|
28
|
+
scratchBounds = { x: 0, y: 0, width: 0, height: 0 };
|
|
20
29
|
// Bound handler references for cleanup
|
|
21
30
|
boundOnMouseMove;
|
|
22
31
|
boundOnMouseDown;
|
|
@@ -24,8 +33,6 @@ export class CanvasEventManager {
|
|
|
24
33
|
boundOnClick;
|
|
25
34
|
boundOnDoubleClick;
|
|
26
35
|
boundOnContextMenu;
|
|
27
|
-
boundOnKeyDown;
|
|
28
|
-
boundOnKeyUp;
|
|
29
36
|
constructor(canvas, engine) {
|
|
30
37
|
this.canvas = canvas;
|
|
31
38
|
this.engine = engine;
|
|
@@ -38,14 +45,19 @@ export class CanvasEventManager {
|
|
|
38
45
|
this.rootNode = node;
|
|
39
46
|
}
|
|
40
47
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
* Wire the focus manager the pointer path reports into. Clicking a
|
|
49
|
+
* focusable node focuses its mirror element; clicking anything else
|
|
50
|
+
* clears mirror focus.
|
|
51
|
+
*/
|
|
52
|
+
setFocusManager(fm) {
|
|
53
|
+
this.focusManager = fm;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Called with (node, point) when a mousedown lands on a focusable node —
|
|
57
|
+
* the renderer maps the point to a caret position for editable nodes.
|
|
46
58
|
*/
|
|
47
|
-
|
|
48
|
-
this.
|
|
59
|
+
setEditablePointerHandler(fn) {
|
|
60
|
+
this.editablePointerHandler = fn;
|
|
49
61
|
}
|
|
50
62
|
/**
|
|
51
63
|
* Setup canvas event listeners
|
|
@@ -57,16 +69,12 @@ export class CanvasEventManager {
|
|
|
57
69
|
this.boundOnClick = this.onClick.bind(this);
|
|
58
70
|
this.boundOnDoubleClick = this.onDoubleClick.bind(this);
|
|
59
71
|
this.boundOnContextMenu = this.onContextMenu.bind(this);
|
|
60
|
-
this.boundOnKeyDown = this.onKeyDown.bind(this);
|
|
61
|
-
this.boundOnKeyUp = this.onKeyUp.bind(this);
|
|
62
72
|
this.canvas.addEventListener("mousemove", this.boundOnMouseMove);
|
|
63
73
|
this.canvas.addEventListener("mousedown", this.boundOnMouseDown);
|
|
64
74
|
this.canvas.addEventListener("mouseup", this.boundOnMouseUp);
|
|
65
75
|
this.canvas.addEventListener("click", this.boundOnClick);
|
|
66
76
|
this.canvas.addEventListener("dblclick", this.boundOnDoubleClick);
|
|
67
77
|
this.canvas.addEventListener("contextmenu", this.boundOnContextMenu);
|
|
68
|
-
this.canvas.addEventListener("keydown", this.boundOnKeyDown);
|
|
69
|
-
this.canvas.addEventListener("keyup", this.boundOnKeyUp);
|
|
70
78
|
}
|
|
71
79
|
/**
|
|
72
80
|
* Get canvas coordinates from mouse event.
|
|
@@ -98,20 +106,35 @@ export class CanvasEventManager {
|
|
|
98
106
|
* checked first because they paint on top (see `paint.ts` overlay
|
|
99
107
|
* ordering) — without this, a click on the Story's close-button overlay
|
|
100
108
|
* lands on the underlying Image instead.
|
|
109
|
+
*
|
|
110
|
+
* `scrollX`/`scrollY` accumulate the ancestors' scroll offsets down the
|
|
111
|
+
* recursion (the translation paint applies) so no per-node ancestor walk
|
|
112
|
+
* is needed. Subtrees behind a clipping container are pruned when the
|
|
113
|
+
* point falls outside the container — nothing inside can be visible there.
|
|
101
114
|
*/
|
|
102
|
-
hitTestNode(node, point) {
|
|
115
|
+
hitTestNode(node, point, scrollX = 0, scrollY = 0) {
|
|
103
116
|
if (!node.visible || !node.layout)
|
|
104
117
|
return null;
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
118
|
+
const layout = node.layout;
|
|
119
|
+
const x = layout.x - scrollX;
|
|
120
|
+
const y = layout.y - scrollY;
|
|
121
|
+
const inBounds = point.x >= x && point.x <= x + layout.width &&
|
|
122
|
+
point.y >= y && point.y <= y + layout.height;
|
|
123
|
+
if (!inBounds) {
|
|
124
|
+
const overflow = node.props.overflow;
|
|
125
|
+
if (overflow === "hidden" || overflow === "scroll" || overflow === "auto") {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const childScrollX = scrollX + (node.scrollState?.scrollX ?? 0);
|
|
130
|
+
const childScrollY = scrollY + (node.scrollState?.scrollY ?? 0);
|
|
108
131
|
// Front-to-back order: absolute overlays (newest in paint stack)
|
|
109
132
|
// first, then flow children in reverse paint order.
|
|
110
133
|
for (let i = node.children.length - 1; i >= 0; i--) {
|
|
111
134
|
const child = node.children[i];
|
|
112
135
|
if (child.props.position !== "absolute")
|
|
113
136
|
continue;
|
|
114
|
-
const hit = this.hitTestNode(child, point);
|
|
137
|
+
const hit = this.hitTestNode(child, point, childScrollX, childScrollY);
|
|
115
138
|
if (hit)
|
|
116
139
|
return hit;
|
|
117
140
|
}
|
|
@@ -119,14 +142,23 @@ export class CanvasEventManager {
|
|
|
119
142
|
const child = node.children[i];
|
|
120
143
|
if (child.props.position === "absolute")
|
|
121
144
|
continue;
|
|
122
|
-
const hit = this.hitTestNode(child, point);
|
|
145
|
+
const hit = this.hitTestNode(child, point, childScrollX, childScrollY);
|
|
123
146
|
if (hit)
|
|
124
147
|
return hit;
|
|
125
148
|
}
|
|
126
149
|
// Test this node
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
150
|
+
if (inBounds) {
|
|
151
|
+
const radius = layout.border.radius;
|
|
152
|
+
if (radius <= 0)
|
|
153
|
+
return node;
|
|
154
|
+
const bounds = this.scratchBounds;
|
|
155
|
+
bounds.x = x;
|
|
156
|
+
bounds.y = y;
|
|
157
|
+
bounds.width = layout.width;
|
|
158
|
+
bounds.height = layout.height;
|
|
159
|
+
if (isPointInRoundedRect(point, bounds, radius)) {
|
|
160
|
+
return node;
|
|
161
|
+
}
|
|
130
162
|
}
|
|
131
163
|
return null;
|
|
132
164
|
}
|
|
@@ -178,12 +210,24 @@ export class CanvasEventManager {
|
|
|
178
210
|
* Handle mouse down
|
|
179
211
|
*/
|
|
180
212
|
onMouseDown(e) {
|
|
213
|
+
// Suppress the browser's default mousedown focus action. The canvas
|
|
214
|
+
// itself isn't focusable, so the default would move focus to <body>
|
|
215
|
+
// AFTER this handler — undoing the mirror/proxy focus we set below and
|
|
216
|
+
// instantly ending any edit session. (Synthetic events have no default
|
|
217
|
+
// action, so this only bites with real pointers.)
|
|
218
|
+
e.preventDefault?.();
|
|
181
219
|
const point = this.getCanvasCoordinates(e);
|
|
182
220
|
// Same lift-to-clickable as hover so a click on a Button's Icon child
|
|
183
221
|
// dispatches against the Button (where `onClick` actually lives).
|
|
184
222
|
const hit = this.hitTest(point);
|
|
185
223
|
const node = this.findClickableAncestor(hit) ?? hit;
|
|
186
224
|
this.mouseDownNode = node;
|
|
225
|
+
// Track pressed (`:active`) state so paint-time `:active` variants resolve.
|
|
226
|
+
// Repaint so the active style appears immediately on press.
|
|
227
|
+
if (node) {
|
|
228
|
+
node.pressed = true;
|
|
229
|
+
this.requestRedraw();
|
|
230
|
+
}
|
|
187
231
|
if (node && node.clickable) {
|
|
188
232
|
this.dispatchNodeEvent(node, "mousedown", {
|
|
189
233
|
button: e.button,
|
|
@@ -191,12 +235,17 @@ export class CanvasEventManager {
|
|
|
191
235
|
clientY: e.clientY,
|
|
192
236
|
});
|
|
193
237
|
}
|
|
194
|
-
//
|
|
238
|
+
// Focus routes through the mirror: focusing the node's fallback-content
|
|
239
|
+
// element makes document.activeElement the truth, and the FocusManager's
|
|
240
|
+
// focusin/focusout handlers update node state + repaint.
|
|
195
241
|
if (node && node.focusable) {
|
|
196
|
-
this.
|
|
242
|
+
this.focusManager?.requestFocus(node);
|
|
243
|
+
// After focus (which starts an edit session for Input/Textarea), let
|
|
244
|
+
// the renderer place the caret at the clicked character.
|
|
245
|
+
this.editablePointerHandler?.(node, point);
|
|
197
246
|
}
|
|
198
247
|
else {
|
|
199
|
-
this.
|
|
248
|
+
this.focusManager?.requestFocus(null);
|
|
200
249
|
}
|
|
201
250
|
}
|
|
202
251
|
/**
|
|
@@ -206,6 +255,12 @@ export class CanvasEventManager {
|
|
|
206
255
|
const point = this.getCanvasCoordinates(e);
|
|
207
256
|
const hit = this.hitTest(point);
|
|
208
257
|
const node = this.findClickableAncestor(hit) ?? hit;
|
|
258
|
+
// Clear the pressed (`:active`) flag from the node that was pressed —
|
|
259
|
+
// release ends `:active` even if the pointer drifted off the node first.
|
|
260
|
+
if (this.mouseDownNode && this.mouseDownNode.pressed) {
|
|
261
|
+
this.mouseDownNode.pressed = false;
|
|
262
|
+
this.requestRedraw();
|
|
263
|
+
}
|
|
209
264
|
if (node && node.clickable) {
|
|
210
265
|
this.dispatchNodeEvent(node, "mouseup", {
|
|
211
266
|
button: e.button,
|
|
@@ -267,55 +322,6 @@ export class CanvasEventManager {
|
|
|
267
322
|
}
|
|
268
323
|
}
|
|
269
324
|
}
|
|
270
|
-
/**
|
|
271
|
-
* Handle keyboard events
|
|
272
|
-
*/
|
|
273
|
-
onKeyDown(e) {
|
|
274
|
-
if (this.focusedNode) {
|
|
275
|
-
this.dispatchNodeEvent(this.focusedNode, "keydown", {
|
|
276
|
-
key: e.key,
|
|
277
|
-
code: e.code,
|
|
278
|
-
ctrlKey: e.ctrlKey,
|
|
279
|
-
shiftKey: e.shiftKey,
|
|
280
|
-
altKey: e.altKey,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
onKeyUp(e) {
|
|
285
|
-
if (this.focusedNode) {
|
|
286
|
-
this.dispatchNodeEvent(this.focusedNode, "keyup", {
|
|
287
|
-
key: e.key,
|
|
288
|
-
code: e.code,
|
|
289
|
-
ctrlKey: e.ctrlKey,
|
|
290
|
-
shiftKey: e.shiftKey,
|
|
291
|
-
altKey: e.altKey,
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Set focused node
|
|
297
|
-
*/
|
|
298
|
-
setFocus(node) {
|
|
299
|
-
if (node === this.focusedNode)
|
|
300
|
-
return;
|
|
301
|
-
const prev = this.focusedNode;
|
|
302
|
-
if (prev) {
|
|
303
|
-
prev.focused = false;
|
|
304
|
-
this.dispatchNodeEvent(prev, "blur", {});
|
|
305
|
-
}
|
|
306
|
-
this.focusedNode = node;
|
|
307
|
-
if (node) {
|
|
308
|
-
node.focused = true;
|
|
309
|
-
this.dispatchNodeEvent(node, "focus", {});
|
|
310
|
-
}
|
|
311
|
-
if (this.focusChangeHandler)
|
|
312
|
-
this.focusChangeHandler(node, prev);
|
|
313
|
-
this.requestRedraw();
|
|
314
|
-
}
|
|
315
|
-
/** Public for the renderer's overlay-blur path. */
|
|
316
|
-
clearFocus() {
|
|
317
|
-
this.setFocus(null);
|
|
318
|
-
}
|
|
319
325
|
/**
|
|
320
326
|
* Update cursor based on node
|
|
321
327
|
*/
|
|
@@ -337,30 +343,11 @@ export class CanvasEventManager {
|
|
|
337
343
|
this.canvas.style.cursor = cursor;
|
|
338
344
|
}
|
|
339
345
|
/**
|
|
340
|
-
* Dispatch event to engine
|
|
346
|
+
* Dispatch event to engine (shared resolver — same payload shape as the
|
|
347
|
+
* mirror's keyboard/AT path).
|
|
341
348
|
*/
|
|
342
349
|
dispatchNodeEvent(node, eventType, data) {
|
|
343
|
-
|
|
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;
|
|
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
|
-
});
|
|
350
|
+
dispatchNodeEvent(this.engine, node, eventType, data);
|
|
364
351
|
}
|
|
365
352
|
/**
|
|
366
353
|
* Request redraw from renderer
|
|
@@ -380,12 +367,12 @@ export class CanvasEventManager {
|
|
|
380
367
|
this.canvas.removeEventListener("click", this.boundOnClick);
|
|
381
368
|
this.canvas.removeEventListener("dblclick", this.boundOnDoubleClick);
|
|
382
369
|
this.canvas.removeEventListener("contextmenu", this.boundOnContextMenu);
|
|
383
|
-
|
|
384
|
-
|
|
370
|
+
if (this.mouseDownNode)
|
|
371
|
+
this.mouseDownNode.pressed = false;
|
|
385
372
|
this.rootNode = null;
|
|
386
373
|
this.hoveredNode = null;
|
|
387
|
-
this.focusedNode = null;
|
|
388
374
|
this.mouseDownNode = null;
|
|
375
|
+
this.focusManager = null;
|
|
389
376
|
}
|
|
390
377
|
}
|
|
391
378
|
//# sourceMappingURL=events.js.map
|
|
@@ -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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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus Manager
|
|
3
|
+
*
|
|
4
|
+
* Real DOM focus on accessibility-mirror elements (canvas fallback content)
|
|
5
|
+
* is the single source of truth for canvas focus. Tab/Shift+Tab traverse
|
|
6
|
+
* the mirror natively; `focusin`/`focusout` translate DOM focus into
|
|
7
|
+
* `node.focused` + repaint; the pointer path (canvas hit-test) funnels into
|
|
8
|
+
* the same place by focusing the node's mirror element.
|
|
9
|
+
*
|
|
10
|
+
* Loop-free by construction: DOM focus events only ever *read* into node
|
|
11
|
+
* state — nothing in the sync path calls `.focus()` back.
|
|
12
|
+
*
|
|
13
|
+
* The mirror also carries keyboard/AT interaction back to the engine:
|
|
14
|
+
* Enter/Space on a mirror `<button>` produces a native `click` (dispatched
|
|
15
|
+
* to the node's action), and keydown/keyup on the focused element dispatch
|
|
16
|
+
* the node's `onKeyDown`/`onKeyUp` applicators — which the old
|
|
17
|
+
* canvas-attached listeners never could (a canvas without tabindex never
|
|
18
|
+
* receives key events).
|
|
19
|
+
*/
|
|
20
|
+
import type { VirtualNode } from "./types.js";
|
|
21
|
+
import type { AccessibilityLayer } from "./accessibility.js";
|
|
22
|
+
import { type DispatchEngine } from "./dispatch.js";
|
|
23
|
+
export interface FocusManagerHooks {
|
|
24
|
+
getNode(id: string): VirtualNode | undefined;
|
|
25
|
+
/** Fired after node.focused flags are updated. Renderer repaints and
|
|
26
|
+
* (for editable nodes) starts/stops the text-edit controller. */
|
|
27
|
+
onFocusChange(next: VirtualNode | null, prev: VirtualNode | null): void;
|
|
28
|
+
/**
|
|
29
|
+
* Elements outside the mirror that still count as "the node is focused" —
|
|
30
|
+
* the text editor's hidden IME proxy. Focus moving there must not clear
|
|
31
|
+
* canvas focus.
|
|
32
|
+
*/
|
|
33
|
+
isAuxFocusTarget?(element: unknown): boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare class FocusManager {
|
|
36
|
+
private mirror;
|
|
37
|
+
private engine;
|
|
38
|
+
private hooks;
|
|
39
|
+
private focusedNode;
|
|
40
|
+
private boundFocusIn;
|
|
41
|
+
private boundFocusOut;
|
|
42
|
+
private boundClick;
|
|
43
|
+
private boundKeyDown;
|
|
44
|
+
private boundKeyUp;
|
|
45
|
+
constructor(mirror: AccessibilityLayer, engine: DispatchEngine, hooks: FocusManagerHooks);
|
|
46
|
+
/** Climb from an event target to the mirror element's virtual node. */
|
|
47
|
+
private resolveNode;
|
|
48
|
+
private onFocusIn;
|
|
49
|
+
private onFocusOut;
|
|
50
|
+
/** Update node.focused flags from the new DOM focus target. Idempotent. */
|
|
51
|
+
private syncFocus;
|
|
52
|
+
/**
|
|
53
|
+
* Focus a node from the canvas pointer path. Focuses the mirror element
|
|
54
|
+
* (so `document.activeElement` agrees) and syncs node state directly —
|
|
55
|
+
* in real browsers the element's focusin already did that synchronously
|
|
56
|
+
* and the second sync is a no-op; in environments without focus events
|
|
57
|
+
* the direct sync keeps behavior identical.
|
|
58
|
+
*/
|
|
59
|
+
requestFocus(node: VirtualNode | null): void;
|
|
60
|
+
/** Pointer landed on nothing focusable: blur any mirror focus and clear. */
|
|
61
|
+
clearFocus(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Clear focus if the focused node is `node` or one of its descendants —
|
|
64
|
+
* called before a subtree is removed/detached (the mirror element may
|
|
65
|
+
* leave the DOM without a browser blur when focus sits on the IME proxy).
|
|
66
|
+
*/
|
|
67
|
+
clearIfWithin(node: VirtualNode): void;
|
|
68
|
+
getFocusedNode(): VirtualNode | null;
|
|
69
|
+
/**
|
|
70
|
+
* Native click on a mirror element — keyboard activation (Enter/Space on
|
|
71
|
+
* a real `<button>`) or an AT-initiated action. Pointer clicks never land
|
|
72
|
+
* here (fallback content has no rendered boxes), so this can't double-fire
|
|
73
|
+
* with the canvas hit-test click path.
|
|
74
|
+
*/
|
|
75
|
+
private onMirrorClick;
|
|
76
|
+
private onMirrorKey;
|
|
77
|
+
destroy(): void;
|
|
78
|
+
}
|