@solidrt/2d 0.0.66 → 0.0.67

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidrt/2d",
3
- "version": "0.0.66",
3
+ "version": "0.0.67",
4
4
  "license": "MIT",
5
5
  "funding": "https://github.com/sponsors/wellawaretech",
6
6
  "author": "Antoine van Wel",
@@ -15,10 +15,10 @@
15
15
  "AGENTS.md"
16
16
  ],
17
17
  "devDependencies": {
18
- "@solidrt/test": "0.0.66"
18
+ "@solidrt/test": "0.0.67"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "@solidjs/signals": "2.0.0-rc.13",
22
- "@solidrt/core": "0.0.66"
22
+ "@solidrt/core": "0.0.67"
23
23
  }
24
24
  }
@@ -21,6 +21,7 @@ export type GroupProps = {
21
21
  onPointerDown?: (event: SpritePointerEvent) => void
22
22
  onPointerMove?: (event: SpritePointerEvent) => void
23
23
  onPointerUp?: (event: SpritePointerEvent) => void
24
+ onPointerCancel?: (event: SpritePointerEvent) => void
24
25
  onWheel?: (event: SpriteWheelEvent) => void
25
26
  onTap?: (event: SpriteTapEvent) => void
26
27
  /** How pose-prop changes animate (see setGroupTransition). The mount
@@ -52,11 +53,12 @@ export let Group: ParentComponent<GroupProps> = props => {
52
53
  transition => setGroupTransition(group, transition ?? null),
53
54
  )
54
55
  createEffect(
55
- () => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onWheel, props.onTap, props.onTransitionEnd] as const,
56
- ([down, move, up, wheel, tap, end]) => {
56
+ () => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onPointerCancel, props.onWheel, props.onTap, props.onTransitionEnd] as const,
57
+ ([down, move, up, cancel, wheel, tap, end]) => {
57
58
  group.onPointerDown = down
58
59
  group.onPointerMove = move
59
60
  group.onPointerUp = up
61
+ group.onPointerCancel = cancel
60
62
  group.onWheel = wheel
61
63
  group.onTap = tap
62
64
  group.onTransitionEnd = end
@@ -19,6 +19,7 @@ export type LayerPointerProps = {
19
19
  onPointerDown?: (event: LayerPointerEvent) => void
20
20
  onPointerMove?: (event: LayerPointerEvent) => void
21
21
  onPointerUp?: (event: LayerPointerEvent) => void
22
+ onPointerCancel?: (event: LayerPointerEvent) => void
22
23
  onWheel?: (event: LayerWheelEvent) => void
23
24
  onTap?: (event: LayerTapEvent) => void
24
25
  }
@@ -143,6 +144,7 @@ const VIEW_PROPS = [
143
144
  "onPointerDown",
144
145
  "onPointerMove",
145
146
  "onPointerUp",
147
+ "onPointerCancel",
146
148
  "onWheel",
147
149
  "onTap",
148
150
  ] as const
@@ -249,6 +251,7 @@ export let SpriteLayer: ParentComponent<SpriteLayerProps> = props => {
249
251
  onPointerDown: e => props.onPointerDown?.(e),
250
252
  onPointerMove: e => props.onPointerMove?.(e),
251
253
  onPointerUp: e => props.onPointerUp?.(e),
254
+ onPointerCancel: e => props.onPointerCancel?.(e),
252
255
  onWheel: e => props.onWheel?.(e),
253
256
  onTap: e => props.onTap?.(e),
254
257
  }),
@@ -321,6 +324,7 @@ export let SpriteLayer: ParentComponent<SpriteLayerProps> = props => {
321
324
  onPointerDown={events ? viewHandlers.onPointerDown : undefined}
322
325
  onPointerMove={events ? viewHandlers.onPointerMove : undefined}
323
326
  onPointerUp={events ? viewHandlers.onPointerUp : undefined}
327
+ onPointerCancel={events ? viewHandlers.onPointerCancel : undefined}
324
328
  onPointerLeave={events ? viewHandlers.onPointerLeave : undefined}
325
329
  onWheel={events ? viewHandlers.onWheel : undefined}
326
330
  />
@@ -18,6 +18,7 @@ export type SpritePointerProps = {
18
18
  onPointerDown?: (event: SpritePointerEvent) => void
19
19
  onPointerMove?: (event: SpritePointerEvent) => void
20
20
  onPointerUp?: (event: SpritePointerEvent) => void
21
+ onPointerCancel?: (event: SpritePointerEvent) => void
21
22
  /** Sprites only: a Group never receives enter/leave. */
22
23
  onPointerEnter?: (event: SpritePointerEvent) => void
23
24
  onPointerLeave?: (event: SpritePointerEvent) => void
@@ -54,11 +55,12 @@ export let Sprite: VoidComponent<SpriteProps> = props => {
54
55
  transition => setSpriteTransition(sprite, transition ?? null),
55
56
  )
56
57
  createEffect(
57
- () => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onPointerEnter, props.onPointerLeave, props.onWheel, props.onTap, props.onTransitionEnd] as const,
58
- ([down, move, up, enter, leave, wheel, tap, end]) => {
58
+ () => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onPointerCancel, props.onPointerEnter, props.onPointerLeave, props.onWheel, props.onTap, props.onTransitionEnd] as const,
59
+ ([down, move, up, cancel, enter, leave, wheel, tap, end]) => {
59
60
  sprite.onPointerDown = down
60
61
  sprite.onPointerMove = move
61
62
  sprite.onPointerUp = up
63
+ sprite.onPointerCancel = cancel
62
64
  sprite.onPointerEnter = enter
63
65
  sprite.onPointerLeave = leave
64
66
  sprite.onWheel = wheel
@@ -107,6 +107,7 @@ export let View2d: ParentComponent<View2dProps> = props => {
107
107
  onPointerDown: e => props.onPointerDown?.(e),
108
108
  onPointerMove: e => props.onPointerMove?.(e),
109
109
  onPointerUp: e => props.onPointerUp?.(e),
110
+ onPointerCancel: e => props.onPointerCancel?.(e),
110
111
  onWheel: e => props.onWheel?.(e),
111
112
  onTap: e => props.onTap?.(e),
112
113
  }),
@@ -148,6 +149,7 @@ export let View2d: ParentComponent<View2dProps> = props => {
148
149
  onPointerDown={events ? view.handlers.onPointerDown : undefined}
149
150
  onPointerMove={events ? view.handlers.onPointerMove : undefined}
150
151
  onPointerUp={events ? view.handlers.onPointerUp : undefined}
152
+ onPointerCancel={events ? view.handlers.onPointerCancel : undefined}
151
153
  onPointerLeave={events ? view.handlers.onPointerLeave : undefined}
152
154
  onWheel={events ? view.handlers.onWheel : undefined}
153
155
  />
package/src/dispatch.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  // Pointer dispatch behind view.handlers, shared by both layer kinds: the
2
2
  // element event model one tree deeper, with the VIEW as the root of the
3
- // walk. Down, move, up and wheel dispatch on the topmost hit sprite,
3
+ // walk. Down, move, up, cancel and wheel dispatch on the topmost hit sprite,
4
4
  // bubble through its enclosing groups and end at the layer's listeners;
5
5
  // over empty space the walk is the layer alone (`sprite` null). Claiming
6
6
  // is stopPropagation: a handler that stops an event keeps every later
@@ -49,7 +49,7 @@ export type DispatchDeps = {
49
49
  listeners: Set<LayerPointerListener>
50
50
  }
51
51
 
52
- type HandlerName = "onPointerDown" | "onPointerMove" | "onPointerUp" | "onWheel" | "onTap"
52
+ type HandlerName = "onPointerDown" | "onPointerMove" | "onPointerUp" | "onPointerCancel" | "onWheel" | "onTap"
53
53
 
54
54
  // One runtime event object serves every view (SpritePointerEvent for the
55
55
  // sprite chain, LayerPointerEvent at the root, plus the wheel and tap
@@ -212,6 +212,17 @@ export function spriteDispatch(deps: DispatchDeps): (layout: (() => { width: num
212
212
  tap.tapCount = count
213
213
  walk("onTap", tap, !press.claimed)
214
214
  },
215
+ onPointerCancel(e) {
216
+ let [x, y] = toLayer(e)
217
+ let press = presses.get(e.pointerId)
218
+ if (!press) {
219
+ walk("onPointerCancel", makeEvent(topmost(x, y), x, y, e), true)
220
+ return
221
+ }
222
+ // The press ends where it was: the walk it captured, never a tap.
223
+ presses.delete(e.pointerId)
224
+ walk("onPointerCancel", makeEvent(press.target, x, y, e), !press.claimed)
225
+ },
215
226
  onWheel(e) {
216
227
  let [x, y] = toLayer(e)
217
228
  let event = makeEvent(topmost(x, y), x, y, e)
package/src/layer.ts CHANGED
@@ -183,6 +183,9 @@ export type Sprite = {
183
183
  onPointerDown?: (event: SpritePointerEvent) => void
184
184
  onPointerMove?: (event: SpritePointerEvent) => void
185
185
  onPointerUp?: (event: SpritePointerEvent) => void
186
+ /** The pointer's other end: the system took it away (see core's
187
+ * onPointerCancel); bubbles like up, and the press it ends never taps. */
188
+ onPointerCancel?: (event: SpritePointerEvent) => void
186
189
  onPointerEnter?: (event: SpritePointerEvent) => void
187
190
  onPointerLeave?: (event: SpritePointerEvent) => void
188
191
  /** A wheel notch over the sprite; bubbles like down/move/up. */
@@ -343,6 +346,7 @@ export type LayerPointerListener = {
343
346
  onPointerDown?: (event: LayerPointerEvent) => void
344
347
  onPointerMove?: (event: LayerPointerEvent) => void
345
348
  onPointerUp?: (event: LayerPointerEvent) => void
349
+ onPointerCancel?: (event: LayerPointerEvent) => void
346
350
  onWheel?: (event: LayerWheelEvent) => void
347
351
  onTap?: (event: LayerTapEvent) => void
348
352
  }
@@ -353,6 +357,7 @@ export type LayerHandlers = {
353
357
  onPointerDown: (event: ElementPointerEvent) => void
354
358
  onPointerMove: (event: ElementPointerEvent) => void
355
359
  onPointerUp: (event: ElementPointerEvent) => void
360
+ onPointerCancel: (event: ElementPointerEvent) => void
356
361
  onPointerLeave: (event: ElementPointerEvent) => void
357
362
  onWheel: (event: ElementWheelEvent) => void
358
363
  }
@@ -447,6 +452,7 @@ export type SpriteGroup = {
447
452
  onPointerDown?: (event: SpritePointerEvent) => void
448
453
  onPointerMove?: (event: SpritePointerEvent) => void
449
454
  onPointerUp?: (event: SpritePointerEvent) => void
455
+ onPointerCancel?: (event: SpritePointerEvent) => void
450
456
  onWheel?: (event: SpriteWheelEvent) => void
451
457
  onTap?: (event: SpriteTapEvent) => void
452
458
  /** See Sprite.onTransitionEnd. */
package/src/views.ts CHANGED
@@ -289,6 +289,7 @@ export function feedPointer(view: ViewHandle, feed: PointerFeed): () => void {
289
289
  onPointerDown: e => feed.handlers.onPointerDown(e.native),
290
290
  onPointerMove: e => feed.handlers.onPointerMove(e.native),
291
291
  onPointerUp: e => feed.handlers.onPointerUp(e.native),
292
+ onPointerCancel: e => feed.handlers.onPointerCancel(e.native),
292
293
  onWheel: e => feed.handlers.onWheel(e.native),
293
294
  })
294
295
  }