diff --git a/package-lock.json b/package-lock.json
index 7e351707..96098b2f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,20 +13,20 @@
                 "@semantic-release/git": "10.0.1",
                 "@testing-library/react": "14.0.0",
                 "@tsconfig/recommended": "1.0.2",
-                "@types/react": "18.2.18",
-                "@vitest/coverage-v8": "0.34.1",
+                "@types/react": "18.2.20",
+                "@vitest/coverage-v8": "0.34.2",
                 "firebase": "9.11.0",
-                "happy-dom": "10.5.2",
+                "happy-dom": "10.10.4",
                 "husky": "8.0.3",
                 "lint-staged": "14.0.0",
-                "prettier": "3.0.0",
+                "prettier": "3.0.2",
                 "react": "18.2.0",
                 "react-test-renderer": "18.2.0",
                 "rimraf": "5.0.1",
-                "semantic-release": "21.0.7",
+                "semantic-release": "21.0.9",
                 "typedoc": "0.24.8",
                 "typescript": "5.1.6",
-                "vitest": "0.34.1"
+                "vitest": "0.34.2"
             },
             "peerDependencies": {
                 "firebase": "^9.11.0 || ^10.0.0",
@@ -2175,9 +2175,9 @@
             "dev": true
         },
         "node_modules/@types/react": {
-            "version": "18.2.18",
-            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.18.tgz",
-            "integrity": "sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==",
+            "version": "18.2.20",
+            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz",
+            "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==",
             "dev": true,
             "dependencies": {
                 "@types/prop-types": "*",
@@ -2201,9 +2201,9 @@
             "dev": true
         },
         "node_modules/@vitest/coverage-v8": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.1.tgz",
-            "integrity": "sha512-lRgUwjTMr8idXEbUPSNH4jjRZJXJCVY3BqUa+LDXyJVe3pldxYMn/r0HMqatKUGTp0Kyf1j5LfFoY6kRqRp7jw==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.2.tgz",
+            "integrity": "sha512-3VuDZPeGGd1zWtc0Tdj9cHSbFc8IQ0ffnWp9MlhItOkziN6HEf219meZ9cZheg/hJXrXb+Fi2bMu7GeCAfL4yA==",
             "dev": true,
             "dependencies": {
                 "@ampproject/remapping": "^2.2.1",
@@ -2226,13 +2226,13 @@
             }
         },
         "node_modules/@vitest/expect": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.1.tgz",
-            "integrity": "sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.2.tgz",
+            "integrity": "sha512-EZm2dMNlLyIfDMha17QHSQcg2KjeAZaXd65fpPzXY5bvnfx10Lcaz3N55uEe8PhF+w4pw+hmrlHLLlRn9vkBJg==",
             "dev": true,
             "dependencies": {
-                "@vitest/spy": "0.34.1",
-                "@vitest/utils": "0.34.1",
+                "@vitest/spy": "0.34.2",
+                "@vitest/utils": "0.34.2",
                 "chai": "^4.3.7"
             },
             "funding": {
@@ -2240,12 +2240,12 @@
             }
         },
         "node_modules/@vitest/runner": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.1.tgz",
-            "integrity": "sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.2.tgz",
+            "integrity": "sha512-8ydGPACVX5tK3Dl0SUwxfdg02h+togDNeQX3iXVFYgzF5odxvaou7HnquALFZkyVuYskoaHUOqOyOLpOEj5XTA==",
             "dev": true,
             "dependencies": {
-                "@vitest/utils": "0.34.1",
+                "@vitest/utils": "0.34.2",
                 "p-limit": "^4.0.0",
                 "pathe": "^1.1.1"
             },
@@ -2254,9 +2254,9 @@
             }
         },
         "node_modules/@vitest/snapshot": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.1.tgz",
-            "integrity": "sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.2.tgz",
+            "integrity": "sha512-qhQ+xy3u4mwwLxltS4Pd4SR+XHv4EajiTPNY3jkIBLUApE6/ce72neJPSUQZ7bL3EBuKI+NhvzhGj3n5baRQUQ==",
             "dev": true,
             "dependencies": {
                 "magic-string": "^0.30.1",
@@ -2300,9 +2300,9 @@
             "dev": true
         },
         "node_modules/@vitest/spy": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.1.tgz",
-            "integrity": "sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.2.tgz",
+            "integrity": "sha512-yd4L9OhfH6l0Av7iK3sPb3MykhtcRN5c5K5vm1nTbuN7gYn+yvUVVsyvzpHrjqS7EWqn9WsPJb7+0c3iuY60tA==",
             "dev": true,
             "dependencies": {
                 "tinyspy": "^2.1.1"
@@ -2312,9 +2312,9 @@
             }
         },
         "node_modules/@vitest/utils": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.1.tgz",
-            "integrity": "sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.2.tgz",
+            "integrity": "sha512-Lzw+kAsTPubhoQDp1uVAOP6DhNia1GMDsI9jgB0yMn+/nDaPieYQ88lKqz/gGjSHL4zwOItvpehec9OY+rS73w==",
             "dev": true,
             "dependencies": {
                 "diff-sequences": "^29.4.3",
@@ -4038,9 +4038,9 @@
             }
         },
         "node_modules/happy-dom": {
-            "version": "10.5.2",
-            "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.5.2.tgz",
-            "integrity": "sha512-dTA1cDcLOPIkAdykLd9Wo1k8Ly36Hh2OdKGkWEHWuAHb89KcVVRLSj1OFev7ir90xhRLSGCGrEdDvS6u9l13kg==",
+            "version": "10.10.4",
+            "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.10.4.tgz",
+            "integrity": "sha512-aEEFGSSs4DEJbxXvSMsIvJvvdsZbJZQEgtHsU4GgwNKbSbFxtgu6vXHmn4XoXnuElIbXV0xhbJiiQTxPnTmJcw==",
             "dev": true,
             "dependencies": {
                 "css.escape": "^1.5.1",
@@ -9791,9 +9791,9 @@
             }
         },
         "node_modules/prettier": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz",
-            "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==",
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz",
+            "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==",
             "dev": true,
             "bin": {
                 "prettier": "bin/prettier.cjs"
@@ -10402,9 +10402,9 @@
             }
         },
         "node_modules/semantic-release": {
-            "version": "21.0.7",
-            "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz",
-            "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==",
+            "version": "21.0.9",
+            "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.9.tgz",
+            "integrity": "sha512-EnylO0+UcKbVFaHeMbCjJpxqpgJPnze4zoOwmj34Kv4GnuyTV9MkNKrwmdZPFbmom9PpMj+9JN/8eyZzKkKyZQ==",
             "dev": true,
             "dependencies": {
                 "@semantic-release/commit-analyzer": "^10.0.0",
@@ -10416,13 +10416,13 @@
                 "cosmiconfig": "^8.0.0",
                 "debug": "^4.0.0",
                 "env-ci": "^9.0.0",
-                "execa": "^7.0.0",
+                "execa": "^8.0.0",
                 "figures": "^5.0.0",
                 "find-versions": "^5.1.0",
                 "get-stream": "^6.0.0",
                 "git-log-parser": "^1.2.0",
                 "hook-std": "^3.0.0",
-                "hosted-git-info": "^6.0.0",
+                "hosted-git-info": "^7.0.0",
                 "lodash-es": "^4.17.21",
                 "marked": "^5.0.0",
                 "marked-terminal": "^5.1.1",
@@ -10501,56 +10501,68 @@
             }
         },
         "node_modules/semantic-release/node_modules/execa": {
-            "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
-            "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
+            "version": "8.0.1",
+            "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+            "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
             "dev": true,
             "dependencies": {
                 "cross-spawn": "^7.0.3",
-                "get-stream": "^6.0.1",
-                "human-signals": "^4.3.0",
+                "get-stream": "^8.0.1",
+                "human-signals": "^5.0.0",
                 "is-stream": "^3.0.0",
                 "merge-stream": "^2.0.0",
                 "npm-run-path": "^5.1.0",
                 "onetime": "^6.0.0",
-                "signal-exit": "^3.0.7",
+                "signal-exit": "^4.1.0",
                 "strip-final-newline": "^3.0.0"
             },
             "engines": {
-                "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+                "node": ">=16.17"
             },
             "funding": {
                 "url": "https://github.com/sindresorhus/execa?sponsor=1"
             }
         },
+        "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": {
+            "version": "8.0.1",
+            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+            "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+            "dev": true,
+            "engines": {
+                "node": ">=16"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/semantic-release/node_modules/hosted-git-info": {
-            "version": "6.1.1",
-            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz",
-            "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==",
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.0.tgz",
+            "integrity": "sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA==",
             "dev": true,
             "dependencies": {
-                "lru-cache": "^7.5.1"
+                "lru-cache": "^10.0.1"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
         "node_modules/semantic-release/node_modules/hosted-git-info/node_modules/lru-cache": {
-            "version": "7.18.3",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
-            "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+            "version": "10.0.1",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
+            "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
             "dev": true,
             "engines": {
-                "node": ">=12"
+                "node": "14 || >=16.14"
             }
         },
         "node_modules/semantic-release/node_modules/human-signals": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
-            "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+            "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
             "dev": true,
             "engines": {
-                "node": ">=14.18.0"
+                "node": ">=16.17.0"
             }
         },
         "node_modules/semantic-release/node_modules/indent-string": {
@@ -10596,15 +10608,15 @@
             }
         },
         "node_modules/semantic-release/node_modules/marked": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.0.tgz",
-            "integrity": "sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ==",
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz",
+            "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==",
             "dev": true,
             "bin": {
                 "marked": "bin/marked.js"
             },
             "engines": {
-                "node": ">= 18"
+                "node": ">= 16"
             }
         },
         "node_modules/semantic-release/node_modules/mimic-fn": {
@@ -10634,6 +10646,27 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/semantic-release/node_modules/normalize-package-data/node_modules/hosted-git-info": {
+            "version": "6.1.1",
+            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz",
+            "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==",
+            "dev": true,
+            "dependencies": {
+                "lru-cache": "^7.5.1"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/semantic-release/node_modules/normalize-package-data/node_modules/lru-cache": {
+            "version": "7.18.3",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+            "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+            "dev": true,
+            "engines": {
+                "node": ">=12"
+            }
+        },
         "node_modules/semantic-release/node_modules/npm-run-path": {
             "version": "5.1.0",
             "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
@@ -10743,9 +10776,9 @@
             }
         },
         "node_modules/semantic-release/node_modules/semver": {
-            "version": "7.5.3",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
-            "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
+            "version": "7.5.4",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+            "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
             "dev": true,
             "dependencies": {
                 "lru-cache": "^6.0.0"
@@ -10757,6 +10790,18 @@
                 "node": ">=10"
             }
         },
+        "node_modules/semantic-release/node_modules/signal-exit": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+            "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+            "dev": true,
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/semantic-release/node_modules/strip-final-newline": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
@@ -10770,9 +10815,9 @@
             }
         },
         "node_modules/semantic-release/node_modules/type-fest": {
-            "version": "3.12.0",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz",
-            "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==",
+            "version": "3.13.1",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+            "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
             "dev": true,
             "engines": {
                 "node": ">=14.16"
@@ -11803,9 +11848,9 @@
             }
         },
         "node_modules/vite-node": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.1.tgz",
-            "integrity": "sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.2.tgz",
+            "integrity": "sha512-JtW249Zm3FB+F7pQfH56uWSdlltCo1IOkZW5oHBzeQo0iX4jtC7o1t9aILMGd9kVekXBP2lfJBEQt9rBh07ebA==",
             "dev": true,
             "dependencies": {
                 "cac": "^6.7.14",
@@ -11826,19 +11871,19 @@
             }
         },
         "node_modules/vitest": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.1.tgz",
-            "integrity": "sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.2.tgz",
+            "integrity": "sha512-WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBxQ==",
             "dev": true,
             "dependencies": {
                 "@types/chai": "^4.3.5",
                 "@types/chai-subset": "^1.3.3",
                 "@types/node": "*",
-                "@vitest/expect": "0.34.1",
-                "@vitest/runner": "0.34.1",
-                "@vitest/snapshot": "0.34.1",
-                "@vitest/spy": "0.34.1",
-                "@vitest/utils": "0.34.1",
+                "@vitest/expect": "0.34.2",
+                "@vitest/runner": "0.34.2",
+                "@vitest/snapshot": "0.34.2",
+                "@vitest/spy": "0.34.2",
+                "@vitest/utils": "0.34.2",
                 "acorn": "^8.9.0",
                 "acorn-walk": "^8.2.0",
                 "cac": "^6.7.14",
@@ -11853,7 +11898,7 @@
                 "tinybench": "^2.5.0",
                 "tinypool": "^0.7.0",
                 "vite": "^3.0.0 || ^4.0.0",
-                "vite-node": "0.34.1",
+                "vite-node": "0.34.2",
                 "why-is-node-running": "^2.2.2"
             },
             "bin": {
@@ -13794,9 +13839,9 @@
             "dev": true
         },
         "@types/react": {
-            "version": "18.2.18",
-            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.18.tgz",
-            "integrity": "sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==",
+            "version": "18.2.20",
+            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz",
+            "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==",
             "dev": true,
             "requires": {
                 "@types/prop-types": "*",
@@ -13820,9 +13865,9 @@
             "dev": true
         },
         "@vitest/coverage-v8": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.1.tgz",
-            "integrity": "sha512-lRgUwjTMr8idXEbUPSNH4jjRZJXJCVY3BqUa+LDXyJVe3pldxYMn/r0HMqatKUGTp0Kyf1j5LfFoY6kRqRp7jw==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.2.tgz",
+            "integrity": "sha512-3VuDZPeGGd1zWtc0Tdj9cHSbFc8IQ0ffnWp9MlhItOkziN6HEf219meZ9cZheg/hJXrXb+Fi2bMu7GeCAfL4yA==",
             "dev": true,
             "requires": {
                 "@ampproject/remapping": "^2.2.1",
@@ -13839,31 +13884,31 @@
             }
         },
         "@vitest/expect": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.1.tgz",
-            "integrity": "sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.2.tgz",
+            "integrity": "sha512-EZm2dMNlLyIfDMha17QHSQcg2KjeAZaXd65fpPzXY5bvnfx10Lcaz3N55uEe8PhF+w4pw+hmrlHLLlRn9vkBJg==",
             "dev": true,
             "requires": {
-                "@vitest/spy": "0.34.1",
-                "@vitest/utils": "0.34.1",
+                "@vitest/spy": "0.34.2",
+                "@vitest/utils": "0.34.2",
                 "chai": "^4.3.7"
             }
         },
         "@vitest/runner": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.1.tgz",
-            "integrity": "sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.2.tgz",
+            "integrity": "sha512-8ydGPACVX5tK3Dl0SUwxfdg02h+togDNeQX3iXVFYgzF5odxvaou7HnquALFZkyVuYskoaHUOqOyOLpOEj5XTA==",
             "dev": true,
             "requires": {
-                "@vitest/utils": "0.34.1",
+                "@vitest/utils": "0.34.2",
                 "p-limit": "^4.0.0",
                 "pathe": "^1.1.1"
             }
         },
         "@vitest/snapshot": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.1.tgz",
-            "integrity": "sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.2.tgz",
+            "integrity": "sha512-qhQ+xy3u4mwwLxltS4Pd4SR+XHv4EajiTPNY3jkIBLUApE6/ce72neJPSUQZ7bL3EBuKI+NhvzhGj3n5baRQUQ==",
             "dev": true,
             "requires": {
                 "magic-string": "^0.30.1",
@@ -13897,18 +13942,18 @@
             }
         },
         "@vitest/spy": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.1.tgz",
-            "integrity": "sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.2.tgz",
+            "integrity": "sha512-yd4L9OhfH6l0Av7iK3sPb3MykhtcRN5c5K5vm1nTbuN7gYn+yvUVVsyvzpHrjqS7EWqn9WsPJb7+0c3iuY60tA==",
             "dev": true,
             "requires": {
                 "tinyspy": "^2.1.1"
             }
         },
         "@vitest/utils": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.1.tgz",
-            "integrity": "sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.2.tgz",
+            "integrity": "sha512-Lzw+kAsTPubhoQDp1uVAOP6DhNia1GMDsI9jgB0yMn+/nDaPieYQ88lKqz/gGjSHL4zwOItvpehec9OY+rS73w==",
             "dev": true,
             "requires": {
                 "diff-sequences": "^29.4.3",
@@ -15232,9 +15277,9 @@
             }
         },
         "happy-dom": {
-            "version": "10.5.2",
-            "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.5.2.tgz",
-            "integrity": "sha512-dTA1cDcLOPIkAdykLd9Wo1k8Ly36Hh2OdKGkWEHWuAHb89KcVVRLSj1OFev7ir90xhRLSGCGrEdDvS6u9l13kg==",
+            "version": "10.10.4",
+            "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.10.4.tgz",
+            "integrity": "sha512-aEEFGSSs4DEJbxXvSMsIvJvvdsZbJZQEgtHsU4GgwNKbSbFxtgu6vXHmn4XoXnuElIbXV0xhbJiiQTxPnTmJcw==",
             "dev": true,
             "requires": {
                 "css.escape": "^1.5.1",
@@ -19187,9 +19232,9 @@
             "peer": true
         },
         "prettier": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz",
-            "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==",
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz",
+            "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==",
             "dev": true
         },
         "pretty-format": {
@@ -19629,9 +19674,9 @@
             }
         },
         "semantic-release": {
-            "version": "21.0.7",
-            "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz",
-            "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==",
+            "version": "21.0.9",
+            "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.9.tgz",
+            "integrity": "sha512-EnylO0+UcKbVFaHeMbCjJpxqpgJPnze4zoOwmj34Kv4GnuyTV9MkNKrwmdZPFbmom9PpMj+9JN/8eyZzKkKyZQ==",
             "dev": true,
             "requires": {
                 "@semantic-release/commit-analyzer": "^10.0.0",
@@ -19643,13 +19688,13 @@
                 "cosmiconfig": "^8.0.0",
                 "debug": "^4.0.0",
                 "env-ci": "^9.0.0",
-                "execa": "^7.0.0",
+                "execa": "^8.0.0",
                 "figures": "^5.0.0",
                 "find-versions": "^5.1.0",
                 "get-stream": "^6.0.0",
                 "git-log-parser": "^1.2.0",
                 "hook-std": "^3.0.0",
-                "hosted-git-info": "^6.0.0",
+                "hosted-git-info": "^7.0.0",
                 "lodash-es": "^4.17.21",
                 "marked": "^5.0.0",
                 "marked-terminal": "^5.1.1",
@@ -19701,43 +19746,51 @@
                     "dev": true
                 },
                 "execa": {
-                    "version": "7.1.1",
-                    "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
-                    "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
+                    "version": "8.0.1",
+                    "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+                    "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
                     "dev": true,
                     "requires": {
                         "cross-spawn": "^7.0.3",
-                        "get-stream": "^6.0.1",
-                        "human-signals": "^4.3.0",
+                        "get-stream": "^8.0.1",
+                        "human-signals": "^5.0.0",
                         "is-stream": "^3.0.0",
                         "merge-stream": "^2.0.0",
                         "npm-run-path": "^5.1.0",
                         "onetime": "^6.0.0",
-                        "signal-exit": "^3.0.7",
+                        "signal-exit": "^4.1.0",
                         "strip-final-newline": "^3.0.0"
+                    },
+                    "dependencies": {
+                        "get-stream": {
+                            "version": "8.0.1",
+                            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+                            "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+                            "dev": true
+                        }
                     }
                 },
                 "hosted-git-info": {
-                    "version": "6.1.1",
-                    "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz",
-                    "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==",
+                    "version": "7.0.0",
+                    "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.0.tgz",
+                    "integrity": "sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA==",
                     "dev": true,
                     "requires": {
-                        "lru-cache": "^7.5.1"
+                        "lru-cache": "^10.0.1"
                     },
                     "dependencies": {
                         "lru-cache": {
-                            "version": "7.18.3",
-                            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
-                            "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+                            "version": "10.0.1",
+                            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
+                            "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
                             "dev": true
                         }
                     }
                 },
                 "human-signals": {
-                    "version": "4.3.1",
-                    "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
-                    "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+                    "version": "5.0.0",
+                    "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+                    "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
                     "dev": true
                 },
                 "indent-string": {
@@ -19765,9 +19818,9 @@
                     "dev": true
                 },
                 "marked": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.0.tgz",
-                    "integrity": "sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ==",
+                    "version": "5.1.2",
+                    "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz",
+                    "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==",
                     "dev": true
                 },
                 "mimic-fn": {
@@ -19786,6 +19839,23 @@
                         "is-core-module": "^2.8.1",
                         "semver": "^7.3.5",
                         "validate-npm-package-license": "^3.0.4"
+                    },
+                    "dependencies": {
+                        "hosted-git-info": {
+                            "version": "6.1.1",
+                            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz",
+                            "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==",
+                            "dev": true,
+                            "requires": {
+                                "lru-cache": "^7.5.1"
+                            }
+                        },
+                        "lru-cache": {
+                            "version": "7.18.3",
+                            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+                            "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+                            "dev": true
+                        }
                     }
                 },
                 "npm-run-path": {
@@ -19855,14 +19925,20 @@
                     }
                 },
                 "semver": {
-                    "version": "7.5.3",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
-                    "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
+                    "version": "7.5.4",
+                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+                    "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
                     "dev": true,
                     "requires": {
                         "lru-cache": "^6.0.0"
                     }
                 },
+                "signal-exit": {
+                    "version": "4.1.0",
+                    "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+                    "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+                    "dev": true
+                },
                 "strip-final-newline": {
                     "version": "3.0.0",
                     "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
@@ -19870,9 +19946,9 @@
                     "dev": true
                 },
                 "type-fest": {
-                    "version": "3.12.0",
-                    "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz",
-                    "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==",
+                    "version": "3.13.1",
+                    "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+                    "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
                     "dev": true
                 },
                 "yargs": {
@@ -20626,9 +20702,9 @@
             }
         },
         "vite-node": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.1.tgz",
-            "integrity": "sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.2.tgz",
+            "integrity": "sha512-JtW249Zm3FB+F7pQfH56uWSdlltCo1IOkZW5oHBzeQo0iX4jtC7o1t9aILMGd9kVekXBP2lfJBEQt9rBh07ebA==",
             "dev": true,
             "requires": {
                 "cac": "^6.7.14",
@@ -20640,19 +20716,19 @@
             }
         },
         "vitest": {
-            "version": "0.34.1",
-            "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.1.tgz",
-            "integrity": "sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==",
+            "version": "0.34.2",
+            "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.2.tgz",
+            "integrity": "sha512-WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBxQ==",
             "dev": true,
             "requires": {
                 "@types/chai": "^4.3.5",
                 "@types/chai-subset": "^1.3.3",
                 "@types/node": "*",
-                "@vitest/expect": "0.34.1",
-                "@vitest/runner": "0.34.1",
-                "@vitest/snapshot": "0.34.1",
-                "@vitest/spy": "0.34.1",
-                "@vitest/utils": "0.34.1",
+                "@vitest/expect": "0.34.2",
+                "@vitest/runner": "0.34.2",
+                "@vitest/snapshot": "0.34.2",
+                "@vitest/spy": "0.34.2",
+                "@vitest/utils": "0.34.2",
                 "acorn": "^8.9.0",
                 "acorn-walk": "^8.2.0",
                 "cac": "^6.7.14",
@@ -20667,7 +20743,7 @@
                 "tinybench": "^2.5.0",
                 "tinypool": "^0.7.0",
                 "vite": "^3.0.0 || ^4.0.0",
-                "vite-node": "0.34.1",
+                "vite-node": "0.34.2",
                 "why-is-node-running": "^2.2.2"
             }
         },
diff --git a/package.json b/package.json
index 48055b1c..21dbc084 100644
--- a/package.json
+++ b/package.json
@@ -54,20 +54,20 @@
         "@semantic-release/git": "10.0.1",
         "@testing-library/react": "14.0.0",
         "@tsconfig/recommended": "1.0.2",
-        "@types/react": "18.2.18",
-        "@vitest/coverage-v8": "0.34.1",
+        "@types/react": "18.2.20",
+        "@vitest/coverage-v8": "0.34.2",
         "firebase": "9.11.0",
-        "happy-dom": "10.5.2",
+        "happy-dom": "10.10.4",
         "husky": "8.0.3",
         "lint-staged": "14.0.0",
-        "prettier": "3.0.0",
+        "prettier": "3.0.2",
         "react": "18.2.0",
         "react-test-renderer": "18.2.0",
         "rimraf": "5.0.1",
-        "semantic-release": "21.0.7",
+        "semantic-release": "21.0.9",
         "typedoc": "0.24.8",
         "typescript": "5.1.6",
-        "vitest": "0.34.1"
+        "vitest": "0.34.2"
     },
     "scripts": {
         "prepublishOnly": "npm run build",