diff --git a/package.json b/package.json index 901503e..c6d42ac 100644 --- a/package.json +++ b/package.json @@ -20,17 +20,17 @@ "@code-hike/mdx": "0.9.0", "@marigold/components": "8.0.2", "@marigold/icons": "1.2.54", - "@marigold/system": "^8.0.0", + "@marigold/system": "^8.0.2", "@marigold/theme-core": "26.1.14", - "@marigold/theme-docs": "^2.0.2", + "@marigold/theme-docs": "^2.0.4", "@mdx-js/rollup": "3.0.1", "@tailwindcss/typography": "^0.5.13", - "@tanstack/react-query": "5.48.0", - "@tanstack/react-query-devtools": "5.48.0", - "@tanstack/react-router": "1.40.0", + "@tanstack/react-query": "5.51.1", + "@tanstack/react-query-devtools": "5.51.1", + "@tanstack/react-router": "1.45.0", "react": "18.3.1", "react-dom": "18.3.1", - "tailwind-merge": "2.3.0" + "tailwind-merge": "2.4.0" }, "devDependencies": { "@marigold/eslint-config": "0.4.16", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc95290..2d2a620 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,29 +18,29 @@ importers: specifier: 1.2.54 version: 1.2.54(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@marigold/system': - specifier: ^8.0.0 + specifier: ^8.0.2 version: 8.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@marigold/theme-core': specifier: 26.1.14 version: 26.1.14(@types/react@18.3.3)(postcss@8.4.39)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4) '@marigold/theme-docs': - specifier: ^2.0.2 + specifier: ^2.0.4 version: 2.0.4(@types/react@18.3.3)(postcss@8.4.39)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4) '@mdx-js/rollup': specifier: 3.0.1 - version: 3.0.1(rollup@4.18.0) + version: 3.0.1(rollup@4.18.1) '@tailwindcss/typography': specifier: ^0.5.13 version: 0.5.13(tailwindcss@3.4.4) '@tanstack/react-query': - specifier: 5.48.0 - version: 5.48.0(react@18.3.1) + specifier: 5.51.1 + version: 5.51.1(react@18.3.1) '@tanstack/react-query-devtools': - specifier: 5.48.0 - version: 5.48.0(@tanstack/react-query@5.48.0(react@18.3.1))(react@18.3.1) + specifier: 5.51.1 + version: 5.51.1(@tanstack/react-query@5.51.1(react@18.3.1))(react@18.3.1) '@tanstack/react-router': - specifier: 1.40.0 - version: 1.40.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 1.45.0 + version: 1.45.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -48,8 +48,8 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) tailwind-merge: - specifier: 2.3.0 - version: 2.3.0 + specifier: 2.4.0 + version: 2.4.0 devDependencies: '@marigold/eslint-config': specifier: 0.4.16 @@ -59,7 +59,7 @@ importers: version: 0.3.1(prettier@3.3.3) '@tanstack/router-devtools': specifier: 1.40.0 - version: 1.40.0(@tanstack/react-router@1.40.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.40.0(@tanstack/react-router@1.45.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/router-vite-plugin': specifier: 1.40.3 version: 1.40.3(vite@5.2.12(@types/node@20.14.11)) @@ -68,7 +68,7 @@ importers: version: 6.4.6(@types/jest@29.5.12)(vitest@1.6.0(@types/node@20.14.11)(jsdom@24.1.0)) '@testing-library/react': specifier: 16.0.0 - version: 16.0.0(@testing-library/dom@10.2.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.0.0(@testing-library/dom@10.3.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/jest': specifier: 29.5.12 version: 29.5.12 @@ -157,16 +157,16 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + '@babel/compat-data@7.24.8': + resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} engines: {node: '>=6.9.0'} '@babel/core@7.24.7': resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.24.7': - resolution: {integrity: sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==} + '@babel/eslint-parser@7.24.8': + resolution: {integrity: sha512-nYAikI4XTGokU2QX7Jx+v4rxZKhKivaQaREZjuW3mrJrbdWJ5yUfohnoUULge+zEEaKjPYNxhoRgUKktjXtbwA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -176,6 +176,10 @@ packages: resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} + '@babel/generator@7.24.8': + resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -184,12 +188,12 @@ packages: resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + '@babel/helper-compilation-targets@7.24.8': + resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.7': - resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} + '@babel/helper-create-class-features-plugin@7.24.8': + resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -217,16 +221,16 @@ packages: resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.24.7': - resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/helper-module-transforms@7.24.8': + resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -239,6 +243,10 @@ packages: resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.24.7': resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} engines: {node: '>=6.9.0'} @@ -271,6 +279,10 @@ packages: resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.6': resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} @@ -279,16 +291,16 @@ packages: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} '@babel/helper-wrap-function@7.24.7': resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + '@babel/helpers@7.24.8': + resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} engines: {node: '>=6.9.0'} '@babel/highlight@7.24.6': @@ -309,6 +321,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.24.8': + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} engines: {node: '>=6.9.0'} @@ -549,8 +566,8 @@ packages: peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.24.7': - resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} + '@babel/plugin-transform-classes@7.24.8': + resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -561,8 +578,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.7': - resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -645,8 +662,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.7': - resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -705,8 +722,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.7': - resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -801,14 +818,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.7': - resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.7': - resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} + '@babel/plugin-transform-typescript@7.24.8': + resolution: {integrity: sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -837,8 +854,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.7': - resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} + '@babel/preset-env@7.24.8': + resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -867,10 +884,6 @@ packages: resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.24.8': resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} engines: {node: '>=6.9.0'} @@ -883,6 +896,10 @@ packages: resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.8': + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.6': resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} engines: {node: '>=6.9.0'} @@ -891,6 +908,10 @@ packages: resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.24.8': + resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1742,81 +1763,161 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.18.1': + resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.18.0': resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.18.1': + resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.18.0': resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.18.1': + resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.18.0': resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.18.1': + resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.18.0': resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.18.1': + resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.18.0': resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.18.1': + resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.18.0': resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.18.1': + resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.18.0': resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.18.1': + resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.18.0': resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.18.1': + resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.18.0': resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.18.1': + resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.18.0': resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.18.1': + resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.18.0': resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.18.1': + resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.18.0': resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.18.1': + resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.18.0': resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.18.1': + resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} + cpu: [x64] + os: [win32] + '@rushstack/eslint-patch@1.10.3': resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} @@ -1895,9 +1996,6 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.11': - resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} - '@swc/helpers@0.5.12': resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} @@ -1909,39 +2007,39 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' - '@tanstack/history@1.40.0': - resolution: {integrity: sha512-0sfmfxiG4B5O2dB0S/BQbyY5F2rnNDJhd2/5wtMThAy9+D2WAWSKzMNMH1ycO0d8hZvZfp8/c1Pr9ZX/lJROKw==} + '@tanstack/history@1.44.2': + resolution: {integrity: sha512-jT+YoNzcmbyh5u2+MqqsxPTeGa8RsmaZsYQByBZhAYNxyCfhY3sUXWBV31LB9L+l2jcz1cEVN4KKYUUZhOLU3g==} engines: {node: '>=12'} - '@tanstack/query-core@5.48.0': - resolution: {integrity: sha512-lZAfPPeVIqXCswE9SSbG33B6/91XOWt/Iq41bFeWb/mnHwQSIfFRbkS4bfs+WhIk9abRArF9Id2fp0Mgo+hq6Q==} + '@tanstack/query-core@5.51.1': + resolution: {integrity: sha512-fJBMQMpo8/KSsWW5ratJR5+IFr7YNJ3K2kfP9l5XObYHsgfVy1w3FJUWU4FT2fj7+JMaEg33zOcNDBo0LMwHnw==} - '@tanstack/query-devtools@5.47.0': - resolution: {integrity: sha512-oo10s7Nqaf/Q3QF4vuSwS0xw7zuYr5nXef4RHQIXVJKvRQeo9WowPLAnB0SF/voB0c4GTX6Vq8wfQ1G72ezEdw==} + '@tanstack/query-devtools@5.51.1': + resolution: {integrity: sha512-rehG0WmL3EXER6MAI2uHQia/n0b5c3ZROohpYm7u3G7yg4q+HsfQy6nuAo6uy40NzHUe3FmnfWCZQ0Vb/3lE6g==} - '@tanstack/react-query-devtools@5.48.0': - resolution: {integrity: sha512-0xvk8KDvEfQuLz3dy9jqtP0f6iR724d57Br7KtrtClbyqB53cy3Iy6BiTsiHaSsYnex/+cxWJZIX1UJWeV8Amw==} + '@tanstack/react-query-devtools@5.51.1': + resolution: {integrity: sha512-bRShIVKGpUOHpwziGKT8Aq1Ty0lIlGmNI7E0KbGYtmyOaImErpdElTdxfES1bRaI7i/j+mf2hLy+E6q7SrCwPg==} peerDependencies: - '@tanstack/react-query': ^5.48.0 + '@tanstack/react-query': ^5.51.1 react: ^18 || ^19 - '@tanstack/react-query@5.48.0': - resolution: {integrity: sha512-GDExbjYWzvDokyRqMSWXdrPiYpp95Aig0oeMIrxTaruOJJgWiWfUP//OAaowm2RrRkGVsavSZdko/XmIrrV2Nw==} + '@tanstack/react-query@5.51.1': + resolution: {integrity: sha512-s47HKFnQ4HOJAHoIiXcpna/roMMPZJPy6fJ6p4ZNVn8+/onlLBEDd1+xc8OnDuwgvecqkZD7Z2mnSRbcWefrKw==} peerDependencies: react: ^18.0.0 - '@tanstack/react-router@1.40.0': - resolution: {integrity: sha512-6OxHndj9gSpgoDya88V1Tom6QBpT9qkD8nACrybRPKEYxyA0b2Dgs7nIhCJm1hpbcGFja8G70RWIzNjHjWf+Pg==} + '@tanstack/react-router@1.45.0': + resolution: {integrity: sha512-iw7+SrM1Jq8i1ALJfGNoIrynZV2plW3kPL9Gc7jJPmtLhEAzWwNRQ68byoj8IUT/cHgDYuQWuEEX+ERSXpYvlg==} engines: {node: '>=12'} peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + react: '>=18' + react-dom: '>=18' - '@tanstack/react-store@0.2.1': - resolution: {integrity: sha512-tEbMCQjbeVw9KOP/202LfqZMSNAVi6zYkkp1kBom8nFuMx/965Hzes3+6G6b/comCwVxoJU8Gg9IrcF8yRPthw==} + '@tanstack/react-store@0.5.5': + resolution: {integrity: sha512-1orYXGatBqXCYKuroFwV8Ll/6aDa5E3pU6RR4h7RvRk7TmxF1+zLCsWALZaeijXkySNMGmvawSbUXRypivg2XA==} peerDependencies: - react: '>=16' - react-dom: '>=16' + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 '@tanstack/router-devtools@1.40.0': resolution: {integrity: sha512-U9J/APgE8Oq4uI2zzCI/PUrMx/DmcYm+r5yiqtHFRxWnwqcCy/Apl5K2lQmJlY1quOr2ipVkRfDWJDhHM19p+Q==} @@ -1971,11 +2069,11 @@ packages: resolution: {integrity: sha512-CJjwHnOKlclKBfdXzOn2XvNaSih0fcQUnvNqCk3kFJ9obePFb1fDuc9b9QtYKzMawf6bg+m3wfmao40wuwSEbw==} engines: {node: '>=12'} - '@tanstack/store@0.1.3': - resolution: {integrity: sha512-GnolmC8Fr4mvsHE1fGQmR3Nm0eBO3KnZjDU0a+P3TeQNM/dDscFGxtA7p31NplQNW3KwBw4t1RVFmz0VeKLxcw==} + '@tanstack/store@0.5.5': + resolution: {integrity: sha512-EOSrgdDAJExbvRZEQ/Xhh9iZchXpMN+ga1Bnk8Nmygzs8TfiE6hbzThF+Pr2G19uHL6+DTDTHhJ8VQiOd7l4tA==} - '@testing-library/dom@10.2.0': - resolution: {integrity: sha512-CytIvb6tVOADRngTHGWNxH8LPgO/3hi/BdCEHOf7Qd2GvZVClhVP0Wo/QHzWhpki49Bk0b4VT6xpt3fx8HTSIw==} + '@testing-library/dom@10.3.1': + resolution: {integrity: sha512-q/WL+vlXMpC0uXDyfsMtc1rmotzLV8Y0gq6q1gfrrDjQeHoeLrqHbxdPvPNAh1i+xuJl7+BezywcXArz7vLqKQ==} engines: {node: '>=18'} '@testing-library/jest-dom@6.4.6': @@ -2188,6 +2286,10 @@ packages: resolution: {integrity: sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@7.16.0': + resolution: {integrity: sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==} + engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@5.62.0': resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2230,6 +2332,10 @@ packages: resolution: {integrity: sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@7.16.0': + resolution: {integrity: sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==} + engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2257,6 +2363,15 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@7.16.0': + resolution: {integrity: sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2275,6 +2390,12 @@ packages: peerDependencies: eslint: ^8.56.0 + '@typescript-eslint/utils@7.16.0': + resolution: {integrity: sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2287,6 +2408,10 @@ packages: resolution: {integrity: sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@7.16.0': + resolution: {integrity: sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==} + engines: {node: ^18.18.0 || >=20.0.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -2443,8 +2568,8 @@ packages: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} - axobject-query@3.2.2: - resolution: {integrity: sha512-QtQGAQJfHXiTrtRH8Q1gkarFLs56fDmfiMCptvRbo/AEQIImrW6u7EcUAOfkHHNE9dqZKH3227iRKRSp0KtfTw==} + axobject-query@3.2.4: + resolution: {integrity: sha512-aPTElBrbifBU1krmZxGZOlBkslORe7Ll7+BDnI50Wy4LgOt69luMgevkDfTq1O/ZgprooPCtWpjCwKSZw/iZ4A==} engines: {node: '>= 0.4'} babel-dead-code-elimination@1.0.5: @@ -2500,8 +2625,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2524,8 +2649,8 @@ packages: caniuse-lite@1.0.30001616: resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} - caniuse-lite@1.0.30001639: - resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} + caniuse-lite@1.0.30001642: + resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2698,10 +2823,6 @@ packages: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} - deep-equal-json@1.0.0: - resolution: {integrity: sha512-x11iOxzQuLWG1faqBf8PYn3xSxkK41Wg38lUbch9f+nVmBeuI53PPXeRIDdHsW2/dP2GGKL9p8cLCahHToE7CA==} - engines: {node: '>= 0.4'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2766,8 +2887,8 @@ packages: electron-to-chromium@1.4.756: resolution: {integrity: sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==} - electron-to-chromium@1.4.815: - resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} + electron-to-chromium@1.4.827: + resolution: {integrity: sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3832,10 +3953,6 @@ packages: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -4175,6 +4292,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.18.1: + resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -4352,6 +4474,9 @@ packages: tailwind-merge@2.3.0: resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + tailwind-merge@2.4.0: + resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==} + tailwindcss-react-aria-components@1.1.3: resolution: {integrity: sha512-j852nEhbvD7/zxpNI7hY+6mYm//2zSKuPPq3NNohMi+/nA0hxjaJGg0LYEPzumn/efNT0Itrq+/TMD+r/m1EqA==} peerDependencies: @@ -4542,8 +4667,8 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4765,20 +4890,20 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.24.7': {} + '@babel/compat-data@7.24.8': {} '@babel/core@7.24.7': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/generator': 7.24.8 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) + '@babel/helpers': 7.24.8 + '@babel/parser': 7.24.8 '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 convert-source-map: 2.0.0 debug: 4.3.5 gensync: 1.0.0-beta.2 @@ -4787,7 +4912,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.0)': + '@babel/eslint-parser@7.24.8(@babel/core@7.24.7)(eslint@8.57.0)': dependencies: '@babel/core': 7.24.7 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 @@ -4802,32 +4927,39 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.24.8': + dependencies: + '@babel/types': 7.24.8 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/helper-compilation-targets@7.24.7': + '@babel/helper-compilation-targets@7.24.8': dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + '@babel/compat-data': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)': + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 @@ -4846,8 +4978,8 @@ snapshots: '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -4867,21 +4999,21 @@ snapshots: dependencies: '@babel/types': 7.24.7 - '@babel/helper-member-expression-to-functions@7.24.7': + '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + '@babel/helper-module-transforms@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 @@ -4894,10 +5026,12 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 '@babel/helper-plugin-utils@7.24.7': {} + '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -4911,22 +5045,22 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 transitivePeerDependencies: - supports-color '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -4938,25 +5072,27 @@ snapshots: '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-validator-identifier@7.24.6': {} '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-option@7.24.7': {} + '@babel/helper-validator-option@7.24.8': {} '@babel/helper-wrap-function@7.24.7': dependencies: '@babel/helper-function-name': 7.24.7 '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/helpers@7.24.7': + '@babel/helpers@7.24.8': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 '@babel/highlight@7.24.6': dependencies: @@ -4980,23 +5116,27 @@ snapshots: dependencies: '@babel/types': 7.24.7 + '@babel/parser@7.24.8': + dependencies: + '@babel/types': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5004,21 +5144,21 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5026,19 +5166,19 @@ snapshots: '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) transitivePeerDependencies: @@ -5047,8 +5187,8 @@ snapshots: '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color @@ -5060,8 +5200,8 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5069,57 +5209,57 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': dependencies: @@ -5129,42 +5269,42 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': dependencies: @@ -5175,18 +5315,18 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) transitivePeerDependencies: @@ -5196,7 +5336,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5204,38 +5344,38 @@ snapshots: '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 @@ -5245,55 +5385,55 @@ snapshots: '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/template': 7.24.7 - '@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) '@babel/plugin-transform-flow-strip-types@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color @@ -5301,45 +5441,45 @@ snapshots: '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-simple-access': 7.24.7 transitivePeerDependencies: - supports-color @@ -5348,8 +5488,8 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: - supports-color @@ -5357,8 +5497,8 @@ snapshots: '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color @@ -5366,37 +5506,37 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5404,13 +5544,13 @@ snapshots: '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) transitivePeerDependencies: @@ -5419,13 +5559,13 @@ snapshots: '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color @@ -5433,8 +5573,8 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5442,12 +5582,12 @@ snapshots: '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.7)': dependencies: @@ -5461,9 +5601,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -5471,24 +5611,24 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) @@ -5499,12 +5639,12 @@ snapshots: '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color @@ -5512,24 +5652,24 @@ snapshots: '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5537,33 +5677,33 @@ snapshots: '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/preset-env@7.24.7(@babel/core@7.24.7)': + '@babel/preset-env@7.24.8(@babel/core@7.24.7)': dependencies: - '@babel/compat-data': 7.24.7 + '@babel/compat-data': 7.24.8 '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) @@ -5594,9 +5734,9 @@ snapshots: '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.7) '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.7) '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) @@ -5609,7 +5749,7 @@ snapshots: '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) @@ -5619,7 +5759,7 @@ snapshots: '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) @@ -5630,7 +5770,7 @@ snapshots: '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.7) '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) @@ -5647,15 +5787,15 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/types': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.24.8 esutils: 2.0.3 '@babel/preset-react@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.7) @@ -5666,11 +5806,11 @@ snapshots: '@babel/preset-typescript@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-typescript': 7.24.8(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -5680,10 +5820,6 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.24.7': - dependencies: - regenerator-runtime: 0.14.1 - '@babel/runtime@7.24.8': dependencies: regenerator-runtime: 0.14.1 @@ -5709,6 +5845,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.24.8': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.8 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.24.6': dependencies: '@babel/helper-string-parser': 7.24.6 @@ -5721,6 +5872,12 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.24.8': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + '@bcoe/v8-coverage@0.2.3': {} '@code-hike/lighter@0.7.0': {} @@ -5865,7 +6022,7 @@ snapshots: '@internationalized/date@3.5.4': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 '@internationalized/message@3.1.4': dependencies: @@ -5958,7 +6115,7 @@ snapshots: '@marigold/eslint-config@0.4.16(eslint@8.57.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.0) + '@babel/eslint-parser': 7.24.8(@babel/core@7.24.7)(eslint@8.57.0) '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) '@typescript-eslint/eslint-plugin': 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) @@ -6077,11 +6234,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/rollup@3.0.1(rollup@4.18.0)': + '@mdx-js/rollup@3.0.1(rollup@4.18.1)': dependencies: '@mdx-js/mdx': 3.0.1 - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) - rollup: 4.18.0 + '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + rollup: 4.18.1 source-map: 0.7.4 vfile: 6.0.1 transitivePeerDependencies: @@ -6116,7 +6273,7 @@ snapshots: '@react-stately/tree': 3.8.1(react@18.3.1) '@react-types/accordion': 3.0.0-alpha.21(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6127,7 +6284,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/breadcrumbs': 3.7.5(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/button@3.9.5(react@18.3.1)': @@ -6138,7 +6295,7 @@ snapshots: '@react-stately/toggle': 3.7.4(react@18.3.1) '@react-types/button': 3.9.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/calendar@3.5.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6152,7 +6309,7 @@ snapshots: '@react-types/button': 3.9.4(react@18.3.1) '@react-types/calendar': 3.4.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6168,7 +6325,7 @@ snapshots: '@react-stately/toggle': 3.7.4(react@18.3.1) '@react-types/checkbox': 3.8.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/color@3.0.0-beta.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6185,7 +6342,7 @@ snapshots: '@react-stately/form': 3.0.3(react@18.3.1) '@react-types/color': 3.0.0-beta.25(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6205,7 +6362,7 @@ snapshots: '@react-types/button': 3.9.4(react@18.3.1) '@react-types/combobox': 3.11.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6228,7 +6385,7 @@ snapshots: '@react-types/datepicker': 3.7.4(react@18.3.1) '@react-types/dialog': 3.5.10(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6239,7 +6396,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/dialog': 3.5.10(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6254,7 +6411,7 @@ snapshots: '@react-stately/dnd': 3.3.1(react@18.3.1) '@react-types/button': 3.9.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6263,7 +6420,7 @@ snapshots: '@react-aria/interactions': 3.21.3(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 clsx: 2.1.1 react: 18.3.1 @@ -6273,7 +6430,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/form': 3.0.3(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/grid@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6291,7 +6448,7 @@ snapshots: '@react-types/checkbox': 3.8.1(react@18.3.1) '@react-types/grid': 3.2.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6307,7 +6464,7 @@ snapshots: '@react-stately/list': 3.10.5(react@18.3.1) '@react-stately/tree': 3.8.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6328,14 +6485,14 @@ snapshots: '@react-aria/ssr': 3.9.4(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/label@3.7.8(react@18.3.1)': dependencies: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/link@3.7.1(react@18.3.1)': @@ -6345,7 +6502,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/link': 3.5.5(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/listbox@3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6358,13 +6515,13 @@ snapshots: '@react-stately/list': 3.10.5(react@18.3.1) '@react-types/listbox': 3.4.9(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) '@react-aria/live-announcer@3.3.4': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 '@react-aria/menu@3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -6380,7 +6537,7 @@ snapshots: '@react-types/button': 3.9.4(react@18.3.1) '@react-types/menu': 3.9.9(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6389,7 +6546,7 @@ snapshots: '@react-aria/progress': 3.4.13(react@18.3.1) '@react-types/meter': 3.4.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/numberfield@3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6404,7 +6561,7 @@ snapshots: '@react-types/button': 3.9.4(react@18.3.1) '@react-types/numberfield': 3.8.3(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6420,7 +6577,7 @@ snapshots: '@react-types/button': 3.9.4(react@18.3.1) '@react-types/overlays': 3.8.7(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6431,7 +6588,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/progress': 3.5.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/radio@3.10.4(react@18.3.1)': @@ -6445,7 +6602,7 @@ snapshots: '@react-stately/radio': 3.10.4(react@18.3.1) '@react-types/radio': 3.8.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/searchfield@3.7.5(react@18.3.1)': @@ -6457,7 +6614,7 @@ snapshots: '@react-types/button': 3.9.4(react@18.3.1) '@react-types/searchfield': 3.5.5(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/select@3.14.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6475,7 +6632,7 @@ snapshots: '@react-types/button': 3.9.4(react@18.3.1) '@react-types/select': 3.9.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6487,7 +6644,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/selection': 3.15.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6495,7 +6652,7 @@ snapshots: dependencies: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/slider@3.7.8(react@18.3.1)': @@ -6508,7 +6665,7 @@ snapshots: '@react-stately/slider': 3.5.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/slider': 3.7.3(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/spinbutton@3.6.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6518,13 +6675,13 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/button': 3.9.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) '@react-aria/ssr@3.9.4(react@18.3.1)': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/switch@3.6.4(react@18.3.1)': @@ -6532,7 +6689,7 @@ snapshots: '@react-aria/toggle': 3.10.4(react@18.3.1) '@react-stately/toggle': 3.7.4(react@18.3.1) '@react-types/switch': 3.5.3(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/table@3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6552,7 +6709,7 @@ snapshots: '@react-types/grid': 3.2.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/table': 3.9.5(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6565,7 +6722,7 @@ snapshots: '@react-stately/tabs': 3.6.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/tabs': 3.3.7(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6580,7 +6737,7 @@ snapshots: '@react-stately/list': 3.10.5(react@18.3.1) '@react-types/button': 3.9.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6594,7 +6751,7 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/textfield': 3.9.3(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/toggle@3.10.4(react@18.3.1)': @@ -6604,7 +6761,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/toggle': 3.7.4(react@18.3.1) '@react-types/checkbox': 3.8.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/toolbar@3.0.0-beta.5(react@18.3.1)': @@ -6613,7 +6770,7 @@ snapshots: '@react-aria/i18n': 3.11.1(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/tooltip@3.7.4(react@18.3.1)': @@ -6624,7 +6781,7 @@ snapshots: '@react-stately/tooltip': 3.4.9(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/tooltip': 3.4.9(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-aria/tree@3.0.0-alpha.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6636,7 +6793,7 @@ snapshots: '@react-stately/tree': 3.8.1(react@18.3.1) '@react-types/button': 3.9.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6645,7 +6802,7 @@ snapshots: '@react-aria/ssr': 3.9.4(react@18.3.1) '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 clsx: 2.1.1 react: 18.3.1 @@ -6654,7 +6811,7 @@ snapshots: '@react-aria/interactions': 3.21.3(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/calendar@3.5.1(react@18.3.1)': @@ -6663,7 +6820,7 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/calendar': 3.4.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/checkbox@3.6.5(react@18.3.1)': @@ -6672,13 +6829,13 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/checkbox': 3.8.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/collections@3.10.7(react@18.3.1)': dependencies: '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/color@3.6.1(react@18.3.1)': @@ -6692,7 +6849,7 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/color': 3.0.0-beta.25(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/combobox@3.8.4(react@18.3.1)': @@ -6705,13 +6862,13 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/combobox': 3.11.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/data@3.11.4(react@18.3.1)': dependencies: '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/datepicker@3.9.4(react@18.3.1)': @@ -6723,24 +6880,24 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/datepicker': 3.7.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/dnd@3.3.1(react@18.3.1)': dependencies: '@react-stately/selection': 3.15.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/flags@3.0.3': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 '@react-stately/form@3.0.3(react@18.3.1)': dependencies: '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/grid@3.8.7(react@18.3.1)': @@ -6749,7 +6906,7 @@ snapshots: '@react-stately/selection': 3.15.1(react@18.3.1) '@react-types/grid': 3.2.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/list@3.10.5(react@18.3.1)': @@ -6758,7 +6915,7 @@ snapshots: '@react-stately/selection': 3.15.1(react@18.3.1) '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/menu@3.7.1(react@18.3.1)': @@ -6766,7 +6923,7 @@ snapshots: '@react-stately/overlays': 3.6.7(react@18.3.1) '@react-types/menu': 3.9.9(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/numberfield@3.9.3(react@18.3.1)': @@ -6775,14 +6932,14 @@ snapshots: '@react-stately/form': 3.0.3(react@18.3.1) '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/numberfield': 3.8.3(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/overlays@3.6.7(react@18.3.1)': dependencies: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/overlays': 3.8.7(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/radio@3.10.4(react@18.3.1)': @@ -6791,14 +6948,14 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/radio': 3.8.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/searchfield@3.5.3(react@18.3.1)': dependencies: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/searchfield': 3.5.5(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/select@3.6.4(react@18.3.1)': @@ -6808,7 +6965,7 @@ snapshots: '@react-stately/overlays': 3.6.7(react@18.3.1) '@react-types/select': 3.9.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/selection@3.15.1(react@18.3.1)': @@ -6816,7 +6973,7 @@ snapshots: '@react-stately/collections': 3.10.7(react@18.3.1) '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/slider@3.5.4(react@18.3.1)': @@ -6824,7 +6981,7 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/slider': 3.7.3(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/table@3.11.8(react@18.3.1)': @@ -6837,7 +6994,7 @@ snapshots: '@react-types/grid': 3.2.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/table': 3.9.5(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/tabs@3.6.6(react@18.3.1)': @@ -6845,21 +7002,21 @@ snapshots: '@react-stately/list': 3.10.5(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/tabs': 3.3.7(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/toggle@3.7.4(react@18.3.1)': dependencies: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/checkbox': 3.8.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/tooltip@3.4.9(react@18.3.1)': dependencies: '@react-stately/overlays': 3.6.7(react@18.3.1) '@react-types/tooltip': 3.4.9(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/tree@3.8.1(react@18.3.1)': @@ -6868,19 +7025,19 @@ snapshots: '@react-stately/selection': 3.15.1(react@18.3.1) '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/utils@3.10.1(react@18.3.1)': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-stately/virtualizer@3.7.1(react@18.3.1)': dependencies: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 react: 18.3.1 '@react-types/accordion@3.0.0-alpha.21(react@18.3.1)': @@ -7033,62 +7190,110 @@ snapshots: '@react-types/shared': 3.23.1(react@18.3.1) react: 18.3.1 - '@rollup/pluginutils@5.1.0(rollup@4.18.0)': + '@rollup/pluginutils@5.1.0(rollup@4.18.1)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.18.0 + rollup: 4.18.1 '@rollup/rollup-android-arm-eabi@4.18.0': optional: true + '@rollup/rollup-android-arm-eabi@4.18.1': + optional: true + '@rollup/rollup-android-arm64@4.18.0': optional: true + '@rollup/rollup-android-arm64@4.18.1': + optional: true + '@rollup/rollup-darwin-arm64@4.18.0': optional: true + '@rollup/rollup-darwin-arm64@4.18.1': + optional: true + '@rollup/rollup-darwin-x64@4.18.0': optional: true + '@rollup/rollup-darwin-x64@4.18.1': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.18.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.18.1': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.18.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.18.1': + optional: true + '@rollup/rollup-linux-arm64-musl@4.18.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.18.1': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.18.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.18.1': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.18.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.18.1': + optional: true + '@rollup/rollup-linux-x64-gnu@4.18.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.18.1': + optional: true + '@rollup/rollup-linux-x64-musl@4.18.0': optional: true + '@rollup/rollup-linux-x64-musl@4.18.1': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.18.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.18.1': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.18.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.18.1': + optional: true + '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.18.1': + optional: true + '@rushstack/eslint-patch@1.10.3': {} '@sinclair/typebox@0.27.8': {} @@ -7142,10 +7347,6 @@ snapshots: '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.11': - dependencies: - tslib: 2.6.3 - '@swc/helpers@0.5.12': dependencies: tslib: 2.6.3 @@ -7162,42 +7363,42 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.4 - '@tanstack/history@1.40.0': {} + '@tanstack/history@1.44.2': {} - '@tanstack/query-core@5.48.0': {} + '@tanstack/query-core@5.51.1': {} - '@tanstack/query-devtools@5.47.0': {} + '@tanstack/query-devtools@5.51.1': {} - '@tanstack/react-query-devtools@5.48.0(@tanstack/react-query@5.48.0(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-devtools@5.51.1(@tanstack/react-query@5.51.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/query-devtools': 5.47.0 - '@tanstack/react-query': 5.48.0(react@18.3.1) + '@tanstack/query-devtools': 5.51.1 + '@tanstack/react-query': 5.51.1(react@18.3.1) react: 18.3.1 - '@tanstack/react-query@5.48.0(react@18.3.1)': + '@tanstack/react-query@5.51.1(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.48.0 + '@tanstack/query-core': 5.51.1 react: 18.3.1 - '@tanstack/react-router@1.40.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-router@1.45.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/history': 1.40.0 - '@tanstack/react-store': 0.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/history': 1.44.2 + '@tanstack/react-store': 0.5.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-store@0.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-store@0.5.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/store': 0.1.3 + '@tanstack/store': 0.5.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.2.2(react@18.3.1) - '@tanstack/router-devtools@1.40.0(@tanstack/react-router@1.40.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/router-devtools@1.40.0(@tanstack/react-router@1.45.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-router': 1.40.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-router': 1.45.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) clsx: 2.1.1 date-fns: 2.30.0 goober: 2.1.14(csstype@3.1.3) @@ -7242,9 +7443,9 @@ snapshots: - supports-color - vite - '@tanstack/store@0.1.3': {} + '@tanstack/store@0.5.5': {} - '@testing-library/dom@10.2.0': + '@testing-library/dom@10.3.1': dependencies: '@babel/code-frame': 7.24.7 '@babel/runtime': 7.24.8 @@ -7269,10 +7470,10 @@ snapshots: '@types/jest': 29.5.12 vitest: 1.6.0(@types/node@20.14.11)(jsdom@24.1.0) - '@testing-library/react@16.0.0(@testing-library/dom@10.2.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.0.0(@testing-library/dom@10.3.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@testing-library/dom': 10.2.0 + '@testing-library/dom': 10.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: @@ -7498,6 +7699,11 @@ snapshots: '@typescript-eslint/types': 7.14.1 '@typescript-eslint/visitor-keys': 7.14.1 + '@typescript-eslint/scope-manager@7.16.0': + dependencies: + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/visitor-keys': 7.16.0 + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.3)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) @@ -7540,6 +7746,8 @@ snapshots: '@typescript-eslint/types@7.14.1': {} + '@typescript-eslint/types@7.16.0': {} + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.3)': dependencies: '@typescript-eslint/types': 5.62.0 @@ -7584,6 +7792,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@7.16.0(typescript@5.5.3)': + dependencies: + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/visitor-keys': 7.16.0 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.5.3) + optionalDependencies: + typescript: 5.5.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) @@ -7621,6 +7844,17 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@7.16.0(eslint@8.57.0)(typescript@5.5.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 7.16.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -7636,6 +7870,11 @@ snapshots: '@typescript-eslint/types': 7.14.1 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@7.16.0': + dependencies: + '@typescript-eslint/types': 7.16.0 + eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.2.0': {} '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.12)(vite@5.2.12(@types/node@20.14.11))': @@ -7843,9 +8082,7 @@ snapshots: axe-core@4.7.0: {} - axobject-query@3.2.2: - dependencies: - deep-equal-json: 1.0.0 + axobject-query@3.2.4: {} babel-dead-code-elimination@1.0.5: dependencies: @@ -7858,13 +8095,13 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.24.8 cosmiconfig: 7.1.0 resolve: 1.22.8 babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): dependencies: - '@babel/compat-data': 7.24.7 + '@babel/compat-data': 7.24.8 '@babel/core': 7.24.7 '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) semver: 6.3.1 @@ -7901,10 +8138,10 @@ snapshots: '@babel/plugin-transform-flow-strip-types': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) + '@babel/preset-env': 7.24.8(@babel/core@7.24.7) '@babel/preset-react': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.24.8 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -7936,12 +8173,12 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.15(browserslist@4.23.0) - browserslist@4.23.1: + browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001639 - electron-to-chromium: 1.4.815 + caniuse-lite: 1.0.30001642 + electron-to-chromium: 1.4.827 node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + update-browserslist-db: 1.1.0(browserslist@4.23.2) cac@6.7.14: {} @@ -7959,7 +8196,7 @@ snapshots: caniuse-lite@1.0.30001616: {} - caniuse-lite@1.0.30001639: {} + caniuse-lite@1.0.30001642: {} ccount@2.0.1: {} @@ -8057,7 +8294,7 @@ snapshots: core-js-compat@3.37.1: dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 cosmiconfig@7.1.0: dependencies: @@ -8130,13 +8367,6 @@ snapshots: dependencies: type-detect: 4.0.8 - deep-equal-json@1.0.0: - dependencies: - call-bind: 1.0.7 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - deep-is@0.1.4: {} deepmerge@4.2.2: {} @@ -8189,7 +8419,7 @@ snapshots: electron-to-chromium@1.4.756: {} - electron-to-chromium@1.4.815: {} + electron-to-chromium@1.4.827: {} emoji-regex@8.0.0: {} @@ -8334,7 +8564,7 @@ snapshots: eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7))(eslint@8.57.0)(typescript@5.5.3): dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.0) + '@babel/eslint-parser': 7.24.8(@babel/core@7.24.7)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.3 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) @@ -8460,7 +8690,7 @@ snapshots: eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3): dependencies: - '@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/utils': 7.16.0(eslint@8.57.0)(typescript@5.5.3) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) @@ -8470,13 +8700,13 @@ snapshots: eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.24.8 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.7.0 - axobject-query: 3.2.2 + axobject-query: 3.2.4 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 @@ -9680,11 +9910,6 @@ snapshots: object-inspect@1.13.2: {} - object-is@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - object-keys@1.1.1: {} object.assign@4.1.5: @@ -9923,7 +10148,7 @@ snapshots: '@react-types/grid': 3.2.6(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/table': 3.9.5(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.12 client-only: 0.0.1 react: 18.3.1 react-aria: 3.33.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10064,7 +10289,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.24.8 regexp.prototype.flags@1.5.2: dependencies: @@ -10154,6 +10379,28 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 + rollup@4.18.1: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.1 + '@rollup/rollup-android-arm64': 4.18.1 + '@rollup/rollup-darwin-arm64': 4.18.1 + '@rollup/rollup-darwin-x64': 4.18.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 + '@rollup/rollup-linux-arm-musleabihf': 4.18.1 + '@rollup/rollup-linux-arm64-gnu': 4.18.1 + '@rollup/rollup-linux-arm64-musl': 4.18.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 + '@rollup/rollup-linux-riscv64-gnu': 4.18.1 + '@rollup/rollup-linux-s390x-gnu': 4.18.1 + '@rollup/rollup-linux-x64-gnu': 4.18.1 + '@rollup/rollup-linux-x64-musl': 4.18.1 + '@rollup/rollup-win32-arm64-msvc': 4.18.1 + '@rollup/rollup-win32-ia32-msvc': 4.18.1 + '@rollup/rollup-win32-x64-msvc': 4.18.1 + fsevents: 2.3.3 + rrweb-cssom@0.6.0: {} rrweb-cssom@0.7.0: {} @@ -10350,7 +10597,9 @@ snapshots: tailwind-merge@2.3.0: dependencies: - '@babel/runtime': 7.24.6 + '@babel/runtime': 7.24.8 + + tailwind-merge@2.4.0: {} tailwindcss-react-aria-components@1.1.3(tailwindcss@3.4.4): dependencies: @@ -10577,9 +10826,9 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 - update-browserslist-db@1.0.16(browserslist@4.23.1): + update-browserslist-db@1.1.0(browserslist@4.23.2): dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 escalade: 3.1.2 picocolors: 1.0.1 diff --git a/public/component-tree-context-api.png b/public/component-tree-context-api.png new file mode 100644 index 0000000..673e5d1 Binary files /dev/null and b/public/component-tree-context-api.png differ diff --git a/public/component-tree-prop-drill.png b/public/component-tree-prop-drill.png new file mode 100644 index 0000000..2794465 Binary files /dev/null and b/public/component-tree-prop-drill.png differ diff --git a/public/floating-cogs.svg b/public/floating-cogs.svg new file mode 100644 index 0000000..24766bf --- /dev/null +++ b/public/floating-cogs.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/goku.gif b/public/goku.gif new file mode 100644 index 0000000..192aba1 Binary files /dev/null and b/public/goku.gif differ diff --git a/public/server-cache-dia.png b/public/server-cache-dia.png new file mode 100644 index 0000000..8903286 Binary files /dev/null and b/public/server-cache-dia.png differ diff --git a/src/routes/_components/About.tsx b/src/routes/_components/About.tsx index 0626dbe..bf02feb 100644 --- a/src/routes/_components/About.tsx +++ b/src/routes/_components/About.tsx @@ -40,7 +40,7 @@ export const About = () => ( Your feedback, ideas, and suggestions for improvement are always welcome. Feel free to reach out to us through any of{' '} - our communication channels + our communication channels .

diff --git a/src/routes/_components/Tutorials.tsx b/src/routes/_components/Tutorials.tsx index 586001d..d3956dd 100644 --- a/src/routes/_components/Tutorials.tsx +++ b/src/routes/_components/Tutorials.tsx @@ -43,7 +43,7 @@ export const Tutorials = () => ( title: 'State Management', href: '/state-management', caption: - 'Learn how compound components can enhance parent-child communication beyond prop drilling.', + 'Learn to structure and maintain your state effectively.', icon: ( - - Single Import - + Single Import - Note how compound components usually export their related components using dot - notation (`Select.Option`). This technique allows you to bundle the parent and - child components together in a single export, making it easy to access all - related components. + Note how compound components usually export their related components using + dot notation (`Select.Option`). This technique allows you to bundle the + parent and child components together in a single export, making it easy to + access all related components. diff --git a/src/routes/state-management/_components/ContextApiExample.tsx b/src/routes/state-management/_components/ContextApiExample.tsx new file mode 100644 index 0000000..30a43cc --- /dev/null +++ b/src/routes/state-management/_components/ContextApiExample.tsx @@ -0,0 +1,76 @@ +import React, { createContext, useContext } from 'react'; + +interface Product { + id: number; + name: string; + category: string; + subcategory: string; + price: number; +} + +const CategoryContext = createContext('all'); + +const ProductPage: React.FC = () => { + return ( +
+ + + +
+ ); +}; + +const MainContent: React.FC = () => { + return ; +}; + +const products: Product[] = [ + { + id: 1, + name: 'Laptop', + category: 'electronics', + subcategory: 'Laptops', + price: 1000, + }, + { + id: 2, + name: 'Shirt', + category: 'fashion', + subcategory: 'Shirts', + price: 50, + }, + { id: 3, name: 'Book', category: 'books', subcategory: 'Fiction', price: 20 }, +]; + +const ProductList: React.FC = () => { + const category = useContext(CategoryContext); + + const filteredProducts = products.filter( + product => category === 'all' || product.category === category + ); + + return ( +
+ {filteredProducts.map(product => ( + + ))} +
+ ); +}; + +interface ProductItemProps { + product: Product; +} + +const ProductItem: React.FC = ({ product }) => { + return ( +
+

{product.name}

+

Category: {product.category}

+

Subcategory: {product.subcategory}

+

Price: ${product.price}

+
+ ); +}; + +export default ProductPage; diff --git a/src/routes/state-management/_components/CounterExample.tsx b/src/routes/state-management/_components/CounterExample.tsx new file mode 100644 index 0000000..8e8c3a9 --- /dev/null +++ b/src/routes/state-management/_components/CounterExample.tsx @@ -0,0 +1,25 @@ +import { useState } from 'react'; +import { Button, MarigoldProvider } from '@marigold/components'; +import theme from '@marigold/theme-core'; + +const MyButton = () => { + const [count, setCount] = useState(0); + + return ( + + ); +}; + +const Counter = () => { + return ( + +
+ +
+
+ ); +}; + +export default Counter; diff --git a/src/routes/state-management/_components/SearchFilterComponent.tsx b/src/routes/state-management/_components/SearchFilterComponent.tsx new file mode 100644 index 0000000..050c32a --- /dev/null +++ b/src/routes/state-management/_components/SearchFilterComponent.tsx @@ -0,0 +1,66 @@ +import React, { useEffect, useState } from 'react'; +import { + apiUrl, + type IMovie, +} from '@/routes/state-management/_components/globals'; +import { MarigoldProvider, SearchField, Stack } from '@marigold/components'; +import theme from '@marigold/theme-core'; +import useFetch from './useFetch'; + +const SearchFilterComponent = () => { + const [searchQuery, setSearchQuery] = useState(''); + const [filteredList, setFilteredList] = useState>([]); + + const { + data: movies, + isError, + isLoading, + error, + } = useFetch>(apiUrl, ['movies']); + + useEffect(() => { + if (movies) { + setFilteredList(movies); + } + }, [movies]); + + const handleSearchChange = (value: string) => { + setSearchQuery(value); + + const filtered = movies!.filter(item => + item.title.toLowerCase().includes(value.toLowerCase()) + ); + setFilteredList(filtered); + }; + + if (isLoading) { + return
Loading...
; + } + + if (isError) { + return
Error: {error.message}
; + } + + return ( + + + handleSearchChange(value)} + label="Search" + /> + {filteredList.length > 0 ? ( +
    + {filteredList.map((item, index) => ( +
  • {item.title}
  • + ))} +
+ ) : ( + No movies found! + )} +
+
+ ); +}; + +export default SearchFilterComponent; diff --git a/src/routes/state-management/_components/ServerStateExample.tsx b/src/routes/state-management/_components/ServerStateExample.tsx index 2661396..7f7659d 100644 --- a/src/routes/state-management/_components/ServerStateExample.tsx +++ b/src/routes/state-management/_components/ServerStateExample.tsx @@ -2,52 +2,37 @@ import { Card, Image, Inline, + MarigoldProvider, SearchField, Select, Stack, Text, } from '@marigold/components'; +import { + apiUrl, + type IMovie, +} from '@/routes/state-management/_components/globals'; +import theme from '@marigold/theme-core'; +import { Route } from '@/routes/state-management/preview.lazy'; +import { useRouterState } from '@tanstack/react-router'; import { useQuery } from '@tanstack/react-query'; -import { useState } from 'react'; -interface IMovie { - href: string; - year: number; - title: string; - category: string; - thumbnail: string; - thumbnail_width: number; - thumbnail_height: number; - extract: string; -} function ServerStateExample() { - const [filters, setFilters] = useState<{ title: string; category: string }>({ - title: '', - category: '', - }); - - const fetchData = async ( - url: string, - queryParams: Record - ) => { - const queryString = new URLSearchParams(queryParams).toString(); - const apiURL = `${url}${queryString ? `?${queryString}` : ''}`; - const data = await fetch(apiURL); - return await data.json(); - }; + const filters: { title: string; category: string } = Route.useSearch(); + const navigate = Route.useNavigate(); + const router = useRouterState(); const { data: movies, isError, - isLoading, + isPending, error, } = useQuery>({ queryKey: ['users', filters], - queryFn: async () => - await fetchData( - 'https://6630d183c92f351c03db2e12.mockapi.io/movies', - filters - ), + queryFn: async () => { + const data = await fetch(`${apiUrl}${router.location.searchStr}`); + return await data.json(); + }, }); if (isError) { @@ -55,13 +40,17 @@ function ServerStateExample() { } return ( - <> + setFilters(prev => ({ ...prev, title: value }))} - label="search" + value={filters.title} + onChange={value => + navigate({ + search: prev => ({ ...prev, title: value }), + }) + } + label="Search" width={'1/2'} /> - {isLoading && Loading...} + {isPending && Loading...} { // check if search returns nothing(movies='not found') @@ -109,7 +100,7 @@ function ServerStateExample() { } - + ); } diff --git a/src/routes/state-management/_components/UrlSearchFilterComponent.tsx b/src/routes/state-management/_components/UrlSearchFilterComponent.tsx new file mode 100644 index 0000000..c0be2b3 --- /dev/null +++ b/src/routes/state-management/_components/UrlSearchFilterComponent.tsx @@ -0,0 +1,78 @@ +import React, { useEffect, useState } from 'react'; +import { + apiUrl, + type IMovie, +} from '@/routes/state-management/_components/globals'; +import { MarigoldProvider, SearchField, Stack } from '@marigold/components'; +import theme from '@marigold/theme-core'; +import useFetch from './useFetch'; +import { Route } from '@/routes/state-management/index.lazy'; + +const UrlSearchFilterComponent = () => { + const { name }: { name: string } = Route.useSearch(); + const navigate = Route.useNavigate(); + const [filteredList, setFilteredList] = useState>([]); + + const { + data: movies, + isError, + isLoading, + error, + } = useFetch>(apiUrl, ['movies']); + + const searchQuery = name || ''; + + useEffect(() => { + if (movies) { + setFilteredList(movies); + } + }, [movies]); + + useEffect(() => { + if (searchQuery && movies) { + const filtered = movies.filter(item => + item.title.toLowerCase().includes(searchQuery.toLowerCase()) + ); + setFilteredList(filtered); + } else if (movies) { + setFilteredList(movies); + } + }, [searchQuery, movies]); + + const handleSearchChange = (value: string) => { + navigate({ + search: { name: value }, + }); + }; + + if (isLoading) { + return
Loading...
; + } + + if (isError) { + return
Error: {error.message}
; + } + + return ( + + + + {filteredList.length > 0 ? ( +
    + {filteredList.map((item, index) => ( +
  • {item.title}
  • + ))} +
+ ) : ( + No movies found! + )} +
+
+ ); +}; + +export default UrlSearchFilterComponent; diff --git a/src/routes/state-management/_components/context-api-example.mdx b/src/routes/state-management/_components/context-api-example.mdx new file mode 100644 index 0000000..8ce3dfc --- /dev/null +++ b/src/routes/state-management/_components/context-api-example.mdx @@ -0,0 +1,55 @@ +import { Block } from '@/components/Container'; +import { SectionMessage, Text } from '@marigold/components'; + + + + ```tsx ContextApiExample.tsx focus=11 + // from ./ContextApiExample.tsx + ```` + + ### Create the Context + + Creating a context object, which stores the global data, is straightforward. We just need to use the `createContext` function which lets us create a context object that components can provide or read. + + The only param that is required ist the default value - in our case **'all'**. + + --- + + ```tsx ContextApiExample.tsx focus=46:50 + // from ./ContextApiExample.tsx + ```` + + ### Use the Context + To read the value from the context `CategoryContext` we can use the hook `useContext`. + This tells React that the ProductList component wants to read the CategoryContext. + + This way we can use our variable, e.g. for filtering products. + + --- + + ```tsx ContextApiExample.tsx focus=16,18 + // from ./ContextApiExample.tsx + ```` + + ### Provide the Context + As a final step we need to provide it because until now React doesn't know where to get it. + + We need to find the highest component in our tree which uses category and than we just need to wrap this component with a context provider so all children will have access to this Context. + + This tells React: "If any component inside this ProductPage asks for CategoryContext, give them this category." + + --- + + ```tsx ContextApiExample.tsx + // from ./ContextApiExample.tsx + ```` + + + Note + + If we don’t provide the context, React will use the default value we’ve specified in the first step. + + + + + diff --git a/src/routes/state-management/_components/counter-example.mdx b/src/routes/state-management/_components/counter-example.mdx new file mode 100644 index 0000000..f3dabe2 --- /dev/null +++ b/src/routes/state-management/_components/counter-example.mdx @@ -0,0 +1,39 @@ +import { Block } from '@/components/Container'; + + + + ```tsx CounterExample.tsx focus=6 + // from ./CounterExample.tsx + ```` + + ### Storing an Initial Value + + Local state is typically initialized using the `useState` hook. This hook takes an initial state value as an argument and returns an array containing the current state and a function to update it. + + **0** is the initial value for the count state on the first render. + + --- + + ```tsx CounterExample.tsx focus=10 + // from ./CounterExample.tsx + ```` + + ### Reading the Current State Value + + The current state value can be read directly from the state variable returned by useState. This state value can then be used in the component's JSX to dynamically render content. + This will display the current value of `count` in the UI. + + --- + + ```tsx CounterExample.tsx focus=9 + // from ./CounterExample.tsx + ```` + + ### Updating a State Value + To update the state, we use the state update function (in this case, `setCount`). This function takes the new state value as an argument and triggers a re-render of the component with the new state. + + When clicking the button `onPress` it will call the `setCount` function which updates the `count` state by adding 1 to its current value. + + + + diff --git a/src/routes/state-management/_components/globals.tsx b/src/routes/state-management/_components/globals.tsx new file mode 100644 index 0000000..90145a6 --- /dev/null +++ b/src/routes/state-management/_components/globals.tsx @@ -0,0 +1,12 @@ +export interface IMovie { + href: string; + year: number; + title: string; + category: string; + thumbnail: string; + thumbnail_width: number; + thumbnail_height: number; + extract: string; +} + +export const apiUrl = 'https://6630d183c92f351c03db2e12.mockapi.io/movies'; diff --git a/src/routes/state-management/_components/search-filter-example.mdx b/src/routes/state-management/_components/search-filter-example.mdx new file mode 100644 index 0000000..c3c322d --- /dev/null +++ b/src/routes/state-management/_components/search-filter-example.mdx @@ -0,0 +1,56 @@ +import { Block } from '@/components/Container'; +import {SectionMessage} from '@marigold/components'; + + + + ```tsx SearchFilterComponent.tsx focus=11:12,23 + // from ./SearchFilterComponent.tsx + ```` + + ### Storing an Initial Value + + In React, we can use the `useState` hook is used to store the initial value of a state variable. When defining state variables, we provide an initial value as an argument to `useState`. + + In our example we hold two local states. `searchQuery` is for saving the current input value. `filteredList` holds all filtered movies based on the `searchQuery`. + + --- + + ```tsx SearchFilterComponent.tsx focus=47:48,52:57 + // from ./SearchFilterComponent.tsx + ```` + + ### Reading the Current State Value + + State variables in React can be accessed directly to read their current values. + + The value of `searchQuery`is shown in the search field. + + `filteredList` has the current data based on the `searchQuery`. Initially it shows all available movies loaded from the API. + + --- + + ```tsx SearchFilterComponent.tsx focus=27:34,47:51 + // from ./SearchFilterComponent.tsx + ```` + + ### Updating a State Value + From our `SearchField` we trigger an onChange event which updates the state variable which is hold by `searchQuery` (also known as [`controlled input`](https://www.marigold-ui.io/patterns/building-forms?theme=core#controlled-or-uncontrolled-components)). + + Also `filteredList` will be updated via the state update function `setFilteredList` which only holds the filtered values. Both triggers a re-render of the component which updates the UI based on these updated values. + + --- + + ```tsx SearchFilterComponent.tsx + // from ./SearchFilterComponent.tsx + ```` + + + Note + + In this example we using [`tanstack-query`](https://tanstack.com/query/latest). We will discuss this in more detail in a later chapter. + + + + + + diff --git a/src/routes/state-management/_components/server-state.mdx b/src/routes/state-management/_components/server-state.mdx new file mode 100644 index 0000000..490a762 --- /dev/null +++ b/src/routes/state-management/_components/server-state.mdx @@ -0,0 +1,77 @@ +import ServerStateExample from './ServerStateExample'; +import { Block } from '@/components/Container'; +import { SectionMessage, Text } from '@marigold/components'; + + + + + ```tsx ServerStateExample.tsx focus=21:23 + // from ./ServerStateExample.tsx + ```` + #### Initializing URL State for Filters + + We use the `useSearch` hook to get the url state for our filters. This state will store the user's input for the movie title and category. + + We also initialize the `useNavigate` hook which we need for updating our URL params. + + The `userRouterState` hook is useful to get the current URL params directly as string. + + --- + + ```tsx ServerStateExample.tsx focus=30:36 + // from ./ServerStateExample.tsx + ``` + #### Loading Initial Data + + For loading the initial data from the server we using the hook `useQuery`. It needs a queryKey for checking if the query is already cached. + The second param takes a function which is the requested endpoint and returns the requested data. + + --- + + ```tsx ServerStateExample.tsx focus=26:29 + // from ./ServerStateExample.tsx + ```` + #### Result Object + + The result object from `useQuery` has - besides the data - some useful states. + + * isPending - The query has no data yet + * isError - The query encountered an error + * error - If the query is in an isError state, the error is available via the error property + + + Note + + Because useQuery give use the states above we don't need to do it ourselves and get rid of using `useState` three times - awesome! + + + + --- + + ```tsx ServerStateExample.tsx focus=38:40 + // from ./ServerStateExample.tsx + ```` + #### Error Handling + + If an error occurs from the API we just return the error message. We get the error message from the error object we retrieve from `useQuery`. + + --- + + ```tsx ServerStateExample.tsx focus=48:52,60:64 + // from ./ServerStateExample.tsx + ``` + #### Updating Search Params + + Like in the other example we use the navigate function to update our search params. Because we have multiple params we are using the spread operator to copy the whole object and just update the specific value. + + --- + + ```tsx ServerStateExample.tsx focus=77 + // from ./ServerStateExample.tsx + ``` + #### Loading State + + While data is being fetched, we display a loading indicator. + + + diff --git a/src/routes/state-management/_components/url-search-filter-example.mdx b/src/routes/state-management/_components/url-search-filter-example.mdx new file mode 100644 index 0000000..84b5ae6 --- /dev/null +++ b/src/routes/state-management/_components/url-search-filter-example.mdx @@ -0,0 +1,43 @@ +import { Block } from '@/components/Container'; + + + + ```tsx UrlSearchFilterComponent.tsx focus=9,12 + // from ./UrlSearchFilterComponent.tsx + ```` + + ### Reading Search Params + + To read search params you have to import the current route config. With that access to different hooks. + The `useSearch` hook allows to get access to the search params. In our case we can read the value from `name`. + E.g. `/state-management?name=old` our value would be `old`. + + --- + + ```tsx UrlSearchFilterComponent.tsx focus=13,42:46 + // from ./UrlSearchFilterComponent.tsx + ```` + + ### Update the URL State + To update our search params to the actual value from the search bar we can use the `useNavigate` hook. + This allows to put the current value back in to the search param. + + --- + + + ```tsx UrlSearchFilterComponent.tsx + // from ./UrlSearchFilterComponent.tsx + ```` + + --- + + ```tsx SearchFilterComponent.tsx + // from ./SearchFilterComponent.tsx + ```` + + + Compared to the `SearchFilterComponent` the rest stays as it is. + + + + diff --git a/src/routes/state-management/_components/useFetch.tsx b/src/routes/state-management/_components/useFetch.tsx new file mode 100644 index 0000000..ed0676c --- /dev/null +++ b/src/routes/state-management/_components/useFetch.tsx @@ -0,0 +1,27 @@ +import { useQuery } from '@tanstack/react-query'; + +const fetchData = async ( + url: string, + queryParams: Record = {} +) => { + const queryString = new URLSearchParams(queryParams).toString(); + const apiURL = `${url}${queryString ? `?${queryString}` : ''}`; + const response = await fetch(apiURL); + if (!response.ok) { + throw new Error('Network response was not ok'); + } + return await response.json(); +}; + +const useFetch = ( + url: string, + queryKey: (string | { title: string; category: string })[], + queryParams?: Record +) => { + return useQuery({ + queryKey, + queryFn: () => fetchData(url, queryParams), + }); +}; + +export default useFetch; diff --git a/src/routes/state-management/index.lazy.tsx b/src/routes/state-management/index.lazy.tsx index 891833a..a64067a 100644 --- a/src/routes/state-management/index.lazy.tsx +++ b/src/routes/state-management/index.lazy.tsx @@ -1,12 +1,17 @@ import { createLazyFileRoute } from '@tanstack/react-router'; -import { Block } from '@/components/Container'; import Index from './index.mdx'; +import Title from '@/components/Title'; export const Route = createLazyFileRoute('/state-management/')({ component: () => ( - + <> + <Index /> - </Block> + </> ), }); diff --git a/src/routes/state-management/index.mdx b/src/routes/state-management/index.mdx index a7c0060..3d278bd 100644 --- a/src/routes/state-management/index.mdx +++ b/src/routes/state-management/index.mdx @@ -1,24 +1,356 @@ import DemoLink from '@/components/DemoLink'; -import ServerStateDoc from './server-state.mdx'; +import CounterExampleDoc from './_components/counter-example.mdx'; +import ContextApiExampleDoc from './_components/context-api-example.mdx'; +import SimpleSearchFilterComponentDoc from './_components/search-filter-example.mdx'; +import SimpleSearchFilterUrlComponentDoc from './_components/url-search-filter-example.mdx'; +import ServerStateDoc from './_components/server-state.mdx'; +import { Content } from '@/components/Container'; +import Preview from '@/components/Preview'; +import Counter from './_components/CounterExample'; +import SearchFilterComponent from './_components/SearchFilterComponent'; +import { Breakout, Center, SectionMessage, Text } from '@marigold/components'; +import UrlSearchFilterComponent from './_components/UrlSearchFilterComponent'; -# State Management +<Content> + In React, **state refers to any data that represents the current behavior of an application**. Examples include a list of objects fetched from the server, which item is currently selected, the name of the currently logged-in user and whether a modal is open. -## What is State Management ? + **State Management is the process of handling changes to state over time**. This involves: -**"State" is any data that describes the current behavior of an application.** This could include values like "a list of objects fetched from the server", "which item is currently selected", "name of the currently logged-in user", and "is this modal open?". + - Storing an initial value + - Reading the current value + - Updating a value -**State** allows you to create interactive and dynamic user interfaces. By managing the state of component, you can update the UI in response to user interactions, API calls, or other events. + React applications determine what UI to render based on the current state values. Thus, understanding when and how to use different techniques for managing state is a crucial skill for all React developers, as is deciding where a given piece of state should live. -Here are different types for state management that will be covered in our example: + For a comprehensive approach to state management, it's important to consider: -- **Local State:** Data we manage in one or another component e.g handling inputs data in from. + 1. **Local State:** This is state that is managed within a single component. It's ideal for state that doesn't need to be shared across multiple components. For this the hook `useState` can be used. + 2. **Global State:** This is state that needs to be accessible by multiple components throughout the application. Tools like Context API or Redux can be used to manage global state. + 3. **Server Cache:** This involves state that represents data fetched from a server. Unlike UI state, server cache should be managed differently, often using tools like React Query or SWR to handle data fetching, caching, and synchronization with the server. -- **Server State:** Data are fetched from the server via an API and cached on the client, there are a couple of great libraries that make data fetching in React a breeze such as: **_React Query_**. + By effectively managing local state, global state, and server cache, you can create a React application that is both efficient and easy to maintain. -### Let's break down the state management code example: + ## Using Local State -<DemoLink to="/state-management/preview">View Demo</DemoLink> + Local state in React is the state that is confined to a single component. It's ideal for managing data that doesn't need to be shared across multiple components. + By understanding these techniques for initializing, reading, updating, and handling local state, you can create dynamic and responsive React components that effectively manage their own data. + + In the following example we have a component which counts the clicks on the button. + <Preview> + <Counter /> + </Preview> + + Here's a detailed explanation of how to use local state in React: + +</Content> + +<CounterExampleDoc /> + +<Content> + ### Implementing Search and Filtering + In the next example below we build a little bit more complex component. With this we can search/filter for movies when typing something in the search input field. If something is found, the list is updated accordingly, otherwise a corresponding message appears. + + <Preview> + <SearchFilterComponent /> + </Preview> + + The following explanation explains how two handle multiple states: + +</Content> + +<SimpleSearchFilterComponentDoc /> + +<Content> + ### Potential Disadvantages + For now the component above works well but let us think where we could possibly improve it to avoid some pitfalls. + + #### State Management Complexity: + + * **Multiple sources of truth:** Using local state (`searchQuery` and `filteredList) means managing state within the component. If the state is also used or needed elsewhere, it can lead to inconsistencies and difficulties in synchronizing state across components. + * **Component bloat:** As the component grows in complexity, managing multiple pieces of state within a single component can make it harder to read, maintain, and debug. + + #### Performance Issues: + + * **Frequent re-renders:** Each time `searchQuery` or `filteredList` updates, the component re-renders. If this component is part of a larger application, these frequent re-renders can negatively impact performance, especially if the component is deeply nested or the movie list is large. + * **Inefficient filtering:** Filtering the movies array within the `handleSearchChange function can become inefficient if the dataset is large. This operation is performed on each keystroke, which can lead to noticeable lag. + + #### Testability and Reusability: + + * **Difficult testing:** Testing components with local state often requires setting up the component in a specific state to test various scenarios. This can make tests more complex and harder to write. + * **Limited reusability:** Local state ties the logic to a specific component. If the filtering logic is needed elsewhere, it has to be duplicated, violating the DRY (Don't Repeat Yourself) principle. + + #### Limited Scalability: + * **Handling more features:** As the application grows and more features are added (e.g., additional filters, pagination), managing all these states within a single component becomes cumbersome. It may be better to use a state management library like [Context API](#context-api), [Redux](https://redux.js.org/) or [Zustand](https://github.com/pmndrs/zustand) to handle **global state** more efficiently. + + ## Using Global State + When you have growing applications a point will come where it doesn't feel good to use equal or similar state in multiple components. It also doesn't feel good to pass state through different component until it reaches the component where the state is used (also know as [prop drilling](https://dev.to/codeofrelevancy/what-is-prop-drilling-in-react-3kol)). + When you feel bad about this than it's time to think about global state. + Primarily, global state refers to state tge is accessible across different components in the application, enabling a centralized and consistent way to manage data. + + ### Why Use Global State? + Global state is useful in several scenarios: + + 1. **Shared data**: When multiple components need to access and update the same piece of data. For example, user authentication status, theme settings, or language preferences. + 2. **Complex state logic**: When the state logic is complex and needs to be shared across components. For instance, managing the state of a shopping cart in an e-commerce application. + 3. **Communication between components**: Facilitating communication between sibling components that do not have a direct parent-child relationship. + +</Content> + <Breakout alignX="center"> + <img src="/component-tree-prop-drill.png" + alt="component_tree_prop_drill" /> + </Breakout> +<Content> + In the picture above you see a visualization of a component tree in React. So `<ProductPage>` contains `<Sidebar>` and `<MainContent>`. Sidebar holds `<Filter>`, `<SubCategoryFilter>` and `<Sort>`. The MainContent has `<ProductList>` and inside ProductList is `<ProductItem>` rendered. + + There is a prop `category` which is used by multiples components. But the thing is that `category` isn't used in any components down the tree. So Sidebar, MainContent and ProductList are just pass down the props to their child components. + + A disadvantage of this approach is that when the category value is changed, all components that use the category are re-rendered. This can lead to performance issues. + + Another disadvantage is that when changing the prop name or adding another prop, which is also required in many components, you have to go through all the components, which can lead to errors. + + <SectionMessage variant="info"> + <SectionMessage.Title>Rule of thumb</SectionMessage.Title> + <SectionMessage.Content> + <Text>There is no official rule, but from experience if you pass props more than 3-levels deep you should consider using global state.</Text> + </SectionMessage.Content> + </SectionMessage> + + The good news are that there are some possibilities to avoid these problems. + + ### Context API + The Context API is built into React and allows you to pass data through the component tree without having to pass props down manually at every level - it's like you "teleport" data down the tree where it is needed. + + <Center> + <img src="/goku.gif" + alt="goku_teleportation" /> + </Center> + + To use Context there are mainly 3 steps necessary: + + 1. Create and export it with `export const MyContext = createContext(defaultValue)`. + 2. Pass it to the `useContext(MyContext)` hook to read it in any child component, no matter how deep. + 3. Wrap children into `<MyContext.Provider value={...}>` to provide it from a parent. + +</Content> + +<ContextApiExampleDoc /> + +<Content> + + Let's look again how our component tree looks like after using `ContextAPI`. + +</Content> + + <Breakout alignX='center'> + <img src="/component-tree-context-api.png" + alt="component_tree_prop_drill" /> + </Breakout> + +<Content> + Finally, we were able to remove the places where the props are simply passed on to the next component, so we now exactly know which components are using that state. + + **Pros:** + + * **Centralized state management:** Useful for managing global state that multiple components need access to. + * **Encapsulation:** State logic is encapsulated in the Provider, making the application more modular. + * **Avoid prop drilling:** Helps to avoid passing props through many layers of components. + + **Cons:** + + * **Overhead for small apps:** Might be overkill for small applications with simple state requirements. + * **Performance:** When the value provided by a context changes, all components that consume this context will re-render. If the context value changes frequently or includes data that changes often, it can cause a cascade of re-renders throughout the component tree, leading to performance issues. + + ## URL State + Another option to manage global state, especially if it is not very complex, is URL state. This pattern is used to manage state that should be reflected in the URL, which can be bookmarked or shared. This is particularly useful for representing the state of the application in a way that is persistent and shareable. + + By encoding state in the URL, navigation concerns are separated from the component logic. This means that components can focus on rendering and managing their own local state, while the URL manages the global navigation state. + + Using the URL for global state reduces the need for complex state management libraries like Redux for certain scenarios. For instance, filtering, sorting, and pagination states can be managed directly through URL parameters. + + ### Extend Search and Filtering + + Let's see how we can improve our `SearchFilterComponent` from above when using URL state. + + <Preview> + <UrlSearchFilterComponent /> + </Preview> + + When you type something in the search you will see how the URL param is updated. In our case we use [`tanstack-router`](https://tanstack.com/router/latest). This 3rd party library provide some useful hooks for working with URL params. + Using this we manage the URL state more efficiently and keep the component decoupled and clean. This method ensures that the search query is reflected in the URL, making the application state shareable and bookmarkable. + + To test this type something into the search field. Than copy the URL and open another tab. The result should be the same. + + But let's have look into the code how it works. + +</Content> + +<SimpleSearchFilterUrlComponentDoc /> + +<Content> + **Advantages** + + * **Simplified state management**: By leveraging the URL for state, you can reduce the complexity of managing global state in your application. + + * **Improved component reusability**: Decoupled components that rely on URL parameters can be reused in different contexts with minimal modification. + + * **Enhanced user experience**: Users can share URLs that fully represent the application state, improving the overall user experience through better navigation and state persistence. + + **Considerations** + + * **URL length and complexity**: Be mindful of the length and complexity of URLs. Encoding too much state in the URL can make it cumbersome and less readable. + + * **Security**: Avoid storing sensitive information in the URL, as it is not secure and can be easily accessed by others. + + ## Server Cache + + Another approach in state management is using a **server cache**. Server Cache refers to storing frequently accessed data on the client side to improve performance and reduce the load on the backend database or other persistent storage. It's also great from the UX perspective because the user "never" has to wait, so to speak. + +</Content> + +<Breakout alignX="center"> + <img src="/server-cache-dia.png" alt="server_cache_diagram" /> +</Breakout> + +<Content> + How you can see from the image above they are two different scenarios: + + <SectionMessage variant="info"> + <SectionMessage.Title>Note</SectionMessage.Title> + <SectionMessage.Content> + <Text>Even it is called server cache it doesn't belongs to the server itself! It's on the client side and stored in-memory.</Text> + </SectionMessage.Content> + </SectionMessage> + + **Requested data already cached:** When the client sends a request, the server cache is checked first. If the data is present, the response is returned immediately. + + **Requested data isn't cached:** When the client sends a request, the server cache is checked first. The data isn't available yet, the server fetches the data from the primary storage, stores it in the cache for future requests, and then returns it to the client. + + ### Using Server Cache in React + + A common pattern in React for handling remote data is to fetch inside `useEffect` and copy the result into component state. Something like this: + + ```tsx Example.tsx + function Example() { + const [isLoading, setIsLoading] = useState(); + const [error, setError] = useState(); + const [userData, setUserData] = useState(); + + useEffect(() => { + async function getUserData() { + try { + setIsLoading(true); + const data = await fetchUser(); + setUserData(data); + setIsLoading(false); + } catch (err) { + setIsLoading(false); + setError(err); + } + } + getUserData(); + }, []); + + if (error) { + return <div>An error occured: {error.message}</div>; + } + + if (isLoading) { + return <Loading />; + } + + if (data) { + return <div>Loaded data: {userData.name}</div>; + } + } + ```` + + So far so good. But what is if we need `userData also in other components at different levels of nesting? For example, we might need to read user permissions from completely independent areas of our app. Passing data through props can quickly get unfeasible. + + One solution might be to reach for a global state store like **Context API** or **URL state**. The thing is we need to repeat this boilerplate in every component where we fetch data. + The `useEffect needs to be written and we need to maintain the exact same states of the asynchronous process each time. + + We can solve these problems by: + + 1. Abstracting away the boilerplate of the asynchronous process (loading, error, etc.). + 2. Storing our remote data in an in-memory cache. + + Thankfully, there are two good libraries solve both of these problems: [swr](https://swr.vercel.app/) and [react-query](https://tanstack.com/query/latest). Both libraries provide custom React hooks for managing remote data fetching. In the following example we use react-query because it's part of tanstack (we have already used the Tanstack router in a previous example). + + ### Caching with react-query + When using queries the returned data will automatically be cached. + Query instances via `useQuery` or `useInfiniteQuery` by default consider cached data as stale. Stale means that the data on the client side could be outdated. For this react-query has some smart refetch strategies where it tells "Yep, now would be a good time to go get some data". These are: + + * New instances of the query mount + * The window is refocused + * The network is reconnected + * The query is optionally configured with a refetch interval + + The best thing about this is that it works out-of-the-box. + + ### react-query in Action + In the next example you can see a page where you can search for movies and filter for some categories using react-query. + + Here are some hints on how you can see the cache and refetch strategies in action: + + * When typing the first time you will see how the loading indicator appears. Typing again the same you will notice that the indicator doesn't appear again - cause of the cached results + * Open the network tab in the developer tools (F12). Open another tab and go back to the previous. You will see that the data request is executed again. The same happens when you turn the network off/on. + + <DemoLink to="/state-management/preview">View Demo</DemoLink> + + #### Let's Break Down the State Management Code Example: + +</Content> <ServerStateDoc /> -<div style={{ height: 300 }} /> +<Content> + ### Benefits + Using server cache and a library like `react-query` has some nice benefits. + + * **Improved performance and speed**: Cause of the caching mechanism the amount of API calls will be reduced and speeds up data retrieval. + * **Simplified data fetching logic**: Less code because libraries like react-query abstract away the complexities of managing the data fetching lifecycle. + * **Easier state handling**: Cause of the built-in mechanism it is easier to handle error, loading and pending states. + * **Smart refetching strategies**: Your local data keeps up to date with the server data. + + ### Conclusion + Server cache in combination with react-query is a powerful tool for managing server state in your React applications. + It abstracts the complexities of data fetching, caching, and synchronization, allowing you to focus on building your UI. + + ## Recap State Management Strategies + We have now seen a few different ways to manage status in a React app. The following part is a recommendation on when to use a certain strategy. + + ### When to Use Local State: + * **Component-specific data:** Data that only needs to be accessed or modified within a single component. + Example: Form inputs, toggles, counters. + * **Temporary state:** Data that doesn't need to persist beyond the lifecycle of a component. + Example: Modal visibility, dropdown open/close state. + * **Simple state logic:** When state management logic is straightforward and does not require complex handling. + Example: UI element states like hover effects, active tab index. + + ### When to Use Global State: + * **Shared data:** Data that needs to be accessible by multiple components. + Example: User authentication status, theme settings, application-wide notifications. + * **Application-wide state:** State that needs to be consistent and shared throughout the application. + Example: Shopping cart contents, user preferences. + * **Complex state logic:** When state management requires advanced logic, derived data, or needs to be centralized. + Example: Multi-step workflows. + + ### When to Use URL State: + * **Shareable state:** When you want to enable users to share the current state of the application via a URL. + Example: Search filters, pagination state, current view or tab. + * **Persisted across reloads:** State that should persist even when the page is reloaded. + Example: Form step in a multi-step form, selected items in a list. + * **Routing state:** State that is naturally part of the navigation logic. + Example: Selected product in a product detail page, active section in a single-page application. + + ### When to Use Server Cache: + * **Remote data fetching:** When data needs to be fetched from a server or external API. + Example: User data, product listings, blog posts. + * **Asynchronous data:** Handling data that involves asynchronous operations and needs to manage loading and error states. + Example: Data fetched on component mount, search results. + * **Data synchronization:** Keeping data in sync with the server and managing cache invalidation. + Example: Real-time updates, live data feeds. + * **Performance optimization:** Reducing network requests and improving load times by caching responses. + Example: Caching API responses to avoid redundant requests. + +</Content> diff --git a/src/routes/state-management/preview.lazy.tsx b/src/routes/state-management/preview.lazy.tsx index e1e201f..f5dd204 100644 --- a/src/routes/state-management/preview.lazy.tsx +++ b/src/routes/state-management/preview.lazy.tsx @@ -1,13 +1,12 @@ import { createLazyFileRoute } from '@tanstack/react-router'; -import theme from '@marigold/theme-core'; -import { MarigoldProvider } from '@marigold/components'; +import { Block } from '@/components/Container'; import ServerStateExample from './_components/ServerStateExample'; export const Route = createLazyFileRoute('/state-management/preview')({ component: () => ( - <MarigoldProvider theme={theme}> + <Block data-theme="core"> <ServerStateExample /> - </MarigoldProvider> + </Block> ), }); diff --git a/src/routes/state-management/server-state.mdx b/src/routes/state-management/server-state.mdx deleted file mode 100644 index 2adcb3f..0000000 --- a/src/routes/state-management/server-state.mdx +++ /dev/null @@ -1,64 +0,0 @@ -import ServerStateExample from './_components/ServerStateExample'; - -<CH.Scrollycoding> - - ```tsx ServerStateExample.tsx focus=24:27 - // from ./_components/ServerStateExample.tsx - ```` - #### Initializing local state for filters using useState hook - - Here, we use the `useState` hook to manage the local state of our filters. This state will store the user's input for the movie title and category. - - --- - - ```tsx ServerStateExample.tsx focus=63,71:73 - // from ./_components/ServerStateExample.tsx - ```` - #### Handle User Input: SearchField & Select - - We use the `SearchField` component to allow the user to input a search query. The `onChange` handler updates the local state with the new search term, which triggers a re-fetch of the data. - - The `Select` component allows the user to choose a category. The `onChange` handler updates the local state with the selected category, which also triggers a re-fetch of the data. - - --- - - ```tsx ServerStateExample.tsx focus=29:37 - // from ./_components/ServerStateExample.tsx - ```` - #### Fetch date from server - - The `fetchData` function builds the API URL with query parameters and fetches data from the server. - - --- - - ```tsx ServerStateExample.tsx focus=39:51 - // from ./_components/ServerStateExample.tsx - ```` - #### Use React Query to Manage Server State - - The `useQuery` hook from React Query fetches data based on the current filters and manages the server state, including loading and error states. - - --- - - - - ```tsx ServerStateExample.tsx focus=53:55 - // from ./_components/ServerStateExample.tsx - ``` - #### Error Handling - - If an error occurs during data fetching, we display an error message. - - --- - - - - - ```tsx ServerStateExample.tsx focus=86 - // from ./_components/ServerStateExample.tsx - ``` - #### Loading State - - While data is being fetched, we display a loading indicator. - -</CH.Scrollycoding>