diff --git a/package-lock.json b/package-lock.json index c08a1cf1..e9d7ebbb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "react-masonry-css": "^1.0.16", "react-scripts": "5.0.0", "react-simple-typewriter": "^5.0.1", + "use-sound": "^4.0.1", "web-vitals": "^2.1.4" } }, @@ -7913,6 +7914,11 @@ "node": ">= 6.0.0" } }, + "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/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -14997,6 +15003,17 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sound": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/use-sound/-/use-sound-4.0.1.tgz", + "integrity": "sha512-hykJ86kNcu6y/FzlSHcQxhjSGMslZx2WlfLpZNoPbvueakv4OF3xPxEtGV2YmculrIaH0tPp9LtG4jgy17xMWg==", + "dependencies": { + "howler": "^2.1.3" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -21611,6 +21628,11 @@ "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" }, + "howler": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.3.tgz", + "integrity": "sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg==" + }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -26607,6 +26629,14 @@ "punycode": "^2.1.0" } }, + "use-sound": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/use-sound/-/use-sound-4.0.1.tgz", + "integrity": "sha512-hykJ86kNcu6y/FzlSHcQxhjSGMslZx2WlfLpZNoPbvueakv4OF3xPxEtGV2YmculrIaH0tPp9LtG4jgy17xMWg==", + "requires": { + "howler": "^2.1.3" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 0a0a22f3..3496c768 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "react-masonry-css": "^1.0.16", "react-scripts": "5.0.0", "react-simple-typewriter": "^5.0.1", + "use-sound": "^4.0.1", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/src/Components/Footer/Footer.jsx b/src/Components/Footer/Footer.jsx index 5faeefd7..6b75e781 100644 --- a/src/Components/Footer/Footer.jsx +++ b/src/Components/Footer/Footer.jsx @@ -1,10 +1,12 @@ -import React, {useState, useEffect} from "react"; - +import React, { useState, useEffect } from "react"; +import useSound from 'use-sound'; +import heartBeat from './heart-beat.wav'; import styles from "./Footer.module.css"; const Footer = () => { const [isMobile, setIsMobile] = useState(window.innerWidth < 640); + const [playHeartBeat, { stop }] = useSound(heartBeat); useEffect(() => { function handleSize() { @@ -21,7 +23,13 @@ const Footer = () => {