@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.
package/build/index.js CHANGED
@@ -2676,6 +2676,12 @@ var MouseSchema = {
2676
2676
  moveTrigger: field30.boolean().default(false),
2677
2677
  /** True for 1 frame when wheel is scrolled */
2678
2678
  wheelTrigger: field30.boolean().default(false),
2679
+ /**
2680
+ * Modifier key (Ctrl/Cmd) was held during this frame's wheel event.
2681
+ * Also true for trackpad pinch gestures, which browsers report as
2682
+ * wheel events with ctrlKey set.
2683
+ */
2684
+ wheelModKey: field30.boolean().default(false),
2679
2685
  /** True for 1 frame when mouse enters the editor element */
2680
2686
  enterTrigger: field30.boolean().default(false),
2681
2687
  /** True for 1 frame when mouse leaves the editor element */
@@ -2895,7 +2901,8 @@ function getMouseInput(ctx) {
2895
2901
  screenPosition: screenPos,
2896
2902
  worldPosition: worldPos,
2897
2903
  wheelDeltaX: mouse.wheelDeltaX,
2898
- wheelDeltaY: mouse.wheelDeltaY
2904
+ wheelDeltaY: mouse.wheelDeltaY,
2905
+ wheelModKey: mouse.wheelModKey
2899
2906
  });
2900
2907
  }
2901
2908
  if (mouse.moveTrigger) {
@@ -2905,7 +2912,8 @@ function getMouseInput(ctx) {
2905
2912
  screenPosition: screenPos,
2906
2913
  worldPosition: worldPos,
2907
2914
  wheelDeltaX: 0,
2908
- wheelDeltaY: 0
2915
+ wheelDeltaY: 0,
2916
+ wheelModKey: false
2909
2917
  });
2910
2918
  }
2911
2919
  return events;
@@ -4230,13 +4238,16 @@ var keyboardSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4230
4238
  if (keyIndex === void 0) continue;
4231
4239
  if (event.type === "keydown") {
4232
4240
  const wasDown = getBit2(keyboard.keysDown, keyIndex);
4233
- if (!wasDown) {
4241
+ if (!wasDown || !event.repeat) {
4234
4242
  setBit(keyboard.keysDownTrigger, keyIndex, true);
4235
4243
  }
4236
4244
  setBit(keyboard.keysDown, keyIndex, true);
4237
4245
  } else if (event.type === "keyup") {
4238
4246
  setBit(keyboard.keysDown, keyIndex, false);
4239
4247
  setBit(keyboard.keysUpTrigger, keyIndex, true);
4248
+ if (event.code === "MetaLeft" || event.code === "MetaRight") {
4249
+ releaseNonModifierKeys(keyboard);
4250
+ }
4240
4251
  }
4241
4252
  keyboard.shiftDown = event.shiftKey;
4242
4253
  keyboard.altDown = event.altKey;
@@ -4244,6 +4255,25 @@ var keyboardSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4244
4255
  }
4245
4256
  state.eventsBuffer.length = 0;
4246
4257
  });
4258
+ var MODIFIER_KEY_INDICES = /* @__PURE__ */ new Set([
4259
+ codeToIndex.ShiftLeft,
4260
+ codeToIndex.ShiftRight,
4261
+ codeToIndex.ControlLeft,
4262
+ codeToIndex.ControlRight,
4263
+ codeToIndex.AltLeft,
4264
+ codeToIndex.AltRight,
4265
+ codeToIndex.MetaLeft,
4266
+ codeToIndex.MetaRight
4267
+ ]);
4268
+ function releaseNonModifierKeys(keyboard) {
4269
+ const bitCount = keyboard.keysDown.length * 8;
4270
+ for (let i = 0; i < bitCount; i++) {
4271
+ if (MODIFIER_KEY_INDICES.has(i)) continue;
4272
+ if (!getBit2(keyboard.keysDown, i)) continue;
4273
+ setBit(keyboard.keysDown, i, false);
4274
+ setBit(keyboard.keysUpTrigger, i, true);
4275
+ }
4276
+ }
4247
4277
  function getBit2(buffer, bitIndex) {
4248
4278
  if (bitIndex < 0 || bitIndex >= buffer.length * 8) return false;
4249
4279
  const byteIndex = Math.floor(bitIndex / 8);
@@ -4280,7 +4310,10 @@ function attachMouseListeners(domElement) {
4280
4310
  clientY: e.clientY,
4281
4311
  deltaX: e.deltaX,
4282
4312
  deltaY: e.deltaY,
4283
- deltaMode: e.deltaMode
4313
+ deltaMode: e.deltaMode,
4314
+ // Trackpad pinch gestures arrive as wheel events with ctrlKey set,
4315
+ // without any keydown — capture the flags from the event itself.
4316
+ modKey: e.ctrlKey || e.metaKey
4284
4317
  });
4285
4318
  },
4286
4319
  onMouseEnter: () => {
@@ -4322,6 +4355,7 @@ var mouseSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4322
4355
  mouse.leaveTrigger = false;
4323
4356
  mouse.wheelDeltaX = 0;
4324
4357
  mouse.wheelDeltaY = 0;
4358
+ mouse.wheelModKey = false;
4325
4359
  for (const event of state.eventsBuffer) {
4326
4360
  switch (event.type) {
4327
4361
  case "mousemove":
@@ -4333,6 +4367,7 @@ var mouseSystem = defineEditorSystem({ phase: "input" }, (ctx) => {
4333
4367
  mouse.wheelDeltaX = event.deltaX;
4334
4368
  mouse.wheelDeltaY = normalizeWheelDelta(event.deltaY, event.deltaMode);
4335
4369
  mouse.wheelTrigger = true;
4370
+ mouse.wheelModKey = event.modKey === true;
4336
4371
  break;
4337
4372
  case "mouseenter":
4338
4373
  mouse.enterTrigger = true;
@@ -6473,6 +6508,11 @@ function createCorePlugin(options = {}) {
6473
6508
  command: RemoveSelected.name,
6474
6509
  key: Key.Delete
6475
6510
  },
6511
+ {
6512
+ // Mac keyboards' delete key reports code "Backspace"
6513
+ command: RemoveSelected.name,
6514
+ key: Key.Backspace
6515
+ },
6476
6516
  {
6477
6517
  command: SelectAll.name,
6478
6518
  key: Key.A,