From 592eded22171a8615f5fdf63d4bd7e143c3e2ef9 Mon Sep 17 00:00:00 2001
From: Alexis <35.alexis.pele@gmail.com>
Date: Tue, 9 May 2023 10:42:38 +0200
Subject: [PATCH] Added sound on hover/focus
---
env.d.ts | 1 +
package-lock.json | 49 ++++++++++++++++++++++++++++++++
package.json | 1 +
src/assets/sounds/btn-hover.mp3 | Bin 0 -> 4946 bytes
src/components/YrhButton.vue | 8 ++++++
5 files changed, 59 insertions(+)
create mode 100644 src/assets/sounds/btn-hover.mp3
diff --git a/env.d.ts b/env.d.ts
index 11f02fe..4791171 100644
--- a/env.d.ts
+++ b/env.d.ts
@@ -1 +1,2 @@
///
+declare module '@vueuse/sound'
diff --git a/package-lock.json b/package-lock.json
index d038b85..f16c7bb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/vue-fontawesome": "^3.0.3",
"@vueuse/core": "^10.1.2",
+ "@vueuse/sound": "^2.0.1",
"pinia": "^2.0.35",
"sass": "^1.62.1",
"vue": "^3.2.47",
@@ -1571,6 +1572,49 @@
}
}
},
+ "node_modules/@vueuse/sound": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@vueuse/sound/-/sound-2.0.1.tgz",
+ "integrity": "sha512-7Fbp9lQkuUnpTXS9vPbvT2FDYHuwJbvKPivOYETaVVSmcZKoczw6zcsebsARkH5Ged0f045YUOZnV/RuCzyLXQ==",
+ "dependencies": {
+ "howler": "^2.2.3",
+ "vue-demi": "latest"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^2.0.0 || >=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/sound/node_modules/vue-demi": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.0.tgz",
+ "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@@ -3881,6 +3925,11 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
+ "node_modules/howler": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.3.tgz",
+ "integrity": "sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg=="
+ },
"node_modules/html-encoding-sniffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
diff --git a/package.json b/package.json
index caf7685..8ebb122 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/vue-fontawesome": "^3.0.3",
"@vueuse/core": "^10.1.2",
+ "@vueuse/sound": "^2.0.1",
"pinia": "^2.0.35",
"sass": "^1.62.1",
"vue": "^3.2.47",
diff --git a/src/assets/sounds/btn-hover.mp3 b/src/assets/sounds/btn-hover.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..240125a9834828205b639e6e05ac9092584e6108
GIT binary patch
literal 4946
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
+import { useSound } from '@vueuse/sound'
import { computed } from 'vue'
+import buttonSfx from '@/assets/sounds/btn-hover.mp3'
+
+const { play, stop } = useSound(buttonSfx)
+
const props = defineProps<{
href?: string
target?: string
@@ -26,6 +31,9 @@ const elementTag = computed(() => (props.href ? 'a' : 'button'))
v-bind="attributes"
class="btn w-full p-1 px-2 text-left bg-y-beige-500 hover:shadow-md focus-visible:shadow-md"
:class="{ active: isActive }"
+ @focus="play"
+ @mouseover="play"
+ @mouseleave="stop"
>