@woven-canvas/core 1.0.12 → 1.0.14

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.
@@ -1494,6 +1494,7 @@ declare interface MouseInput {
1494
1494
  worldPosition: Vec2;
1495
1495
  wheelDeltaX: number;
1496
1496
  wheelDeltaY: number;
1497
+ wheelModKey: boolean;
1497
1498
  }
1498
1499
  export { MouseInput }
1499
1500
  export { MouseInput as MouseInput_alias_1 }
@@ -1510,6 +1511,7 @@ declare const MouseSchema: {
1510
1511
  wheelDeltaY: NumberFieldBuilder<"float32">;
1511
1512
  moveTrigger: BooleanFieldBuilder;
1512
1513
  wheelTrigger: BooleanFieldBuilder;
1514
+ wheelModKey: BooleanFieldBuilder;
1513
1515
  enterTrigger: BooleanFieldBuilder;
1514
1516
  leaveTrigger: BooleanFieldBuilder;
1515
1517
  obscured: BooleanFieldBuilder;
@@ -1494,6 +1494,7 @@ declare interface MouseInput {
1494
1494
  worldPosition: Vec2;
1495
1495
  wheelDeltaX: number;
1496
1496
  wheelDeltaY: number;
1497
+ wheelModKey: boolean;
1497
1498
  }
1498
1499
  export { MouseInput }
1499
1500
  export { MouseInput as MouseInput_alias_1 }
@@ -1510,6 +1511,7 @@ declare const MouseSchema: {
1510
1511
  wheelDeltaY: NumberFieldBuilder<"float32">;
1511
1512
  moveTrigger: BooleanFieldBuilder;
1512
1513
  wheelTrigger: BooleanFieldBuilder;
1514
+ wheelModKey: BooleanFieldBuilder;
1513
1515
  enterTrigger: BooleanFieldBuilder;
1514
1516
  leaveTrigger: BooleanFieldBuilder;
1515
1517
  obscured: BooleanFieldBuilder;
package/build/index.cjs CHANGED
@@ -2834,6 +2834,12 @@ var MouseSchema = {
2834
2834
  moveTrigger: import_core30.field.boolean().default(false),
2835
2835
  /** True for 1 frame when wheel is scrolled */
2836
2836
  wheelTrigger: import_core30.field.boolean().default(false),
2837
+ /**
2838
+ * Modifier key (Ctrl/Cmd) was held during this frame's wheel event.
2839
+ * Also true for trackpad pinch gestures, which browsers report as
2840
+ * wheel events with ctrlKey set.
2841
+ */
2842
+ wheelModKey: import_core30.field.boolean().default(false),
2837
2843
  /** True for 1 frame when mouse enters the editor element */
2838
2844
  enterTrigger: import_core30.field.boolean().default(false),
2839
2845
  /** True for 1 frame when mouse leaves the editor element */
@@ -3053,7 +3059,8 @@ function getMouseInput(ctx) {
3053
3059
  screenPosition: screenPos,
3054
3060
  worldPosition: worldPos,
3055
3061
  wheelDeltaX: mouse.wheelDeltaX,
3056
- wheelDeltaY: mouse.wheelDeltaY
3062
+ wheelDeltaY: mouse.wheelDeltaY,
3063
+ wheelModKey: mouse.wheelModKey
3057
3064
  });
3058
3065
  }
3059
3066
  if (mouse.moveTrigger) {
@@ -3063,7 +3070,8 @@ function getMouseInput(ctx) {
3063
3070
  screenPosition: screenPos,
3064
3071
  worldPosition: worldPos,
3065
3072
  wheelDeltaX: 0,
3066
- wheelDeltaY: 0
3073
+ wheelDeltaY: 0,
3074
+ wheelModKey: false
3067
3075
  });
3068
3076
  }
3069
3077
  return events;
@@ -4382,13 +4390,16 @@ var keyboardSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4382
4390
  if (keyIndex === void 0) continue;
4383
4391
  if (event.type === "keydown") {
4384
4392
  const wasDown = getBit2(keyboard.keysDown, keyIndex);
4385
- if (!wasDown) {
4393
+ if (!wasDown || !event.repeat) {
4386
4394
  setBit(keyboard.keysDownTrigger, keyIndex, true);
4387
4395
  }
4388
4396
  setBit(keyboard.keysDown, keyIndex, true);
4389
4397
  } else if (event.type === "keyup") {
4390
4398
  setBit(keyboard.keysDown, keyIndex, false);
4391
4399
  setBit(keyboard.keysUpTrigger, keyIndex, true);
4400
+ if (event.code === "MetaLeft" || event.code === "MetaRight") {
4401
+ releaseNonModifierKeys(keyboard);
4402
+ }
4392
4403
  }
4393
4404
  keyboard.shiftDown = event.shiftKey;
4394
4405
  keyboard.altDown = event.altKey;
@@ -4396,6 +4407,25 @@ var keyboardSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4396
4407
  }
4397
4408
  state.eventsBuffer.length = 0;
4398
4409
  });
4410
+ var MODIFIER_KEY_INDICES = /* @__PURE__ */ new Set([
4411
+ codeToIndex.ShiftLeft,
4412
+ codeToIndex.ShiftRight,
4413
+ codeToIndex.ControlLeft,
4414
+ codeToIndex.ControlRight,
4415
+ codeToIndex.AltLeft,
4416
+ codeToIndex.AltRight,
4417
+ codeToIndex.MetaLeft,
4418
+ codeToIndex.MetaRight
4419
+ ]);
4420
+ function releaseNonModifierKeys(keyboard) {
4421
+ const bitCount = keyboard.keysDown.length * 8;
4422
+ for (let i = 0; i < bitCount; i++) {
4423
+ if (MODIFIER_KEY_INDICES.has(i)) continue;
4424
+ if (!getBit2(keyboard.keysDown, i)) continue;
4425
+ setBit(keyboard.keysDown, i, false);
4426
+ setBit(keyboard.keysUpTrigger, i, true);
4427
+ }
4428
+ }
4399
4429
  function getBit2(buffer, bitIndex) {
4400
4430
  if (bitIndex < 0 || bitIndex >= buffer.length * 8) return false;
4401
4431
  const byteIndex = Math.floor(bitIndex / 8);
@@ -4432,7 +4462,10 @@ function attachMouseListeners(domElement) {
4432
4462
  clientY: e.clientY,
4433
4463
  deltaX: e.deltaX,
4434
4464
  deltaY: e.deltaY,
4435
- deltaMode: e.deltaMode
4465
+ deltaMode: e.deltaMode,
4466
+ // Trackpad pinch gestures arrive as wheel events with ctrlKey set,
4467
+ // without any keydown — capture the flags from the event itself.
4468
+ modKey: e.ctrlKey || e.metaKey
4436
4469
  });
4437
4470
  },
4438
4471
  onMouseEnter: () => {
@@ -4474,6 +4507,7 @@ var mouseSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4474
4507
  mouse.leaveTrigger = false;
4475
4508
  mouse.wheelDeltaX = 0;
4476
4509
  mouse.wheelDeltaY = 0;
4510
+ mouse.wheelModKey = false;
4477
4511
  for (const event of state.eventsBuffer) {
4478
4512
  switch (event.type) {
4479
4513
  case "mousemove":
@@ -4485,6 +4519,7 @@ var mouseSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4485
4519
  mouse.wheelDeltaX = event.deltaX;
4486
4520
  mouse.wheelDeltaY = normalizeWheelDelta(event.deltaY, event.deltaMode);
4487
4521
  mouse.wheelTrigger = true;
4522
+ mouse.wheelModKey = event.modKey === true;
4488
4523
  break;
4489
4524
  case "mouseenter":
4490
4525
  mouse.enterTrigger = true;
@@ -6599,6 +6634,11 @@ function createCorePlugin(options = {}) {
6599
6634
  command: RemoveSelected.name,
6600
6635
  key: Key.Delete
6601
6636
  },
6637
+ {
6638
+ // Mac keyboards' delete key reports code "Backspace"
6639
+ command: RemoveSelected.name,
6640
+ key: Key.Backspace
6641
+ },
6602
6642
  {
6603
6643
  command: SelectAll.name,
6604
6644
  key: Key.A,