├── .changeset
├── README.md
└── config.json
├── .devcontainer
└── devcontainer.json
├── .github
├── dependabot.yml
└── workflows
│ ├── release.yml
│ └── test.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── __tests__
└── ScrollRestorer.spec.ts
├── eslint.config.mjs
├── next-app-mock
├── .gitignore
├── next.config.js
├── package.json
├── pnpm-lock.yaml
├── src
│ ├── ClientSideScrollRestorer.tsx
│ └── app
│ │ ├── globals.css
│ │ ├── high-with-loading
│ │ ├── SomeClient.tsx
│ │ ├── loading.tsx
│ │ └── page.tsx
│ │ ├── high
│ │ └── page.tsx
│ │ ├── layout.tsx
│ │ ├── low-page
│ │ └── page.tsx
│ │ ├── page.module.css
│ │ └── page.tsx
└── tsconfig.json
├── package.json
├── playwright.config.ts
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── src
├── ScrollRestorer.tsx
├── index.ts
├── storage.ts
├── useScrollRestorer.ts
└── util.ts
├── tsconfig.eslint.json
├── tsconfig.json
└── tsup.config.ts
/.changeset/README.md:
--------------------------------------------------------------------------------
1 | # Changesets
2 |
3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
4 | with multi-package repos, or single-package repos to help you version and publish your code. You can
5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets)
6 |
7 | We have a quick list of common questions to get you started engaging with this project in
8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
9 |
--------------------------------------------------------------------------------
/.changeset/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
3 | "changelog": "@changesets/cli/changelog",
4 | "commit": false,
5 | "fixed": [],
6 | "linked": [],
7 | "access": "restricted",
8 | "baseBranch": "main",
9 | "updateInternalDependencies": "patch",
10 | "ignore": []
11 | }
12 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | {
2 | "image": "mcr.microsoft.com/devcontainers/typescript-node:22",
3 | "customizations": {
4 | "vscode": {
5 | "extensions": ["GitHub.vscode-pull-request-github"]
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "composer"
4 | directory: "/"
5 | schedule:
6 | interval: "weekly"
7 | groups:
8 | all:
9 | patterns:
10 | - "*"
11 | commit-message:
12 | prefix: "php packages"
13 | - package-ecosystem: "github-actions"
14 | directory: /
15 | groups:
16 | all:
17 | patterns:
18 | - "*"
19 | commit-message:
20 | prefix: "github-actions"
21 | schedule:
22 | interval: "weekly"
23 | - package-ecosystem: "npm"
24 | directory: "/"
25 | groups:
26 | all:
27 | patterns:
28 | - "*"
29 | schedule:
30 | interval: "weekly"
31 | commit-message:
32 | prefix: "npm"
33 | - package-ecosystem: "docker"
34 | groups:
35 | all:
36 | patterns:
37 | - "*"
38 | directory: "/"
39 | schedule:
40 | interval: "weekly"
41 | commit-message:
42 | prefix: "docker"
43 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 | on:
3 | push:
4 | branches:
5 | - main
6 | concurrency: ${{ github.workflow }}-${{ github.ref }}
7 | permissions: {}
8 | jobs:
9 | release:
10 | if: github.repository == 'RevoTale/next-scroll-restorer'
11 | concurrency: release
12 | # prevents this action from running on forks
13 | permissions:
14 | contents: write # to create release (changesets/action)
15 | pull-requests: write # to create pull request (changesets/action)
16 | id-token: write
17 |
18 | name: Release
19 | runs-on: ubuntu-latest
20 | steps:
21 | - name: Checkout Repo
22 | uses: actions/checkout@v4
23 | - uses: pnpm/action-setup@v4.1.0
24 | - name: Setup Node.js
25 | uses: actions/setup-node@v4
26 | with:
27 | node-version: 20.x
28 | cache: pnpm
29 | - run: pnpm install --frozen-lockfile
30 | - name: Create Release Pull Request or Publish to npm
31 | id: changesets
32 | uses: changesets/action@v1
33 | with:
34 | version: pnpm changeset:version
35 | publish: pnpm changeset:publish
36 | env:
37 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
38 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
39 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 | on:
3 | pull_request:
4 | branches:
5 | - main
6 | push:
7 | branches:
8 | - '**'
9 | permissions:
10 | contents: read
11 | jobs:
12 | Unit:
13 | runs-on: ${{ matrix.os }}
14 | timeout-minutes: 15
15 | strategy:
16 | matrix:
17 | node-version: [20,22]
18 | os: [ubuntu-latest]
19 | steps:
20 | - uses: actions/checkout@v4
21 | - uses: pnpm/action-setup@v4.1.0
22 | - uses: actions/setup-node@v4
23 | with:
24 | node-version: ${{ matrix.node-version }}
25 | cache: pnpm
26 | - run: pnpm i && pnpm build
27 | - run: pnpm playwright install --with-deps
28 | - run: pnpm test
29 | env:
30 | CI: true
31 | - uses: actions/upload-artifact@v4
32 | with:
33 | name: my-artifacts-${{inputs.context}}-${{inputs.job-index}}-${{ matrix.node-version }}
34 | path: playwright-report/
35 | - uses: actions/download-artifact@v4
36 | with:
37 | pattern: my-artifacts-${{inputs.context}}*
38 | merge-multiple: true
39 | Lint:
40 | runs-on: ubuntu-latest
41 | timeout-minutes: 5
42 | steps:
43 | - uses: actions/checkout@v4
44 | - uses: pnpm/action-setup@v4.1.0
45 | - uses: actions/setup-node@v4
46 | with:
47 | node-version: 20
48 | cache: pnpm
49 | - run: pnpm i
50 | - run: pnpm lint
51 | Types:
52 | runs-on: ubuntu-latest
53 | timeout-minutes: 5
54 | steps:
55 | - uses: actions/checkout@v4
56 | - uses: pnpm/action-setup@v4.1.0
57 | - uses: actions/setup-node@v4
58 | with:
59 | node-version: 20
60 | cache: pnpm
61 | - run: pnpm i
62 | - run: pnpm tsc
63 | Test:
64 | needs: [ Lint, Unit, Types ]
65 | runs-on: ubuntu-latest
66 | steps:
67 | - name: Success
68 | run: echo "Ready to merge!"
69 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist
2 | node_modules
3 | .idea
4 | /test-results/
5 | /playwright-report/
6 | /blob-report/
7 | /playwright/.cache/
8 | .pnpm-store
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # next-scroll-restorer
2 |
3 | ## 0.10.1
4 |
5 | ### Patch Changes
6 |
7 | - e7ddcfd: Remove console.log from build output
8 |
9 | ## 0.10.0
10 |
11 | ### Minor Changes
12 |
13 | - 0f56dc7: Change bundler to `tsup`
14 |
15 | ### Patch Changes
16 |
17 | - 0f56dc7: Fix eslint error according to new eslint config.
18 | - 0f56dc7: Drop support for nextjs 14 because there is a major changeset between react 18 and 19
19 | - 0f56dc7: Add tests on different nextjs verisions and lowest/highest deps
20 |
21 | ## 0.9.9
22 |
23 | ### Patch Changes
24 |
25 | - 348927d: bump packages to latest version
26 |
27 | ## 0.9.8
28 |
29 | ### Patch Changes
30 |
31 | - 2a73a3a: Update dependabot to keep up-to-date major versions
32 | - 2a73a3a: Bump to react^19 nad next^15
33 | - 2a73a3a: Bump pnpm/action-setup@v4.0.0
34 |
35 | ## 0.9.7
36 |
37 | ### Patch Changes
38 |
39 | - 5910596: Add NPM package link to README.
40 |
41 | ## 0.9.6
42 |
43 | ### Patch Changes
44 |
45 | - e771ab8: Add NPM badge to Readme
46 |
47 | ## 0.9.5
48 |
49 | ### Patch Changes
50 |
51 | - 11f1008: Update readme. Fix NPM approval badge.
52 |
53 | ## 0.9.4
54 |
55 | ### Patch Changes
56 |
57 | - 2f3b482: Fix bug where safari workaround caused revert to previous scroll position when spwiping to the top of the website.
58 | - 2f3b482: Add integration tests with simulation of Safari scroll reset bug.
59 | Finally, make working workaround for this bug.
60 |
61 | ## 0.9.3
62 |
63 | ### Patch Changes
64 |
65 | - be75ad0: Fix bug where safari workaround caused revert to previous scroll position when spwiping to the top of the website.
66 |
67 | ## 0.9.2
68 |
69 | ### Patch Changes
70 |
71 | - eb273a2: Update readme to use suspense
72 | - eb273a2: Increase threshold for Safari scroll reset bug workaround, because sometimes Safari browser fires it even after 700ms.
73 |
74 | ## 0.9.1
75 |
76 | ### Patch Changes
77 |
78 | - 8874f56: Fix Test CI to run on release merge.
79 |
80 | ## 0.9.0
81 |
82 | ### Minor Changes
83 |
84 | - 776dc72: Added many tests with complex cases and stress situations. In my opinion, 100% of cases in real-world browser are coveraged by tests.
85 | - 776dc72: Fixed broken behaviour of previous version.
86 |
87 | ### Patch Changes
88 |
89 | - 776dc72: Rewritten component from scratch to match all existing tests.
90 | - 776dc72: More test for scroll behaviour. Test for history replaceState limitation described in https://github.com/sveltejs/kit/issues/365
91 | - 776dc72: Prevent error Unhandled Rejection (SecurityError): Attempt to use history.pushState() more than 100 times per 30 seconds react.
92 | - 776dc72: Workaround for Safari resetting scroll position.
93 |
94 | ## 0.8.0
95 |
96 | ### Minor Changes
97 |
98 | - 97980df: Save scroll position to window history instead of local storage.
99 |
100 | ### Patch Changes
101 |
102 | - 97980df: Update README with all the latest features.
103 | - 97980df: Update Readme with the latest updates. Restructure to be more informative and clean.
104 |
105 | ## 0.7.1
106 |
107 | ### Patch Changes
108 |
109 | - 075cc6e: Add option to delay scroll restoration.
110 |
111 | ## 0.7.0
112 |
113 | ### Minor Changes
114 |
115 | - 2d1c8a1: Make tests more complex to cover a wider range of issues. Redesign scroll restorer to pass them. Removed unnecessary complexity of scroll restorer.
116 | - 2d1c8a1: Add end-to-end testing of `ScrollRestorer` in real NextJS application.
117 |
118 | ### Patch Changes
119 |
120 | - 2d1c8a1: Add tests that stress out scroll restorer. It showed up a bug I experienced in Safari browser with recent NextJS 14 minor versions.
121 |
122 | ## 0.6.15
123 |
124 | ### Patch Changes
125 |
126 | - 3ef329d: Add support for NextJS 14.
127 | - 3ef329d: Export scroll restorer as a hook.
128 |
129 | ## 0.6.14
130 |
131 | ### Patch Changes
132 |
133 | - 6985c58: Improve README
134 |
135 | ## 0.6.13
136 |
137 | ### Patch Changes
138 |
139 | - a228a70: Fix readme headings
140 | - 49711f2: fix bundle preparation
141 |
142 | ## 0.6.12
143 |
144 | ### Patch Changes
145 |
146 | - 7500bfa: Readme guide
147 |
148 | ## 0.6.11
149 |
150 | ### Patch Changes
151 |
152 | - 0437a7f: fix repository naming occurrences
153 |
154 | ## 0.6.10
155 |
156 | ### Patch Changes
157 |
158 | - f2ece35: Fix release process
159 |
160 | ## 0.6.9
161 |
162 | ### Patch Changes
163 |
164 | - 9b83c24: Fix release process
165 |
166 | ## 0.6.8
167 |
168 | ### Patch Changes
169 |
170 | - 01d9913: Introduced scroll restoration component that performs much better than alternatives, but can only be used for `appDir` NextJS apps.
171 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 RevoTale
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # NextJs Scroll Restorer
2 | 
3 | 
4 | 
5 | 
6 | 
7 |
8 | [next-scroll-restorer](https://www.npmjs.com/package/next-scroll-restorer) handles scroll restoration for Next.js apps built with **app** directory.
9 | Fixed bugs that Next.js team ignored.
10 |
11 | **Important!** This component works only for application written with [**Next.js 'app' directory**](https://nextjs.org/docs/app).
12 | ## Install
13 | - `npm install next-scroll-restorer` for [NPM](https://www.npmjs.com/package/next-scroll-restorer)
14 | - `pnpm add next-scroll-restorer` for [pnpm](https://pnpm.io)
15 | - `yarn add next-scroll-restorer` for [Yarn](https://yarnpkg.com)
16 |
17 | ## Key features
18 | - 100% of codebase written in Typescript
19 | - Can be used at any nesting `layout.tsx` file. Root layout isn't required.
20 | - Fixed bug where built-in Next.js scroll restoration is not immediate
21 | - Fixed annoying bug where [scroll position forgotten by Next.js built-in scroll restoration.](https://github.com/vercel/next.js/issues/53777)
22 | - Extensive testing in different browsers with [Playwright](https://github.com/microsoft/playwright) testing library.
23 | ## Presequences
24 | Before you start, keep in mind following rules.
25 | - Keep disabled native `scrollRestoration` option in Next.js config to avoid conflicts.
26 | - **Skip this rule for Next.js [14.1.0](https://github.com/vercel/next.js/releases/tag/v14.1.0) and higher.** In case your Next.js version is less than [14.1.0](https://github.com/vercel/next.js/releases/tag/v14.1.0) then you should enable `windowHistorySupport` in your Next.js config under `expermimental` property.
27 | [Since Next.js 14.1.0 browser history support is enabled by default.](https://github.com/vercel/next.js/pull/60557)
28 | ```js
29 | /** @type {import('next').NextConfig} */
30 | const nextConfig = {
31 | experimental:{
32 | //Only For Next.js versions prior to 14.1.0 because it is enabled by default since version 14.1.0
33 | windowHistorySupport:true
34 | },
35 | }
36 | module.exports = nextConfig
37 | ```
38 |
39 |
40 | ## Usage
41 |
42 | ### Step 1
43 | Create component named `ClientSideScrollRestorer` in your `src` directory with `useScrollRestorer` hook and `"use client"` directive to prevent server errors.
44 |
45 | **src/ClientSideScrollRestorer.tsx**
46 | ```tsx
47 | "use client"
48 | import {useScrollRestorer} from 'next-scroll-restorer';
49 | const ClientSideScrollRestorer = () => {
50 | useScrollRestorer()
51 | return <>>
52 | }
53 | export default ClientSideScrollRestorer
54 | ```
55 | ### Step 2
56 | Import component created in a previous step to your root layout file (layout.tsx).
57 | Wrap it wih [React](https://react.dev/reference/react/Suspense) `` to avoid possible [client-side deopting for entire page](https://nextjs.org/docs/messages/deopted-into-client-rendering).
58 |
59 | **app/layout.tsx**
60 | ```tsx
61 | import ClientSideScrollRestorer from '../src/ClientSideScrollRestorer'
62 | import {ReactNode, Suspense} from "react";
63 |
64 | type Props = {
65 | children: ReactNode
66 | }
67 | const RootLayout = ({children}) => {
68 | return (
69 |
70 |
{children}
71 |
72 |
73 |
74 |
75 | )
76 | }
77 |
78 | export default RootLayout
79 | ```
80 | It can be any nesting layout shared by [group of routes](https://nextjs.org/docs/app/building-your-application/routing/route-groups) in case you do not want to enable scroll restoration for the whole application.
81 |
82 |
--------------------------------------------------------------------------------
/__tests__/ScrollRestorer.spec.ts:
--------------------------------------------------------------------------------
1 | import {test, expect, Page,} from '@playwright/test'
2 |
3 | const highPage = 1300
4 | const mainPage = 2600
5 | const resolveTimeout = (time: number) => (async () => {
6 | return new Promise(resolve => {
7 | setTimeout(() => {
8 | resolve(1)
9 | }, time)
10 | })
11 | })()
12 | const getScrollY = (page: Page) => page.evaluate((): number => window.scrollY)
13 |
14 | const expectScrollToBe = async (page: Page, value: number) => {
15 | await resolveTimeout(50)
16 | await expect(getScrollY(page)).resolves.toBeGreaterThanOrEqual(value - 2)
17 | await expect(getScrollY(page)).resolves.toBeLessThanOrEqual(value + 2)
18 | }
19 | const scrollPage = (page: Page, scrollY: number) => {
20 | return page.evaluate(async (value) => {
21 | return await new Promise((resolve) => {
22 | if (window.scrollY === value) {
23 | resolve(true)
24 | return
25 | }
26 | const timeout = setTimeout(() => {
27 | window.scrollTo({
28 | top: value,
29 | left: 0,
30 | behavior: "smooth",
31 | })
32 | }, 500)//There are lags 3with smooth scroll behavior. THis is workaround to trigger scroll again.
33 | const listener = () => {
34 | const diff = (value - window.scrollY)
35 | if (-2 < diff && diff < 2) {
36 | window.removeEventListener('scroll', listener)
37 | resolve(true)
38 | clearTimeout(timeout)
39 | }
40 |
41 | }
42 | window.addEventListener('scroll', listener, {
43 | passive: true
44 | })
45 | window.scrollTo({
46 | top: value,
47 | left: 0,
48 | behavior: "smooth",
49 | })
50 |
51 | })
52 | }, scrollY)
53 | }
54 | const initTests = async (page: Page) => {
55 |
56 | await page.goto('/')
57 | // Default behavior to start.
58 | const el = page.getByText('Lets-go to low-page')
59 | await expectScrollToBe(page, 0)
60 | await el.scrollIntoViewIfNeeded()
61 | await expectScrollToBe(page, mainPage)
62 | await el.click()
63 | await expect(page).toHaveURL('/low-page')
64 | await expect(page.locator('h1')).toContainText('This is the low page')
65 | await expectScrollToBe(page, 0)
66 | await page.goBack()
67 | }
68 | test('End to end testing of scroll restorer', async ({page, browserName}) => {
69 |
70 | await initTests(page)
71 | await expect(page).toHaveURL('/')
72 | await resolveTimeout(1000) //Check if Next.js does not brake scroll position later
73 | await expectScrollToBe(page, mainPage)
74 | await page.goForward()
75 | await expectScrollToBe(page, 0)
76 | //A little bit of stress for app
77 | await page.goBack()
78 |
79 | await expectScrollToBe(page, mainPage)
80 | for (let i = 0; i < 10; i++) {
81 | await page.goForward()
82 | await resolveTimeout(10)//Sometimes browsers struggle to restore the same millisecond
83 | await page.goBack()
84 | }
85 |
86 | await expectScrollToBe(page, mainPage)
87 | await page.goForward()
88 |
89 | await expectScrollToBe(page, 0)
90 | await page.goBack()
91 | await expectScrollToBe(page, mainPage)
92 |
93 | //End of a little bit of stress for app
94 |
95 | //Test when both pages are high
96 | await page.goto('/high')
97 | await expectScrollToBe(page, 0)
98 |
99 | const mainEl = page.getByText('Lets-go to main')
100 | await mainEl.scrollIntoViewIfNeeded()
101 | await page.waitForURL('/high')
102 | await expectScrollToBe(page, highPage)
103 | await mainEl.click()
104 | await expectScrollToBe(page, 0)
105 | await page.waitForURL('/')
106 |
107 |
108 | await page.getByText('Lets-go to low-page').scrollIntoViewIfNeeded()
109 | await expectScrollToBe(page, mainPage)
110 |
111 | await page.getByText('Lets-go to low-page').click()
112 |
113 | await expectScrollToBe(page, 0)
114 | await page.waitForURL('/low-page')
115 |
116 | await page.goBack()
117 |
118 | await expectScrollToBe(page, mainPage)
119 | await page.waitForURL('/')
120 | await page.goBack()
121 | await expectScrollToBe(page, highPage)
122 | await page.waitForURL('/high')
123 | await page.goForward()
124 | await page.waitForURL('/')
125 | await expectScrollToBe(page, mainPage)
126 |
127 |
128 | await page.reload()
129 | if (browserName === "firefox") {
130 | await page.goBack() //Firefox pushed new history entry history after reload https://github.com/microsoft/playwright/issues/22640
131 | }
132 | await resolveTimeout(1000)//Sometimes browsers struggle to restore the same millisecond
133 | await expectScrollToBe(page, mainPage)
134 |
135 |
136 |
137 | await page.getByText('Lets-go without scroll').scrollIntoViewIfNeeded()
138 | await expectScrollToBe(page, mainPage)
139 | await page.getByText('Lets-go without scroll').click()
140 | await page.waitForURL('/?fff=fff')
141 | await expectScrollToBe(page, mainPage)
142 |
143 | })
144 |
145 | test('Safari scroll reset bug simulation', async ({page}) => {
146 | await initTests(page)
147 | await page.goForward()
148 | await expectScrollToBe(page, 0)
149 | await page.goBack()
150 | await page.evaluate(() => {
151 | window.scrollTo({
152 | top: 0,
153 | behavior: 'instant'
154 | })
155 | })//This is actual bug behaviour
156 |
157 | await resolveTimeout(500) //Webkit does it not immediately
158 | await expectScrollToBe(page, mainPage)
159 | await page.evaluate(() => {
160 | window.scrollTo({
161 | top: 0,
162 | behavior: 'instant'
163 | })
164 | })//Test second time, it should allow scroll
165 |
166 | await resolveTimeout(500) //Webkit does it not immediately
167 | await expectScrollToBe(page, 0)
168 |
169 |
170 | })
171 | //I keep this test to have amount of test
172 | test('Some random behaviour 1',async ({page})=>{
173 | await page.goto('/')
174 | await expectScrollToBe(page, 0)
175 |
176 | await page.goto('/high')
177 | await page.waitForURL('/high')
178 | await expectScrollToBe(page, 0)
179 |
180 | await scrollPage(page,highPage)
181 | await expectScrollToBe(page, highPage)
182 |
183 | await page.goto('/low-page')
184 | await page.waitForURL('/low-page')
185 | await expectScrollToBe(page, 0)
186 |
187 | await resolveTimeout(400)
188 | await expectScrollToBe(page, 0)
189 |
190 |
191 |
192 | })
193 | test('Some random behaviour 2',async ({page})=>{
194 | await page.goto('/')
195 | await expectScrollToBe(page, 0)
196 | await scrollPage(page,mainPage)
197 | await page.goto('/high')
198 | await page.waitForURL('/high')
199 | await expectScrollToBe(page, 0)
200 |
201 | await resolveTimeout(500)
202 | await expectScrollToBe(page, 0)
203 |
204 |
205 |
206 | })
207 |
208 | test('Some random behaviour 3 (bug fix)',async ({page})=>{
209 | await page.goto('/')
210 | await expectScrollToBe(page, 0)
211 | await scrollPage(page,highPage/2)
212 | await page.goto('/high-with-loading')
213 | await page.waitForURL('/high-with-loading')
214 | await expectScrollToBe(page, 0)
215 |
216 | await resolveTimeout(1002)
217 | await expectScrollToBe(page, 0)
218 |
219 |
220 |
221 | })
222 |
223 | test('Smooth scrolling', async ({page}) => {
224 | await initTests(page)
225 |
226 | //Test for a scroll to not produce any errors. Https://github.com/sveltejs/kit/issues/365
227 | let error: string | null = null
228 | page.on("console", (msg) => {
229 | if (msg.type() === 'error') {
230 | error = msg.text()
231 | }
232 | })
233 |
234 | await resolveTimeout(2000) // Timeout for safari scroll bug navigation workaround.
235 |
236 | const smoothScrollTop = async () => {
237 | await scrollPage(page, 0)
238 | await expectScrollToBe(page, 0)
239 | }
240 | const smoothScrollBottom = async () => {
241 |
242 | await scrollPage(page, mainPage)
243 |
244 | await expectScrollToBe(page, mainPage)
245 | }
246 | //This is a very important test to stress out 'scroll' event
247 | // DO NOT CHANGE THIS TEST IN ANY WAY!
248 | for (let i = 0; i < 10; i++) {
249 | console.log(`Iteration ${i}.`)
250 | await smoothScrollTop()
251 |
252 |
253 | await smoothScrollBottom()
254 | }
255 |
256 | expect(error).toBe(null)
257 | })
258 |
--------------------------------------------------------------------------------
/eslint.config.mjs:
--------------------------------------------------------------------------------
1 |
2 | import love from 'eslint-config-love'
3 |
4 | export default [
5 | {
6 | ...love,
7 | files: ['./src/**/*.tsx', './src/**/*.ts'],
8 | },
9 | ]
--------------------------------------------------------------------------------
/next-app-mock/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/next-app-mock/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | eslint: {
4 | // Warning: This allows production builds to successfully complete even if
5 | // your project has ESLint errors.
6 | ignoreDuringBuilds: true,
7 | },
8 | }
9 |
10 | module.exports = nextConfig
11 |
--------------------------------------------------------------------------------
/next-app-mock/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-app-mock",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start"
9 | },
10 | "dependencies": {
11 | "next": "^15.3.2",
12 | "react": "^19.1.0",
13 | "react-dom": "^19.1.0"
14 | },
15 | "devDependencies": {
16 | "@types/node": "^22.15.17",
17 | "@types/react": "^19.1.4",
18 | "@types/react-dom": "^19.1.5",
19 | "eslint": "^9.26.0",
20 | "eslint-config-next": "^15.3.2",
21 | "typescript": "^5.8.3"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/next-app-mock/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | next:
12 | specifier: ^15.3.2
13 | version: 15.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
14 | react:
15 | specifier: ^19.1.0
16 | version: 19.1.0
17 | react-dom:
18 | specifier: ^19.1.0
19 | version: 19.1.0(react@19.1.0)
20 | devDependencies:
21 | '@types/node':
22 | specifier: ^22.15.17
23 | version: 22.15.17
24 | '@types/react':
25 | specifier: ^19.1.4
26 | version: 19.1.4
27 | '@types/react-dom':
28 | specifier: ^19.1.5
29 | version: 19.1.5(@types/react@19.1.4)
30 | eslint:
31 | specifier: ^9.26.0
32 | version: 9.26.0
33 | eslint-config-next:
34 | specifier: ^15.3.2
35 | version: 15.3.2(eslint@9.26.0)(typescript@5.8.3)
36 | typescript:
37 | specifier: ^5.8.3
38 | version: 5.8.3
39 |
40 | packages:
41 |
42 | '@emnapi/core@1.4.3':
43 | resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}
44 |
45 | '@emnapi/runtime@1.4.3':
46 | resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
47 |
48 | '@emnapi/wasi-threads@1.0.2':
49 | resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}
50 |
51 | '@eslint-community/eslint-utils@4.7.0':
52 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
53 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
54 | peerDependencies:
55 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
56 |
57 | '@eslint-community/regexpp@4.12.1':
58 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
59 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
60 |
61 | '@eslint/config-array@0.20.0':
62 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
63 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
64 |
65 | '@eslint/config-helpers@0.2.2':
66 | resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
67 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
68 |
69 | '@eslint/core@0.13.0':
70 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
71 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
72 |
73 | '@eslint/eslintrc@3.3.1':
74 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
75 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
76 |
77 | '@eslint/js@9.26.0':
78 | resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==}
79 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
80 |
81 | '@eslint/object-schema@2.1.6':
82 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
83 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
84 |
85 | '@eslint/plugin-kit@0.2.8':
86 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
87 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
88 |
89 | '@humanfs/core@0.19.1':
90 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
91 | engines: {node: '>=18.18.0'}
92 |
93 | '@humanfs/node@0.16.6':
94 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
95 | engines: {node: '>=18.18.0'}
96 |
97 | '@humanwhocodes/module-importer@1.0.1':
98 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
99 | engines: {node: '>=12.22'}
100 |
101 | '@humanwhocodes/retry@0.3.1':
102 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
103 | engines: {node: '>=18.18'}
104 |
105 | '@humanwhocodes/retry@0.4.3':
106 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
107 | engines: {node: '>=18.18'}
108 |
109 | '@img/sharp-darwin-arm64@0.34.1':
110 | resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==}
111 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
112 | cpu: [arm64]
113 | os: [darwin]
114 |
115 | '@img/sharp-darwin-x64@0.34.1':
116 | resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==}
117 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
118 | cpu: [x64]
119 | os: [darwin]
120 |
121 | '@img/sharp-libvips-darwin-arm64@1.1.0':
122 | resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==}
123 | cpu: [arm64]
124 | os: [darwin]
125 |
126 | '@img/sharp-libvips-darwin-x64@1.1.0':
127 | resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==}
128 | cpu: [x64]
129 | os: [darwin]
130 |
131 | '@img/sharp-libvips-linux-arm64@1.1.0':
132 | resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==}
133 | cpu: [arm64]
134 | os: [linux]
135 |
136 | '@img/sharp-libvips-linux-arm@1.1.0':
137 | resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==}
138 | cpu: [arm]
139 | os: [linux]
140 |
141 | '@img/sharp-libvips-linux-ppc64@1.1.0':
142 | resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==}
143 | cpu: [ppc64]
144 | os: [linux]
145 |
146 | '@img/sharp-libvips-linux-s390x@1.1.0':
147 | resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==}
148 | cpu: [s390x]
149 | os: [linux]
150 |
151 | '@img/sharp-libvips-linux-x64@1.1.0':
152 | resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==}
153 | cpu: [x64]
154 | os: [linux]
155 |
156 | '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
157 | resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==}
158 | cpu: [arm64]
159 | os: [linux]
160 |
161 | '@img/sharp-libvips-linuxmusl-x64@1.1.0':
162 | resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==}
163 | cpu: [x64]
164 | os: [linux]
165 |
166 | '@img/sharp-linux-arm64@0.34.1':
167 | resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==}
168 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
169 | cpu: [arm64]
170 | os: [linux]
171 |
172 | '@img/sharp-linux-arm@0.34.1':
173 | resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==}
174 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
175 | cpu: [arm]
176 | os: [linux]
177 |
178 | '@img/sharp-linux-s390x@0.34.1':
179 | resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==}
180 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
181 | cpu: [s390x]
182 | os: [linux]
183 |
184 | '@img/sharp-linux-x64@0.34.1':
185 | resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==}
186 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
187 | cpu: [x64]
188 | os: [linux]
189 |
190 | '@img/sharp-linuxmusl-arm64@0.34.1':
191 | resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==}
192 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
193 | cpu: [arm64]
194 | os: [linux]
195 |
196 | '@img/sharp-linuxmusl-x64@0.34.1':
197 | resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==}
198 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
199 | cpu: [x64]
200 | os: [linux]
201 |
202 | '@img/sharp-wasm32@0.34.1':
203 | resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==}
204 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
205 | cpu: [wasm32]
206 |
207 | '@img/sharp-win32-ia32@0.34.1':
208 | resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==}
209 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
210 | cpu: [ia32]
211 | os: [win32]
212 |
213 | '@img/sharp-win32-x64@0.34.1':
214 | resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==}
215 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
216 | cpu: [x64]
217 | os: [win32]
218 |
219 | '@modelcontextprotocol/sdk@1.11.2':
220 | resolution: {integrity: sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==}
221 | engines: {node: '>=18'}
222 |
223 | '@napi-rs/wasm-runtime@0.2.9':
224 | resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==}
225 |
226 | '@next/env@15.3.2':
227 | resolution: {integrity: sha512-xURk++7P7qR9JG1jJtLzPzf0qEvqCN0A/T3DXf8IPMKo9/6FfjxtEffRJIIew/bIL4T3C2jLLqBor8B/zVlx6g==}
228 |
229 | '@next/eslint-plugin-next@15.3.2':
230 | resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==}
231 |
232 | '@next/swc-darwin-arm64@15.3.2':
233 | resolution: {integrity: sha512-2DR6kY/OGcokbnCsjHpNeQblqCZ85/1j6njYSkzRdpLn5At7OkSdmk7WyAmB9G0k25+VgqVZ/u356OSoQZ3z0g==}
234 | engines: {node: '>= 10'}
235 | cpu: [arm64]
236 | os: [darwin]
237 |
238 | '@next/swc-darwin-x64@15.3.2':
239 | resolution: {integrity: sha512-ro/fdqaZWL6k1S/5CLv1I0DaZfDVJkWNaUU3un8Lg6m0YENWlDulmIWzV96Iou2wEYyEsZq51mwV8+XQXqMp3w==}
240 | engines: {node: '>= 10'}
241 | cpu: [x64]
242 | os: [darwin]
243 |
244 | '@next/swc-linux-arm64-gnu@15.3.2':
245 | resolution: {integrity: sha512-covwwtZYhlbRWK2HlYX9835qXum4xYZ3E2Mra1mdQ+0ICGoMiw1+nVAn4d9Bo7R3JqSmK1grMq/va+0cdh7bJA==}
246 | engines: {node: '>= 10'}
247 | cpu: [arm64]
248 | os: [linux]
249 |
250 | '@next/swc-linux-arm64-musl@15.3.2':
251 | resolution: {integrity: sha512-KQkMEillvlW5Qk5mtGA/3Yz0/tzpNlSw6/3/ttsV1lNtMuOHcGii3zVeXZyi4EJmmLDKYcTcByV2wVsOhDt/zg==}
252 | engines: {node: '>= 10'}
253 | cpu: [arm64]
254 | os: [linux]
255 |
256 | '@next/swc-linux-x64-gnu@15.3.2':
257 | resolution: {integrity: sha512-uRBo6THWei0chz+Y5j37qzx+BtoDRFIkDzZjlpCItBRXyMPIg079eIkOCl3aqr2tkxL4HFyJ4GHDes7W8HuAUg==}
258 | engines: {node: '>= 10'}
259 | cpu: [x64]
260 | os: [linux]
261 |
262 | '@next/swc-linux-x64-musl@15.3.2':
263 | resolution: {integrity: sha512-+uxFlPuCNx/T9PdMClOqeE8USKzj8tVz37KflT3Kdbx/LOlZBRI2yxuIcmx1mPNK8DwSOMNCr4ureSet7eyC0w==}
264 | engines: {node: '>= 10'}
265 | cpu: [x64]
266 | os: [linux]
267 |
268 | '@next/swc-win32-arm64-msvc@15.3.2':
269 | resolution: {integrity: sha512-LLTKmaI5cfD8dVzh5Vt7+OMo+AIOClEdIU/TSKbXXT2iScUTSxOGoBhfuv+FU8R9MLmrkIL1e2fBMkEEjYAtPQ==}
270 | engines: {node: '>= 10'}
271 | cpu: [arm64]
272 | os: [win32]
273 |
274 | '@next/swc-win32-x64-msvc@15.3.2':
275 | resolution: {integrity: sha512-aW5B8wOPioJ4mBdMDXkt5f3j8pUr9W8AnlX0Df35uRWNT1Y6RIybxjnSUe+PhM+M1bwgyY8PHLmXZC6zT1o5tA==}
276 | engines: {node: '>= 10'}
277 | cpu: [x64]
278 | os: [win32]
279 |
280 | '@nodelib/fs.scandir@2.1.5':
281 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
282 | engines: {node: '>= 8'}
283 |
284 | '@nodelib/fs.stat@2.0.5':
285 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
286 | engines: {node: '>= 8'}
287 |
288 | '@nodelib/fs.walk@1.2.8':
289 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
290 | engines: {node: '>= 8'}
291 |
292 | '@nolyfill/is-core-module@1.0.39':
293 | resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
294 | engines: {node: '>=12.4.0'}
295 |
296 | '@rtsao/scc@1.1.0':
297 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
298 |
299 | '@rushstack/eslint-patch@1.11.0':
300 | resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==}
301 |
302 | '@swc/counter@0.1.3':
303 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
304 |
305 | '@swc/helpers@0.5.15':
306 | resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
307 |
308 | '@tybys/wasm-util@0.9.0':
309 | resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
310 |
311 | '@types/estree@1.0.7':
312 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
313 |
314 | '@types/json-schema@7.0.15':
315 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
316 |
317 | '@types/json5@0.0.29':
318 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
319 |
320 | '@types/node@22.15.17':
321 | resolution: {integrity: sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==}
322 |
323 | '@types/react-dom@19.1.5':
324 | resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==}
325 | peerDependencies:
326 | '@types/react': ^19.0.0
327 |
328 | '@types/react@19.1.4':
329 | resolution: {integrity: sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==}
330 |
331 | '@typescript-eslint/eslint-plugin@8.32.1':
332 | resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==}
333 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
334 | peerDependencies:
335 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
336 | eslint: ^8.57.0 || ^9.0.0
337 | typescript: '>=4.8.4 <5.9.0'
338 |
339 | '@typescript-eslint/parser@8.32.1':
340 | resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==}
341 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
342 | peerDependencies:
343 | eslint: ^8.57.0 || ^9.0.0
344 | typescript: '>=4.8.4 <5.9.0'
345 |
346 | '@typescript-eslint/scope-manager@8.32.1':
347 | resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==}
348 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
349 |
350 | '@typescript-eslint/type-utils@8.32.1':
351 | resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==}
352 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
353 | peerDependencies:
354 | eslint: ^8.57.0 || ^9.0.0
355 | typescript: '>=4.8.4 <5.9.0'
356 |
357 | '@typescript-eslint/types@8.32.1':
358 | resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==}
359 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
360 |
361 | '@typescript-eslint/typescript-estree@8.32.1':
362 | resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==}
363 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
364 | peerDependencies:
365 | typescript: '>=4.8.4 <5.9.0'
366 |
367 | '@typescript-eslint/utils@8.32.1':
368 | resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==}
369 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
370 | peerDependencies:
371 | eslint: ^8.57.0 || ^9.0.0
372 | typescript: '>=4.8.4 <5.9.0'
373 |
374 | '@typescript-eslint/visitor-keys@8.32.1':
375 | resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==}
376 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
377 |
378 | '@unrs/resolver-binding-darwin-arm64@1.7.2':
379 | resolution: {integrity: sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==}
380 | cpu: [arm64]
381 | os: [darwin]
382 |
383 | '@unrs/resolver-binding-darwin-x64@1.7.2':
384 | resolution: {integrity: sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==}
385 | cpu: [x64]
386 | os: [darwin]
387 |
388 | '@unrs/resolver-binding-freebsd-x64@1.7.2':
389 | resolution: {integrity: sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==}
390 | cpu: [x64]
391 | os: [freebsd]
392 |
393 | '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2':
394 | resolution: {integrity: sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==}
395 | cpu: [arm]
396 | os: [linux]
397 |
398 | '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2':
399 | resolution: {integrity: sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==}
400 | cpu: [arm]
401 | os: [linux]
402 |
403 | '@unrs/resolver-binding-linux-arm64-gnu@1.7.2':
404 | resolution: {integrity: sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==}
405 | cpu: [arm64]
406 | os: [linux]
407 |
408 | '@unrs/resolver-binding-linux-arm64-musl@1.7.2':
409 | resolution: {integrity: sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==}
410 | cpu: [arm64]
411 | os: [linux]
412 |
413 | '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2':
414 | resolution: {integrity: sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==}
415 | cpu: [ppc64]
416 | os: [linux]
417 |
418 | '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2':
419 | resolution: {integrity: sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==}
420 | cpu: [riscv64]
421 | os: [linux]
422 |
423 | '@unrs/resolver-binding-linux-riscv64-musl@1.7.2':
424 | resolution: {integrity: sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==}
425 | cpu: [riscv64]
426 | os: [linux]
427 |
428 | '@unrs/resolver-binding-linux-s390x-gnu@1.7.2':
429 | resolution: {integrity: sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==}
430 | cpu: [s390x]
431 | os: [linux]
432 |
433 | '@unrs/resolver-binding-linux-x64-gnu@1.7.2':
434 | resolution: {integrity: sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==}
435 | cpu: [x64]
436 | os: [linux]
437 |
438 | '@unrs/resolver-binding-linux-x64-musl@1.7.2':
439 | resolution: {integrity: sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==}
440 | cpu: [x64]
441 | os: [linux]
442 |
443 | '@unrs/resolver-binding-wasm32-wasi@1.7.2':
444 | resolution: {integrity: sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==}
445 | engines: {node: '>=14.0.0'}
446 | cpu: [wasm32]
447 |
448 | '@unrs/resolver-binding-win32-arm64-msvc@1.7.2':
449 | resolution: {integrity: sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==}
450 | cpu: [arm64]
451 | os: [win32]
452 |
453 | '@unrs/resolver-binding-win32-ia32-msvc@1.7.2':
454 | resolution: {integrity: sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==}
455 | cpu: [ia32]
456 | os: [win32]
457 |
458 | '@unrs/resolver-binding-win32-x64-msvc@1.7.2':
459 | resolution: {integrity: sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==}
460 | cpu: [x64]
461 | os: [win32]
462 |
463 | accepts@2.0.0:
464 | resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
465 | engines: {node: '>= 0.6'}
466 |
467 | acorn-jsx@5.3.2:
468 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
469 | peerDependencies:
470 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
471 |
472 | acorn@8.14.1:
473 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
474 | engines: {node: '>=0.4.0'}
475 | hasBin: true
476 |
477 | ajv@6.12.6:
478 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
479 |
480 | ansi-styles@4.3.0:
481 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
482 | engines: {node: '>=8'}
483 |
484 | argparse@2.0.1:
485 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
486 |
487 | aria-query@5.3.2:
488 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
489 | engines: {node: '>= 0.4'}
490 |
491 | array-buffer-byte-length@1.0.2:
492 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
493 | engines: {node: '>= 0.4'}
494 |
495 | array-includes@3.1.8:
496 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
497 | engines: {node: '>= 0.4'}
498 |
499 | array.prototype.findlast@1.2.5:
500 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
501 | engines: {node: '>= 0.4'}
502 |
503 | array.prototype.findlastindex@1.2.6:
504 | resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
505 | engines: {node: '>= 0.4'}
506 |
507 | array.prototype.flat@1.3.3:
508 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
509 | engines: {node: '>= 0.4'}
510 |
511 | array.prototype.flatmap@1.3.3:
512 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
513 | engines: {node: '>= 0.4'}
514 |
515 | array.prototype.tosorted@1.1.4:
516 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
517 | engines: {node: '>= 0.4'}
518 |
519 | arraybuffer.prototype.slice@1.0.4:
520 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
521 | engines: {node: '>= 0.4'}
522 |
523 | ast-types-flow@0.0.8:
524 | resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
525 |
526 | async-function@1.0.0:
527 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
528 | engines: {node: '>= 0.4'}
529 |
530 | available-typed-arrays@1.0.7:
531 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
532 | engines: {node: '>= 0.4'}
533 |
534 | axe-core@4.10.3:
535 | resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==}
536 | engines: {node: '>=4'}
537 |
538 | axobject-query@4.1.0:
539 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
540 | engines: {node: '>= 0.4'}
541 |
542 | balanced-match@1.0.2:
543 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
544 |
545 | body-parser@2.2.0:
546 | resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
547 | engines: {node: '>=18'}
548 |
549 | brace-expansion@1.1.11:
550 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
551 |
552 | brace-expansion@2.0.1:
553 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
554 |
555 | braces@3.0.3:
556 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
557 | engines: {node: '>=8'}
558 |
559 | busboy@1.6.0:
560 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
561 | engines: {node: '>=10.16.0'}
562 |
563 | bytes@3.1.2:
564 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
565 | engines: {node: '>= 0.8'}
566 |
567 | call-bind-apply-helpers@1.0.2:
568 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
569 | engines: {node: '>= 0.4'}
570 |
571 | call-bind@1.0.8:
572 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
573 | engines: {node: '>= 0.4'}
574 |
575 | call-bound@1.0.4:
576 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
577 | engines: {node: '>= 0.4'}
578 |
579 | callsites@3.1.0:
580 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
581 | engines: {node: '>=6'}
582 |
583 | caniuse-lite@1.0.30001718:
584 | resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
585 |
586 | chalk@4.1.2:
587 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
588 | engines: {node: '>=10'}
589 |
590 | client-only@0.0.1:
591 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
592 |
593 | color-convert@2.0.1:
594 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
595 | engines: {node: '>=7.0.0'}
596 |
597 | color-name@1.1.4:
598 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
599 |
600 | color-string@1.9.1:
601 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
602 |
603 | color@4.2.3:
604 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
605 | engines: {node: '>=12.5.0'}
606 |
607 | concat-map@0.0.1:
608 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
609 |
610 | content-disposition@1.0.0:
611 | resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
612 | engines: {node: '>= 0.6'}
613 |
614 | content-type@1.0.5:
615 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
616 | engines: {node: '>= 0.6'}
617 |
618 | cookie-signature@1.2.2:
619 | resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
620 | engines: {node: '>=6.6.0'}
621 |
622 | cookie@0.7.2:
623 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
624 | engines: {node: '>= 0.6'}
625 |
626 | cors@2.8.5:
627 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
628 | engines: {node: '>= 0.10'}
629 |
630 | cross-spawn@7.0.6:
631 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
632 | engines: {node: '>= 8'}
633 |
634 | csstype@3.1.3:
635 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
636 |
637 | damerau-levenshtein@1.0.8:
638 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
639 |
640 | data-view-buffer@1.0.2:
641 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
642 | engines: {node: '>= 0.4'}
643 |
644 | data-view-byte-length@1.0.2:
645 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
646 | engines: {node: '>= 0.4'}
647 |
648 | data-view-byte-offset@1.0.1:
649 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
650 | engines: {node: '>= 0.4'}
651 |
652 | debug@3.2.7:
653 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
654 | peerDependencies:
655 | supports-color: '*'
656 | peerDependenciesMeta:
657 | supports-color:
658 | optional: true
659 |
660 | debug@4.4.0:
661 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
662 | engines: {node: '>=6.0'}
663 | peerDependencies:
664 | supports-color: '*'
665 | peerDependenciesMeta:
666 | supports-color:
667 | optional: true
668 |
669 | deep-is@0.1.4:
670 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
671 |
672 | define-data-property@1.1.4:
673 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
674 | engines: {node: '>= 0.4'}
675 |
676 | define-properties@1.2.1:
677 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
678 | engines: {node: '>= 0.4'}
679 |
680 | depd@2.0.0:
681 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
682 | engines: {node: '>= 0.8'}
683 |
684 | detect-libc@2.0.4:
685 | resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
686 | engines: {node: '>=8'}
687 |
688 | doctrine@2.1.0:
689 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
690 | engines: {node: '>=0.10.0'}
691 |
692 | dunder-proto@1.0.1:
693 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
694 | engines: {node: '>= 0.4'}
695 |
696 | ee-first@1.1.1:
697 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
698 |
699 | emoji-regex@9.2.2:
700 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
701 |
702 | encodeurl@2.0.0:
703 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
704 | engines: {node: '>= 0.8'}
705 |
706 | es-abstract@1.23.9:
707 | resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
708 | engines: {node: '>= 0.4'}
709 |
710 | es-define-property@1.0.1:
711 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
712 | engines: {node: '>= 0.4'}
713 |
714 | es-errors@1.3.0:
715 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
716 | engines: {node: '>= 0.4'}
717 |
718 | es-iterator-helpers@1.2.1:
719 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
720 | engines: {node: '>= 0.4'}
721 |
722 | es-object-atoms@1.1.1:
723 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
724 | engines: {node: '>= 0.4'}
725 |
726 | es-set-tostringtag@2.1.0:
727 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
728 | engines: {node: '>= 0.4'}
729 |
730 | es-shim-unscopables@1.1.0:
731 | resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
732 | engines: {node: '>= 0.4'}
733 |
734 | es-to-primitive@1.3.0:
735 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
736 | engines: {node: '>= 0.4'}
737 |
738 | escape-html@1.0.3:
739 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
740 |
741 | escape-string-regexp@4.0.0:
742 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
743 | engines: {node: '>=10'}
744 |
745 | eslint-config-next@15.3.2:
746 | resolution: {integrity: sha512-FerU4DYccO4FgeYFFglz0SnaKRe1ejXQrDb8kWUkTAg036YWi+jUsgg4sIGNCDhAsDITsZaL4MzBWKB6f4G1Dg==}
747 | peerDependencies:
748 | eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
749 | typescript: '>=3.3.1'
750 | peerDependenciesMeta:
751 | typescript:
752 | optional: true
753 |
754 | eslint-import-resolver-node@0.3.9:
755 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
756 |
757 | eslint-import-resolver-typescript@3.10.1:
758 | resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==}
759 | engines: {node: ^14.18.0 || >=16.0.0}
760 | peerDependencies:
761 | eslint: '*'
762 | eslint-plugin-import: '*'
763 | eslint-plugin-import-x: '*'
764 | peerDependenciesMeta:
765 | eslint-plugin-import:
766 | optional: true
767 | eslint-plugin-import-x:
768 | optional: true
769 |
770 | eslint-module-utils@2.12.0:
771 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
772 | engines: {node: '>=4'}
773 | peerDependencies:
774 | '@typescript-eslint/parser': '*'
775 | eslint: '*'
776 | eslint-import-resolver-node: '*'
777 | eslint-import-resolver-typescript: '*'
778 | eslint-import-resolver-webpack: '*'
779 | peerDependenciesMeta:
780 | '@typescript-eslint/parser':
781 | optional: true
782 | eslint:
783 | optional: true
784 | eslint-import-resolver-node:
785 | optional: true
786 | eslint-import-resolver-typescript:
787 | optional: true
788 | eslint-import-resolver-webpack:
789 | optional: true
790 |
791 | eslint-plugin-import@2.31.0:
792 | resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
793 | engines: {node: '>=4'}
794 | peerDependencies:
795 | '@typescript-eslint/parser': '*'
796 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
797 | peerDependenciesMeta:
798 | '@typescript-eslint/parser':
799 | optional: true
800 |
801 | eslint-plugin-jsx-a11y@6.10.2:
802 | resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
803 | engines: {node: '>=4.0'}
804 | peerDependencies:
805 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
806 |
807 | eslint-plugin-react-hooks@5.2.0:
808 | resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
809 | engines: {node: '>=10'}
810 | peerDependencies:
811 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
812 |
813 | eslint-plugin-react@7.37.5:
814 | resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
815 | engines: {node: '>=4'}
816 | peerDependencies:
817 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
818 |
819 | eslint-scope@8.3.0:
820 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
821 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
822 |
823 | eslint-visitor-keys@3.4.3:
824 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
825 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
826 |
827 | eslint-visitor-keys@4.2.0:
828 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
829 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
830 |
831 | eslint@9.26.0:
832 | resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==}
833 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
834 | hasBin: true
835 | peerDependencies:
836 | jiti: '*'
837 | peerDependenciesMeta:
838 | jiti:
839 | optional: true
840 |
841 | espree@10.3.0:
842 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
843 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
844 |
845 | esquery@1.6.0:
846 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
847 | engines: {node: '>=0.10'}
848 |
849 | esrecurse@4.3.0:
850 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
851 | engines: {node: '>=4.0'}
852 |
853 | estraverse@5.3.0:
854 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
855 | engines: {node: '>=4.0'}
856 |
857 | esutils@2.0.3:
858 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
859 | engines: {node: '>=0.10.0'}
860 |
861 | etag@1.8.1:
862 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
863 | engines: {node: '>= 0.6'}
864 |
865 | eventsource-parser@3.0.1:
866 | resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==}
867 | engines: {node: '>=18.0.0'}
868 |
869 | eventsource@3.0.7:
870 | resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==}
871 | engines: {node: '>=18.0.0'}
872 |
873 | express-rate-limit@7.5.0:
874 | resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==}
875 | engines: {node: '>= 16'}
876 | peerDependencies:
877 | express: ^4.11 || 5 || ^5.0.0-beta.1
878 |
879 | express@5.1.0:
880 | resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
881 | engines: {node: '>= 18'}
882 |
883 | fast-deep-equal@3.1.3:
884 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
885 |
886 | fast-glob@3.3.1:
887 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
888 | engines: {node: '>=8.6.0'}
889 |
890 | fast-glob@3.3.3:
891 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
892 | engines: {node: '>=8.6.0'}
893 |
894 | fast-json-stable-stringify@2.1.0:
895 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
896 |
897 | fast-levenshtein@2.0.6:
898 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
899 |
900 | fastq@1.19.1:
901 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
902 |
903 | fdir@6.4.4:
904 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
905 | peerDependencies:
906 | picomatch: ^3 || ^4
907 | peerDependenciesMeta:
908 | picomatch:
909 | optional: true
910 |
911 | file-entry-cache@8.0.0:
912 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
913 | engines: {node: '>=16.0.0'}
914 |
915 | fill-range@7.1.1:
916 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
917 | engines: {node: '>=8'}
918 |
919 | finalhandler@2.1.0:
920 | resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
921 | engines: {node: '>= 0.8'}
922 |
923 | find-up@5.0.0:
924 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
925 | engines: {node: '>=10'}
926 |
927 | flat-cache@4.0.1:
928 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
929 | engines: {node: '>=16'}
930 |
931 | flatted@3.3.3:
932 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
933 |
934 | for-each@0.3.5:
935 | resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
936 | engines: {node: '>= 0.4'}
937 |
938 | forwarded@0.2.0:
939 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
940 | engines: {node: '>= 0.6'}
941 |
942 | fresh@2.0.0:
943 | resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
944 | engines: {node: '>= 0.8'}
945 |
946 | function-bind@1.1.2:
947 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
948 |
949 | function.prototype.name@1.1.8:
950 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
951 | engines: {node: '>= 0.4'}
952 |
953 | functions-have-names@1.2.3:
954 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
955 |
956 | get-intrinsic@1.3.0:
957 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
958 | engines: {node: '>= 0.4'}
959 |
960 | get-proto@1.0.1:
961 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
962 | engines: {node: '>= 0.4'}
963 |
964 | get-symbol-description@1.1.0:
965 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
966 | engines: {node: '>= 0.4'}
967 |
968 | get-tsconfig@4.10.0:
969 | resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
970 |
971 | glob-parent@5.1.2:
972 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
973 | engines: {node: '>= 6'}
974 |
975 | glob-parent@6.0.2:
976 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
977 | engines: {node: '>=10.13.0'}
978 |
979 | globals@14.0.0:
980 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
981 | engines: {node: '>=18'}
982 |
983 | globalthis@1.0.4:
984 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
985 | engines: {node: '>= 0.4'}
986 |
987 | gopd@1.2.0:
988 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
989 | engines: {node: '>= 0.4'}
990 |
991 | graphemer@1.4.0:
992 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
993 |
994 | has-bigints@1.1.0:
995 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
996 | engines: {node: '>= 0.4'}
997 |
998 | has-flag@4.0.0:
999 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1000 | engines: {node: '>=8'}
1001 |
1002 | has-property-descriptors@1.0.2:
1003 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
1004 |
1005 | has-proto@1.2.0:
1006 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
1007 | engines: {node: '>= 0.4'}
1008 |
1009 | has-symbols@1.1.0:
1010 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
1011 | engines: {node: '>= 0.4'}
1012 |
1013 | has-tostringtag@1.0.2:
1014 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
1015 | engines: {node: '>= 0.4'}
1016 |
1017 | hasown@2.0.2:
1018 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1019 | engines: {node: '>= 0.4'}
1020 |
1021 | http-errors@2.0.0:
1022 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
1023 | engines: {node: '>= 0.8'}
1024 |
1025 | iconv-lite@0.6.3:
1026 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
1027 | engines: {node: '>=0.10.0'}
1028 |
1029 | ignore@5.3.2:
1030 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1031 | engines: {node: '>= 4'}
1032 |
1033 | ignore@7.0.4:
1034 | resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==}
1035 | engines: {node: '>= 4'}
1036 |
1037 | import-fresh@3.3.1:
1038 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1039 | engines: {node: '>=6'}
1040 |
1041 | imurmurhash@0.1.4:
1042 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1043 | engines: {node: '>=0.8.19'}
1044 |
1045 | inherits@2.0.4:
1046 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1047 |
1048 | internal-slot@1.1.0:
1049 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
1050 | engines: {node: '>= 0.4'}
1051 |
1052 | ipaddr.js@1.9.1:
1053 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
1054 | engines: {node: '>= 0.10'}
1055 |
1056 | is-array-buffer@3.0.5:
1057 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
1058 | engines: {node: '>= 0.4'}
1059 |
1060 | is-arrayish@0.3.2:
1061 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
1062 |
1063 | is-async-function@2.1.1:
1064 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
1065 | engines: {node: '>= 0.4'}
1066 |
1067 | is-bigint@1.1.0:
1068 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
1069 | engines: {node: '>= 0.4'}
1070 |
1071 | is-boolean-object@1.2.2:
1072 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
1073 | engines: {node: '>= 0.4'}
1074 |
1075 | is-bun-module@2.0.0:
1076 | resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
1077 |
1078 | is-callable@1.2.7:
1079 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1080 | engines: {node: '>= 0.4'}
1081 |
1082 | is-core-module@2.16.1:
1083 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1084 | engines: {node: '>= 0.4'}
1085 |
1086 | is-data-view@1.0.2:
1087 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
1088 | engines: {node: '>= 0.4'}
1089 |
1090 | is-date-object@1.1.0:
1091 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
1092 | engines: {node: '>= 0.4'}
1093 |
1094 | is-extglob@2.1.1:
1095 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1096 | engines: {node: '>=0.10.0'}
1097 |
1098 | is-finalizationregistry@1.1.1:
1099 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
1100 | engines: {node: '>= 0.4'}
1101 |
1102 | is-generator-function@1.1.0:
1103 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
1104 | engines: {node: '>= 0.4'}
1105 |
1106 | is-glob@4.0.3:
1107 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1108 | engines: {node: '>=0.10.0'}
1109 |
1110 | is-map@2.0.3:
1111 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
1112 | engines: {node: '>= 0.4'}
1113 |
1114 | is-number-object@1.1.1:
1115 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
1116 | engines: {node: '>= 0.4'}
1117 |
1118 | is-number@7.0.0:
1119 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1120 | engines: {node: '>=0.12.0'}
1121 |
1122 | is-promise@4.0.0:
1123 | resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
1124 |
1125 | is-regex@1.2.1:
1126 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
1127 | engines: {node: '>= 0.4'}
1128 |
1129 | is-set@2.0.3:
1130 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
1131 | engines: {node: '>= 0.4'}
1132 |
1133 | is-shared-array-buffer@1.0.4:
1134 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
1135 | engines: {node: '>= 0.4'}
1136 |
1137 | is-string@1.1.1:
1138 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
1139 | engines: {node: '>= 0.4'}
1140 |
1141 | is-symbol@1.1.1:
1142 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
1143 | engines: {node: '>= 0.4'}
1144 |
1145 | is-typed-array@1.1.15:
1146 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
1147 | engines: {node: '>= 0.4'}
1148 |
1149 | is-weakmap@2.0.2:
1150 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
1151 | engines: {node: '>= 0.4'}
1152 |
1153 | is-weakref@1.1.1:
1154 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
1155 | engines: {node: '>= 0.4'}
1156 |
1157 | is-weakset@2.0.4:
1158 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
1159 | engines: {node: '>= 0.4'}
1160 |
1161 | isarray@2.0.5:
1162 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1163 |
1164 | isexe@2.0.0:
1165 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1166 |
1167 | iterator.prototype@1.1.5:
1168 | resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
1169 | engines: {node: '>= 0.4'}
1170 |
1171 | js-tokens@4.0.0:
1172 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1173 |
1174 | js-yaml@4.1.0:
1175 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1176 | hasBin: true
1177 |
1178 | json-buffer@3.0.1:
1179 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1180 |
1181 | json-schema-traverse@0.4.1:
1182 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1183 |
1184 | json-stable-stringify-without-jsonify@1.0.1:
1185 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1186 |
1187 | json5@1.0.2:
1188 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
1189 | hasBin: true
1190 |
1191 | jsx-ast-utils@3.3.5:
1192 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
1193 | engines: {node: '>=4.0'}
1194 |
1195 | keyv@4.5.4:
1196 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1197 |
1198 | language-subtag-registry@0.3.23:
1199 | resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
1200 |
1201 | language-tags@1.0.9:
1202 | resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
1203 | engines: {node: '>=0.10'}
1204 |
1205 | levn@0.4.1:
1206 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1207 | engines: {node: '>= 0.8.0'}
1208 |
1209 | locate-path@6.0.0:
1210 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1211 | engines: {node: '>=10'}
1212 |
1213 | lodash.merge@4.6.2:
1214 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1215 |
1216 | loose-envify@1.4.0:
1217 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1218 | hasBin: true
1219 |
1220 | math-intrinsics@1.1.0:
1221 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
1222 | engines: {node: '>= 0.4'}
1223 |
1224 | media-typer@1.1.0:
1225 | resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
1226 | engines: {node: '>= 0.8'}
1227 |
1228 | merge-descriptors@2.0.0:
1229 | resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
1230 | engines: {node: '>=18'}
1231 |
1232 | merge2@1.4.1:
1233 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1234 | engines: {node: '>= 8'}
1235 |
1236 | micromatch@4.0.8:
1237 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1238 | engines: {node: '>=8.6'}
1239 |
1240 | mime-db@1.54.0:
1241 | resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
1242 | engines: {node: '>= 0.6'}
1243 |
1244 | mime-types@3.0.1:
1245 | resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
1246 | engines: {node: '>= 0.6'}
1247 |
1248 | minimatch@3.1.2:
1249 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1250 |
1251 | minimatch@9.0.5:
1252 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1253 | engines: {node: '>=16 || 14 >=14.17'}
1254 |
1255 | minimist@1.2.8:
1256 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1257 |
1258 | ms@2.1.3:
1259 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1260 |
1261 | nanoid@3.3.11:
1262 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
1263 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1264 | hasBin: true
1265 |
1266 | napi-postinstall@0.2.4:
1267 | resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==}
1268 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
1269 | hasBin: true
1270 |
1271 | natural-compare@1.4.0:
1272 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1273 |
1274 | negotiator@1.0.0:
1275 | resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
1276 | engines: {node: '>= 0.6'}
1277 |
1278 | next@15.3.2:
1279 | resolution: {integrity: sha512-CA3BatMyHkxZ48sgOCLdVHjFU36N7TF1HhqAHLFOkV6buwZnvMI84Cug8xD56B9mCuKrqXnLn94417GrZ/jjCQ==}
1280 | engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
1281 | hasBin: true
1282 | peerDependencies:
1283 | '@opentelemetry/api': ^1.1.0
1284 | '@playwright/test': ^1.41.2
1285 | babel-plugin-react-compiler: '*'
1286 | react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
1287 | react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
1288 | sass: ^1.3.0
1289 | peerDependenciesMeta:
1290 | '@opentelemetry/api':
1291 | optional: true
1292 | '@playwright/test':
1293 | optional: true
1294 | babel-plugin-react-compiler:
1295 | optional: true
1296 | sass:
1297 | optional: true
1298 |
1299 | object-assign@4.1.1:
1300 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1301 | engines: {node: '>=0.10.0'}
1302 |
1303 | object-inspect@1.13.4:
1304 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
1305 | engines: {node: '>= 0.4'}
1306 |
1307 | object-keys@1.1.1:
1308 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1309 | engines: {node: '>= 0.4'}
1310 |
1311 | object.assign@4.1.7:
1312 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
1313 | engines: {node: '>= 0.4'}
1314 |
1315 | object.entries@1.1.9:
1316 | resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
1317 | engines: {node: '>= 0.4'}
1318 |
1319 | object.fromentries@2.0.8:
1320 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
1321 | engines: {node: '>= 0.4'}
1322 |
1323 | object.groupby@1.0.3:
1324 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
1325 | engines: {node: '>= 0.4'}
1326 |
1327 | object.values@1.2.1:
1328 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
1329 | engines: {node: '>= 0.4'}
1330 |
1331 | on-finished@2.4.1:
1332 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
1333 | engines: {node: '>= 0.8'}
1334 |
1335 | once@1.4.0:
1336 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1337 |
1338 | optionator@0.9.4:
1339 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1340 | engines: {node: '>= 0.8.0'}
1341 |
1342 | own-keys@1.0.1:
1343 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
1344 | engines: {node: '>= 0.4'}
1345 |
1346 | p-limit@3.1.0:
1347 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1348 | engines: {node: '>=10'}
1349 |
1350 | p-locate@5.0.0:
1351 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1352 | engines: {node: '>=10'}
1353 |
1354 | parent-module@1.0.1:
1355 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1356 | engines: {node: '>=6'}
1357 |
1358 | parseurl@1.3.3:
1359 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
1360 | engines: {node: '>= 0.8'}
1361 |
1362 | path-exists@4.0.0:
1363 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1364 | engines: {node: '>=8'}
1365 |
1366 | path-key@3.1.1:
1367 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1368 | engines: {node: '>=8'}
1369 |
1370 | path-parse@1.0.7:
1371 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1372 |
1373 | path-to-regexp@8.2.0:
1374 | resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
1375 | engines: {node: '>=16'}
1376 |
1377 | picocolors@1.1.1:
1378 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1379 |
1380 | picomatch@2.3.1:
1381 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1382 | engines: {node: '>=8.6'}
1383 |
1384 | picomatch@4.0.2:
1385 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1386 | engines: {node: '>=12'}
1387 |
1388 | pkce-challenge@5.0.0:
1389 | resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
1390 | engines: {node: '>=16.20.0'}
1391 |
1392 | possible-typed-array-names@1.1.0:
1393 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
1394 | engines: {node: '>= 0.4'}
1395 |
1396 | postcss@8.4.31:
1397 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
1398 | engines: {node: ^10 || ^12 || >=14}
1399 |
1400 | prelude-ls@1.2.1:
1401 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1402 | engines: {node: '>= 0.8.0'}
1403 |
1404 | prop-types@15.8.1:
1405 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1406 |
1407 | proxy-addr@2.0.7:
1408 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
1409 | engines: {node: '>= 0.10'}
1410 |
1411 | punycode@2.3.1:
1412 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1413 | engines: {node: '>=6'}
1414 |
1415 | qs@6.14.0:
1416 | resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
1417 | engines: {node: '>=0.6'}
1418 |
1419 | queue-microtask@1.2.3:
1420 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1421 |
1422 | range-parser@1.2.1:
1423 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
1424 | engines: {node: '>= 0.6'}
1425 |
1426 | raw-body@3.0.0:
1427 | resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
1428 | engines: {node: '>= 0.8'}
1429 |
1430 | react-dom@19.1.0:
1431 | resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
1432 | peerDependencies:
1433 | react: ^19.1.0
1434 |
1435 | react-is@16.13.1:
1436 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1437 |
1438 | react@19.1.0:
1439 | resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
1440 | engines: {node: '>=0.10.0'}
1441 |
1442 | reflect.getprototypeof@1.0.10:
1443 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
1444 | engines: {node: '>= 0.4'}
1445 |
1446 | regexp.prototype.flags@1.5.4:
1447 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
1448 | engines: {node: '>= 0.4'}
1449 |
1450 | resolve-from@4.0.0:
1451 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1452 | engines: {node: '>=4'}
1453 |
1454 | resolve-pkg-maps@1.0.0:
1455 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
1456 |
1457 | resolve@1.22.10:
1458 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1459 | engines: {node: '>= 0.4'}
1460 | hasBin: true
1461 |
1462 | resolve@2.0.0-next.5:
1463 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
1464 | hasBin: true
1465 |
1466 | reusify@1.1.0:
1467 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1468 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1469 |
1470 | router@2.2.0:
1471 | resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
1472 | engines: {node: '>= 18'}
1473 |
1474 | run-parallel@1.2.0:
1475 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1476 |
1477 | safe-array-concat@1.1.3:
1478 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
1479 | engines: {node: '>=0.4'}
1480 |
1481 | safe-buffer@5.2.1:
1482 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1483 |
1484 | safe-push-apply@1.0.0:
1485 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
1486 | engines: {node: '>= 0.4'}
1487 |
1488 | safe-regex-test@1.1.0:
1489 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1490 | engines: {node: '>= 0.4'}
1491 |
1492 | safer-buffer@2.1.2:
1493 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1494 |
1495 | scheduler@0.26.0:
1496 | resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
1497 |
1498 | semver@6.3.1:
1499 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1500 | hasBin: true
1501 |
1502 | semver@7.7.2:
1503 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
1504 | engines: {node: '>=10'}
1505 | hasBin: true
1506 |
1507 | send@1.2.0:
1508 | resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
1509 | engines: {node: '>= 18'}
1510 |
1511 | serve-static@2.2.0:
1512 | resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
1513 | engines: {node: '>= 18'}
1514 |
1515 | set-function-length@1.2.2:
1516 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1517 | engines: {node: '>= 0.4'}
1518 |
1519 | set-function-name@2.0.2:
1520 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1521 | engines: {node: '>= 0.4'}
1522 |
1523 | set-proto@1.0.0:
1524 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
1525 | engines: {node: '>= 0.4'}
1526 |
1527 | setprototypeof@1.2.0:
1528 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
1529 |
1530 | sharp@0.34.1:
1531 | resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==}
1532 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
1533 |
1534 | shebang-command@2.0.0:
1535 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1536 | engines: {node: '>=8'}
1537 |
1538 | shebang-regex@3.0.0:
1539 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1540 | engines: {node: '>=8'}
1541 |
1542 | side-channel-list@1.0.0:
1543 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
1544 | engines: {node: '>= 0.4'}
1545 |
1546 | side-channel-map@1.0.1:
1547 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
1548 | engines: {node: '>= 0.4'}
1549 |
1550 | side-channel-weakmap@1.0.2:
1551 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
1552 | engines: {node: '>= 0.4'}
1553 |
1554 | side-channel@1.1.0:
1555 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
1556 | engines: {node: '>= 0.4'}
1557 |
1558 | simple-swizzle@0.2.2:
1559 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
1560 |
1561 | source-map-js@1.2.1:
1562 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1563 | engines: {node: '>=0.10.0'}
1564 |
1565 | stable-hash@0.0.5:
1566 | resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
1567 |
1568 | statuses@2.0.1:
1569 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
1570 | engines: {node: '>= 0.8'}
1571 |
1572 | streamsearch@1.1.0:
1573 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1574 | engines: {node: '>=10.0.0'}
1575 |
1576 | string.prototype.includes@2.0.1:
1577 | resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
1578 | engines: {node: '>= 0.4'}
1579 |
1580 | string.prototype.matchall@4.0.12:
1581 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
1582 | engines: {node: '>= 0.4'}
1583 |
1584 | string.prototype.repeat@1.0.0:
1585 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
1586 |
1587 | string.prototype.trim@1.2.10:
1588 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
1589 | engines: {node: '>= 0.4'}
1590 |
1591 | string.prototype.trimend@1.0.9:
1592 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
1593 | engines: {node: '>= 0.4'}
1594 |
1595 | string.prototype.trimstart@1.0.8:
1596 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
1597 | engines: {node: '>= 0.4'}
1598 |
1599 | strip-bom@3.0.0:
1600 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1601 | engines: {node: '>=4'}
1602 |
1603 | strip-json-comments@3.1.1:
1604 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1605 | engines: {node: '>=8'}
1606 |
1607 | styled-jsx@5.1.6:
1608 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
1609 | engines: {node: '>= 12.0.0'}
1610 | peerDependencies:
1611 | '@babel/core': '*'
1612 | babel-plugin-macros: '*'
1613 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
1614 | peerDependenciesMeta:
1615 | '@babel/core':
1616 | optional: true
1617 | babel-plugin-macros:
1618 | optional: true
1619 |
1620 | supports-color@7.2.0:
1621 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1622 | engines: {node: '>=8'}
1623 |
1624 | supports-preserve-symlinks-flag@1.0.0:
1625 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1626 | engines: {node: '>= 0.4'}
1627 |
1628 | tinyglobby@0.2.13:
1629 | resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
1630 | engines: {node: '>=12.0.0'}
1631 |
1632 | to-regex-range@5.0.1:
1633 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1634 | engines: {node: '>=8.0'}
1635 |
1636 | toidentifier@1.0.1:
1637 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
1638 | engines: {node: '>=0.6'}
1639 |
1640 | ts-api-utils@2.1.0:
1641 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
1642 | engines: {node: '>=18.12'}
1643 | peerDependencies:
1644 | typescript: '>=4.8.4'
1645 |
1646 | tsconfig-paths@3.15.0:
1647 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
1648 |
1649 | tslib@2.8.1:
1650 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1651 |
1652 | type-check@0.4.0:
1653 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1654 | engines: {node: '>= 0.8.0'}
1655 |
1656 | type-is@2.0.1:
1657 | resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
1658 | engines: {node: '>= 0.6'}
1659 |
1660 | typed-array-buffer@1.0.3:
1661 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
1662 | engines: {node: '>= 0.4'}
1663 |
1664 | typed-array-byte-length@1.0.3:
1665 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
1666 | engines: {node: '>= 0.4'}
1667 |
1668 | typed-array-byte-offset@1.0.4:
1669 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
1670 | engines: {node: '>= 0.4'}
1671 |
1672 | typed-array-length@1.0.7:
1673 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
1674 | engines: {node: '>= 0.4'}
1675 |
1676 | typescript@5.8.3:
1677 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
1678 | engines: {node: '>=14.17'}
1679 | hasBin: true
1680 |
1681 | unbox-primitive@1.1.0:
1682 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1683 | engines: {node: '>= 0.4'}
1684 |
1685 | undici-types@6.21.0:
1686 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1687 |
1688 | unpipe@1.0.0:
1689 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
1690 | engines: {node: '>= 0.8'}
1691 |
1692 | unrs-resolver@1.7.2:
1693 | resolution: {integrity: sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==}
1694 |
1695 | uri-js@4.4.1:
1696 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1697 |
1698 | vary@1.1.2:
1699 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
1700 | engines: {node: '>= 0.8'}
1701 |
1702 | which-boxed-primitive@1.1.1:
1703 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
1704 | engines: {node: '>= 0.4'}
1705 |
1706 | which-builtin-type@1.2.1:
1707 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
1708 | engines: {node: '>= 0.4'}
1709 |
1710 | which-collection@1.0.2:
1711 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
1712 | engines: {node: '>= 0.4'}
1713 |
1714 | which-typed-array@1.1.19:
1715 | resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
1716 | engines: {node: '>= 0.4'}
1717 |
1718 | which@2.0.2:
1719 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1720 | engines: {node: '>= 8'}
1721 | hasBin: true
1722 |
1723 | word-wrap@1.2.5:
1724 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1725 | engines: {node: '>=0.10.0'}
1726 |
1727 | wrappy@1.0.2:
1728 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1729 |
1730 | yocto-queue@0.1.0:
1731 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1732 | engines: {node: '>=10'}
1733 |
1734 | zod-to-json-schema@3.24.5:
1735 | resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
1736 | peerDependencies:
1737 | zod: ^3.24.1
1738 |
1739 | zod@3.24.4:
1740 | resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==}
1741 |
1742 | snapshots:
1743 |
1744 | '@emnapi/core@1.4.3':
1745 | dependencies:
1746 | '@emnapi/wasi-threads': 1.0.2
1747 | tslib: 2.8.1
1748 | optional: true
1749 |
1750 | '@emnapi/runtime@1.4.3':
1751 | dependencies:
1752 | tslib: 2.8.1
1753 | optional: true
1754 |
1755 | '@emnapi/wasi-threads@1.0.2':
1756 | dependencies:
1757 | tslib: 2.8.1
1758 | optional: true
1759 |
1760 | '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0)':
1761 | dependencies:
1762 | eslint: 9.26.0
1763 | eslint-visitor-keys: 3.4.3
1764 |
1765 | '@eslint-community/regexpp@4.12.1': {}
1766 |
1767 | '@eslint/config-array@0.20.0':
1768 | dependencies:
1769 | '@eslint/object-schema': 2.1.6
1770 | debug: 4.4.0
1771 | minimatch: 3.1.2
1772 | transitivePeerDependencies:
1773 | - supports-color
1774 |
1775 | '@eslint/config-helpers@0.2.2': {}
1776 |
1777 | '@eslint/core@0.13.0':
1778 | dependencies:
1779 | '@types/json-schema': 7.0.15
1780 |
1781 | '@eslint/eslintrc@3.3.1':
1782 | dependencies:
1783 | ajv: 6.12.6
1784 | debug: 4.4.0
1785 | espree: 10.3.0
1786 | globals: 14.0.0
1787 | ignore: 5.3.2
1788 | import-fresh: 3.3.1
1789 | js-yaml: 4.1.0
1790 | minimatch: 3.1.2
1791 | strip-json-comments: 3.1.1
1792 | transitivePeerDependencies:
1793 | - supports-color
1794 |
1795 | '@eslint/js@9.26.0': {}
1796 |
1797 | '@eslint/object-schema@2.1.6': {}
1798 |
1799 | '@eslint/plugin-kit@0.2.8':
1800 | dependencies:
1801 | '@eslint/core': 0.13.0
1802 | levn: 0.4.1
1803 |
1804 | '@humanfs/core@0.19.1': {}
1805 |
1806 | '@humanfs/node@0.16.6':
1807 | dependencies:
1808 | '@humanfs/core': 0.19.1
1809 | '@humanwhocodes/retry': 0.3.1
1810 |
1811 | '@humanwhocodes/module-importer@1.0.1': {}
1812 |
1813 | '@humanwhocodes/retry@0.3.1': {}
1814 |
1815 | '@humanwhocodes/retry@0.4.3': {}
1816 |
1817 | '@img/sharp-darwin-arm64@0.34.1':
1818 | optionalDependencies:
1819 | '@img/sharp-libvips-darwin-arm64': 1.1.0
1820 | optional: true
1821 |
1822 | '@img/sharp-darwin-x64@0.34.1':
1823 | optionalDependencies:
1824 | '@img/sharp-libvips-darwin-x64': 1.1.0
1825 | optional: true
1826 |
1827 | '@img/sharp-libvips-darwin-arm64@1.1.0':
1828 | optional: true
1829 |
1830 | '@img/sharp-libvips-darwin-x64@1.1.0':
1831 | optional: true
1832 |
1833 | '@img/sharp-libvips-linux-arm64@1.1.0':
1834 | optional: true
1835 |
1836 | '@img/sharp-libvips-linux-arm@1.1.0':
1837 | optional: true
1838 |
1839 | '@img/sharp-libvips-linux-ppc64@1.1.0':
1840 | optional: true
1841 |
1842 | '@img/sharp-libvips-linux-s390x@1.1.0':
1843 | optional: true
1844 |
1845 | '@img/sharp-libvips-linux-x64@1.1.0':
1846 | optional: true
1847 |
1848 | '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
1849 | optional: true
1850 |
1851 | '@img/sharp-libvips-linuxmusl-x64@1.1.0':
1852 | optional: true
1853 |
1854 | '@img/sharp-linux-arm64@0.34.1':
1855 | optionalDependencies:
1856 | '@img/sharp-libvips-linux-arm64': 1.1.0
1857 | optional: true
1858 |
1859 | '@img/sharp-linux-arm@0.34.1':
1860 | optionalDependencies:
1861 | '@img/sharp-libvips-linux-arm': 1.1.0
1862 | optional: true
1863 |
1864 | '@img/sharp-linux-s390x@0.34.1':
1865 | optionalDependencies:
1866 | '@img/sharp-libvips-linux-s390x': 1.1.0
1867 | optional: true
1868 |
1869 | '@img/sharp-linux-x64@0.34.1':
1870 | optionalDependencies:
1871 | '@img/sharp-libvips-linux-x64': 1.1.0
1872 | optional: true
1873 |
1874 | '@img/sharp-linuxmusl-arm64@0.34.1':
1875 | optionalDependencies:
1876 | '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
1877 | optional: true
1878 |
1879 | '@img/sharp-linuxmusl-x64@0.34.1':
1880 | optionalDependencies:
1881 | '@img/sharp-libvips-linuxmusl-x64': 1.1.0
1882 | optional: true
1883 |
1884 | '@img/sharp-wasm32@0.34.1':
1885 | dependencies:
1886 | '@emnapi/runtime': 1.4.3
1887 | optional: true
1888 |
1889 | '@img/sharp-win32-ia32@0.34.1':
1890 | optional: true
1891 |
1892 | '@img/sharp-win32-x64@0.34.1':
1893 | optional: true
1894 |
1895 | '@modelcontextprotocol/sdk@1.11.2':
1896 | dependencies:
1897 | content-type: 1.0.5
1898 | cors: 2.8.5
1899 | cross-spawn: 7.0.6
1900 | eventsource: 3.0.7
1901 | express: 5.1.0
1902 | express-rate-limit: 7.5.0(express@5.1.0)
1903 | pkce-challenge: 5.0.0
1904 | raw-body: 3.0.0
1905 | zod: 3.24.4
1906 | zod-to-json-schema: 3.24.5(zod@3.24.4)
1907 | transitivePeerDependencies:
1908 | - supports-color
1909 |
1910 | '@napi-rs/wasm-runtime@0.2.9':
1911 | dependencies:
1912 | '@emnapi/core': 1.4.3
1913 | '@emnapi/runtime': 1.4.3
1914 | '@tybys/wasm-util': 0.9.0
1915 | optional: true
1916 |
1917 | '@next/env@15.3.2': {}
1918 |
1919 | '@next/eslint-plugin-next@15.3.2':
1920 | dependencies:
1921 | fast-glob: 3.3.1
1922 |
1923 | '@next/swc-darwin-arm64@15.3.2':
1924 | optional: true
1925 |
1926 | '@next/swc-darwin-x64@15.3.2':
1927 | optional: true
1928 |
1929 | '@next/swc-linux-arm64-gnu@15.3.2':
1930 | optional: true
1931 |
1932 | '@next/swc-linux-arm64-musl@15.3.2':
1933 | optional: true
1934 |
1935 | '@next/swc-linux-x64-gnu@15.3.2':
1936 | optional: true
1937 |
1938 | '@next/swc-linux-x64-musl@15.3.2':
1939 | optional: true
1940 |
1941 | '@next/swc-win32-arm64-msvc@15.3.2':
1942 | optional: true
1943 |
1944 | '@next/swc-win32-x64-msvc@15.3.2':
1945 | optional: true
1946 |
1947 | '@nodelib/fs.scandir@2.1.5':
1948 | dependencies:
1949 | '@nodelib/fs.stat': 2.0.5
1950 | run-parallel: 1.2.0
1951 |
1952 | '@nodelib/fs.stat@2.0.5': {}
1953 |
1954 | '@nodelib/fs.walk@1.2.8':
1955 | dependencies:
1956 | '@nodelib/fs.scandir': 2.1.5
1957 | fastq: 1.19.1
1958 |
1959 | '@nolyfill/is-core-module@1.0.39': {}
1960 |
1961 | '@rtsao/scc@1.1.0': {}
1962 |
1963 | '@rushstack/eslint-patch@1.11.0': {}
1964 |
1965 | '@swc/counter@0.1.3': {}
1966 |
1967 | '@swc/helpers@0.5.15':
1968 | dependencies:
1969 | tslib: 2.8.1
1970 |
1971 | '@tybys/wasm-util@0.9.0':
1972 | dependencies:
1973 | tslib: 2.8.1
1974 | optional: true
1975 |
1976 | '@types/estree@1.0.7': {}
1977 |
1978 | '@types/json-schema@7.0.15': {}
1979 |
1980 | '@types/json5@0.0.29': {}
1981 |
1982 | '@types/node@22.15.17':
1983 | dependencies:
1984 | undici-types: 6.21.0
1985 |
1986 | '@types/react-dom@19.1.5(@types/react@19.1.4)':
1987 | dependencies:
1988 | '@types/react': 19.1.4
1989 |
1990 | '@types/react@19.1.4':
1991 | dependencies:
1992 | csstype: 3.1.3
1993 |
1994 | '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3)':
1995 | dependencies:
1996 | '@eslint-community/regexpp': 4.12.1
1997 | '@typescript-eslint/parser': 8.32.1(eslint@9.26.0)(typescript@5.8.3)
1998 | '@typescript-eslint/scope-manager': 8.32.1
1999 | '@typescript-eslint/type-utils': 8.32.1(eslint@9.26.0)(typescript@5.8.3)
2000 | '@typescript-eslint/utils': 8.32.1(eslint@9.26.0)(typescript@5.8.3)
2001 | '@typescript-eslint/visitor-keys': 8.32.1
2002 | eslint: 9.26.0
2003 | graphemer: 1.4.0
2004 | ignore: 7.0.4
2005 | natural-compare: 1.4.0
2006 | ts-api-utils: 2.1.0(typescript@5.8.3)
2007 | typescript: 5.8.3
2008 | transitivePeerDependencies:
2009 | - supports-color
2010 |
2011 | '@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3)':
2012 | dependencies:
2013 | '@typescript-eslint/scope-manager': 8.32.1
2014 | '@typescript-eslint/types': 8.32.1
2015 | '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
2016 | '@typescript-eslint/visitor-keys': 8.32.1
2017 | debug: 4.4.0
2018 | eslint: 9.26.0
2019 | typescript: 5.8.3
2020 | transitivePeerDependencies:
2021 | - supports-color
2022 |
2023 | '@typescript-eslint/scope-manager@8.32.1':
2024 | dependencies:
2025 | '@typescript-eslint/types': 8.32.1
2026 | '@typescript-eslint/visitor-keys': 8.32.1
2027 |
2028 | '@typescript-eslint/type-utils@8.32.1(eslint@9.26.0)(typescript@5.8.3)':
2029 | dependencies:
2030 | '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
2031 | '@typescript-eslint/utils': 8.32.1(eslint@9.26.0)(typescript@5.8.3)
2032 | debug: 4.4.0
2033 | eslint: 9.26.0
2034 | ts-api-utils: 2.1.0(typescript@5.8.3)
2035 | typescript: 5.8.3
2036 | transitivePeerDependencies:
2037 | - supports-color
2038 |
2039 | '@typescript-eslint/types@8.32.1': {}
2040 |
2041 | '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)':
2042 | dependencies:
2043 | '@typescript-eslint/types': 8.32.1
2044 | '@typescript-eslint/visitor-keys': 8.32.1
2045 | debug: 4.4.0
2046 | fast-glob: 3.3.3
2047 | is-glob: 4.0.3
2048 | minimatch: 9.0.5
2049 | semver: 7.7.2
2050 | ts-api-utils: 2.1.0(typescript@5.8.3)
2051 | typescript: 5.8.3
2052 | transitivePeerDependencies:
2053 | - supports-color
2054 |
2055 | '@typescript-eslint/utils@8.32.1(eslint@9.26.0)(typescript@5.8.3)':
2056 | dependencies:
2057 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0)
2058 | '@typescript-eslint/scope-manager': 8.32.1
2059 | '@typescript-eslint/types': 8.32.1
2060 | '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
2061 | eslint: 9.26.0
2062 | typescript: 5.8.3
2063 | transitivePeerDependencies:
2064 | - supports-color
2065 |
2066 | '@typescript-eslint/visitor-keys@8.32.1':
2067 | dependencies:
2068 | '@typescript-eslint/types': 8.32.1
2069 | eslint-visitor-keys: 4.2.0
2070 |
2071 | '@unrs/resolver-binding-darwin-arm64@1.7.2':
2072 | optional: true
2073 |
2074 | '@unrs/resolver-binding-darwin-x64@1.7.2':
2075 | optional: true
2076 |
2077 | '@unrs/resolver-binding-freebsd-x64@1.7.2':
2078 | optional: true
2079 |
2080 | '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2':
2081 | optional: true
2082 |
2083 | '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2':
2084 | optional: true
2085 |
2086 | '@unrs/resolver-binding-linux-arm64-gnu@1.7.2':
2087 | optional: true
2088 |
2089 | '@unrs/resolver-binding-linux-arm64-musl@1.7.2':
2090 | optional: true
2091 |
2092 | '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2':
2093 | optional: true
2094 |
2095 | '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2':
2096 | optional: true
2097 |
2098 | '@unrs/resolver-binding-linux-riscv64-musl@1.7.2':
2099 | optional: true
2100 |
2101 | '@unrs/resolver-binding-linux-s390x-gnu@1.7.2':
2102 | optional: true
2103 |
2104 | '@unrs/resolver-binding-linux-x64-gnu@1.7.2':
2105 | optional: true
2106 |
2107 | '@unrs/resolver-binding-linux-x64-musl@1.7.2':
2108 | optional: true
2109 |
2110 | '@unrs/resolver-binding-wasm32-wasi@1.7.2':
2111 | dependencies:
2112 | '@napi-rs/wasm-runtime': 0.2.9
2113 | optional: true
2114 |
2115 | '@unrs/resolver-binding-win32-arm64-msvc@1.7.2':
2116 | optional: true
2117 |
2118 | '@unrs/resolver-binding-win32-ia32-msvc@1.7.2':
2119 | optional: true
2120 |
2121 | '@unrs/resolver-binding-win32-x64-msvc@1.7.2':
2122 | optional: true
2123 |
2124 | accepts@2.0.0:
2125 | dependencies:
2126 | mime-types: 3.0.1
2127 | negotiator: 1.0.0
2128 |
2129 | acorn-jsx@5.3.2(acorn@8.14.1):
2130 | dependencies:
2131 | acorn: 8.14.1
2132 |
2133 | acorn@8.14.1: {}
2134 |
2135 | ajv@6.12.6:
2136 | dependencies:
2137 | fast-deep-equal: 3.1.3
2138 | fast-json-stable-stringify: 2.1.0
2139 | json-schema-traverse: 0.4.1
2140 | uri-js: 4.4.1
2141 |
2142 | ansi-styles@4.3.0:
2143 | dependencies:
2144 | color-convert: 2.0.1
2145 |
2146 | argparse@2.0.1: {}
2147 |
2148 | aria-query@5.3.2: {}
2149 |
2150 | array-buffer-byte-length@1.0.2:
2151 | dependencies:
2152 | call-bound: 1.0.4
2153 | is-array-buffer: 3.0.5
2154 |
2155 | array-includes@3.1.8:
2156 | dependencies:
2157 | call-bind: 1.0.8
2158 | define-properties: 1.2.1
2159 | es-abstract: 1.23.9
2160 | es-object-atoms: 1.1.1
2161 | get-intrinsic: 1.3.0
2162 | is-string: 1.1.1
2163 |
2164 | array.prototype.findlast@1.2.5:
2165 | dependencies:
2166 | call-bind: 1.0.8
2167 | define-properties: 1.2.1
2168 | es-abstract: 1.23.9
2169 | es-errors: 1.3.0
2170 | es-object-atoms: 1.1.1
2171 | es-shim-unscopables: 1.1.0
2172 |
2173 | array.prototype.findlastindex@1.2.6:
2174 | dependencies:
2175 | call-bind: 1.0.8
2176 | call-bound: 1.0.4
2177 | define-properties: 1.2.1
2178 | es-abstract: 1.23.9
2179 | es-errors: 1.3.0
2180 | es-object-atoms: 1.1.1
2181 | es-shim-unscopables: 1.1.0
2182 |
2183 | array.prototype.flat@1.3.3:
2184 | dependencies:
2185 | call-bind: 1.0.8
2186 | define-properties: 1.2.1
2187 | es-abstract: 1.23.9
2188 | es-shim-unscopables: 1.1.0
2189 |
2190 | array.prototype.flatmap@1.3.3:
2191 | dependencies:
2192 | call-bind: 1.0.8
2193 | define-properties: 1.2.1
2194 | es-abstract: 1.23.9
2195 | es-shim-unscopables: 1.1.0
2196 |
2197 | array.prototype.tosorted@1.1.4:
2198 | dependencies:
2199 | call-bind: 1.0.8
2200 | define-properties: 1.2.1
2201 | es-abstract: 1.23.9
2202 | es-errors: 1.3.0
2203 | es-shim-unscopables: 1.1.0
2204 |
2205 | arraybuffer.prototype.slice@1.0.4:
2206 | dependencies:
2207 | array-buffer-byte-length: 1.0.2
2208 | call-bind: 1.0.8
2209 | define-properties: 1.2.1
2210 | es-abstract: 1.23.9
2211 | es-errors: 1.3.0
2212 | get-intrinsic: 1.3.0
2213 | is-array-buffer: 3.0.5
2214 |
2215 | ast-types-flow@0.0.8: {}
2216 |
2217 | async-function@1.0.0: {}
2218 |
2219 | available-typed-arrays@1.0.7:
2220 | dependencies:
2221 | possible-typed-array-names: 1.1.0
2222 |
2223 | axe-core@4.10.3: {}
2224 |
2225 | axobject-query@4.1.0: {}
2226 |
2227 | balanced-match@1.0.2: {}
2228 |
2229 | body-parser@2.2.0:
2230 | dependencies:
2231 | bytes: 3.1.2
2232 | content-type: 1.0.5
2233 | debug: 4.4.0
2234 | http-errors: 2.0.0
2235 | iconv-lite: 0.6.3
2236 | on-finished: 2.4.1
2237 | qs: 6.14.0
2238 | raw-body: 3.0.0
2239 | type-is: 2.0.1
2240 | transitivePeerDependencies:
2241 | - supports-color
2242 |
2243 | brace-expansion@1.1.11:
2244 | dependencies:
2245 | balanced-match: 1.0.2
2246 | concat-map: 0.0.1
2247 |
2248 | brace-expansion@2.0.1:
2249 | dependencies:
2250 | balanced-match: 1.0.2
2251 |
2252 | braces@3.0.3:
2253 | dependencies:
2254 | fill-range: 7.1.1
2255 |
2256 | busboy@1.6.0:
2257 | dependencies:
2258 | streamsearch: 1.1.0
2259 |
2260 | bytes@3.1.2: {}
2261 |
2262 | call-bind-apply-helpers@1.0.2:
2263 | dependencies:
2264 | es-errors: 1.3.0
2265 | function-bind: 1.1.2
2266 |
2267 | call-bind@1.0.8:
2268 | dependencies:
2269 | call-bind-apply-helpers: 1.0.2
2270 | es-define-property: 1.0.1
2271 | get-intrinsic: 1.3.0
2272 | set-function-length: 1.2.2
2273 |
2274 | call-bound@1.0.4:
2275 | dependencies:
2276 | call-bind-apply-helpers: 1.0.2
2277 | get-intrinsic: 1.3.0
2278 |
2279 | callsites@3.1.0: {}
2280 |
2281 | caniuse-lite@1.0.30001718: {}
2282 |
2283 | chalk@4.1.2:
2284 | dependencies:
2285 | ansi-styles: 4.3.0
2286 | supports-color: 7.2.0
2287 |
2288 | client-only@0.0.1: {}
2289 |
2290 | color-convert@2.0.1:
2291 | dependencies:
2292 | color-name: 1.1.4
2293 |
2294 | color-name@1.1.4: {}
2295 |
2296 | color-string@1.9.1:
2297 | dependencies:
2298 | color-name: 1.1.4
2299 | simple-swizzle: 0.2.2
2300 | optional: true
2301 |
2302 | color@4.2.3:
2303 | dependencies:
2304 | color-convert: 2.0.1
2305 | color-string: 1.9.1
2306 | optional: true
2307 |
2308 | concat-map@0.0.1: {}
2309 |
2310 | content-disposition@1.0.0:
2311 | dependencies:
2312 | safe-buffer: 5.2.1
2313 |
2314 | content-type@1.0.5: {}
2315 |
2316 | cookie-signature@1.2.2: {}
2317 |
2318 | cookie@0.7.2: {}
2319 |
2320 | cors@2.8.5:
2321 | dependencies:
2322 | object-assign: 4.1.1
2323 | vary: 1.1.2
2324 |
2325 | cross-spawn@7.0.6:
2326 | dependencies:
2327 | path-key: 3.1.1
2328 | shebang-command: 2.0.0
2329 | which: 2.0.2
2330 |
2331 | csstype@3.1.3: {}
2332 |
2333 | damerau-levenshtein@1.0.8: {}
2334 |
2335 | data-view-buffer@1.0.2:
2336 | dependencies:
2337 | call-bound: 1.0.4
2338 | es-errors: 1.3.0
2339 | is-data-view: 1.0.2
2340 |
2341 | data-view-byte-length@1.0.2:
2342 | dependencies:
2343 | call-bound: 1.0.4
2344 | es-errors: 1.3.0
2345 | is-data-view: 1.0.2
2346 |
2347 | data-view-byte-offset@1.0.1:
2348 | dependencies:
2349 | call-bound: 1.0.4
2350 | es-errors: 1.3.0
2351 | is-data-view: 1.0.2
2352 |
2353 | debug@3.2.7:
2354 | dependencies:
2355 | ms: 2.1.3
2356 |
2357 | debug@4.4.0:
2358 | dependencies:
2359 | ms: 2.1.3
2360 |
2361 | deep-is@0.1.4: {}
2362 |
2363 | define-data-property@1.1.4:
2364 | dependencies:
2365 | es-define-property: 1.0.1
2366 | es-errors: 1.3.0
2367 | gopd: 1.2.0
2368 |
2369 | define-properties@1.2.1:
2370 | dependencies:
2371 | define-data-property: 1.1.4
2372 | has-property-descriptors: 1.0.2
2373 | object-keys: 1.1.1
2374 |
2375 | depd@2.0.0: {}
2376 |
2377 | detect-libc@2.0.4:
2378 | optional: true
2379 |
2380 | doctrine@2.1.0:
2381 | dependencies:
2382 | esutils: 2.0.3
2383 |
2384 | dunder-proto@1.0.1:
2385 | dependencies:
2386 | call-bind-apply-helpers: 1.0.2
2387 | es-errors: 1.3.0
2388 | gopd: 1.2.0
2389 |
2390 | ee-first@1.1.1: {}
2391 |
2392 | emoji-regex@9.2.2: {}
2393 |
2394 | encodeurl@2.0.0: {}
2395 |
2396 | es-abstract@1.23.9:
2397 | dependencies:
2398 | array-buffer-byte-length: 1.0.2
2399 | arraybuffer.prototype.slice: 1.0.4
2400 | available-typed-arrays: 1.0.7
2401 | call-bind: 1.0.8
2402 | call-bound: 1.0.4
2403 | data-view-buffer: 1.0.2
2404 | data-view-byte-length: 1.0.2
2405 | data-view-byte-offset: 1.0.1
2406 | es-define-property: 1.0.1
2407 | es-errors: 1.3.0
2408 | es-object-atoms: 1.1.1
2409 | es-set-tostringtag: 2.1.0
2410 | es-to-primitive: 1.3.0
2411 | function.prototype.name: 1.1.8
2412 | get-intrinsic: 1.3.0
2413 | get-proto: 1.0.1
2414 | get-symbol-description: 1.1.0
2415 | globalthis: 1.0.4
2416 | gopd: 1.2.0
2417 | has-property-descriptors: 1.0.2
2418 | has-proto: 1.2.0
2419 | has-symbols: 1.1.0
2420 | hasown: 2.0.2
2421 | internal-slot: 1.1.0
2422 | is-array-buffer: 3.0.5
2423 | is-callable: 1.2.7
2424 | is-data-view: 1.0.2
2425 | is-regex: 1.2.1
2426 | is-shared-array-buffer: 1.0.4
2427 | is-string: 1.1.1
2428 | is-typed-array: 1.1.15
2429 | is-weakref: 1.1.1
2430 | math-intrinsics: 1.1.0
2431 | object-inspect: 1.13.4
2432 | object-keys: 1.1.1
2433 | object.assign: 4.1.7
2434 | own-keys: 1.0.1
2435 | regexp.prototype.flags: 1.5.4
2436 | safe-array-concat: 1.1.3
2437 | safe-push-apply: 1.0.0
2438 | safe-regex-test: 1.1.0
2439 | set-proto: 1.0.0
2440 | string.prototype.trim: 1.2.10
2441 | string.prototype.trimend: 1.0.9
2442 | string.prototype.trimstart: 1.0.8
2443 | typed-array-buffer: 1.0.3
2444 | typed-array-byte-length: 1.0.3
2445 | typed-array-byte-offset: 1.0.4
2446 | typed-array-length: 1.0.7
2447 | unbox-primitive: 1.1.0
2448 | which-typed-array: 1.1.19
2449 |
2450 | es-define-property@1.0.1: {}
2451 |
2452 | es-errors@1.3.0: {}
2453 |
2454 | es-iterator-helpers@1.2.1:
2455 | dependencies:
2456 | call-bind: 1.0.8
2457 | call-bound: 1.0.4
2458 | define-properties: 1.2.1
2459 | es-abstract: 1.23.9
2460 | es-errors: 1.3.0
2461 | es-set-tostringtag: 2.1.0
2462 | function-bind: 1.1.2
2463 | get-intrinsic: 1.3.0
2464 | globalthis: 1.0.4
2465 | gopd: 1.2.0
2466 | has-property-descriptors: 1.0.2
2467 | has-proto: 1.2.0
2468 | has-symbols: 1.1.0
2469 | internal-slot: 1.1.0
2470 | iterator.prototype: 1.1.5
2471 | safe-array-concat: 1.1.3
2472 |
2473 | es-object-atoms@1.1.1:
2474 | dependencies:
2475 | es-errors: 1.3.0
2476 |
2477 | es-set-tostringtag@2.1.0:
2478 | dependencies:
2479 | es-errors: 1.3.0
2480 | get-intrinsic: 1.3.0
2481 | has-tostringtag: 1.0.2
2482 | hasown: 2.0.2
2483 |
2484 | es-shim-unscopables@1.1.0:
2485 | dependencies:
2486 | hasown: 2.0.2
2487 |
2488 | es-to-primitive@1.3.0:
2489 | dependencies:
2490 | is-callable: 1.2.7
2491 | is-date-object: 1.1.0
2492 | is-symbol: 1.1.1
2493 |
2494 | escape-html@1.0.3: {}
2495 |
2496 | escape-string-regexp@4.0.0: {}
2497 |
2498 | eslint-config-next@15.3.2(eslint@9.26.0)(typescript@5.8.3):
2499 | dependencies:
2500 | '@next/eslint-plugin-next': 15.3.2
2501 | '@rushstack/eslint-patch': 1.11.0
2502 | '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3)
2503 | '@typescript-eslint/parser': 8.32.1(eslint@9.26.0)(typescript@5.8.3)
2504 | eslint: 9.26.0
2505 | eslint-import-resolver-node: 0.3.9
2506 | eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0)
2507 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0)
2508 | eslint-plugin-jsx-a11y: 6.10.2(eslint@9.26.0)
2509 | eslint-plugin-react: 7.37.5(eslint@9.26.0)
2510 | eslint-plugin-react-hooks: 5.2.0(eslint@9.26.0)
2511 | optionalDependencies:
2512 | typescript: 5.8.3
2513 | transitivePeerDependencies:
2514 | - eslint-import-resolver-webpack
2515 | - eslint-plugin-import-x
2516 | - supports-color
2517 |
2518 | eslint-import-resolver-node@0.3.9:
2519 | dependencies:
2520 | debug: 3.2.7
2521 | is-core-module: 2.16.1
2522 | resolve: 1.22.10
2523 | transitivePeerDependencies:
2524 | - supports-color
2525 |
2526 | eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0):
2527 | dependencies:
2528 | '@nolyfill/is-core-module': 1.0.39
2529 | debug: 4.4.0
2530 | eslint: 9.26.0
2531 | get-tsconfig: 4.10.0
2532 | is-bun-module: 2.0.0
2533 | stable-hash: 0.0.5
2534 | tinyglobby: 0.2.13
2535 | unrs-resolver: 1.7.2
2536 | optionalDependencies:
2537 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0)
2538 | transitivePeerDependencies:
2539 | - supports-color
2540 |
2541 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0):
2542 | dependencies:
2543 | debug: 3.2.7
2544 | optionalDependencies:
2545 | '@typescript-eslint/parser': 8.32.1(eslint@9.26.0)(typescript@5.8.3)
2546 | eslint: 9.26.0
2547 | eslint-import-resolver-node: 0.3.9
2548 | eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0)
2549 | transitivePeerDependencies:
2550 | - supports-color
2551 |
2552 | eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0):
2553 | dependencies:
2554 | '@rtsao/scc': 1.1.0
2555 | array-includes: 3.1.8
2556 | array.prototype.findlastindex: 1.2.6
2557 | array.prototype.flat: 1.3.3
2558 | array.prototype.flatmap: 1.3.3
2559 | debug: 3.2.7
2560 | doctrine: 2.1.0
2561 | eslint: 9.26.0
2562 | eslint-import-resolver-node: 0.3.9
2563 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0)
2564 | hasown: 2.0.2
2565 | is-core-module: 2.16.1
2566 | is-glob: 4.0.3
2567 | minimatch: 3.1.2
2568 | object.fromentries: 2.0.8
2569 | object.groupby: 1.0.3
2570 | object.values: 1.2.1
2571 | semver: 6.3.1
2572 | string.prototype.trimend: 1.0.9
2573 | tsconfig-paths: 3.15.0
2574 | optionalDependencies:
2575 | '@typescript-eslint/parser': 8.32.1(eslint@9.26.0)(typescript@5.8.3)
2576 | transitivePeerDependencies:
2577 | - eslint-import-resolver-typescript
2578 | - eslint-import-resolver-webpack
2579 | - supports-color
2580 |
2581 | eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0):
2582 | dependencies:
2583 | aria-query: 5.3.2
2584 | array-includes: 3.1.8
2585 | array.prototype.flatmap: 1.3.3
2586 | ast-types-flow: 0.0.8
2587 | axe-core: 4.10.3
2588 | axobject-query: 4.1.0
2589 | damerau-levenshtein: 1.0.8
2590 | emoji-regex: 9.2.2
2591 | eslint: 9.26.0
2592 | hasown: 2.0.2
2593 | jsx-ast-utils: 3.3.5
2594 | language-tags: 1.0.9
2595 | minimatch: 3.1.2
2596 | object.fromentries: 2.0.8
2597 | safe-regex-test: 1.1.0
2598 | string.prototype.includes: 2.0.1
2599 |
2600 | eslint-plugin-react-hooks@5.2.0(eslint@9.26.0):
2601 | dependencies:
2602 | eslint: 9.26.0
2603 |
2604 | eslint-plugin-react@7.37.5(eslint@9.26.0):
2605 | dependencies:
2606 | array-includes: 3.1.8
2607 | array.prototype.findlast: 1.2.5
2608 | array.prototype.flatmap: 1.3.3
2609 | array.prototype.tosorted: 1.1.4
2610 | doctrine: 2.1.0
2611 | es-iterator-helpers: 1.2.1
2612 | eslint: 9.26.0
2613 | estraverse: 5.3.0
2614 | hasown: 2.0.2
2615 | jsx-ast-utils: 3.3.5
2616 | minimatch: 3.1.2
2617 | object.entries: 1.1.9
2618 | object.fromentries: 2.0.8
2619 | object.values: 1.2.1
2620 | prop-types: 15.8.1
2621 | resolve: 2.0.0-next.5
2622 | semver: 6.3.1
2623 | string.prototype.matchall: 4.0.12
2624 | string.prototype.repeat: 1.0.0
2625 |
2626 | eslint-scope@8.3.0:
2627 | dependencies:
2628 | esrecurse: 4.3.0
2629 | estraverse: 5.3.0
2630 |
2631 | eslint-visitor-keys@3.4.3: {}
2632 |
2633 | eslint-visitor-keys@4.2.0: {}
2634 |
2635 | eslint@9.26.0:
2636 | dependencies:
2637 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0)
2638 | '@eslint-community/regexpp': 4.12.1
2639 | '@eslint/config-array': 0.20.0
2640 | '@eslint/config-helpers': 0.2.2
2641 | '@eslint/core': 0.13.0
2642 | '@eslint/eslintrc': 3.3.1
2643 | '@eslint/js': 9.26.0
2644 | '@eslint/plugin-kit': 0.2.8
2645 | '@humanfs/node': 0.16.6
2646 | '@humanwhocodes/module-importer': 1.0.1
2647 | '@humanwhocodes/retry': 0.4.3
2648 | '@modelcontextprotocol/sdk': 1.11.2
2649 | '@types/estree': 1.0.7
2650 | '@types/json-schema': 7.0.15
2651 | ajv: 6.12.6
2652 | chalk: 4.1.2
2653 | cross-spawn: 7.0.6
2654 | debug: 4.4.0
2655 | escape-string-regexp: 4.0.0
2656 | eslint-scope: 8.3.0
2657 | eslint-visitor-keys: 4.2.0
2658 | espree: 10.3.0
2659 | esquery: 1.6.0
2660 | esutils: 2.0.3
2661 | fast-deep-equal: 3.1.3
2662 | file-entry-cache: 8.0.0
2663 | find-up: 5.0.0
2664 | glob-parent: 6.0.2
2665 | ignore: 5.3.2
2666 | imurmurhash: 0.1.4
2667 | is-glob: 4.0.3
2668 | json-stable-stringify-without-jsonify: 1.0.1
2669 | lodash.merge: 4.6.2
2670 | minimatch: 3.1.2
2671 | natural-compare: 1.4.0
2672 | optionator: 0.9.4
2673 | zod: 3.24.4
2674 | transitivePeerDependencies:
2675 | - supports-color
2676 |
2677 | espree@10.3.0:
2678 | dependencies:
2679 | acorn: 8.14.1
2680 | acorn-jsx: 5.3.2(acorn@8.14.1)
2681 | eslint-visitor-keys: 4.2.0
2682 |
2683 | esquery@1.6.0:
2684 | dependencies:
2685 | estraverse: 5.3.0
2686 |
2687 | esrecurse@4.3.0:
2688 | dependencies:
2689 | estraverse: 5.3.0
2690 |
2691 | estraverse@5.3.0: {}
2692 |
2693 | esutils@2.0.3: {}
2694 |
2695 | etag@1.8.1: {}
2696 |
2697 | eventsource-parser@3.0.1: {}
2698 |
2699 | eventsource@3.0.7:
2700 | dependencies:
2701 | eventsource-parser: 3.0.1
2702 |
2703 | express-rate-limit@7.5.0(express@5.1.0):
2704 | dependencies:
2705 | express: 5.1.0
2706 |
2707 | express@5.1.0:
2708 | dependencies:
2709 | accepts: 2.0.0
2710 | body-parser: 2.2.0
2711 | content-disposition: 1.0.0
2712 | content-type: 1.0.5
2713 | cookie: 0.7.2
2714 | cookie-signature: 1.2.2
2715 | debug: 4.4.0
2716 | encodeurl: 2.0.0
2717 | escape-html: 1.0.3
2718 | etag: 1.8.1
2719 | finalhandler: 2.1.0
2720 | fresh: 2.0.0
2721 | http-errors: 2.0.0
2722 | merge-descriptors: 2.0.0
2723 | mime-types: 3.0.1
2724 | on-finished: 2.4.1
2725 | once: 1.4.0
2726 | parseurl: 1.3.3
2727 | proxy-addr: 2.0.7
2728 | qs: 6.14.0
2729 | range-parser: 1.2.1
2730 | router: 2.2.0
2731 | send: 1.2.0
2732 | serve-static: 2.2.0
2733 | statuses: 2.0.1
2734 | type-is: 2.0.1
2735 | vary: 1.1.2
2736 | transitivePeerDependencies:
2737 | - supports-color
2738 |
2739 | fast-deep-equal@3.1.3: {}
2740 |
2741 | fast-glob@3.3.1:
2742 | dependencies:
2743 | '@nodelib/fs.stat': 2.0.5
2744 | '@nodelib/fs.walk': 1.2.8
2745 | glob-parent: 5.1.2
2746 | merge2: 1.4.1
2747 | micromatch: 4.0.8
2748 |
2749 | fast-glob@3.3.3:
2750 | dependencies:
2751 | '@nodelib/fs.stat': 2.0.5
2752 | '@nodelib/fs.walk': 1.2.8
2753 | glob-parent: 5.1.2
2754 | merge2: 1.4.1
2755 | micromatch: 4.0.8
2756 |
2757 | fast-json-stable-stringify@2.1.0: {}
2758 |
2759 | fast-levenshtein@2.0.6: {}
2760 |
2761 | fastq@1.19.1:
2762 | dependencies:
2763 | reusify: 1.1.0
2764 |
2765 | fdir@6.4.4(picomatch@4.0.2):
2766 | optionalDependencies:
2767 | picomatch: 4.0.2
2768 |
2769 | file-entry-cache@8.0.0:
2770 | dependencies:
2771 | flat-cache: 4.0.1
2772 |
2773 | fill-range@7.1.1:
2774 | dependencies:
2775 | to-regex-range: 5.0.1
2776 |
2777 | finalhandler@2.1.0:
2778 | dependencies:
2779 | debug: 4.4.0
2780 | encodeurl: 2.0.0
2781 | escape-html: 1.0.3
2782 | on-finished: 2.4.1
2783 | parseurl: 1.3.3
2784 | statuses: 2.0.1
2785 | transitivePeerDependencies:
2786 | - supports-color
2787 |
2788 | find-up@5.0.0:
2789 | dependencies:
2790 | locate-path: 6.0.0
2791 | path-exists: 4.0.0
2792 |
2793 | flat-cache@4.0.1:
2794 | dependencies:
2795 | flatted: 3.3.3
2796 | keyv: 4.5.4
2797 |
2798 | flatted@3.3.3: {}
2799 |
2800 | for-each@0.3.5:
2801 | dependencies:
2802 | is-callable: 1.2.7
2803 |
2804 | forwarded@0.2.0: {}
2805 |
2806 | fresh@2.0.0: {}
2807 |
2808 | function-bind@1.1.2: {}
2809 |
2810 | function.prototype.name@1.1.8:
2811 | dependencies:
2812 | call-bind: 1.0.8
2813 | call-bound: 1.0.4
2814 | define-properties: 1.2.1
2815 | functions-have-names: 1.2.3
2816 | hasown: 2.0.2
2817 | is-callable: 1.2.7
2818 |
2819 | functions-have-names@1.2.3: {}
2820 |
2821 | get-intrinsic@1.3.0:
2822 | dependencies:
2823 | call-bind-apply-helpers: 1.0.2
2824 | es-define-property: 1.0.1
2825 | es-errors: 1.3.0
2826 | es-object-atoms: 1.1.1
2827 | function-bind: 1.1.2
2828 | get-proto: 1.0.1
2829 | gopd: 1.2.0
2830 | has-symbols: 1.1.0
2831 | hasown: 2.0.2
2832 | math-intrinsics: 1.1.0
2833 |
2834 | get-proto@1.0.1:
2835 | dependencies:
2836 | dunder-proto: 1.0.1
2837 | es-object-atoms: 1.1.1
2838 |
2839 | get-symbol-description@1.1.0:
2840 | dependencies:
2841 | call-bound: 1.0.4
2842 | es-errors: 1.3.0
2843 | get-intrinsic: 1.3.0
2844 |
2845 | get-tsconfig@4.10.0:
2846 | dependencies:
2847 | resolve-pkg-maps: 1.0.0
2848 |
2849 | glob-parent@5.1.2:
2850 | dependencies:
2851 | is-glob: 4.0.3
2852 |
2853 | glob-parent@6.0.2:
2854 | dependencies:
2855 | is-glob: 4.0.3
2856 |
2857 | globals@14.0.0: {}
2858 |
2859 | globalthis@1.0.4:
2860 | dependencies:
2861 | define-properties: 1.2.1
2862 | gopd: 1.2.0
2863 |
2864 | gopd@1.2.0: {}
2865 |
2866 | graphemer@1.4.0: {}
2867 |
2868 | has-bigints@1.1.0: {}
2869 |
2870 | has-flag@4.0.0: {}
2871 |
2872 | has-property-descriptors@1.0.2:
2873 | dependencies:
2874 | es-define-property: 1.0.1
2875 |
2876 | has-proto@1.2.0:
2877 | dependencies:
2878 | dunder-proto: 1.0.1
2879 |
2880 | has-symbols@1.1.0: {}
2881 |
2882 | has-tostringtag@1.0.2:
2883 | dependencies:
2884 | has-symbols: 1.1.0
2885 |
2886 | hasown@2.0.2:
2887 | dependencies:
2888 | function-bind: 1.1.2
2889 |
2890 | http-errors@2.0.0:
2891 | dependencies:
2892 | depd: 2.0.0
2893 | inherits: 2.0.4
2894 | setprototypeof: 1.2.0
2895 | statuses: 2.0.1
2896 | toidentifier: 1.0.1
2897 |
2898 | iconv-lite@0.6.3:
2899 | dependencies:
2900 | safer-buffer: 2.1.2
2901 |
2902 | ignore@5.3.2: {}
2903 |
2904 | ignore@7.0.4: {}
2905 |
2906 | import-fresh@3.3.1:
2907 | dependencies:
2908 | parent-module: 1.0.1
2909 | resolve-from: 4.0.0
2910 |
2911 | imurmurhash@0.1.4: {}
2912 |
2913 | inherits@2.0.4: {}
2914 |
2915 | internal-slot@1.1.0:
2916 | dependencies:
2917 | es-errors: 1.3.0
2918 | hasown: 2.0.2
2919 | side-channel: 1.1.0
2920 |
2921 | ipaddr.js@1.9.1: {}
2922 |
2923 | is-array-buffer@3.0.5:
2924 | dependencies:
2925 | call-bind: 1.0.8
2926 | call-bound: 1.0.4
2927 | get-intrinsic: 1.3.0
2928 |
2929 | is-arrayish@0.3.2:
2930 | optional: true
2931 |
2932 | is-async-function@2.1.1:
2933 | dependencies:
2934 | async-function: 1.0.0
2935 | call-bound: 1.0.4
2936 | get-proto: 1.0.1
2937 | has-tostringtag: 1.0.2
2938 | safe-regex-test: 1.1.0
2939 |
2940 | is-bigint@1.1.0:
2941 | dependencies:
2942 | has-bigints: 1.1.0
2943 |
2944 | is-boolean-object@1.2.2:
2945 | dependencies:
2946 | call-bound: 1.0.4
2947 | has-tostringtag: 1.0.2
2948 |
2949 | is-bun-module@2.0.0:
2950 | dependencies:
2951 | semver: 7.7.2
2952 |
2953 | is-callable@1.2.7: {}
2954 |
2955 | is-core-module@2.16.1:
2956 | dependencies:
2957 | hasown: 2.0.2
2958 |
2959 | is-data-view@1.0.2:
2960 | dependencies:
2961 | call-bound: 1.0.4
2962 | get-intrinsic: 1.3.0
2963 | is-typed-array: 1.1.15
2964 |
2965 | is-date-object@1.1.0:
2966 | dependencies:
2967 | call-bound: 1.0.4
2968 | has-tostringtag: 1.0.2
2969 |
2970 | is-extglob@2.1.1: {}
2971 |
2972 | is-finalizationregistry@1.1.1:
2973 | dependencies:
2974 | call-bound: 1.0.4
2975 |
2976 | is-generator-function@1.1.0:
2977 | dependencies:
2978 | call-bound: 1.0.4
2979 | get-proto: 1.0.1
2980 | has-tostringtag: 1.0.2
2981 | safe-regex-test: 1.1.0
2982 |
2983 | is-glob@4.0.3:
2984 | dependencies:
2985 | is-extglob: 2.1.1
2986 |
2987 | is-map@2.0.3: {}
2988 |
2989 | is-number-object@1.1.1:
2990 | dependencies:
2991 | call-bound: 1.0.4
2992 | has-tostringtag: 1.0.2
2993 |
2994 | is-number@7.0.0: {}
2995 |
2996 | is-promise@4.0.0: {}
2997 |
2998 | is-regex@1.2.1:
2999 | dependencies:
3000 | call-bound: 1.0.4
3001 | gopd: 1.2.0
3002 | has-tostringtag: 1.0.2
3003 | hasown: 2.0.2
3004 |
3005 | is-set@2.0.3: {}
3006 |
3007 | is-shared-array-buffer@1.0.4:
3008 | dependencies:
3009 | call-bound: 1.0.4
3010 |
3011 | is-string@1.1.1:
3012 | dependencies:
3013 | call-bound: 1.0.4
3014 | has-tostringtag: 1.0.2
3015 |
3016 | is-symbol@1.1.1:
3017 | dependencies:
3018 | call-bound: 1.0.4
3019 | has-symbols: 1.1.0
3020 | safe-regex-test: 1.1.0
3021 |
3022 | is-typed-array@1.1.15:
3023 | dependencies:
3024 | which-typed-array: 1.1.19
3025 |
3026 | is-weakmap@2.0.2: {}
3027 |
3028 | is-weakref@1.1.1:
3029 | dependencies:
3030 | call-bound: 1.0.4
3031 |
3032 | is-weakset@2.0.4:
3033 | dependencies:
3034 | call-bound: 1.0.4
3035 | get-intrinsic: 1.3.0
3036 |
3037 | isarray@2.0.5: {}
3038 |
3039 | isexe@2.0.0: {}
3040 |
3041 | iterator.prototype@1.1.5:
3042 | dependencies:
3043 | define-data-property: 1.1.4
3044 | es-object-atoms: 1.1.1
3045 | get-intrinsic: 1.3.0
3046 | get-proto: 1.0.1
3047 | has-symbols: 1.1.0
3048 | set-function-name: 2.0.2
3049 |
3050 | js-tokens@4.0.0: {}
3051 |
3052 | js-yaml@4.1.0:
3053 | dependencies:
3054 | argparse: 2.0.1
3055 |
3056 | json-buffer@3.0.1: {}
3057 |
3058 | json-schema-traverse@0.4.1: {}
3059 |
3060 | json-stable-stringify-without-jsonify@1.0.1: {}
3061 |
3062 | json5@1.0.2:
3063 | dependencies:
3064 | minimist: 1.2.8
3065 |
3066 | jsx-ast-utils@3.3.5:
3067 | dependencies:
3068 | array-includes: 3.1.8
3069 | array.prototype.flat: 1.3.3
3070 | object.assign: 4.1.7
3071 | object.values: 1.2.1
3072 |
3073 | keyv@4.5.4:
3074 | dependencies:
3075 | json-buffer: 3.0.1
3076 |
3077 | language-subtag-registry@0.3.23: {}
3078 |
3079 | language-tags@1.0.9:
3080 | dependencies:
3081 | language-subtag-registry: 0.3.23
3082 |
3083 | levn@0.4.1:
3084 | dependencies:
3085 | prelude-ls: 1.2.1
3086 | type-check: 0.4.0
3087 |
3088 | locate-path@6.0.0:
3089 | dependencies:
3090 | p-locate: 5.0.0
3091 |
3092 | lodash.merge@4.6.2: {}
3093 |
3094 | loose-envify@1.4.0:
3095 | dependencies:
3096 | js-tokens: 4.0.0
3097 |
3098 | math-intrinsics@1.1.0: {}
3099 |
3100 | media-typer@1.1.0: {}
3101 |
3102 | merge-descriptors@2.0.0: {}
3103 |
3104 | merge2@1.4.1: {}
3105 |
3106 | micromatch@4.0.8:
3107 | dependencies:
3108 | braces: 3.0.3
3109 | picomatch: 2.3.1
3110 |
3111 | mime-db@1.54.0: {}
3112 |
3113 | mime-types@3.0.1:
3114 | dependencies:
3115 | mime-db: 1.54.0
3116 |
3117 | minimatch@3.1.2:
3118 | dependencies:
3119 | brace-expansion: 1.1.11
3120 |
3121 | minimatch@9.0.5:
3122 | dependencies:
3123 | brace-expansion: 2.0.1
3124 |
3125 | minimist@1.2.8: {}
3126 |
3127 | ms@2.1.3: {}
3128 |
3129 | nanoid@3.3.11: {}
3130 |
3131 | napi-postinstall@0.2.4: {}
3132 |
3133 | natural-compare@1.4.0: {}
3134 |
3135 | negotiator@1.0.0: {}
3136 |
3137 | next@15.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
3138 | dependencies:
3139 | '@next/env': 15.3.2
3140 | '@swc/counter': 0.1.3
3141 | '@swc/helpers': 0.5.15
3142 | busboy: 1.6.0
3143 | caniuse-lite: 1.0.30001718
3144 | postcss: 8.4.31
3145 | react: 19.1.0
3146 | react-dom: 19.1.0(react@19.1.0)
3147 | styled-jsx: 5.1.6(react@19.1.0)
3148 | optionalDependencies:
3149 | '@next/swc-darwin-arm64': 15.3.2
3150 | '@next/swc-darwin-x64': 15.3.2
3151 | '@next/swc-linux-arm64-gnu': 15.3.2
3152 | '@next/swc-linux-arm64-musl': 15.3.2
3153 | '@next/swc-linux-x64-gnu': 15.3.2
3154 | '@next/swc-linux-x64-musl': 15.3.2
3155 | '@next/swc-win32-arm64-msvc': 15.3.2
3156 | '@next/swc-win32-x64-msvc': 15.3.2
3157 | sharp: 0.34.1
3158 | transitivePeerDependencies:
3159 | - '@babel/core'
3160 | - babel-plugin-macros
3161 |
3162 | object-assign@4.1.1: {}
3163 |
3164 | object-inspect@1.13.4: {}
3165 |
3166 | object-keys@1.1.1: {}
3167 |
3168 | object.assign@4.1.7:
3169 | dependencies:
3170 | call-bind: 1.0.8
3171 | call-bound: 1.0.4
3172 | define-properties: 1.2.1
3173 | es-object-atoms: 1.1.1
3174 | has-symbols: 1.1.0
3175 | object-keys: 1.1.1
3176 |
3177 | object.entries@1.1.9:
3178 | dependencies:
3179 | call-bind: 1.0.8
3180 | call-bound: 1.0.4
3181 | define-properties: 1.2.1
3182 | es-object-atoms: 1.1.1
3183 |
3184 | object.fromentries@2.0.8:
3185 | dependencies:
3186 | call-bind: 1.0.8
3187 | define-properties: 1.2.1
3188 | es-abstract: 1.23.9
3189 | es-object-atoms: 1.1.1
3190 |
3191 | object.groupby@1.0.3:
3192 | dependencies:
3193 | call-bind: 1.0.8
3194 | define-properties: 1.2.1
3195 | es-abstract: 1.23.9
3196 |
3197 | object.values@1.2.1:
3198 | dependencies:
3199 | call-bind: 1.0.8
3200 | call-bound: 1.0.4
3201 | define-properties: 1.2.1
3202 | es-object-atoms: 1.1.1
3203 |
3204 | on-finished@2.4.1:
3205 | dependencies:
3206 | ee-first: 1.1.1
3207 |
3208 | once@1.4.0:
3209 | dependencies:
3210 | wrappy: 1.0.2
3211 |
3212 | optionator@0.9.4:
3213 | dependencies:
3214 | deep-is: 0.1.4
3215 | fast-levenshtein: 2.0.6
3216 | levn: 0.4.1
3217 | prelude-ls: 1.2.1
3218 | type-check: 0.4.0
3219 | word-wrap: 1.2.5
3220 |
3221 | own-keys@1.0.1:
3222 | dependencies:
3223 | get-intrinsic: 1.3.0
3224 | object-keys: 1.1.1
3225 | safe-push-apply: 1.0.0
3226 |
3227 | p-limit@3.1.0:
3228 | dependencies:
3229 | yocto-queue: 0.1.0
3230 |
3231 | p-locate@5.0.0:
3232 | dependencies:
3233 | p-limit: 3.1.0
3234 |
3235 | parent-module@1.0.1:
3236 | dependencies:
3237 | callsites: 3.1.0
3238 |
3239 | parseurl@1.3.3: {}
3240 |
3241 | path-exists@4.0.0: {}
3242 |
3243 | path-key@3.1.1: {}
3244 |
3245 | path-parse@1.0.7: {}
3246 |
3247 | path-to-regexp@8.2.0: {}
3248 |
3249 | picocolors@1.1.1: {}
3250 |
3251 | picomatch@2.3.1: {}
3252 |
3253 | picomatch@4.0.2: {}
3254 |
3255 | pkce-challenge@5.0.0: {}
3256 |
3257 | possible-typed-array-names@1.1.0: {}
3258 |
3259 | postcss@8.4.31:
3260 | dependencies:
3261 | nanoid: 3.3.11
3262 | picocolors: 1.1.1
3263 | source-map-js: 1.2.1
3264 |
3265 | prelude-ls@1.2.1: {}
3266 |
3267 | prop-types@15.8.1:
3268 | dependencies:
3269 | loose-envify: 1.4.0
3270 | object-assign: 4.1.1
3271 | react-is: 16.13.1
3272 |
3273 | proxy-addr@2.0.7:
3274 | dependencies:
3275 | forwarded: 0.2.0
3276 | ipaddr.js: 1.9.1
3277 |
3278 | punycode@2.3.1: {}
3279 |
3280 | qs@6.14.0:
3281 | dependencies:
3282 | side-channel: 1.1.0
3283 |
3284 | queue-microtask@1.2.3: {}
3285 |
3286 | range-parser@1.2.1: {}
3287 |
3288 | raw-body@3.0.0:
3289 | dependencies:
3290 | bytes: 3.1.2
3291 | http-errors: 2.0.0
3292 | iconv-lite: 0.6.3
3293 | unpipe: 1.0.0
3294 |
3295 | react-dom@19.1.0(react@19.1.0):
3296 | dependencies:
3297 | react: 19.1.0
3298 | scheduler: 0.26.0
3299 |
3300 | react-is@16.13.1: {}
3301 |
3302 | react@19.1.0: {}
3303 |
3304 | reflect.getprototypeof@1.0.10:
3305 | dependencies:
3306 | call-bind: 1.0.8
3307 | define-properties: 1.2.1
3308 | es-abstract: 1.23.9
3309 | es-errors: 1.3.0
3310 | es-object-atoms: 1.1.1
3311 | get-intrinsic: 1.3.0
3312 | get-proto: 1.0.1
3313 | which-builtin-type: 1.2.1
3314 |
3315 | regexp.prototype.flags@1.5.4:
3316 | dependencies:
3317 | call-bind: 1.0.8
3318 | define-properties: 1.2.1
3319 | es-errors: 1.3.0
3320 | get-proto: 1.0.1
3321 | gopd: 1.2.0
3322 | set-function-name: 2.0.2
3323 |
3324 | resolve-from@4.0.0: {}
3325 |
3326 | resolve-pkg-maps@1.0.0: {}
3327 |
3328 | resolve@1.22.10:
3329 | dependencies:
3330 | is-core-module: 2.16.1
3331 | path-parse: 1.0.7
3332 | supports-preserve-symlinks-flag: 1.0.0
3333 |
3334 | resolve@2.0.0-next.5:
3335 | dependencies:
3336 | is-core-module: 2.16.1
3337 | path-parse: 1.0.7
3338 | supports-preserve-symlinks-flag: 1.0.0
3339 |
3340 | reusify@1.1.0: {}
3341 |
3342 | router@2.2.0:
3343 | dependencies:
3344 | debug: 4.4.0
3345 | depd: 2.0.0
3346 | is-promise: 4.0.0
3347 | parseurl: 1.3.3
3348 | path-to-regexp: 8.2.0
3349 | transitivePeerDependencies:
3350 | - supports-color
3351 |
3352 | run-parallel@1.2.0:
3353 | dependencies:
3354 | queue-microtask: 1.2.3
3355 |
3356 | safe-array-concat@1.1.3:
3357 | dependencies:
3358 | call-bind: 1.0.8
3359 | call-bound: 1.0.4
3360 | get-intrinsic: 1.3.0
3361 | has-symbols: 1.1.0
3362 | isarray: 2.0.5
3363 |
3364 | safe-buffer@5.2.1: {}
3365 |
3366 | safe-push-apply@1.0.0:
3367 | dependencies:
3368 | es-errors: 1.3.0
3369 | isarray: 2.0.5
3370 |
3371 | safe-regex-test@1.1.0:
3372 | dependencies:
3373 | call-bound: 1.0.4
3374 | es-errors: 1.3.0
3375 | is-regex: 1.2.1
3376 |
3377 | safer-buffer@2.1.2: {}
3378 |
3379 | scheduler@0.26.0: {}
3380 |
3381 | semver@6.3.1: {}
3382 |
3383 | semver@7.7.2: {}
3384 |
3385 | send@1.2.0:
3386 | dependencies:
3387 | debug: 4.4.0
3388 | encodeurl: 2.0.0
3389 | escape-html: 1.0.3
3390 | etag: 1.8.1
3391 | fresh: 2.0.0
3392 | http-errors: 2.0.0
3393 | mime-types: 3.0.1
3394 | ms: 2.1.3
3395 | on-finished: 2.4.1
3396 | range-parser: 1.2.1
3397 | statuses: 2.0.1
3398 | transitivePeerDependencies:
3399 | - supports-color
3400 |
3401 | serve-static@2.2.0:
3402 | dependencies:
3403 | encodeurl: 2.0.0
3404 | escape-html: 1.0.3
3405 | parseurl: 1.3.3
3406 | send: 1.2.0
3407 | transitivePeerDependencies:
3408 | - supports-color
3409 |
3410 | set-function-length@1.2.2:
3411 | dependencies:
3412 | define-data-property: 1.1.4
3413 | es-errors: 1.3.0
3414 | function-bind: 1.1.2
3415 | get-intrinsic: 1.3.0
3416 | gopd: 1.2.0
3417 | has-property-descriptors: 1.0.2
3418 |
3419 | set-function-name@2.0.2:
3420 | dependencies:
3421 | define-data-property: 1.1.4
3422 | es-errors: 1.3.0
3423 | functions-have-names: 1.2.3
3424 | has-property-descriptors: 1.0.2
3425 |
3426 | set-proto@1.0.0:
3427 | dependencies:
3428 | dunder-proto: 1.0.1
3429 | es-errors: 1.3.0
3430 | es-object-atoms: 1.1.1
3431 |
3432 | setprototypeof@1.2.0: {}
3433 |
3434 | sharp@0.34.1:
3435 | dependencies:
3436 | color: 4.2.3
3437 | detect-libc: 2.0.4
3438 | semver: 7.7.2
3439 | optionalDependencies:
3440 | '@img/sharp-darwin-arm64': 0.34.1
3441 | '@img/sharp-darwin-x64': 0.34.1
3442 | '@img/sharp-libvips-darwin-arm64': 1.1.0
3443 | '@img/sharp-libvips-darwin-x64': 1.1.0
3444 | '@img/sharp-libvips-linux-arm': 1.1.0
3445 | '@img/sharp-libvips-linux-arm64': 1.1.0
3446 | '@img/sharp-libvips-linux-ppc64': 1.1.0
3447 | '@img/sharp-libvips-linux-s390x': 1.1.0
3448 | '@img/sharp-libvips-linux-x64': 1.1.0
3449 | '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
3450 | '@img/sharp-libvips-linuxmusl-x64': 1.1.0
3451 | '@img/sharp-linux-arm': 0.34.1
3452 | '@img/sharp-linux-arm64': 0.34.1
3453 | '@img/sharp-linux-s390x': 0.34.1
3454 | '@img/sharp-linux-x64': 0.34.1
3455 | '@img/sharp-linuxmusl-arm64': 0.34.1
3456 | '@img/sharp-linuxmusl-x64': 0.34.1
3457 | '@img/sharp-wasm32': 0.34.1
3458 | '@img/sharp-win32-ia32': 0.34.1
3459 | '@img/sharp-win32-x64': 0.34.1
3460 | optional: true
3461 |
3462 | shebang-command@2.0.0:
3463 | dependencies:
3464 | shebang-regex: 3.0.0
3465 |
3466 | shebang-regex@3.0.0: {}
3467 |
3468 | side-channel-list@1.0.0:
3469 | dependencies:
3470 | es-errors: 1.3.0
3471 | object-inspect: 1.13.4
3472 |
3473 | side-channel-map@1.0.1:
3474 | dependencies:
3475 | call-bound: 1.0.4
3476 | es-errors: 1.3.0
3477 | get-intrinsic: 1.3.0
3478 | object-inspect: 1.13.4
3479 |
3480 | side-channel-weakmap@1.0.2:
3481 | dependencies:
3482 | call-bound: 1.0.4
3483 | es-errors: 1.3.0
3484 | get-intrinsic: 1.3.0
3485 | object-inspect: 1.13.4
3486 | side-channel-map: 1.0.1
3487 |
3488 | side-channel@1.1.0:
3489 | dependencies:
3490 | es-errors: 1.3.0
3491 | object-inspect: 1.13.4
3492 | side-channel-list: 1.0.0
3493 | side-channel-map: 1.0.1
3494 | side-channel-weakmap: 1.0.2
3495 |
3496 | simple-swizzle@0.2.2:
3497 | dependencies:
3498 | is-arrayish: 0.3.2
3499 | optional: true
3500 |
3501 | source-map-js@1.2.1: {}
3502 |
3503 | stable-hash@0.0.5: {}
3504 |
3505 | statuses@2.0.1: {}
3506 |
3507 | streamsearch@1.1.0: {}
3508 |
3509 | string.prototype.includes@2.0.1:
3510 | dependencies:
3511 | call-bind: 1.0.8
3512 | define-properties: 1.2.1
3513 | es-abstract: 1.23.9
3514 |
3515 | string.prototype.matchall@4.0.12:
3516 | dependencies:
3517 | call-bind: 1.0.8
3518 | call-bound: 1.0.4
3519 | define-properties: 1.2.1
3520 | es-abstract: 1.23.9
3521 | es-errors: 1.3.0
3522 | es-object-atoms: 1.1.1
3523 | get-intrinsic: 1.3.0
3524 | gopd: 1.2.0
3525 | has-symbols: 1.1.0
3526 | internal-slot: 1.1.0
3527 | regexp.prototype.flags: 1.5.4
3528 | set-function-name: 2.0.2
3529 | side-channel: 1.1.0
3530 |
3531 | string.prototype.repeat@1.0.0:
3532 | dependencies:
3533 | define-properties: 1.2.1
3534 | es-abstract: 1.23.9
3535 |
3536 | string.prototype.trim@1.2.10:
3537 | dependencies:
3538 | call-bind: 1.0.8
3539 | call-bound: 1.0.4
3540 | define-data-property: 1.1.4
3541 | define-properties: 1.2.1
3542 | es-abstract: 1.23.9
3543 | es-object-atoms: 1.1.1
3544 | has-property-descriptors: 1.0.2
3545 |
3546 | string.prototype.trimend@1.0.9:
3547 | dependencies:
3548 | call-bind: 1.0.8
3549 | call-bound: 1.0.4
3550 | define-properties: 1.2.1
3551 | es-object-atoms: 1.1.1
3552 |
3553 | string.prototype.trimstart@1.0.8:
3554 | dependencies:
3555 | call-bind: 1.0.8
3556 | define-properties: 1.2.1
3557 | es-object-atoms: 1.1.1
3558 |
3559 | strip-bom@3.0.0: {}
3560 |
3561 | strip-json-comments@3.1.1: {}
3562 |
3563 | styled-jsx@5.1.6(react@19.1.0):
3564 | dependencies:
3565 | client-only: 0.0.1
3566 | react: 19.1.0
3567 |
3568 | supports-color@7.2.0:
3569 | dependencies:
3570 | has-flag: 4.0.0
3571 |
3572 | supports-preserve-symlinks-flag@1.0.0: {}
3573 |
3574 | tinyglobby@0.2.13:
3575 | dependencies:
3576 | fdir: 6.4.4(picomatch@4.0.2)
3577 | picomatch: 4.0.2
3578 |
3579 | to-regex-range@5.0.1:
3580 | dependencies:
3581 | is-number: 7.0.0
3582 |
3583 | toidentifier@1.0.1: {}
3584 |
3585 | ts-api-utils@2.1.0(typescript@5.8.3):
3586 | dependencies:
3587 | typescript: 5.8.3
3588 |
3589 | tsconfig-paths@3.15.0:
3590 | dependencies:
3591 | '@types/json5': 0.0.29
3592 | json5: 1.0.2
3593 | minimist: 1.2.8
3594 | strip-bom: 3.0.0
3595 |
3596 | tslib@2.8.1: {}
3597 |
3598 | type-check@0.4.0:
3599 | dependencies:
3600 | prelude-ls: 1.2.1
3601 |
3602 | type-is@2.0.1:
3603 | dependencies:
3604 | content-type: 1.0.5
3605 | media-typer: 1.1.0
3606 | mime-types: 3.0.1
3607 |
3608 | typed-array-buffer@1.0.3:
3609 | dependencies:
3610 | call-bound: 1.0.4
3611 | es-errors: 1.3.0
3612 | is-typed-array: 1.1.15
3613 |
3614 | typed-array-byte-length@1.0.3:
3615 | dependencies:
3616 | call-bind: 1.0.8
3617 | for-each: 0.3.5
3618 | gopd: 1.2.0
3619 | has-proto: 1.2.0
3620 | is-typed-array: 1.1.15
3621 |
3622 | typed-array-byte-offset@1.0.4:
3623 | dependencies:
3624 | available-typed-arrays: 1.0.7
3625 | call-bind: 1.0.8
3626 | for-each: 0.3.5
3627 | gopd: 1.2.0
3628 | has-proto: 1.2.0
3629 | is-typed-array: 1.1.15
3630 | reflect.getprototypeof: 1.0.10
3631 |
3632 | typed-array-length@1.0.7:
3633 | dependencies:
3634 | call-bind: 1.0.8
3635 | for-each: 0.3.5
3636 | gopd: 1.2.0
3637 | is-typed-array: 1.1.15
3638 | possible-typed-array-names: 1.1.0
3639 | reflect.getprototypeof: 1.0.10
3640 |
3641 | typescript@5.8.3: {}
3642 |
3643 | unbox-primitive@1.1.0:
3644 | dependencies:
3645 | call-bound: 1.0.4
3646 | has-bigints: 1.1.0
3647 | has-symbols: 1.1.0
3648 | which-boxed-primitive: 1.1.1
3649 |
3650 | undici-types@6.21.0: {}
3651 |
3652 | unpipe@1.0.0: {}
3653 |
3654 | unrs-resolver@1.7.2:
3655 | dependencies:
3656 | napi-postinstall: 0.2.4
3657 | optionalDependencies:
3658 | '@unrs/resolver-binding-darwin-arm64': 1.7.2
3659 | '@unrs/resolver-binding-darwin-x64': 1.7.2
3660 | '@unrs/resolver-binding-freebsd-x64': 1.7.2
3661 | '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.2
3662 | '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.2
3663 | '@unrs/resolver-binding-linux-arm64-gnu': 1.7.2
3664 | '@unrs/resolver-binding-linux-arm64-musl': 1.7.2
3665 | '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.2
3666 | '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.2
3667 | '@unrs/resolver-binding-linux-riscv64-musl': 1.7.2
3668 | '@unrs/resolver-binding-linux-s390x-gnu': 1.7.2
3669 | '@unrs/resolver-binding-linux-x64-gnu': 1.7.2
3670 | '@unrs/resolver-binding-linux-x64-musl': 1.7.2
3671 | '@unrs/resolver-binding-wasm32-wasi': 1.7.2
3672 | '@unrs/resolver-binding-win32-arm64-msvc': 1.7.2
3673 | '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2
3674 | '@unrs/resolver-binding-win32-x64-msvc': 1.7.2
3675 |
3676 | uri-js@4.4.1:
3677 | dependencies:
3678 | punycode: 2.3.1
3679 |
3680 | vary@1.1.2: {}
3681 |
3682 | which-boxed-primitive@1.1.1:
3683 | dependencies:
3684 | is-bigint: 1.1.0
3685 | is-boolean-object: 1.2.2
3686 | is-number-object: 1.1.1
3687 | is-string: 1.1.1
3688 | is-symbol: 1.1.1
3689 |
3690 | which-builtin-type@1.2.1:
3691 | dependencies:
3692 | call-bound: 1.0.4
3693 | function.prototype.name: 1.1.8
3694 | has-tostringtag: 1.0.2
3695 | is-async-function: 2.1.1
3696 | is-date-object: 1.1.0
3697 | is-finalizationregistry: 1.1.1
3698 | is-generator-function: 1.1.0
3699 | is-regex: 1.2.1
3700 | is-weakref: 1.1.1
3701 | isarray: 2.0.5
3702 | which-boxed-primitive: 1.1.1
3703 | which-collection: 1.0.2
3704 | which-typed-array: 1.1.19
3705 |
3706 | which-collection@1.0.2:
3707 | dependencies:
3708 | is-map: 2.0.3
3709 | is-set: 2.0.3
3710 | is-weakmap: 2.0.2
3711 | is-weakset: 2.0.4
3712 |
3713 | which-typed-array@1.1.19:
3714 | dependencies:
3715 | available-typed-arrays: 1.0.7
3716 | call-bind: 1.0.8
3717 | call-bound: 1.0.4
3718 | for-each: 0.3.5
3719 | get-proto: 1.0.1
3720 | gopd: 1.2.0
3721 | has-tostringtag: 1.0.2
3722 |
3723 | which@2.0.2:
3724 | dependencies:
3725 | isexe: 2.0.0
3726 |
3727 | word-wrap@1.2.5: {}
3728 |
3729 | wrappy@1.0.2: {}
3730 |
3731 | yocto-queue@0.1.0: {}
3732 |
3733 | zod-to-json-schema@3.24.5(zod@3.24.4):
3734 | dependencies:
3735 | zod: 3.24.4
3736 |
3737 | zod@3.24.4: {}
3738 |
--------------------------------------------------------------------------------
/next-app-mock/src/ClientSideScrollRestorer.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 | import {ScrollRestorer} from "../../dist"
3 |
4 | const ClientSideScrollRestorer = () => {
5 | return
6 | }
7 | export default ClientSideScrollRestorer
8 |
--------------------------------------------------------------------------------
/next-app-mock/src/app/globals.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --max-width: 1100px;
3 | --border-radius: 12px;
4 | --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono',
5 | 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro',
6 | 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;
7 |
8 | --foreground-rgb: 0, 0, 0;
9 | --background-start-rgb: 214, 219, 220;
10 | --background-end-rgb: 255, 255, 255;
11 |
12 | --primary-glow: conic-gradient(
13 | from 180deg at 50% 50%,
14 | #16abff33 0deg,
15 | #0885ff33 55deg,
16 | #54d6ff33 120deg,
17 | #0071ff33 160deg,
18 | transparent 360deg
19 | );
20 | --secondary-glow: radial-gradient(
21 | rgba(255, 255, 255, 1),
22 | rgba(255, 255, 255, 0)
23 | );
24 |
25 | --tile-start-rgb: 239, 245, 249;
26 | --tile-end-rgb: 228, 232, 233;
27 | --tile-border: conic-gradient(
28 | #00000080,
29 | #00000040,
30 | #00000030,
31 | #00000020,
32 | #00000010,
33 | #00000010,
34 | #00000080
35 | );
36 |
37 | --callout-rgb: 238, 240, 241;
38 | --callout-border-rgb: 172, 175, 176;
39 | --card-rgb: 180, 185, 188;
40 | --card-border-rgb: 131, 134, 135;
41 | }
42 |
43 | @media (prefers-color-scheme: dark) {
44 | :root {
45 | --foreground-rgb: 255, 255, 255;
46 | --background-start-rgb: 0, 0, 0;
47 | --background-end-rgb: 0, 0, 0;
48 |
49 | --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));
50 | --secondary-glow: linear-gradient(
51 | to bottom right,
52 | rgba(1, 65, 255, 0),
53 | rgba(1, 65, 255, 0),
54 | rgba(1, 65, 255, 0.3)
55 | );
56 |
57 | --tile-start-rgb: 2, 13, 46;
58 | --tile-end-rgb: 2, 5, 19;
59 | --tile-border: conic-gradient(
60 | #ffffff80,
61 | #ffffff40,
62 | #ffffff30,
63 | #ffffff20,
64 | #ffffff10,
65 | #ffffff10,
66 | #ffffff80
67 | );
68 |
69 | --callout-rgb: 20, 20, 20;
70 | --callout-border-rgb: 108, 108, 108;
71 | --card-rgb: 100, 100, 100;
72 | --card-border-rgb: 200, 200, 200;
73 | }
74 | }
75 |
76 | * {
77 | box-sizing: border-box;
78 | padding: 0;
79 | margin: 0;
80 | }
81 |
82 | html,
83 | body {
84 | max-width: 100vw;
85 | overflow-x: hidden;
86 | }
87 |
88 | body {
89 | color: rgb(var(--foreground-rgb));
90 | background: linear-gradient(
91 | to bottom,
92 | transparent,
93 | rgb(var(--background-end-rgb))
94 | )
95 | rgb(var(--background-start-rgb));
96 | }
97 |
98 | a {
99 | color: inherit;
100 | text-decoration: none;
101 | }
102 |
103 | @media (prefers-color-scheme: dark) {
104 | html {
105 | color-scheme: dark;
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/next-app-mock/src/app/high-with-loading/SomeClient.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 | import { useEffect, useState } from "react"
3 | import { clearInterval } from "timers"
4 |
5 | const SomeClient = ()=>{
6 | const [i,setI] = useState(0)
7 | useEffect(()=>{
8 | const interval = setInterval(()=>{
9 | setI(p=>p+1)
10 | },1000)
11 | return ()=>{
12 | clearInterval(interval)
13 | }
14 | },[])
15 | return
16 | ddd {i}
17 |
18 |
19 | }
20 | export default SomeClient
--------------------------------------------------------------------------------
/next-app-mock/src/app/high-with-loading/loading.tsx:
--------------------------------------------------------------------------------
1 |
2 | import Link from 'next/link'
3 | const Loading = ()=>{
4 | return
5 |
8 | dsfsdfds
9 |
10 |
11 | Lets-go to main
12 |
13 |
14 | }
15 | export default Loading
--------------------------------------------------------------------------------
/next-app-mock/src/app/high-with-loading/page.tsx:
--------------------------------------------------------------------------------
1 | import Link from 'next/link'
2 | import { connection } from 'next/server'
3 | import { Suspense } from 'react'
4 | import SomeClient from './SomeClient'
5 | function delay(ms:number) {
6 | return new Promise((resolve) => {
7 | setTimeout(resolve, ms);
8 | });
9 | }
10 | const Page = async ()=>{
11 | await connection()
12 | await delay(1000)
13 | return
14 |
17 | dsfsdfds
18 |
19 |
20 | Lets-go to main
21 |
22 |
23 |
24 |
25 |
26 | }
27 | export default Page
28 |
--------------------------------------------------------------------------------
/next-app-mock/src/app/high/page.tsx:
--------------------------------------------------------------------------------
1 | import Link from 'next/link'
2 | const Page = ()=>{
3 | return
4 |
7 | dsfsdfds
8 |
9 |
10 | Lets-go to main
11 |
12 |
13 | }
14 | export default Page
15 |
--------------------------------------------------------------------------------
/next-app-mock/src/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import ClientSideScrollRestorer from "@/ClientSideScrollRestorer"
2 | import type {Metadata} from 'next'
3 | import {Inter} from 'next/font/google'
4 | import './globals.css'
5 | import {FunctionComponent, ReactNode, Suspense} from "react"
6 |
7 | const inter = Inter({subsets: ['latin']})
8 |
9 | export const metadata: Metadata = {
10 | title: 'Create Next App',
11 | description: 'Generated by create next app',
12 | }
13 | const RootLayout: FunctionComponent<{
14 | children: ReactNode
15 | }> = ({children}) => {
16 | return (
17 |
18 |
19 |
20 |
21 |
22 | {children}
23 |
24 |
25 | )
26 | }
27 | export default RootLayout
28 |
--------------------------------------------------------------------------------
/next-app-mock/src/app/low-page/page.tsx:
--------------------------------------------------------------------------------
1 | const LowPage = ()=>{
2 | return
3 | This is the low page
4 |
5 | }
6 | export default LowPage
7 |
--------------------------------------------------------------------------------
/next-app-mock/src/app/page.module.css:
--------------------------------------------------------------------------------
1 | .main {
2 | display: flex;
3 | flex-direction: column;
4 | justify-content: space-between;
5 | align-items: center;
6 | padding: 6rem;
7 | min-height: 100vh;
8 | }
9 |
10 | .description {
11 | display: inherit;
12 | justify-content: inherit;
13 | align-items: inherit;
14 | font-size: 0.85rem;
15 | max-width: var(--max-width);
16 | width: 100%;
17 | z-index: 2;
18 | font-family: var(--font-mono);
19 | }
20 |
21 | .description a {
22 | display: flex;
23 | justify-content: center;
24 | align-items: center;
25 | gap: 0.5rem;
26 | }
27 |
28 | .description p {
29 | position: relative;
30 | margin: 0;
31 | padding: 1rem;
32 | background-color: rgba(var(--callout-rgb), 0.5);
33 | border: 1px solid rgba(var(--callout-border-rgb), 0.3);
34 | border-radius: var(--border-radius);
35 | }
36 |
37 | .code {
38 | font-weight: 700;
39 | font-family: var(--font-mono);
40 | }
41 |
42 | .grid {
43 | display: grid;
44 | grid-template-columns: repeat(4, minmax(25%, auto));
45 | max-width: 100%;
46 | width: var(--max-width);
47 | }
48 |
49 | .card {
50 | padding: 1rem 1.2rem;
51 | border-radius: var(--border-radius);
52 | background: rgba(var(--card-rgb), 0);
53 | border: 1px solid rgba(var(--card-border-rgb), 0);
54 | transition: background 200ms, border 200ms;
55 | }
56 |
57 | .card span {
58 | display: inline-block;
59 | transition: transform 200ms;
60 | }
61 |
62 | .card h2 {
63 | font-weight: 600;
64 | margin-bottom: 0.7rem;
65 | }
66 |
67 | .card p {
68 | margin: 0;
69 | opacity: 0.6;
70 | font-size: 0.9rem;
71 | line-height: 1.5;
72 | max-width: 30ch;
73 | }
74 |
75 | .center {
76 | display: flex;
77 | justify-content: center;
78 | align-items: center;
79 | position: relative;
80 | padding: 4rem 0;
81 | }
82 |
83 | .center::before {
84 | background: var(--secondary-glow);
85 | border-radius: 50%;
86 | width: 480px;
87 | height: 360px;
88 | margin-left: -400px;
89 | }
90 |
91 | .center::after {
92 | background: var(--primary-glow);
93 | width: 240px;
94 | height: 180px;
95 | z-index: -1;
96 | }
97 |
98 | .center::before,
99 | .center::after {
100 | content: '';
101 | left: 50%;
102 | position: absolute;
103 | filter: blur(45px);
104 | transform: translateZ(0);
105 | }
106 |
107 | .logo {
108 | position: relative;
109 | }
110 | /* Enable hover only on non-touch devices */
111 | @media (hover: hover) and (pointer: fine) {
112 | .card:hover {
113 | background: rgba(var(--card-rgb), 0.1);
114 | border: 1px solid rgba(var(--card-border-rgb), 0.15);
115 | }
116 |
117 | .card:hover span {
118 | transform: translateX(4px);
119 | }
120 | }
121 |
122 | @media (prefers-reduced-motion) {
123 | .card:hover span {
124 | transform: none;
125 | }
126 | }
127 |
128 | /* Mobile */
129 | @media (max-width: 700px) {
130 | .content {
131 | padding: 4rem;
132 | }
133 |
134 | .grid {
135 | grid-template-columns: 1fr;
136 | margin-bottom: 120px;
137 | max-width: 320px;
138 | text-align: center;
139 | }
140 |
141 | .card {
142 | padding: 1rem 2.5rem;
143 | }
144 |
145 | .card h2 {
146 | margin-bottom: 0.5rem;
147 | }
148 |
149 | .center {
150 | padding: 8rem 0 6rem;
151 | }
152 |
153 | .center::before {
154 | transform: none;
155 | height: 300px;
156 | }
157 |
158 | .description {
159 | font-size: 0.8rem;
160 | }
161 |
162 | .description a {
163 | padding: 1rem;
164 | }
165 |
166 | .description p,
167 | .description div {
168 | display: flex;
169 | justify-content: center;
170 | position: fixed;
171 | width: 100%;
172 | }
173 |
174 | .description p {
175 | align-items: center;
176 | inset: 0 0 auto;
177 | padding: 2rem 1rem 1.4rem;
178 | border-radius: 0;
179 | border: none;
180 | border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
181 | background: linear-gradient(
182 | to bottom,
183 | rgba(var(--background-start-rgb), 1),
184 | rgba(var(--callout-rgb), 0.5)
185 | );
186 | background-clip: padding-box;
187 | backdrop-filter: blur(24px);
188 | }
189 |
190 | .description div {
191 | align-items: flex-end;
192 | pointer-events: none;
193 | inset: auto 0 0;
194 | padding: 2rem;
195 | height: 200px;
196 | background: linear-gradient(
197 | to bottom,
198 | transparent 0%,
199 | rgb(var(--background-end-rgb)) 40%
200 | );
201 | z-index: 1;
202 | }
203 | }
204 |
205 | /* Tablet and Smaller Desktop */
206 | @media (min-width: 701px) and (max-width: 1120px) {
207 | .grid {
208 | grid-template-columns: repeat(2, 50%);
209 | }
210 | }
211 |
212 | @media (prefers-color-scheme: dark) {
213 | .vercelLogo {
214 | filter: invert(1);
215 | }
216 |
217 | .logo {
218 | filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
219 | }
220 | }
221 |
222 | @keyframes rotate {
223 | from {
224 | transform: rotate(360deg);
225 | }
226 | to {
227 | transform: rotate(0deg);
228 | }
229 | }
230 |
--------------------------------------------------------------------------------
/next-app-mock/src/app/page.tsx:
--------------------------------------------------------------------------------
1 | import Link from 'next/link'
2 | const Page = ()=>{
3 | return
4 |
7 | dsfsdfds
8 |
9 |
10 | Lets-go to low-page
11 |
12 |
13 | Lets-go without scroll
14 |
15 |
16 | }
17 | export default Page
18 |
--------------------------------------------------------------------------------
/next-app-mock/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "noEmit": true,
9 | "esModuleInterop": true,
10 | "module": "esnext",
11 | "moduleResolution": "bundler",
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "jsx": "preserve",
15 | "incremental": true,
16 | "plugins": [
17 | {
18 | "name": "next"
19 | }
20 | ],
21 | "paths": {
22 | "@/*": ["./src/*"]
23 | }
24 | },
25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
26 | "exclude": ["node_modules"]
27 | }
28 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": {
3 | "name": "l-you",
4 | "email": "l-you@revotale.com",
5 | "url": "https://github.com/l-you"
6 | },
7 | "version": "0.10.1",
8 | "name": "next-scroll-restorer",
9 | "main": "src/index.ts",
10 | "license": "MIT",
11 | "private": false,
12 | "sideEffects": false,
13 | "publishConfig": {
14 | "provenance": true,
15 | "access": "public",
16 | "main": "index.js",
17 | "directory": "dist",
18 | "exports": {
19 | "./package.json": "./package.json",
20 | ".": {
21 | "import": "./index.js",
22 | "require": "./index.cjs",
23 | "types": "./index.d.ts"
24 | }
25 | }
26 | },
27 | "repository": {
28 | "type": "git",
29 | "url": "git+https://github.com/RevoTale/next-scroll-restorer.git"
30 | },
31 | "type": "module",
32 | "scripts": {
33 | "build": "tsup && cp package.json README.md LICENSE dist/",
34 | "tsc": "tsc --noEmit",
35 | "changeset:version": "changeset version && git add --all",
36 | "changeset:publish": "changeset publish",
37 | "prepare": "pnpm build",
38 | "test": "pnpm lint && pnpm tsc && pnpm unit",
39 | "unit": "playwright test",
40 | "lint": "eslint .",
41 | "lint:fix": "eslint --fix ."
42 | },
43 | "bugs": {
44 | "url": "https://github.com/RevoTale/next-scroll-restorer/issues"
45 | },
46 | "devDependencies": {
47 | "@changesets/cli": "^2.29.4",
48 | "@playwright/test": "^1.52.0",
49 | "@swc/core": "^1.11.29",
50 | "@types/node": "^22.15.19",
51 | "@types/react": "^19.1.4",
52 | "changeset": "^0.2.6",
53 | "eslint": "^9.26.0",
54 | "eslint-config-love": "^120.0.0",
55 | "tsup": "^8.4.0",
56 | "typescript": "^5.8.3"
57 | },
58 | "peerDependencies": {
59 | "next": "^15.0",
60 | "react": "^19.0"
61 | },
62 | "packageManager": "pnpm@10.10.0"
63 | }
64 |
--------------------------------------------------------------------------------
/playwright.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig, devices } from '@playwright/test'
2 |
3 | /**
4 | * Read environment variables from file.
5 | * https://github.com/motdotla/dotenv
6 | */
7 | // require('dotenv').config();
8 |
9 | /**
10 | * See https://playwright.dev/docs/test-configuration.
11 | */
12 | const port = Number(process.env.PORT)||3033
13 | export default defineConfig({
14 | webServer: {
15 | command: `pnpm -C ./next-app-mock build && pnpm -C ./next-app-mock start --port ${port}`,
16 | port: port
17 | },
18 | use: {
19 | baseURL: `http://127.0.0.1:${port}`,
20 | trace: 'on-first-retry',
21 | },
22 | testDir: './__tests__',
23 | /* Run tests in files in parallel */
24 | fullyParallel: true,
25 | /* Fail the build on CI if you accidentally left test.only in the source code. */
26 | forbidOnly: !!process.env.CI,
27 | /* Retry on CI only */
28 | retries: process.env.CI ? 2 : 0,
29 | /* Reporter to use. See https://playwright.dev/docs/test-reporters */
30 | reporter: [ ['html', { open: 'never' }] ],
31 | /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
32 |
33 |
34 | /* Configure projects for major browsers */
35 | projects: [
36 | {
37 | name: 'chromium',
38 | use: { ...devices['Desktop Chrome'] },
39 | },
40 |
41 | {
42 | name: 'firefox',
43 | use: { ...devices['Desktop Firefox'] },
44 | },
45 |
46 | {
47 | name: 'webkit',
48 | use: { ...devices['Desktop Safari'] },
49 | },
50 | ],
51 | })
52 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | onlyBuiltDependencies:
2 | - '@swc/core'
3 | - esbuild
4 | - sharp
5 |
--------------------------------------------------------------------------------
/src/ScrollRestorer.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 | import type { FunctionComponent } from "react"
3 | import useScrollRestorer from "./useScrollRestorer"
4 |
5 | const ScrollRestoration:FunctionComponent = () => {
6 | useScrollRestorer()
7 | return <>>
8 | }
9 | export default ScrollRestoration
10 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import ScrollRestorer from "./ScrollRestorer"
2 | import useScrollRestorer from "./useScrollRestorer"
3 | export {ScrollRestorer,useScrollRestorer}
4 |
--------------------------------------------------------------------------------
/src/storage.ts:
--------------------------------------------------------------------------------
1 | import { isRecord } from "./util"
2 |
3 | export type ScrollPos = [number, number]
4 | const uniq = 'revotale_nextjs_scroll_restoration'
5 | type HistoryKeys = 'x' | 'y'| 'memo_timestamp' | 'is_navigating_history' | 'popstate_timestamp'
6 |
7 | export const getKey = (pos:HistoryKeys ):string => `${uniq}_${pos}`
8 | export type HistoryState = Record | null
9 | const defaultX = 0
10 | const defaultY = 0
11 | export const setCurrentScrollHistory = ( [x, y]: ScrollPos):void => {
12 | x = Math.max(x, defaultX)
13 | y = Math.max(y, defaultY) //Sometime browsers make negative scroll
14 | const winState = window.history.state as unknown
15 |
16 | const newState: HistoryState = (isRecord(winState)?winState:null) ?? {}
17 | window.history.replaceState({
18 | ...newState,
19 | [getKey('x')]: x,
20 | [getKey('y')]: y,
21 | [getKey('memo_timestamp')]:(new Date()).getTime()
22 | }, '')
23 | }
24 | const retrieveNum = (name: HistoryKeys,state:HistoryState):number|null => {
25 |
26 | if (state === null) {
27 | return null
28 | }
29 | const key = getKey(name)
30 | const {[key]:value} = state
31 | if (value === null) {
32 | return null
33 | }
34 | const num = Number(value)
35 | return isNaN(num) ? null : num
36 | }
37 | export const getScrollFromState = (state: HistoryState): ScrollPos | null => {
38 |
39 |
40 | const x = retrieveNum('x',state)
41 | const y = retrieveNum('y',state)
42 | return x !== null && y !== null ? [x, y] : null
43 | }
44 | export const getScrollTimestamp = (state: HistoryState):number|null=>retrieveNum('memo_timestamp',state)
45 | export const getPopstateTimestamp = (state: HistoryState):number|null=>retrieveNum('popstate_timestamp',state)
46 | export const getIsNavigatingHistory = (state: HistoryState):boolean=>state !== null?Boolean(state[getKey('is_navigating_history')]):false
47 |
--------------------------------------------------------------------------------
/src/useScrollRestorer.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-console -- console required for debugging. Its dropped with bundler on production. */
2 | import {usePathname, useSearchParams} from "next/navigation"
3 | import {useEffect, useLayoutEffect, useRef,} from "react"
4 | import {
5 | getIsNavigatingHistory, getKey, getPopstateTimestamp,
6 | getScrollFromState,
7 | getScrollTimestamp,
8 | type HistoryState,
9 | type ScrollPos,
10 | setCurrentScrollHistory
11 | } from "./storage"
12 | import { isRecord } from "./util"
13 |
14 | const getWindowScroll = (): ScrollPos => [window.scrollX, window.scrollY]
15 | const memoizationIntervalLimit = 601//100 times per 30 seconds
16 | const safariBugWorkaroundTimeThreshold = 2000 //Safari reset scroll position to 0 0 after popstate for some reason.
17 |
18 | const getState = ():HistoryState => {
19 | const state = window.history.state as unknown
20 | return isRecord(state)?state:null
21 | }
22 | const restoreScrollFromState = (state: HistoryState):void => {
23 | const scroll = getScrollFromState(state)
24 | console.log(`Found scroll ${scroll?.toString()}. ${window.location.href}`)
25 | if (scroll !== null) {
26 | const [x, y] = scroll
27 | console.log(`Scroll restored to ${x} ${y}. Document height ${window.document.body.clientHeight}.`)
28 | window.scrollTo({
29 | behavior: 'instant',
30 | left: x,
31 | top: y
32 | })
33 | console.log(`Scroll is ${window.scrollX} ${window.scrollY} after restoring. ${window.innerHeight}`)
34 | }
35 | }
36 | const scrollMemoIntervalCountLimit = 2
37 | const restoreCurrentScrollPosition = ():void => {
38 | console.log(`Restoring current scroll position. ${window.location.href}`)
39 | restoreScrollFromState(getState())
40 | }
41 | const defaultMemoInterval = 0
42 | const numericTrue = 1
43 | const defaultX = 0
44 | const defaultY = 0
45 | const useScrollRestorer = (): void => {
46 | const pathname = usePathname()
47 | const searchparams = useSearchParams()
48 |
49 |
50 | useLayoutEffect(() => {
51 | console.log('Restoring based on hooks.')
52 | restoreCurrentScrollPosition()
53 | }, [pathname, searchparams])
54 | const scrollMemoTimeoutRef = useRef>(undefined)
55 | const scrollMemoCountInInterval = useRef(defaultMemoInterval)//Used to workaround instant scrollTo() calls.It's used to work around immediate scroll in tests and possible real world behaviour.
56 | const isSafariWorkaroundAllowedRef = useRef(false)
57 | useEffect(() => {
58 | window.history.scrollRestoration = 'manual'
59 |
60 | const navigationListener = ({state:eState}: PopStateEvent):void => {
61 | console.log('Popstate started.')
62 | cancelDelayedScrollMemoization()
63 |
64 | isSafariWorkaroundAllowedRef.current = true
65 | const state = (isRecord(eState)?eState:null) ?? {}
66 | window.history.replaceState({
67 | ...state,
68 | [getKey('is_navigating_history')]: numericTrue,
69 | [getKey('popstate_timestamp')]: (new Date()).getTime()
70 | }, '')
71 | }
72 |
73 |
74 | /**
75 | * This is important to run as late as possible after navigation.
76 | * We could use something like `setTimeout(restoreCurrentScroll,500)`, but this is not a reactive approach.
77 | * useLayoutEffect + usePageHref hook is the latest reactive thing Next.js app can provide to use.
78 | * In Safari even with `window.history.scrollRestoration = 'manual'` scroll position is reset.
79 | */
80 | const workaroundSafariBreaksScrollRestoration = ([x, y]: ScrollPos):boolean => {
81 | const state = getState()
82 |
83 |
84 | // Sometimes Safari scroll to the start because of unique behavior We restore it back.
85 | // This case cannot be tested with Playwright, or any other testing library.
86 | if ((x === defaultX && y === defaultY) && isSafariWorkaroundAllowedRef.current) {
87 | const isWorkaroundAllowed = (() => {
88 | const timeNavigated = getPopstateTimestamp(state)
89 | if (timeNavigated === null) {
90 | return false
91 | }
92 | return (((new Date()).getTime() - timeNavigated) < safariBugWorkaroundTimeThreshold)
93 | })() //Place here to prevent many computations
94 | const isNavHistory = getIsNavigatingHistory(state)
95 | console.log(`Check workaround for safari: ${x} ${y} ${isWorkaroundAllowed}. Is popstate ${isNavHistory}. ${window.location.href}`)
96 | if (isWorkaroundAllowed && isNavHistory) {
97 | console.log(`Reverting back scroll because browser tried to brake it..`)
98 | restoreCurrentScrollPosition()
99 | isSafariWorkaroundAllowedRef.current = false //Safari bug appears only once
100 | return true
101 | }
102 | }
103 |
104 | return false
105 | }
106 | const rememberScrollPosition = (pos: ScrollPos):void => {
107 | // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- it's stale index
108 | console.log(`Remember history scroll to ${pos[0]} ${pos[1]}. Href ${window.location.href}.`)
109 | cancelDelayedScrollMemoization()
110 | setCurrentScrollHistory(pos)
111 | }
112 | const unmountNavigationListener = () :void=> {
113 | console.log('Unmount popstate.')
114 |
115 | window.removeEventListener('popstate', navigationListener)
116 | }
117 | const mountNavigationListener = ():void => {
118 | console.log('Mount popstate.')
119 |
120 | window.addEventListener('popstate', navigationListener, {
121 | passive: true
122 | })
123 | }
124 |
125 | const cancelDelayedScrollMemoization = ():void => {
126 | if (scrollMemoTimeoutRef.current !== undefined) {
127 | console.log(`Cancelled delayed memoization.`)
128 | clearTimeout(scrollMemoTimeoutRef.current)
129 | scrollMemoTimeoutRef.current = undefined
130 | }
131 |
132 | }
133 |
134 | const scrollMemoizationHandler = (pos: ScrollPos):void => {
135 | const isScrollMemoAllowedNow = ():boolean => {
136 | const timestamp = getScrollTimestamp(getState())
137 | if (timestamp === null) {
138 | return true
139 | }
140 | return (new Date()).getTime() - timestamp > memoizationIntervalLimit
141 | }
142 |
143 | const isAllowedNow = isScrollMemoAllowedNow()
144 | console.log(`Handle scroll event. Memo allowed: ${isAllowedNow}.`)
145 | if (isAllowedNow) {
146 | scrollMemoCountInInterval.current = defaultMemoInterval
147 | }
148 | if (isAllowedNow || scrollMemoCountInInterval.current < scrollMemoIntervalCountLimit) {
149 | scrollMemoCountInInterval.current++
150 | rememberScrollPosition(pos)
151 | } else {
152 | console.log(`Scroll memoization is not allowed. ${window.location.href}`)
153 | if (scrollMemoTimeoutRef.current === undefined) {
154 | // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- it's just a fixed index
155 | console.log(`Set delayed memoization ${pos[0]} ${pos[1]}`)
156 | scrollMemoTimeoutRef.current = setTimeout(() => {
157 | rememberScrollPosition(pos)
158 | scrollMemoCountInInterval.current = defaultMemoInterval
159 | scrollMemoTimeoutRef.current = undefined
160 | }, memoizationIntervalLimit)
161 | }
162 |
163 | }
164 | }
165 | const scrollListener = ():void => {
166 | cancelDelayedScrollMemoization()
167 | const scroll = getWindowScroll()
168 |
169 | console.log(`Scroll event ${scroll.toString()}. ${window.location.href}`)
170 | workaroundSafariBreaksScrollRestoration(scroll)
171 |
172 | scrollMemoizationHandler(scroll)
173 |
174 |
175 | }
176 | const mountScrollListener = () :void=> {
177 | console.log('Scroll listener mounted.')
178 | window.addEventListener('scroll', scrollListener, {
179 | passive: true
180 | })
181 | }
182 | const unmountScrollListener = ():void => {
183 | console.log('Scroll listener unmounted.')
184 | window.removeEventListener('scroll', scrollListener)
185 |
186 | }
187 | mountNavigationListener()
188 | mountScrollListener()
189 | return () => {
190 | unmountNavigationListener()
191 | unmountScrollListener()
192 | cancelDelayedScrollMemoization()
193 | }
194 | }, [])
195 | }
196 | export default useScrollRestorer
197 |
--------------------------------------------------------------------------------
/src/util.ts:
--------------------------------------------------------------------------------
1 | function isRecord(value: unknown): value is Record {
2 | return (
3 | typeof value === 'object' &&
4 | value !== null &&
5 | !Array.isArray(value)
6 | );
7 | }
8 | export {isRecord}
--------------------------------------------------------------------------------
/tsconfig.eslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "esnext",
4 | "jsx": "react-jsx",
5 | "target": "ESNext",
6 | "lib": ["es6", "es7", "esnext", "dom"],
7 | "moduleResolution": "node",
8 | "noImplicitReturns": true,
9 | "strict": true,
10 | "strictFunctionTypes": true,
11 | "noUnusedLocals": true,
12 | "pretty": true,
13 | "allowSyntheticDefaultImports": true,
14 | "esModuleInterop": true,
15 | "downlevelIteration": true,
16 | "skipLibCheck": true,
17 | "listEmittedFiles": true,
18 | "allowJs": false,
19 | "declaration": true,
20 | "forceConsistentCasingInFileNames": true,
21 | "noImplicitAny": true,
22 | "alwaysStrict": true,
23 | "noImplicitThis": true,
24 | "noUnusedParameters": true,
25 | "noFallthroughCasesInSwitch": true,
26 | "resolveJsonModule": true,
27 | "isolatedModules": true,
28 | "outDir": "dist",
29 | "noEmit": false,
30 | "emitDeclarationOnly": false,
31 | },
32 | "include": ["./","./__tests__/**.spec.ts"],
33 | "exclude": ["next-app-mock/next.config.js"]
34 | }
35 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "esnext",
4 | "jsx": "react-jsx",
5 | "target": "ESNext",
6 | "lib": ["es6", "es7", "esnext", "dom"],
7 | "moduleResolution": "node",
8 | "noImplicitReturns": true,
9 | "strict": true,
10 | "strictFunctionTypes": true,
11 | "noUnusedLocals": true,
12 | "pretty": true,
13 | "allowSyntheticDefaultImports": true,
14 | "esModuleInterop": true,
15 | "downlevelIteration": true,
16 | "skipLibCheck": true,
17 | "listEmittedFiles": true,
18 | "allowJs": false,
19 | "declaration": true,
20 | "forceConsistentCasingInFileNames": true,
21 | "noImplicitAny": true,
22 | "alwaysStrict": true,
23 | "noImplicitThis": true,
24 | "noUnusedParameters": true,
25 | "noFallthroughCasesInSwitch": true,
26 | "resolveJsonModule": true,
27 | "isolatedModules": true,
28 | "outDir": "dist",
29 | "noEmit": false,
30 | "emitDeclarationOnly": false,
31 | },
32 | "include": ["src"]
33 | }
34 |
--------------------------------------------------------------------------------
/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | entry: ['src/**/*'],
5 | sourcemap: true,
6 | clean: true,
7 | format: ['cjs', 'esm'],
8 | dts: true,
9 | bundle: false,
10 | pure:"console.log"
11 | })
--------------------------------------------------------------------------------