From 71ca797dcb72e8ca539f715427b13d4f83861037 Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Thu, 30 Apr 2026 13:30:12 -0700 Subject: [PATCH] feat: Add a sound effect when dropping top-level items on the workspace (#9784) --- .../blockly/core/dragging/block_drag_strategy.ts | 4 ++++ .../core/dragging/comment_drag_strategy.ts | 1 + packages/blockly/core/inject.ts | 1 + packages/blockly/media/drop.mp3 | Bin 0 -> 5434 bytes 4 files changed, 6 insertions(+) create mode 100644 packages/blockly/media/drop.mp3 diff --git a/packages/blockly/core/dragging/block_drag_strategy.ts b/packages/blockly/core/dragging/block_drag_strategy.ts index bca926d47..a84f4a3cc 100644 --- a/packages/blockly/core/dragging/block_drag_strategy.ts +++ b/packages/blockly/core/dragging/block_drag_strategy.ts @@ -786,6 +786,10 @@ export class BlockDragStrategy implements IDragStrategy { this.applyConnections(this.connectionCandidate); this.disposeStep(); } else { + // play a sound if the block didn't connect to anything and isn't being deleted + if (disposition !== DragDisposition.DELETE) { + this.workspace.getAudioManager().play('drop'); + } this.block.queueRender().then(() => this.disposeStep()); } diff --git a/packages/blockly/core/dragging/comment_drag_strategy.ts b/packages/blockly/core/dragging/comment_drag_strategy.ts index 45c1690b0..be0810782 100644 --- a/packages/blockly/core/dragging/comment_drag_strategy.ts +++ b/packages/blockly/core/dragging/comment_drag_strategy.ts @@ -50,6 +50,7 @@ export class CommentDragStrategy implements IDragStrategy { this.workspace .getLayerManager() ?.moveOffDragLayer(this.comment, layers.BLOCK); + this.workspace.getAudioManager().play('drop'); this.comment.setDragging(false); this.comment.snapToGrid(); diff --git a/packages/blockly/core/inject.ts b/packages/blockly/core/inject.ts index 55cad0590..dffdeef47 100644 --- a/packages/blockly/core/inject.ts +++ b/packages/blockly/core/inject.ts @@ -333,4 +333,5 @@ function loadSounds(pathToMedia: string, workspace: WorkspaceSvg) { audioMgr.load([`${pathToMedia}click.mp3`], 'click'); audioMgr.load([`${pathToMedia}disconnect.mp3`], 'disconnect'); audioMgr.load([`${pathToMedia}delete.mp3`], 'delete'); + audioMgr.load([`${pathToMedia}drop.mp3`], 'drop'); } diff --git a/packages/blockly/media/drop.mp3 b/packages/blockly/media/drop.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ddd81aca086eba059436b4d780f43f72f061d170 GIT binary patch literal 5434 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