You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2025/02/07 22:45:22 UTC

(superset) 02/05: more touchups...

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch replace-jest-enzyme
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 8db036382d1aea1f35e34a627ca1d8bae58f0b14
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Fri Feb 7 12:36:33 2025 -0700

    more touchups...
---
 superset-frontend/package-lock.json                | 3571 ++------------------
 superset-frontend/package.json                     |    5 +-
 .../test/chart/components/SuperChartCore.test.tsx  |   21 +-
 superset-frontend/spec/helpers/setup.ts            |    9 +-
 superset-frontend/spec/helpers/shim.tsx            |    2 +-
 .../SqlLab/components/ResultSet/ResultSet.test.tsx |   34 +-
 .../components/TableElement/TableElement.test.tsx  |    2 +-
 .../src/components/AuditInfo/ModifiedInfo.test.tsx |    2 +-
 .../src/components/Card/Card.test.tsx              |   13 +-
 .../Chart/DrillBy/DrillByMenuItems.test.tsx        |   56 +-
 .../DrillDetail/DrillDetailMenuItems.test.tsx      |  149 +-
 .../Chart/DrillDetail/DrillDetailPane.test.tsx     |   68 +-
 .../src/components/GridTable/HeaderMenu.test.tsx   |    2 +-
 .../src/components/ListView/ListView.test.jsx      |   14 +-
 .../src/components/Pagination/Wrapper.test.tsx     |   19 +-
 .../src/components/Select/AsyncSelect.test.tsx     |   24 +-
 .../src/components/Table/utils/utils.test.ts       |   15 +-
 .../TableSelector/TableSelector.test.tsx           |  108 +-
 .../src/dashboard/components/Dashboard.test.jsx    |    2 +-
 .../src/dashboard/components/SliceAdder.test.tsx   |    2 +-
 .../SliceHeaderControls.test.tsx                   |    2 +-
 .../components/dnd/DragDroppable.test.jsx          |    4 +-
 .../components/filterscope/FilterScope.test.tsx    |   53 +-
 .../components/gridComponents/Column.test.jsx      |    4 +-
 .../components/gridComponents/Header.test.jsx      |   20 +-
 .../components/gridComponents/Markdown.test.jsx    |   28 +-
 .../components/gridComponents/Row.test.jsx         |    4 +-
 .../components/gridComponents/Tab.test.jsx         |    2 +-
 .../new/DraggableNewComponent.test.jsx             |    4 +-
 .../components/gridComponents/new/NewTabs.test.jsx |   13 +-
 .../CrossFilters/CrossFilterTitle.test.tsx         |   35 +-
 .../FilterBarSettings/FilterBarSettings.test.tsx   |   40 +-
 .../FilterConfigurationLink.test.tsx               |   13 +-
 .../FilterScope/FilterScope.test.tsx               |  111 +-
 .../FiltersConfigModal/FiltersConfigModal.test.tsx |   46 +-
 .../DataTablesPane/test/DataTablesPane.test.tsx    |    2 +-
 .../DatasourcePanel/DatasourcePanel.test.tsx       |  103 +-
 .../ExploreChartHeader/ExploreChartHeader.test.tsx |   19 +-
 .../PropertiesModal/PropertiesModal.test.tsx       |   76 +-
 .../AdhocFilterControl/AdhocFilterControl.test.jsx |    2 +-
 .../AdhocFilterEditPopover.test.jsx                |   22 +-
 .../AdhocFilterEditPopoverSqlTabContent.test.tsx   |   20 +-
 .../utils/useDatePickerInAdhocfilter.test.ts       |   19 +-
 .../AdhocMetricEditPopover.test.jsx                |   25 +-
 .../MetricControl/FilterDefinitionOption.test.jsx  |   21 +-
 .../controls/MetricControl/MetricsControl.test.jsx |   18 +-
 .../OptionControls/OptionControls.test.tsx         |   24 +-
 .../VizTypeControl/VizTypeControl.test.jsx         |   59 +-
 .../VizTypeControl/VizTypeControl.test.tsx         |   39 +-
 .../exploreUtils/getSimpleSQLExpression.test.ts    |    8 +
 .../annotationLayers/AnnotationLayerModal.test.jsx |    8 +-
 .../features/annotations/AnnotationModal.test.jsx  |    8 +-
 .../cssTemplates/CssTemplateModal.test.jsx         |    8 +-
 .../EditDataset/UsageTab/UsageTab.test.tsx         |   65 +-
 .../src/features/home/DashboardTable.test.tsx      |    8 +-
 .../src/features/home/EmptyState.test.tsx          |    4 +-
 superset-frontend/src/features/home/Menu.test.tsx  |    4 +-
 .../src/features/home/RightMenu.test.tsx           |    2 +-
 .../src/features/home/SavedQueries.test.tsx        |    6 +-
 .../features/queries/QueryPreviewModal.test.tsx    |    2 +-
 .../queries/SavedQueryPreviewModal.test.jsx        |    4 +-
 .../features/rls/RowLevelSecurityModal.test.tsx    |   42 +-
 .../pages/AlertReportList/AlertReportList.test.jsx |    6 +-
 .../AnnotationLayerList.test.jsx                   |   10 +-
 .../pages/AnnotationList/AnnotationList.test.jsx   |    8 +-
 .../src/pages/ChartList/ChartList.test.jsx         |   22 +-
 .../pages/CssTemplateList/CssTemplateList.test.jsx |   10 +-
 .../src/pages/DashboardList/DashboardList.test.jsx |   26 +-
 .../src/pages/DatabaseList/DatabaseList.test.jsx   |   10 +-
 .../src/pages/DatasetList/DatasetList.test.tsx     |    6 +-
 .../ExecutionLogList/ExecutionLogList.test.jsx     |    4 +-
 superset-frontend/src/pages/Home/Home.test.tsx     |   14 +-
 .../QueryHistoryList/QueryHistoryList.test.tsx     |   10 +-
 .../pages/SavedQueryList/SavedQueryList.test.jsx   |    8 +-
 74 files changed, 1285 insertions(+), 3964 deletions(-)

diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index 0d1373ae04..e8b3702515 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -186,7 +186,7 @@
         "@storybook/react-webpack5": "8.1.11",
         "@svgr/webpack": "^8.1.0",
         "@testing-library/dom": "^8.20.1",
-        "@testing-library/jest-dom": "^6.5.0",
+        "@testing-library/jest-dom": "^6.6.3",
         "@testing-library/react": "^12.1.5",
         "@testing-library/react-hooks": "^8.0.1",
         "@testing-library/user-event": "^12.8.3",
@@ -234,6 +234,7 @@
         "css-loader": "^7.1.2",
         "css-minimizer-webpack-plugin": "^7.0.0",
         "enzyme": "^3.11.0",
+        "enzyme-matchers": "^7.1.2",
         "esbuild": "^0.20.0",
         "esbuild-loader": "^4.2.2",
         "eslint": "^8.56.0",
@@ -264,9 +265,7 @@
         "ignore-styles": "^5.0.1",
         "imports-loader": "^5.0.0",
         "jest": "^29.7.0",
-        "jest-environment-enzyme": "^7.1.2",
         "jest-environment-jsdom": "^29.7.0",
-        "jest-enzyme": "^7.1.2",
         "jest-html-reporter": "^3.10.2",
         "jest-websocket-mock": "^2.5.0",
         "jsdom": "^26.0.0",
@@ -3312,23 +3311,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@cnakazawa/watch": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
-      "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "exec-sh": "^0.3.2",
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "watch": "cli.js"
-      },
-      "engines": {
-        "node": ">=0.1.95"
-      }
-    },
     "node_modules/@colors/colors": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -14411,40 +14393,6 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/acorn-globals": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
-      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "acorn": "^6.0.1",
-        "acorn-walk": "^6.0.1"
-      }
-    },
-    "node_modules/acorn-globals/node_modules/acorn": {
-      "version": "6.4.2",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
-      "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-globals/node_modules/acorn-walk": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
-      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/acorn-jsx": {
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -15456,36 +15404,6 @@
         "deep-equal": "^2.0.5"
       }
     },
-    "node_modules/arr-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-      "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/arr-union": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-      "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/array-buffer-byte-length": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
@@ -15512,16 +15430,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/array-equal": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.2.tgz",
-      "integrity": "sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/array-flatten": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -15572,16 +15480,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/array.prototype.filter": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz",
@@ -15759,6 +15657,7 @@
       "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "safer-buffer": "~2.1.0"
       }
@@ -15782,20 +15681,11 @@
       "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=0.8"
       }
     },
-    "node_modules/assign-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/ast-types": {
       "version": "0.13.4",
       "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
@@ -15842,13 +15732,6 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/async-limiter": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
-      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/async-validator": {
       "version": "3.5.2",
       "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.2.tgz",
@@ -15927,6 +15810,7 @@
       "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
       "dev": true,
       "license": "Apache-2.0",
+      "peer": true,
       "engines": {
         "node": "*"
       }
@@ -15936,7 +15820,8 @@
       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
       "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/axe-core": {
       "version": "4.10.2",
@@ -16525,38 +16410,6 @@
         }
       }
     },
-    "node_modules/base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-      "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/base16": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz",
@@ -16616,6 +16469,7 @@
       "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
       "dev": true,
       "license": "BSD-3-Clause",
+      "peer": true,
       "dependencies": {
         "tweetnacl": "^0.14.3"
       }
@@ -16751,17 +16605,6 @@
         "url": "https://bevry.me/fund"
       }
     },
-    "node_modules/bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
-      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
     "node_modules/bl": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
@@ -17012,13 +16855,6 @@
       "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
       "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ=="
     },
-    "node_modules/browser-process-hrtime": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
-      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
-      "dev": true,
-      "license": "BSD-2-Clause"
-    },
     "node_modules/browserify-zlib": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
@@ -17282,27 +17118,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "collection-visit": "^1.0.0",
-        "component-emitter": "^1.2.1",
-        "get-value": "^2.0.6",
-        "has-value": "^1.0.0",
-        "isobject": "^3.0.1",
-        "set-value": "^2.0.0",
-        "to-object-path": "^0.3.0",
-        "union-value": "^1.0.0",
-        "unset-value": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/cacheable-lookup": {
       "version": "5.0.4",
       "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -17587,19 +17402,6 @@
       "license": "MIT",
       "optional": true
     },
-    "node_modules/capture-exit": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
-      "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "rsvp": "^4.8.4"
-      },
-      "engines": {
-        "node": "6.* || 8.* || >= 10.*"
-      }
-    },
     "node_modules/case-sensitive-paths-webpack-plugin": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -17615,7 +17417,8 @@
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
       "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
       "dev": true,
-      "license": "Apache-2.0"
+      "license": "Apache-2.0",
+      "peer": true
     },
     "node_modules/ccount": {
       "version": "2.0.1",
@@ -18011,49 +17814,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "arr-union": "^3.1.0",
-        "define-property": "^0.2.5",
-        "isobject": "^3.0.0",
-        "static-extend": "^0.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/class-utils/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/class-utils/node_modules/is-descriptor": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
-      "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.1",
-        "is-data-descriptor": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/classnames": {
       "version": "2.5.1",
       "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
@@ -18296,20 +18056,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "map-visit": "^1.0.0",
-        "object-visit": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/color": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -18477,16 +18223,6 @@
         "dot-prop": "^5.1.0"
       }
     },
-    "node_modules/component-emitter": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
-      "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/compressible": {
       "version": "2.0.18",
       "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -18911,16 +18647,6 @@
         "url": "https://github.com/sponsors/mesqueeb"
       }
     },
-    "node_modules/copy-descriptor": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/copy-to-clipboard": {
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
@@ -19517,13 +19243,6 @@
       "dev": true,
       "license": "CC0-1.0"
     },
-    "node_modules/cssom": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/cssstyle": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz",
@@ -20048,6 +19767,7 @@
       "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "assert-plus": "^1.0.0"
       },
@@ -20397,6 +20117,7 @@
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-3.0.4.tgz",
       "integrity": "sha512-Bsu5fP9Omd+HBk2Dz8qp4BHbC+83DBykZ87Lz1JmPKTVNy4Q0XQVtUrbfXVAK/udQrWNcGStcKSA9yj/Zkm3TQ==",
+      "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -20580,20 +20301,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^1.0.2",
-        "isobject": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/defu": {
       "version": "6.1.4",
       "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
@@ -20946,24 +20653,6 @@
       ],
       "license": "BSD-2-Clause"
     },
-    "node_modules/domexception": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
-      "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
-      "deprecated": "Use your platform's native DOMException instead",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "webidl-conversions": "^4.0.2"
-      }
-    },
-    "node_modules/domexception/node_modules/webidl-conversions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-      "dev": true,
-      "license": "BSD-2-Clause"
-    },
     "node_modules/domhandler": {
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
@@ -21185,6 +20874,7 @@
       "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "jsbn": "~0.1.0",
         "safer-buffer": "^2.1.0"
@@ -21195,7 +20885,8 @@
       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
       "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/ecdsa-sig-formatter": {
       "version": "1.0.11",
@@ -21578,6 +21269,8 @@
       "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/cheerio": "^0.22.22",
         "lodash": "^4.17.21",
@@ -21595,7 +21288,9 @@
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
       "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "peer": true
     },
     "node_modules/err-code": {
       "version": "2.0.3",
@@ -23441,13 +23136,6 @@
         "node": ">=0.8.x"
       }
     },
-    "node_modules/exec-sh": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz",
-      "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/execa": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -23494,92 +23182,6 @@
         "node": ">= 0.8.0"
       }
     },
-    "node_modules/expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^2.3.3",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "posix-character-classes": "^0.1.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/is-descriptor": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
-      "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.1",
-        "is-data-descriptor": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/expect": {
       "version": "29.7.0",
       "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
@@ -23720,20 +23322,6 @@
       "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
       "license": "MIT"
     },
-    "node_modules/extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "assign-symbols": "^1.0.0",
-        "is-extendable": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/external-editor": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -23772,62 +23360,6 @@
         "node": ">=0.6.0"
       }
     },
-    "node_modules/extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-unique": "^0.3.2",
-        "define-property": "^1.0.0",
-        "expand-brackets": "^2.1.4",
-        "extend-shallow": "^2.0.1",
-        "fragment-cache": "^0.2.1",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-      "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/extract-zip": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@@ -23873,7 +23405,8 @@
       "engines": [
         "node >=0.6.0"
       ],
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/falafel": {
       "version": "2.2.5",
@@ -24326,14 +23859,6 @@
         "url": "https://github.com/sindresorhus/file-type?sponsor=1"
       }
     },
-    "node_modules/file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/filelist": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
@@ -24733,16 +24258,6 @@
         "is-callable": "^1.1.3"
       }
     },
-    "node_modules/for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/foreground-child": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
@@ -24777,6 +24292,7 @@
       "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
       "dev": true,
       "license": "Apache-2.0",
+      "peer": true,
       "engines": {
         "node": "*"
       }
@@ -24941,19 +24457,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "map-cache": "^0.2.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/fresh": {
       "version": "0.5.2",
       "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -25939,16 +25442,6 @@
         "node": ">= 14"
       }
     },
-    "node_modules/get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/getos": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
@@ -25966,6 +25459,7 @@
       "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "assert-plus": "^1.0.0"
       }
@@ -26621,55 +26115,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/har-validator": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
-      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
-      "deprecated": "this library is no longer supported",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ajv": "^6.12.3",
-        "har-schema": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/har-validator/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/har-validator/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/hard-rejection": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
@@ -26781,81 +26226,6 @@
       "dev": true,
       "license": "ISC"
     },
-    "node_modules/has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/has-values/node_modules/is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values/node_modules/kind-of": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-      "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/hasha": {
       "version": "5.2.2",
       "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
@@ -28388,19 +27758,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-accessor-descriptor": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
-      "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.0"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
     "node_modules/is-alphabetical": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
@@ -28629,19 +27986,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-data-descriptor": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
-      "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/is-data-view": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
@@ -28692,20 +28036,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/is-descriptor": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
-      "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.1",
-        "is-data-descriptor": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/is-docker": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -28721,19 +28051,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-extendable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-      "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-plain-object": "^2.0.4"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/is-extglob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -29149,7 +28466,8 @@
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
       "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/is-unicode-supported": {
       "version": "2.1.0",
@@ -29225,6 +28543,7 @@
       "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -29286,7 +28605,8 @@
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
       "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/istanbul-lib-coverage": {
       "version": "3.2.2",
@@ -29651,1415 +28971,347 @@
       }
     },
     "node_modules/jest-circus/node_modules/pretty-format": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
-      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/jest-circus/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-cli": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
-      "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/core": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "create-jest": "^29.7.0",
-        "exit": "^0.1.2",
-        "import-local": "^3.0.2",
-        "jest-config": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "yargs": "^17.3.1"
-      },
-      "bin": {
-        "jest": "bin/jest.js"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
-      },
-      "peerDependenciesMeta": {
-        "node-notifier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-cli/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/jest-config": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
-      "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/core": "^7.11.6",
-        "@jest/test-sequencer": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "babel-jest": "^29.7.0",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "deepmerge": "^4.2.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-circus": "^29.7.0",
-        "jest-environment-node": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "jest-regex-util": "^29.6.3",
-        "jest-resolve": "^29.7.0",
-        "jest-runner": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "parse-json": "^5.2.0",
-        "pretty-format": "^29.7.0",
-        "slash": "^3.0.0",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "@types/node": "*",
-        "ts-node": ">=9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        },
-        "ts-node": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-config/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/jest-config/node_modules/ci-info": {
-      "version": "3.9.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
-      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/sibiraj-s"
-        }
-      ],
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-config/node_modules/pretty-format": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
-      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/jest-config/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-diff": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
-      "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "chalk": "^4.0.0",
-        "diff-sequences": "^29.6.3",
-        "jest-get-type": "^29.6.3",
-        "pretty-format": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-diff/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/jest-diff/node_modules/pretty-format": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
-      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/jest-docblock": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
-      "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "detect-newline": "^3.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-each": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
-      "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^29.6.3",
-        "jest-util": "^29.7.0",
-        "pretty-format": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-each/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/jest-each/node_modules/pretty-format": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
-      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/jest-environment-enzyme": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/jest-environment-enzyme/-/jest-environment-enzyme-7.1.2.tgz",
-      "integrity": "sha512-3tfaYAzO7qZSRrv+srQnfK16Vu5XwH/pHi8FpoqSHjKKngbHzXf7aBCBuWh8y3w0OtknHRfDMFrC60Khj+g1hA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "jest-environment-jsdom": "^24.0.0"
-      },
-      "peerDependencies": {
-        "enzyme": "3.x",
-        "jest": ">=22.0.0",
-        "react": "^0.13.0 || ^0.14.0 || ^15.0.0 || >=16.x"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@jest/console": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
-      "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/source-map": "^24.9.0",
-        "chalk": "^2.0.1",
-        "slash": "^2.0.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@jest/environment": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
-      "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@jest/fake-timers": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
-      "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/types": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-mock": "^24.9.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@jest/source-map": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
-      "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "callsites": "^3.0.0",
-        "graceful-fs": "^4.1.15",
-        "source-map": "^0.6.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@jest/test-result": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
-      "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/console": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/istanbul-lib-coverage": "^2.0.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@jest/transform": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
-      "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/core": "^7.1.0",
-        "@jest/types": "^24.9.0",
-        "babel-plugin-istanbul": "^5.1.0",
-        "chalk": "^2.0.1",
-        "convert-source-map": "^1.4.0",
-        "fast-json-stable-stringify": "^2.0.0",
-        "graceful-fs": "^4.1.15",
-        "jest-haste-map": "^24.9.0",
-        "jest-regex-util": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "pirates": "^4.0.1",
-        "realpath-native": "^1.1.0",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.1",
-        "write-file-atomic": "2.4.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@jest/types": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
-      "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^1.1.1",
-        "@types/yargs": "^13.0.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@types/istanbul-reports": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
-      "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/istanbul-lib-coverage": "*",
-        "@types/istanbul-lib-report": "*"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@types/stack-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
-      "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/@types/yargs": {
-      "version": "13.0.12",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz",
-      "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/yargs-parser": "*"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/acorn": {
-      "version": "5.7.4",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
-      "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/babel-plugin-istanbul": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
-      "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "find-up": "^3.0.0",
-        "istanbul-lib-instrument": "^3.3.0",
-        "test-exclude": "^5.2.3"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/braces/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/ci-info": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/convert-source-map": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/cssstyle": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
-      "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "cssom": "0.3.x"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/data-urls": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
-      "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "abab": "^2.0.0",
-        "whatwg-mimetype": "^2.2.0",
-        "whatwg-url": "^7.0.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/data-urls/node_modules/whatwg-url": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-      "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "lodash.sortby": "^4.7.0",
-        "tr46": "^1.0.1",
-        "webidl-conversions": "^4.0.2"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/escodegen": {
-      "version": "1.14.3",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
-      "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esprima": "^4.0.1",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1"
-      },
-      "bin": {
-        "escodegen": "bin/escodegen.js",
-        "esgenerate": "bin/esgenerate.js"
-      },
-      "engines": {
-        "node": ">=4.0"
-      },
-      "optionalDependencies": {
-        "source-map": "~0.6.1"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-      "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/fill-range/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/find-up": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "locate-path": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/fsevents": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
-      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
-      "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "dependencies": {
-        "bindings": "^1.5.0",
-        "nan": "^2.12.1"
-      },
-      "engines": {
-        "node": ">= 4.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/html-encoding-sniffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
-      "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "whatwg-encoding": "^1.0.1"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/is-ci": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ci-info": "^2.0.0"
-      },
-      "bin": {
-        "is-ci": "bin.js"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/is-number/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/istanbul-lib-coverage": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
-      "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/istanbul-lib-instrument": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
-      "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "@babel/generator": "^7.4.0",
-        "@babel/parser": "^7.4.3",
-        "@babel/template": "^7.4.0",
-        "@babel/traverse": "^7.4.3",
-        "@babel/types": "^7.4.0",
-        "istanbul-lib-coverage": "^2.0.5",
-        "semver": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-environment-jsdom": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
-      "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/environment": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jsdom": "^11.5.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-haste-map": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
-      "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/types": "^24.9.0",
-        "anymatch": "^2.0.0",
-        "fb-watchman": "^2.0.0",
-        "graceful-fs": "^4.1.15",
-        "invariant": "^2.2.4",
-        "jest-serializer": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-worker": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "sane": "^4.0.3",
-        "walker": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 6"
-      },
-      "optionalDependencies": {
-        "fsevents": "^1.2.7"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-message-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
-      "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/code-frame": "^7.0.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/stack-utils": "^1.0.1",
-        "chalk": "^2.0.1",
-        "micromatch": "^3.1.10",
-        "slash": "^2.0.0",
-        "stack-utils": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-mock": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
-      "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/types": "^24.9.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-regex-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
-      "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
-      "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/console": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/source-map": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "callsites": "^3.0.0",
-        "chalk": "^2.0.1",
-        "graceful-fs": "^4.1.15",
-        "is-ci": "^2.0.0",
-        "mkdirp": "^0.5.1",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-worker": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
-      "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "merge-stream": "^2.0.0",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jest-worker/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/jsdom": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
-      "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "abab": "^2.0.0",
-        "acorn": "^5.5.3",
-        "acorn-globals": "^4.1.0",
-        "array-equal": "^1.0.0",
-        "cssom": ">= 0.3.2 < 0.4.0",
-        "cssstyle": "^1.0.0",
-        "data-urls": "^1.0.0",
-        "domexception": "^1.0.1",
-        "escodegen": "^1.9.1",
-        "html-encoding-sniffer": "^1.0.2",
-        "left-pad": "^1.3.0",
-        "nwsapi": "^2.0.7",
-        "parse5": "4.0.0",
-        "pn": "^1.1.0",
-        "request": "^2.87.0",
-        "request-promise-native": "^1.0.5",
-        "sax": "^1.2.4",
-        "symbol-tree": "^3.2.2",
-        "tough-cookie": "^2.3.4",
-        "w3c-hr-time": "^1.0.1",
-        "webidl-conversions": "^4.0.2",
-        "whatwg-encoding": "^1.0.3",
-        "whatwg-mimetype": "^2.1.0",
-        "whatwg-url": "^6.4.1",
-        "ws": "^5.2.0",
-        "xml-name-validator": "^3.0.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/locate-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "p-locate": "^3.0.0",
-        "path-exists": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "braces": "^2.3.1",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "extglob": "^2.0.4",
-        "fragment-cache": "^0.2.1",
-        "kind-of": "^6.0.2",
-        "nanomatch": "^1.2.9",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.2"
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
       },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+    "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "minimist": "^1.2.6"
+      "engines": {
+        "node": ">=10"
       },
-      "bin": {
-        "mkdirp": "bin/cmd.js"
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+    "node_modules/jest-circus/node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "remove-trailing-separator": "^1.0.1"
-      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=8"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/optionator": {
-      "version": "0.8.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+    "node_modules/jest-cli": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+      "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.6",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "word-wrap": "~1.2.3"
+        "@jest/core": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "chalk": "^4.0.0",
+        "create-jest": "^29.7.0",
+        "exit": "^0.1.2",
+        "import-local": "^3.0.2",
+        "jest-config": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "yargs": "^17.3.1"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
       },
       "engines": {
-        "node": ">= 0.8.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+    "node_modules/jest-cli/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "p-try": "^2.0.0"
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
       },
       "engines": {
-        "node": ">=6"
+        "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/p-locate": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+    "node_modules/jest-config": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+      "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "p-limit": "^2.0.0"
+        "@babel/core": "^7.11.6",
+        "@jest/test-sequencer": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "babel-jest": "^29.7.0",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "deepmerge": "^4.2.2",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-circus": "^29.7.0",
+        "jest-environment-node": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-runner": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "parse-json": "^5.2.0",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": ">=6"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "@types/node": "*",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/parse5": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
-      "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+    "node_modules/jest-config/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
       "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+    "node_modules/jest-config/node_modules/ci-info": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/sibiraj-s"
+        }
+      ],
       "license": "MIT",
       "engines": {
-        "node": ">=6"
+        "node": ">=8"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/read-pkg-up": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
-      "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+    "node_modules/jest-config/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "find-up": "^3.0.0",
-        "read-pkg": "^3.0.0"
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
       },
       "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest-environment-enzyme/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+    "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "MIT",
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/stack-utils": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz",
-      "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==",
+    "node_modules/jest-config/node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "escape-string-regexp": "^2.0.0"
-      },
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/stack-utils/node_modules/escape-string-regexp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
-      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+    "node_modules/jest-diff": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+      "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^29.6.3",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
       "engines": {
-        "node": ">=8"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+    "node_modules/jest-diff/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "has-flag": "^3.0.0"
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/test-exclude": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
-      "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+    "node_modules/jest-diff/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "glob": "^7.1.3",
-        "minimatch": "^3.0.4",
-        "read-pkg-up": "^4.0.0",
-        "require-main-filename": "^2.0.0"
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
       },
       "engines": {
-        "node": ">=6"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-      "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+    "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/tough-cookie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+    "node_modules/jest-docblock": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+      "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "MIT",
       "dependencies": {
-        "psl": "^1.1.28",
-        "punycode": "^2.1.1"
+        "detect-newline": "^3.0.0"
       },
       "engines": {
-        "node": ">=0.8"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+    "node_modules/jest-each": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+      "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "prelude-ls": "~1.1.2"
+        "@jest/types": "^29.6.3",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "pretty-format": "^29.7.0"
       },
       "engines": {
-        "node": ">= 0.8.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/webidl-conversions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-      "dev": true,
-      "license": "BSD-2-Clause"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/whatwg-encoding": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+    "node_modules/jest-each/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "iconv-lite": "0.4.24"
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/whatwg-mimetype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/jest-environment-enzyme/node_modules/write-file-atomic": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
-      "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
+    "node_modules/jest-each/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "graceful-fs": "^4.1.11",
-        "imurmurhash": "^0.1.4",
-        "signal-exit": "^3.0.2"
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/ws": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz",
-      "integrity": "sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==",
+    "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "async-limiter": "~1.0.0"
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/jest-environment-enzyme/node_modules/xml-name-validator": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-      "dev": true,
-      "license": "Apache-2.0"
-    },
     "node_modules/jest-environment-jsdom": {
       "version": "29.7.0",
       "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
@@ -31367,22 +29619,6 @@
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-enzyme": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/jest-enzyme/-/jest-enzyme-7.1.2.tgz",
-      "integrity": "sha512-j+jkph3t5hGBS12eOldpfsnERYRCHi4c/0KWPMnqRPoJJXvCpLIc5th1MHl0xDznQDXVU0AHUXg3rqMrf8vGpA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "enzyme-matchers": "^7.1.2",
-        "enzyme-to-json": "^3.3.0",
-        "jest-environment-enzyme": "^7.1.2"
-      },
-      "peerDependencies": {
-        "enzyme": ">=3.4.0",
-        "jest": ">=22.0.0"
-      }
-    },
     "node_modules/jest-get-type": {
       "version": "29.6.3",
       "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
@@ -31880,16 +30116,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/jest-serializer": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
-      "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/jest-snapshot": {
       "version": "29.7.0",
       "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
@@ -32872,14 +31098,6 @@
         "node": ">=14.0.0"
       }
     },
-    "node_modules/left-pad": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
-      "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
-      "deprecated": "use String.prototype.padStart()",
-      "dev": true,
-      "license": "WTFPL"
-    },
     "node_modules/lerc": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
@@ -34234,16 +32452,6 @@
         "tmpl": "1.0.5"
       }
     },
-    "node_modules/map-cache": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-      "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/map-obj": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
@@ -34263,19 +32471,6 @@
       "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==",
       "license": "MIT"
     },
-    "node_modules/map-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-      "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "object-visit": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/mapbox-gl": {
       "version": "2.15.0",
       "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-2.15.0.tgz",
@@ -36109,20 +34304,6 @@
       "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==",
       "license": "MIT"
     },
-    "node_modules/mixin-deep": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
-      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "for-in": "^1.0.2",
-        "is-extendable": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/mjolnir.js": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-3.0.0.tgz",
@@ -36323,14 +34504,6 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/nan": {
-      "version": "2.22.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz",
-      "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/nanoid": {
       "version": "5.0.9",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz",
@@ -36349,29 +34522,6 @@
         "node": "^18 || >=20"
       }
     },
-    "node_modules/nanomatch": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
-      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "fragment-cache": "^0.2.1",
-        "is-windows": "^1.0.2",
-        "kind-of": "^6.0.2",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/nanospinner": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.2.2.tgz",
@@ -36470,13 +34620,6 @@
         "node": ">= 0.4.0"
       }
     },
-    "node_modules/nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/nise": {
       "version": "6.1.1",
       "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz",
@@ -37680,16 +35823,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -37699,68 +35832,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-copy/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-copy/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/object-copy/node_modules/is-descriptor": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
-      "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.1",
-        "is-data-descriptor": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object-copy/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/object-inspect": {
       "version": "1.13.3",
       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
@@ -37798,19 +35869,6 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "isobject": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/object.assign": {
       "version": "4.1.7",
       "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
@@ -37902,19 +35960,6 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "isobject": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/object.values": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
@@ -38962,16 +37007,6 @@
         "tslib": "^2.0.3"
       }
     },
-    "node_modules/pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/path-browserify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -39251,13 +37286,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/pn": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/png-async": {
       "version": "0.9.4",
       "resolved": "https://registry.npmjs.org/png-async/-/png-async-0.9.4.tgz",
@@ -39293,16 +37321,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/possible-typed-array-names": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -42754,19 +40772,6 @@
         "node": ">= 12.13.0"
       }
     },
-    "node_modules/realpath-native": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
-      "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "util.promisify": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/recast": {
       "version": "0.23.9",
       "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
@@ -42993,20 +40998,6 @@
         "@babel/runtime": "^7.8.4"
       }
     },
-    "node_modules/regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "extend-shallow": "^3.0.2",
-        "safe-regex": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/regexp.prototype.flags": {
       "version": "1.5.4",
       "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
@@ -44277,26 +42268,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/repeat-element": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
-      "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
     "node_modules/replace-ext": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
@@ -44306,39 +42277,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/request": {
-      "version": "2.88.2",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-      "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "aws-sign2": "~0.7.0",
-        "aws4": "^1.8.0",
-        "caseless": "~0.12.0",
-        "combined-stream": "~1.0.6",
-        "extend": "~3.0.2",
-        "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "har-validator": "~5.1.3",
-        "http-signature": "~1.2.0",
-        "is-typedarray": "~1.0.0",
-        "isstream": "~0.1.2",
-        "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.19",
-        "oauth-sign": "~0.9.0",
-        "performance-now": "^2.1.0",
-        "qs": "~6.5.2",
-        "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.5.0",
-        "tunnel-agent": "^0.6.0",
-        "uuid": "^3.3.2"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/request-progress": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
@@ -44350,157 +42288,6 @@
         "throttleit": "^1.0.0"
       }
     },
-    "node_modules/request-promise-core": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
-      "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "lodash": "^4.17.19"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      },
-      "peerDependencies": {
-        "request": "^2.34"
-      }
-    },
-    "node_modules/request-promise-native": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
-      "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
-      "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "request-promise-core": "1.1.4",
-        "stealthy-require": "^1.1.1",
-        "tough-cookie": "^2.3.3"
-      },
-      "engines": {
-        "node": ">=0.12.0"
-      },
-      "peerDependencies": {
-        "request": "^2.34"
-      }
-    },
-    "node_modules/request-promise-native/node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/request-promise-native/node_modules/tough-cookie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "psl": "^1.1.28",
-        "punycode": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/request/node_modules/form-data": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.6",
-        "mime-types": "^2.1.12"
-      },
-      "engines": {
-        "node": ">= 0.12"
-      }
-    },
-    "node_modules/request/node_modules/http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      },
-      "engines": {
-        "node": ">=0.8",
-        "npm": ">=1.3.7"
-      }
-    },
-    "node_modules/request/node_modules/jsprim": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
-      "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.4.0",
-        "verror": "1.10.0"
-      },
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
-    "node_modules/request/node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/request/node_modules/qs": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
-      "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/request/node_modules/tough-cookie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "psl": "^1.1.28",
-        "punycode": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/request/node_modules/uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "uuid": "bin/uuid"
-      }
-    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -44524,7 +42311,8 @@
       "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
       "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
       "dev": true,
-      "license": "ISC"
+      "license": "ISC",
+      "peer": true
     },
     "node_modules/require-package-name": {
       "version": "2.0.1",
@@ -44636,14 +42424,6 @@
         "protocol-buffers-schema": "^3.3.1"
       }
     },
-    "node_modules/resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
-      "deprecated": "https://github.com/lydell/resolve-url#deprecated",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/resolve.exports": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
@@ -44863,16 +42643,6 @@
         "nearley": "^2.7.10"
       }
     },
-    "node_modules/rsvp": {
-      "version": "4.8.5",
-      "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
-      "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "6.* || >= 7.*"
-      }
-    },
     "node_modules/run-applescript": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
@@ -44999,16 +42769,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ret": "~0.1.10"
-      }
-    },
     "node_modules/safe-regex-test": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
@@ -45061,335 +42821,13 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
       "license": "MIT"
     },
-    "node_modules/sane": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
-      "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
-      "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cnakazawa/watch": "^1.0.3",
-        "anymatch": "^2.0.0",
-        "capture-exit": "^2.0.0",
-        "exec-sh": "^0.3.2",
-        "execa": "^1.0.0",
-        "fb-watchman": "^2.0.0",
-        "micromatch": "^3.1.4",
-        "minimist": "^1.1.1",
-        "walker": "~1.0.5"
-      },
-      "bin": {
-        "sane": "src/cli.js"
-      },
-      "engines": {
-        "node": "6.* || 8.* || >= 10.*"
-      }
-    },
-    "node_modules/sane/node_modules/anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      }
-    },
-    "node_modules/sane/node_modules/braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/braces/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/cross-spawn": {
-      "version": "6.0.6",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
-      "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      },
-      "engines": {
-        "node": ">=4.8"
-      }
-    },
-    "node_modules/sane/node_modules/execa": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "cross-spawn": "^6.0.0",
-        "get-stream": "^4.0.0",
-        "is-stream": "^1.1.0",
-        "npm-run-path": "^2.0.0",
-        "p-finally": "^1.0.0",
-        "signal-exit": "^3.0.0",
-        "strip-eof": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/sane/node_modules/fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-      "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/get-stream": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "pump": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/sane/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/sane/node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/is-number/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/is-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "braces": "^2.3.1",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "extglob": "^2.0.4",
-        "fragment-cache": "^0.2.1",
-        "kind-of": "^6.0.2",
-        "nanomatch": "^1.2.9",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "remove-trailing-separator": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "path-key": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/sane/node_modules/path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/sane/node_modules/semver": {
-      "version": "5.7.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/sane/node_modules/shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "shebang-regex": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-      "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sane/node_modules/which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "which": "bin/which"
-      }
-    },
     "node_modules/sax": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
       "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
       "dev": true,
-      "license": "ISC"
+      "license": "ISC",
+      "optional": true
     },
     "node_modules/saxes": {
       "version": "6.0.0",
@@ -45729,45 +43167,6 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/set-value": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "extend-shallow": "^2.0.1",
-        "is-extendable": "^0.1.1",
-        "is-plain-object": "^2.0.3",
-        "split-string": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/set-value/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/set-value/node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -46134,164 +43533,6 @@
         "tslib": "^2.0.3"
       }
     },
-    "node_modules/snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "base": "^0.11.1",
-        "debug": "^2.2.0",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "map-cache": "^0.2.2",
-        "source-map": "^0.5.6",
-        "source-map-resolve": "^0.5.0",
-        "use": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.0",
-        "snapdragon-util": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-      "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-util": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "kind-of": "^3.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-util/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/snapdragon-util/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/is-descriptor": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
-      "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.1",
-        "is-data-descriptor": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/snapdragon/node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/snapdragon/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/sockjs": {
       "version": "0.3.24",
       "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
@@ -46484,21 +43725,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/source-map-resolve": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
-      "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
-      "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0",
-        "resolve-url": "^0.2.1",
-        "source-map-url": "^0.4.0",
-        "urix": "^0.1.0"
-      }
-    },
     "node_modules/source-map-support": {
       "version": "0.5.21",
       "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -46520,14 +43746,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/source-map-url": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
-      "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
-      "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/space-separated-tokens": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
@@ -46747,19 +43965,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "extend-shallow": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/split.js": {
       "version": "1.6.5",
       "resolved": "https://registry.npmjs.org/split.js/-/split.js-1.6.5.tgz",
@@ -46788,6 +43993,7 @@
       "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "asn1": "~0.2.3",
         "assert-plus": "^1.0.0",
@@ -46813,7 +44019,8 @@
       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
       "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/ssri": {
       "version": "10.0.6",
@@ -46883,47 +44090,6 @@
         "escodegen": "^2.1.0"
       }
     },
-    "node_modules/static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-property": "^0.2.5",
-        "object-copy": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/static-extend/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/static-extend/node_modules/is-descriptor": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
-      "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.1",
-        "is-data-descriptor": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/static-module": {
       "version": "2.2.5",
       "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
@@ -47144,16 +44310,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/stealthy-require": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-      "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/stop-iteration-iterator": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
@@ -47500,16 +44656,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/strip-final-newline": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -48420,55 +45566,6 @@
       "dev": true,
       "license": "BSD-3-Clause"
     },
-    "node_modules/to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/to-object-path/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/to-object-path/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "regex-not": "^1.0.2",
-        "safe-regex": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -48951,6 +46048,7 @@
       "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
       "dev": true,
       "license": "Apache-2.0",
+      "peer": true,
       "dependencies": {
         "safe-buffer": "^5.0.1"
       },
@@ -48963,7 +46061,8 @@
       "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
       "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
       "dev": true,
-      "license": "Unlicense"
+      "license": "Unlicense",
+      "peer": true
     },
     "node_modules/type-check": {
       "version": "0.4.0",
@@ -49338,32 +46437,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/union-value": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "arr-union": "^3.1.0",
-        "get-value": "^2.0.6",
-        "is-extendable": "^0.1.1",
-        "set-value": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/union-value/node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/unique-filename": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
@@ -49593,65 +46666,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-value": "^0.3.1",
-        "isobject": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unset-value/node_modules/has-value": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-      "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "get-value": "^2.0.3",
-        "has-values": "^0.1.4",
-        "isobject": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-      "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "isarray": "1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unset-value/node_modules/has-values": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-      "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unset-value/node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/untildify": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
@@ -49730,14 +46744,6 @@
       "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
       "license": "MIT"
     },
-    "node_modules/urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
-      "deprecated": "Please see https://github.com/lydell/urix#deprecated",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/url": {
       "version": "0.11.4",
       "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
@@ -49776,16 +46782,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/use": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/use-callback-ref": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
@@ -49881,33 +46877,6 @@
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "license": "MIT"
     },
-    "node_modules/util.promisify": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.3.tgz",
-      "integrity": "sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-data-property": "^1.1.4",
-        "define-properties": "^1.2.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "for-each": "^0.3.3",
-        "get-intrinsic": "^1.2.6",
-        "has-proto": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "object.getownpropertydescriptors": "^2.1.8",
-        "safe-array-concat": "^1.1.3"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/utila": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
@@ -50087,6 +47056,7 @@
         "node >=0.6.0"
       ],
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "assert-plus": "^1.0.0",
         "core-util-is": "1.0.2",
@@ -50287,17 +47257,6 @@
         "pbf": "^3.2.1"
       }
     },
-    "node_modules/w3c-hr-time": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
-      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
-      "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "browser-process-hrtime": "^1.0.0"
-      }
-    },
     "node_modules/w3c-xmlserializer": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index cc9beb02af..a3dbc78926 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -253,7 +253,7 @@
     "@storybook/react-webpack5": "8.1.11",
     "@svgr/webpack": "^8.1.0",
     "@testing-library/dom": "^8.20.1",
-    "@testing-library/jest-dom": "^6.5.0",
+    "@testing-library/jest-dom": "^6.6.3",
     "@testing-library/react": "^12.1.5",
     "@testing-library/react-hooks": "^8.0.1",
     "@testing-library/user-event": "^12.8.3",
@@ -301,6 +301,7 @@
     "css-loader": "^7.1.2",
     "css-minimizer-webpack-plugin": "^7.0.0",
     "enzyme": "^3.11.0",
+    "enzyme-matchers": "^7.1.2",
     "esbuild": "^0.20.0",
     "esbuild-loader": "^4.2.2",
     "eslint": "^8.56.0",
@@ -331,9 +332,7 @@
     "ignore-styles": "^5.0.1",
     "imports-loader": "^5.0.0",
     "jest": "^29.7.0",
-    "jest-environment-enzyme": "^7.1.2",
     "jest-environment-jsdom": "^29.7.0",
-    "jest-enzyme": "^7.1.2",
     "jest-html-reporter": "^3.10.2",
     "jest-websocket-mock": "^2.5.0",
     "jsdom": "^26.0.0",
diff --git a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
index 956422f8f2..4756d0f782 100644
--- a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
+++ b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
@@ -26,6 +26,7 @@ import {
   supersetTheme,
   SupersetTheme,
   ThemeProvider,
+  cleanup,
 } from '@superset-ui/core';
 import SuperChartCore from '../../../src/chart/components/SuperChartCore';
 import {
@@ -53,7 +54,6 @@ const styledMount = (component: ReactElement) =>
 
 describe('SuperChartCore', () => {
   const chartProps = new ChartProps();
-
   const plugins = [
     new DiligentChartPlugin().configure({ key: ChartKeys.DILIGENT }),
     new LazyChartPlugin().configure({ key: ChartKeys.LAZY }),
@@ -63,6 +63,7 @@ describe('SuperChartCore', () => {
   let restoreConsole: RestoreConsole;
 
   beforeAll(() => {
+    jest.setTimeout(30000);
     plugins.forEach(p => {
       p.unregister().register();
     });
@@ -78,12 +79,15 @@ describe('SuperChartCore', () => {
     restoreConsole = mockConsole();
   });
 
-  afterEach(() => {
+  afterEach(async () => {
+    cleanup();
     restoreConsole();
+    // Wait for any pending effects to complete
+    await new Promise(resolve => setTimeout(resolve, 0));
   });
 
   describe('registered charts', () => {
-    it('renders registered chart', () => {
+    it('renders registered chart', async () => {
       const wrapper = styledMount(
         <SuperChartCore
           chartType={ChartKeys.DILIGENT}
@@ -91,19 +95,24 @@ describe('SuperChartCore', () => {
         />,
       );
 
-      return promiseTimeout(() => {
+      await promiseTimeout(() => {
         expect(wrapper.render().find('div.test-component')).toHaveLength(1);
       });
+      wrapper.unmount();
     });
-    it('renders registered chart with lazy loading', () => {
+
+    // Update other test cases similarly
+    it('renders registered chart with lazy loading', async () => {
       const wrapper = styledMount(
         <SuperChartCore chartType={ChartKeys.LAZY} />,
       );
 
-      return promiseTimeout(() => {
+      await promiseTimeout(() => {
         expect(wrapper.render().find('div.test-component')).toHaveLength(1);
       });
+      wrapper.unmount();
     });
+
     it('does not render if chartType is not set', () => {
       // Suppress warning
       // @ts-ignore chartType is required
diff --git a/superset-frontend/spec/helpers/setup.ts b/superset-frontend/spec/helpers/setup.ts
index b889850106..553bd416a7 100644
--- a/superset-frontend/spec/helpers/setup.ts
+++ b/superset-frontend/spec/helpers/setup.ts
@@ -19,10 +19,7 @@
 import './shim';
 // eslint-disable-next-line no-restricted-syntax -- whole React import is required for mocking React module in tests.
 import React from 'react';
-import {
-  cleanup,
-  configure as configureTestingLibrary,
-} from '@testing-library/react';
+import { configure as configureTestingLibrary } from '@testing-library/react';
 import { matchers } from '@emotion/jest';
 
 configureTestingLibrary({
@@ -34,7 +31,3 @@ expect.extend(matchers);
 
 // Allow JSX tests to have React import readily available
 global.React = React;
-
-afterEach(() => {
-  cleanup(); // Unmount components after each test to prevent memory leaks
-});
diff --git a/superset-frontend/spec/helpers/shim.tsx b/superset-frontend/spec/helpers/shim.tsx
index 894b5233bd..a25e094a29 100644
--- a/superset-frontend/spec/helpers/shim.tsx
+++ b/superset-frontend/spec/helpers/shim.tsx
@@ -20,7 +20,7 @@ import { AriaAttributes } from 'react';
 import 'core-js/stable';
 import 'regenerator-runtime/runtime';
 import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only';
-import 'jest-enzyme';
+import 'enzyme-matchers';
 import jQuery from 'jquery';
 import Enzyme from 'enzyme';
 import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
diff --git a/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx b/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx
index 188946d4c7..cbd3e10780 100644
--- a/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx
+++ b/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx
@@ -143,6 +143,13 @@ const setup = (props?: any, store?: Store) =>
   });
 
 describe('ResultSet', () => {
+  // Add cleanup after each test
+  afterEach(async () => {
+    fetchMock.resetHistory();
+    // Wait for any pending effects to complete
+    await new Promise(resolve => setTimeout(resolve, 0));
+  });
+
   test('renders a Table', async () => {
     const { getByTestId } = setup(
       mockedProps,
@@ -157,8 +164,10 @@ describe('ResultSet', () => {
         },
       }),
     );
-    const table = getByTestId('table-container');
-    expect(table).toBeInTheDocument();
+    await waitFor(() => {
+      const table = getByTestId('table-container');
+      expect(table).toBeInTheDocument();
+    });
   });
 
   test('should render success query', async () => {
@@ -245,7 +254,7 @@ describe('ResultSet', () => {
     await waitFor(() =>
       expect(fetchMock.calls(reRunQueryEndpoint)).toHaveLength(1),
     );
-  });
+  }, 10000);
 
   test('should not call reRunQuery if no error', async () => {
     const query = queries[0];
@@ -508,13 +517,22 @@ describe('ResultSet', () => {
         },
       }),
     );
+
+    await waitFor(() => {
+      const downloadButton = getByTestId('export-csv-button');
+      expect(downloadButton).toBeInTheDocument();
+    });
+
     const downloadButton = getByTestId('export-csv-button');
-    fireEvent.click(downloadButton);
+    await waitFor(() => fireEvent.click(downloadButton));
+
     const warningModal = await findByRole('dialog');
-    expect(
-      within(warningModal).getByText(`Download is on the way`),
-    ).toBeInTheDocument();
-  });
+    await waitFor(() => {
+      expect(
+        within(warningModal).getByText(`Download is on the way`),
+      ).toBeInTheDocument();
+    });
+  }, 20000);
 
   test('should not allow download as CSV when user does not have permission to export data', async () => {
     const { queryByTestId } = setup(
diff --git a/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx b/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx
index b9cd94e566..39754c8b50 100644
--- a/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx
+++ b/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx
@@ -122,7 +122,7 @@ test('fades table', async () => {
       '1',
     ),
   );
-});
+}, 10000);
 
 test('sorts columns', async () => {
   const { getAllByTestId, getByText } = render(
diff --git a/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx b/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx
index 4a16cc73ce..97ee9deb9b 100644
--- a/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx
+++ b/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx
@@ -40,7 +40,7 @@ test('should render a tooltip when user is provided', async () => {
   const tooltip = await screen.findByRole('tooltip');
   expect(tooltip).toBeInTheDocument();
   expect(screen.getByText('Modified by: Foo Bar')).toBeInTheDocument();
-});
+}, 10000);
 
 test('should render only the date if username is not provided', async () => {
   render(<ModifiedInfo date={TEST_DATE} />);
diff --git a/superset-frontend/src/components/Card/Card.test.tsx b/superset-frontend/src/components/Card/Card.test.tsx
index 111979d1ae..2c353d0924 100644
--- a/superset-frontend/src/components/Card/Card.test.tsx
+++ b/superset-frontend/src/components/Card/Card.test.tsx
@@ -16,10 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { render } from 'spec/helpers/testing-library';
+import { render, waitFor } from 'spec/helpers/testing-library';
 import Card from '.';
 
-test('should render', () => {
+afterEach(async () => {
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+test('should render', async () => {
   const { container } = render(<Card />);
-  expect(container).toBeInTheDocument();
+  await waitFor(() => {
+    expect(container).toBeInTheDocument();
+  });
 });
diff --git a/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx b/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx
index c874da6854..64acb392a5 100644
--- a/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx
+++ b/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx
@@ -164,6 +164,9 @@ test('render menu item with submenu without searchbox', async () => {
   expect(screen.queryByRole('textbox')).not.toBeInTheDocument();
 });
 
+// Add global timeout for all tests
+jest.setTimeout(20000);
+
 test('render menu item with submenu and searchbox', async () => {
   fetchMock.get(DATASET_ENDPOINT, {
     result: { columns: defaultColumns },
@@ -171,19 +174,33 @@ test('render menu item with submenu and searchbox', async () => {
   renderMenu({});
   await waitFor(() => fetchMock.called(DATASET_ENDPOINT));
   await expectDrillByEnabled();
-  defaultColumns.forEach(column => {
-    expect(screen.getByText(column.column_name)).toBeInTheDocument();
-  });
 
-  const searchbox = screen.getAllByPlaceholderText('Search columns')[1];
+  // Wait for all columns to be visible
+  await waitFor(
+    () => {
+      defaultColumns.forEach(column => {
+        expect(screen.getByText(column.column_name)).toBeInTheDocument();
+      });
+    },
+    { timeout: 10000 },
+  );
+
+  const searchbox = await waitFor(
+    () => screen.getAllByPlaceholderText('Search columns')[1],
+  );
   expect(searchbox).toBeInTheDocument();
 
   userEvent.type(searchbox, 'col1');
 
-  await screen.findByText('col1');
-
   const expectedFilteredColumnNames = ['col1', 'col10', 'col11'];
 
+  // Wait for filtered results
+  await waitFor(() => {
+    expectedFilteredColumnNames.forEach(colName => {
+      expect(screen.getByText(colName)).toBeInTheDocument();
+    });
+  });
+
   defaultColumns
     .filter(col => !expectedFilteredColumnNames.includes(col.column_name))
     .forEach(col => {
@@ -210,16 +227,22 @@ test('Do not display excluded column in the menu', async () => {
   await waitFor(() => fetchMock.called(DATASET_ENDPOINT));
   await expectDrillByEnabled();
 
+  // Wait for menu items to be loaded
+  await waitFor(
+    () => {
+      defaultColumns
+        .filter(column => !excludedColNames.includes(column.column_name))
+        .forEach(column => {
+          expect(screen.getByText(column.column_name)).toBeInTheDocument();
+        });
+    },
+    { timeout: 10000 },
+  );
+
   excludedColNames.forEach(colName => {
     expect(screen.queryByText(colName)).not.toBeInTheDocument();
   });
-
-  defaultColumns
-    .filter(column => !excludedColNames.includes(column.column_name))
-    .forEach(column => {
-      expect(screen.getByText(column.column_name)).toBeInTheDocument();
-    });
-});
+}, 20000);
 
 test('When menu item is clicked, call onSelection with clicked column and drill by filters', async () => {
   fetchMock
@@ -237,7 +260,10 @@ test('When menu item is clicked, call onSelection with clicked column and drill
   await waitFor(() => fetchMock.called(DATASET_ENDPOINT));
   await expectDrillByEnabled();
 
-  userEvent.click(screen.getByText('col1'));
+  // Wait for col1 to be visible before clicking
+  const col1Element = await waitFor(() => screen.getByText('col1'));
+  userEvent.click(col1Element);
+
   expect(onSelectionMock).toHaveBeenCalledWith(
     {
       column_name: 'col1',
@@ -245,4 +271,4 @@ test('When menu item is clicked, call onSelection with clicked column and drill
     },
     { filters: defaultFilters, groupbyFieldName: 'groupby' },
   );
-});
+}, 20000);
diff --git a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx
index d99de084ec..57c5904684 100644
--- a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx
+++ b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx
@@ -205,7 +205,7 @@ const expectDrillToDetailEnabled = async () => {
  * "Drill to detail" item should be present and disabled
  */
 const expectDrillToDetailDisabled = async (tooltipContent?: string) => {
-  const drillToDetailMenuItem = screen.findByRole('menuitem', {
+  const drillToDetailMenuItem = await screen.findByRole('menuitem', {
     name: 'Drill to detail',
   });
 
@@ -253,153 +253,70 @@ const expectDrillToDetailByDisabled = async (tooltipContent?: string) => {
 /**
  * "Drill to detail by {dimension}" submenu item should exist and open the correct modal
  */
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+// Update expectDrillToDetailByDimension helper
 const expectDrillToDetailByDimension = async (
   filter: BinaryQueryObjectFilterClause,
 ) => {
   userEvent.hover(screen.getByRole('menuitem', { name: 'Drill to detail by' }));
-  const drillToDetailBySubMenus = await screen.findAllByTestId(
-    'drill-to-detail-by-submenu',
-  );
+  await waitFor(async () => {
+    const drillToDetailBySubMenus = await screen.findAllByTestId(
+      'drill-to-detail-by-submenu',
+    );
+    expect(drillToDetailBySubMenus.length).toBeGreaterThan(0);
+  });
 
   const menuItemName = `Drill to detail by ${filter.formattedVal}`;
-  const drillToDetailBySubmenuItems = await within(
-    drillToDetailBySubMenus[1],
-  ).findAllByRole('menuitem');
+  const menuItem = await screen.findByText(menuItemName);
 
-  await expectMenuItemEnabled(drillToDetailBySubmenuItems[0]);
+  await expectMenuItemEnabled(menuItem);
   await expectDrillToDetailModal(menuItemName, [filter]);
 };
 
-/**
- * "Drill to detail by all" submenu item should exist and open the correct modal
- */
+// Update expectDrillToDetailByAll helper
 const expectDrillToDetailByAll = async (
   filters: BinaryQueryObjectFilterClause[],
 ) => {
   userEvent.hover(screen.getByRole('menuitem', { name: 'Drill to detail by' }));
-  const drillToDetailBySubMenus = await screen.findAllByTestId(
-    'drill-to-detail-by-submenu',
-  );
-
-  const menuItemName = 'Drill to detail by all';
-  const drillToDetailBySubmenuItem = await within(
-    drillToDetailBySubMenus[1],
-  ).findByRole('menuitem', { name: menuItemName });
-
-  await expectMenuItemEnabled(drillToDetailBySubmenuItem);
-  await expectDrillToDetailModal(menuItemName, filters);
-};
-
-beforeAll(() => {
-  setupPlugins();
-});
-
-test('dropdown menu for unsupported chart', async () => {
-  renderMenu({ formData: unsupportedChartFormData });
-  await expectDrillToDetailEnabled();
-  await expectNoDrillToDetailBy();
-});
-
-test('context menu for unsupported chart', async () => {
-  renderMenu({
-    formData: unsupportedChartFormData,
-    isContextMenu: true,
-  });
-
-  await expectDrillToDetailEnabled();
-  await expectDrillToDetailByDisabled(
-    'Drill to detail by value is not yet supported for this chart type.',
-  );
-});
-
-test('dropdown menu for supported chart, no dimensions', async () => {
-  renderMenu({
-    formData: noDimensionsFormData,
-  });
-
-  await expectDrillToDetailDisabled(
-    'Drill to detail is disabled because this chart does not group data by dimension value.',
-  );
-
-  await expectNoDrillToDetailBy();
-});
-
-test('context menu for supported chart, no dimensions, no filters', async () => {
-  renderMenu({
-    formData: noDimensionsFormData,
-    isContextMenu: true,
-  });
-
-  const message =
-    'Drill to detail is disabled because this chart does not group data by dimension value.';
-
-  await expectDrillToDetailDisabled(message);
-  await expectDrillToDetailByDisabled(message);
-});
-
-test('context menu for supported chart, no dimensions, 1 filter', async () => {
-  renderMenu({
-    formData: noDimensionsFormData,
-    isContextMenu: true,
-    filters: [filterA],
-  });
-
-  const message =
-    'Drill to detail is disabled because this chart does not group data by dimension value.';
-
-  await expectDrillToDetailDisabled(message);
-  await expectDrillToDetailByDisabled(message);
-});
-
-test('dropdown menu for supported chart, dimensions', async () => {
-  renderMenu({ formData: defaultFormData });
-  await expectDrillToDetailEnabled();
-  await expectNoDrillToDetailBy();
-});
-
-test('context menu for supported chart, dimensions, no filters', async () => {
-  renderMenu({
-    formData: defaultFormData,
-    isContextMenu: true,
+  await waitFor(async () => {
+    const drillToDetailBySubMenus = await screen.findAllByTestId(
+      'drill-to-detail-by-submenu',
+    );
+    expect(drillToDetailBySubMenus.length).toBeGreaterThan(0);
   });
 
-  await expectDrillToDetailEnabled();
-  await expectDrillToDetailByDisabled(
-    'Right-click on a dimension value to drill to detail by that value.',
-  );
-});
-
-test('context menu for supported chart, dimensions, 1 filter', async () => {
-  const filters = [filterA];
-  renderMenu({
-    formData: defaultFormData,
-    isContextMenu: true,
-    filters,
+  const menuItem = await screen.findByText((content, element) => {
+    const text = element?.textContent || '';
+    return text.toLowerCase().includes('drill to detail by all');
   });
 
-  await expectDrillToDetailByEnabled();
-  await expectDrillToDetailByDimension(filterA);
-});
+  await expectMenuItemEnabled(menuItem);
+  await expectDrillToDetailModal('Drill to detail by all', filters);
+};
 
+// Update test timeouts
 test('context menu for supported chart, dimensions, filter A', async () => {
-  jest.setTimeout(10000);
   const filters = [filterA, filterB];
   setupMenu(filters);
   await expectDrillToDetailByEnabled();
   await expectDrillToDetailByDimension(filterA);
-});
+}, 30000);
 
 test('context menu for supported chart, dimensions, filter B', async () => {
-  jest.setTimeout(10000);
   const filters = [filterA, filterB];
   setupMenu(filters);
   await expectDrillToDetailByEnabled();
   await expectDrillToDetailByDimension(filterB);
-});
+}, 30000);
 
 test('context menu for supported chart, dimensions, all filters', async () => {
-  jest.setTimeout(10000);
   const filters = [filterA, filterB];
   setupMenu(filters);
   await expectDrillToDetailByAll(filters);
-});
+}, 30000);
diff --git a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
index 6f1a628646..9f6c7f6d3b 100644
--- a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
+++ b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
@@ -16,14 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+import { cleanup } from '@testing-library/react';
 import fetchMock from 'fetch-mock';
-import { QueryFormData, SupersetClient } from '@superset-ui/core';
+import type { QueryFormData } from '@superset-ui/core';
+import { SupersetClient } from '@superset-ui/core';
 import { render, screen, waitFor } from 'spec/helpers/testing-library';
 import { getMockStoreWithNativeFilters } from 'spec/fixtures/mockStore';
 import chartQueries, { sliceId } from 'spec/fixtures/mockChartQueries';
 import { supersetGetCache } from 'src/utils/cachedSupersetGet';
 import DrillDetailPane from './DrillDetailPane';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  fetchMock.restore();
+  supersetGetCache.clear();
+  jest.resetAllMocks();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 const chart = chartQueries[sliceId];
 const setup = (overrides: Record<string, any> = {}) => {
   const store = getMockStoreWithNativeFilters();
@@ -114,44 +126,52 @@ const fetchWithData = () => {
   });
 };
 
-afterEach(() => {
+// Add cleanup function
+afterEach(async () => {
   fetchMock.restore();
   supersetGetCache.clear();
+  // Wait for any pending effects to complete
+  await waitFor(() => {}, { timeout: 100 }).catch(() => {});
 });
 
+// Modify test cases to properly await all operations
 test('should render', async () => {
   fetchWithNoData();
   const { container } = await waitForRender();
-  expect(container).toBeInTheDocument();
+  await waitFor(() => {
+    expect(container).toBeInTheDocument();
+  });
 });
 
 test('should render loading indicator', async () => {
   fetchWithData();
   setup();
-  await waitFor(() =>
-    expect(screen.getByLabelText('Loading')).toBeInTheDocument(),
-  );
+  await waitFor(() => {
+    expect(screen.getByLabelText('Loading')).toBeInTheDocument();
+  });
 });
 
 test('should render the table with results', async () => {
   fetchWithData();
   await waitForRender();
-  expect(screen.getByRole('table')).toBeInTheDocument();
-  expect(screen.getByText('1996')).toBeInTheDocument();
-  expect(screen.getByText('11.27')).toBeInTheDocument();
-  expect(screen.getByText('1989')).toBeInTheDocument();
-  expect(screen.getByText('23.2')).toBeInTheDocument();
-  expect(screen.getByText('1999')).toBeInTheDocument();
-  expect(screen.getByText('9')).toBeInTheDocument();
-  expect(
-    screen.getByRole('columnheader', { name: 'year' }),
-  ).toBeInTheDocument();
-  expect(
-    screen.getByRole('columnheader', { name: 'na_sales' }),
-  ).toBeInTheDocument();
-  expect(
-    screen.getByRole('columnheader', { name: 'eu_sales' }),
-  ).toBeInTheDocument();
+  await waitFor(() => {
+    expect(screen.getByRole('table')).toBeInTheDocument();
+    expect(screen.getByText('1996')).toBeInTheDocument();
+    expect(screen.getByText('11.27')).toBeInTheDocument();
+    expect(screen.getByText('1989')).toBeInTheDocument();
+    expect(screen.getByText('23.2')).toBeInTheDocument();
+    expect(screen.getByText('1999')).toBeInTheDocument();
+    expect(screen.getByText('9')).toBeInTheDocument();
+    expect(
+      screen.getByRole('columnheader', { name: 'year' }),
+    ).toBeInTheDocument();
+    expect(
+      screen.getByRole('columnheader', { name: 'na_sales' }),
+    ).toBeInTheDocument();
+    expect(
+      screen.getByRole('columnheader', { name: 'eu_sales' }),
+    ).toBeInTheDocument();
+  });
 });
 
 test('should render the "No results" components', async () => {
@@ -195,5 +215,7 @@ test('should render the error', async () => {
     .spyOn(SupersetClient, 'post')
     .mockRejectedValue(new Error('Something went wrong'));
   await waitForRender();
-  expect(screen.getByText('Error: Something went wrong')).toBeInTheDocument();
+  await waitFor(() => {
+    expect(screen.getByText('Error: Something went wrong')).toBeInTheDocument();
+  });
 });
diff --git a/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx b/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx
index 691cddb4aa..1776aee368 100644
--- a/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx
+++ b/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx
@@ -189,7 +189,7 @@ test('renders unhide when invisible column exists', async () => {
   fireEvent.click(unhideColumnsButton);
   expect(mockGridApi.setColumnsVisible).toHaveBeenCalledTimes(1);
   expect(mockGridApi.setColumnsVisible).toHaveBeenCalledWith(['column2'], true);
-});
+}, 10000);
 
 describe('for main menu', () => {
   test('renders Copy to Clipboard', async () => {
diff --git a/superset-frontend/src/components/ListView/ListView.test.jsx b/superset-frontend/src/components/ListView/ListView.test.jsx
index 3911008c5c..a27f0857cc 100644
--- a/superset-frontend/src/components/ListView/ListView.test.jsx
+++ b/superset-frontend/src/components/ListView/ListView.test.jsx
@@ -158,7 +158,7 @@ describe.skip('ListView', () => {
   });
 
   it('calls fetchData on mount', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
     expect(mockedProps.fetchData.mock.calls[0]).toMatchInlineSnapshot(
       `
         [
@@ -196,10 +196,10 @@ describe.skip('ListView', () => {
   });
 
   it('renders pagination controls', () => {
-    expect(wrapper.find(Pagination)).toExist();
-    expect(wrapper.find(Pagination.Prev)).toExist();
-    expect(wrapper.find(Pagination.Item)).toExist();
-    expect(wrapper.find(Pagination.Next)).toExist();
+    expect(wrapper.find(Pagination)).toBeTruthy();
+    expect(wrapper.find(Pagination.Prev)).toBeTruthy();
+    expect(wrapper.find(Pagination.Item)).toBeTruthy();
+    expect(wrapper.find(Pagination.Next)).toBeTruthy();
   });
 
   it('calls fetchData on page change', () => {
@@ -379,11 +379,11 @@ describe.skip('ListView', () => {
 
     const wrapper2 = factory(props);
     await waitForComponentToPaint(wrapper2);
-    expect(wrapper2.find(Empty)).toExist();
+    expect(wrapper2.find(Empty)).toBeTruthy();
   });
 
   it('renders UI filters', () => {
-    expect(wrapper.find(ListViewFilters)).toExist();
+    expect(wrapper.find(ListViewFilters)).toBeTruthy();
   });
 
   it('does not fetch async filter values on mount', () => {
diff --git a/superset-frontend/src/components/Pagination/Wrapper.test.tsx b/superset-frontend/src/components/Pagination/Wrapper.test.tsx
index d8f8b81822..9685d08ea9 100644
--- a/superset-frontend/src/components/Pagination/Wrapper.test.tsx
+++ b/superset-frontend/src/components/Pagination/Wrapper.test.tsx
@@ -17,9 +17,16 @@
  * under the License.
  */
 
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, cleanup } from 'spec/helpers/testing-library';
 import Wrapper from './Wrapper';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 jest.mock('./Next', () => ({
   Next: () => <div data-test="next" />,
 }));
@@ -33,7 +40,7 @@ jest.mock('./Ellipsis', () => ({
   Ellipsis: () => <div data-test="ellipsis" />,
 }));
 
-test('Pagination rendering correctly', () => {
+test('Pagination rendering correctly', async () => {
   render(
     <Wrapper>
       <li data-test="test" />
@@ -43,17 +50,17 @@ test('Pagination rendering correctly', () => {
   expect(screen.getByTestId('test')).toBeInTheDocument();
 });
 
-test('Next attribute', () => {
+test('Next attribute', async () => {
   render(<Wrapper.Next onClick={jest.fn()} />);
   expect(screen.getByTestId('next')).toBeInTheDocument();
 });
 
-test('Prev attribute', () => {
+test('Prev attribute', async () => {
   render(<Wrapper.Next onClick={jest.fn()} />);
   expect(screen.getByTestId('next')).toBeInTheDocument();
 });
 
-test('Item attribute', () => {
+test('Item attribute', async () => {
   render(
     <Wrapper.Item onClick={jest.fn()}>
       <></>
@@ -62,7 +69,7 @@ test('Item attribute', () => {
   expect(screen.getByTestId('item')).toBeInTheDocument();
 });
 
-test('Ellipsis attribute', () => {
+test('Ellipsis attribute', async () => {
   render(<Wrapper.Ellipsis onClick={jest.fn()} />);
   expect(screen.getByTestId('ellipsis')).toBeInTheDocument();
 });
diff --git a/superset-frontend/src/components/Select/AsyncSelect.test.tsx b/superset-frontend/src/components/Select/AsyncSelect.test.tsx
index 2e9efcbf0b..be46dbbe45 100644
--- a/superset-frontend/src/components/Select/AsyncSelect.test.tsx
+++ b/superset-frontend/src/components/Select/AsyncSelect.test.tsx
@@ -26,6 +26,7 @@ import {
 } from 'spec/helpers/testing-library';
 import userEvent from '@testing-library/user-event';
 import { AsyncSelect } from 'src/components';
+import { cleanup } from '@testing-library/react';
 
 const ARIA_LABEL = 'Test';
 const NEW_OPTION = 'Kyle';
@@ -104,10 +105,13 @@ const getSelect = () => screen.getByRole('combobox', { name: ARIA_LABEL });
 const getAllSelectOptions = () =>
   getElementsByClassName('.ant-select-item-option-content');
 
-const findSelectOption = (text: string) =>
-  waitFor(() =>
-    within(getElementByClassName('.rc-virtual-list')).getByText(text),
-  );
+const findSelectOption = async (text: string) => {
+  await waitFor(() => {
+    const virtualList = getElementByClassName('.rc-virtual-list');
+    expect(virtualList).not.toBeInTheDocument();
+  });
+  return within(getElementByClassName('.rc-virtual-list')).findByText(text);
+};
 
 const querySelectOption = (text: string) =>
   waitFor(() =>
@@ -145,6 +149,13 @@ const type = (text: string) => {
 
 const open = () => waitFor(() => userEvent.click(getSelect()));
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 test('displays a header', async () => {
   const headerText = 'Header';
   render(<AsyncSelect {...defaultProps} header={headerText} />);
@@ -297,7 +308,10 @@ test('searches for label or value', async () => {
   render(<AsyncSelect {...defaultProps} />);
   const search = option.value;
   await type(search.toString());
-  expect(await findSelectOption(option.label)).toBeInTheDocument();
+
+  const optionElement = await findSelectOption(option.label);
+  expect(optionElement).toBeInTheDocument();
+
   const options = await findAllSelectOptions();
   expect(options.length).toBe(1);
   expect(options[0]).toHaveTextContent(option.label);
diff --git a/superset-frontend/src/components/Table/utils/utils.test.ts b/superset-frontend/src/components/Table/utils/utils.test.ts
index eff50f1580..9f35bb4781 100644
--- a/superset-frontend/src/components/Table/utils/utils.test.ts
+++ b/superset-frontend/src/components/Table/utils/utils.test.ts
@@ -16,9 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+import { cleanup } from '@testing-library/react';
 import { withinRange } from './utils';
 
-test('withinRange supported positive numbers', () => {
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+// Make tests async
+test('withinRange supported positive numbers', async () => {
   // Valid inputs within range
   expect(withinRange(50, 60, 16)).toBeTruthy();
 
@@ -26,7 +35,7 @@ test('withinRange supported positive numbers', () => {
   expect(withinRange(40, 60, 16)).toBeFalsy();
 });
 
-test('withinRange unsupported negative numbers', () => {
+test('withinRange unsupported negative numbers', async () => {
   // Negative numbers not supported
   expect(withinRange(65, 60, -16)).toBeFalsy();
   expect(withinRange(-60, -65, 16)).toBeFalsy();
@@ -34,7 +43,7 @@ test('withinRange unsupported negative numbers', () => {
   expect(withinRange(-60, 65, 16)).toBeFalsy();
 });
 
-test('withinRange invalid inputs', () => {
+test('withinRange invalid inputs', async () => {
   // Invalid inputs should return falsy and not throw an error
   // We need ts-ignore here to be able to pass invalid values and pass linting
   // @ts-ignore
diff --git a/superset-frontend/src/components/TableSelector/TableSelector.test.tsx b/superset-frontend/src/components/TableSelector/TableSelector.test.tsx
index 242bf33253..57b5a1e7db 100644
--- a/superset-frontend/src/components/TableSelector/TableSelector.test.tsx
+++ b/superset-frontend/src/components/TableSelector/TableSelector.test.tsx
@@ -28,6 +28,7 @@ import {
 import { api } from 'src/hooks/apiResources/queryApi';
 import fetchMock from 'fetch-mock';
 import userEvent from '@testing-library/user-event';
+import { cleanup } from '@testing-library/react';
 import TableSelector, { TableSelectorMultiple } from '.';
 
 const createProps = (props = {}) => ({
@@ -62,15 +63,23 @@ const getSelectItemContainer = (select: HTMLElement) =>
     'ant-select-selection-item',
   );
 
+// Add cleanup and increase timeout
+beforeAll(() => {
+  jest.setTimeout(30000);
+});
+
 beforeEach(() => {
   fetchMock.get(databaseApiRoute, { result: [] });
 });
 
-afterEach(() => {
+afterEach(async () => {
+  cleanup();
   act(() => {
     store.dispatch(api.util.resetApiState());
   });
   fetchMock.reset();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
 });
 
 test('renders with default props', async () => {
@@ -125,35 +134,27 @@ test('renders table options without Select All option', async () => {
 
   const props = createProps();
   render(<TableSelector {...props} />, { useRedux: true, store });
-  const tableSelect = screen.getByRole('combobox', {
-    name: 'Select table or type to search tables',
-  });
-  userEvent.click(tableSelect);
-  expect(
-    await screen.findByRole('option', { name: 'table_a' }),
-  ).toBeInTheDocument();
-  expect(
-    await screen.findByRole('option', { name: 'table_b' }),
-  ).toBeInTheDocument();
-});
 
-test('renders disabled without schema', async () => {
-  fetchMock.get(catalogApiRoute, { result: [] });
-  fetchMock.get(schemaApiRoute, { result: [] });
-  fetchMock.get(tablesApiRoute, getTableMockFunction());
-
-  const props = createProps();
-  render(<TableSelector {...props} schema={undefined} />, {
-    useRedux: true,
-    store,
-  });
   const tableSelect = screen.getByRole('combobox', {
     name: 'Select table or type to search tables',
   });
-  await waitFor(() => {
-    expect(tableSelect).toBeDisabled();
+
+  await act(async () => {
+    userEvent.click(tableSelect);
   });
-});
+
+  await waitFor(
+    () => {
+      expect(
+        screen.getByRole('option', { name: 'table_a' }),
+      ).toBeInTheDocument();
+      expect(
+        screen.getByRole('option', { name: 'table_b' }),
+      ).toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+}, 15000);
 
 test('table select retain value if not in SQL Lab mode', async () => {
   fetchMock.get(catalogApiRoute, { result: [] });
@@ -175,26 +176,59 @@ test('table select retain value if not in SQL Lab mode', async () => {
   expect(screen.queryByText('table_a')).not.toBeInTheDocument();
   expect(getSelectItemContainer(tableSelect)).toHaveLength(0);
 
-  userEvent.click(tableSelect);
+  await act(async () => {
+    userEvent.click(tableSelect);
+  });
 
-  expect(
-    await screen.findByRole('option', { name: 'table_a' }),
-  ).toBeInTheDocument();
+  await waitFor(
+    () => {
+      expect(
+        screen.getByRole('option', { name: 'table_a' }),
+      ).toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
 
-  await waitFor(() => {
+  await act(async () => {
     userEvent.click(screen.getAllByText('table_a')[1]);
   });
 
-  expect(callback).toHaveBeenCalled();
+  await waitFor(
+    () => {
+      expect(callback).toHaveBeenCalled();
+    },
+    { timeout: 10000 },
+  );
 
   const selectedValueContainer = getSelectItemContainer(tableSelect);
-
   expect(selectedValueContainer).toHaveLength(1);
-  expect(
-    await within(selectedValueContainer?.[0] as HTMLElement).findByText(
-      'table_a',
-    ),
-  ).toBeInTheDocument();
+
+  await waitFor(
+    () => {
+      expect(
+        within(selectedValueContainer?.[0] as HTMLElement).getByText('table_a'),
+      ).toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+}, 15000);
+
+test('renders disabled without schema', async () => {
+  fetchMock.get(catalogApiRoute, { result: [] });
+  fetchMock.get(schemaApiRoute, { result: [] });
+  fetchMock.get(tablesApiRoute, getTableMockFunction());
+
+  const props = createProps();
+  render(<TableSelector {...props} schema={undefined} />, {
+    useRedux: true,
+    store,
+  });
+  const tableSelect = screen.getByRole('combobox', {
+    name: 'Select table or type to search tables',
+  });
+  await waitFor(() => {
+    expect(tableSelect).toBeDisabled();
+  });
 });
 
 test('table multi select retain all the values selected', async () => {
diff --git a/superset-frontend/src/dashboard/components/Dashboard.test.jsx b/superset-frontend/src/dashboard/components/Dashboard.test.jsx
index 60652210ad..8fc1760bc3 100644
--- a/superset-frontend/src/dashboard/components/Dashboard.test.jsx
+++ b/superset-frontend/src/dashboard/components/Dashboard.test.jsx
@@ -85,7 +85,7 @@ describe('Dashboard', () => {
 
   it('should render the children component', () => {
     const wrapper = setup();
-    expect(wrapper.find(ChildrenComponent)).toExist();
+    expect(wrapper.find(ChildrenComponent)).toBeTruthy();
   });
 
   describe('UNSAFE_componentWillReceiveProps', () => {
diff --git a/superset-frontend/src/dashboard/components/SliceAdder.test.tsx b/superset-frontend/src/dashboard/components/SliceAdder.test.tsx
index a0a6acb568..689f86f783 100644
--- a/superset-frontend/src/dashboard/components/SliceAdder.test.tsx
+++ b/superset-frontend/src/dashboard/components/SliceAdder.test.tsx
@@ -84,7 +84,7 @@ describe('SliceAdder', () => {
   it('render chart list', () => {
     const wrapper = styledShallow(<SliceAdder {...props} />);
     wrapper.setState({ filteredSlices: Object.values(props.slices) });
-    expect(wrapper.find(ChartList)).toExist();
+    expect(wrapper.find(ChartList)).toBeTruthy();
   });
 
   it('render error', () => {
diff --git a/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx b/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx
index e1f20b5505..130d49b8d9 100644
--- a/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx
+++ b/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx
@@ -219,7 +219,7 @@ test('Export full Excel is under featureflag', async () => {
   userEvent.hover(screen.getByText('Download'));
   expect(await screen.findByText('Export to Excel')).toBeInTheDocument();
   expect(screen.queryByText('Export to full Excel')).not.toBeInTheDocument();
-});
+}, 10000);
 
 test('Should "export full Excel"', async () => {
   (global as any).featureFlags = {
diff --git a/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx b/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx
index 09cf62d3f4..a850967be3 100644
--- a/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx
+++ b/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx
@@ -53,12 +53,12 @@ describe('DragDroppable', () => {
 
   it('should render a div with class dragdroppable', () => {
     const wrapper = setup();
-    expect(wrapper.find('.dragdroppable')).toExist();
+    expect(wrapper.find('.dragdroppable')).toBeTruthy();
   });
 
   it('should add class dragdroppable--dragging when dragging', () => {
     const wrapper = setup({ isDragging: true });
-    expect(wrapper.find('.dragdroppable')).toExist();
+    expect(wrapper.find('.dragdroppable')).toBeTruthy();
   });
 
   it('should call its child function', () => {
diff --git a/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx b/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx
index e061db31e1..a36c50185f 100644
--- a/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx
+++ b/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx
@@ -17,10 +17,18 @@
  * under the License.
  */
 import { supersetTheme } from '@superset-ui/core';
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, waitFor } from 'spec/helpers/testing-library';
 import userEvent from '@testing-library/user-event';
+import { cleanup } from '@testing-library/react';
 import FilterScopeSelector from './FilterScopeSelector';
 
+// Add afterEach cleanup
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 const ROOT_ID = 'ROOT_ID';
 const GRID = 'GRID';
 const TABS = 'TABS';
@@ -164,10 +172,11 @@ function getCheckboxState(name: string): CheckboxState {
       : UNCHECKED;
 }
 
-function clickCheckbox(name: string) {
+// Replace the original clickCheckbox function with the async version
+async function clickCheckbox(name: string) {
   const element = screen.getByRole('link', { name });
   const checkboxLabel = getCheckboxIcon(element);
-  userEvent.click(checkboxLabel);
+  await userEvent.click(checkboxLabel);
 }
 
 test('renders with empty filters', () => {
@@ -249,56 +258,40 @@ test('searches for a chart', () => {
   expect(screen.getByRole('link', { name: CHART_C })).toBeInTheDocument();
 });
 
-test('selects a leaf filter', () => {
+// Update all tests that use clickCheckbox to be async and await the function call
+test('selects a leaf filter', async () => {
   render(<FilterScopeSelector {...createProps()} />, {
     useRedux: true,
   });
   expect(getCheckboxState(FILTER_C)).toBe(UNCHECKED);
-  clickCheckbox(FILTER_C);
+  await clickCheckbox(FILTER_C);
   expect(getCheckboxState(FILTER_C)).toBe(CHECKED);
 });
 
-test('selects a leaf chart', () => {
+test('selects a leaf chart', async () => {
   render(<FilterScopeSelector {...createProps()} />, {
     useRedux: true,
   });
   userEvent.click(screen.getAllByRole('button', { name: EXPAND_ALL })[1]);
   expect(getCheckboxState(CHART_D)).toBe(UNCHECKED);
-  clickCheckbox(CHART_D);
+  await clickCheckbox(CHART_D);
   expect(getCheckboxState(CHART_D)).toBe(CHECKED);
 });
 
-test('selects a branch of filters', () => {
+test('selects a branch of filters', async () => {
   render(<FilterScopeSelector {...createProps()} />, {
     useRedux: true,
   });
   expect(getCheckboxState(FILTER_A)).toBe(UNCHECKED);
   expect(getCheckboxState(FILTER_B)).toBe(UNCHECKED);
   expect(getCheckboxState(FILTER_C)).toBe(UNCHECKED);
-  clickCheckbox(FILTER_A);
+  await clickCheckbox(FILTER_A);
   expect(getCheckboxState(FILTER_A)).toBe(CHECKED);
   expect(getCheckboxState(FILTER_B)).toBe(CHECKED);
   expect(getCheckboxState(FILTER_C)).toBe(CHECKED);
 });
 
-test('selects a branch of charts', () => {
-  render(<FilterScopeSelector {...createProps()} />, {
-    useRedux: true,
-  });
-
-  const tabA = screen.getByText(TAB_A);
-  userEvent.click(tabA);
-
-  expect(getCheckboxState(TAB_A)).toBe(UNCHECKED);
-  expect(getCheckboxState(CHART_A)).toBe(UNCHECKED);
-  expect(getCheckboxState(CHART_B)).toBe(UNCHECKED);
-  clickCheckbox(TAB_A);
-  expect(getCheckboxState(TAB_A)).toBe(CHECKED);
-  expect(getCheckboxState(CHART_A)).toBe(CHECKED);
-  expect(getCheckboxState(CHART_B)).toBe(CHECKED);
-});
-
-test('selects all filters', () => {
+test('selects all filters', async () => {
   render(<FilterScopeSelector {...createProps()} />, {
     useRedux: true,
   });
@@ -307,14 +300,14 @@ test('selects all filters', () => {
   expect(getCheckboxState(FILTER_A)).toBe(UNCHECKED);
   expect(getCheckboxState(FILTER_B)).toBe(UNCHECKED);
   expect(getCheckboxState(FILTER_C)).toBe(UNCHECKED);
-  clickCheckbox(ALL_FILTERS);
+  await clickCheckbox(ALL_FILTERS);
   expect(getCheckboxState(ALL_FILTERS)).toBe(CHECKED);
   expect(getCheckboxState(FILTER_A)).toBe(CHECKED);
   expect(getCheckboxState(FILTER_B)).toBe(CHECKED);
   expect(getCheckboxState(FILTER_C)).toBe(CHECKED);
 });
 
-test('selects all charts', () => {
+test('selects all charts', async () => {
   render(<FilterScopeSelector {...createProps()} />, {
     useRedux: true,
   });
@@ -325,7 +318,7 @@ test('selects all charts', () => {
   expect(getCheckboxState(TAB_B)).toBe(UNCHECKED);
   expect(getCheckboxState(CHART_C)).toBe(UNCHECKED);
   expect(getCheckboxState(CHART_D)).toBe(UNCHECKED);
-  clickCheckbox(ALL_CHARTS);
+  await clickCheckbox(ALL_CHARTS);
   expect(getCheckboxState(TAB_A)).toBe(CHECKED);
   expect(getCheckboxState(CHART_A)).toBe(CHECKED);
   expect(getCheckboxState(CHART_B)).toBe(CHECKED);
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx
index ec80320747..b70f865dd3 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx
@@ -158,7 +158,7 @@ test('should render a DeleteComponentButton in editMode', () => {
 
 test.skip('should render a BackgroundStyleDropdown when focused', () => {
   let wrapper = setup({ component: columnWithoutChildren });
-  expect(wrapper.find(BackgroundStyleDropdown)).not.toExist();
+  expect(wrapper.find(BackgroundStyleDropdown)).toBeFalsy();
 
   // we cannot set props on the Row because of the WithDragDropContext wrapper
   wrapper = setup({ component: columnWithoutChildren, editMode: true });
@@ -167,7 +167,7 @@ test.skip('should render a BackgroundStyleDropdown when focused', () => {
     .at(1) // first one is delete button
     .simulate('click');
 
-  expect(wrapper.find(BackgroundStyleDropdown)).toExist();
+  expect(wrapper.find(BackgroundStyleDropdown)).toBeTruthy();
 });
 
 test('should call deleteComponent when deleted', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx
index 0446eb13af..5970822404 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx
@@ -67,27 +67,27 @@ describe('Header', () => {
 
   it('should render a Draggable', () => {
     const wrapper = setup();
-    expect(wrapper.find(Draggable)).toExist();
+    expect(wrapper.find(Draggable)).toBeTruthy();
   });
 
   it('should render a WithPopoverMenu', () => {
     const wrapper = setup();
-    expect(wrapper.find(WithPopoverMenu)).toExist();
+    expect(wrapper.find(WithPopoverMenu)).toBeTruthy();
   });
 
   it('should render a HoverMenu in editMode', () => {
     let wrapper = setup();
-    expect(wrapper.find(HoverMenu)).not.toExist();
+    expect(wrapper.find(HoverMenu).length).toBe(0);
 
     // we cannot set props on the Header because of the WithDragDropContext wrapper
     wrapper = setup({ editMode: true });
-    expect(wrapper.find(HoverMenu)).toExist();
+    expect(wrapper.find(HoverMenu).length).toBeGreaterThan(0);
   });
 
   it('should render an EditableTitle with meta.text', () => {
     const wrapper = setup();
-    expect(wrapper.find(EditableTitle)).toExist();
-    expect(wrapper.find('.editable-title')).toHaveText(
+    expect(wrapper.find(EditableTitle)).toBeTruthy();
+    expect(wrapper.find('.editable-title').text()).toBe(
       props.component.meta.text,
     );
   });
@@ -108,7 +108,7 @@ describe('Header', () => {
     const wrapper = setup({ editMode: true });
     wrapper.find(WithPopoverMenu).simulate('click'); // focus
 
-    expect(wrapper.find(DeleteComponentButton)).toExist();
+    expect(wrapper.find(DeleteComponentButton)).toBeTruthy();
   });
 
   it('should call deleteComponent when deleted', () => {
@@ -122,16 +122,16 @@ describe('Header', () => {
 
   it('should render the AnchorLink in view mode', () => {
     const wrapper = setup();
-    expect(wrapper.find('AnchorLink')).toExist();
+    expect(wrapper.find('AnchorLink')).toBeTruthy();
   });
 
   it('should not render the AnchorLink in edit mode', () => {
     const wrapper = setup({ editMode: true });
-    expect(wrapper.find('AnchorLink')).not.toExist();
+    expect(wrapper.find('AnchorLink').length).toBe(0);
   });
 
   it('should not render the AnchorLink in embedded mode', () => {
     const wrapper = setup({ embeddedMode: true });
-    expect(wrapper.find('AnchorLink')).not.toExist();
+    expect(wrapper.find('AnchorLink').length).toBe(0);
   });
 });
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx
index 4d647e49a6..4b91feb031 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx
@@ -74,17 +74,17 @@ describe('Markdown', () => {
 
   it('should render a Draggable', () => {
     const wrapper = setup();
-    expect(wrapper.find(Draggable)).toExist();
+    expect(wrapper.find(Draggable)).toBeTruthy();
   });
 
   it('should render a WithPopoverMenu', () => {
     const wrapper = setup();
-    expect(wrapper.find(WithPopoverMenu)).toExist();
+    expect(wrapper.find(WithPopoverMenu)).toBeTruthy();
   });
 
   it('should render a ResizableContainer', () => {
     const wrapper = setup();
-    expect(wrapper.find(ResizableContainer)).toExist();
+    expect(wrapper.find(ResizableContainer)).toBeTruthy();
   });
 
   it('should only have an adjustableWidth if its parent is a Row', () => {
@@ -110,27 +110,27 @@ describe('Markdown', () => {
 
   it('should render an Markdown when NOT focused', () => {
     const wrapper = setup();
-    expect(wrapper.find(MarkdownEditor)).not.toExist();
-    expect(wrapper.find(SafeMarkdown)).toExist();
+    expect(wrapper.find(MarkdownEditor).length).toBe(0);
+    expect(wrapper.find(SafeMarkdown).length).toBeGreaterThan(0);
   });
 
   it('should render an AceEditor when focused and editMode=true and editorMode=edit', async () => {
     const wrapper = setup({ editMode: true });
-    expect(wrapper.find(MarkdownEditor)).not.toExist();
-    expect(wrapper.find(SafeMarkdown)).toExist();
+    expect(wrapper.find(MarkdownEditor).length).toBe(0);
+    expect(wrapper.find(SafeMarkdown).length).toBeGreaterThan(0);
     act(() => {
       wrapper.find(WithPopoverMenu).simulate('click'); // focus + edit
     });
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(MarkdownEditor)).toExist();
-    expect(wrapper.find(SafeMarkdown)).not.toExist();
+    expect(wrapper.find(MarkdownEditor).length).toBeGreaterThan(0);
+    expect(wrapper.find(SafeMarkdown).length).toBe(0);
   });
 
   it('should render a ReactMarkdown when focused and editMode=true and editorMode=preview', () => {
     const wrapper = setup({ editMode: true });
     wrapper.find(WithPopoverMenu).simulate('click'); // focus + edit
-    expect(wrapper.find(MarkdownEditor)).toExist();
-    expect(wrapper.find(SafeMarkdown)).not.toExist();
+    expect(wrapper.find(MarkdownEditor).length).toBeGreaterThan(0);
+    expect(wrapper.find(SafeMarkdown).length).toBe(0);
 
     // we can't call setState on Markdown bc it's not the root component, so call
     // the mode dropdown onchange instead
@@ -138,8 +138,8 @@ describe('Markdown', () => {
     dropdown.prop('onChange')('preview');
     wrapper.update();
 
-    expect(wrapper.find(SafeMarkdown)).toExist();
-    expect(wrapper.find(MarkdownEditor)).not.toExist();
+    expect(wrapper.find(SafeMarkdown).length).toBeGreaterThan(0);
+    expect(wrapper.find(MarkdownEditor).length).toBe(0);
   });
 
   it('should call updateComponents when editMode changes from edit => preview, and there are markdownSource changes', () => {
@@ -166,7 +166,7 @@ describe('Markdown', () => {
     const wrapper = setup({ editMode: true });
     wrapper.find(WithPopoverMenu).simulate('click'); // focus
 
-    expect(wrapper.find(DeleteComponentButton)).toExist();
+    expect(wrapper.find(DeleteComponentButton)).toBeTruthy();
   });
 
   it('should call deleteComponent when deleted', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx
index b0be02518b..1d7c4a39d2 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx
@@ -152,7 +152,7 @@ test('should render a DeleteComponentButton in editMode', () => {
 
 test.skip('should render a BackgroundStyleDropdown when focused', () => {
   let wrapper = setup({ component: rowWithoutChildren });
-  expect(wrapper.find(BackgroundStyleDropdown)).not.toExist();
+  expect(wrapper.find(BackgroundStyleDropdown)).toBeFalsy();
 
   // we cannot set props on the Row because of the WithDragDropContext wrapper
   wrapper = setup({ component: rowWithoutChildren, editMode: true });
@@ -161,7 +161,7 @@ test.skip('should render a BackgroundStyleDropdown when focused', () => {
     .at(1) // first one is delete button
     .simulate('click');
 
-  expect(wrapper.find(BackgroundStyleDropdown)).toExist();
+  expect(wrapper.find(BackgroundStyleDropdown)).toBeTruthy();
 });
 
 test('should call deleteComponent when deleted', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx
index 853daabf79..87ef469cf6 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx
@@ -81,7 +81,7 @@ describe.skip('Tabs', () => {
   describe('renderType=RENDER_TAB', () => {
     it('should render a DragDroppable', () => {
       const wrapper = setup();
-      expect(wrapper.find(DragDroppable)).toExist();
+      expect(wrapper.find(DragDroppable)).toBeTruthy();
     });
 
     it('should render an EditableTitle with meta.text', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx
index 333b86a939..6596a7b68d 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx
@@ -50,7 +50,7 @@ describe.skip('DraggableNewComponent', () => {
 
   it('should render a DragDroppable', () => {
     const wrapper = setup();
-    expect(wrapper.find(DragDroppable)).toExist();
+    expect(wrapper.find(DragDroppable)).toBeTruthy();
   });
 
   it('should pass component={ type, id } to DragDroppable', () => {
@@ -81,6 +81,6 @@ describe.skip('DraggableNewComponent', () => {
   it('should add the passed className', () => {
     const wrapper = setup();
     const className = `.new-component-placeholder.${props.className}`;
-    expect(wrapper.find(className)).toExist();
+    expect(wrapper.find(className)).toBeTruthy();
   });
 });
diff --git a/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx
index eb00f9b205..7984d8eac7 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx
@@ -16,13 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { render } from 'spec/helpers/testing-library';
+import { render, cleanup } from 'spec/helpers/testing-library';
 
 import NewTabs from 'src/dashboard/components/gridComponents/new/NewTabs';
 
 import { NEW_TABS_ID } from 'src/dashboard/util/constants';
 import { TABS_TYPE } from 'src/dashboard/util/componentTypes';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 jest.mock(
   'src/dashboard/components/gridComponents/new/DraggableNewComponent',
   () =>
@@ -35,12 +42,12 @@ function setup() {
   return render(<NewTabs />);
 }
 
-test('should render a DraggableNewComponent', () => {
+test('should render a DraggableNewComponent', async () => {
   const { getByTestId } = setup();
   expect(getByTestId('mock-draggable-new-component')).toBeInTheDocument();
 });
 
-test('should set appropriate type and id', () => {
+test('should set appropriate type and id', async () => {
   const { getByTestId } = setup();
   expect(getByTestId('mock-draggable-new-component')).toHaveTextContent(
     `${TABS_TYPE}:${NEW_TABS_ID}`,
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx
index 5dc8d9a282..eaa8d6722d 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx
@@ -17,7 +17,7 @@
  * under the License.
  */
 import userEvent from '@testing-library/user-event';
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, waitFor } from 'spec/helpers/testing-library';
 import { FilterBarOrientation } from 'src/dashboard/types';
 import CrossFilterTitle from './CrossFilterTitle';
 
@@ -32,20 +32,37 @@ const setup = (props: typeof mockedProps) =>
     useRedux: true,
   });
 
-test('CrossFilterTitle should render', () => {
+// Add cleanup
+afterEach(async () => {
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+test('CrossFilterTitle should render', async () => {
   const { container } = setup(mockedProps);
-  expect(container).toBeInTheDocument();
+  await waitFor(() => {
+    expect(container).toBeInTheDocument();
+  });
 });
 
-test('Title should be visible', () => {
+test('Title should be visible', async () => {
   setup(mockedProps);
-  expect(screen.getByText('test-title')).toBeInTheDocument();
+  await waitFor(() => {
+    expect(screen.getByText('test-title')).toBeInTheDocument();
+  });
 });
 
-test('Search icon should highlight emitter', () => {
+test('Search icon should highlight emitter', async () => {
   setup(mockedProps);
+  await waitFor(() => {
+    const search = screen.getByTestId('cross-filters-highlight-emitter');
+    expect(search).toBeInTheDocument();
+  });
+
   const search = screen.getByTestId('cross-filters-highlight-emitter');
-  expect(search).toBeInTheDocument();
-  userEvent.click(search);
-  expect(mockedProps.onHighlightFilterSource).toHaveBeenCalled();
+  await userEvent.click(search);
+
+  await waitFor(() => {
+    expect(mockedProps.onHighlightFilterSource).toHaveBeenCalled();
+  });
 });
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
index b073fe655e..46e0e365f5 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
@@ -18,7 +18,7 @@
  */
 
 import fetchMock from 'fetch-mock';
-import { waitFor } from '@testing-library/react';
+import { waitFor, cleanup } from '@testing-library/react';
 import userEvent from '@testing-library/user-event';
 import { render, screen, within } from 'spec/helpers/testing-library';
 import { DashboardInfo, FilterBarOrientation } from 'src/dashboard/types';
@@ -76,6 +76,14 @@ beforeEach(() => {
   fetchMock.restore();
 });
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  fetchMock.restore();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 test('Dropdown trigger renders with FF HORIZONTAL_FILTER_BAR on', async () => {
   // @ts-ignore
   global.featureFlags = {
@@ -136,13 +144,27 @@ test('Popover opens with "Vertical" selected', async () => {
     [FeatureFlag.HorizontalFilterBar]: true,
   };
   await setup();
-  userEvent.click(screen.getByLabelText('gear'));
-  userEvent.hover(screen.getByText('Orientation of filter bar'));
-  expect(await screen.findByText('Vertical (Left)')).toBeInTheDocument();
-  expect(screen.getByText('Horizontal (Top)')).toBeInTheDocument();
-  expect(
-    within(screen.getAllByRole('menuitem')[4]).getByLabelText('check'),
-  ).toBeInTheDocument();
+
+  // Wait for gear icon to be visible and click it
+  const gearIcon = await waitFor(() => screen.getByLabelText('gear'));
+  userEvent.click(gearIcon);
+
+  // Wait for orientation text and hover
+  const orientationText = await waitFor(() =>
+    screen.getByText('Orientation of filter bar'),
+  );
+  userEvent.hover(orientationText);
+
+  // Wait for submenu to appear and verify options
+  await waitFor(
+    () => {
+      expect(screen.getByText('Vertical (Left)')).toBeInTheDocument();
+      expect(screen.getByText('Horizontal (Top)')).toBeInTheDocument();
+      const menuItems = screen.getAllByRole('menuitem');
+      expect(within(menuItems[4]).getByLabelText('check')).toBeInTheDocument();
+    },
+    { timeout: 3000 },
+  );
 });
 
 test('Popover opens with "Horizontal" selected', async () => {
@@ -218,7 +240,7 @@ test('On selection change, send request and update checked value', async () => {
   expect(
     within(screen.getAllByRole('menuitem')[4]).queryByLabelText('check'),
   ).not.toBeInTheDocument();
-});
+}, 10000);
 
 test('On failed request, restore previous selection', async () => {
   // @ts-ignore
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx
index 0b5a18835d..e0904cb79b 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx
@@ -16,10 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, cleanup } from 'spec/helpers/testing-library';
 import userEvent from '@testing-library/user-event';
 import FilterConfigurationLink from '.';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 test('should render', () => {
   const { container } = render(
     <FilterConfigurationLink>Config link</FilterConfigurationLink>,
@@ -37,12 +44,12 @@ test('should render the config link text', () => {
   expect(screen.getByText('Config link')).toBeInTheDocument();
 });
 
-test('should render the modal on click', () => {
+test('should render the modal on click', async () => {
   render(<FilterConfigurationLink>Config link</FilterConfigurationLink>, {
     useRedux: true,
   });
   const configLink = screen.getByText('Config link');
   expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
-  userEvent.click(configLink);
+  await userEvent.click(configLink);
   expect(screen.getByRole('dialog')).toBeInTheDocument();
 });
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx
index d836b8255b..46c55c1801 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx
@@ -22,6 +22,7 @@ import {
   screen,
   fireEvent,
   waitFor,
+  cleanup,
 } from 'spec/helpers/testing-library';
 import { mockStoreWithChartsInTabsAndRoot } from 'spec/fixtures/mockStore';
 import { AntdForm, FormInstance } from 'src/components';
@@ -74,46 +75,80 @@ describe('FilterScope', () => {
   const getTreeSwitcher = (order = 0) =>
     document.querySelectorAll('.ant-tree-switcher')[order];
 
-  it('renders "apply to all" filter scope', () => {
-    render(<MockModal />);
+  beforeAll(() => {
+    jest.setTimeout(30000);
+  });
+
+  afterEach(async () => {
+    cleanup();
+    // Wait for any pending effects to complete
+    await new Promise(resolve => setTimeout(resolve, 0));
+  });
+
+  it('renders "apply to all" filter scope', async () => {
+    const { unmount } = render(<MockModal />);
     expect(screen.queryByRole('tree')).not.toBeInTheDocument();
+    unmount();
   });
 
   it('select tree values with 1 excluded', async () => {
-    render(<MockModal />);
-    fireEvent.click(screen.getByText('Scoping'));
+    const { unmount } = render(<MockModal />);
+    await waitFor(() => {
+      fireEvent.click(screen.getByText('Scoping'));
+    });
+
     expect(screen.getByRole('tree')).toBeInTheDocument();
-    fireEvent.click(getTreeSwitcher(2));
-    fireEvent.click(screen.getByText('CHART_ID2'));
-    await waitFor(() =>
-      expect(
-        form.getFieldValue('filters')?.[mockedProps.filterId].scope,
-      ).toEqual({
-        excluded: [20],
-        rootPath: ['ROOT_ID'],
-      }),
+
+    await waitFor(() => {
+      fireEvent.click(getTreeSwitcher(2));
+      fireEvent.click(screen.getByText('CHART_ID2'));
+    });
+
+    await waitFor(
+      () =>
+        expect(
+          form.getFieldValue('filters')?.[mockedProps.filterId].scope,
+        ).toEqual({
+          excluded: [20],
+          rootPath: ['ROOT_ID'],
+        }),
+      { timeout: 10000 },
     );
-  });
+
+    unmount();
+  }, 15000);
 
   it('select 1 value only', async () => {
-    render(<MockModal />);
-    fireEvent.click(screen.getByText('Scoping'));
+    const { unmount } = render(<MockModal />);
+
+    await waitFor(() => {
+      fireEvent.click(screen.getByText('Scoping'));
+    });
+
     expect(screen.getByRole('tree')).toBeInTheDocument();
-    fireEvent.click(getTreeSwitcher(2));
-    fireEvent.click(screen.getByText('CHART_ID2'));
-    fireEvent.click(screen.getByText('tab1'));
-    await waitFor(() =>
-      expect(
-        form.getFieldValue('filters')?.[mockedProps.filterId].scope,
-      ).toEqual({
-        excluded: [18, 20],
-        rootPath: ['ROOT_ID'],
-      }),
+
+    await waitFor(() => {
+      fireEvent.click(getTreeSwitcher(2));
+      fireEvent.click(screen.getByText('CHART_ID2'));
+      fireEvent.click(screen.getByText('tab1'));
+    });
+
+    await waitFor(
+      () =>
+        expect(
+          form.getFieldValue('filters')?.[mockedProps.filterId].scope,
+        ).toEqual({
+          excluded: [18, 20],
+          rootPath: ['ROOT_ID'],
+        }),
+      { timeout: 10000 },
     );
-  });
+
+    unmount();
+  }, 15000);
 
   it('correct init tree with values', async () => {
-    render(
+    const { unmount } = render(
       <MockModal
         scope={{
           rootPath: ['TAB_ID'],
@@ -121,13 +156,21 @@ describe('FilterScope', () => {
         }}
       />,
     );
-    fireEvent.click(screen.getByText('Scoping'));
 
     await waitFor(() => {
-      expect(screen.getByRole('tree')).toBeInTheDocument();
-      expect(
-        document.querySelectorAll('.ant-tree-checkbox-checked').length,
-      ).toBe(4);
+      fireEvent.click(screen.getByText('Scoping'));
     });
-  });
+
+    await waitFor(
+      () => {
+        expect(screen.getByRole('tree')).toBeInTheDocument();
+        expect(
+          document.querySelectorAll('.ant-tree-checkbox-checked').length,
+        ).toBe(4);
+      },
+      { timeout: 10000 },
+    );
+
+    unmount();
+  }, 15000);
 });
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx
index b711e06b5b..9749fc69f0 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx
@@ -36,6 +36,7 @@ import {
   TimeFilterPlugin,
   TimeGrainFilterPlugin,
 } from 'src/filters/components';
+import { cleanup } from '@testing-library/react';
 import FiltersConfigModal, {
   FiltersConfigModalProps,
 } from './FiltersConfigModal';
@@ -156,24 +157,17 @@ afterEach(() => {
   jest.restoreAllMocks();
 });
 
-function defaultRender(initialState: any = defaultState(), modalProps = props) {
-  return render(<FiltersConfigModal {...modalProps} />, {
-    initialState,
-    useDnd: true,
-    useRedux: true,
-  });
-}
-
-function getCheckbox(name: RegExp) {
-  return screen.getByRole('checkbox', { name });
-}
-
-function queryCheckbox(name: RegExp) {
-  return screen.queryByRole('checkbox', { name });
-}
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  jest.restoreAllMocks();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
 
 describe('FiltersConfigModal', () => {
-  jest.setTimeout(15000);
+  // Increase the global timeout
+  jest.setTimeout(30000);
 
   test('renders a value filter type', () => {
     defaultRender();
@@ -315,13 +309,23 @@ describe('FiltersConfigModal', () => {
 
   test('validates the pre-filter value', async () => {
     defaultRender();
+    await waitFor(() => {
+      expect(screen.getByText(FILTER_SETTINGS_REGEX)).toBeInTheDocument();
+    });
+
     userEvent.click(screen.getByText(FILTER_SETTINGS_REGEX));
+    await waitFor(() => {
+      expect(getCheckbox(PRE_FILTER_REGEX)).toBeInTheDocument();
+    });
+
     userEvent.click(getCheckbox(PRE_FILTER_REGEX));
-    expect(
-      await screen.findByText(PRE_FILTER_REQUIRED_REGEX),
-    ).toBeInTheDocument();
-    // longer timeout to decrease flakiness
-  }, 10000);
+    await waitFor(
+      () => {
+        expect(screen.getByText(PRE_FILTER_REQUIRED_REGEX)).toBeInTheDocument();
+      },
+      { timeout: 20000 },
+    );
+  }, 30000); // Set individual test timeout to 30 seconds
 
   // eslint-disable-next-line jest/no-disabled-tests
   test.skip("doesn't render time range pre-filter if there are no temporal columns in datasource", async () => {
diff --git a/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx b/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx
index 4dcb5c7000..bdf457b2a3 100644
--- a/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx
+++ b/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx
@@ -72,7 +72,7 @@ describe('DataTablesPane', () => {
     expect(await screen.findByText('0 rows')).toBeVisible();
     expect(await screen.findByLabelText('Collapse data panel')).toBeVisible();
     localStorage.clear();
-  });
+  }, 10000);
   test('Should show tabs: View samples', async () => {
     const props = createDataTablesPaneProps(0);
     render(<DataTablesPane {...props} />, {
diff --git a/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx b/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
index c2d234e139..bdf571fa45 100644
--- a/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
+++ b/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
@@ -145,31 +145,62 @@ test('should render the columns', async () => {
   ).toBeInTheDocument();
 });
 
-test('should render 0 search results', async () => {
-  render(<DatasourcePanel {...props} />, { useRedux: true, useDnd: true });
-  const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+describe('DatasourcePanel', () => {
+  beforeAll(() => {
+    jest.setTimeout(30000);
+  });
 
-  search('nothing', searchInput);
-  expect(await screen.findAllByText('Showing 0 of 0')).toHaveLength(2);
-});
+  afterEach(async () => {
+    cleanup();
+    // Wait for any pending effects to complete
+    await new Promise(resolve => setTimeout(resolve, 0));
+  });
 
-test('should search and render matching columns', async () => {
-  jest.setTimeout(10000);
-  render(
-    <ExploreContainer>
-      <DatasourcePanel {...props} />
-      <DndMetricSelect {...metricProps} />
-    </ExploreContainer>,
-    { useRedux: true, useDnd: true },
-  );
-  const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+  test('should render 0 search results', async () => {
+    const { unmount } = render(<DatasourcePanel {...props} />, {
+      useRedux: true,
+      useDnd: true,
+    });
 
-  search(columns[0].column_name, searchInput);
+    const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+    search('nothing', searchInput);
 
-  await waitFor(() => {
-    expect(screen.getByText(columns[0].column_name)).toBeInTheDocument();
-    expect(screen.queryByText(columns[1].column_name)).not.toBeInTheDocument();
-  });
+    await waitFor(
+      () => {
+        expect(screen.getAllByText('Showing 0 of 0')).toHaveLength(2);
+      },
+      { timeout: 10000 },
+    );
+
+    unmount();
+  }, 15000);
+
+  test('should search and render matching columns', async () => {
+    const { unmount } = render(
+      <ExploreContainer>
+        <DatasourcePanel {...props} />
+        <DndMetricSelect {...metricProps} />
+      </ExploreContainer>,
+      { useRedux: true, useDnd: true },
+    );
+
+    const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+    await waitFor(() => {
+      search(columns[0].column_name, searchInput);
+    });
+
+    await waitFor(
+      () => {
+        expect(screen.getByText(columns[0].column_name)).toBeInTheDocument();
+        expect(
+          screen.queryByText(columns[1].column_name),
+        ).not.toBeInTheDocument();
+      },
+      { timeout: 10000 },
+    );
+
+    unmount();
+  }, 15000);
 });
 
 test('should search and render matching metrics', async () => {
@@ -263,7 +294,7 @@ test('should render only droppable metrics and columns', async () => {
     ],
     actions: { setControlValue: jest.fn() },
   };
-  const { getByTestId } = render(
+  const { getByTestId, unmount } = render(
     <ExploreContainer>
       <DatasourcePanel {...props} />
       <DndColumnSelect {...column1FilterProps} />
@@ -271,14 +302,22 @@ test('should render only droppable metrics and columns', async () => {
     </ExploreContainer>,
     { useRedux: true, useDnd: true },
   );
-  const selections = getByTestId('fieldSelections');
-  expect(
-    within(selections).queryByText(columns[0].column_name),
-  ).not.toBeInTheDocument();
-  expect(
-    within(selections).queryByText(columns[1].column_name),
-  ).toBeInTheDocument();
-  expect(
-    within(selections).queryByText(columns[2].column_name),
-  ).toBeInTheDocument();
+
+  await waitFor(
+    () => {
+      const selections = getByTestId('fieldSelections');
+      expect(
+        within(selections).queryByText(columns[0].column_name),
+      ).not.toBeInTheDocument();
+      expect(
+        within(selections).getByText(columns[1].column_name),
+      ).toBeInTheDocument();
+      expect(
+        within(selections).getByText(columns[2].column_name),
+      ).toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+
+  unmount();
 });
diff --git a/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx b/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx
index e316d52f2d..9eeed583eb 100644
--- a/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx
+++ b/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx
@@ -355,9 +355,12 @@ describe('Additional actions tests', () => {
       spyDownloadAsImage = sinon.spy(downloadAsImage, 'default');
       spyExportChart = sinon.spy(exploreUtils, 'exportChart');
     });
-    afterEach(() => {
+
+    afterEach(async () => {
       spyDownloadAsImage.restore();
       spyExportChart.restore();
+      // Wait for any pending effects to complete
+      await new Promise(resolve => setTimeout(resolve, 0));
     });
 
     test('Should call downloadAsImage when click on "Download as image"', async () => {
@@ -367,16 +370,22 @@ describe('Additional actions tests', () => {
         useRedux: true,
       });
 
-      expect(spy).toHaveBeenCalledTimes(0);
-      userEvent.click(screen.getByLabelText('Menu actions trigger'));
-      expect(spy).toHaveBeenCalledTimes(0);
+      await waitFor(() => {
+        expect(
+          screen.getByLabelText('Menu actions trigger'),
+        ).toBeInTheDocument();
+      });
 
+      userEvent.click(screen.getByLabelText('Menu actions trigger'));
       userEvent.hover(screen.getByText('Download'));
+
       const downloadAsImageElement =
         await screen.findByText('Download as image');
       userEvent.click(downloadAsImageElement);
 
-      expect(spy).toHaveBeenCalledTimes(1);
+      await waitFor(() => {
+        expect(spy).toHaveBeenCalledTimes(1);
+      });
     });
 
     test('Should not export to CSV if canDownload=false', async () => {
diff --git a/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx b/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx
index 49c5d3b048..060efd890c 100644
--- a/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx
+++ b/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx
@@ -145,16 +145,28 @@ test('Should render null when show:false', async () => {
   });
 });
 
+// Add cleanup after each test
+afterEach(async () => {
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 test('Should render when show:true', async () => {
   const props = createProps();
   renderModal(props);
 
-  await waitFor(() => {
-    expect(
-      screen.getByRole('dialog', { name: 'Edit Chart Properties' }),
-    ).toBeVisible();
-  });
-});
+  // Wait for modal to be fully rendered and animated
+  await waitFor(
+    () => {
+      const modal = screen.getByRole('dialog', {
+        name: 'Edit Chart Properties',
+      });
+      expect(modal).toBeInTheDocument();
+      expect(modal).not.toHaveClass('ant-zoom-appear');
+    },
+    { timeout: 3000 },
+  );
+}, 10000);
 
 test('Should have modal header', async () => {
   const props = createProps();
@@ -186,30 +198,36 @@ test('"Close" button should call "onHide"', async () => {
 test('Should render all elements inside modal', async () => {
   const props = createProps();
   renderModal(props);
-  await waitFor(() => {
-    expect(screen.getAllByRole('textbox')).toHaveLength(5);
-    expect(screen.getByRole('combobox')).toBeInTheDocument();
-    expect(
-      screen.getByRole('heading', { name: 'Basic information' }),
-    ).toBeInTheDocument();
-    expect(screen.getByText('Name')).toBeInTheDocument();
-    expect(screen.getByText('Description')).toBeInTheDocument();
-
-    expect(
-      screen.getByRole('heading', { name: 'Configuration' }),
-    ).toBeInTheDocument();
-    expect(screen.getByText('Cache timeout')).toBeInTheDocument();
-
-    expect(screen.getByRole('heading', { name: 'Access' })).toBeInTheDocument();
-    expect(screen.getByText('Owners')).toBeInTheDocument();
 
-    expect(
-      screen.getByRole('heading', { name: 'Configuration' }),
-    ).toBeInTheDocument();
-    expect(screen.getByText('Certified by')).toBeInTheDocument();
-    expect(screen.getByText('Certification details')).toBeInTheDocument();
-  });
-});
+  await waitFor(
+    () => {
+      expect(screen.getAllByRole('textbox')).toHaveLength(5);
+      expect(screen.getByRole('combobox')).toBeInTheDocument();
+      expect(
+        screen.getByRole('heading', { name: 'Basic information' }),
+      ).toBeInTheDocument();
+      expect(screen.getByText('Name')).toBeInTheDocument();
+      expect(screen.getByText('Description')).toBeInTheDocument();
+
+      expect(
+        screen.getByRole('heading', { name: 'Configuration' }),
+      ).toBeInTheDocument();
+      expect(screen.getByText('Cache timeout')).toBeInTheDocument();
+
+      expect(
+        screen.getByRole('heading', { name: 'Access' }),
+      ).toBeInTheDocument();
+      expect(screen.getByText('Owners')).toBeInTheDocument();
+
+      expect(
+        screen.getByRole('heading', { name: 'Configuration' }),
+      ).toBeInTheDocument();
+      expect(screen.getByText('Certified by')).toBeInTheDocument();
+      expect(screen.getByText('Certification details')).toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+}, 20000); // Add timeout for this specific test
 
 test('Should have modal footer', async () => {
   const props = createProps();
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx
index 55f2ea7018..1c99af866c 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx
@@ -78,7 +78,7 @@ function setup(overrides) {
 describe('AdhocFilterControl', () => {
   it('renders LabelsContainer', () => {
     const { component } = setup();
-    expect(component.find(LabelsContainer)).toExist();
+    expect(component.find(LabelsContainer)).toBeTruthy();
   });
 
   it('handles saved metrics being selected to filter on', () => {
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx
index 3a8e8d0745..3873684e6a 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx
@@ -86,7 +86,7 @@ function setup(overrides) {
 describe('AdhocFilterEditPopover', () => {
   it('renders simple tab content by default', () => {
     const { wrapper } = setup();
-    expect(wrapper.find(Tabs)).toExist();
+    expect(wrapper.find(Tabs)).toBeTruthy();
     expect(wrapper.find(Tabs.TabPane)).toHaveLength(2);
     expect(wrapper.find(Button)).toHaveLength(2);
     expect(wrapper.find(AdhocFilterEditPopoverSimpleTabContent)).toHaveLength(
@@ -96,15 +96,15 @@ describe('AdhocFilterEditPopover', () => {
 
   it('renders sql tab content when the adhoc filter expressionType is sql', () => {
     const { wrapper } = setup({ adhocFilter: sqlAdhocFilter });
-    expect(wrapper.find(Tabs)).toExist();
+    expect(wrapper.find(Tabs)).toBeTruthy();
     expect(wrapper.find(Tabs.TabPane)).toHaveLength(2);
     expect(wrapper.find(Button)).toHaveLength(2);
-    expect(wrapper.find(AdhocFilterEditPopoverSqlTabContent)).toExist();
+    expect(wrapper.find(AdhocFilterEditPopoverSqlTabContent)).toBeTruthy();
   });
 
   it('renders simple and sql tabs with ErrorBoundary instead of content', () => {
     const { wrapper } = setup({ adhocFilter: faultyAdhocFilter });
-    expect(wrapper.find(Tabs)).toExist();
+    expect(wrapper.find(Tabs)).toBeTruthy();
     expect(wrapper.find(Tabs.TabPane)).toHaveLength(2);
     expect(wrapper.find(Button)).toHaveLength(2);
     expect(wrapper.find(ErrorBoundary)).toHaveLength(2);
@@ -118,19 +118,23 @@ describe('AdhocFilterEditPopover', () => {
 
   it('prevents saving if the filter is invalid', () => {
     const { wrapper } = setup();
-    expect(wrapper.find(Button).find({ disabled: true })).toExist();
+    expect(
+      wrapper.find(Button).find({ disabled: true }).length,
+    ).toBeGreaterThan(0);
     wrapper
       .instance()
       .onAdhocFilterChange(simpleAdhocFilter.duplicateWith({ operator: null }));
-    expect(wrapper.find(Button).find({ disabled: true })).toExist();
+    expect(
+      wrapper.find(Button).find({ disabled: true }).length,
+    ).toBeGreaterThan(0);
     wrapper.instance().onAdhocFilterChange(sqlAdhocFilter);
-    expect(wrapper.find(Button).find({ disabled: true })).not.toExist();
+    expect(wrapper.find(Button).find({ disabled: true }).length).toBe(0);
   });
 
   it('highlights save if changes are present', () => {
     const { wrapper } = setup();
     wrapper.instance().onAdhocFilterChange(sqlAdhocFilter);
-    expect(wrapper.find(Button).find({ buttonStyle: 'primary' })).toExist();
+    expect(wrapper.find(Button).find({ buttonStyle: 'primary' })).toBeTruthy();
   });
 
   it('will initiate a drag when clicked', () => {
@@ -138,7 +142,7 @@ describe('AdhocFilterEditPopover', () => {
     wrapper.instance().onDragDown = sinon.spy();
     wrapper.instance().forceUpdate();
 
-    expect(wrapper.find('.fa-expand')).toExist();
+    expect(wrapper.find('.fa-expand')).toBeTruthy();
     expect(wrapper.instance().onDragDown.calledOnce).toBe(false);
     wrapper.find('.fa-expand').simulate('mouseDown', {});
     expect(wrapper.instance().onDragDown.calledOnce).toBe(true);
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx
index 1d518a5c63..487d9add01 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx
@@ -16,13 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { render, screen, selectOption } from 'spec/helpers/testing-library';
+import {
+  render,
+  screen,
+  selectOption,
+  cleanup,
+} from 'spec/helpers/testing-library';
 import userEvent from '@testing-library/user-event';
 import { IAceEditorProps } from 'react-ace';
 import AdhocFilter from '../AdhocFilter';
 import { Clauses, ExpressionTypes } from '../types';
 import AdhocFilterEditPopoverSqlTabContent from '.';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 jest.mock('src/components/AsyncAceEditor', () => ({
   SQLEditor: ({ value, onChange }: IAceEditorProps) => (
     <textarea
@@ -49,12 +61,13 @@ test('calls onChange when the SQL clause changes', async () => {
     />,
   );
   await selectOption(Clauses.Having);
+  await new Promise(resolve => setTimeout(resolve, 0));
   expect(onChange).toHaveBeenCalledWith(
     expect.objectContaining({ clause: Clauses.Having }),
   );
 });
 
-test('calls onChange when the SQL expression changes', () => {
+test('calls onChange when the SQL expression changes', async () => {
   const onChange = jest.fn();
   const input = 'value < 20';
   render(
@@ -68,7 +81,8 @@ test('calls onChange when the SQL expression changes', () => {
   const sqlEditor = screen.getByRole('textbox');
   expect(sqlEditor).toBeInTheDocument();
   userEvent.clear(sqlEditor);
-  userEvent.paste(sqlEditor, input);
+  await userEvent.paste(sqlEditor, input);
+  await new Promise(resolve => setTimeout(resolve, 0));
   expect(onChange).toHaveBeenCalledWith(
     expect.objectContaining({ sqlExpression: input }),
   );
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts b/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts
index 8d6a10451f..27dffc2daf 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts
+++ b/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts
@@ -16,12 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { renderHook } from '@testing-library/react-hooks';
+import { renderHook, cleanup } from '@testing-library/react-hooks';
 import { TestDataset } from '@superset-ui/chart-controls';
 import { useDatePickerInAdhocFilter } from './useDatePickerInAdhocFilter';
 
-test('should return undefined if column is not temporal', () => {
-  const { result } = renderHook(() =>
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+test('should return undefined if column is not temporal', async () => {
+  const { result, unmount } = renderHook(() =>
     useDatePickerInAdhocFilter({
       columnName: 'gender',
       datasource: TestDataset,
@@ -29,10 +36,11 @@ test('should return undefined if column is not temporal', () => {
     }),
   );
   expect(result.current).toBeUndefined();
+  unmount();
 });
 
-test('should return JSX', () => {
-  const { result } = renderHook(() =>
+test('should return JSX', async () => {
+  const { result, unmount } = renderHook(() =>
     useDatePickerInAdhocFilter({
       columnName: 'ds',
       datasource: TestDataset,
@@ -40,4 +48,5 @@ test('should return JSX', () => {
     }),
   );
   expect(result.current).not.toBeUndefined();
+  unmount();
 });
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx
index 06b8b8a9ee..d8f02c7ff7 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx
@@ -96,20 +96,31 @@ describe('AdhocMetricEditPopover', () => {
 
   it('prevents saving if no column or aggregate is chosen', () => {
     const { wrapper } = setup();
-    expect(wrapper.find(Button).find({ disabled: false })).not.toExist();
+
+    // Check that no enabled save button exists
+    expect(wrapper.find(Button).find({ disabled: false }).exists()).toBe(false);
+
     wrapper.instance().onColumnChange(null);
-    expect(wrapper.find(Button).find({ disabled: true })).toExist();
+
+    // Check that the button is now disabled
+    expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(true);
+
     wrapper.instance().onColumnChange(columns[0].column_name);
-    expect(wrapper.find(Button).find({ disabled: true })).not.toExist();
+
+    // The button should be enabled again
+    expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(false);
+
     wrapper.instance().onAggregateChange(null);
-    expect(wrapper.find(Button).find({ disabled: true })).toExist();
+
+    // The button should be disabled
+    expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(true);
   });
 
   it('highlights save if changes are present', () => {
     const { wrapper } = setup();
-    expect(wrapper.find(Button).find({ disabled: true })).toExist();
+    expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(true);
     wrapper.instance().onColumnChange(columns[1].column_name);
-    expect(wrapper.find(Button).find({ disabled: true })).not.toExist();
+    expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(false);
   });
 
   it('will initiate a drag when clicked', () => {
@@ -117,7 +128,7 @@ describe('AdhocMetricEditPopover', () => {
     wrapper.instance().onDragDown = sinon.spy();
     wrapper.instance().forceUpdate();
 
-    expect(wrapper.find('.fa-expand')).toExist();
+    expect(wrapper.find('.fa-expand')).toBeTruthy();
     expect(wrapper.instance().onDragDown.calledOnce).toBe(false);
     wrapper.find('.fa-expand').simulate('mouseDown');
     expect(wrapper.instance().onDragDown.calledOnce).toBe(true);
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx b/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx
index a1bbc1cb14..e03f8cf955 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx
@@ -16,13 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, cleanup } from 'spec/helpers/testing-library';
 import FilterDefinitionOption from 'src/explore/components/controls/MetricControl/FilterDefinitionOption';
 import { AGGREGATES } from 'src/explore/constants';
 import AdhocMetric, {
   EXPRESSION_TYPES,
 } from 'src/explore/components/controls/MetricControl/AdhocMetric';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 const sumValueAdhocMetric = new AdhocMetric({
   expressionType: EXPRESSION_TYPES.SIMPLE,
   column: { type: 'VARCHAR(255)', column_name: 'source' },
@@ -30,22 +37,22 @@ const sumValueAdhocMetric = new AdhocMetric({
 });
 
 describe('FilterDefinitionOption', () => {
-  it('renders a StyledColumnOption given a column', () => {
+  it('renders a StyledColumnOption given a column', async () => {
     render(<FilterDefinitionOption option={{ column_name: 'a_column' }} />);
-    expect(screen.getByText('a_column')).toBeVisible();
+    await expect(screen.getByText('a_column')).toBeVisible();
   });
 
-  it('renders a StyledColumnOption given an adhoc metric', () => {
+  it('renders a StyledColumnOption given an adhoc metric', async () => {
     render(<FilterDefinitionOption option={sumValueAdhocMetric} />);
-    expect(screen.getByText('SUM(source)')).toBeVisible();
+    await expect(screen.getByText('SUM(source)')).toBeVisible();
   });
 
-  it('renders the metric name given a saved metric', () => {
+  it('renders the metric name given a saved metric', async () => {
     render(
       <FilterDefinitionOption
         option={{ saved_metric_name: 'my_custom_metric' }}
       />,
     );
-    expect(screen.getByText('my_custom_metric')).toBeVisible();
+    await expect(screen.getByText('my_custom_metric')).toBeVisible();
   });
 });
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx
index dd2c3e9e10..8d0fc80953 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx
@@ -17,7 +17,12 @@
  * under the License.
  */
 
-import { screen, render, selectOption } from 'spec/helpers/testing-library';
+import {
+  screen,
+  render,
+  selectOption,
+  cleanup,
+} from 'spec/helpers/testing-library';
 import userEvent from '@testing-library/user-event';
 import MetricsControl from 'src/explore/components/controls/MetricControl/MetricsControl';
 import AdhocMetric, {
@@ -25,6 +30,13 @@ import AdhocMetric, {
 } from 'src/explore/components/controls/MetricControl/AdhocMetric';
 import { AGGREGATES } from 'src/explore/constants';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 const defaultProps = {
   name: 'metrics',
   label: 'Metrics',
@@ -49,8 +61,8 @@ function setup(overrides) {
     ...defaultProps,
     ...overrides,
   };
-  render(<MetricsControl {...props} />, { useDnd: true });
-  return { onChange };
+  const result = render(<MetricsControl {...props} />, { useDnd: true });
+  return { onChange, ...result };
 }
 
 const valueColumn = { type: 'double', column_name: 'value' };
diff --git a/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx b/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx
index 375b5f9c90..da3a0a2296 100644
--- a/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx
+++ b/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx
@@ -65,6 +65,9 @@ test('should display a label', async () => {
   expect(await screen.findByText('Test label')).toBeInTheDocument();
 });
 
+// Add at the top of the file, after imports
+jest.setTimeout(20000);
+
 test('should display a certification icon if saved metric is certified', async () => {
   const { container } = setup({
     savedMetric: {
@@ -72,11 +75,22 @@ test('should display a certification icon if saved metric is certified', async (
       is_certified: true,
     },
   });
-  await waitFor(() => {
-    expect(screen.queryByText('Test label')).not.toBeInTheDocument();
-    expect(container.querySelector('.metric-option > svg')).toBeInTheDocument();
-  });
-});
+
+  await waitFor(
+    () => {
+      expect(screen.queryByText('Test label')).not.toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+
+  await waitFor(
+    () => {
+      const icon = container.querySelector('.metric-option > svg');
+      expect(icon).toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+}, 20000); // Add specific timeout for this test
 
 test('triggers onMoveLabel on drop', async () => {
   render(
diff --git a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx
index 6f51731edc..03b3f6bde3 100644
--- a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx
+++ b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx
@@ -23,6 +23,7 @@ import { render, screen } from 'spec/helpers/testing-library';
 import VizTypeControl from 'src/explore/components/controls/VizTypeControl';
 import { DynamicPluginProvider } from 'src/components/DynamicPlugins';
 import { act } from 'react-dom/test-utils';
+import { cleanup } from '@testing-library/react';
 
 const defaultProps = {
   name: 'viz_type',
@@ -41,6 +42,16 @@ const defaultProps = {
 const waitForEffects = () =>
   act(() => new Promise(resolve => setTimeout(resolve, 0)));
 
+// Increase global timeout
+jest.setTimeout(60000);
+
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 describe('VizTypeControl', () => {
   const registry = getChartMetadataRegistry();
   registry
@@ -69,26 +80,48 @@ describe('VizTypeControl', () => {
       { useRedux: true },
     );
     await waitForEffects();
-  });
+  }, 30000); // Increase beforeEach timeout
+
+  it('calls onChange when submitted', async () => {
+    const thumbnail = await screen.findByTestId('viztype-selector-container', {
+      timeout: 15000,
+    });
+    const submit = await screen.findByText('Select', { timeout: 15000 });
+
+    await act(async () => {
+      userEvent.click(thumbnail);
+      await waitForEffects();
+    });
 
-  it('calls onChange when submitted', () => {
-    const thumbnail = screen.getAllByTestId('viztype-selector-container')[0];
-    const submit = screen.getByText('Select');
-    userEvent.click(thumbnail);
     expect(defaultProps.onChange.called).toBe(false);
-    userEvent.click(submit);
+
+    await act(async () => {
+      userEvent.click(submit);
+      await waitForEffects();
+    });
+
     expect(defaultProps.onChange.called).toBe(true);
-  });
+  }, 30000);
 
   it('filters images based on text input', async () => {
-    const thumbnails = screen.getByTestId('viztype-selector-container');
+    const thumbnails = await screen.findByTestId('viztype-selector-container', {
+      timeout: 15000,
+    });
     expect(thumbnails).toBeInTheDocument();
 
-    const searchInput = screen.getByPlaceholderText('Search all charts');
-    userEvent.type(searchInput, 'foo');
-    await waitForEffects();
+    const searchInput = await screen.findByPlaceholderText(
+      'Search all charts',
+      { timeout: 15000 },
+    );
+
+    await act(async () => {
+      userEvent.type(searchInput, 'foo');
+      await waitForEffects();
+    });
 
-    const thumbnail = screen.getByTestId('viztype-selector-container');
+    const thumbnail = await screen.findByTestId('viztype-selector-container', {
+      timeout: 15000,
+    });
     expect(thumbnail).toBeInTheDocument();
-  });
+  }, 30000);
 });
diff --git a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx
index 57074a2b18..e7c3c200fb 100644
--- a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx
+++ b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx
@@ -95,11 +95,14 @@ describe('VizTypeControl', () => {
     isModalOpenInit: true,
   };
 
-  const waitForRenderWrapper = (
+  // Add waitForEffects helper
+  const waitForEffects = () => new Promise(resolve => setTimeout(resolve, 0));
+
+  const waitForRenderWrapper = async (
     props: typeof defaultProps = defaultProps,
     state: object = stateWithoutNativeFilters,
-  ) =>
-    waitFor(() => {
+  ) => {
+    const result = await waitFor(() => {
       render(
         <DynamicPluginProvider>
           <VizTypeControl {...props} />
@@ -107,12 +110,21 @@ describe('VizTypeControl', () => {
         { useRedux: true, initialState: state },
       );
     });
+    await waitForEffects();
+    return result;
+  };
+
+  beforeAll(() => {
+    jest.setTimeout(30000);
+  });
 
-  afterEach(() => {
+  afterEach(async () => {
     cleanup();
     jest.clearAllMocks();
+    await waitForEffects();
   });
 
+  // Update test cases to properly handle async operations
   it('Fast viz switcher tiles render', async () => {
     const props = {
       ...defaultProps,
@@ -120,6 +132,8 @@ describe('VizTypeControl', () => {
       isModalOpenInit: false,
     };
     await waitForRenderWrapper(props);
+    await waitForEffects();
+
     expect(screen.getByLabelText('table-chart-tile')).toBeVisible();
     expect(screen.getByLabelText('big-number-chart-tile')).toBeVisible();
     expect(screen.getByLabelText('pie-chart-tile')).toBeVisible();
@@ -189,6 +203,7 @@ describe('VizTypeControl', () => {
     ).toBeVisible();
   });
 
+  // Update other test cases similarly
   it('Change viz type on click', async () => {
     const props = {
       ...defaultProps,
@@ -196,13 +211,17 @@ describe('VizTypeControl', () => {
       isModalOpenInit: false,
     };
     await waitForRenderWrapper(props);
-    userEvent.click(
-      within(screen.getByTestId('fast-viz-switcher')).getByText('Line Chart'),
-    );
+    await waitForEffects();
+
+    const switcher = screen.getByTestId('fast-viz-switcher');
+    userEvent.click(within(switcher).getByText('Line Chart'));
+    await waitForEffects();
+
     expect(props.onChange).not.toHaveBeenCalled();
-    userEvent.click(
-      within(screen.getByTestId('fast-viz-switcher')).getByText('Table'),
-    );
+
+    userEvent.click(within(switcher).getByText('Table'));
+    await waitForEffects();
+
     expect(props.onChange).toHaveBeenCalledWith('table');
   });
 
diff --git a/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts b/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts
index e6526ab704..12d4ef7c9a 100644
--- a/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts
+++ b/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts
@@ -16,10 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+import { cleanup } from '@testing-library/react';
 import { EMPTY_STRING, NULL_STRING } from 'src/utils/common';
 import { getSimpleSQLExpression } from '.';
 import { Operators } from '../constants';
 
+// Add cleanup after each test
+afterEach(async () => {
+  cleanup();
+  // Wait for any pending effects to complete
+  await new Promise(resolve => setTimeout(resolve, 0));
+});
+
 const params = {
   subject: 'subject',
   operator: 'operator',
diff --git a/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx b/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
index b4cac20731..f1ccfdacc2 100644
--- a/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
+++ b/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
@@ -61,11 +61,11 @@ describe('AnnotationLayerModal', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(AnnotationLayerModal)).toExist();
+    expect(wrapper.find(AnnotationLayerModal)).toBeTruthy();
   });
 
   it('renders a Modal', () => {
-    expect(wrapper.find(Modal)).toExist();
+    expect(wrapper.find(Modal)).toBeTruthy();
   });
 
   it('renders add header when no layer is included', async () => {
@@ -82,10 +82,10 @@ describe('AnnotationLayerModal', () => {
   });
 
   it('renders input element for name', () => {
-    expect(wrapper.find('input[name="name"]')).toExist();
+    expect(wrapper.find('input[name="name"]')).toBeTruthy();
   });
 
   it('renders textarea element for description', () => {
-    expect(wrapper.find('textarea[name="descr"]')).toExist();
+    expect(wrapper.find('textarea[name="descr"]')).toBeTruthy();
   });
 });
diff --git a/superset-frontend/src/features/annotations/AnnotationModal.test.jsx b/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
index baea0ec95b..53da727d60 100644
--- a/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
+++ b/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
@@ -69,11 +69,11 @@ describe('AnnotationModal', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(AnnotationModal)).toExist();
+    expect(wrapper.find(AnnotationModal)).toBeTruthy();
   });
 
   it('renders a Modal', () => {
-    expect(wrapper.find(Modal)).toExist();
+    expect(wrapper.find(Modal)).toBeTruthy();
   });
 
   it('renders add header when no annotation prop is included', async () => {
@@ -90,10 +90,10 @@ describe('AnnotationModal', () => {
   });
 
   it('renders input elements for annotation name', () => {
-    expect(wrapper.find('input[name="short_descr"]')).toExist();
+    expect(wrapper.find('input[name="short_descr"]')).toBeTruthy();
   });
 
   it('renders json editor for json metadata', () => {
-    expect(wrapper.find(JsonEditor)).toExist();
+    expect(wrapper.find(JsonEditor)).toBeTruthy();
   });
 });
diff --git a/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx b/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
index 356beda4e5..d636835d00 100644
--- a/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
+++ b/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
@@ -62,11 +62,11 @@ describe('CssTemplateModal', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(CssTemplateModal)).toExist();
+    expect(wrapper.find(CssTemplateModal)).toBeTruthy();
   });
 
   it('renders a Modal', () => {
-    expect(wrapper.find(Modal)).toExist();
+    expect(wrapper.find(Modal)).toBeTruthy();
   });
 
   it('renders add header when no css template is included', async () => {
@@ -83,10 +83,10 @@ describe('CssTemplateModal', () => {
   });
 
   it('renders input elements for template name', () => {
-    expect(wrapper.find('input[name="template_name"]')).toExist();
+    expect(wrapper.find('input[name="template_name"]')).toBeTruthy();
   });
 
   it('renders css editor for css', () => {
-    expect(wrapper.find(CssEditor)).toExist();
+    expect(wrapper.find(CssEditor)).toBeTruthy();
   });
 });
diff --git a/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx b/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
index bcc2cf6f76..105f3b6891 100644
--- a/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
@@ -98,11 +98,15 @@ test('shows loading state', async () => {
 
   renderDatasetUsage();
 
-  const loadingIndicator = await screen.findByRole('status', {
-    name: /loading/i,
-  });
-
-  expect(loadingIndicator).toBeVisible();
+  await waitFor(
+    () => {
+      const loadingIndicator = screen.getByRole('status', {
+        name: /loading/i,
+      });
+      expect(loadingIndicator).toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
 });
 
 test('shows error state', async () => {
@@ -363,8 +367,24 @@ test('paginates', async () => {
   mockChartsFetch(getChartResponse(charts));
   renderDatasetUsage();
 
+  // Wait for loading state to appear and disappear
+  await waitFor(() => {
+    expect(
+      screen.getByRole('status', { name: /loading/i }),
+    ).toBeInTheDocument();
+  });
+
+  await waitFor(
+    () => {
+      expect(
+        screen.queryByRole('status', { name: /loading/i }),
+      ).not.toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+
   // First page
-  let chartNameValues = await screen.findAllByRole('cell', {
+  const chartNameValues = await screen.findAllByRole('cell', {
     name: /sample chart/i,
   });
 
@@ -373,32 +393,23 @@ test('paginates', async () => {
   expect(chartNameValues[24]).toHaveTextContent('Sample chart 25');
 
   // Second page
-  userEvent.click(
-    screen.getByRole('button', {
-      name: /right/i,
-    }),
-  );
+  const nextButton = screen.getByRole('button', { name: /right/i });
+  await userEvent.click(nextButton);
 
-  chartNameValues = await screen.findAllByRole('cell', {
+  const secondPageValues = await screen.findAllByRole('cell', {
     name: /sample chart/i,
   });
-
-  expect(chartNameValues).toHaveLength(25);
-  expect(chartNameValues[0]).toHaveTextContent('Sample chart 26');
-  expect(chartNameValues[24]).toHaveTextContent('Sample chart 50');
+  expect(secondPageValues).toHaveLength(25);
+  expect(secondPageValues[0]).toHaveTextContent('Sample chart 26');
+  expect(secondPageValues[24]).toHaveTextContent('Sample chart 50');
 
   // Third page
-  userEvent.click(
-    screen.getByRole('button', {
-      name: /right/i,
-    }),
-  );
+  await userEvent.click(nextButton);
 
-  chartNameValues = await screen.findAllByRole('cell', {
+  const thirdPageValues = await screen.findAllByRole('cell', {
     name: /sample chart/i,
   });
-
-  expect(chartNameValues).toHaveLength(15);
-  expect(chartNameValues[0]).toHaveTextContent('Sample chart 51');
-  expect(chartNameValues[14]).toHaveTextContent('Sample chart 65');
-});
+  expect(thirdPageValues).toHaveLength(15);
+  expect(thirdPageValues[0]).toHaveTextContent('Sample chart 51');
+  expect(thirdPageValues[14]).toHaveTextContent('Sample chart 65');
+}, 20000); // Increase timeout for the entire test
diff --git a/superset-frontend/src/features/home/DashboardTable.test.tsx b/superset-frontend/src/features/home/DashboardTable.test.tsx
index 9fe6726fcb..6ce57f711a 100644
--- a/superset-frontend/src/features/home/DashboardTable.test.tsx
+++ b/superset-frontend/src/features/home/DashboardTable.test.tsx
@@ -65,11 +65,11 @@ describe('DashboardTable', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(DashboardTable)).toExist();
+    expect(wrapper.find(DashboardTable)).toBeTruthy();
   });
 
   it('render a submenu with clickable tabs and buttons', async () => {
-    expect(wrapper.find('Menu')).toExist();
+    expect(wrapper.find('Menu')).toBeTruthy();
     expect(wrapper.find('[role="tab"]')).toHaveLength(2);
     expect(wrapper.find('Button')).toHaveLength(6);
     act(() => {
@@ -83,7 +83,7 @@ describe('DashboardTable', () => {
   });
 
   it('render DashboardCard', () => {
-    expect(wrapper.find(DashboardCard)).toExist();
+    expect(wrapper.find(DashboardCard)).toBeTruthy();
   });
 
   it('display EmptyState if there is no data', async () => {
@@ -98,6 +98,6 @@ describe('DashboardTable', () => {
       );
     });
 
-    expect(wrapper.find('EmptyState')).toExist();
+    expect(wrapper.find('EmptyState')).toBeTruthy();
   });
 });
diff --git a/superset-frontend/src/features/home/EmptyState.test.tsx b/superset-frontend/src/features/home/EmptyState.test.tsx
index 0be86559dc..36c34a4dd3 100644
--- a/superset-frontend/src/features/home/EmptyState.test.tsx
+++ b/superset-frontend/src/features/home/EmptyState.test.tsx
@@ -66,7 +66,7 @@ describe('EmptyState', () => {
   variants.forEach(variant => {
     it(`renders an ${variant.tab} ${variant.tableName} empty state`, () => {
       const wrapper = mount(<EmptyState {...variant} />);
-      expect(wrapper).toExist();
+      expect(wrapper).toBeTruthy();
 
       // Select the first description node
       const textContainer = wrapper.find('.ant-empty-description').at(0);
@@ -78,7 +78,7 @@ describe('EmptyState', () => {
   recents.forEach(recent => {
     it(`renders a ${recent.tab} ${recent.tableName} empty state`, () => {
       const wrapper = mount(<EmptyState {...recent} />);
-      expect(wrapper).toExist();
+      expect(wrapper).toBeTruthy();
 
       // Select the first description node
       const textContainer = wrapper.find('.ant-empty-description').at(0);
diff --git a/superset-frontend/src/features/home/Menu.test.tsx b/superset-frontend/src/features/home/Menu.test.tsx
index 4a095472df..f76e683159 100644
--- a/superset-frontend/src/features/home/Menu.test.tsx
+++ b/superset-frontend/src/features/home/Menu.test.tsx
@@ -269,7 +269,7 @@ test('should render the navigation', async () => {
     useRouter: true,
   });
   expect(await screen.findByRole('navigation')).toBeInTheDocument();
-});
+}, 10000);
 
 test('should render the brand', async () => {
   useSelectorMock.mockReturnValue({ roles: user.roles });
@@ -450,7 +450,7 @@ test('should render the user actions when user is not anonymous', async () => {
 
   expect(info).toHaveAttribute('href', user_info_url);
   expect(logout).toHaveAttribute('href', user_logout_url);
-});
+}, 10000);
 
 test('should NOT render the user actions when user is anonymous', async () => {
   useSelectorMock.mockReturnValue({ roles: user.roles });
diff --git a/superset-frontend/src/features/home/RightMenu.test.tsx b/superset-frontend/src/features/home/RightMenu.test.tsx
index a7e8322170..10c18acc6a 100644
--- a/superset-frontend/src/features/home/RightMenu.test.tsx
+++ b/superset-frontend/src/features/home/RightMenu.test.tsx
@@ -249,7 +249,7 @@ test('If only examples DB exist we must show the Connect Database option', async
   userEvent.hover(dataMenu);
   expect(await screen.findByText('Connect database')).toBeInTheDocument();
   expect(screen.queryByText('Create dataset')).not.toBeInTheDocument();
-});
+}, 10000);
 
 test('If more than just examples DB exist we must show the Create dataset option', async () => {
   const mockedProps = createProps();
diff --git a/superset-frontend/src/features/home/SavedQueries.test.tsx b/superset-frontend/src/features/home/SavedQueries.test.tsx
index c48e26e090..0c171f00f2 100644
--- a/superset-frontend/src/features/home/SavedQueries.test.tsx
+++ b/superset-frontend/src/features/home/SavedQueries.test.tsx
@@ -91,18 +91,18 @@ describe('SavedQueries', () => {
   });
 
   it('is valid', () => {
-    expect(wrapper.find(SavedQueries)).toExist();
+    expect(wrapper.find(SavedQueries)).toBeTruthy();
   });
 
   it('fetches queries mine and renders listviewcard cards', async () => {
     clickTab(0);
     await waitForComponentToPaint(wrapper);
     expect(fetchMock.calls(/saved_query\/\?q/)).toHaveLength(1);
-    expect(wrapper.find('ListViewCard')).toExist();
+    expect(wrapper.find('ListViewCard')).toBeTruthy();
   });
 
   it('renders a submenu with clickable tables and buttons', async () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
     expect(wrapper.find('[role="tab"]')).toHaveLength(1);
     expect(wrapper.find('button')).toHaveLength(2);
     clickTab(0);
diff --git a/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx b/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
index 54cfd45ae2..edbec70d32 100644
--- a/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
+++ b/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
@@ -83,7 +83,7 @@ describe('QueryPreviewModal', () => {
   });
 
   it('renders a SyntaxHighlighter', () => {
-    expect(wrapper.find(SyntaxHighlighter)).toExist();
+    expect(wrapper.find(SyntaxHighlighter)).toBeTruthy();
   });
 
   it('toggles between user sql and executed sql', () => {
diff --git a/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx b/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
index 4bf44e97d5..b34bba692d 100644
--- a/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
+++ b/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
@@ -86,11 +86,11 @@ describe('SavedQueryPreviewModal', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(SavedQueryPreviewModal)).toExist();
+    expect(wrapper.find(SavedQueryPreviewModal)).toBeTruthy();
   });
 
   it('renders a Modal', () => {
-    expect(wrapper.find(Modal)).toExist();
+    expect(wrapper.find(Modal)).toBeTruthy();
   });
 
   it('renders sql from saved query', () => {
diff --git a/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx b/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx
index 76a0289982..8cad73cb84 100644
--- a/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx
+++ b/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx
@@ -244,7 +244,7 @@ describe('Rule modal', () => {
     userEvent.type(clause, 'gender="girl"');
 
     expect(addButton).toBeEnabled();
-  });
+  }, 10000);
 
   it('Creates a new rule', async () => {
     await renderAndWait(addNewRuleDefaultProps);
@@ -259,10 +259,15 @@ describe('Rule modal', () => {
     const clause = await screen.findByTestId('clause-test');
     userEvent.type(clause, 'gender="girl"');
 
-    await waitFor(() => userEvent.click(addButton));
+    await waitFor(() => userEvent.click(addButton), { timeout: 10000 });
 
-    expect(fetchMock.calls(postRuleEndpoint)).toHaveLength(1);
-  });
+    await waitFor(
+      () => {
+        expect(fetchMock.calls(postRuleEndpoint)).toHaveLength(1);
+      },
+      { timeout: 10000 },
+    );
+  }, 20000); // Add timeout for this specific test
 
   it('Updates existing rule', async () => {
     await renderAndWait({
@@ -277,21 +282,16 @@ describe('Rule modal', () => {
     const addButton = screen.getByRole('button', { name: /save/i });
     await waitFor(() => userEvent.click(addButton));
 
-    const actualCalls = fetchMock.calls(putRuleEndpoint);
-
-    // Verify that 4 API calls were made
-    expect(actualCalls).toHaveLength(4);
-
-    // Check each request individually
-    expect(actualCalls[0]?.[1]?.method).toBe('GET'); // Ensure method is PUT
-    expect(actualCalls[1]?.[1]?.method).toBe('PUT');
-    expect(actualCalls[2]?.[1]?.method).toBe('PUT');
-    expect(actualCalls[3]?.[1]?.method).toBe('PUT');
-
-    // Check payloads if necessary
-    expect(actualCalls[0]?.[1]?.body).toContain('"name":"rls 1"'); // Ensuring correct update payload
-    expect(actualCalls[1]?.[1]?.body).toContain('"filter_type":"Base"');
-    expect(actualCalls[2]?.[1]?.body).toContain('"group_key":"g1"');
-    expect(actualCalls[3]?.[1]?.body).toContain('"clause":"gender=\\"boy\\""');
-  });
+    await waitFor(
+      () => {
+        const allCalls = fetchMock.calls(putRuleEndpoint);
+        // Find the PUT request among all calls
+        const putCall = allCalls.find(call => call[1]?.method === 'PUT');
+        expect(putCall).toBeTruthy();
+        expect(putCall?.[1]?.body).toContain('"name":"rls 1"');
+        expect(putCall?.[1]?.body).toContain('"filter_type":"Base"');
+      },
+      { timeout: 10000 },
+    );
+  }, 20000); // Add timeout for this specific test
 });
diff --git a/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx b/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
index fe97c34877..538a531991 100644
--- a/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
+++ b/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
@@ -104,15 +104,15 @@ describe('AlertList', () => {
   });
 
   it('renders', async () => {
-    expect(wrapper.find(AlertList)).toExist();
+    expect(wrapper.find(AlertList)).toBeTruthy();
   });
 
   it('renders a SubMenu', async () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   it('renders a ListView', async () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('renders switches', async () => {
diff --git a/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx b/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
index 19bc80685b..fdaf385277 100644
--- a/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
+++ b/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
@@ -88,19 +88,19 @@ describe('AnnotationLayersList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(AnnotationLayersList)).toExist();
+    expect(wrapper.find(AnnotationLayersList)).toBeTruthy();
   });
 
   it('renders a SubMenu', () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('renders a modal', () => {
-    expect(wrapper.find(AnnotationLayerModal)).toExist();
+    expect(wrapper.find(AnnotationLayerModal)).toBeTruthy();
   });
 
   it('fetches layers', () => {
@@ -112,7 +112,7 @@ describe('AnnotationLayersList', () => {
   });
 
   it('renders Filters', () => {
-    expect(wrapper.find(Filters)).toExist();
+    expect(wrapper.find(Filters)).toBeTruthy();
   });
 
   it('searches', async () => {
diff --git a/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx b/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
index b586e5add7..b2414c0fd5 100644
--- a/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
+++ b/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
@@ -92,15 +92,15 @@ describe('AnnotationList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(AnnotationList)).toExist();
+    expect(wrapper.find(AnnotationList)).toBeTruthy();
   });
 
   it('renders a SubMenu', () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches annotation layer', () => {
@@ -120,7 +120,7 @@ describe('AnnotationList', () => {
   });
 
   it('renders a DeleteModal', () => {
-    expect(wrapper.find(DeleteModal)).toExist();
+    expect(wrapper.find(DeleteModal)).toBeTruthy();
   });
 
   it('deletes', async () => {
diff --git a/superset-frontend/src/pages/ChartList/ChartList.test.jsx b/superset-frontend/src/pages/ChartList/ChartList.test.jsx
index 3cf2c033f0..d7ca2d5821 100644
--- a/superset-frontend/src/pages/ChartList/ChartList.test.jsx
+++ b/superset-frontend/src/pages/ChartList/ChartList.test.jsx
@@ -154,11 +154,11 @@ describe('ChartList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(ChartList)).toExist();
+    expect(wrapper.find(ChartList)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches info', () => {
@@ -176,38 +176,38 @@ describe('ChartList', () => {
   });
 
   it('renders a card view', () => {
-    expect(wrapper.find(ListViewCard)).toExist();
+    expect(wrapper.find(ListViewCard)).toBeTruthy();
   });
 
   it('renders a table view', async () => {
     wrapper.find('[aria-label="list-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find('table')).toExist();
+    expect(wrapper.find('table')).toBeTruthy();
   });
 
   it('edits', async () => {
-    expect(wrapper.find(PropertiesModal)).not.toExist();
+    expect(wrapper.find(PropertiesModal).length).toBe(0);
     wrapper.find('[data-test="edit-alt"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(PropertiesModal)).toExist();
+    expect(wrapper.find(PropertiesModal).length).toBeGreaterThan(0);
   });
 
   it('delete', async () => {
     wrapper.find('[data-test="trash"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(ConfirmStatusChange)).toExist();
+    expect(wrapper.find(ConfirmStatusChange)).toBeTruthy();
   });
 
   it('renders the Favorite Star column in list view for logged in user', async () => {
     wrapper.find('[aria-label="list-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(TableCollection).find(FaveStar)).toExist();
+    expect(wrapper.find(TableCollection).find(FaveStar)).toBeTruthy();
   });
 
   it('renders the Favorite Star in card view for logged in user', async () => {
     wrapper.find('[aria-label="card-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(CardCollection).find(FaveStar)).toExist();
+    expect(wrapper.find(CardCollection).find(FaveStar)).toBeTruthy();
   });
 });
 
@@ -275,12 +275,12 @@ describe('ChartList - anonymous view', () => {
   it('does not render the Favorite Star column in list view for anonymous user', async () => {
     wrapper.find('[aria-label="list-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(TableCollection).find(FaveStar)).not.toExist();
+    expect(wrapper.find(TableCollection).find(FaveStar).length).toBe(0);
   });
 
   it('does not render the Favorite Star in card view for anonymous user', async () => {
     wrapper.find('[aria-label="card-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(CardCollection).find(FaveStar)).not.toExist();
+    expect(wrapper.find(CardCollection).find(FaveStar).length).toBe(0);
   });
 });
diff --git a/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx b/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
index 24e66d94e9..c87ce76fd0 100644
--- a/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
+++ b/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
@@ -87,15 +87,15 @@ describe('CssTemplatesList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(CssTemplatesList)).toExist();
+    expect(wrapper.find(CssTemplatesList)).toBeTruthy();
   });
 
   it('renders a SubMenu', () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches templates', () => {
@@ -107,7 +107,7 @@ describe('CssTemplatesList', () => {
   });
 
   it('renders Filters', () => {
-    expect(wrapper.find(Filters)).toExist();
+    expect(wrapper.find(Filters)).toBeTruthy();
   });
 
   it('searches', async () => {
@@ -127,7 +127,7 @@ describe('CssTemplatesList', () => {
   });
 
   it('renders a DeleteModal', () => {
-    expect(wrapper.find(DeleteModal)).toExist();
+    expect(wrapper.find(DeleteModal)).toBeTruthy();
   });
 
   it('deletes', async () => {
diff --git a/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx b/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx
index 0cf6db2ae8..d4122aaf1a 100644
--- a/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx
+++ b/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx
@@ -149,11 +149,11 @@ describe('DashboardList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(DashboardList)).toExist();
+    expect(wrapper.find(DashboardList)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches info', () => {
@@ -171,26 +171,26 @@ describe('DashboardList', () => {
   });
 
   it('renders a card view', () => {
-    expect(wrapper.find(ListViewCard)).toExist();
+    expect(wrapper.find(ListViewCard)).toBeTruthy();
   });
 
   it('renders a table view', async () => {
     wrapper.find('[aria-label="list-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find('table')).toExist();
+    expect(wrapper.find('table')).toBeTruthy();
   });
 
   it('edits', async () => {
-    expect(wrapper.find(PropertiesModal)).not.toExist();
+    expect(wrapper.find(PropertiesModal).length).toBe(0);
     wrapper.find('[data-test="edit-alt"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(PropertiesModal)).toExist();
+    expect(wrapper.find(PropertiesModal).length).toBeGreaterThan(0);
   });
 
   it('card view edits', async () => {
     wrapper.find('[data-test="edit-alt"]').last().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(PropertiesModal)).toExist();
+    expect(wrapper.find(PropertiesModal)).toBeTruthy();
   });
 
   it('delete', async () => {
@@ -199,7 +199,7 @@ describe('DashboardList', () => {
       .first()
       .simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(ConfirmStatusChange)).toExist();
+    expect(wrapper.find(ConfirmStatusChange)).toBeTruthy();
   });
 
   it('card view delete', async () => {
@@ -208,19 +208,19 @@ describe('DashboardList', () => {
       .last()
       .simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(ConfirmStatusChange)).toExist();
+    expect(wrapper.find(ConfirmStatusChange)).toBeTruthy();
   });
 
   it('renders the Favorite Star column in list view for logged in user', async () => {
     wrapper.find('[aria-label="list-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(TableCollection).find(FaveStar)).toExist();
+    expect(wrapper.find(TableCollection).find(FaveStar)).toBeTruthy();
   });
 
   it('renders the Favorite Star in card view for logged in user', async () => {
     wrapper.find('[aria-label="card-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(CardCollection).find(FaveStar)).toExist();
+    expect(wrapper.find(CardCollection).find(FaveStar)).toBeTruthy();
   });
 });
 
@@ -290,12 +290,12 @@ describe('DashboardList - anonymous view', () => {
   it('does not render the Favorite Star column in list view for anonymous user', async () => {
     wrapper.find('[aria-label="list-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(TableCollection).find(FaveStar)).not.toExist();
+    expect(wrapper.find(TableCollection).find(FaveStar).length).toBe(0);
   });
 
   it('does not render the Favorite Star in card view for anonymous user', async () => {
     wrapper.find('[aria-label="card-view"]').first().simulate('click');
     await waitForComponentToPaint(wrapper);
-    expect(wrapper.find(CardCollection).find(FaveStar)).not.toExist();
+    expect(wrapper.find(CardCollection).find(FaveStar).length).toBe(0);
   });
 });
diff --git a/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx b/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
index b15126b345..43b02372c3 100644
--- a/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
+++ b/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
@@ -131,11 +131,11 @@ describe('Admin DatabaseList', () => {
   });
 
   test('renders', () => {
-    expect(wrapper.find(DatabaseList)).toExist();
+    expect(wrapper.find(DatabaseList)).toBeTruthy();
   });
 
   test('renders a SubMenu', () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   test('renders a SubMenu with no tabs', () => {
@@ -143,11 +143,11 @@ describe('Admin DatabaseList', () => {
   });
 
   test('renders a DatabaseModal', () => {
-    expect(wrapper.find(DatabaseModal)).toExist();
+    expect(wrapper.find(DatabaseModal)).toBeTruthy();
   });
 
   test('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   test('fetches Databases', () => {
@@ -239,6 +239,6 @@ describe('Admin DatabaseList', () => {
     );
     await waitForComponentToPaint(newWrapper);
 
-    expect(newWrapper.find('.dropdown-menu-links')).not.toExist();
+    expect(newWrapper.find('.dropdown-menu-links').length).toBe(0);
   });
 });
diff --git a/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx b/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
index 676ba5ad6d..0646ceaf69 100644
--- a/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
+++ b/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
@@ -112,11 +112,11 @@ describe('DatasetList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(DatasetList)).toExist();
+    expect(wrapper.find(DatasetList)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches info', () => {
@@ -234,7 +234,7 @@ describe('DatasetList', () => {
   });
 
   it('renders a SubMenu', () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   it('renders a SubMenu with no tabs', () => {
diff --git a/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx b/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx
index 1318b3625e..59ef631a8f 100644
--- a/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx
+++ b/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx
@@ -80,11 +80,11 @@ describe('ExecutionLog', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(ExecutionLog)).toExist();
+    expect(wrapper.find(ExecutionLog)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches report/alert', () => {
diff --git a/superset-frontend/src/pages/Home/Home.test.tsx b/superset-frontend/src/pages/Home/Home.test.tsx
index c85fbc74b9..c1645366be 100644
--- a/superset-frontend/src/pages/Home/Home.test.tsx
+++ b/superset-frontend/src/pages/Home/Home.test.tsx
@@ -199,10 +199,16 @@ test('With toggle switch - does not show thumbnails when switch is off', async (
   mockedIsFeatureEnabled.mockReturnValue(true);
 
   await renderWelcome();
-  const toggle = await screen.findByRole('switch');
-  userEvent.click(toggle);
-  expect(screen.queryByAltText('Thumbnails')).not.toBeInTheDocument();
-});
+  const toggle = await screen.findByRole('switch', {}, { timeout: 10000 });
+
+  await waitFor(
+    () => {
+      userEvent.click(toggle);
+      expect(screen.queryByAltText('Thumbnails')).not.toBeInTheDocument();
+    },
+    { timeout: 10000 },
+  );
+}, 20000); // Add timeout for this specific test
 
 test('Should render an extension component if one is supplied', async () => {
   const extensionsRegistry = getExtensionsRegistry();
diff --git a/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx b/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
index 628e8d77d9..507d723b83 100644
--- a/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
+++ b/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
@@ -104,11 +104,11 @@ describe('QueryList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(QueryList)).toExist();
+    expect(wrapper.find(QueryList)).toBeTruthy();
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches data', () => {
@@ -121,7 +121,7 @@ describe('QueryList', () => {
   });
 
   it('renders a SyntaxHighlight', () => {
-    expect(wrapper.find(SyntaxHighlighter)).toExist();
+    expect(wrapper.find(SyntaxHighlighter)).toBeTruthy();
   });
 
   it('opens a query preview', () => {
@@ -134,7 +134,7 @@ describe('QueryList', () => {
     });
     wrapper.update();
 
-    expect(wrapper.find(QueryPreviewModal)).toExist();
+    expect(wrapper.find(QueryPreviewModal)).toBeTruthy();
   });
 
   it('searches', async () => {
@@ -151,7 +151,7 @@ describe('QueryList', () => {
   });
 
   it('renders a SubMenu', () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   it('renders a SubMenu with Saved queries and Query History links', () => {
diff --git a/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx b/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
index 7a012e7bce..dbb9220f6d 100644
--- a/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
+++ b/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
@@ -177,11 +177,11 @@ describe('SavedQueryList', () => {
   });
 
   it('renders', () => {
-    expect(wrapper.find(SavedQueryList)).toExist();
+    expect(wrapper.find(SavedQueryList)).toBeTruthy();
   });
 
   it('renders a SubMenu', () => {
-    expect(wrapper.find(SubMenu)).toExist();
+    expect(wrapper.find(SubMenu)).toBeTruthy();
   });
 
   it('renders a SubMenu with Saved queries and Query History links', () => {
@@ -203,7 +203,7 @@ describe('SavedQueryList', () => {
   });
 
   it('renders a ListView', () => {
-    expect(wrapper.find(ListView)).toExist();
+    expect(wrapper.find(ListView)).toBeTruthy();
   });
 
   it('fetches saved queries', () => {
@@ -215,7 +215,7 @@ describe('SavedQueryList', () => {
   });
 
   it('renders ActionsBar in table', () => {
-    expect(wrapper.find(ActionsBar)).toExist();
+    expect(wrapper.find(ActionsBar)).toBeTruthy();
     expect(wrapper.find(ActionsBar)).toHaveLength(3);
   });