From 55c690d10ac0d79232ce606c85d78e956197231a Mon Sep 17 00:00:00 2001 From: LouisBrunner Date: Fri, 20 Dec 2024 00:04:57 +0000 Subject: [PATCH] deploy: 5bd6963a928b58ed7bd6fa0507059f89f24e6157 --- .gitattributes | 1 + .gitignore | 16 + .jest-setup.ts | 3 + .npmignore | 22 + LICENSE | 21 + README.md | 33 + __mocks__/mocks.ts | 62 + __mocks__/pipeline.ts | 50 + __mocks__/react-dnd-preview.ts | 34 + __mocks__/react-dnd.ts | 17 + babel.config.json | 3 + biome.json | 29 + esbuild/build.js | 13 + esbuild/common.js | 30 + esbuild/config.js | 10 + esbuild/dev.js | 15 + esbuild/examples.js | 7 + esbuild/publish.js | 70 + esbuild/run-all.js | 19 + examples/dnd-multi-backend.html | 12 + examples/examples_dnd-multi-backend.min.js | 5 + .../examples_react-dnd-multi-backend.min.js | 71 + .../examples_react-dnd-preview_main.min.js | 66 + .../examples_react-dnd-preview_offset.min.js | 66 + examples/index.html | 15 + examples/react-dnd-multi-backend.html | 13 + examples/react-dnd-preview.html | 11 + examples/react-dnd-preview_offset.html | 11 + jest.config.js | 30 + package-lock.json | 11409 ++++++++++++++++ package.json | 60 + packages/dnd-multi-backend/.npmignore | 10 + packages/dnd-multi-backend/README.md | 149 + .../dnd-multi-backend/examples/Backends.ts | 150 + packages/dnd-multi-backend/examples/DnD.ts | 68 + packages/dnd-multi-backend/examples/index.ts | 48 + packages/dnd-multi-backend/package.json | 26 + .../dnd-multi-backend/src/MultiBackendImpl.ts | 227 + .../dnd-multi-backend/src/MultiFactory.ts | 7 + .../dnd-multi-backend/src/PreviewListImpl.ts | 25 + .../src/__tests__/MultiBackendImpl.test.ts | 427 + .../src/__tests__/MultiFactory.test.ts | 20 + .../src/__tests__/PreviewListImpl.test.ts | 52 + .../src/__tests__/createTransition.test.ts | 18 + .../src/__tests__/index.test.ts | 15 + .../src/__tests__/transitions.test.ts | 99 + .../dnd-multi-backend/src/createTransition.ts | 8 + packages/dnd-multi-backend/src/index.ts | 24 + packages/dnd-multi-backend/src/transitions.ts | 19 + packages/dnd-multi-backend/src/types.ts | 30 + packages/dnd-multi-backend/tsconfig.json | 4 + packages/rdndmb-html5-to-touch/.npmignore | 10 + packages/rdndmb-html5-to-touch/README.md | 69 + packages/rdndmb-html5-to-touch/package.json | 28 + .../src/__tests__/index.test.ts | 23 + packages/rdndmb-html5-to-touch/src/index.ts | 21 + packages/rdndmb-html5-to-touch/tsconfig.json | 7 + packages/react-dnd-multi-backend/.npmignore | 10 + packages/react-dnd-multi-backend/README.md | 411 + .../react-dnd-multi-backend/examples/App.tsx | 119 + .../examples/Basket.tsx | 35 + .../react-dnd-multi-backend/examples/Card.tsx | 27 + .../examples/MultiBasket.tsx | 64 + .../examples/MultiCard.tsx | 58 + .../examples/common.ts | 16 + .../examples/index.tsx | 9 + packages/react-dnd-multi-backend/package.json | 33 + .../src/__tests__/index.test.ts | 25 + .../src/components/DndProvider.tsx | 25 + .../src/components/Preview.tsx | 24 + .../components/__tests__/DndProvider.test.tsx | 59 + .../src/components/__tests__/Preview.test.tsx | 138 + .../src/hooks/__tests__/useMultiDrag.test.tsx | 43 + .../src/hooks/__tests__/useMultiDrop.test.tsx | 46 + .../src/hooks/__tests__/usePreview.test.tsx | 101 + .../src/hooks/index.ts | 3 + .../src/hooks/useMultiCommon.ts | 35 + .../src/hooks/useMultiDrag.ts | 10 + .../src/hooks/useMultiDrop.ts | 10 + .../src/hooks/useObservePreviews.ts | 27 + .../src/hooks/usePreview.ts | 14 + packages/react-dnd-multi-backend/src/index.ts | 5 + .../react-dnd-multi-backend/tsconfig.json | 7 + packages/react-dnd-preview/.npmignore | 10 + packages/react-dnd-preview/README.md | 137 + .../react-dnd-preview/examples/main/App.tsx | 18 + .../react-dnd-preview/examples/main/index.tsx | 9 + .../examples/main/methods/Components.tsx | 30 + .../examples/main/methods/Hooks.tsx | 21 + .../examples/main/methods/common.tsx | 64 + .../react-dnd-preview/examples/offset/App.tsx | 124 + .../examples/offset/index.tsx | 9 + .../react-dnd-preview/examples/shared.tsx | 48 + packages/react-dnd-preview/package.json | 27 + packages/react-dnd-preview/src/Context.ts | 6 + packages/react-dnd-preview/src/Preview.tsx | 42 + .../src/__mocks__/usePreview.ts | 11 + .../src/__tests__/Preview.test.tsx | 113 + .../src/__tests__/index.test.ts | 13 + .../src/__tests__/usePreview.test.ts | 305 + packages/react-dnd-preview/src/index.ts | 7 + packages/react-dnd-preview/src/offsets.ts | 88 + packages/react-dnd-preview/src/usePreview.ts | 59 + packages/react-dnd-preview/tsconfig.json | 4 + tsconfig.build.json | 8 + tsconfig.json | 30 + 106 files changed, 16345 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .jest-setup.ts create mode 100644 .npmignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 __mocks__/mocks.ts create mode 100644 __mocks__/pipeline.ts create mode 100644 __mocks__/react-dnd-preview.ts create mode 100644 __mocks__/react-dnd.ts create mode 100644 babel.config.json create mode 100644 biome.json create mode 100644 esbuild/build.js create mode 100644 esbuild/common.js create mode 100644 esbuild/config.js create mode 100644 esbuild/dev.js create mode 100644 esbuild/examples.js create mode 100644 esbuild/publish.js create mode 100644 esbuild/run-all.js create mode 100644 examples/dnd-multi-backend.html create mode 100644 examples/examples_dnd-multi-backend.min.js create mode 100644 examples/examples_react-dnd-multi-backend.min.js create mode 100644 examples/examples_react-dnd-preview_main.min.js create mode 100644 examples/examples_react-dnd-preview_offset.min.js create mode 100644 examples/index.html create mode 100644 examples/react-dnd-multi-backend.html create mode 100644 examples/react-dnd-preview.html create mode 100644 examples/react-dnd-preview_offset.html create mode 100644 jest.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 packages/dnd-multi-backend/.npmignore create mode 100644 packages/dnd-multi-backend/README.md create mode 100644 packages/dnd-multi-backend/examples/Backends.ts create mode 100644 packages/dnd-multi-backend/examples/DnD.ts create mode 100644 packages/dnd-multi-backend/examples/index.ts create mode 100644 packages/dnd-multi-backend/package.json create mode 100644 packages/dnd-multi-backend/src/MultiBackendImpl.ts create mode 100644 packages/dnd-multi-backend/src/MultiFactory.ts create mode 100644 packages/dnd-multi-backend/src/PreviewListImpl.ts create mode 100644 packages/dnd-multi-backend/src/__tests__/MultiBackendImpl.test.ts create mode 100644 packages/dnd-multi-backend/src/__tests__/MultiFactory.test.ts create mode 100644 packages/dnd-multi-backend/src/__tests__/PreviewListImpl.test.ts create mode 100644 packages/dnd-multi-backend/src/__tests__/createTransition.test.ts create mode 100644 packages/dnd-multi-backend/src/__tests__/index.test.ts create mode 100644 packages/dnd-multi-backend/src/__tests__/transitions.test.ts create mode 100644 packages/dnd-multi-backend/src/createTransition.ts create mode 100644 packages/dnd-multi-backend/src/index.ts create mode 100644 packages/dnd-multi-backend/src/transitions.ts create mode 100644 packages/dnd-multi-backend/src/types.ts create mode 100644 packages/dnd-multi-backend/tsconfig.json create mode 100644 packages/rdndmb-html5-to-touch/.npmignore create mode 100644 packages/rdndmb-html5-to-touch/README.md create mode 100644 packages/rdndmb-html5-to-touch/package.json create mode 100644 packages/rdndmb-html5-to-touch/src/__tests__/index.test.ts create mode 100644 packages/rdndmb-html5-to-touch/src/index.ts create mode 100644 packages/rdndmb-html5-to-touch/tsconfig.json create mode 100644 packages/react-dnd-multi-backend/.npmignore create mode 100644 packages/react-dnd-multi-backend/README.md create mode 100644 packages/react-dnd-multi-backend/examples/App.tsx create mode 100644 packages/react-dnd-multi-backend/examples/Basket.tsx create mode 100644 packages/react-dnd-multi-backend/examples/Card.tsx create mode 100644 packages/react-dnd-multi-backend/examples/MultiBasket.tsx create mode 100644 packages/react-dnd-multi-backend/examples/MultiCard.tsx create mode 100644 packages/react-dnd-multi-backend/examples/common.ts create mode 100644 packages/react-dnd-multi-backend/examples/index.tsx create mode 100644 packages/react-dnd-multi-backend/package.json create mode 100644 packages/react-dnd-multi-backend/src/__tests__/index.test.ts create mode 100644 packages/react-dnd-multi-backend/src/components/DndProvider.tsx create mode 100644 packages/react-dnd-multi-backend/src/components/Preview.tsx create mode 100644 packages/react-dnd-multi-backend/src/components/__tests__/DndProvider.test.tsx create mode 100644 packages/react-dnd-multi-backend/src/components/__tests__/Preview.test.tsx create mode 100644 packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrag.test.tsx create mode 100644 packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrop.test.tsx create mode 100644 packages/react-dnd-multi-backend/src/hooks/__tests__/usePreview.test.tsx create mode 100644 packages/react-dnd-multi-backend/src/hooks/index.ts create mode 100644 packages/react-dnd-multi-backend/src/hooks/useMultiCommon.ts create mode 100644 packages/react-dnd-multi-backend/src/hooks/useMultiDrag.ts create mode 100644 packages/react-dnd-multi-backend/src/hooks/useMultiDrop.ts create mode 100644 packages/react-dnd-multi-backend/src/hooks/useObservePreviews.ts create mode 100644 packages/react-dnd-multi-backend/src/hooks/usePreview.ts create mode 100644 packages/react-dnd-multi-backend/src/index.ts create mode 100644 packages/react-dnd-multi-backend/tsconfig.json create mode 100644 packages/react-dnd-preview/.npmignore create mode 100644 packages/react-dnd-preview/README.md create mode 100644 packages/react-dnd-preview/examples/main/App.tsx create mode 100644 packages/react-dnd-preview/examples/main/index.tsx create mode 100644 packages/react-dnd-preview/examples/main/methods/Components.tsx create mode 100644 packages/react-dnd-preview/examples/main/methods/Hooks.tsx create mode 100644 packages/react-dnd-preview/examples/main/methods/common.tsx create mode 100644 packages/react-dnd-preview/examples/offset/App.tsx create mode 100644 packages/react-dnd-preview/examples/offset/index.tsx create mode 100644 packages/react-dnd-preview/examples/shared.tsx create mode 100644 packages/react-dnd-preview/package.json create mode 100644 packages/react-dnd-preview/src/Context.ts create mode 100644 packages/react-dnd-preview/src/Preview.tsx create mode 100644 packages/react-dnd-preview/src/__mocks__/usePreview.ts create mode 100644 packages/react-dnd-preview/src/__tests__/Preview.test.tsx create mode 100644 packages/react-dnd-preview/src/__tests__/index.test.ts create mode 100644 packages/react-dnd-preview/src/__tests__/usePreview.test.ts create mode 100644 packages/react-dnd-preview/src/index.ts create mode 100644 packages/react-dnd-preview/src/offsets.ts create mode 100644 packages/react-dnd-preview/src/usePreview.ts create mode 100644 packages/react-dnd-preview/tsconfig.json create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..fd5994a6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +package-lock.json -diff diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..9791f0cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# OS files +.DS_Store + +# npm +node_modules +*-debug.log + +# Code coverage +/coverage + +# Output +packages/*/dist +webpack-stats.json + +# IDE +.vscode diff --git a/.jest-setup.ts b/.jest-setup.ts new file mode 100644 index 00000000..a8039339 --- /dev/null +++ b/.jest-setup.ts @@ -0,0 +1,3 @@ +import '@testing-library/jest-dom' +import React from 'react' +global.React = React diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..d297e652 --- /dev/null +++ b/.npmignore @@ -0,0 +1,22 @@ +# OS files +.DS_Store + +# esbuild +/esbuild + +# Output +/examples + +# npm +node_modules +npm-debug.log + +# Config +biome.json +.jest.config.js +.github +lerna.json +tsconfig.*json + +# Code coverage +coverage diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..69b917d2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016-2022 Louis Brunner + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..32619879 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# DnD Multi Backend [![NPM Version][npm-image]][npm-url] ![Build Status][ci-image] [![Coverage Status][coveralls-image]][coveralls-url] + +This project is a Drag'n'Drop backend compatible with [DnD Core](https://github.com/react-dnd/react-dnd). + +It enables your application to use different DnD backends depending on the situation. Different packages are available depending on your front-end framework: + + - React: [`react-dnd-multi-backend`](packages/react-dnd-multi-backend) + - Angular: [`angular-skyhook`](https://github.com/cormacrelf/angular-skyhook) (see [documentation](https://cormacrelf.github.io/angular-skyhook/angular-skyhook-multi-backend/) for more information) + - Any: [`dnd-multi-backend`](packages/dnd-multi-backend) + +This project also contains some helpers (available standalone or included in other packages): + + - React DnD Preview: [`react-dnd-preview`](packages/react-dnd-preview) (included in `react-dnd-multi-backend`) + +[Try them here!](https://louisbrunner.github.io/dnd-multi-backend/examples) + + +## Thanks + +Thanks to the [React DnD HTML5 Backend](https://github.com/react-dnd/react-dnd) maintainers which obviously greatly inspired this project. + + +## License + +MIT, Copyright (c) 2016-2022 Louis Brunner + + + +[npm-image]: https://img.shields.io/npm/v/dnd-multi-backend.svg +[npm-url]: https://npmjs.org/package/dnd-multi-backend +[ci-image]: https://github.com/LouisBrunner/dnd-multi-backend/workflows/Build/badge.svg +[coveralls-image]: https://coveralls.io/repos/github/LouisBrunner/dnd-multi-backend/badge.svg?branch=master +[coveralls-url]: https://coveralls.io/github/LouisBrunner/dnd-multi-backend?branch=master diff --git a/__mocks__/mocks.ts b/__mocks__/mocks.ts new file mode 100644 index 00000000..ac3ba604 --- /dev/null +++ b/__mocks__/mocks.ts @@ -0,0 +1,62 @@ +import type {MultiBackendSwitcher, PreviewList} from 'dnd-multi-backend' +import type {DragLayerMonitor} from 'react-dnd' + +export const MockDragMonitor = (item: DragObject): jest.Mocked> => { + return { + isDragging: jest.fn(() => { + return false + }), + getItemType: jest.fn(() => { + return null + }), + // FIXME: why is it failing to get the type correct? + getItem: jest.fn(() => { + return item + }) as jest.MockInstance & (() => T), + getClientOffset: jest.fn(() => { + return null + }), + getInitialClientOffset: jest.fn(() => { + return null + }), + getInitialSourceClientOffset: jest.fn(() => { + return null + }), + getDifferenceFromInitialOffset: jest.fn(() => { + return null + }), + getSourceClientOffset: jest.fn(() => { + return null + }), + } +} + +type OmitThisParameters = { + [P in keyof T]: OmitThisParameter +} + +export type MockedPreviewList = OmitThisParameters> + +export const MockPreviewList = (): MockedPreviewList => { + return { + register: jest.fn(), + unregister: jest.fn(), + backendChanged: jest.fn(), + } +} + +export type MockedMultiBackend = jest.Mocked + +export const MockMultiBackend = (): MockedMultiBackend => { + return { + backendsList: jest.fn(), + previewsList: jest.fn(), + previewEnabled: jest.fn(), + setup: jest.fn(), + teardown: jest.fn(), + connectDragSource: jest.fn(), + connectDragPreview: jest.fn(), + connectDropTarget: jest.fn(), + profile: jest.fn(), + } +} diff --git a/__mocks__/pipeline.ts b/__mocks__/pipeline.ts new file mode 100644 index 00000000..20bc3a14 --- /dev/null +++ b/__mocks__/pipeline.ts @@ -0,0 +1,50 @@ +import type {Backend} from 'dnd-core' +import {type MultiBackendOptions, createTransition} from 'dnd-multi-backend' + +const createBackend = () => { + return { + setup: jest.fn(), + teardown: jest.fn(), + connectDragSource: jest.fn(), + connectDragPreview: jest.fn(), + connectDropTarget: jest.fn(), + profile: jest.fn(), + } +} + +export const TestBackends = [createBackend(), createBackend()] + +export const TestPipeline: MultiBackendOptions = { + backends: [ + { + id: 'back1', + backend: jest.fn((): Backend => { + return TestBackends[0] + }), + }, + { + id: 'back2', + backend: jest.fn((): Backend => { + return TestBackends[1] + }), + options: {abc: 123}, + preview: true, + transition: createTransition( + 'touchstart', + jest.fn((event) => { + return event.type === 'touchstart' + }), + ), + }, + ], +} + +export const TestPipelineWithSkip: MultiBackendOptions = { + backends: [ + TestPipeline.backends[0], + { + ...TestPipeline.backends[1], + skipDispatchOnTransition: true, + }, + ], +} diff --git a/__mocks__/react-dnd-preview.ts b/__mocks__/react-dnd-preview.ts new file mode 100644 index 00000000..91d0b16e --- /dev/null +++ b/__mocks__/react-dnd-preview.ts @@ -0,0 +1,34 @@ +import {MockDragMonitor} from '@mocks/mocks' +import type {PreviewProps, PreviewState, usePreviewState} from 'react-dnd-preview' + +import type {JSX} from 'react' + +const preview = jest.createMockFromModule>('react-dnd-preview') + +const state: PreviewState = { + ref: {current: null}, + itemType: 'abc', + item: {}, + style: {}, + monitor: MockDragMonitor(null), +} + +const Preview = (props: PreviewProps): JSX.Element | null => { + if ('children' in props) { + return null + } + return props.generator(state) +} + +export const usePreview = (): usePreviewState => { + return { + display: true, + ...state, + } +} + +module.exports = { + ...preview, + Preview, + usePreview, +} diff --git a/__mocks__/react-dnd.ts b/__mocks__/react-dnd.ts new file mode 100644 index 00000000..541013e5 --- /dev/null +++ b/__mocks__/react-dnd.ts @@ -0,0 +1,17 @@ +import type {DragLayerMonitor} from 'react-dnd' + +const dnd = jest.requireActual>('react-dnd') + +let mockMonitor: DragLayerMonitor +export const __setMockMonitor = (monitor: DragLayerMonitor): void => { + mockMonitor = monitor +} + +export const useDragLayer = (collect: (monitor: DragLayerMonitor) => CollectedProps): CollectedProps => { + return collect(mockMonitor) +} + +export const DndProvider = dnd.DndProvider +export const useDrag = dnd.useDrag +export const useDrop = dnd.useDrop +export const DndContext = dnd.DndContext diff --git a/babel.config.json b/babel.config.json new file mode 100644 index 00000000..e15ac017 --- /dev/null +++ b/babel.config.json @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-typescript"] +} diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..01208092 --- /dev/null +++ b/biome.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 200 + }, + "javascript": { + "formatter": { + "trailingCommas": "all", + "semicolons": "asNeeded", + "quoteStyle": "single", + "bracketSpacing": false + } + }, + "files": { + "ignore": ["examples/*.js", "coverage", "packages/*/dist"] + } +} diff --git a/esbuild/build.js b/esbuild/build.js new file mode 100644 index 00000000..a5b9d7e6 --- /dev/null +++ b/esbuild/build.js @@ -0,0 +1,13 @@ +import esbuild from 'esbuild' +import {nodeExternalsPlugin} from 'esbuild-node-externals' +import tsConfig from '../tsconfig.json' with {type: 'json'} + +esbuild.build({ + entryPoints: ['./src/index.ts'], + format: 'esm', + bundle: true, + outfile: 'dist/index.js', + minify: true, + plugins: [nodeExternalsPlugin()], + target: tsConfig.compilerOptions.target, +}) diff --git a/esbuild/common.js b/esbuild/common.js new file mode 100644 index 00000000..3bed10df --- /dev/null +++ b/esbuild/common.js @@ -0,0 +1,30 @@ +// Note: this is not a technically a esbuild-related script. +import {execSync, spawnSync} from 'node:child_process' + +export const getCommandOutput = (...args) => { + const stdout = execSync(args.join(' '), { + encoding: 'utf8', + }) + return stdout.toString() +} + +export const getWorkspaces = () => { + const workspacesJSON = getCommandOutput('npm', 'query', '.workspace') + const workspaces = JSON.parse(workspacesJSON) + return workspaces.toSorted((a, b) => { + if (Object.keys(a.dependencies ?? {}).includes(b.name)) { + return 1 + } + if (Object.keys(b.dependencies ?? {}).includes(a.name)) { + return -1 + } + return 0 + }) +} + +export const executeCommand = (command, args, options) => { + spawnSync(command, args, { + stdio: 'inherit', + ...options, + }) +} diff --git a/esbuild/config.js b/esbuild/config.js new file mode 100644 index 00000000..12af70c4 --- /dev/null +++ b/esbuild/config.js @@ -0,0 +1,10 @@ +export const examples = { + entryPoints: { + 'examples_dnd-multi-backend.min': './packages/dnd-multi-backend/examples/index.ts', + 'examples_react-dnd-multi-backend.min': './packages/react-dnd-multi-backend/examples/index.tsx', + 'examples_react-dnd-preview_main.min': './packages/react-dnd-preview/examples/main/index.tsx', + 'examples_react-dnd-preview_offset.min': './packages/react-dnd-preview/examples/offset/index.tsx', + }, + bundle: true, + minify: true, +} diff --git a/esbuild/dev.js b/esbuild/dev.js new file mode 100644 index 00000000..ab7e7dfd --- /dev/null +++ b/esbuild/dev.js @@ -0,0 +1,15 @@ +import esbuild from 'esbuild' +import {examples} from './config.js' + +const baseDir = 'examples/' + +const context = await esbuild.context({ + ...examples, + outdir: baseDir, +}) + +const server = await context.serve({ + servedir: baseDir, + port: 4001, +}) +console.log(`Server available at http://${server.host}:${server.port}`) diff --git a/esbuild/examples.js b/esbuild/examples.js new file mode 100644 index 00000000..5f96d4de --- /dev/null +++ b/esbuild/examples.js @@ -0,0 +1,7 @@ +import esbuild from 'esbuild' +import {examples} from './config.js' + +esbuild.build({ + ...examples, + outdir: 'examples/', +}) diff --git a/esbuild/publish.js b/esbuild/publish.js new file mode 100644 index 00000000..13e40997 --- /dev/null +++ b/esbuild/publish.js @@ -0,0 +1,70 @@ +// Note: this is not a technically a esbuild-related script. + +import {readFileSync, writeFileSync} from 'node:fs' +import semver from 'semver' +import {executeCommand, getCommandOutput, getWorkspaces} from './common.js' + +const main = async () => { + if (process.argv.length < 3) { + console.error('Usage: node publish.js semver') + process.exit(1) + } + const ver = process.argv[2] + if (!semver.valid(ver)) { + console.error(`❌ Invalid semver version: ${ver}`) + process.exit(1) + } + + console.log('🔍 Checking if all changes are committed') + const changes = getCommandOutput('git', 'status', '--porcelain') + if (changes !== '') { + console.error('❌ Please commit all changes before publishing') + process.exit(1) + } + + console.log('🔍 Checking we are on main') + const branch = getCommandOutput('git', 'branch', '--show-current') + if (branch.trim() !== 'main') { + console.error('❌ Please switch to main branch before publishing') + process.exit(1) + } + + const pkgs = [] + const workspaces = getWorkspaces() + const workspaceNames = workspaces.map((w) => w.name) + for (const workspace of workspaces) { + console.log(`✏ī¸ Updating ${workspace.name} version to: ${ver}`) + const pkgFile = `${workspace.location}/package.json` + const pkg = JSON.parse(readFileSync(pkgFile)) + pkg.version = ver + for (const dep of Object.keys(pkg.dependencies ?? {})) { + if (workspaceNames.includes(dep)) { + pkg.dependencies[dep] = `^${ver}` + } + } + console.log(`📝 Writing ${workspace.name} package.json`) + const content = JSON.stringify(pkg, null, 2) + writeFileSync(pkgFile, content) + pkgs.push(pkgFile) + } + + console.log('✅ Make sure the package.json are formatted correctly') + executeCommand('npm', ['run', 'format:fix:internal', '--', ...pkgs]) + + for (const workspace of workspaces) { + console.log(`🔨 Publishing ${workspace.name}`) + executeCommand('npm', ['publish'], { + cwd: workspace.location, + }) + } + + console.log('↩ī¸ Committing changes') + executeCommand('git', ['commit', '-am', `release: v${ver}`]) + + console.log('🏷ī¸ Tagging') + executeCommand('git', ['tag', `v${ver}`]) + executeCommand('git', ['push', '--tags']) + executeCommand('gh', ['release', 'create', `v${ver}`, '--generate-notes']) +} + +main() diff --git a/esbuild/run-all.js b/esbuild/run-all.js new file mode 100644 index 00000000..e22fc778 --- /dev/null +++ b/esbuild/run-all.js @@ -0,0 +1,19 @@ +import {executeCommand, getWorkspaces} from './common.js' + +// Note: this is not a technically a esbuild-related script. +const main = async () => { + if (process.argv.length < 3) { + console.error('Usage: node run-all.js ') + process.exit(1) + } + const workspaces = getWorkspaces() + const args = process.argv.slice(2) + for (const workspace of workspaces) { + console.log(`🔨 Running in ${workspace.name}: ${args.join(' ')}`) + executeCommand(args[0], args.slice(1), { + cwd: workspace.path, + }) + } +} + +main() diff --git a/examples/dnd-multi-backend.html b/examples/dnd-multi-backend.html new file mode 100644 index 00000000..73794b63 --- /dev/null +++ b/examples/dnd-multi-backend.html @@ -0,0 +1,12 @@ + + + + dnd-multi-backend Examples + + +

This example demonstrates the basic logic of dnd-multi-backend which can be useful if you are implementing your own layer directly on top of dnd-core (if you use React or Angular you can already use react-dnd-multi-backend or @angular-skyhook/core, respectively)

+

Check your browser dev console for more details

+
Example is not working
+ + + diff --git a/examples/examples_dnd-multi-backend.min.js b/examples/examples_dnd-multi-backend.min.js new file mode 100644 index 00000000..dcbf702c --- /dev/null +++ b/examples/examples_dnd-multi-backend.min.js @@ -0,0 +1,5 @@ +"use strict";(()=>{function l(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var ce=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),J=function(){return Math.random().toString(36).substring(7).split("").join(".")},ue={INIT:"@@redux/INIT"+J(),REPLACE:"@@redux/REPLACE"+J(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+J()}};function rt(t){if(typeof t!="object"||t===null)return!1;for(var e=t;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function X(t,e,r){var n;if(typeof e=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(l(0));if(typeof e=="function"&&typeof r>"u"&&(r=e,e=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(l(1));return r(X)(t,e)}if(typeof t!="function")throw new Error(l(2));var o=t,i=e,s=[],c=s,d=!1;function p(){c===s&&(c=s.slice())}function D(){if(d)throw new Error(l(3));return i}function Y(u){if(typeof u!="function")throw new Error(l(4));if(d)throw new Error(l(5));var E=!0;return p(),c.push(u),function(){if(E){if(d)throw new Error(l(6));E=!1,p();var g=c.indexOf(u);c.splice(g,1),s=null}}}function v(u){if(!rt(u))throw new Error(l(7));if(typeof u.type>"u")throw new Error(l(8));if(d)throw new Error(l(9));try{d=!0,i=o(i,u)}finally{d=!1}for(var E=s=c,I=0;In&&n[o]?n[o]:r||null,t)}function fe(t,e){return t.filter(r=>r!==e)}function P(t){return typeof t=="object"}function pe(t,e){let r=new Map,n=i=>{r.set(i,r.has(i)?r.get(i)+1:1)};t.forEach(n),e.forEach(n);let o=[];return r.forEach((i,s)=>{i===1&&o.push(s)}),o}function le(t,e){return t.filter(r=>e.indexOf(r)>-1)}var w="dnd-core/INIT_COORDS",h="dnd-core/BEGIN_DRAG",x="dnd-core/PUBLISH_DRAG_SOURCE",m="dnd-core/HOVER",y="dnd-core/DROP",b="dnd-core/END_DRAG";function z(t,e){return{type:w,payload:{sourceClientOffset:e||null,clientOffset:t||null}}}var ot={type:w,payload:{clientOffset:null,sourceClientOffset:null}};function ge(t){return function(r=[],n={publishSource:!0}){let{publishSource:o=!0,clientOffset:i,getSourceClientOffset:s}=n,c=t.getMonitor(),d=t.getRegistry();t.dispatch(z(i)),it(r,c,d);let p=ct(r,c);if(p==null){t.dispatch(ot);return}let D=null;if(i){if(!s)throw new Error("getSourceClientOffset must be defined");st(s),D=s(p)}t.dispatch(z(i,D));let v=d.getSource(p).beginDrag(c,p);if(v==null)return;at(v),d.pinSource(p);let K=d.getSourceType(p);return{type:h,payload:{itemType:K,item:v,sourceId:p,clientOffset:i||null,sourceClientOffset:D||null,isSourcePublic:!!o}}}}function it(t,e,r){a(!e.isDragging(),"Cannot call beginDrag while dragging."),t.forEach(function(n){a(r.getSource(n),"Expected sourceIds to be registered.")})}function st(t){a(typeof t=="function","When clientOffset is provided, getSourceClientOffset must be a function.")}function at(t){a(P(t),"Item must be an object.")}function ct(t,e){let r=null;for(let n=t.length-1;n>=0;n--)if(e.canDragSource(t[n])){r=t[n];break}return r}function ut(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function dt(t){for(var e=1;e{let d=pt(s,c,o,n),p={type:y,payload:{dropResult:dt({},r,d)}};t.dispatch(p)})}}function ft(t){a(t.isDragging(),"Cannot call drop while not dragging."),a(!t.didDrop(),"Cannot call drop twice during one drag operation.")}function pt(t,e,r,n){let o=r.getTarget(t),i=o?o.drop(n,t):void 0;return lt(i),typeof i>"u"&&(i=e===0?{}:n.getDropResult()),i}function lt(t){a(typeof t>"u"||P(t),"Drop result must either be an object or undefined.")}function gt(t){let e=t.getTargetIds().filter(t.canDropOnTarget,t);return e.reverse(),e}function me(t){return function(){let r=t.getMonitor(),n=t.getRegistry();ht(r);let o=r.getSourceId();return o!=null&&(n.getSource(o,!0).endDrag(r,o),n.unpinSource()),{type:b}}}function ht(t){a(t.isDragging(),"Cannot call endDrag while not dragging.")}function k(t,e){return e===null?t===null:Array.isArray(t)?t.some(r=>r===e):t===e}function ye(t){return function(r,{clientOffset:n}={}){mt(r);let o=r.slice(0),i=t.getMonitor(),s=t.getRegistry(),c=i.getItemType();return bt(o,s,c),yt(o,i,s),vt(o,i,s),{type:m,payload:{targetIds:o,clientOffset:n||null}}}}function mt(t){a(Array.isArray(t),"Expected targetIds to be an array.")}function yt(t,e,r){a(e.isDragging(),"Cannot call hover while not dragging."),a(!e.didDrop(),"Cannot call hover after drop.");for(let n=0;n=0;n--){let o=t[n],i=e.getTargetType(o);k(i,r)||t.splice(n,1)}}function vt(t,e,r){t.forEach(function(n){r.getTarget(n).hover(e,n)})}function be(t){return function(){if(t.getMonitor().isDragging())return{type:x}}}function ve(t){return{beginDrag:ge(t),publishDragSource:be(t),hover:ye(t),drop:he(t),endDrag:me(t)}}var M=class{receiveBackend(e){this.backend=e}getMonitor(){return this.monitor}getBackend(){return this.backend}getRegistry(){return this.monitor.registry}getActions(){let e=this,{dispatch:r}=this.store;function n(i){return(...s)=>{let c=i.apply(e,s);typeof c<"u"&&r(c)}}let o=ve(this);return Object.keys(o).reduce((i,s)=>{let c=o[s];return i[s]=n(c),i},{})}dispatch(e){this.store.dispatch(e)}constructor(e,r){this.isSetUp=!1,this.handleRefCountChange=()=>{let n=this.store.getState().refCount>0;this.backend&&(n&&!this.isSetUp?(this.backend.setup(),this.isSetUp=!0):!n&&this.isSetUp&&(this.backend.teardown(),this.isSetUp=!1))},this.store=e,this.monitor=r,e.subscribe(this.handleRefCountChange)}};function Et(t,e){return{x:t.x+e.x,y:t.y+e.y}}function Ee(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Oe(t){let{clientOffset:e,initialClientOffset:r,initialSourceClientOffset:n}=t;return!e||!r||!n?null:Ee(Et(e,n),r)}function De(t){let{clientOffset:e,initialClientOffset:r}=t;return!e||!r?null:Ee(e,r)}var S=[],A=[];S.__IS_NONE__=!0;A.__IS_ALL__=!0;function we(t,e){return t===S?!1:t===A||typeof e>"u"?!0:le(e,t).length>0}var B=class{subscribeToStateChange(e,r={}){let{handlerIds:n}=r;a(typeof e=="function","listener must be a function."),a(typeof n>"u"||Array.isArray(n),"handlerIds, when specified, must be an array of strings.");let o=this.store.getState().stateId,i=()=>{let s=this.store.getState(),c=s.stateId;try{c===o||c===o+1&&!we(s.dirtyHandlerIds,n)||e()}finally{o=c}};return this.store.subscribe(i)}subscribeToOffsetChange(e){a(typeof e=="function","listener must be a function.");let r=this.store.getState().dragOffset,n=()=>{let o=this.store.getState().dragOffset;o!==r&&(r=o,e())};return this.store.subscribe(n)}canDragSource(e){if(!e)return!1;let r=this.registry.getSource(e);return a(r,`Expected to find a valid source. sourceId=${e}`),this.isDragging()?!1:r.canDrag(this,e)}canDropOnTarget(e){if(!e)return!1;let r=this.registry.getTarget(e);if(a(r,`Expected to find a valid target. targetId=${e}`),!this.isDragging()||this.didDrop())return!1;let n=this.registry.getTargetType(e),o=this.getItemType();return k(n,o)&&r.canDrop(this,e)}isDragging(){return!!this.getItemType()}isDraggingSource(e){if(!e)return!1;let r=this.registry.getSource(e,!0);if(a(r,`Expected to find a valid source. sourceId=${e}`),!this.isDragging()||!this.isSourcePublic())return!1;let n=this.registry.getSourceType(e),o=this.getItemType();return n!==o?!1:r.isDragging(this,e)}isOverTarget(e,r={shallow:!1}){if(!e)return!1;let{shallow:n}=r;if(!this.isDragging())return!1;let o=this.registry.getTargetType(e),i=this.getItemType();if(i&&!k(o,i))return!1;let s=this.getTargetIds();if(!s.length)return!1;let c=s.indexOf(e);return n?c===s.length-1:c>-1}getItemType(){return this.store.getState().dragOperation.itemType}getItem(){return this.store.getState().dragOperation.item}getSourceId(){return this.store.getState().dragOperation.sourceId}getTargetIds(){return this.store.getState().dragOperation.targetIds}getDropResult(){return this.store.getState().dragOperation.dropResult}didDrop(){return this.store.getState().dragOperation.didDrop}isSourcePublic(){return!!this.store.getState().dragOperation.isSourcePublic}getInitialClientOffset(){return this.store.getState().dragOffset.initialClientOffset}getInitialSourceClientOffset(){return this.store.getState().dragOffset.initialSourceClientOffset}getClientOffset(){return this.store.getState().dragOffset.clientOffset}getSourceClientOffset(){return Oe(this.store.getState().dragOffset)}getDifferenceFromInitialOffset(){return De(this.store.getState().dragOffset)}constructor(e,r){this.store=e,this.registry=r}};var xe=typeof global<"u"?global:self,Se=xe.MutationObserver||xe.WebKitMutationObserver;function Q(t){return function(){let r=setTimeout(o,0),n=setInterval(o,50);function o(){clearTimeout(r),clearInterval(n),t()}}}function Ot(t){let e=1,r=new Se(t),n=document.createTextNode("");return r.observe(n,{characterData:!0}),function(){e=-e,n.data=e}}var Te=typeof Se=="function"?Ot:Q;var j=class{enqueueTask(e){let{queue:r,requestFlush:n}=this;r.length||(n(),this.flushing=!0),r[r.length]=e}constructor(){this.queue=[],this.pendingErrors=[],this.flushing=!1,this.index=0,this.capacity=1024,this.flush=()=>{let{queue:e}=this;for(;this.indexthis.capacity){for(let n=0,o=e.length-this.index;n{this.pendingErrors.push(e),this.requestErrorThrow()},this.requestFlush=Te(this.flush),this.requestErrorThrow=Q(()=>{if(this.pendingErrors.length)throw this.pendingErrors.shift()})}};var U=class{call(){try{this.task&&this.task()}catch(e){this.onError(e)}finally{this.task=null,this.release(this)}}constructor(e,r){this.onError=e,this.release=r,this.task=null}};var L=class{create(e){let r=this.freeTasks,n=r.length?r.pop():new U(this.onError,o=>r[r.length]=o);return n.task=e,n}constructor(e){this.onError=e,this.freeTasks=[]}};var Ie=new j,Dt=new L(Ie.registerPendingError);function ke(t){Ie.enqueueTask(Dt.create(t))}var R="dnd-core/ADD_SOURCE",C="dnd-core/ADD_TARGET",_="dnd-core/REMOVE_SOURCE",O="dnd-core/REMOVE_TARGET";function Re(t){return{type:R,payload:{sourceId:t}}}function Ce(t){return{type:C,payload:{targetId:t}}}function _e(t){return{type:_,payload:{sourceId:t}}}function Ne(t){return{type:O,payload:{targetId:t}}}function Pe(t){a(typeof t.canDrag=="function","Expected canDrag to be a function."),a(typeof t.beginDrag=="function","Expected beginDrag to be a function."),a(typeof t.endDrag=="function","Expected endDrag to be a function.")}function Me(t){a(typeof t.canDrop=="function","Expected canDrop to be a function."),a(typeof t.hover=="function","Expected hover to be a function."),a(typeof t.drop=="function","Expected beginDrag to be a function.")}function V(t,e){if(e&&Array.isArray(t)){t.forEach(r=>V(r,!1));return}a(typeof t=="string"||typeof t=="symbol",e?"Type can only be a string, a symbol, or an array of either.":"Type can only be a string or a symbol.")}var f;(function(t){t.SOURCE="SOURCE",t.TARGET="TARGET"})(f||(f={}));var wt=0;function Ae(){return wt++}function xt(t){let e=Ae().toString();switch(t){case f.SOURCE:return`S${e}`;case f.TARGET:return`T${e}`;default:throw new Error(`Unknown Handler Role: ${t}`)}}function Be(t){switch(t[0]){case"S":return f.SOURCE;case"T":return f.TARGET;default:throw new Error(`Cannot parse handler ID: ${t}`)}}function je(t,e){let r=t.entries(),n=!1;do{let{done:o,value:[,i]}=r.next();if(i===e)return!0;n=!!o}while(!n);return!1}var G=class{addSource(e,r){V(e),Pe(r);let n=this.addHandler(f.SOURCE,e,r);return this.store.dispatch(Re(n)),n}addTarget(e,r){V(e,!0),Me(r);let n=this.addHandler(f.TARGET,e,r);return this.store.dispatch(Ce(n)),n}containsHandler(e){return je(this.dragSources,e)||je(this.dropTargets,e)}getSource(e,r=!1){return a(this.isSourceId(e),"Expected a valid source ID."),r&&e===this.pinnedSourceId?this.pinnedSource:this.dragSources.get(e)}getTarget(e){return a(this.isTargetId(e),"Expected a valid target ID."),this.dropTargets.get(e)}getSourceType(e){return a(this.isSourceId(e),"Expected a valid source ID."),this.types.get(e)}getTargetType(e){return a(this.isTargetId(e),"Expected a valid target ID."),this.types.get(e)}isSourceId(e){return Be(e)===f.SOURCE}isTargetId(e){return Be(e)===f.TARGET}removeSource(e){a(this.getSource(e),"Expected an existing source."),this.store.dispatch(_e(e)),ke(()=>{this.dragSources.delete(e),this.types.delete(e)})}removeTarget(e){a(this.getTarget(e),"Expected an existing target."),this.store.dispatch(Ne(e)),this.dropTargets.delete(e),this.types.delete(e)}pinSource(e){let r=this.getSource(e);a(r,"Expected an existing source."),this.pinnedSourceId=e,this.pinnedSource=r}unpinSource(){a(this.pinnedSource,"No source is pinned at the time."),this.pinnedSourceId=null,this.pinnedSource=null}addHandler(e,r,n){let o=xt(e);return this.types.set(o,r),e===f.SOURCE?this.dragSources.set(o,n):e===f.TARGET&&this.dropTargets.set(o,n),o}constructor(e){this.types=new Map,this.dragSources=new Map,this.dropTargets=new Map,this.pinnedSourceId=null,this.pinnedSource=null,this.store=e}};var St=(t,e)=>t===e;function Ue(t,e){return!t&&!e?!0:!t||!e?!1:t.x===e.x&&t.y===e.y}function Le(t,e,r=St){if(t.length!==e.length)return!1;for(let n=0;n0||!Le(r,n)))return S;let s=n[n.length-1],c=r[r.length-1];return s!==c&&(s&&o.push(s),c&&o.push(c)),o}function Tt(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function It(t){for(var e=1;e{this.#e.push(e)};this.unregister=e=>{for(;this.#e.indexOf(e)!==-1;)this.#e.splice(this.#e.indexOf(e),1)};this.backendChanged=e=>{for(let r of this.#e)r.backendChanged(e)};this.#e=[]}#e};var q=class t{constructor(e,r,n){this.#a=(e,r,n)=>{if(!n.backend)throw new Error(`You must specify a 'backend' property in your Backend entry: ${JSON.stringify(n)}`);let o=n.backend(e,r,n.options),i=n.id,s=!n.id&&o&&o.constructor;if(s&&(i=o.constructor.name),!i)throw new Error(`You must specify an 'id' property in your Backend entry: ${JSON.stringify(n)} + see this guide: https://github.com/louisbrunner/dnd-multi-backend/tree/master/packages/react-dnd-multi-backend#migrating-from-5xx`);if(s&&console.warn(`Deprecation notice: You are using a pipeline which doesn't include backends' 'id'. + This might be unsupported in the future, please specify 'id' explicitely for every backend.`),this.#t[i])throw new Error(`You must specify a unique 'id' property in your Backend entry: + ${JSON.stringify(n)} (conflicts with: ${JSON.stringify(this.#t[i])})`);return{id:i,instance:o,preview:n.preview??!1,transition:n.transition,skipDispatchOnTransition:n.skipDispatchOnTransition??!1}};this.setup=()=>{if(!(typeof window>"u")){if(t.isSetUp)throw new Error("Cannot have two MultiBackends at the same time.");t.isSetUp=!0,this.#i(window),this.#t[this.#e].instance.setup()}};this.teardown=()=>{typeof window>"u"||(t.isSetUp=!1,this.#c(window),this.#t[this.#e].instance.teardown())};this.connectDragSource=(e,r,n)=>this.#u("connectDragSource",e,r,n);this.connectDragPreview=(e,r,n)=>this.#u("connectDragPreview",e,r,n);this.connectDropTarget=(e,r,n)=>this.#u("connectDropTarget",e,r,n);this.profile=()=>this.#t[this.#e].instance.profile();this.previewEnabled=()=>this.#t[this.#e].preview;this.previewsList=()=>this.#r;this.backendsList=()=>this.#n;this.#i=e=>{for(let r of this.#n)r.transition&&e.addEventListener(r.transition.event,this.#s)};this.#c=e=>{for(let r of this.#n)r.transition&&e.removeEventListener(r.transition.event,this.#s)};this.#s=e=>{let r=this.#e;if(this.#n.some(n=>n.id!==this.#e&&n.transition&&n.transition.check(e)?(this.#e=n.id,!0):!1),this.#e!==r){this.#t[r].instance.teardown();for(let[s,c]of Object.entries(this.#o))c.unsubscribe(),c.unsubscribe=this.#d(c.func,...c.args);this.#r.backendChanged(this);let n=this.#t[this.#e];if(n.instance.setup(),n.skipDispatchOnTransition)return;let o=e.constructor,i=new o(e.type,e);e.target?.dispatchEvent(i)}};this.#d=(e,r,n,o)=>this.#t[this.#e].instance[e](r,n,o);this.#u=(e,r,n,o)=>{let i=`${e}_${r}`,s=this.#d(e,r,n,o);return this.#o[i]={func:e,args:[r,n,o],unsubscribe:s},()=>{this.#o[i].unsubscribe(),delete this.#o[i]}};if(!n||!n.backends||n.backends.length<1)throw new Error(`You must specify at least one Backend, if you are coming from 2.x.x (or don't understand this error) + see this guide: https://github.com/louisbrunner/dnd-multi-backend/tree/master/packages/react-dnd-multi-backend#migrating-from-2xx`);this.#r=new H,this.#t={},this.#n=[];for(let o of n.backends){let i=this.#a(e,r,o);this.#t[i.id]=i,this.#n.push(i)}this.#e=this.#n[0].id,this.#o={}}static{this.isSetUp=!1}#e;#r;#t;#n;#o;#a;#i;#c;#s;#d;#u};var Z=(t,e,r)=>new q(t,e,r);var N=(t,e)=>({event:t,check:e});var ee=N("touchstart",t=>{let e=t;return e.touches!==null&&e.touches!==void 0}),Pt=N("dragstart",t=>t.type.indexOf("drag")!==-1||t.type.indexOf("drop")!==-1),te=N("mousedown",t=>t.type.indexOf("touch")===-1&&t.type.indexOf("mouse")!==-1),Mt=N("pointerdown",t=>t.pointerType==="mouse");var $=class{#e;#r;#t;#n;#o;#a;#i;constructor(e,r,n,o,i,{draggable:s=!1}={}){this.#e=e,this.#r=e.getActions(),this.#t=r,this.#n=n,this.#o=o,this.#a=i,this.#i=s}setup(){console.log(`${this.#t}: setup`);for(let e of this.#a)window.addEventListener(e,this.#c)}teardown(){console.log(`${this.#t}: teardown`);for(let e of this.#a)window.removeEventListener(e,this.#c)}connectDragSource(e,r,n){let o=r,i=()=>{this.#e.getMonitor().isDragging()&&(console.log(`${this.#t}: end drag`),this.#r.endDrag()),console.log(`${this.#t}: drag`),this.#r.beginDrag([e],{clientOffset:this.#s(o),getSourceClientOffset:s=>this.#s(o)})};console.log(`${this.#t}: add drag source`),this.#i&&o.setAttribute("draggable","true");for(let s of this.#n)window.addEventListener(s,i);return()=>{console.log(`${this.#t}: remove drag source`);for(let s of this.#n)window.removeEventListener(s,i);this.#i&&o.setAttribute("draggable","false")}}connectDragPreview(e,r,n){return()=>{}}connectDropTarget(e,r,n){if(r===void 0)return()=>{};let o=i=>{this.#e.getMonitor().isDragging()&&(console.log(`${this.#t}: hover`),this.#r.hover([e],{clientOffset:this.#s(r)}),this.#i&&this.#e.getMonitor().canDropOnTarget(e)&&i.preventDefault())};console.log(`${this.#t}: add drop target`);for(let i of this.#o)window.addEventListener(i,o);return()=>{console.log(`${this.#t}: remove drop target`);for(let i of this.#o)window.removeEventListener(i,o)}}profile(){return{}}#c=()=>{console.log(`${this.#t}: drop`),this.#r.drop(),this.#r.endDrag()};#s=e=>{let{top:r,left:n}=e.getBoundingClientRect();return{x:r,y:n}}},re=class extends ${constructor(e){super(e,"HTML5",["dragstart"],["dragover","dragenter"],["drop"],{draggable:!0})}},Ke=t=>new re(t),ne=class extends ${constructor(e){super(e,"Touch",["touchstart","mousedown"],["touchmove","mousemove"],["touchend","mouseup"])}},Je=t=>new ne(t);var Xe=({text:t,color:e})=>{let r=document.createElement("p"),n=document.createTextNode(t);return r.style.cssText=`width: 100px; height: 100px; margin: 10px; padding: 5px; background: ${e}`,r.appendChild(n),r},F=class{#e;#r;constructor({text:e,color:r}){this.#e=Xe({text:e,color:r}),this.#r=r}node(){return this.#e}beginDrag(e,r){return{color:this.#r}}endDrag(e,r){}canDrag(e,r){return!0}isDragging(e,r){return!1}},W=class{#e;#r;constructor({text:e,color:r,onDrop:n}){this.#e=Xe({text:e,color:r}),this.#r=n}node(){return this.#e}canDrop(e,r){return!0}hover(e,r){}drop(e,r){this.#r?.(e.getItem())}};var At={backends:[{id:"html5",backend:Ke,transition:te},{id:"touch",backend:Je,preview:!0,transition:ee}]},oe=Ye(Z,{},At),ze=oe.getRegistry(),ie=new F({text:"Source",color:"red"}),se=new W({text:"Target",color:"orange",onDrop:t=>{console.log(`Dropped: ${t.color}`)}}),Qe="item",Bt=ze.addSource(Qe,ie);oe.getBackend().connectDragSource(Bt,ie.node());var jt=ze.addTarget(Qe,se);oe.getBackend().connectDropTarget(jt,se.node());document.body.appendChild(ie.node());document.body.appendChild(se.node());document.getElementById("placeholder")?.remove();})(); diff --git a/examples/examples_react-dnd-multi-backend.min.js b/examples/examples_react-dnd-multi-backend.min.js new file mode 100644 index 00000000..45912960 --- /dev/null +++ b/examples/examples_react-dnd-multi-backend.min.js @@ -0,0 +1,71 @@ +"use strict";(()=>{var hv=Object.create;var xr=Object.defineProperty;var gv=Object.getOwnPropertyDescriptor;var pv=Object.getOwnPropertyNames;var mv=Object.getPrototypeOf,vv=Object.prototype.hasOwnProperty;var $t=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),yv=(t,e)=>{for(var n in e)xr(t,n,{get:e[n],enumerable:!0})},Sv=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let l of pv(e))!vv.call(t,l)&&l!==n&&xr(t,l,{get:()=>e[l],enumerable:!(a=gv(e,l))||a.enumerable});return t};var M=(t,e,n)=>(n=t!=null?hv(mv(t)):{},Sv(e||!t||!t.__esModule?xr(n,"default",{value:t,enumerable:!0}):n,t));var Ys=$t(G=>{"use strict";function Rr(t,e){var n=t.length;t.push(e);t:for(;0>>1,l=t[a];if(0>>1;ali(r,n))oli(c,r)?(t[a]=c,t[o]=n,a=o):(t[a]=r,t[u]=n,a=u);else if(oli(c,n))t[a]=c,t[o]=n,a=o;else break t}}return e}function li(t,e){var n=t.sortIndex-e.sortIndex;return n!==0?n:t.id-e.id}G.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(Rs=performance,G.unstable_now=function(){return Rs.now()}):(Cr=Date,_s=Cr.now(),G.unstable_now=function(){return Cr.now()-_s});var Rs,Cr,_s,le=[],Be=[],bv=1,qt=null,pt=3,ri=!1,pn=!1,Ba=!1,Us=typeof setTimeout=="function"?setTimeout:null,Hs=typeof clearTimeout=="function"?clearTimeout:null,ws=typeof setImmediate<"u"?setImmediate:null;function ii(t){for(var e=Ft(Be);e!==null;){if(e.callback===null)ui(Be);else if(e.startTime<=t)ui(Be),e.sortIndex=e.expirationTime,Rr(le,e);else break;e=Ft(Be)}}function _r(t){if(Ba=!1,ii(t),!pn)if(Ft(le)!==null)pn=!0,wr();else{var e=Ft(Be);e!==null&&zr(_r,e.startTime-t)}}var oi=!1,qa=-1,Bs=5,qs=-1;function Ls(){return!(G.unstable_now()-qst&&Ls());){var a=qt.callback;if(typeof a=="function"){qt.callback=null,pt=qt.priorityLevel;var l=a(qt.expirationTime<=t);if(t=G.unstable_now(),typeof l=="function"){qt.callback=l,ii(t),e=!0;break e}qt===Ft(le)&&ui(le),ii(t)}else ui(le);qt=Ft(le)}if(qt!==null)e=!0;else{var i=Ft(Be);i!==null&&zr(_r,i.startTime-t),e=!1}}break t}finally{qt=null,pt=n,ri=!1}e=void 0}}finally{e?Ha():oi=!1}}}var Ha;typeof ws=="function"?Ha=function(){ws(Nr)}:typeof MessageChannel<"u"?(Ar=new MessageChannel,zs=Ar.port2,Ar.port1.onmessage=Nr,Ha=function(){zs.postMessage(null)}):Ha=function(){Us(Nr,0)};var Ar,zs;function wr(){oi||(oi=!0,Ha())}function zr(t,e){qa=Us(function(){t(G.unstable_now())},e)}G.unstable_IdlePriority=5;G.unstable_ImmediatePriority=1;G.unstable_LowPriority=4;G.unstable_NormalPriority=3;G.unstable_Profiling=null;G.unstable_UserBlockingPriority=2;G.unstable_cancelCallback=function(t){t.callback=null};G.unstable_continueExecution=function(){pn||ri||(pn=!0,wr())};G.unstable_forceFrameRate=function(t){0>t||125a?(t.sortIndex=n,Rr(Be,t),Ft(le)===null&&t===Ft(Be)&&(Ba?(Hs(qa),qa=-1):Ba=!0,zr(_r,n-a))):(t.sortIndex=l,Rr(le,t),pn||ri||(pn=!0,wr())),t};G.unstable_shouldYield=Ls;G.unstable_wrapCallback=function(t){var e=pt;return function(){var n=pt;pt=e;try{return t.apply(this,arguments)}finally{pt=n}}}});var Gs=$t((D1,js)=>{"use strict";js.exports=Ys()});var Fs=$t(R=>{"use strict";var Hr=Symbol.for("react.transitional.element"),Dv=Symbol.for("react.portal"),Ev=Symbol.for("react.fragment"),Tv=Symbol.for("react.strict_mode"),Ov=Symbol.for("react.profiler"),Mv=Symbol.for("react.consumer"),xv=Symbol.for("react.context"),Cv=Symbol.for("react.forward_ref"),Nv=Symbol.for("react.suspense"),Av=Symbol.for("react.memo"),ks=Symbol.for("react.lazy"),Xs=Symbol.iterator;function Rv(t){return t===null||typeof t!="object"?null:(t=Xs&&t[Xs]||t["@@iterator"],typeof t=="function"?t:null)}var Js={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ws=Object.assign,Ps={};function Vn(t,e,n){this.props=t,this.context=e,this.refs=Ps,this.updater=n||Js}Vn.prototype.isReactComponent={};Vn.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};Vn.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Is(){}Is.prototype=Vn.prototype;function Br(t,e,n){this.props=t,this.context=e,this.refs=Ps,this.updater=n||Js}var qr=Br.prototype=new Is;qr.constructor=Br;Ws(qr,Vn.prototype);qr.isPureReactComponent=!0;var Vs=Array.isArray,J={H:null,A:null,T:null,S:null},$s=Object.prototype.hasOwnProperty;function Lr(t,e,n,a,l,i){return n=i.ref,{$$typeof:Hr,type:t,key:e,ref:n!==void 0?n:null,props:i}}function _v(t,e){return Lr(t.type,e,void 0,void 0,void 0,t.props)}function Yr(t){return typeof t=="object"&&t!==null&&t.$$typeof===Hr}function wv(t){var e={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(n){return e[n]})}var Qs=/\/+/g;function Ur(t,e){return typeof t=="object"&&t!==null&&t.key!=null?wv(""+t.key):e.toString(36)}function Zs(){}function zv(t){switch(t.status){case"fulfilled":return t.value;case"rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(Zs,Zs):(t.status="pending",t.then(function(e){t.status==="pending"&&(t.status="fulfilled",t.value=e)},function(e){t.status==="pending"&&(t.status="rejected",t.reason=e)})),t.status){case"fulfilled":return t.value;case"rejected":throw t.reason}}throw t}function Xn(t,e,n,a,l){var i=typeof t;(i==="undefined"||i==="boolean")&&(t=null);var u=!1;if(t===null)u=!0;else switch(i){case"bigint":case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case Hr:case Dv:u=!0;break;case ks:return u=t._init,Xn(u(t._payload),e,n,a,l)}}if(u)return l=l(t),u=a===""?"."+Ur(t,0):a,Vs(l)?(n="",u!=null&&(n=u.replace(Qs,"$&/")+"/"),Xn(l,e,n,"",function(c){return c})):l!=null&&(Yr(l)&&(l=_v(l,n+(l.key==null||t&&t.key===l.key?"":(""+l.key).replace(Qs,"$&/")+"/")+u)),e.push(l)),1;u=0;var r=a===""?".":a+":";if(Vs(t))for(var o=0;o{"use strict";tf.exports=Fs()});var nf=$t(St=>{"use strict";var Bv=L();function ef(t){var e="https://react.dev/errors/"+t;if(1{"use strict";function af(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(af)}catch(t){console.error(t)}}af(),lf.exports=nf()});var tp=$t(Au=>{"use strict";var it=Gs(),Od=L(),Yv=jr();function S(t){var e="https://react.dev/errors/"+t;if(1)":-1l||o[a]!==c[l]){var h=` +`+o[a].replace(" at new "," at ");return t.displayName&&h.includes("")&&(h=h.replace("",t.displayName)),h}while(1<=a&&0<=l);break}}}finally{Xr=!1,Error.prepareStackTrace=n}return(n=t?t.displayName||t.name:"")?Ja(n):""}function Qv(t){switch(t.tag){case 26:case 27:case 5:return Ja(t.type);case 16:return Ja("Lazy");case 13:return Ja("Suspense");case 19:return Ja("SuspenseList");case 0:case 15:return t=Vr(t.type,!1),t;case 11:return t=Vr(t.type.render,!1),t;case 1:return t=Vr(t.type,!0),t;default:return""}}function of(t){try{var e="";do e+=Qv(t),t=t.return;while(t);return e}catch(n){return` +Error generating stack: `+n.message+` +`+n.stack}}function Oa(t){var e=t,n=t;if(t.alternate)for(;e.return;)e=e.return;else{t=e;do e=t,e.flags&4098&&(n=e.return),t=e.return;while(t)}return e.tag===3?n:null}function Ad(t){if(t.tag===13){var e=t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e.dehydrated}return null}function cf(t){if(Oa(t)!==t)throw Error(S(188))}function Zv(t){var e=t.alternate;if(!e){if(e=Oa(t),e===null)throw Error(S(188));return e!==t?null:t}for(var n=t,a=e;;){var l=n.return;if(l===null)break;var i=l.alternate;if(i===null){if(a=l.return,a!==null){n=a;continue}break}if(l.child===i.child){for(i=l.child;i;){if(i===n)return cf(l),t;if(i===a)return cf(l),e;i=i.sibling}throw Error(S(188))}if(n.return!==a.return)n=l,a=i;else{for(var u=!1,r=l.child;r;){if(r===n){u=!0,n=l,a=i;break}if(r===a){u=!0,a=l,n=i;break}r=r.sibling}if(!u){for(r=i.child;r;){if(r===n){u=!0,n=i,a=l;break}if(r===a){u=!0,a=i,n=l;break}r=r.sibling}if(!u)throw Error(S(189))}}if(n.alternate!==a)throw Error(S(190))}if(n.tag!==3)throw Error(S(188));return n.stateNode.current===n?t:e}function Rd(t){var e=t.tag;if(e===5||e===26||e===27||e===6)return t;for(t=t.child;t!==null;){if(e=Rd(t),e!==null)return e;t=t.sibling}return null}var Wa=Array.isArray,Z=Yv.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,En={pending:!1,data:null,method:null,action:null},To=[],In=-1;function fe(t){return{current:t}}function ft(t){0>In||(t.current=To[In],To[In]=null,In--)}function k(t,e){In++,To[In]=t.current,t.current=e}var re=fe(null),hl=fe(null),Je=fe(null),Gi=fe(null);function Xi(t,e){switch(k(Je,e),k(hl,t),k(re,null),t=e.nodeType,t){case 9:case 11:e=(e=e.documentElement)&&(e=e.namespaceURI)?fd(e):0;break;default:if(t=t===8?e.parentNode:e,e=t.tagName,t=t.namespaceURI)t=fd(t),e=Xg(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}ft(re),k(re,e)}function pa(){ft(re),ft(hl),ft(Je)}function Oo(t){t.memoizedState!==null&&k(Gi,t);var e=re.current,n=Xg(e,t.type);e!==n&&(k(hl,t),k(re,n))}function Vi(t){hl.current===t&&(ft(re),ft(hl)),Gi.current===t&&(ft(Gi),Ol._currentValue=En)}var Mo=Object.prototype.hasOwnProperty,gc=it.unstable_scheduleCallback,Qr=it.unstable_cancelCallback,Kv=it.unstable_shouldYield,kv=it.unstable_requestPaint,oe=it.unstable_now,Jv=it.unstable_getCurrentPriorityLevel,_d=it.unstable_ImmediatePriority,wd=it.unstable_UserBlockingPriority,Qi=it.unstable_NormalPriority,Wv=it.unstable_LowPriority,zd=it.unstable_IdlePriority,Pv=it.log,Iv=it.unstable_setDisableYieldValue,Nl=null,At=null;function $v(t){if(At&&typeof At.onCommitFiberRoot=="function")try{At.onCommitFiberRoot(Nl,t,void 0,(t.current.flags&128)===128)}catch{}}function Ke(t){if(typeof Pv=="function"&&Iv(t),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(Nl,t)}catch{}}var Rt=Math.clz32?Math.clz32:ey,Fv=Math.log,ty=Math.LN2;function ey(t){return t>>>=0,t===0?32:31-(Fv(t)/ty|0)|0}var di=128,hi=4194304;function vn(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function pu(t,e){var n=t.pendingLanes;if(n===0)return 0;var a=0,l=t.suspendedLanes,i=t.pingedLanes,u=t.warmLanes;t=t.finishedLanes!==0;var r=n&134217727;return r!==0?(n=r&~l,n!==0?a=vn(n):(i&=r,i!==0?a=vn(i):t||(u=r&~u,u!==0&&(a=vn(u))))):(r=n&~l,r!==0?a=vn(r):i!==0?a=vn(i):t||(u=n&~u,u!==0&&(a=vn(u)))),a===0?0:e!==0&&e!==a&&!(e&l)&&(l=a&-a,u=e&-e,l>=u||l===32&&(u&4194176)!==0)?e:a}function Al(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function ny(t,e){switch(t){case 1:case 2:case 4:case 8:return e+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ud(){var t=di;return di<<=1,!(di&4194176)&&(di=128),t}function Hd(){var t=hi;return hi<<=1,!(hi&62914560)&&(hi=4194304),t}function Zr(t){for(var e=[],n=0;31>n;n++)e.push(t);return e}function Rl(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function ay(t,e,n,a,l,i){var u=t.pendingLanes;t.pendingLanes=n,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=n,t.entangledLanes&=n,t.errorRecoveryDisabledLanes&=n,t.shellSuspendCounter=0;var r=t.entanglements,o=t.expirationTimes,c=t.hiddenUpdates;for(n=u&~n;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ry=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),ff={},df={};function oy(t){return Mo.call(df,t)?!0:Mo.call(ff,t)?!1:ry.test(t)?df[t]=!0:(ff[t]=!0,!1)}function Ai(t,e,n){if(oy(e))if(n===null)t.removeAttribute(e);else{switch(typeof n){case"undefined":case"function":case"symbol":t.removeAttribute(e);return;case"boolean":var a=e.toLowerCase().slice(0,5);if(a!=="data-"&&a!=="aria-"){t.removeAttribute(e);return}}t.setAttribute(e,""+n)}}function gi(t,e,n){if(n===null)t.removeAttribute(e);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(e);return}t.setAttribute(e,""+n)}}function ge(t,e,n,a){if(a===null)t.removeAttribute(n);else{switch(typeof a){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(n);return}t.setAttributeNS(e,n,""+a)}}function Gt(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Xd(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function cy(t){var e=Xd(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),a=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,i=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return l.call(this)},set:function(u){a=""+u,i.call(this,u)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(u){a=""+u},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Zi(t){t._valueTracker||(t._valueTracker=cy(t))}function Vd(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),a="";return t&&(a=Xd(t)?t.checked?"true":"false":t.value),t=a,t!==n?(e.setValue(t),!0):!1}function Ki(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var sy=/[\n"\\]/g;function Qt(t){return t.replace(sy,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Co(t,e,n,a,l,i,u,r){t.name="",u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"?t.type=u:t.removeAttribute("type"),e!=null?u==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+Gt(e)):t.value!==""+Gt(e)&&(t.value=""+Gt(e)):u!=="submit"&&u!=="reset"||t.removeAttribute("value"),e!=null?No(t,u,Gt(e)):n!=null?No(t,u,Gt(n)):a!=null&&t.removeAttribute("value"),l==null&&i!=null&&(t.defaultChecked=!!i),l!=null&&(t.checked=l&&typeof l!="function"&&typeof l!="symbol"),r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?t.name=""+Gt(r):t.removeAttribute("name")}function Qd(t,e,n,a,l,i,u,r){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.type=i),e!=null||n!=null){if(!(i!=="submit"&&i!=="reset"||e!=null))return;n=n!=null?""+Gt(n):"",e=e!=null?""+Gt(e):n,r||e===t.value||(t.value=e),t.defaultValue=e}a=a??l,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=r?t.checked:!!a,t.defaultChecked=!!a,u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(t.name=u)}function No(t,e,n){e==="number"&&Ki(t.ownerDocument)===t||t.defaultValue===""+n||(t.defaultValue=""+n)}function oa(t,e,n,a){if(t=t.options,e){e={};for(var l=0;l=$a),Sf=" ",bf=!1;function Id(t,e){switch(t){case"keyup":return Ly.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $d(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Fn=!1;function jy(t,e){switch(t){case"compositionend":return $d(e);case"keypress":return e.which!==32?null:(bf=!0,Sf);case"textInput":return t=e.data,t===Sf&&bf?null:t;default:return null}}function Gy(t,e){if(Fn)return t==="compositionend"||!bc&&Id(t,e)?(t=Wd(),_i=yc=ke=null,Fn=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=a}t:{for(;n;){if(n.nextSibling){n=n.nextSibling;break t}n=n.parentNode}n=void 0}n=Of(n)}}function nh(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?nh(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function ah(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Ki(t.document);e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=Ki(t.document)}return e}function Dc(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function Wy(t,e){var n=ah(e);e=t.focusedElem;var a=t.selectionRange;if(n!==e&&e&&e.ownerDocument&&nh(e.ownerDocument.documentElement,e)){if(a!==null&&Dc(e)){if(t=a.start,n=a.end,n===void 0&&(n=t),"selectionStart"in e)e.selectionStart=t,e.selectionEnd=Math.min(n,e.value.length);else if(n=(t=e.ownerDocument||document)&&t.defaultView||window,n.getSelection){n=n.getSelection();var l=e.textContent.length,i=Math.min(a.start,l);a=a.end===void 0?i:Math.min(a.end,l),!n.extend&&i>a&&(l=a,a=i,i=l),l=Mf(e,i);var u=Mf(e,a);l&&u&&(n.rangeCount!==1||n.anchorNode!==l.node||n.anchorOffset!==l.offset||n.focusNode!==u.node||n.focusOffset!==u.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),n.removeAllRanges(),i>a?(n.addRange(t),n.extend(u.node,u.offset)):(t.setEnd(u.node,u.offset),n.addRange(t)))}}for(t=[],n=e;n=n.parentNode;)n.nodeType===1&&t.push({element:n,left:n.scrollLeft,top:n.scrollTop});for(typeof e.focus=="function"&&e.focus(),e=0;e=document.documentMode,ta=null,_o=null,tl=null,wo=!1;function xf(t,e,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;wo||ta==null||ta!==Ki(a)||(a=ta,"selectionStart"in a&&Dc(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),tl&&vl(tl,a)||(tl=a,a=ou(_o,"onSelect"),0>=u,l-=u,Ee=1<<32-Rt(e)+l|n<O?(rt=T,T=null):rt=T.sibling;var H=d(f,T,g[O],v);if(H===null){T===null&&(T=rt);break}t&&T&&H.alternate===null&&e(f,T),s=i(H,s,O),A===null?D=H:A.sibling=H,A=H,T=rt}if(O===g.length)return n(f,T),B&&yn(f,O),D;if(T===null){for(;OO?(rt=T,T=null):rt=T.sibling;var He=d(f,T,H.value,v);if(He===null){T===null&&(T=rt);break}t&&T&&He.alternate===null&&e(f,T),s=i(He,s,O),A===null?D=He:A.sibling=He,A=He,T=rt}if(H.done)return n(f,T),B&&yn(f,O),D;if(T===null){for(;!H.done;O++,H=g.next())H=m(f,H.value,v),H!==null&&(s=i(H,s,O),A===null?D=H:A.sibling=H,A=H);return B&&yn(f,O),D}for(T=a(T);!H.done;O++,H=g.next())H=p(T,f,O,H.value,v),H!==null&&(t&&H.alternate!==null&&T.delete(H.key===null?O:H.key),s=i(H,s,O),A===null?D=H:A.sibling=H,A=H);return t&&T.forEach(function(dv){return e(f,dv)}),B&&yn(f,O),D}function C(f,s,g,v){if(typeof g=="object"&&g!==null&&g.type===Pn&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case fi:t:{for(var D=g.key;s!==null;){if(s.key===D){if(D=g.type,D===Pn){if(s.tag===7){n(f,s.sibling),v=l(s,g.props.children),v.return=f,f=v;break t}}else if(s.elementType===D||typeof D=="object"&&D!==null&&D.$$typeof===je&&zf(D)===s.type){n(f,s.sibling),v=l(s,g.props),Xa(v,g),v.return=f,f=v;break t}n(f,s);break}else e(f,s);s=s.sibling}g.type===Pn?(v=Mn(g.props.children,f.mode,v,g.key),v.return=f,f=v):(v=qi(g.type,g.key,g.props,null,f.mode,v),Xa(v,g),v.return=f,f=v)}return u(f);case ka:t:{for(D=g.key;s!==null;){if(s.key===D)if(s.tag===4&&s.stateNode.containerInfo===g.containerInfo&&s.stateNode.implementation===g.implementation){n(f,s.sibling),v=l(s,g.children||[]),v.return=f,f=v;break t}else{n(f,s);break}else e(f,s);s=s.sibling}v=so(g,f.mode,v),v.return=f,f=v}return u(f);case je:return D=g._init,g=D(g._payload),C(f,s,g,v)}if(Wa(g))return y(f,s,g,v);if(Ya(g)){if(D=Ya(g),typeof D!="function")throw Error(S(150));return g=D.call(g),b(f,s,g,v)}if(typeof g.then=="function")return C(f,s,Si(g),v);if(g.$$typeof===De)return C(f,s,Di(f,g),v);bi(f,g)}return typeof g=="string"&&g!==""||typeof g=="number"||typeof g=="bigint"?(g=""+g,s!==null&&s.tag===6?(n(f,s.sibling),v=l(s,g),v.return=f,f=v):(n(f,s),v=co(g,f.mode,v),v.return=f,f=v),u(f)):n(f,s)}return function(f,s,g,v){try{Sl=0;var D=C(f,s,g,v);return sa=null,D}catch(T){if(T===el)throw T;var A=Kt(29,T,null,f.mode);return A.lanes=v,A.return=f,A}finally{}}}var An=gh(!0),ph=gh(!1),ya=fe(null),Pi=fe(0);function Uf(t,e){t=Re,k(Pi,t),k(ya,e),Re=t|e.baseLanes}function Ho(){k(Pi,Re),k(ya,ya.current)}function xc(){Re=Pi.current,ft(ya),ft(Pi)}var Jt=fe(null),ce=null;function Xe(t){var e=t.alternate;k(lt,lt.current&1),k(Jt,t),ce===null&&(e===null||ya.current!==null||e.memoizedState!==null)&&(ce=t)}function mh(t){if(t.tag===22){if(k(lt,lt.current),k(Jt,t),ce===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(ce=t)}}else Ve(t)}function Ve(){k(lt,lt.current),k(Jt,Jt.current)}function Oe(t){ft(Jt),ce===t&&(ce=null),ft(lt)}var lt=fe(0);function Ii(t){for(var e=t;e!==null;){if(e.tag===13){var n=e.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if(e.flags&128)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var t0=typeof AbortController<"u"?AbortController:function(){var t=[],e=this.signal={aborted:!1,addEventListener:function(n,a){t.push(a)}};this.abort=function(){e.aborted=!0,t.forEach(function(n){return n()})}},e0=it.unstable_scheduleCallback,n0=it.unstable_NormalPriority,at={$$typeof:De,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Cc(){return{controller:new t0,data:new Map,refCount:0}}function zl(t){t.refCount--,t.refCount===0&&e0(n0,function(){t.controller.abort()})}var al=null,Bo=0,Sa=0,fa=null;function a0(t,e){if(al===null){var n=al=[];Bo=0,Sa=Pc(),fa={status:"pending",value:void 0,then:function(a){n.push(a)}}}return Bo++,e.then(Hf,Hf),e}function Hf(){if(--Bo===0&&al!==null){fa!==null&&(fa.status="fulfilled");var t=al;al=null,Sa=0,fa=null;for(var e=0;ei?i:8;var u=N.T,r={};N.T=r,jc(t,!1,e,n);try{var o=l(),c=N.S;if(c!==null&&c(r,o),o!==null&&typeof o=="object"&&typeof o.then=="function"){var h=l0(o,a);ll(t,e,h,_t(t))}else ll(t,e,a,_t(t))}catch(m){ll(t,e,{then:function(){},status:"rejected",reason:m},_t())}finally{Z.p=i,N.T=u}}function c0(){}function Yo(t,e,n,a){if(t.tag!==5)throw Error(S(476));var l=Vh(t).queue;Xh(t,l,e,En,n===null?c0:function(){return Qh(t),n(a)})}function Vh(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:En,baseState:En,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ne,lastRenderedState:En},next:null};var n={};return e.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ne,lastRenderedState:n},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Qh(t){var e=Vh(t).next.queue;ll(t,e,{},_t())}function Yc(){return vt(Ol)}function Zh(){return nt().memoizedState}function Kh(){return nt().memoizedState}function s0(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var n=_t();t=We(n);var a=Pe(e,t,n);a!==null&&(Dt(a,e,n),ul(a,e,n)),e={cache:Cc()},t.payload=e;return}e=e.return}}function f0(t,e,n){var a=_t();n={lane:a,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},Ou(t)?Jh(e,n):(n=Tc(t,e,n,a),n!==null&&(Dt(n,t,a),Wh(n,e,a)))}function kh(t,e,n){var a=_t();ll(t,e,n,a)}function ll(t,e,n,a){var l={lane:a,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ou(t))Jh(e,l);else{var i=t.alternate;if(t.lanes===0&&(i===null||i.lanes===0)&&(i=e.lastRenderedReducer,i!==null))try{var u=e.lastRenderedState,r=i(u,n);if(l.hasEagerState=!0,l.eagerState=r,wt(r,u))return bu(t,e,l,0),Q===null&&Su(),!1}catch{}finally{}if(n=Tc(t,e,l,a),n!==null)return Dt(n,t,a),Wh(n,e,a),!0}return!1}function jc(t,e,n,a){if(a={lane:2,revertLane:Pc(),action:a,hasEagerState:!1,eagerState:null,next:null},Ou(t)){if(e)throw Error(S(479))}else e=Tc(t,n,a,2),e!==null&&Dt(e,t,2)}function Ou(t){var e=t.alternate;return t===_||e!==null&&e===_}function Jh(t,e){da=$i=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function Wh(t,e,n){if(n&4194176){var a=e.lanes;a&=t.pendingLanes,n|=a,e.lanes=n,qd(t,n)}}var se={readContext:vt,use:Eu,useCallback:F,useContext:F,useEffect:F,useImperativeHandle:F,useLayoutEffect:F,useInsertionEffect:F,useMemo:F,useReducer:F,useRef:F,useState:F,useDebugValue:F,useDeferredValue:F,useTransition:F,useSyncExternalStore:F,useId:F};se.useCacheRefresh=F;se.useMemoCache=F;se.useHostTransitionStatus=F;se.useFormState=F;se.useActionState=F;se.useOptimistic=F;var Bn={readContext:vt,use:Eu,useCallback:function(t,e){return Et().memoizedState=[t,e===void 0?null:e],t},useContext:vt,useEffect:Yf,useImperativeHandle:function(t,e,n){n=n!=null?n.concat([t]):null,Hi(4194308,4,qh.bind(null,e,t),n)},useLayoutEffect:function(t,e){return Hi(4194308,4,t,e)},useInsertionEffect:function(t,e){Hi(4,2,t,e)},useMemo:function(t,e){var n=Et();e=e===void 0?null:e;var a=t();if(Rn){Ke(!0);try{t()}finally{Ke(!1)}}return n.memoizedState=[a,e],a},useReducer:function(t,e,n){var a=Et();if(n!==void 0){var l=n(e);if(Rn){Ke(!0);try{n(e)}finally{Ke(!1)}}}else l=e;return a.memoizedState=a.baseState=l,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:l},a.queue=t,t=t.dispatch=f0.bind(null,_,t),[a.memoizedState,t]},useRef:function(t){var e=Et();return t={current:t},e.memoizedState=t},useState:function(t){t=qo(t);var e=t.queue,n=kh.bind(null,_,e);return e.dispatch=n,[t.memoizedState,n]},useDebugValue:qc,useDeferredValue:function(t,e){var n=Et();return Lc(n,t,e)},useTransition:function(){var t=qo(!1);return t=Xh.bind(null,_,t.queue,!0,!1),Et().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,n){var a=_,l=Et();if(B){if(n===void 0)throw Error(S(407));n=n()}else{if(n=e(),Q===null)throw Error(S(349));U&60||Dh(a,e,n)}l.memoizedState=n;var i={value:n,getSnapshot:e};return l.queue=i,Yf(Th.bind(null,a,i,t),[t]),a.flags|=2048,ba(9,Eh.bind(null,a,i,n,e),{destroy:void 0},null),n},useId:function(){var t=Et(),e=Q.identifierPrefix;if(B){var n=Te,a=Ee;n=(a&~(1<<32-Rt(a)-1)).toString(32)+n,e=":"+e+"R"+n,n=Fi++,0 title"))),gt(i,a,n),i[mt]=t,ct(i),a=i;break t;case"link":var u=vd("link","href",l).get(a+(n.href||""));if(u){for(var r=0;r<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof a.is=="string"?l.createElement("select",{is:a.is}):l.createElement("select"),a.multiple?t.multiple=!0:a.size&&(t.size=a.size);break;default:t=typeof a.is=="string"?l.createElement(n,{is:a.is}):l.createElement(n)}}t[mt]=e,t[Tt]=a;t:for(l=e.child;l!==null;){if(l.tag===5||l.tag===6)t.appendChild(l.stateNode);else if(l.tag!==4&&l.tag!==27&&l.child!==null){l.child.return=l,l=l.child;continue}if(l===e)break t;for(;l.sibling===null;){if(l.return===null||l.return===e)break t;l=l.return}l.sibling.return=l.return,l=l.sibling}e.stateNode=t;t:switch(gt(t,n,a),n){case"button":case"input":case"select":case"textarea":t=!!a.autoFocus;break t;case"img":t=!0;break t;default:t=!1}t&&ve(e)}}return W(e),e.flags&=-16777217,null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==a&&ve(e);else{if(typeof a!="string"&&e.stateNode===null)throw Error(S(166));if(t=Je.current,Ga(e)){if(t=e.stateNode,n=e.memoizedProps,a=null,l=bt,l!==null)switch(l.tag){case 27:case 5:a=l.memoizedProps}t[mt]=e,t=!!(t.nodeValue===n||a!==null&&a.suppressHydrationWarning===!0||Gg(t.nodeValue,n)),t||Nn(e)}else t=cu(t).createTextNode(a),t[mt]=e,e.stateNode=t}return W(e),null;case 13:if(a=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(l=Ga(e),a!==null&&a.dehydrated!==null){if(t===null){if(!l)throw Error(S(318));if(l=e.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(S(317));l[mt]=e}else wl(),!(e.flags&128)&&(e.memoizedState=null),e.flags|=4;W(e),l=!1}else ee!==null&&(ec(ee),ee=null),l=!0;if(!l)return e.flags&256?(Oe(e),e):(Oe(e),null)}if(Oe(e),e.flags&128)return e.lanes=n,e;if(n=a!==null,t=t!==null&&t.memoizedState!==null,n){a=e.child,l=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(l=a.alternate.memoizedState.cachePool.pool);var i=null;a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(i=a.memoizedState.cachePool.pool),i!==l&&(a.flags|=2048)}return n!==t&&n&&(e.child.flags|=8192),Ei(e,e.updateQueue),W(e),null;case 4:return pa(),t===null&&Ic(e.stateNode.containerInfo),W(e),null;case 10:return xe(e.type),W(e),null;case 19:if(ft(lt),l=e.memoizedState,l===null)return W(e),null;if(a=(e.flags&128)!==0,i=l.rendering,i===null)if(a)Qa(l,!1);else{if($!==0||t!==null&&t.flags&128)for(t=e.child;t!==null;){if(i=Ii(t),i!==null){for(e.flags|=128,Qa(l,!1),t=i.updateQueue,e.updateQueue=t,Ei(e,t),e.subtreeFlags=0,t=n,n=e.child;n!==null;)Mg(n,t),n=n.sibling;return k(lt,lt.current&1|2),e.child}t=t.sibling}l.tail!==null&&oe()>lu&&(e.flags|=128,a=!0,Qa(l,!1),e.lanes=4194304)}else{if(!a)if(t=Ii(i),t!==null){if(e.flags|=128,a=!0,t=t.updateQueue,e.updateQueue=t,Ei(e,t),Qa(l,!0),l.tail===null&&l.tailMode==="hidden"&&!i.alternate&&!B)return W(e),null}else 2*oe()-l.renderingStartTime>lu&&n!==536870912&&(e.flags|=128,a=!0,Qa(l,!1),e.lanes=4194304);l.isBackwards?(i.sibling=e.child,e.child=i):(t=l.last,t!==null?t.sibling=i:e.child=i,l.last=i)}return l.tail!==null?(e=l.tail,l.rendering=e,l.tail=e.sibling,l.renderingStartTime=oe(),e.sibling=null,t=lt.current,k(lt,a?t&1|2:t&1),e):(W(e),null);case 22:case 23:return Oe(e),xc(),a=e.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(e.flags|=8192):a&&(e.flags|=8192),a?n&536870912&&!(e.flags&128)&&(W(e),e.subtreeFlags&6&&(e.flags|=8192)):W(e),n=e.updateQueue,n!==null&&Ei(e,n.retryQueue),n=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),a=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),a!==n&&(e.flags|=2048),t!==null&&ft(On),null;case 24:return n=null,t!==null&&(n=t.memoizedState.cache),e.memoizedState.cache!==n&&(e.flags|=2048),xe(at),W(e),null;case 25:return null}throw Error(S(156,e.tag))}function y0(t,e){switch(Mc(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return xe(at),pa(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return Vi(e),null;case 13:if(Oe(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(S(340));wl()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return ft(lt),null;case 4:return pa(),null;case 10:return xe(e.type),null;case 22:case 23:return Oe(e),xc(),t!==null&&ft(On),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return xe(at),null;case 25:return null;default:return null}}function Cg(t,e){switch(Mc(e),e.tag){case 3:xe(at),pa();break;case 26:case 27:case 5:Vi(e);break;case 4:pa();break;case 13:Oe(e);break;case 19:ft(lt);break;case 10:xe(e.type);break;case 22:case 23:Oe(e),xc(),t!==null&&ft(On);break;case 24:xe(at)}}var S0={getCacheForType:function(t){var e=vt(at),n=e.data.get(t);return n===void 0&&(n=t(),e.data.set(t,n)),n}},b0=typeof WeakMap=="function"?WeakMap:Map,P=0,Q=null,w=null,U=0,V=0,Ct=null,Se=!1,Ca=!1,Kc=!1,Re=0,$=0,un=0,xn=0,kc=0,kt=0,Da=0,sl=null,ue=null,Io=!1,Jc=0,lu=1/0,iu=null,$e=null,Ti=!1,Sn=null,fl=0,$o=0,Fo=null,dl=0,tc=null;function _t(){if(P&2&&U!==0)return U&-U;if(N.T!==null){var t=Sa;return t!==0?t:Pc()}return Yd()}function Ng(){kt===0&&(kt=!(U&536870912)||B?Ud():536870912);var t=Jt.current;return t!==null&&(t.flags|=32),kt}function Dt(t,e,n){(t===Q&&V===2||t.cancelPendingCommit!==null)&&(Ea(t,0),be(t,U,kt,!1)),Rl(t,n),(!(P&2)||t!==Q)&&(t===Q&&(!(P&2)&&(xn|=n),$===4&&be(t,U,kt,!1)),de(t))}function Ag(t,e,n){if(P&6)throw Error(S(327));var a=!n&&(e&60)===0&&(e&t.expiredLanes)===0||Al(t,e),l=a?T0(t,e):fo(t,e,!0),i=a;do{if(l===0){Ca&&!a&&be(t,e,0,!1);break}else if(l===6)be(t,e,0,!Se);else{if(n=t.current.alternate,i&&!D0(n)){l=fo(t,e,!1),i=!1;continue}if(l===2){if(i=e,t.errorRecoveryDisabledLanes&i)var u=0;else u=t.pendingLanes&-536870913,u=u!==0?u:u&536870912?536870912:0;if(u!==0){e=u;t:{var r=t;l=sl;var o=r.current.memoizedState.isDehydrated;if(o&&(Ea(r,u).flags|=256),u=fo(r,u,!1),u!==2){if(Kc&&!o){r.errorRecoveryDisabledLanes|=i,xn|=i,l=4;break t}i=ue,ue=l,i!==null&&ec(i)}l=u}if(i=!1,l!==2)continue}}if(l===1){Ea(t,0),be(t,e,0,!0);break}t:{switch(a=t,l){case 0:case 1:throw Error(S(345));case 4:if((e&4194176)===e){be(a,e,kt,!Se);break t}break;case 2:ue=null;break;case 3:case 5:break;default:throw Error(S(329))}if(a.finishedWork=n,a.finishedLanes=e,(e&62914560)===e&&(i=Jc+300-oe(),10n?32:n,N.T=null,Sn===null)var i=!1;else{n=Fo,Fo=null;var u=Sn,r=fl;if(Sn=null,fl=0,P&6)throw Error(S(331));var o=P;if(P|=4,Tg(u.current),bg(u,u.current,r,n),P=o,ql(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(Nl,u)}catch{}i=!0}return i}finally{Z.p=l,N.T=a,Hg(t,e)}}return!1}function ad(t,e,n){e=Zt(n,e),e=Go(t.stateNode,e,2),t=Pe(t,e,2),t!==null&&(Rl(t,2),de(t))}function X(t,e,n){if(t.tag===3)ad(t,t,n);else for(;e!==null;){if(e.tag===3){ad(e,t,n);break}else if(e.tag===1){var a=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&($e===null||!$e.has(a))){t=Zt(n,t),n=Fh(2),a=Pe(e,n,2),a!==null&&(tg(n,a,e,t),Rl(a,2),de(a));break}}e=e.return}}function ho(t,e,n){var a=t.pingCache;if(a===null){a=t.pingCache=new b0;var l=new Set;a.set(e,l)}else l=a.get(e),l===void 0&&(l=new Set,a.set(e,l));l.has(n)||(Kc=!0,l.add(n),t=x0.bind(null,t,e,n),e.then(t,t))}function x0(t,e,n){var a=t.pingCache;a!==null&&a.delete(e),t.pingedLanes|=t.suspendedLanes&n,t.warmLanes&=~n,Q===t&&(U&n)===n&&($===4||$===3&&(U&62914560)===U&&300>oe()-Jc?!(P&2)&&Ea(t,0):kc|=n,Da===U&&(Da=0)),de(t)}function Bg(t,e){e===0&&(e=Hd()),t=nn(t,e),t!==null&&(Rl(t,e),de(t))}function C0(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),Bg(t,n)}function N0(t,e){var n=0;switch(t.tag){case 13:var a=t.stateNode,l=t.memoizedState;l!==null&&(n=l.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(S(314))}a!==null&&a.delete(e),Bg(t,n)}function A0(t,e){return gc(t,e)}var uu=null,Wn=null,ac=!1,ru=!1,go=!1,Cn=0;function de(t){t!==Wn&&t.next===null&&(Wn===null?uu=Wn=t:Wn=Wn.next=t),ru=!0,ac||(ac=!0,_0(R0))}function ql(t,e){if(!go&&ru){go=!0;do for(var n=!1,a=uu;a!==null;){if(!e)if(t!==0){var l=a.pendingLanes;if(l===0)var i=0;else{var u=a.suspendedLanes,r=a.pingedLanes;i=(1<<31-Rt(42|t)+1)-1,i&=l&~(u&~r),i=i&201326677?i&201326677|1:i?i|2:0}i!==0&&(n=!0,ld(a,i))}else i=U,i=pu(a,a===Q?i:0),!(i&3)||Al(a,i)||(n=!0,ld(a,i));a=a.next}while(n);go=!1}}function R0(){ru=ac=!1;var t=0;Cn!==0&&(q0()&&(t=Cn),Cn=0);for(var e=oe(),n=null,a=uu;a!==null;){var l=a.next,i=qg(a,e);i===0?(a.next=null,n===null?uu=l:n.next=l,l===null&&(Wn=n)):(n=a,(t!==0||i&3)&&(ru=!0)),a=l}ql(t,!1)}function qg(t,e){for(var n=t.suspendedLanes,a=t.pingedLanes,l=t.expirationTimes,i=t.pendingLanes&-62914561;0"u"?null:document;function Zg(t,e,n){var a=Na;if(a&&typeof e=="string"&&e){var l=Qt(e);l='link[rel="'+t+'"][href="'+l+'"]',typeof n=="string"&&(l+='[crossorigin="'+n+'"]'),gd.has(l)||(gd.add(l),t={rel:t,crossOrigin:n,href:e},a.querySelector(l)===null&&(e=a.createElement("link"),gt(e,"link",t),ct(e),a.head.appendChild(e)))}}function Z0(t){_e.D(t),Zg("dns-prefetch",t,null)}function K0(t,e){_e.C(t,e),Zg("preconnect",t,e)}function k0(t,e,n){_e.L(t,e,n);var a=Na;if(a&&t&&e){var l='link[rel="preload"][as="'+Qt(e)+'"]';e==="image"&&n&&n.imageSrcSet?(l+='[imagesrcset="'+Qt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(l+='[imagesizes="'+Qt(n.imageSizes)+'"]')):l+='[href="'+Qt(t)+'"]';var i=l;switch(e){case"style":i=Ta(t);break;case"script":i=Aa(t)}Wt.has(i)||(t=K({rel:"preload",href:e==="image"&&n&&n.imageSrcSet?void 0:t,as:e},n),Wt.set(i,t),a.querySelector(l)!==null||e==="style"&&a.querySelector(Ll(i))||e==="script"&&a.querySelector(Yl(i))||(e=a.createElement("link"),gt(e,"link",t),ct(e),a.head.appendChild(e)))}}function J0(t,e){_e.m(t,e);var n=Na;if(n&&t){var a=e&&typeof e.as=="string"?e.as:"script",l='link[rel="modulepreload"][as="'+Qt(a)+'"][href="'+Qt(t)+'"]',i=l;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=Aa(t)}if(!Wt.has(i)&&(t=K({rel:"modulepreload",href:t},e),Wt.set(i,t),n.querySelector(l)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Yl(i)))return}a=n.createElement("link"),gt(a,"link",t),ct(a),n.head.appendChild(a)}}}function W0(t,e,n){_e.S(t,e,n);var a=Na;if(a&&t){var l=ra(a).hoistableStyles,i=Ta(t);e=e||"default";var u=l.get(i);if(!u){var r={loading:0,preload:null};if(u=a.querySelector(Ll(i)))r.loading=5;else{t=K({rel:"stylesheet",href:t,"data-precedence":e},n),(n=Wt.get(i))&&$c(t,n);var o=u=a.createElement("link");ct(o),gt(o,"link",t),o._p=new Promise(function(c,h){o.onload=c,o.onerror=h}),o.addEventListener("load",function(){r.loading|=1}),o.addEventListener("error",function(){r.loading|=2}),r.loading|=4,Li(u,e,a)}u={type:"stylesheet",instance:u,count:1,state:r},l.set(i,u)}}}function P0(t,e){_e.X(t,e);var n=Na;if(n&&t){var a=ra(n).hoistableScripts,l=Aa(t),i=a.get(l);i||(i=n.querySelector(Yl(l)),i||(t=K({src:t,async:!0},e),(e=Wt.get(l))&&Fc(t,e),i=n.createElement("script"),ct(i),gt(i,"link",t),n.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(l,i))}}function I0(t,e){_e.M(t,e);var n=Na;if(n&&t){var a=ra(n).hoistableScripts,l=Aa(t),i=a.get(l);i||(i=n.querySelector(Yl(l)),i||(t=K({src:t,async:!0,type:"module"},e),(e=Wt.get(l))&&Fc(t,e),i=n.createElement("script"),ct(i),gt(i,"link",t),n.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(l,i))}}function pd(t,e,n,a){var l=(l=Je.current)?su(l):null;if(!l)throw Error(S(446));switch(t){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(e=Ta(n.href),n=ra(l).hoistableStyles,a=n.get(e),a||(a={type:"style",instance:null,count:0,state:null},n.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){t=Ta(n.href);var i=ra(l).hoistableStyles,u=i.get(t);if(u||(l=l.ownerDocument||l,u={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(t,u),(i=l.querySelector(Ll(t)))&&!i._p&&(u.instance=i,u.state.loading=5),Wt.has(t)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Wt.set(t,n),i||$0(l,t,n,u.state))),e&&a===null)throw Error(S(528,""));return u}if(e&&a!==null)throw Error(S(529,""));return null;case"script":return e=n.async,n=n.src,typeof n=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=Aa(n),n=ra(l).hoistableScripts,a=n.get(e),a||(a={type:"script",instance:null,count:0,state:null},n.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(S(444,t))}}function Ta(t){return'href="'+Qt(t)+'"'}function Ll(t){return'link[rel="stylesheet"]['+t+"]"}function Kg(t){return K({},t,{"data-precedence":t.precedence,precedence:null})}function $0(t,e,n,a){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?a.loading=1:(e=t.createElement("link"),a.preload=e,e.addEventListener("load",function(){return a.loading|=1}),e.addEventListener("error",function(){return a.loading|=2}),gt(e,"link",n),ct(e),t.head.appendChild(e))}function Aa(t){return'[src="'+Qt(t)+'"]'}function Yl(t){return"script[async]"+t}function md(t,e,n){if(e.count++,e.instance===null)switch(e.type){case"style":var a=t.querySelector('style[data-href~="'+Qt(n.href)+'"]');if(a)return e.instance=a,ct(a),a;var l=K({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),ct(a),gt(a,"style",l),Li(a,n.precedence,t),e.instance=a;case"stylesheet":l=Ta(n.href);var i=t.querySelector(Ll(l));if(i)return e.state.loading|=4,e.instance=i,ct(i),i;a=Kg(n),(l=Wt.get(l))&&$c(a,l),i=(t.ownerDocument||t).createElement("link"),ct(i);var u=i;return u._p=new Promise(function(r,o){u.onload=r,u.onerror=o}),gt(i,"link",a),e.state.loading|=4,Li(i,n.precedence,t),e.instance=i;case"script":return i=Aa(n.src),(l=t.querySelector(Yl(i)))?(e.instance=l,ct(l),l):(a=n,(l=Wt.get(i))&&(a=K({},n),Fc(a,l)),t=t.ownerDocument||t,l=t.createElement("script"),ct(l),gt(l,"link",a),t.head.appendChild(l),e.instance=l);case"void":return null;default:throw Error(S(443,e.type))}else e.type==="stylesheet"&&!(e.state.loading&4)&&(a=e.instance,e.state.loading|=4,Li(a,n.precedence,t));return e.instance}function Li(t,e,n){for(var a=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),l=a.length?a[a.length-1]:null,i=l,u=0;u title"):null)}function F0(t,e,n){if(n===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function kg(t){return!(t.type==="stylesheet"&&!(t.state.loading&3))}var Tl=null;function tS(){}function eS(t,e,n){if(Tl===null)throw Error(S(475));var a=Tl;if(e.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&!(e.state.loading&4)){if(e.instance===null){var l=Ta(n.href),i=t.querySelector(Ll(l));if(i){t=i._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(a.count++,a=fu.bind(a),t.then(a,a)),e.state.loading|=4,e.instance=i,ct(i);return}i=t.ownerDocument||t,n=Kg(n),(l=Wt.get(l))&&$c(n,l),i=i.createElement("link"),ct(i);var u=i;u._p=new Promise(function(r,o){u.onload=r,u.onerror=o}),gt(i,"link",n),e.instance=i}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(e,t),(t=e.state.preload)&&!(e.state.loading&3)&&(a.count++,e=fu.bind(a),t.addEventListener("load",e),t.addEventListener("error",e))}}function nS(){if(Tl===null)throw Error(S(475));var t=Tl;return t.stylesheets&&t.count===0&&cc(t,t.stylesheets),0{"use strict";function ep(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(ep)}catch(t){console.error(t)}}ep(),np.exports=tp()});var up=$t(Ru=>{"use strict";var fS=Symbol.for("react.transitional.element"),dS=Symbol.for("react.fragment");function ip(t,e,n){var a=null;if(n!==void 0&&(a=""+n),e.key!==void 0&&(a=""+e.key),"key"in e){n={};for(var l in e)l!=="key"&&(n[l]=e[l])}else n=e;return e=n.ref,{$$typeof:fS,type:t,key:a,ref:e!==void 0?e:null,props:n}}Ru.Fragment=dS;Ru.jsx=ip;Ru.jsxs=ip});var ut=$t((R1,rp)=>{"use strict";rp.exports=up()});var $p=$t((YD,Ip)=>{"use strict";Ip.exports=function t(e,n){if(e===n)return!0;if(e&&n&&typeof e=="object"&&typeof n=="object"){if(e.constructor!==n.constructor)return!1;var a,l,i;if(Array.isArray(e)){if(a=e.length,a!=n.length)return!1;for(l=a;l--!==0;)if(!t(e[l],n[l]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if(i=Object.keys(e),a=i.length,a!==Object.keys(n).length)return!1;for(l=a;l--!==0;)if(!Object.prototype.hasOwnProperty.call(n,i[l]))return!1;for(l=a;l--!==0;){var u=i[l];if(!t(e[u],n[u]))return!1}return!0}return e!==e&&n!==n}});var cv=M(ap(),1);var Ue=M(L(),1);var lp=M(L(),1),cn=(0,lp.createContext)({dragDropManager:void 0});var Wp=M(ut(),1);function Pt(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var op=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),ls=function(){return Math.random().toString(36).substring(7).split("").join(".")},cp={INIT:"@@redux/INIT"+ls(),REPLACE:"@@redux/REPLACE"+ls(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+ls()}};function gS(t){if(typeof t!="object"||t===null)return!1;for(var e=t;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function is(t,e,n){var a;if(typeof e=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Pt(0));if(typeof e=="function"&&typeof n>"u"&&(n=e,e=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Pt(1));return n(is)(t,e)}if(typeof t!="function")throw new Error(Pt(2));var l=t,i=e,u=[],r=u,o=!1;function c(){r===u&&(r=u.slice())}function h(){if(o)throw new Error(Pt(3));return i}function m(b){if(typeof b!="function")throw new Error(Pt(4));if(o)throw new Error(Pt(5));var C=!0;return c(),r.push(b),function(){if(C){if(o)throw new Error(Pt(6));C=!1,c();var s=r.indexOf(b);r.splice(s,1),u=null}}}function d(b){if(!gS(b))throw new Error(Pt(7));if(typeof b.type>"u")throw new Error(Pt(8));if(o)throw new Error(Pt(9));try{o=!0,i=l(i,b)}finally{o=!1}for(var C=u=r,f=0;fa&&a[l]?a[l]:n||null,t)}function fp(t,e){return t.filter(n=>n!==e)}function _u(t){return typeof t=="object"}function dp(t,e){let n=new Map,a=i=>{n.set(i,n.has(i)?n.get(i)+1:1)};t.forEach(a),e.forEach(a);let l=[];return n.forEach((i,u)=>{i===1&&l.push(u)}),l}function hp(t,e){return t.filter(n=>e.indexOf(n)>-1)}var Ra="dnd-core/INIT_COORDS",sn="dnd-core/BEGIN_DRAG",_a="dnd-core/PUBLISH_DRAG_SOURCE",fn="dnd-core/HOVER",dn="dnd-core/DROP",hn="dnd-core/END_DRAG";function us(t,e){return{type:Ra,payload:{sourceClientOffset:e||null,clientOffset:t||null}}}var mS={type:Ra,payload:{clientOffset:null,sourceClientOffset:null}};function gp(t){return function(n=[],a={publishSource:!0}){let{publishSource:l=!0,clientOffset:i,getSourceClientOffset:u}=a,r=t.getMonitor(),o=t.getRegistry();t.dispatch(us(i)),vS(n,r,o);let c=bS(n,r);if(c==null){t.dispatch(mS);return}let h=null;if(i){if(!u)throw new Error("getSourceClientOffset must be defined");yS(u),h=u(c)}t.dispatch(us(i,h));let d=o.getSource(c).beginDrag(r,c);if(d==null)return;SS(d),o.pinSource(c);let p=o.getSourceType(c);return{type:sn,payload:{itemType:p,item:d,sourceId:c,clientOffset:i||null,sourceClientOffset:h||null,isSourcePublic:!!l}}}}function vS(t,e,n){E(!e.isDragging(),"Cannot call beginDrag while dragging."),t.forEach(function(a){E(n.getSource(a),"Expected sourceIds to be registered.")})}function yS(t){E(typeof t=="function","When clientOffset is provided, getSourceClientOffset must be a function.")}function SS(t){E(_u(t),"Item must be an object.")}function bS(t,e){let n=null;for(let a=t.length-1;a>=0;a--)if(e.canDragSource(t[a])){n=t[a];break}return n}function DS(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function ES(t){for(var e=1;e{let o=OS(u,r,l,a),c={type:dn,payload:{dropResult:ES({},n,o)}};t.dispatch(c)})}}function TS(t){E(t.isDragging(),"Cannot call drop while not dragging."),E(!t.didDrop(),"Cannot call drop twice during one drag operation.")}function OS(t,e,n,a){let l=n.getTarget(t),i=l?l.drop(a,t):void 0;return MS(i),typeof i>"u"&&(i=e===0?{}:a.getDropResult()),i}function MS(t){E(typeof t>"u"||_u(t),"Drop result must either be an object or undefined.")}function xS(t){let e=t.getTargetIds().filter(t.canDropOnTarget,t);return e.reverse(),e}function mp(t){return function(){let n=t.getMonitor(),a=t.getRegistry();CS(n);let l=n.getSourceId();return l!=null&&(a.getSource(l,!0).endDrag(n,l),a.unpinSource()),{type:hn}}}function CS(t){E(t.isDragging(),"Cannot call endDrag while not dragging.")}function jl(t,e){return e===null?t===null:Array.isArray(t)?t.some(n=>n===e):t===e}function vp(t){return function(n,{clientOffset:a}={}){NS(n);let l=n.slice(0),i=t.getMonitor(),u=t.getRegistry(),r=i.getItemType();return RS(l,u,r),AS(l,i,u),_S(l,i,u),{type:fn,payload:{targetIds:l,clientOffset:a||null}}}}function NS(t){E(Array.isArray(t),"Expected targetIds to be an array.")}function AS(t,e,n){E(e.isDragging(),"Cannot call hover while not dragging."),E(!e.didDrop(),"Cannot call hover after drop.");for(let a=0;a=0;a--){let l=t[a],i=e.getTargetType(l);jl(i,n)||t.splice(a,1)}}function _S(t,e,n){t.forEach(function(a){n.getTarget(a).hover(e,a)})}function yp(t){return function(){if(t.getMonitor().isDragging())return{type:_a}}}function Sp(t){return{beginDrag:gp(t),publishDragSource:yp(t),hover:vp(t),drop:pp(t),endDrag:mp(t)}}var wu=class{receiveBackend(e){this.backend=e}getMonitor(){return this.monitor}getBackend(){return this.backend}getRegistry(){return this.monitor.registry}getActions(){let e=this,{dispatch:n}=this.store;function a(i){return(...u)=>{let r=i.apply(e,u);typeof r<"u"&&n(r)}}let l=Sp(this);return Object.keys(l).reduce((i,u)=>{let r=l[u];return i[u]=a(r),i},{})}dispatch(e){this.store.dispatch(e)}constructor(e,n){this.isSetUp=!1,this.handleRefCountChange=()=>{let a=this.store.getState().refCount>0;this.backend&&(a&&!this.isSetUp?(this.backend.setup(),this.isSetUp=!0):!a&&this.isSetUp&&(this.backend.teardown(),this.isSetUp=!1))},this.store=e,this.monitor=n,e.subscribe(this.handleRefCountChange)}};function wS(t,e){return{x:t.x+e.x,y:t.y+e.y}}function bp(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Dp(t){let{clientOffset:e,initialClientOffset:n,initialSourceClientOffset:a}=t;return!e||!n||!a?null:bp(wS(e,a),n)}function Ep(t){let{clientOffset:e,initialClientOffset:n}=t;return!e||!n?null:bp(e,n)}var wa=[],zu=[];wa.__IS_NONE__=!0;zu.__IS_ALL__=!0;function Tp(t,e){return t===wa?!1:t===zu||typeof e>"u"?!0:hp(e,t).length>0}var Uu=class{subscribeToStateChange(e,n={}){let{handlerIds:a}=n;E(typeof e=="function","listener must be a function."),E(typeof a>"u"||Array.isArray(a),"handlerIds, when specified, must be an array of strings.");let l=this.store.getState().stateId,i=()=>{let u=this.store.getState(),r=u.stateId;try{r===l||r===l+1&&!Tp(u.dirtyHandlerIds,a)||e()}finally{l=r}};return this.store.subscribe(i)}subscribeToOffsetChange(e){E(typeof e=="function","listener must be a function.");let n=this.store.getState().dragOffset,a=()=>{let l=this.store.getState().dragOffset;l!==n&&(n=l,e())};return this.store.subscribe(a)}canDragSource(e){if(!e)return!1;let n=this.registry.getSource(e);return E(n,`Expected to find a valid source. sourceId=${e}`),this.isDragging()?!1:n.canDrag(this,e)}canDropOnTarget(e){if(!e)return!1;let n=this.registry.getTarget(e);if(E(n,`Expected to find a valid target. targetId=${e}`),!this.isDragging()||this.didDrop())return!1;let a=this.registry.getTargetType(e),l=this.getItemType();return jl(a,l)&&n.canDrop(this,e)}isDragging(){return!!this.getItemType()}isDraggingSource(e){if(!e)return!1;let n=this.registry.getSource(e,!0);if(E(n,`Expected to find a valid source. sourceId=${e}`),!this.isDragging()||!this.isSourcePublic())return!1;let a=this.registry.getSourceType(e),l=this.getItemType();return a!==l?!1:n.isDragging(this,e)}isOverTarget(e,n={shallow:!1}){if(!e)return!1;let{shallow:a}=n;if(!this.isDragging())return!1;let l=this.registry.getTargetType(e),i=this.getItemType();if(i&&!jl(l,i))return!1;let u=this.getTargetIds();if(!u.length)return!1;let r=u.indexOf(e);return a?r===u.length-1:r>-1}getItemType(){return this.store.getState().dragOperation.itemType}getItem(){return this.store.getState().dragOperation.item}getSourceId(){return this.store.getState().dragOperation.sourceId}getTargetIds(){return this.store.getState().dragOperation.targetIds}getDropResult(){return this.store.getState().dragOperation.dropResult}didDrop(){return this.store.getState().dragOperation.didDrop}isSourcePublic(){return!!this.store.getState().dragOperation.isSourcePublic}getInitialClientOffset(){return this.store.getState().dragOffset.initialClientOffset}getInitialSourceClientOffset(){return this.store.getState().dragOffset.initialSourceClientOffset}getClientOffset(){return this.store.getState().dragOffset.clientOffset}getSourceClientOffset(){return Dp(this.store.getState().dragOffset)}getDifferenceFromInitialOffset(){return Ep(this.store.getState().dragOffset)}constructor(e,n){this.store=e,this.registry=n}};var Op=typeof global<"u"?global:self,Mp=Op.MutationObserver||Op.WebKitMutationObserver;function rs(t){return function(){let n=setTimeout(l,0),a=setInterval(l,50);function l(){clearTimeout(n),clearInterval(a),t()}}}function zS(t){let e=1,n=new Mp(t),a=document.createTextNode("");return n.observe(a,{characterData:!0}),function(){e=-e,a.data=e}}var xp=typeof Mp=="function"?zS:rs;var Hu=class{enqueueTask(e){let{queue:n,requestFlush:a}=this;n.length||(a(),this.flushing=!0),n[n.length]=e}constructor(){this.queue=[],this.pendingErrors=[],this.flushing=!1,this.index=0,this.capacity=1024,this.flush=()=>{let{queue:e}=this;for(;this.indexthis.capacity){for(let a=0,l=e.length-this.index;a{this.pendingErrors.push(e),this.requestErrorThrow()},this.requestFlush=xp(this.flush),this.requestErrorThrow=rs(()=>{if(this.pendingErrors.length)throw this.pendingErrors.shift()})}};var Bu=class{call(){try{this.task&&this.task()}catch(e){this.onError(e)}finally{this.task=null,this.release(this)}}constructor(e,n){this.onError=e,this.release=n,this.task=null}};var qu=class{create(e){let n=this.freeTasks,a=n.length?n.pop():new Bu(this.onError,l=>n[n.length]=l);return a.task=e,a}constructor(e){this.onError=e,this.freeTasks=[]}};var Cp=new Hu,US=new qu(Cp.registerPendingError);function Np(t){Cp.enqueueTask(US.create(t))}var Gl="dnd-core/ADD_SOURCE",Xl="dnd-core/ADD_TARGET",Vl="dnd-core/REMOVE_SOURCE",Yn="dnd-core/REMOVE_TARGET";function Ap(t){return{type:Gl,payload:{sourceId:t}}}function Rp(t){return{type:Xl,payload:{targetId:t}}}function _p(t){return{type:Vl,payload:{sourceId:t}}}function wp(t){return{type:Yn,payload:{targetId:t}}}function zp(t){E(typeof t.canDrag=="function","Expected canDrag to be a function."),E(typeof t.beginDrag=="function","Expected beginDrag to be a function."),E(typeof t.endDrag=="function","Expected endDrag to be a function.")}function Up(t){E(typeof t.canDrop=="function","Expected canDrop to be a function."),E(typeof t.hover=="function","Expected hover to be a function."),E(typeof t.drop=="function","Expected beginDrag to be a function.")}function Lu(t,e){if(e&&Array.isArray(t)){t.forEach(n=>Lu(n,!1));return}E(typeof t=="string"||typeof t=="symbol",e?"Type can only be a string, a symbol, or an array of either.":"Type can only be a string or a symbol.")}var zt;(function(t){t.SOURCE="SOURCE",t.TARGET="TARGET"})(zt||(zt={}));var HS=0;function Hp(){return HS++}function BS(t){let e=Hp().toString();switch(t){case zt.SOURCE:return`S${e}`;case zt.TARGET:return`T${e}`;default:throw new Error(`Unknown Handler Role: ${t}`)}}function Bp(t){switch(t[0]){case"S":return zt.SOURCE;case"T":return zt.TARGET;default:throw new Error(`Cannot parse handler ID: ${t}`)}}function qp(t,e){let n=t.entries(),a=!1;do{let{done:l,value:[,i]}=n.next();if(i===e)return!0;a=!!l}while(!a);return!1}var Yu=class{addSource(e,n){Lu(e),zp(n);let a=this.addHandler(zt.SOURCE,e,n);return this.store.dispatch(Ap(a)),a}addTarget(e,n){Lu(e,!0),Up(n);let a=this.addHandler(zt.TARGET,e,n);return this.store.dispatch(Rp(a)),a}containsHandler(e){return qp(this.dragSources,e)||qp(this.dropTargets,e)}getSource(e,n=!1){return E(this.isSourceId(e),"Expected a valid source ID."),n&&e===this.pinnedSourceId?this.pinnedSource:this.dragSources.get(e)}getTarget(e){return E(this.isTargetId(e),"Expected a valid target ID."),this.dropTargets.get(e)}getSourceType(e){return E(this.isSourceId(e),"Expected a valid source ID."),this.types.get(e)}getTargetType(e){return E(this.isTargetId(e),"Expected a valid target ID."),this.types.get(e)}isSourceId(e){return Bp(e)===zt.SOURCE}isTargetId(e){return Bp(e)===zt.TARGET}removeSource(e){E(this.getSource(e),"Expected an existing source."),this.store.dispatch(_p(e)),Np(()=>{this.dragSources.delete(e),this.types.delete(e)})}removeTarget(e){E(this.getTarget(e),"Expected an existing target."),this.store.dispatch(wp(e)),this.dropTargets.delete(e),this.types.delete(e)}pinSource(e){let n=this.getSource(e);E(n,"Expected an existing source."),this.pinnedSourceId=e,this.pinnedSource=n}unpinSource(){E(this.pinnedSource,"No source is pinned at the time."),this.pinnedSourceId=null,this.pinnedSource=null}addHandler(e,n,a){let l=BS(e);return this.types.set(l,n),e===zt.SOURCE?this.dragSources.set(l,a):e===zt.TARGET&&this.dropTargets.set(l,a),l}constructor(e){this.types=new Map,this.dragSources=new Map,this.dropTargets=new Map,this.pinnedSourceId=null,this.pinnedSource=null,this.store=e}};var qS=(t,e)=>t===e;function Lp(t,e){return!t&&!e?!0:!t||!e?!1:t.x===e.x&&t.y===e.y}function Yp(t,e,n=qS){if(t.length!==e.length)return!1;for(let a=0;a0||!Yp(n,a)))return wa;let u=a[a.length-1],r=n[n.length-1];return u!==r&&(u&&l.push(u),r&&l.push(r)),l}function LS(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function YS(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}function KS(t,e){if(t==null)return{};var n={},a=Object.keys(t),l,i;for(i=0;i=0)&&(n[l]=t[l]);return n}var Jp=0,ju=Symbol.for("__REACT_DND_CONTEXT_INSTANCE__"),Xu=(0,Gu.memo)(function(e){var{children:n}=e,a=ZS(e,["children"]);let[l,i]=kS(a);return(0,Gu.useEffect)(()=>{if(i){let u=Pp();return++Jp,()=>{--Jp===0&&(u[ju]=null)}}},[]),(0,Wp.jsx)(cn.Provider,{value:l,children:n})});function kS(t){if("manager"in t)return[{dragDropManager:t.manager},!1];let e=JS(t.backend,t.context,t.options,t.debugMode),n=!t.context;return[e,n]}function JS(t,e=Pp(),n,a){let l=e;return l[ju]||(l[ju]={dragDropManager:kp(t,e,n,a)}),l[ju]}function Pp(){return typeof global<"u"?global:window}var Fp=M($p(),1),Qu=M(L(),1);var Vu=M(L(),1),Ut=typeof window<"u"?Vu.useLayoutEffect:Vu.useEffect;function Zu(t,e,n){let[a,l]=(0,Qu.useState)(()=>e(t)),i=(0,Qu.useCallback)(()=>{let u=e(t);(0,Fp.default)(a,u)||(l(u),n&&n())},[a,t,n]);return Ut(i),[a,i]}function tm(t,e,n){let[a,l]=Zu(t,e,n);return Ut(function(){let u=t.getHandlerId();if(u!=null)return t.subscribeToStateChange(l,{handlerIds:[u]})},[t,l]),a}function Ku(t,e,n){return tm(e,t||(()=>({})),()=>n.reconnect())}var em=M(L(),1);function ku(t,e){let n=[...e||[]];return e==null&&typeof t!="function"&&n.push(t),(0,em.useMemo)(()=>typeof t=="function"?t():t,n)}var os=M(L(),1);function nm(t){return(0,os.useMemo)(()=>t.hooks.dragSource(),[t])}function am(t){return(0,os.useMemo)(()=>t.hooks.dragPreview(),[t])}var om=M(L(),1);var cs=!1,ss=!1,Ju=class{receiveHandlerId(e){this.sourceId=e}getHandlerId(){return this.sourceId}canDrag(){E(!cs,"You may not call monitor.canDrag() inside your canDrag() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return cs=!0,this.internalMonitor.canDragSource(this.sourceId)}finally{cs=!1}}isDragging(){if(!this.sourceId)return!1;E(!ss,"You may not call monitor.isDragging() inside your isDragging() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return ss=!0,this.internalMonitor.isDraggingSource(this.sourceId)}finally{ss=!1}}subscribeToStateChange(e,n){return this.internalMonitor.subscribeToStateChange(e,n)}isDraggingSource(e){return this.internalMonitor.isDraggingSource(e)}isOverTarget(e,n){return this.internalMonitor.isOverTarget(e,n)}getTargetIds(){return this.internalMonitor.getTargetIds()}isSourcePublic(){return this.internalMonitor.isSourcePublic()}getSourceId(){return this.internalMonitor.getSourceId()}subscribeToOffsetChange(e){return this.internalMonitor.subscribeToOffsetChange(e)}canDragSource(e){return this.internalMonitor.canDragSource(e)}canDropOnTarget(e){return this.internalMonitor.canDropOnTarget(e)}getItemType(){return this.internalMonitor.getItemType()}getItem(){return this.internalMonitor.getItem()}getDropResult(){return this.internalMonitor.getDropResult()}didDrop(){return this.internalMonitor.didDrop()}getInitialClientOffset(){return this.internalMonitor.getInitialClientOffset()}getInitialSourceClientOffset(){return this.internalMonitor.getInitialSourceClientOffset()}getSourceClientOffset(){return this.internalMonitor.getSourceClientOffset()}getClientOffset(){return this.internalMonitor.getClientOffset()}getDifferenceFromInitialOffset(){return this.internalMonitor.getDifferenceFromInitialOffset()}constructor(e){this.sourceId=null,this.internalMonitor=e.getMonitor()}};var fs=!1,Wu=class{receiveHandlerId(e){this.targetId=e}getHandlerId(){return this.targetId}subscribeToStateChange(e,n){return this.internalMonitor.subscribeToStateChange(e,n)}canDrop(){if(!this.targetId)return!1;E(!fs,"You may not call monitor.canDrop() inside your canDrop() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor");try{return fs=!0,this.internalMonitor.canDropOnTarget(this.targetId)}finally{fs=!1}}isOver(e){return this.targetId?this.internalMonitor.isOverTarget(this.targetId,e):!1}getItemType(){return this.internalMonitor.getItemType()}getItem(){return this.internalMonitor.getItem()}getDropResult(){return this.internalMonitor.getDropResult()}didDrop(){return this.internalMonitor.didDrop()}getInitialClientOffset(){return this.internalMonitor.getInitialClientOffset()}getInitialSourceClientOffset(){return this.internalMonitor.getInitialSourceClientOffset()}getSourceClientOffset(){return this.internalMonitor.getSourceClientOffset()}getClientOffset(){return this.internalMonitor.getClientOffset()}getDifferenceFromInitialOffset(){return this.internalMonitor.getDifferenceFromInitialOffset()}constructor(e){this.targetId=null,this.internalMonitor=e.getMonitor()}};function lm(t,e,n){let a=n.getRegistry(),l=a.addTarget(t,e);return[l,()=>a.removeTarget(l)]}function im(t,e,n){let a=n.getRegistry(),l=a.addSource(t,e);return[l,()=>a.removeSource(l)]}function Ql(t,e,n,a){let l=n?n.call(a,t,e):void 0;if(l!==void 0)return!!l;if(t===e)return!0;if(typeof t!="object"||!t||typeof e!="object"||!e)return!1;let i=Object.keys(t),u=Object.keys(e);if(i.length!==u.length)return!1;let r=Object.prototype.hasOwnProperty.bind(e);for(let o=0;o, or turn it into a drag source or a drop target itself.`)}function PS(t){return(e=null,n=null)=>{if(!(0,Kl.isValidElement)(e)){let i=e;return t(i,n),i}let a=e;return WS(a),IS(a,n?i=>t(i,n):t)}}function Pu(t){let e={};return Object.keys(t).forEach(n=>{let a=t[n];if(n.endsWith("Ref"))e[n]=t[n];else{let l=PS(a);e[n]=()=>l}}),e}function um(t,e){typeof t=="function"?t(e):t.current=e}function IS(t,e){let n=t.ref;return E(typeof n!="string","Cannot connect React DnD to an element with an existing string ref. Please convert it to use a callback ref instead, or wrap it into a or
. Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs"),n?(0,Kl.cloneElement)(t,{ref:a=>{um(n,a),um(e,a)}}):(0,Kl.cloneElement)(t,{ref:e})}var Iu=class{receiveHandlerId(e){this.handlerId!==e&&(this.handlerId=e,this.reconnect())}get connectTarget(){return this.dragSource}get dragSourceOptions(){return this.dragSourceOptionsInternal}set dragSourceOptions(e){this.dragSourceOptionsInternal=e}get dragPreviewOptions(){return this.dragPreviewOptionsInternal}set dragPreviewOptions(e){this.dragPreviewOptionsInternal=e}reconnect(){let e=this.reconnectDragSource();this.reconnectDragPreview(e)}reconnectDragSource(){let e=this.dragSource,n=this.didHandlerIdChange()||this.didConnectedDragSourceChange()||this.didDragSourceOptionsChange();return n&&this.disconnectDragSource(),this.handlerId?e?(n&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragSource=e,this.lastConnectedDragSourceOptions=this.dragSourceOptions,this.dragSourceUnsubscribe=this.backend.connectDragSource(this.handlerId,e,this.dragSourceOptions)),n):(this.lastConnectedDragSource=e,n):n}reconnectDragPreview(e=!1){let n=this.dragPreview,a=e||this.didHandlerIdChange()||this.didConnectedDragPreviewChange()||this.didDragPreviewOptionsChange();if(a&&this.disconnectDragPreview(),!!this.handlerId){if(!n){this.lastConnectedDragPreview=n;return}a&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragPreview=n,this.lastConnectedDragPreviewOptions=this.dragPreviewOptions,this.dragPreviewUnsubscribe=this.backend.connectDragPreview(this.handlerId,n,this.dragPreviewOptions))}}didHandlerIdChange(){return this.lastConnectedHandlerId!==this.handlerId}didConnectedDragSourceChange(){return this.lastConnectedDragSource!==this.dragSource}didConnectedDragPreviewChange(){return this.lastConnectedDragPreview!==this.dragPreview}didDragSourceOptionsChange(){return!Ql(this.lastConnectedDragSourceOptions,this.dragSourceOptions)}didDragPreviewOptionsChange(){return!Ql(this.lastConnectedDragPreviewOptions,this.dragPreviewOptions)}disconnectDragSource(){this.dragSourceUnsubscribe&&(this.dragSourceUnsubscribe(),this.dragSourceUnsubscribe=void 0)}disconnectDragPreview(){this.dragPreviewUnsubscribe&&(this.dragPreviewUnsubscribe(),this.dragPreviewUnsubscribe=void 0,this.dragPreviewNode=null,this.dragPreviewRef=null)}get dragSource(){return this.dragSourceNode||this.dragSourceRef&&this.dragSourceRef.current}get dragPreview(){return this.dragPreviewNode||this.dragPreviewRef&&this.dragPreviewRef.current}clearDragSource(){this.dragSourceNode=null,this.dragSourceRef=null}clearDragPreview(){this.dragPreviewNode=null,this.dragPreviewRef=null}constructor(e){this.hooks=Pu({dragSource:(n,a)=>{this.clearDragSource(),this.dragSourceOptions=a||null,Zl(n)?this.dragSourceRef=n:this.dragSourceNode=n,this.reconnectDragSource()},dragPreview:(n,a)=>{this.clearDragPreview(),this.dragPreviewOptions=a||null,Zl(n)?this.dragPreviewRef=n:this.dragPreviewNode=n,this.reconnectDragPreview()}}),this.handlerId=null,this.dragSourceRef=null,this.dragSourceOptionsInternal=null,this.dragPreviewRef=null,this.dragPreviewOptionsInternal=null,this.lastConnectedHandlerId=null,this.lastConnectedDragSource=null,this.lastConnectedDragSourceOptions=null,this.lastConnectedDragPreview=null,this.lastConnectedDragPreviewOptions=null,this.backend=e}};var $u=class{get connectTarget(){return this.dropTarget}reconnect(){let e=this.didHandlerIdChange()||this.didDropTargetChange()||this.didOptionsChange();e&&this.disconnectDropTarget();let n=this.dropTarget;if(this.handlerId){if(!n){this.lastConnectedDropTarget=n;return}e&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDropTarget=n,this.lastConnectedDropTargetOptions=this.dropTargetOptions,this.unsubscribeDropTarget=this.backend.connectDropTarget(this.handlerId,n,this.dropTargetOptions))}}receiveHandlerId(e){e!==this.handlerId&&(this.handlerId=e,this.reconnect())}get dropTargetOptions(){return this.dropTargetOptionsInternal}set dropTargetOptions(e){this.dropTargetOptionsInternal=e}didHandlerIdChange(){return this.lastConnectedHandlerId!==this.handlerId}didDropTargetChange(){return this.lastConnectedDropTarget!==this.dropTarget}didOptionsChange(){return!Ql(this.lastConnectedDropTargetOptions,this.dropTargetOptions)}disconnectDropTarget(){this.unsubscribeDropTarget&&(this.unsubscribeDropTarget(),this.unsubscribeDropTarget=void 0)}get dropTarget(){return this.dropTargetNode||this.dropTargetRef&&this.dropTargetRef.current}clearDropTarget(){this.dropTargetRef=null,this.dropTargetNode=null}constructor(e){this.hooks=Pu({dropTarget:(n,a)=>{this.clearDropTarget(),this.dropTargetOptions=a,Zl(n)?this.dropTargetRef=n:this.dropTargetNode=n,this.reconnect()}}),this.handlerId=null,this.dropTargetRef=null,this.dropTargetOptionsInternal=null,this.lastConnectedHandlerId=null,this.lastConnectedDropTarget=null,this.lastConnectedDropTargetOptions=null,this.backend=e}};var rm=M(L(),1);function Mt(){let{dragDropManager:t}=(0,rm.useContext)(cn);return E(t!=null,"Expected drag drop context"),t}function cm(t,e){let n=Mt(),a=(0,om.useMemo)(()=>new Iu(n.getBackend()),[n]);return Ut(()=>(a.dragSourceOptions=t||null,a.reconnect(),()=>a.disconnectDragSource()),[a,t]),Ut(()=>(a.dragPreviewOptions=e||null,a.reconnect(),()=>a.disconnectDragPreview()),[a,e]),a}var sm=M(L(),1);function fm(){let t=Mt();return(0,sm.useMemo)(()=>new Ju(t),[t])}var tr=M(L(),1);var Fu=class{beginDrag(){let e=this.spec,n=this.monitor,a=null;return typeof e.item=="object"?a=e.item:typeof e.item=="function"?a=e.item(n):a={},a??null}canDrag(){let e=this.spec,n=this.monitor;return typeof e.canDrag=="boolean"?e.canDrag:typeof e.canDrag=="function"?e.canDrag(n):!0}isDragging(e,n){let a=this.spec,l=this.monitor,{isDragging:i}=a;return i?i(l):n===e.getSourceId()}endDrag(){let e=this.spec,n=this.monitor,a=this.connector,{end:l}=e;l&&l(n.getItem(),n),a.reconnect()}constructor(e,n,a){this.spec=e,this.monitor=n,this.connector=a}};function dm(t,e,n){let a=(0,tr.useMemo)(()=>new Fu(t,e,n),[e,n]);return(0,tr.useEffect)(()=>{a.spec=t},[t]),a}var hm=M(L(),1);function gm(t){return(0,hm.useMemo)(()=>{let e=t.type;return E(e!=null,"spec.type must be defined"),e},[t])}function pm(t,e,n){let a=Mt(),l=dm(t,e,n),i=gm(t);Ut(function(){if(i!=null){let[r,o]=im(i,l,a);return e.receiveHandlerId(r),n.receiveHandlerId(r),o}},[a,e,n,l,i])}function er(t,e){let n=ku(t,e);E(!n.begin,"useDrag::spec.begin was deprecated in v14. Replace spec.begin() with spec.item(). (see more here - https://react-dnd.github.io/react-dnd/docs/api/use-drag)");let a=fm(),l=cm(n.options,n.previewOptions);return pm(n,a,l),[Ku(n.collect,a,l),nm(l),am(l)]}var ds=M(L(),1);function mm(t){let n=Mt().getMonitor(),[a,l]=Zu(n,t);return(0,ds.useEffect)(()=>n.subscribeToOffsetChange(l)),(0,ds.useEffect)(()=>n.subscribeToStateChange(l)),a}var vm=M(L(),1);function ym(t){return(0,vm.useMemo)(()=>t.hooks.dropTarget(),[t])}var Sm=M(L(),1);function bm(t){let e=Mt(),n=(0,Sm.useMemo)(()=>new $u(e.getBackend()),[e]);return Ut(()=>(n.dropTargetOptions=t||null,n.reconnect(),()=>n.disconnectDropTarget()),[t]),n}var Dm=M(L(),1);function Em(){let t=Mt();return(0,Dm.useMemo)(()=>new Wu(t),[t])}var Tm=M(L(),1);function Om(t){let{accept:e}=t;return(0,Tm.useMemo)(()=>(E(t.accept!=null,"accept must be defined"),Array.isArray(e)?e:[e]),[e])}var ar=M(L(),1);var nr=class{canDrop(){let e=this.spec,n=this.monitor;return e.canDrop?e.canDrop(n.getItem(),n):!0}hover(){let e=this.spec,n=this.monitor;e.hover&&e.hover(n.getItem(),n)}drop(){let e=this.spec,n=this.monitor;if(e.drop)return e.drop(n.getItem(),n)}constructor(e,n){this.spec=e,this.monitor=n}};function Mm(t,e){let n=(0,ar.useMemo)(()=>new nr(t,e),[e]);return(0,ar.useEffect)(()=>{n.spec=t},[t]),n}function xm(t,e,n){let a=Mt(),l=Mm(t,e),i=Om(t);Ut(function(){let[r,o]=lm(i,l,a);return e.receiveHandlerId(r),n.receiveHandlerId(r),o},[a,e,l,n,i.map(u=>u.toString()).join("|")])}function lr(t,e){let n=ku(t,e),a=Em(),l=bm(n.options);return xm(n,a,l),[Ku(n.collect,a,l),ym(l)]}function hs(t){let e=null;return()=>(e==null&&(e=t()),e)}function Cm(t,e){return t.filter(n=>n!==e)}function Nm(t,e){let n=new Set,a=i=>n.add(i);t.forEach(a),e.forEach(a);let l=[];return n.forEach(i=>l.push(i)),l}var ir=class{enter(e){let n=this.entered.length,a=l=>this.isNodeInDocument(l)&&(!l.contains||l.contains(e));return this.entered=Nm(this.entered.filter(a),[e]),n===0&&this.entered.length>0}leave(e){let n=this.entered.length;return this.entered=Cm(this.entered.filter(this.isNodeInDocument),e),n>0&&this.entered.length===0}reset(){this.entered=[]}constructor(e){this.entered=[],this.isNodeInDocument=e}};var ur=class{initializeExposedProperties(){Object.keys(this.config.exposeProperties).forEach(e=>{Object.defineProperty(this.item,e,{configurable:!0,enumerable:!0,get(){return console.warn(`Browser doesn't allow reading "${e}" until the drop event.`),null}})})}loadDataTransfer(e){if(e){let n={};Object.keys(this.config.exposeProperties).forEach(a=>{let l=this.config.exposeProperties[a];l!=null&&(n[a]={value:l(e,this.config.matchesTypes),configurable:!0,enumerable:!0})}),Object.defineProperties(this.item,n)}}canDrag(){return!0}beginDrag(){return this.item}isDragging(e,n){return n===e.getSourceId()}endDrag(){}constructor(e){this.config=e,this.item={},this.initializeExposedProperties()}};var kl={};yv(kl,{FILE:()=>gs,HTML:()=>vs,TEXT:()=>ms,URL:()=>ps});var gs="__NATIVE_FILE__",ps="__NATIVE_URL__",ms="__NATIVE_TEXT__",vs="__NATIVE_HTML__";function rr(t,e,n){let a=e.reduce((l,i)=>l||t.getData(i),"");return a??n}var or={[gs]:{exposeProperties:{files:t=>Array.prototype.slice.call(t.files),items:t=>t.items,dataTransfer:t=>t},matchesTypes:["Files"]},[vs]:{exposeProperties:{html:(t,e)=>rr(t,e,""),dataTransfer:t=>t},matchesTypes:["Html","text/html"]},[ps]:{exposeProperties:{urls:(t,e)=>rr(t,e,"").split(` +`),dataTransfer:t=>t},matchesTypes:["Url","text/uri-list"]},[ms]:{exposeProperties:{text:(t,e)=>rr(t,e,""),dataTransfer:t=>t},matchesTypes:["Text","text/plain"]}};function Am(t,e){let n=or[t];if(!n)throw new Error(`native type ${t} has no configuration`);let a=new ur(n);return a.loadDataTransfer(e),a}function cr(t){if(!t)return null;let e=Array.prototype.slice.call(t.types||[]);return Object.keys(or).filter(n=>{let a=or[n];return a?.matchesTypes?a.matchesTypes.some(l=>e.indexOf(l)>-1):!1})[0]||null}var Rm=hs(()=>/firefox/i.test(navigator.userAgent)),ys=hs(()=>!!window.safari);var Jl=class{interpolate(e){let{xs:n,ys:a,c1s:l,c2s:i,c3s:u}=this,r=n.length-1;if(e===n[r])return a[r];let o=0,c=u.length-1,h;for(;o<=c;){h=Math.floor(.5*(o+c));let p=n[h];if(pe)c=h-1;else return a[h]}r=Math.max(0,c);let m=e-n[r],d=m*m;return a[r]+l[r]*m+i[r]*d+u[r]*m*d}constructor(e,n){let{length:a}=e,l=[];for(let y=0;ye[y]{let A=new Jl([0,.5,1],[o.y,o.y/h*y,o.y+y-h]).interpolate(d);return ys()&&i&&(A+=(window.devicePixelRatio-1)*y),A},C=()=>new Jl([0,.5,1],[o.x,o.x/c*p,o.x+p-c]).interpolate(m),{offsetX:f,offsetY:s}=l,g=f===0||f,v=s===0||s;return{x:g?f:C(),y:v?s:b()}}var sr=class{get window(){if(this.globalContext)return this.globalContext;if(typeof window<"u")return window}get document(){var e;return!((e=this.globalContext)===null||e===void 0)&&e.document?this.globalContext.document:this.window?this.window.document:void 0}get rootElement(){var e;return((e=this.optionsArgs)===null||e===void 0?void 0:e.rootElement)||this.window}constructor(e,n){this.ownerDocument=null,this.globalContext=e,this.optionsArgs=n}};function e1(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function wm(t){for(var e=1;e{this.sourcePreviewNodes.delete(e),this.sourcePreviewNodeOptions.delete(e)}}connectDragSource(e,n,a){this.sourceNodes.set(e,n),this.sourceNodeOptions.set(e,a);let l=u=>this.handleDragStart(u,e),i=u=>this.handleSelectStart(u);return n.setAttribute("draggable","true"),n.addEventListener("dragstart",l),n.addEventListener("selectstart",i),()=>{this.sourceNodes.delete(e),this.sourceNodeOptions.delete(e),n.removeEventListener("dragstart",l),n.removeEventListener("selectstart",i),n.setAttribute("draggable","false")}}connectDropTarget(e,n){let a=u=>this.handleDragEnter(u,e),l=u=>this.handleDragOver(u,e),i=u=>this.handleDrop(u,e);return n.addEventListener("dragenter",a),n.addEventListener("dragover",l),n.addEventListener("drop",i),()=>{n.removeEventListener("dragenter",a),n.removeEventListener("dragover",l),n.removeEventListener("drop",i)}}addEventListeners(e){e.addEventListener&&(e.addEventListener("dragstart",this.handleTopDragStart),e.addEventListener("dragstart",this.handleTopDragStartCapture,!0),e.addEventListener("dragend",this.handleTopDragEndCapture,!0),e.addEventListener("dragenter",this.handleTopDragEnter),e.addEventListener("dragenter",this.handleTopDragEnterCapture,!0),e.addEventListener("dragleave",this.handleTopDragLeaveCapture,!0),e.addEventListener("dragover",this.handleTopDragOver),e.addEventListener("dragover",this.handleTopDragOverCapture,!0),e.addEventListener("drop",this.handleTopDrop),e.addEventListener("drop",this.handleTopDropCapture,!0))}removeEventListeners(e){e.removeEventListener&&(e.removeEventListener("dragstart",this.handleTopDragStart),e.removeEventListener("dragstart",this.handleTopDragStartCapture,!0),e.removeEventListener("dragend",this.handleTopDragEndCapture,!0),e.removeEventListener("dragenter",this.handleTopDragEnter),e.removeEventListener("dragenter",this.handleTopDragEnterCapture,!0),e.removeEventListener("dragleave",this.handleTopDragLeaveCapture,!0),e.removeEventListener("dragover",this.handleTopDragOver),e.removeEventListener("dragover",this.handleTopDragOverCapture,!0),e.removeEventListener("drop",this.handleTopDrop),e.removeEventListener("drop",this.handleTopDropCapture,!0))}getCurrentSourceNodeOptions(){let e=this.monitor.getSourceId(),n=this.sourceNodeOptions.get(e);return wm({dropEffect:this.altKeyPressed?"copy":"move"},n||{})}getCurrentDropEffect(){return this.isDraggingNativeItem()?"copy":this.getCurrentSourceNodeOptions().dropEffect}getCurrentSourcePreviewNodeOptions(){let e=this.monitor.getSourceId(),n=this.sourcePreviewNodeOptions.get(e);return wm({anchorX:.5,anchorY:.5,captureDraggingState:!1},n||{})}isDraggingNativeItem(){let e=this.monitor.getItemType();return Object.keys(kl).some(n=>kl[n]===e)}beginDragNativeItem(e,n){this.clearCurrentDragSourceNode(),this.currentNativeSource=Am(e,n),this.currentNativeHandle=this.registry.addSource(e,this.currentNativeSource),this.actions.beginDrag([this.currentNativeHandle])}setCurrentDragSourceNode(e){this.clearCurrentDragSourceNode(),this.currentDragSourceNode=e;let n=1e3;this.mouseMoveTimeoutTimer=setTimeout(()=>{var a;return(a=this.rootElement)===null||a===void 0?void 0:a.addEventListener("mousemove",this.endDragIfSourceWasRemovedFromDOM,!0)},n)}clearCurrentDragSourceNode(){if(this.currentDragSourceNode){if(this.currentDragSourceNode=null,this.rootElement){var e;(e=this.window)===null||e===void 0||e.clearTimeout(this.mouseMoveTimeoutTimer||void 0),this.rootElement.removeEventListener("mousemove",this.endDragIfSourceWasRemovedFromDOM,!0)}return this.mouseMoveTimeoutTimer=null,!0}return!1}handleDragStart(e,n){e.defaultPrevented||(this.dragStartSourceIds||(this.dragStartSourceIds=[]),this.dragStartSourceIds.unshift(n))}handleDragEnter(e,n){this.dragEnterTargetIds.unshift(n)}handleDragOver(e,n){this.dragOverTargetIds===null&&(this.dragOverTargetIds=[]),this.dragOverTargetIds.unshift(n)}handleDrop(e,n){this.dropTargetIds.unshift(n)}constructor(e,n,a){this.sourcePreviewNodes=new Map,this.sourcePreviewNodeOptions=new Map,this.sourceNodes=new Map,this.sourceNodeOptions=new Map,this.dragStartSourceIds=null,this.dropTargetIds=[],this.dragEnterTargetIds=[],this.currentNativeSource=null,this.currentNativeHandle=null,this.currentDragSourceNode=null,this.altKeyPressed=!1,this.mouseMoveTimeoutTimer=null,this.asyncEndDragFrameId=null,this.dragOverTargetIds=null,this.lastClientOffset=null,this.hoverRafId=null,this.getSourceClientOffset=l=>{let i=this.sourceNodes.get(l);return i&&Ss(i)||null},this.endDragNativeItem=()=>{this.isDraggingNativeItem()&&(this.actions.endDrag(),this.currentNativeHandle&&this.registry.removeSource(this.currentNativeHandle),this.currentNativeHandle=null,this.currentNativeSource=null)},this.isNodeInDocument=l=>!!(l&&this.document&&this.document.body&&this.document.body.contains(l)),this.endDragIfSourceWasRemovedFromDOM=()=>{let l=this.currentDragSourceNode;l==null||this.isNodeInDocument(l)||(this.clearCurrentDragSourceNode()&&this.monitor.isDragging()&&this.actions.endDrag(),this.cancelHover())},this.scheduleHover=l=>{this.hoverRafId===null&&typeof requestAnimationFrame<"u"&&(this.hoverRafId=requestAnimationFrame(()=>{this.monitor.isDragging()&&this.actions.hover(l||[],{clientOffset:this.lastClientOffset}),this.hoverRafId=null}))},this.cancelHover=()=>{this.hoverRafId!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(this.hoverRafId),this.hoverRafId=null)},this.handleTopDragStartCapture=()=>{this.clearCurrentDragSourceNode(),this.dragStartSourceIds=[]},this.handleTopDragStart=l=>{if(l.defaultPrevented)return;let{dragStartSourceIds:i}=this;this.dragStartSourceIds=null;let u=Wl(l);this.monitor.isDragging()&&(this.actions.endDrag(),this.cancelHover()),this.actions.beginDrag(i||[],{publishSource:!1,getSourceClientOffset:this.getSourceClientOffset,clientOffset:u});let{dataTransfer:r}=l,o=cr(r);if(this.monitor.isDragging()){if(r&&typeof r.setDragImage=="function"){let h=this.monitor.getSourceId(),m=this.sourceNodes.get(h),d=this.sourcePreviewNodes.get(h)||m;if(d){let{anchorX:p,anchorY:y,offsetX:b,offsetY:C}=this.getCurrentSourcePreviewNodeOptions(),g=_m(m,d,u,{anchorX:p,anchorY:y},{offsetX:b,offsetY:C});r.setDragImage(d,g.x,g.y)}}try{r?.setData("application/json",{})}catch{}this.setCurrentDragSourceNode(l.target);let{captureDraggingState:c}=this.getCurrentSourcePreviewNodeOptions();c?this.actions.publishDragSource():setTimeout(()=>this.actions.publishDragSource(),0)}else if(o)this.beginDragNativeItem(o);else{if(r&&!r.types&&(l.target&&!l.target.hasAttribute||!l.target.hasAttribute("draggable")))return;l.preventDefault()}},this.handleTopDragEndCapture=()=>{this.clearCurrentDragSourceNode()&&this.monitor.isDragging()&&this.actions.endDrag(),this.cancelHover()},this.handleTopDragEnterCapture=l=>{if(this.dragEnterTargetIds=[],this.isDraggingNativeItem()){var i;(i=this.currentNativeSource)===null||i===void 0||i.loadDataTransfer(l.dataTransfer)}if(!this.enterLeaveCounter.enter(l.target)||this.monitor.isDragging())return;let{dataTransfer:r}=l,o=cr(r);o&&this.beginDragNativeItem(o,r)},this.handleTopDragEnter=l=>{let{dragEnterTargetIds:i}=this;if(this.dragEnterTargetIds=[],!this.monitor.isDragging())return;this.altKeyPressed=l.altKey,i.length>0&&this.actions.hover(i,{clientOffset:Wl(l)}),i.some(r=>this.monitor.canDropOnTarget(r))&&(l.preventDefault(),l.dataTransfer&&(l.dataTransfer.dropEffect=this.getCurrentDropEffect()))},this.handleTopDragOverCapture=l=>{if(this.dragOverTargetIds=[],this.isDraggingNativeItem()){var i;(i=this.currentNativeSource)===null||i===void 0||i.loadDataTransfer(l.dataTransfer)}},this.handleTopDragOver=l=>{let{dragOverTargetIds:i}=this;if(this.dragOverTargetIds=[],!this.monitor.isDragging()){l.preventDefault(),l.dataTransfer&&(l.dataTransfer.dropEffect="none");return}this.altKeyPressed=l.altKey,this.lastClientOffset=Wl(l),this.scheduleHover(i),(i||[]).some(r=>this.monitor.canDropOnTarget(r))?(l.preventDefault(),l.dataTransfer&&(l.dataTransfer.dropEffect=this.getCurrentDropEffect())):this.isDraggingNativeItem()?l.preventDefault():(l.preventDefault(),l.dataTransfer&&(l.dataTransfer.dropEffect="none"))},this.handleTopDragLeaveCapture=l=>{this.isDraggingNativeItem()&&l.preventDefault(),this.enterLeaveCounter.leave(l.target)&&(this.isDraggingNativeItem()&&setTimeout(()=>this.endDragNativeItem(),0),this.cancelHover())},this.handleTopDropCapture=l=>{if(this.dropTargetIds=[],this.isDraggingNativeItem()){var i;l.preventDefault(),(i=this.currentNativeSource)===null||i===void 0||i.loadDataTransfer(l.dataTransfer)}else cr(l.dataTransfer)&&l.preventDefault();this.enterLeaveCounter.reset()},this.handleTopDrop=l=>{let{dropTargetIds:i}=this;this.dropTargetIds=[],this.actions.hover(i,{clientOffset:Wl(l)}),this.actions.drop({dropEffect:this.getCurrentDropEffect()}),this.isDraggingNativeItem()?this.endDragNativeItem():this.monitor.isDragging()&&this.actions.endDrag(),this.cancelHover()},this.handleSelectStart=l=>{let i=l.target;typeof i.dragDrop=="function"&&(i.tagName==="INPUT"||i.tagName==="SELECT"||i.tagName==="TEXTAREA"||i.isContentEditable||(l.preventDefault(),i.dragDrop()))},this.options=new sr(n,a),this.actions=e.getActions(),this.monitor=e.getMonitor(),this.registry=e.getRegistry(),this.enterLeaveCounter=new ir(this.isNodeInDocument)}};var zm=function(e,n,a){return new fr(e,n,a)};var we;(function(t){t.mouse="mouse",t.touch="touch",t.keyboard="keyboard"})(we||(we={}));var dr=class{get delay(){var e;return(e=this.args.delay)!==null&&e!==void 0?e:0}get scrollAngleRanges(){return this.args.scrollAngleRanges}get getDropTargetElementsAtPoint(){return this.args.getDropTargetElementsAtPoint}get ignoreContextMenu(){var e;return(e=this.args.ignoreContextMenu)!==null&&e!==void 0?e:!1}get enableHoverOutsideTarget(){var e;return(e=this.args.enableHoverOutsideTarget)!==null&&e!==void 0?e:!1}get enableKeyboardEvents(){var e;return(e=this.args.enableKeyboardEvents)!==null&&e!==void 0?e:!1}get enableMouseEvents(){var e;return(e=this.args.enableMouseEvents)!==null&&e!==void 0?e:!1}get enableTouchEvents(){var e;return(e=this.args.enableTouchEvents)!==null&&e!==void 0?e:!0}get touchSlop(){return this.args.touchSlop||0}get delayTouchStart(){var e,n,a,l;return(l=(a=(e=this.args)===null||e===void 0?void 0:e.delayTouchStart)!==null&&a!==void 0?a:(n=this.args)===null||n===void 0?void 0:n.delay)!==null&&l!==void 0?l:0}get delayMouseStart(){var e,n,a,l;return(l=(a=(e=this.args)===null||e===void 0?void 0:e.delayMouseStart)!==null&&a!==void 0?a:(n=this.args)===null||n===void 0?void 0:n.delay)!==null&&l!==void 0?l:0}get window(){if(this.context&&this.context.window)return this.context.window;if(typeof window<"u")return window}get document(){var e;if(!((e=this.context)===null||e===void 0)&&e.document)return this.context.document;if(this.window)return this.window.document}get rootElement(){var e;return((e=this.args)===null||e===void 0?void 0:e.rootElement)||this.document}constructor(e,n){this.args=e,this.context=n}};function Um(t,e,n,a){return Math.sqrt(Math.pow(Math.abs(n-t),2)+Math.pow(Math.abs(a-e),2))}function Hm(t,e,n,a,l){if(!l)return!1;let i=Math.atan2(a-e,n-t)*180/Math.PI+180;for(let u=0;u=r.start)&&(r.end==null||i<=r.end))return!0}return!1}var n1={Left:1,Right:2,Center:4},a1={Left:0,Center:1,Right:2};function hr(t){return t.button===void 0||t.button===a1.Left}function Bm(t){return t.buttons===void 0||(t.buttons&n1.Left)===0}function gr(t){return!!t.targetTouches}var l1=1;function qm(t){let e=t.nodeType===l1?t:t.parentElement;if(!e)return;let{top:n,left:a}=e.getBoundingClientRect();return{x:a,y:n}}function i1(t,e){if(t.targetTouches.length===1)return Pl(t.targetTouches[0]);if(e&&t.touches.length===1&&t.touches[0].target===e.target)return Pl(t.touches[0])}function Pl(t,e){return gr(t)?i1(t,e):{x:t.clientX,y:t.clientY}}var bs=(()=>{let t=!1;try{addEventListener("test",()=>{},Object.defineProperty({},"passive",{get(){return t=!0,!0}}))}catch{}return t})();var Il={[we.mouse]:{start:"mousedown",move:"mousemove",end:"mouseup",contextmenu:"contextmenu"},[we.touch]:{start:"touchstart",move:"touchmove",end:"touchend"},[we.keyboard]:{keydown:"keydown"}},pr=class t{profile(){var e;return{sourceNodes:this.sourceNodes.size,sourcePreviewNodes:this.sourcePreviewNodes.size,sourcePreviewNodeOptions:this.sourcePreviewNodeOptions.size,targetNodes:this.targetNodes.size,dragOverTargetIds:((e=this.dragOverTargetIds)===null||e===void 0?void 0:e.length)||0}}get document(){return this.options.document}setup(){let e=this.options.rootElement;e&&(E(!t.isSetUp,"Cannot have two Touch backends at the same time."),t.isSetUp=!0,this.addEventListener(e,"start",this.getTopMoveStartHandler()),this.addEventListener(e,"start",this.handleTopMoveStartCapture,!0),this.addEventListener(e,"move",this.handleTopMove),this.addEventListener(e,"move",this.handleTopMoveCapture,!0),this.addEventListener(e,"end",this.handleTopMoveEndCapture,!0),this.options.enableMouseEvents&&!this.options.ignoreContextMenu&&this.addEventListener(e,"contextmenu",this.handleTopMoveEndCapture),this.options.enableKeyboardEvents&&this.addEventListener(e,"keydown",this.handleCancelOnEscape,!0))}teardown(){let e=this.options.rootElement;e&&(t.isSetUp=!1,this._mouseClientOffset={},this.removeEventListener(e,"start",this.handleTopMoveStartCapture,!0),this.removeEventListener(e,"start",this.handleTopMoveStart),this.removeEventListener(e,"move",this.handleTopMoveCapture,!0),this.removeEventListener(e,"move",this.handleTopMove),this.removeEventListener(e,"end",this.handleTopMoveEndCapture,!0),this.options.enableMouseEvents&&!this.options.ignoreContextMenu&&this.removeEventListener(e,"contextmenu",this.handleTopMoveEndCapture),this.options.enableKeyboardEvents&&this.removeEventListener(e,"keydown",this.handleCancelOnEscape,!0),this.uninstallSourceNodeRemovalObserver())}addEventListener(e,n,a,l=!1){let i=bs?{capture:l,passive:!1}:l;this.listenerTypes.forEach(function(u){let r=Il[u][n];r&&e.addEventListener(r,a,i)})}removeEventListener(e,n,a,l=!1){let i=bs?{capture:l,passive:!1}:l;this.listenerTypes.forEach(function(u){let r=Il[u][n];r&&e.removeEventListener(r,a,i)})}connectDragSource(e,n){let a=this.handleMoveStart.bind(this,e);return this.sourceNodes.set(e,n),this.addEventListener(n,"start",a),()=>{this.sourceNodes.delete(e),this.removeEventListener(n,"start",a)}}connectDragPreview(e,n,a){return this.sourcePreviewNodeOptions.set(e,a),this.sourcePreviewNodes.set(e,n),()=>{this.sourcePreviewNodes.delete(e),this.sourcePreviewNodeOptions.delete(e)}}connectDropTarget(e,n){let a=this.options.rootElement;if(!this.document||!a)return()=>{};let l=i=>{if(!this.document||!a||!this.monitor.isDragging())return;let u;switch(i.type){case Il.mouse.move:u={x:i.clientX,y:i.clientY};break;case Il.touch.move:var r,o;u={x:((r=i.touches[0])===null||r===void 0?void 0:r.clientX)||0,y:((o=i.touches[0])===null||o===void 0?void 0:o.clientY)||0};break}let c=u!=null?this.document.elementFromPoint(u.x,u.y):void 0,h=c&&n.contains(c);if(c===n||h)return this.handleMove(i,e)};return this.addEventListener(this.document.body,"move",l),this.targetNodes.set(e,n),()=>{this.document&&(this.targetNodes.delete(e),this.removeEventListener(this.document.body,"move",l))}}getTopMoveStartHandler(){return!this.options.delayTouchStart&&!this.options.delayMouseStart?this.handleTopMoveStart:this.handleTopMoveStartDelay}installSourceNodeRemovalObserver(e){this.uninstallSourceNodeRemovalObserver(),this.draggedSourceNode=e,this.draggedSourceNodeRemovalObserver=new MutationObserver(()=>{e&&!e.parentElement&&(this.resurrectSourceNode(),this.uninstallSourceNodeRemovalObserver())}),!(!e||!e.parentElement)&&this.draggedSourceNodeRemovalObserver.observe(e.parentElement,{childList:!0})}resurrectSourceNode(){this.document&&this.draggedSourceNode&&(this.draggedSourceNode.style.display="none",this.draggedSourceNode.removeAttribute("data-reactid"),this.document.body.appendChild(this.draggedSourceNode))}uninstallSourceNodeRemovalObserver(){this.draggedSourceNodeRemovalObserver&&this.draggedSourceNodeRemovalObserver.disconnect(),this.draggedSourceNodeRemovalObserver=void 0,this.draggedSourceNode=void 0}constructor(e,n,a){this.getSourceClientOffset=l=>{let i=this.sourceNodes.get(l);return i&&qm(i)},this.handleTopMoveStartCapture=l=>{hr(l)&&(this.moveStartSourceIds=[])},this.handleMoveStart=l=>{Array.isArray(this.moveStartSourceIds)&&this.moveStartSourceIds.unshift(l)},this.handleTopMoveStart=l=>{if(!hr(l))return;let i=Pl(l);i&&(gr(l)&&(this.lastTargetTouchFallback=l.targetTouches[0]),this._mouseClientOffset=i),this.waitingForDelay=!1},this.handleTopMoveStartDelay=l=>{if(!hr(l))return;let i=l.type===Il.touch.start?this.options.delayTouchStart:this.options.delayMouseStart;this.timeout=setTimeout(this.handleTopMoveStart.bind(this,l),i),this.waitingForDelay=!0},this.handleTopMoveCapture=()=>{this.dragOverTargetIds=[]},this.handleMove=(l,i)=>{this.dragOverTargetIds&&this.dragOverTargetIds.unshift(i)},this.handleTopMove=l=>{if(this.timeout&&clearTimeout(this.timeout),!this.document||this.waitingForDelay)return;let{moveStartSourceIds:i,dragOverTargetIds:u}=this,r=this.options.enableHoverOutsideTarget,o=Pl(l,this.lastTargetTouchFallback);if(!o)return;if(this._isScrolling||!this.monitor.isDragging()&&Hm(this._mouseClientOffset.x||0,this._mouseClientOffset.y||0,o.x,o.y,this.options.scrollAngleRanges)){this._isScrolling=!0;return}if(!this.monitor.isDragging()&&this._mouseClientOffset.hasOwnProperty("x")&&i&&Um(this._mouseClientOffset.x||0,this._mouseClientOffset.y||0,o.x,o.y)>(this.options.touchSlop?this.options.touchSlop:0)&&(this.moveStartSourceIds=void 0,this.actions.beginDrag(i,{clientOffset:this._mouseClientOffset,getSourceClientOffset:this.getSourceClientOffset,publishSource:!1})),!this.monitor.isDragging())return;let c=this.sourceNodes.get(this.monitor.getSourceId());this.installSourceNodeRemovalObserver(c),this.actions.publishDragSource(),l.cancelable&&l.preventDefault();let h=(u||[]).map(y=>this.targetNodes.get(y)).filter(y=>!!y),m=this.options.getDropTargetElementsAtPoint?this.options.getDropTargetElementsAtPoint(o.x,o.y,h):this.document.elementsFromPoint(o.x,o.y),d=[];for(let y in m){if(!m.hasOwnProperty(y))continue;let b=m[y];for(b!=null&&d.push(b);b;)b=b.parentElement,b&&d.indexOf(b)===-1&&d.push(b)}let p=d.filter(y=>h.indexOf(y)>-1).map(y=>this._getDropTargetId(y)).filter(y=>!!y).filter((y,b,C)=>C.indexOf(y)===b);if(r)for(let y in this.targetNodes){let b=this.targetNodes.get(y);if(c&&b&&b.contains(c)&&p.indexOf(y)===-1){p.unshift(y);break}}p.reverse(),this.actions.hover(p,{clientOffset:o})},this._getDropTargetId=l=>{let i=this.targetNodes.keys(),u=i.next();for(;u.done===!1;){let r=u.value;if(l===this.targetNodes.get(r))return r;u=i.next()}},this.handleTopMoveEndCapture=l=>{if(this._isScrolling=!1,this.lastTargetTouchFallback=void 0,!!Bm(l)){if(!this.monitor.isDragging()||this.monitor.didDrop()){this.moveStartSourceIds=void 0;return}l.cancelable&&l.preventDefault(),this._mouseClientOffset={},this.uninstallSourceNodeRemovalObserver(),this.actions.drop(),this.actions.endDrag()}},this.handleCancelOnEscape=l=>{l.key==="Escape"&&this.monitor.isDragging()&&(this._mouseClientOffset={},this.uninstallSourceNodeRemovalObserver(),this.actions.endDrag())},this.options=new dr(a,n),this.actions=e.getActions(),this.monitor=e.getMonitor(),this.sourceNodes=new Map,this.sourcePreviewNodes=new Map,this.sourcePreviewNodeOptions=new Map,this.targetNodes=new Map,this.listenerTypes=[],this._mouseClientOffset={},this._isScrolling=!1,this.options.enableMouseEvents&&this.listenerTypes.push(we.mouse),this.options.enableTouchEvents&&this.listenerTypes.push(we.touch),this.options.enableKeyboardEvents&&this.listenerTypes.push(we.keyboard)}};var Lm=function(e,n={},a={}){return new pr(e,n,a)};var Ym=t=>{throw TypeError(t)},jm=(t,e,n)=>e.has(t)||Ym("Cannot "+n),x=(t,e,n)=>(jm(t,e,"read from private field"),n?n.call(t):e.get(t)),It=(t,e,n)=>e.has(t)?Ym("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),jn=(t,e,n,a)=>(jm(t,e,"write to private field"),a?a.call(t,n):e.set(t,n),n),gn,u1=class{constructor(){It(this,gn),this.register=t=>{x(this,gn).push(t)},this.unregister=t=>{for(;x(this,gn).indexOf(t)!==-1;)x(this,gn).splice(x(this,gn).indexOf(t),1)},this.backendChanged=t=>{for(let e of x(this,gn))e.backendChanged(t)},jn(this,gn,[])}};gn=new WeakMap;var Ht,$l,Bt,ze,Gn,Ds,Es,Ts,mr,vr,Fl,Gm=class yr{constructor(e,n,a){if(It(this,Ht),It(this,$l),It(this,Bt),It(this,ze),It(this,Gn),It(this,Ds,(l,i,u)=>{if(!u.backend)throw new Error(`You must specify a 'backend' property in your Backend entry: ${JSON.stringify(u)}`);let r=u.backend(l,i,u.options),o=u.id,c=!u.id&&r&&r.constructor;if(c&&(o=r.constructor.name),!o)throw new Error(`You must specify an 'id' property in your Backend entry: ${JSON.stringify(u)} + see this guide: https://github.com/louisbrunner/dnd-multi-backend/tree/master/packages/react-dnd-multi-backend#migrating-from-5xx`);if(c&&console.warn(`Deprecation notice: You are using a pipeline which doesn't include backends' 'id'. + This might be unsupported in the future, please specify 'id' explicitely for every backend.`),x(this,Bt)[o])throw new Error(`You must specify a unique 'id' property in your Backend entry: + ${JSON.stringify(u)} (conflicts with: ${JSON.stringify(x(this,Bt)[o])})`);return{id:o,instance:r,preview:u.preview??!1,transition:u.transition,skipDispatchOnTransition:u.skipDispatchOnTransition??!1}}),this.setup=()=>{if(!(typeof window>"u")){if(yr.isSetUp)throw new Error("Cannot have two MultiBackends at the same time.");yr.isSetUp=!0,x(this,Es).call(this,window),x(this,Bt)[x(this,Ht)].instance.setup()}},this.teardown=()=>{typeof window>"u"||(yr.isSetUp=!1,x(this,Ts).call(this,window),x(this,Bt)[x(this,Ht)].instance.teardown())},this.connectDragSource=(l,i,u)=>x(this,Fl).call(this,"connectDragSource",l,i,u),this.connectDragPreview=(l,i,u)=>x(this,Fl).call(this,"connectDragPreview",l,i,u),this.connectDropTarget=(l,i,u)=>x(this,Fl).call(this,"connectDropTarget",l,i,u),this.profile=()=>x(this,Bt)[x(this,Ht)].instance.profile(),this.previewEnabled=()=>x(this,Bt)[x(this,Ht)].preview,this.previewsList=()=>x(this,$l),this.backendsList=()=>x(this,ze),It(this,Es,l=>{for(let i of x(this,ze))i.transition&&l.addEventListener(i.transition.event,x(this,mr))}),It(this,Ts,l=>{for(let i of x(this,ze))i.transition&&l.removeEventListener(i.transition.event,x(this,mr))}),It(this,mr,l=>{let i=x(this,Ht);if(x(this,ze).some(u=>u.id!==x(this,Ht)&&u.transition&&u.transition.check(l)?(jn(this,Ht,u.id),!0):!1),x(this,Ht)!==i){x(this,Bt)[i].instance.teardown();for(let[c,h]of Object.entries(x(this,Gn)))h.unsubscribe(),h.unsubscribe=x(this,vr).call(this,h.func,...h.args);x(this,$l).backendChanged(this);let u=x(this,Bt)[x(this,Ht)];if(u.instance.setup(),u.skipDispatchOnTransition)return;let r=l.constructor,o=new r(l.type,l);l.target?.dispatchEvent(o)}}),It(this,vr,(l,i,u,r)=>x(this,Bt)[x(this,Ht)].instance[l](i,u,r)),It(this,Fl,(l,i,u,r)=>{let o=`${l}_${i}`,c=x(this,vr).call(this,l,i,u,r);return x(this,Gn)[o]={func:l,args:[i,u,r],unsubscribe:c},()=>{x(this,Gn)[o].unsubscribe(),delete x(this,Gn)[o]}}),!a||!a.backends||a.backends.length<1)throw new Error(`You must specify at least one Backend, if you are coming from 2.x.x (or don't understand this error) + see this guide: https://github.com/louisbrunner/dnd-multi-backend/tree/master/packages/react-dnd-multi-backend#migrating-from-2xx`);jn(this,$l,new u1),jn(this,Bt,{}),jn(this,ze,[]);for(let l of a.backends){let i=x(this,Ds).call(this,e,n,l);x(this,Bt)[i.id]=i,x(this,ze).push(i)}jn(this,Ht,x(this,ze)[0].id),jn(this,Gn,{})}};Ht=new WeakMap,$l=new WeakMap,Bt=new WeakMap,ze=new WeakMap,Gn=new WeakMap,Ds=new WeakMap,Es=new WeakMap,Ts=new WeakMap,mr=new WeakMap,vr=new WeakMap,Fl=new WeakMap,Gm.isSetUp=!1;var r1=Gm,Sr=(t,e,n)=>new r1(t,e,n),br=(t,e)=>({event:t,check:e}),Xm=br("touchstart",t=>{let e=t;return e.touches!==null&&e.touches!==void 0}),uO=br("dragstart",t=>t.type.indexOf("drag")!==-1||t.type.indexOf("drop")!==-1),rO=br("mousedown",t=>t.type.indexOf("touch")===-1&&t.type.indexOf("mouse")!==-1),Vm=br("pointerdown",t=>t.pointerType==="mouse");var Os={backends:[{id:"html5",backend:zm,transition:Vm},{id:"touch",backend:Lm,options:{enableMouseEvents:!0},preview:!0,transition:Xm}]};var Dr=M(L(),1);var ti=M(ut(),1),Ms=(0,Dr.createContext)(null),xs=({portal:t,...e})=>{let[n,a]=(0,Dr.useState)(null);return(0,ti.jsxs)(Ms.Provider,{value:t??n,children:[(0,ti.jsx)(Xu,{backend:Sr,...e}),t?null:(0,ti.jsx)("div",{ref:a})]})};var Jm=M(L(),1);var Qm=M(L(),1),Zm=M(L(),1);var Km=M(ut(),1),ei=(0,Qm.createContext)(void 0),Cs=(t,e)=>({x:t.x-e.x,y:t.y-e.y}),o1=(t,e)=>({x:t.x+e.x,y:t.y+e.y}),c1=t=>{let e=t.getInitialClientOffset(),n=t.getInitialSourceClientOffset();return e===null||n===null?{x:0,y:0}:Cs(e,n)},s1=(t,e)=>{switch(t){case"left":case"top-start":case"bottom-start":return 0;case"right":case"top-end":case"bottom-end":return e.width;default:return e.width/2}},f1=(t,e)=>{switch(t){case"top":case"top-start":case"top-end":return 0;case"bottom":case"bottom-start":case"bottom-end":return e.height;default:return e.height/2}},d1=(t,e,n="center",a={x:0,y:0})=>{let l=t.getClientOffset();if(l===null)return null;if(!e.current||!e.current.getBoundingClientRect)return Cs(l,c1(t));let i=e.current.getBoundingClientRect(),u={x:s1(n,i),y:f1(n,i)};return o1(Cs(l,u),a)},h1=t=>{let e=`translate(${t.x.toFixed(1)}px, ${t.y.toFixed(1)}px)`;return{pointerEvents:"none",position:"fixed",top:0,left:0,transform:e,WebkitTransform:e}},Ns=t=>{let e=(0,Zm.useRef)(null),n=mm(a=>({currentOffset:d1(a,e,t?.placement,t?.padding),isDragging:a.isDragging(),itemType:a.getItemType(),item:a.getItem(),monitor:a}));return!n.isDragging||n.currentOffset===null?{display:!1}:{display:!0,itemType:n.itemType,item:n.item,style:h1(n.currentOffset),monitor:n.monitor,ref:e}},km=t=>{let e=Ns({placement:t.placement,padding:t.padding});if(!e.display)return null;let{display:n,...a}=e,l;return"children"in t?typeof t.children=="function"?l=t.children(a):l=t.children:l=t.generator(a),(0,Km.jsx)(ei.Provider,{value:a,children:l})};var Wm=M(jr(),1);var Ua=M(L(),1);var Er=()=>{let[t,e]=(0,Ua.useState)(!1),n=(0,Ua.useContext)(cn);return(0,Ua.useEffect)(()=>{let a=n?.dragDropManager?.getBackend(),l={backendChanged:i=>{e(i.previewEnabled())}};return e(a.previewEnabled()),a.previewsList().register(l),()=>{a.previewsList().unregister(l)}},[n,n.dragDropManager]),t};var Pm=M(ut(),1),Tr=t=>{let e=Er(),n=(0,Jm.useContext)(Ms);if(!e)return null;let a=(0,Pm.jsx)(km,{...t});return n!==null?(0,Wm.createPortal)(a,n):a};Tr.Context=ei;var Im=M(L(),1);var g1=(t,e,n,a)=>{let l=n.getBackend();n.receiveBackend(a);let i=e(t);return n.receiveBackend(l),i},Or=(t,e)=>{let n=(0,Im.useContext)(cn),a=n?.dragDropManager?.getBackend();if(a===void 0)throw new Error("could not find backend, make sure you are using a ");let l=e(t),i={},u=a.backendsList();for(let r of u)i[r.id]=g1(t,e,n.dragDropManager,r.instance);return[l,i]};var $m=t=>Or(t,er);var Fm=t=>Or(t,lr);var tv=t=>{let e=Er(),n=Ns(t);return e?n:{display:!1}};var ev=M(L(),1),he=t=>(0,ev.useCallback)(e=>{t(e)},[t]);var av=M(ut(),1),nv=({logs:t})=>{let[e,n]=lr({accept:"card",drop:r=>{let o=`Dropped: ${r.color}`;t.current&&(t.current.innerHTML+=`${o}
`)},collect:r=>({isOver:r.isOver(),canDrop:r.canDrop()})}),a=e.isOver,l=e.canDrop,i={backgroundColor:a&&l?"#f3f3f3":"#cccccc",border:"1px dashed black",display:"inline-block",width:"100px",height:"100px",margin:"10px"},u=he(n);return(0,av.jsx)("div",{style:i,ref:u})};var lv=M(ut(),1),Mr=t=>{let[e,n]=er({type:"card",item:{color:t.color},collect:u=>({isDragging:u.isDragging()})}),a=e.isDragging,l={backgroundColor:t.color,opacity:a?.5:1,display:"inline-block",width:"100px",height:"100px",margin:"10px"},i=he(n);return(0,lv.jsx)("div",{style:l,ref:i})};var ni=M(ut(),1),iv=({logs:t})=>{let[e,{html5:[n,a],touch:[l,i]}]=Fm({accept:"card",drop:m=>{let d=`Dropped: ${m.color}`;t.current&&(t.current.innerHTML+=`${d}
`)},collect:m=>({isOver:m.isOver(),canDrop:m.canDrop()})}),u={border:"1px dashed black",display:"inline-block",margin:"10px"},r={backgroundColor:n.isOver&&n.canDrop?"#f3f3f3":"#bbbbbb",display:"inline-block",margin:"5px",width:"90px",height:"90px",textAlign:"center",userSelect:"none"},o={backgroundColor:l.isOver&&l.canDrop?"#f3f3f3":"#bbbbbb",display:"inline-block",margin:"5px",width:"90px",height:"90px",textAlign:"center",userSelect:"none"},c=he(a),h=he(i);return(0,ni.jsxs)("div",{style:u,children:[(0,ni.jsx)("div",{style:r,ref:c,children:"HTML5"}),(0,ni.jsx)("div",{style:o,ref:h,children:"Touch"})]})};var ai=M(ut(),1),uv=t=>{let[e,{html5:[n,a],touch:[l,i]}]=$m({type:"card",item:{color:t.color},collect:m=>({isDragging:m.isDragging()})}),u={display:"inline-block",margin:"10px"},r={backgroundColor:t.color,opacity:n.isDragging?.5:1,display:"inline-block",margin:"5px",width:"90px",height:"90px",textAlign:"center",userSelect:"none"},o={backgroundColor:t.color,opacity:l.isDragging?.5:1,display:"inline-block",margin:"5px",width:"90px",height:"90px",textAlign:"center",userSelect:"none"},c=he(a),h=he(i);return(0,ai.jsxs)("div",{style:u,children:[(0,ai.jsx)("div",{style:r,ref:c,children:"HTML5"}),(0,ai.jsx)("div",{style:o,ref:h,children:"Touch"})]})};var q=M(ut(),1),As=({row:t,text:e,item:n,style:a})=>(0,q.jsxs)("div",{style:{...a,top:`${t*60}px`,backgroundColor:n.color,width:"50px",height:"50px",whiteSpace:"nowrap"},children:["Generated ",e]}),p1=({text:t})=>{let e=(0,Ue.useContext)(ei);if(!e)throw new Error("missing preview context");let{style:n,item:a}=e;return(0,q.jsx)(As,{row:0,text:`${t} with Context`,item:a,style:n})},m1=({text:t})=>{let e=tv();if(!e.display)return null;let{style:n,item:a}=e;return(0,q.jsx)(As,{row:1,text:`${t} with Hook`,item:a,style:n})},v1=({text:t})=>(0,q.jsx)(Tr,{generator:({item:e,style:n})=>(0,q.jsx)(As,{row:2,text:`${t} with Component`,item:e,style:n})}),rv=({title:t,fref:e})=>(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)("h2",{children:[t," API"]}),(0,q.jsx)(Mr,{color:"#cc2211"}),(0,q.jsx)(Mr,{color:"#22cc11"}),(0,q.jsx)(Mr,{color:"#2211cc"}),(0,q.jsx)(nv,{logs:e}),(0,q.jsx)("br",{}),(0,q.jsx)(uv,{color:"#33ff77"}),(0,q.jsx)(iv,{logs:e}),(0,q.jsx)("br",{}),(0,q.jsx)("div",{ref:e}),(0,q.jsx)(Tr,{children:(0,q.jsx)(p1,{text:t})}),(0,q.jsx)(m1,{text:t}),(0,q.jsx)(v1,{text:t})]}),ov=()=>{let[t,e]=(0,Ue.useState)(!0),n=(0,Ue.useRef)(null),a=(0,Ue.useRef)(null);return(0,q.jsxs)(Ue.StrictMode,{children:[(0,q.jsxs)("div",{children:[(0,q.jsx)("input",{id:"api_selector",type:"checkbox",checked:t,onChange:u=>{e(u.target.checked)}}),(0,q.jsx)("label",{htmlFor:"api_selector",children:"Use New API"})]}),t?(0,q.jsx)(xs,{options:Os,children:(0,q.jsx)(rv,{title:"New",fref:a})}):(0,q.jsx)(Xu,{backend:Sr,options:Os,children:(0,q.jsx)(rv,{title:"Old",fref:n})})]})};var fv=M(ut(),1),sv=document.getElementById("root");if(!sv)throw new Error("could not find root element");var y1=(0,cv.createRoot)(sv);y1.render((0,fv.jsx)(ov,{}));})(); +/*! Bundled license information: + +scheduler/cjs/scheduler.production.js: + (** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react.production.js: + (** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom.production.js: + (** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom-client.production.js: + (** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react-jsx-runtime.production.js: + (** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/examples/examples_react-dnd-preview_main.min.js b/examples/examples_react-dnd-preview_main.min.js new file mode 100644 index 00000000..6e5aa9dc --- /dev/null +++ b/examples/examples_react-dnd-preview_main.min.js @@ -0,0 +1,66 @@ +"use strict";(()=>{var Zv=Object.create;var Rf=Object.defineProperty;var Kv=Object.getOwnPropertyDescriptor;var Jv=Object.getOwnPropertyNames;var kv=Object.getPrototypeOf,Wv=Object.prototype.hasOwnProperty;var Zt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Pv=(t,e,n,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of Jv(e))!Wv.call(t,u)&&u!==n&&Rf(t,u,{get:()=>e[u],enumerable:!(l=Kv(e,u))||l.enumerable});return t};var C=(t,e,n)=>(n=t!=null?Zv(kv(t)):{},Pv(e||!t||!t.__esModule?Rf(n,"default",{value:t,enumerable:!0}):n,t));var Bf=Zt(B=>{"use strict";function Xi(t,e){var n=t.length;t.push(e);t:for(;0>>1,u=t[l];if(0>>1;lLu(r,n))cLu(f,r)?(t[l]=f,t[c]=n,l=c):(t[l]=r,t[i]=n,l=i);else if(cLu(f,n))t[l]=f,t[c]=n,l=c;else break t}}return e}function Lu(t,e){var n=t.sortIndex-e.sortIndex;return n!==0?n:t.id-e.id}B.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(xf=performance,B.unstable_now=function(){return xf.now()}):(Bi=Date,Cf=Bi.now(),B.unstable_now=function(){return Bi.now()-Cf});var xf,Bi,Cf,Ft=[],Re=[],$v=1,Nt=null,dt=3,Zu=!1,an=!1,Rl=!1,Uf=typeof setTimeout=="function"?setTimeout:null,Hf=typeof clearTimeout=="function"?clearTimeout:null,Nf=typeof setImmediate<"u"?setImmediate:null;function Vu(t){for(var e=Kt(Re);e!==null;){if(e.callback===null)Qu(Re);else if(e.startTime<=t)Qu(Re),e.sortIndex=e.expirationTime,Xi(Ft,e);else break;e=Kt(Re)}}function Li(t){if(Rl=!1,Vu(t),!an)if(Kt(Ft)!==null)an=!0,Vi();else{var e=Kt(Re);e!==null&&Qi(Li,e.startTime-t)}}var Ku=!1,xl=-1,wf=5,qf=-1;function Gf(){return!(B.unstable_now()-qft&&Gf());){var l=Nt.callback;if(typeof l=="function"){Nt.callback=null,dt=Nt.priorityLevel;var u=l(Nt.expirationTime<=t);if(t=B.unstable_now(),typeof u=="function"){Nt.callback=u,Vu(t),e=!0;break e}Nt===Kt(Ft)&&Qu(Ft),Vu(t)}else Qu(Ft);Nt=Kt(Ft)}if(Nt!==null)e=!0;else{var a=Kt(Re);a!==null&&Qi(Li,a.startTime-t),e=!1}}break t}finally{Nt=null,dt=n,Zu=!1}e=void 0}}finally{e?_l():Ku=!1}}}var _l;typeof Nf=="function"?_l=function(){Nf(Yi)}:typeof MessageChannel<"u"?(ji=new MessageChannel,zf=ji.port2,ji.port1.onmessage=Yi,_l=function(){zf.postMessage(null)}):_l=function(){Uf(Yi,0)};var ji,zf;function Vi(){Ku||(Ku=!0,_l())}function Qi(t,e){xl=Uf(function(){t(B.unstable_now())},e)}B.unstable_IdlePriority=5;B.unstable_ImmediatePriority=1;B.unstable_LowPriority=4;B.unstable_NormalPriority=3;B.unstable_Profiling=null;B.unstable_UserBlockingPriority=2;B.unstable_cancelCallback=function(t){t.callback=null};B.unstable_continueExecution=function(){an||Zu||(an=!0,Vi())};B.unstable_forceFrameRate=function(t){0>t||125l?(t.sortIndex=n,Xi(Re,t),Kt(Ft)===null&&t===Kt(Re)&&(Rl?(Hf(xl),xl=-1):Rl=!0,Qi(Li,n-l))):(t.sortIndex=u,Xi(Ft,t),an||Zu||(an=!0,Vi())),t};B.unstable_shouldYield=Gf;B.unstable_wrapCallback=function(t){var e=dt;return function(){var n=dt;dt=e;try{return t.apply(this,arguments)}finally{dt=n}}}});var jf=Zt((L0,Yf)=>{"use strict";Yf.exports=Bf()});var Ff=Zt(A=>{"use strict";var Ki=Symbol.for("react.transitional.element"),Fv=Symbol.for("react.portal"),Iv=Symbol.for("react.fragment"),tm=Symbol.for("react.strict_mode"),em=Symbol.for("react.profiler"),nm=Symbol.for("react.consumer"),lm=Symbol.for("react.context"),um=Symbol.for("react.forward_ref"),am=Symbol.for("react.suspense"),im=Symbol.for("react.memo"),Kf=Symbol.for("react.lazy"),Xf=Symbol.iterator;function rm(t){return t===null||typeof t!="object"?null:(t=Xf&&t[Xf]||t["@@iterator"],typeof t=="function"?t:null)}var Jf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},kf=Object.assign,Wf={};function Hn(t,e,n){this.props=t,this.context=e,this.refs=Wf,this.updater=n||Jf}Hn.prototype.isReactComponent={};Hn.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};Hn.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Pf(){}Pf.prototype=Hn.prototype;function Ji(t,e,n){this.props=t,this.context=e,this.refs=Wf,this.updater=n||Jf}var ki=Ji.prototype=new Pf;ki.constructor=Ji;kf(ki,Hn.prototype);ki.isPureReactComponent=!0;var Lf=Array.isArray,Z={H:null,A:null,T:null,S:null},$f=Object.prototype.hasOwnProperty;function Wi(t,e,n,l,u,a){return n=a.ref,{$$typeof:Ki,type:t,key:e,ref:n!==void 0?n:null,props:a}}function cm(t,e){return Wi(t.type,e,void 0,void 0,void 0,t.props)}function Pi(t){return typeof t=="object"&&t!==null&&t.$$typeof===Ki}function fm(t){var e={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(n){return e[n]})}var Vf=/\/+/g;function Zi(t,e){return typeof t=="object"&&t!==null&&t.key!=null?fm(""+t.key):e.toString(36)}function Qf(){}function om(t){switch(t.status){case"fulfilled":return t.value;case"rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(Qf,Qf):(t.status="pending",t.then(function(e){t.status==="pending"&&(t.status="fulfilled",t.value=e)},function(e){t.status==="pending"&&(t.status="rejected",t.reason=e)})),t.status){case"fulfilled":return t.value;case"rejected":throw t.reason}}throw t}function Un(t,e,n,l,u){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var i=!1;if(t===null)i=!0;else switch(a){case"bigint":case"string":case"number":i=!0;break;case"object":switch(t.$$typeof){case Ki:case Fv:i=!0;break;case Kf:return i=t._init,Un(i(t._payload),e,n,l,u)}}if(i)return u=u(t),i=l===""?"."+Zi(t,0):l,Lf(u)?(n="",i!=null&&(n=i.replace(Vf,"$&/")+"/"),Un(u,e,n,"",function(f){return f})):u!=null&&(Pi(u)&&(u=cm(u,n+(u.key==null||t&&t.key===u.key?"":(""+u.key).replace(Vf,"$&/")+"/")+i)),e.push(u)),1;i=0;var r=l===""?".":l+":";if(Lf(t))for(var c=0;c{"use strict";If.exports=Ff()});var eo=Zt(yt=>{"use strict";var hm=P();function to(t){var e="https://react.dev/errors/"+t;if(1{"use strict";function no(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(no)}catch(t){console.error(t)}}no(),lo.exports=eo()});var tg=Zt(hi=>{"use strict";var lt=jf(),Ds=P(),mm=uo();function p(t){var e="https://react.dev/errors/"+t;if(1)":-1u||c[l]!==f[u]){var g=` +`+c[l].replace(" at new "," at ");return t.displayName&&g.includes("")&&(g=g.replace("",t.displayName)),g}while(1<=l&&0<=u);break}}}finally{Fi=!1,Error.prepareStackTrace=n}return(n=t?t.displayName||t.name:"")?jl(n):""}function Em(t){switch(t.tag){case 26:case 27:case 5:return jl(t.type);case 16:return jl("Lazy");case 13:return jl("Suspense");case 19:return jl("SuspenseList");case 0:case 15:return t=Ii(t.type,!1),t;case 11:return t=Ii(t.type.render,!1),t;case 1:return t=Ii(t.type,!0),t;default:return""}}function ro(t){try{var e="";do e+=Em(t),t=t.return;while(t);return e}catch(n){return` +Error generating stack: `+n.message+` +`+n.stack}}function vl(t){var e=t,n=t;if(t.alternate)for(;e.return;)e=e.return;else{t=e;do e=t,e.flags&4098&&(n=e.return),t=e.return;while(t)}return e.tag===3?n:null}function xs(t){if(t.tag===13){var e=t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e.dehydrated}return null}function co(t){if(vl(t)!==t)throw Error(p(188))}function Om(t){var e=t.alternate;if(!e){if(e=vl(t),e===null)throw Error(p(188));return e!==t?null:t}for(var n=t,l=e;;){var u=n.return;if(u===null)break;var a=u.alternate;if(a===null){if(l=u.return,l!==null){n=l;continue}break}if(u.child===a.child){for(a=u.child;a;){if(a===n)return co(u),t;if(a===l)return co(u),e;a=a.sibling}throw Error(p(188))}if(n.return!==l.return)n=u,l=a;else{for(var i=!1,r=u.child;r;){if(r===n){i=!0,n=u,l=a;break}if(r===l){i=!0,l=u,n=a;break}r=r.sibling}if(!i){for(r=a.child;r;){if(r===n){i=!0,n=a,l=u;break}if(r===l){i=!0,l=a,n=u;break}r=r.sibling}if(!i)throw Error(p(189))}}if(n.alternate!==l)throw Error(p(190))}if(n.tag!==3)throw Error(p(188));return n.stateNode.current===n?t:e}function Cs(t){var e=t.tag;if(e===5||e===26||e===27||e===6)return t;for(t=t.child;t!==null;){if(e=Cs(t),e!==null)return e;t=t.sibling}return null}var Xl=Array.isArray,L=mm.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,hn={pending:!1,data:null,method:null,action:null},zr=[],Ln=-1;function ae(t){return{current:t}}function ct(t){0>Ln||(t.current=zr[Ln],zr[Ln]=null,Ln--)}function Q(t,e){Ln++,zr[Ln]=t.current,t.current=e}var ee=ae(null),au=ae(null),je=ae(null),Ma=ae(null);function Aa(t,e){switch(Q(je,e),Q(au,t),Q(ee,null),t=e.nodeType,t){case 9:case 11:e=(e=e.documentElement)&&(e=e.namespaceURI)?ss(e):0;break;default:if(t=t===8?e.parentNode:e,e=t.tagName,t=t.namespaceURI)t=ss(t),e=Lh(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}ct(ee),Q(ee,e)}function il(){ct(ee),ct(au),ct(je)}function Ur(t){t.memoizedState!==null&&Q(Ma,t);var e=ee.current,n=Lh(e,t.type);e!==n&&(Q(au,t),Q(ee,n))}function _a(t){au.current===t&&(ct(ee),ct(au)),Ma.current===t&&(ct(Ma),mu._currentValue=hn)}var Hr=Object.prototype.hasOwnProperty,Tc=lt.unstable_scheduleCallback,tr=lt.unstable_cancelCallback,Tm=lt.unstable_shouldYield,Dm=lt.unstable_requestPaint,ne=lt.unstable_now,Mm=lt.unstable_getCurrentPriorityLevel,Ns=lt.unstable_ImmediatePriority,zs=lt.unstable_UserBlockingPriority,Ra=lt.unstable_NormalPriority,Am=lt.unstable_LowPriority,Us=lt.unstable_IdlePriority,_m=lt.log,Rm=lt.unstable_setDisableYieldValue,bu=null,At=null;function xm(t){if(At&&typeof At.onCommitFiberRoot=="function")try{At.onCommitFiberRoot(bu,t,void 0,(t.current.flags&128)===128)}catch{}}function Be(t){if(typeof _m=="function"&&Rm(t),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(bu,t)}catch{}}var _t=Math.clz32?Math.clz32:zm,Cm=Math.log,Nm=Math.LN2;function zm(t){return t>>>=0,t===0?32:31-(Cm(t)/Nm|0)|0}var Pu=128,$u=4194304;function cn(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Ia(t,e){var n=t.pendingLanes;if(n===0)return 0;var l=0,u=t.suspendedLanes,a=t.pingedLanes,i=t.warmLanes;t=t.finishedLanes!==0;var r=n&134217727;return r!==0?(n=r&~u,n!==0?l=cn(n):(a&=r,a!==0?l=cn(a):t||(i=r&~i,i!==0&&(l=cn(i))))):(r=n&~u,r!==0?l=cn(r):a!==0?l=cn(a):t||(i=n&~i,i!==0&&(l=cn(i)))),l===0?0:e!==0&&e!==l&&!(e&u)&&(u=l&-l,i=e&-e,u>=i||u===32&&(i&4194176)!==0)?e:l}function Eu(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Um(t,e){switch(t){case 1:case 2:case 4:case 8:return e+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Hs(){var t=Pu;return Pu<<=1,!(Pu&4194176)&&(Pu=128),t}function ws(){var t=$u;return $u<<=1,!($u&62914560)&&($u=4194304),t}function er(t){for(var e=[],n=0;31>n;n++)e.push(t);return e}function Ou(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Hm(t,e,n,l,u,a){var i=t.pendingLanes;t.pendingLanes=n,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=n,t.entangledLanes&=n,t.errorRecoveryDisabledLanes&=n,t.shellSuspendCounter=0;var r=t.entanglements,c=t.expirationTimes,f=t.hiddenUpdates;for(n=i&~n;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Bm=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),oo={},so={};function Ym(t){return Hr.call(so,t)?!0:Hr.call(oo,t)?!1:Bm.test(t)?so[t]=!0:(oo[t]=!0,!1)}function ha(t,e,n){if(Ym(e))if(n===null)t.removeAttribute(e);else{switch(typeof n){case"undefined":case"function":case"symbol":t.removeAttribute(e);return;case"boolean":var l=e.toLowerCase().slice(0,5);if(l!=="data-"&&l!=="aria-"){t.removeAttribute(e);return}}t.setAttribute(e,""+n)}}function Fu(t,e,n){if(n===null)t.removeAttribute(e);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(e);return}t.setAttribute(e,""+n)}}function re(t,e,n,l){if(l===null)t.removeAttribute(n);else{switch(typeof l){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(n);return}t.setAttributeNS(e,n,""+l)}}function wt(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Ls(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function jm(t){var e=Ls(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),l=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var u=n.get,a=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(i){l=""+i,a.call(this,i)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return l},setValue:function(i){l=""+i},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function xa(t){t._valueTracker||(t._valueTracker=jm(t))}function Vs(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),l="";return t&&(l=Ls(t)?t.checked?"true":"false":t.value),t=l,t!==n?(e.setValue(t),!0):!1}function Ca(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Xm=/[\n"\\]/g;function Bt(t){return t.replace(Xm,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function qr(t,e,n,l,u,a,i,r){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+wt(e)):t.value!==""+wt(e)&&(t.value=""+wt(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?Gr(t,i,wt(e)):n!=null?Gr(t,i,wt(n)):l!=null&&t.removeAttribute("value"),u==null&&a!=null&&(t.defaultChecked=!!a),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?t.name=""+wt(r):t.removeAttribute("name")}function Qs(t,e,n,l,u,a,i,r){if(a!=null&&typeof a!="function"&&typeof a!="symbol"&&typeof a!="boolean"&&(t.type=a),e!=null||n!=null){if(!(a!=="submit"&&a!=="reset"||e!=null))return;n=n!=null?""+wt(n):"",e=e!=null?""+wt(e):n,r||e===t.value||(t.value=e),t.defaultValue=e}l=l??u,l=typeof l!="function"&&typeof l!="symbol"&&!!l,t.checked=r?t.checked:!!l,t.defaultChecked=!!l,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function Gr(t,e,n){e==="number"&&Ca(t.ownerDocument)===t||t.defaultValue===""+n||(t.defaultValue=""+n)}function In(t,e,n,l){if(t=t.options,e){e={};for(var u=0;u=Ql),So=" ",bo=!1;function $s(t,e){switch(t){case"keyup":return vy.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Fs(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Qn=!1;function yy(t,e){switch(t){case"compositionend":return Fs(e);case"keypress":return e.which!==32?null:(bo=!0,So);case"textInput":return t=e.data,t===So&&bo?null:t;default:return null}}function py(t,e){if(Qn)return t==="compositionend"||!xc&&$s(t,e)?(t=Ws(),va=_c=Ye=null,Qn=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=l}t:{for(;n;){if(n.nextSibling){n=n.nextSibling;break t}n=n.parentNode}n=void 0}n=Do(n)}}function nd(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?nd(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function ld(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Ca(t.document);e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=Ca(t.document)}return e}function Cc(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function Ay(t,e){var n=ld(e);e=t.focusedElem;var l=t.selectionRange;if(n!==e&&e&&e.ownerDocument&&nd(e.ownerDocument.documentElement,e)){if(l!==null&&Cc(e)){if(t=l.start,n=l.end,n===void 0&&(n=t),"selectionStart"in e)e.selectionStart=t,e.selectionEnd=Math.min(n,e.value.length);else if(n=(t=e.ownerDocument||document)&&t.defaultView||window,n.getSelection){n=n.getSelection();var u=e.textContent.length,a=Math.min(l.start,u);l=l.end===void 0?a:Math.min(l.end,u),!n.extend&&a>l&&(u=l,l=a,a=u),u=Mo(e,a);var i=Mo(e,l);u&&i&&(n.rangeCount!==1||n.anchorNode!==u.node||n.anchorOffset!==u.offset||n.focusNode!==i.node||n.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(u.node,u.offset),n.removeAllRanges(),a>l?(n.addRange(t),n.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),n.addRange(t)))}}for(t=[],n=e;n=n.parentNode;)n.nodeType===1&&t.push({element:n,left:n.scrollLeft,top:n.scrollTop});for(typeof e.focus=="function"&&e.focus(),e=0;e=document.documentMode,Zn=null,jr=null,Kl=null,Xr=!1;function Ao(t,e,n){var l=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Xr||Zn==null||Zn!==Ca(l)||(l=Zn,"selectionStart"in l&&Cc(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),Kl&&fu(Kl,l)||(Kl=l,l=Ka(jr,"onSelect"),0>=i,u-=i,ve=1<<32-_t(e)+u|n<D?(ut=O,O=null):ut=O.sibling;var H=d(s,O,h[D],y);if(H===null){O===null&&(O=ut);break}t&&O&&H.alternate===null&&e(s,O),o=a(H,o,D),R===null?E=H:R.sibling=H,R=H,O=ut}if(D===h.length)return n(s,O),w&&fn(s,D),E;if(O===null){for(;DD?(ut=O,O=null):ut=O.sibling;var _e=d(s,O,H.value,y);if(_e===null){O===null&&(O=ut);break}t&&O&&_e.alternate===null&&e(s,O),o=a(_e,o,D),R===null?E=_e:R.sibling=_e,R=_e,O=ut}if(H.done)return n(s,O),w&&fn(s,D),E;if(O===null){for(;!H.done;D++,H=h.next())H=m(s,H.value,y),H!==null&&(o=a(H,o,D),R===null?E=H:R.sibling=H,R=H);return w&&fn(s,D),E}for(O=l(O);!H.done;D++,H=h.next())H=v(O,s,D,H.value,y),H!==null&&(t&&H.alternate!==null&&O.delete(H.key===null?D:H.key),o=a(H,o,D),R===null?E=H:R.sibling=H,R=H);return t&&O.forEach(function(Qv){return e(s,Qv)}),w&&fn(s,D),E}function U(s,o,h,y){if(typeof h=="object"&&h!==null&&h.type===Xn&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Wu:t:{for(var E=h.key;o!==null;){if(o.key===E){if(E=h.type,E===Xn){if(o.tag===7){n(s,o.sibling),y=u(o,h.props.children),y.return=s,s=y;break t}}else if(o.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===ze&&Uo(E)===o.type){n(s,o.sibling),y=u(o,h.props),Hl(y,h),y.return=s,s=y;break t}n(s,o);break}else e(s,o);o=o.sibling}h.type===Xn?(y=mn(h.props.children,s.mode,y,h.key),y.return=s,s=y):(y=Ea(h.type,h.key,h.props,null,s.mode,y),Hl(y,h),y.return=s,s=y)}return i(s);case Yl:t:{for(E=h.key;o!==null;){if(o.key===E)if(o.tag===4&&o.stateNode.containerInfo===h.containerInfo&&o.stateNode.implementation===h.implementation){n(s,o.sibling),y=u(o,h.children||[]),y.return=s,s=y;break t}else{n(s,o);break}else e(s,o);o=o.sibling}y=br(h,s.mode,y),y.return=s,s=y}return i(s);case ze:return E=h._init,h=E(h._payload),U(s,o,h,y)}if(Xl(h))return S(s,o,h,y);if(Nl(h)){if(E=Nl(h),typeof E!="function")throw Error(p(150));return h=E.call(h),b(s,o,h,y)}if(typeof h.then=="function")return U(s,o,la(h),y);if(h.$$typeof===ge)return U(s,o,aa(s,h),y);ua(s,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,o!==null&&o.tag===6?(n(s,o.sibling),y=u(o,h),y.return=s,s=y):(n(s,o),y=Sr(h,s.mode,y),y.return=s,s=y),i(s)):n(s,o)}return function(s,o,h,y){try{su=0;var E=U(s,o,h,y);return el=null,E}catch(O){if(O===Jl)throw O;var R=jt(29,O,null,s.mode);return R.lanes=y,R.return=s,R}finally{}}}var bn=gd(!0),vd=gd(!1),fl=ae(null),Ha=ae(0);function Ho(t,e){t=Te,Q(Ha,t),Q(fl,e),Te=t|e.baseLanes}function Qr(){Q(Ha,Te),Q(fl,fl.current)}function wc(){Te=Ha.current,ct(fl),ct(Ha)}var Lt=ae(null),le=null;function He(t){var e=t.alternate;Q(nt,nt.current&1),Q(Lt,t),le===null&&(e===null||fl.current!==null||e.memoizedState!==null)&&(le=t)}function md(t){if(t.tag===22){if(Q(nt,nt.current),Q(Lt,t),le===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(le=t)}}else we(t)}function we(){Q(nt,nt.current),Q(Lt,Lt.current)}function ye(t){ct(Lt),le===t&&(le=null),ct(nt)}var nt=ae(0);function wa(t){for(var e=t;e!==null;){if(e.tag===13){var n=e.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if(e.flags&128)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var Ny=typeof AbortController<"u"?AbortController:function(){var t=[],e=this.signal={aborted:!1,addEventListener:function(n,l){t.push(l)}};this.abort=function(){e.aborted=!0,t.forEach(function(n){return n()})}},zy=lt.unstable_scheduleCallback,Uy=lt.unstable_NormalPriority,et={$$typeof:ge,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function qc(){return{controller:new Ny,data:new Map,refCount:0}}function Mu(t){t.refCount--,t.refCount===0&&zy(Uy,function(){t.controller.abort()})}var Wl=null,Zr=0,ol=0,nl=null;function Hy(t,e){if(Wl===null){var n=Wl=[];Zr=0,ol=af(),nl={status:"pending",value:void 0,then:function(l){n.push(l)}}}return Zr++,e.then(wo,wo),e}function wo(){if(--Zr===0&&Wl!==null){nl!==null&&(nl.status="fulfilled");var t=Wl;Wl=null,ol=0,nl=null;for(var e=0;ea?a:8;var i=M.T,r={};M.T=r,Wc(t,!1,e,n);try{var c=u(),f=M.S;if(f!==null&&f(r,c),c!==null&&typeof c=="object"&&typeof c.then=="function"){var g=wy(c,l);Pl(t,e,g,Rt(t))}else Pl(t,e,l,Rt(t))}catch(m){Pl(t,e,{then:function(){},status:"rejected",reason:m},Rt())}finally{L.p=a,M.T=i}}function jy(){}function kr(t,e,n,l){if(t.tag!==5)throw Error(p(476));var u=Vd(t).queue;Ld(t,u,e,hn,n===null?jy:function(){return Qd(t),n(l)})}function Vd(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:hn,baseState:hn,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ee,lastRenderedState:hn},next:null};var n={};return e.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ee,lastRenderedState:n},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Qd(t){var e=Vd(t).next.queue;Pl(t,e,{},Rt())}function kc(){return gt(mu)}function Zd(){return tt().memoizedState}function Kd(){return tt().memoizedState}function Xy(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var n=Rt();t=Xe(n);var l=Le(e,t,n);l!==null&&(St(l,e,n),Fl(l,e,n)),e={cache:qc()},t.payload=e;return}e=e.return}}function Ly(t,e,n){var l=Rt();n={lane:l,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},ci(t)?kd(e,n):(n=zc(t,e,n,l),n!==null&&(St(n,t,l),Wd(n,e,l)))}function Jd(t,e,n){var l=Rt();Pl(t,e,n,l)}function Pl(t,e,n,l){var u={lane:l,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(ci(t))kd(e,u);else{var a=t.alternate;if(t.lanes===0&&(a===null||a.lanes===0)&&(a=e.lastRenderedReducer,a!==null))try{var i=e.lastRenderedState,r=a(i,n);if(u.hasEagerState=!0,u.eagerState=r,xt(r,i))return ui(t,e,u,0),X===null&&li(),!1}catch{}finally{}if(n=zc(t,e,u,l),n!==null)return St(n,t,l),Wd(n,e,l),!0}return!1}function Wc(t,e,n,l){if(l={lane:2,revertLane:af(),action:l,hasEagerState:!1,eagerState:null,next:null},ci(t)){if(e)throw Error(p(479))}else e=zc(t,n,l,2),e!==null&&St(e,t,2)}function ci(t){var e=t.alternate;return t===_||e!==null&&e===_}function kd(t,e){ll=qa=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function Wd(t,e,n){if(n&4194176){var l=e.lanes;l&=t.pendingLanes,n|=l,e.lanes=n,Gs(t,n)}}var ue={readContext:gt,use:ii,useCallback:$,useContext:$,useEffect:$,useImperativeHandle:$,useLayoutEffect:$,useInsertionEffect:$,useMemo:$,useReducer:$,useRef:$,useState:$,useDebugValue:$,useDeferredValue:$,useTransition:$,useSyncExternalStore:$,useId:$};ue.useCacheRefresh=$;ue.useMemoCache=$;ue.useHostTransitionStatus=$;ue.useFormState=$;ue.useActionState=$;ue.useOptimistic=$;var _n={readContext:gt,use:ii,useCallback:function(t,e){return bt().memoizedState=[t,e===void 0?null:e],t},useContext:gt,useEffect:Yo,useImperativeHandle:function(t,e,n){n=n!=null?n.concat([t]):null,Sa(4194308,4,Gd.bind(null,e,t),n)},useLayoutEffect:function(t,e){return Sa(4194308,4,t,e)},useInsertionEffect:function(t,e){Sa(4,2,t,e)},useMemo:function(t,e){var n=bt();e=e===void 0?null:e;var l=t();if(En){Be(!0);try{t()}finally{Be(!1)}}return n.memoizedState=[l,e],l},useReducer:function(t,e,n){var l=bt();if(n!==void 0){var u=n(e);if(En){Be(!0);try{n(e)}finally{Be(!1)}}}else u=e;return l.memoizedState=l.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},l.queue=t,t=t.dispatch=Ly.bind(null,_,t),[l.memoizedState,t]},useRef:function(t){var e=bt();return t={current:t},e.memoizedState=t},useState:function(t){t=Kr(t);var e=t.queue,n=Jd.bind(null,_,e);return e.dispatch=n,[t.memoizedState,n]},useDebugValue:Kc,useDeferredValue:function(t,e){var n=bt();return Jc(n,t,e)},useTransition:function(){var t=Kr(!1);return t=Ld.bind(null,_,t.queue,!0,!1),bt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,n){var l=_,u=bt();if(w){if(n===void 0)throw Error(p(407));n=n()}else{if(n=e(),X===null)throw Error(p(349));z&60||Ed(l,e,n)}u.memoizedState=n;var a={value:n,getSnapshot:e};return u.queue=a,Yo(Td.bind(null,l,a,t),[t]),l.flags|=2048,sl(9,Od.bind(null,l,a,n,e),{destroy:void 0},null),n},useId:function(){var t=bt(),e=X.identifierPrefix;if(w){var n=me,l=ve;n=(l&~(1<<32-_t(l)-1)).toString(32)+n,e=":"+e+"R"+n,n=Ga++,0 title"))),st(a,l,n),a[ht]=t,it(a),l=a;break t;case"link":var i=ys("link","href",u).get(l+(n.href||""));if(i){for(var r=0;r<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof l.is=="string"?u.createElement("select",{is:l.is}):u.createElement("select"),l.multiple?t.multiple=!0:l.size&&(t.size=l.size);break;default:t=typeof l.is=="string"?u.createElement(n,{is:l.is}):u.createElement(n)}}t[ht]=e,t[Et]=l;t:for(u=e.child;u!==null;){if(u.tag===5||u.tag===6)t.appendChild(u.stateNode);else if(u.tag!==4&&u.tag!==27&&u.child!==null){u.child.return=u,u=u.child;continue}if(u===e)break t;for(;u.sibling===null;){if(u.return===null||u.return===e)break t;u=u.return}u.sibling.return=u.return,u=u.sibling}e.stateNode=t;t:switch(st(t,n,l),n){case"button":case"input":case"select":case"textarea":t=!!l.autoFocus;break t;case"img":t=!0;break t;default:t=!1}t&&oe(e)}}return K(e),e.flags&=-16777217,null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==l&&oe(e);else{if(typeof l!="string"&&e.stateNode===null)throw Error(p(166));if(t=je.current,Ul(e)){if(t=e.stateNode,n=e.memoizedProps,l=null,u=pt,u!==null)switch(u.tag){case 27:case 5:l=u.memoizedProps}t[ht]=e,t=!!(t.nodeValue===n||l!==null&&l.suppressHydrationWarning===!0||Xh(t.nodeValue,n)),t||Sn(e)}else t=Ja(t).createTextNode(l),t[ht]=e,e.stateNode=t}return K(e),null;case 13:if(l=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(u=Ul(e),l!==null&&l.dehydrated!==null){if(t===null){if(!u)throw Error(p(318));if(u=e.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(p(317));u[ht]=e}else Du(),!(e.flags&128)&&(e.memoizedState=null),e.flags|=4;K(e),u=!1}else kt!==null&&(oc(kt),kt=null),u=!0;if(!u)return e.flags&256?(ye(e),e):(ye(e),null)}if(ye(e),e.flags&128)return e.lanes=n,e;if(n=l!==null,t=t!==null&&t.memoizedState!==null,n){l=e.child,u=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(u=l.alternate.memoizedState.cachePool.pool);var a=null;l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),a!==u&&(l.flags|=2048)}return n!==t&&n&&(e.child.flags|=8192),ia(e,e.updateQueue),K(e),null;case 4:return il(),t===null&&rf(e.stateNode.containerInfo),K(e),null;case 10:return Se(e.type),K(e),null;case 19:if(ct(nt),u=e.memoizedState,u===null)return K(e),null;if(l=(e.flags&128)!==0,a=u.rendering,a===null)if(l)ql(u,!1);else{if(W!==0||t!==null&&t.flags&128)for(t=e.child;t!==null;){if(a=wa(t),a!==null){for(e.flags|=128,ql(u,!1),t=a.updateQueue,e.updateQueue=t,ia(e,t),e.subtreeFlags=0,t=n,n=e.child;n!==null;)Mh(n,t),n=n.sibling;return Q(nt,nt.current&1|2),e.child}t=t.sibling}u.tail!==null&&ne()>La&&(e.flags|=128,l=!0,ql(u,!1),e.lanes=4194304)}else{if(!l)if(t=wa(a),t!==null){if(e.flags|=128,l=!0,t=t.updateQueue,e.updateQueue=t,ia(e,t),ql(u,!0),u.tail===null&&u.tailMode==="hidden"&&!a.alternate&&!w)return K(e),null}else 2*ne()-u.renderingStartTime>La&&n!==536870912&&(e.flags|=128,l=!0,ql(u,!1),e.lanes=4194304);u.isBackwards?(a.sibling=e.child,e.child=a):(t=u.last,t!==null?t.sibling=a:e.child=a,u.last=a)}return u.tail!==null?(e=u.tail,u.rendering=e,u.tail=e.sibling,u.renderingStartTime=ne(),e.sibling=null,t=nt.current,Q(nt,l?t&1|2:t&1),e):(K(e),null);case 22:case 23:return ye(e),wc(),l=e.memoizedState!==null,t!==null?t.memoizedState!==null!==l&&(e.flags|=8192):l&&(e.flags|=8192),l?n&536870912&&!(e.flags&128)&&(K(e),e.subtreeFlags&6&&(e.flags|=8192)):K(e),n=e.updateQueue,n!==null&&ia(e,n.retryQueue),n=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),l=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),l!==n&&(e.flags|=2048),t!==null&&ct(vn),null;case 24:return n=null,t!==null&&(n=t.memoizedState.cache),e.memoizedState.cache!==n&&(e.flags|=2048),Se(et),K(e),null;case 25:return null}throw Error(p(156,e.tag))}function Wy(t,e){switch(Hc(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return Se(et),il(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return _a(e),null;case 13:if(ye(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(p(340));Du()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return ct(nt),null;case 4:return il(),null;case 10:return Se(e.type),null;case 22:case 23:return ye(e),wc(),t!==null&&ct(vn),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return Se(et),null;case 25:return null;default:return null}}function _h(t,e){switch(Hc(e),e.tag){case 3:Se(et),il();break;case 26:case 27:case 5:_a(e);break;case 4:il();break;case 13:ye(e);break;case 19:ct(nt);break;case 10:Se(e.type);break;case 22:case 23:ye(e),wc(),t!==null&&ct(vn);break;case 24:Se(et)}}var Py={getCacheForType:function(t){var e=gt(et),n=e.data.get(t);return n===void 0&&(n=t(),e.data.set(t,n)),n}},$y=typeof WeakMap=="function"?WeakMap:Map,J=0,X=null,x=null,z=0,j=0,Dt=null,de=!1,pl=!1,ef=!1,Te=0,W=0,$e=0,yn=0,nf=0,Xt=0,dl=0,nu=null,te=null,ic=!1,lf=0,La=1/0,Va=null,Qe=null,ra=!1,on=null,lu=0,rc=0,cc=null,uu=0,fc=null;function Rt(){if(J&2&&z!==0)return z&-z;if(M.T!==null){var t=ol;return t!==0?t:af()}return Ys()}function Rh(){Xt===0&&(Xt=!(z&536870912)||w?Hs():536870912);var t=Lt.current;return t!==null&&(t.flags|=32),Xt}function St(t,e,n){(t===X&&j===2||t.cancelPendingCommit!==null)&&(hl(t,0),he(t,z,Xt,!1)),Ou(t,n),(!(J&2)||t!==X)&&(t===X&&(!(J&2)&&(yn|=n),W===4&&he(t,z,Xt,!1)),ie(t))}function xh(t,e,n){if(J&6)throw Error(p(327));var l=!n&&(e&60)===0&&(e&t.expiredLanes)===0||Eu(t,e),u=l?tp(t,e):Er(t,e,!0),a=l;do{if(u===0){pl&&!l&&he(t,e,0,!1);break}else if(u===6)he(t,e,0,!de);else{if(n=t.current.alternate,a&&!Fy(n)){u=Er(t,e,!1),a=!1;continue}if(u===2){if(a=e,t.errorRecoveryDisabledLanes&a)var i=0;else i=t.pendingLanes&-536870913,i=i!==0?i:i&536870912?536870912:0;if(i!==0){e=i;t:{var r=t;u=nu;var c=r.current.memoizedState.isDehydrated;if(c&&(hl(r,i).flags|=256),i=Er(r,i,!1),i!==2){if(ef&&!c){r.errorRecoveryDisabledLanes|=a,yn|=a,u=4;break t}a=te,te=u,a!==null&&oc(a)}u=i}if(a=!1,u!==2)continue}}if(u===1){hl(t,0),he(t,e,0,!0);break}t:{switch(l=t,u){case 0:case 1:throw Error(p(345));case 4:if((e&4194176)===e){he(l,e,Xt,!de);break t}break;case 2:te=null;break;case 3:case 5:break;default:throw Error(p(329))}if(l.finishedWork=n,l.finishedLanes=e,(e&62914560)===e&&(a=lf+300-ne(),10n?32:n,M.T=null,on===null)var a=!1;else{n=cc,cc=null;var i=on,r=lu;if(on=null,lu=0,J&6)throw Error(p(331));var c=J;if(J|=4,Th(i.current),bh(i,i.current,r,n),J=c,xu(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(bu,i)}catch{}a=!0}return a}finally{L.p=u,M.T=l,wh(t,e)}}return!1}function ls(t,e,n){e=Yt(n,e),e=Pr(t.stateNode,e,2),t=Le(t,e,2),t!==null&&(Ou(t,2),ie(t))}function Y(t,e,n){if(t.tag===3)ls(t,t,n);else for(;e!==null;){if(e.tag===3){ls(e,t,n);break}else if(e.tag===1){var l=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(Qe===null||!Qe.has(l))){t=Yt(n,t),n=Id(2),l=Le(e,n,2),l!==null&&(th(n,l,e,t),Ou(l,2),ie(l));break}}e=e.return}}function Or(t,e,n){var l=t.pingCache;if(l===null){l=t.pingCache=new $y;var u=new Set;l.set(e,u)}else u=l.get(e),u===void 0&&(u=new Set,l.set(e,u));u.has(n)||(ef=!0,u.add(n),t=lp.bind(null,t,e,n),e.then(t,t))}function lp(t,e,n){var l=t.pingCache;l!==null&&l.delete(e),t.pingedLanes|=t.suspendedLanes&n,t.warmLanes&=~n,X===t&&(z&n)===n&&(W===4||W===3&&(z&62914560)===z&&300>ne()-lf?!(J&2)&&hl(t,0):nf|=n,dl===z&&(dl=0)),ie(t)}function qh(t,e){e===0&&(e=ws()),t=ke(t,e),t!==null&&(Ou(t,e),ie(t))}function up(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),qh(t,n)}function ap(t,e){var n=0;switch(t.tag){case 13:var l=t.stateNode,u=t.memoizedState;u!==null&&(n=u.retryLane);break;case 19:l=t.stateNode;break;case 22:l=t.stateNode._retryCache;break;default:throw Error(p(314))}l!==null&&l.delete(e),qh(t,n)}function ip(t,e){return Tc(t,e)}var Qa=null,jn=null,dc=!1,Za=!1,Tr=!1,pn=0;function ie(t){t!==jn&&t.next===null&&(jn===null?Qa=jn=t:jn=jn.next=t),Za=!0,dc||(dc=!0,cp(rp))}function xu(t,e){if(!Tr&&Za){Tr=!0;do for(var n=!1,l=Qa;l!==null;){if(!e)if(t!==0){var u=l.pendingLanes;if(u===0)var a=0;else{var i=l.suspendedLanes,r=l.pingedLanes;a=(1<<31-_t(42|t)+1)-1,a&=u&~(i&~r),a=a&201326677?a&201326677|1:a?a|2:0}a!==0&&(n=!0,us(l,a))}else a=z,a=Ia(l,l===X?a:0),!(a&3)||Eu(l,a)||(n=!0,us(l,a));l=l.next}while(n);Tr=!1}}function rp(){Za=dc=!1;var t=0;pn!==0&&(gp()&&(t=pn),pn=0);for(var e=ne(),n=null,l=Qa;l!==null;){var u=l.next,a=Gh(l,e);a===0?(l.next=null,n===null?Qa=u:n.next=u,u===null&&(jn=n)):(n=l,(t!==0||a&3)&&(Za=!0)),l=u}xu(t,!1)}function Gh(t,e){for(var n=t.suspendedLanes,l=t.pingedLanes,u=t.expirationTimes,a=t.pendingLanes&-62914561;0"u"?null:document;function Zh(t,e,n){var l=Sl;if(l&&typeof e=="string"&&e){var u=Bt(e);u='link[rel="'+t+'"][href="'+u+'"]',typeof n=="string"&&(u+='[crossorigin="'+n+'"]'),gs.has(u)||(gs.add(u),t={rel:t,crossOrigin:n,href:e},l.querySelector(u)===null&&(e=l.createElement("link"),st(e,"link",t),it(e),l.head.appendChild(e)))}}function Op(t){De.D(t),Zh("dns-prefetch",t,null)}function Tp(t,e){De.C(t,e),Zh("preconnect",t,e)}function Dp(t,e,n){De.L(t,e,n);var l=Sl;if(l&&t&&e){var u='link[rel="preload"][as="'+Bt(e)+'"]';e==="image"&&n&&n.imageSrcSet?(u+='[imagesrcset="'+Bt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(u+='[imagesizes="'+Bt(n.imageSizes)+'"]')):u+='[href="'+Bt(t)+'"]';var a=u;switch(e){case"style":a=gl(t);break;case"script":a=bl(t)}Vt.has(a)||(t=V({rel:"preload",href:e==="image"&&n&&n.imageSrcSet?void 0:t,as:e},n),Vt.set(a,t),l.querySelector(u)!==null||e==="style"&&l.querySelector(Cu(a))||e==="script"&&l.querySelector(Nu(a))||(e=l.createElement("link"),st(e,"link",t),it(e),l.head.appendChild(e)))}}function Mp(t,e){De.m(t,e);var n=Sl;if(n&&t){var l=e&&typeof e.as=="string"?e.as:"script",u='link[rel="modulepreload"][as="'+Bt(l)+'"][href="'+Bt(t)+'"]',a=u;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":a=bl(t)}if(!Vt.has(a)&&(t=V({rel:"modulepreload",href:t},e),Vt.set(a,t),n.querySelector(u)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Nu(a)))return}l=n.createElement("link"),st(l,"link",t),it(l),n.head.appendChild(l)}}}function Ap(t,e,n){De.S(t,e,n);var l=Sl;if(l&&t){var u=Fn(l).hoistableStyles,a=gl(t);e=e||"default";var i=u.get(a);if(!i){var r={loading:0,preload:null};if(i=l.querySelector(Cu(a)))r.loading=5;else{t=V({rel:"stylesheet",href:t,"data-precedence":e},n),(n=Vt.get(a))&&cf(t,n);var c=i=l.createElement("link");it(c),st(c,"link",t),c._p=new Promise(function(f,g){c.onload=f,c.onerror=g}),c.addEventListener("load",function(){r.loading|=1}),c.addEventListener("error",function(){r.loading|=2}),r.loading|=4,Oa(i,e,l)}i={type:"stylesheet",instance:i,count:1,state:r},u.set(a,i)}}}function _p(t,e){De.X(t,e);var n=Sl;if(n&&t){var l=Fn(n).hoistableScripts,u=bl(t),a=l.get(u);a||(a=n.querySelector(Nu(u)),a||(t=V({src:t,async:!0},e),(e=Vt.get(u))&&ff(t,e),a=n.createElement("script"),it(a),st(a,"link",t),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},l.set(u,a))}}function Rp(t,e){De.M(t,e);var n=Sl;if(n&&t){var l=Fn(n).hoistableScripts,u=bl(t),a=l.get(u);a||(a=n.querySelector(Nu(u)),a||(t=V({src:t,async:!0,type:"module"},e),(e=Vt.get(u))&&ff(t,e),a=n.createElement("script"),it(a),st(a,"link",t),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},l.set(u,a))}}function vs(t,e,n,l){var u=(u=je.current)?ka(u):null;if(!u)throw Error(p(446));switch(t){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(e=gl(n.href),n=Fn(u).hoistableStyles,l=n.get(e),l||(l={type:"style",instance:null,count:0,state:null},n.set(e,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){t=gl(n.href);var a=Fn(u).hoistableStyles,i=a.get(t);if(i||(u=u.ownerDocument||u,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},a.set(t,i),(a=u.querySelector(Cu(t)))&&!a._p&&(i.instance=a,i.state.loading=5),Vt.has(t)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Vt.set(t,n),a||xp(u,t,n,i.state))),e&&l===null)throw Error(p(528,""));return i}if(e&&l!==null)throw Error(p(529,""));return null;case"script":return e=n.async,n=n.src,typeof n=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=bl(n),n=Fn(u).hoistableScripts,l=n.get(e),l||(l={type:"script",instance:null,count:0,state:null},n.set(e,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(p(444,t))}}function gl(t){return'href="'+Bt(t)+'"'}function Cu(t){return'link[rel="stylesheet"]['+t+"]"}function Kh(t){return V({},t,{"data-precedence":t.precedence,precedence:null})}function xp(t,e,n,l){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?l.loading=1:(e=t.createElement("link"),l.preload=e,e.addEventListener("load",function(){return l.loading|=1}),e.addEventListener("error",function(){return l.loading|=2}),st(e,"link",n),it(e),t.head.appendChild(e))}function bl(t){return'[src="'+Bt(t)+'"]'}function Nu(t){return"script[async]"+t}function ms(t,e,n){if(e.count++,e.instance===null)switch(e.type){case"style":var l=t.querySelector('style[data-href~="'+Bt(n.href)+'"]');if(l)return e.instance=l,it(l),l;var u=V({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return l=(t.ownerDocument||t).createElement("style"),it(l),st(l,"style",u),Oa(l,n.precedence,t),e.instance=l;case"stylesheet":u=gl(n.href);var a=t.querySelector(Cu(u));if(a)return e.state.loading|=4,e.instance=a,it(a),a;l=Kh(n),(u=Vt.get(u))&&cf(l,u),a=(t.ownerDocument||t).createElement("link"),it(a);var i=a;return i._p=new Promise(function(r,c){i.onload=r,i.onerror=c}),st(a,"link",l),e.state.loading|=4,Oa(a,n.precedence,t),e.instance=a;case"script":return a=bl(n.src),(u=t.querySelector(Nu(a)))?(e.instance=u,it(u),u):(l=n,(u=Vt.get(a))&&(l=V({},n),ff(l,u)),t=t.ownerDocument||t,u=t.createElement("script"),it(u),st(u,"link",l),t.head.appendChild(u),e.instance=u);case"void":return null;default:throw Error(p(443,e.type))}else e.type==="stylesheet"&&!(e.state.loading&4)&&(l=e.instance,e.state.loading|=4,Oa(l,n.precedence,t));return e.instance}function Oa(t,e,n){for(var l=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=l.length?l[l.length-1]:null,a=u,i=0;i title"):null)}function Cp(t,e,n){if(n===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function Jh(t){return!(t.type==="stylesheet"&&!(t.state.loading&3))}var vu=null;function Np(){}function zp(t,e,n){if(vu===null)throw Error(p(475));var l=vu;if(e.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&!(e.state.loading&4)){if(e.instance===null){var u=gl(n.href),a=t.querySelector(Cu(u));if(a){t=a._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Wa.bind(l),t.then(l,l)),e.state.loading|=4,e.instance=a,it(a);return}a=t.ownerDocument||t,n=Kh(n),(u=Vt.get(u))&&cf(n,u),a=a.createElement("link"),it(a);var i=a;i._p=new Promise(function(r,c){i.onload=r,i.onerror=c}),st(a,"link",n),e.instance=a}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(e,t),(t=e.state.preload)&&!(e.state.loading&3)&&(l.count++,e=Wa.bind(l),t.addEventListener("load",e),t.addEventListener("error",e))}}function Up(){if(vu===null)throw Error(p(475));var t=vu;return t.stylesheets&&t.count===0&&pc(t,t.stylesheets),0{"use strict";function eg(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(eg)}catch(t){console.error(t)}}eg(),ng.exports=tg()});var ig=Zt(vi=>{"use strict";var Lp=Symbol.for("react.transitional.element"),Vp=Symbol.for("react.fragment");function ag(t,e,n){var l=null;if(n!==void 0&&(l=""+n),e.key!==void 0&&(l=""+e.key),"key"in e){n={};for(var u in e)u!=="key"&&(n[u]=e[u])}else n=e;return e=n.ref,{$$typeof:Lp,type:t,key:l,ref:e!==void 0?e:null,props:n}}vi.Fragment=Vp;vi.jsx=ag;vi.jsxs=ag});var vt=Zt(($0,rg)=>{"use strict";rg.exports=ig()});var Ig=Zt((ib,Fg)=>{"use strict";Fg.exports=function t(e,n){if(e===n)return!0;if(e&&n&&typeof e=="object"&&typeof n=="object"){if(e.constructor!==n.constructor)return!1;var l,u,a;if(Array.isArray(e)){if(l=e.length,l!=n.length)return!1;for(u=l;u--!==0;)if(!t(e[u],n[u]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if(a=Object.keys(e),l=a.length,l!==Object.keys(n).length)return!1;for(u=l;u--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[u]))return!1;for(u=l;u--!==0;){var i=a[u];if(!t(e[i],n[i]))return!1}return!0}return e!==e&&n!==n}});var Xv=C(lg(),1);var Yv=C(P(),1);var ug=C(P(),1),gi=(0,ug.createContext)({dragDropManager:void 0});var Wg=C(vt(),1);function Qt(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var cg=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),gf=function(){return Math.random().toString(36).substring(7).split("").join(".")},fg={INIT:"@@redux/INIT"+gf(),REPLACE:"@@redux/REPLACE"+gf(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+gf()}};function Zp(t){if(typeof t!="object"||t===null)return!1;for(var e=t;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function vf(t,e,n){var l;if(typeof e=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Qt(0));if(typeof e=="function"&&typeof n>"u"&&(n=e,e=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Qt(1));return n(vf)(t,e)}if(typeof t!="function")throw new Error(Qt(2));var u=t,a=e,i=[],r=i,c=!1;function f(){r===i&&(r=i.slice())}function g(){if(c)throw new Error(Qt(3));return a}function m(b){if(typeof b!="function")throw new Error(Qt(4));if(c)throw new Error(Qt(5));var U=!0;return f(),r.push(b),function(){if(U){if(c)throw new Error(Qt(6));U=!1,f();var o=r.indexOf(b);r.splice(o,1),i=null}}}function d(b){if(!Zp(b))throw new Error(Qt(7));if(typeof b.type>"u")throw new Error(Qt(8));if(c)throw new Error(Qt(9));try{c=!0,a=u(a,b)}finally{c=!1}for(var U=i=r,s=0;sl&&l[u]?l[u]:n||null,t)}function sg(t,e){return t.filter(n=>n!==e)}function mi(t){return typeof t=="object"}function dg(t,e){let n=new Map,l=a=>{n.set(a,n.has(a)?n.get(a)+1:1)};t.forEach(l),e.forEach(l);let u=[];return n.forEach((a,i)=>{a===1&&u.push(i)}),u}function hg(t,e){return t.filter(n=>e.indexOf(n)>-1)}var El="dnd-core/INIT_COORDS",tn="dnd-core/BEGIN_DRAG",Ol="dnd-core/PUBLISH_DRAG_SOURCE",en="dnd-core/HOVER",nn="dnd-core/DROP",ln="dnd-core/END_DRAG";function mf(t,e){return{type:El,payload:{sourceClientOffset:e||null,clientOffset:t||null}}}var Jp={type:El,payload:{clientOffset:null,sourceClientOffset:null}};function gg(t){return function(n=[],l={publishSource:!0}){let{publishSource:u=!0,clientOffset:a,getSourceClientOffset:i}=l,r=t.getMonitor(),c=t.getRegistry();t.dispatch(mf(a)),kp(n,r,c);let f=$p(n,r);if(f==null){t.dispatch(Jp);return}let g=null;if(a){if(!i)throw new Error("getSourceClientOffset must be defined");Wp(i),g=i(f)}t.dispatch(mf(a,g));let d=c.getSource(f).beginDrag(r,f);if(d==null)return;Pp(d),c.pinSource(f);let v=c.getSourceType(f);return{type:tn,payload:{itemType:v,item:d,sourceId:f,clientOffset:a||null,sourceClientOffset:g||null,isSourcePublic:!!u}}}}function kp(t,e,n){T(!e.isDragging(),"Cannot call beginDrag while dragging."),t.forEach(function(l){T(n.getSource(l),"Expected sourceIds to be registered.")})}function Wp(t){T(typeof t=="function","When clientOffset is provided, getSourceClientOffset must be a function.")}function Pp(t){T(mi(t),"Item must be an object.")}function $p(t,e){let n=null;for(let l=t.length-1;l>=0;l--)if(e.canDragSource(t[l])){n=t[l];break}return n}function Fp(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ip(t){for(var e=1;e{let c=e0(i,r,u,l),f={type:nn,payload:{dropResult:Ip({},n,c)}};t.dispatch(f)})}}function t0(t){T(t.isDragging(),"Cannot call drop while not dragging."),T(!t.didDrop(),"Cannot call drop twice during one drag operation.")}function e0(t,e,n,l){let u=n.getTarget(t),a=u?u.drop(l,t):void 0;return n0(a),typeof a>"u"&&(a=e===0?{}:l.getDropResult()),a}function n0(t){T(typeof t>"u"||mi(t),"Drop result must either be an object or undefined.")}function l0(t){let e=t.getTargetIds().filter(t.canDropOnTarget,t);return e.reverse(),e}function mg(t){return function(){let n=t.getMonitor(),l=t.getRegistry();u0(n);let u=n.getSourceId();return u!=null&&(l.getSource(u,!0).endDrag(n,u),l.unpinSource()),{type:ln}}}function u0(t){T(t.isDragging(),"Cannot call endDrag while not dragging.")}function zu(t,e){return e===null?t===null:Array.isArray(t)?t.some(n=>n===e):t===e}function yg(t){return function(n,{clientOffset:l}={}){a0(n);let u=n.slice(0),a=t.getMonitor(),i=t.getRegistry(),r=a.getItemType();return r0(u,i,r),i0(u,a,i),c0(u,a,i),{type:en,payload:{targetIds:u,clientOffset:l||null}}}}function a0(t){T(Array.isArray(t),"Expected targetIds to be an array.")}function i0(t,e,n){T(e.isDragging(),"Cannot call hover while not dragging."),T(!e.didDrop(),"Cannot call hover after drop.");for(let l=0;l=0;l--){let u=t[l],a=e.getTargetType(u);zu(a,n)||t.splice(l,1)}}function c0(t,e,n){t.forEach(function(l){n.getTarget(l).hover(e,l)})}function pg(t){return function(){if(t.getMonitor().isDragging())return{type:Ol}}}function Sg(t){return{beginDrag:gg(t),publishDragSource:pg(t),hover:yg(t),drop:vg(t),endDrag:mg(t)}}var yi=class{receiveBackend(e){this.backend=e}getMonitor(){return this.monitor}getBackend(){return this.backend}getRegistry(){return this.monitor.registry}getActions(){let e=this,{dispatch:n}=this.store;function l(a){return(...i)=>{let r=a.apply(e,i);typeof r<"u"&&n(r)}}let u=Sg(this);return Object.keys(u).reduce((a,i)=>{let r=u[i];return a[i]=l(r),a},{})}dispatch(e){this.store.dispatch(e)}constructor(e,n){this.isSetUp=!1,this.handleRefCountChange=()=>{let l=this.store.getState().refCount>0;this.backend&&(l&&!this.isSetUp?(this.backend.setup(),this.isSetUp=!0):!l&&this.isSetUp&&(this.backend.teardown(),this.isSetUp=!1))},this.store=e,this.monitor=n,e.subscribe(this.handleRefCountChange)}};function f0(t,e){return{x:t.x+e.x,y:t.y+e.y}}function bg(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Eg(t){let{clientOffset:e,initialClientOffset:n,initialSourceClientOffset:l}=t;return!e||!n||!l?null:bg(f0(e,l),n)}function Og(t){let{clientOffset:e,initialClientOffset:n}=t;return!e||!n?null:bg(e,n)}var Tl=[],pi=[];Tl.__IS_NONE__=!0;pi.__IS_ALL__=!0;function Tg(t,e){return t===Tl?!1:t===pi||typeof e>"u"?!0:hg(e,t).length>0}var Si=class{subscribeToStateChange(e,n={}){let{handlerIds:l}=n;T(typeof e=="function","listener must be a function."),T(typeof l>"u"||Array.isArray(l),"handlerIds, when specified, must be an array of strings.");let u=this.store.getState().stateId,a=()=>{let i=this.store.getState(),r=i.stateId;try{r===u||r===u+1&&!Tg(i.dirtyHandlerIds,l)||e()}finally{u=r}};return this.store.subscribe(a)}subscribeToOffsetChange(e){T(typeof e=="function","listener must be a function.");let n=this.store.getState().dragOffset,l=()=>{let u=this.store.getState().dragOffset;u!==n&&(n=u,e())};return this.store.subscribe(l)}canDragSource(e){if(!e)return!1;let n=this.registry.getSource(e);return T(n,`Expected to find a valid source. sourceId=${e}`),this.isDragging()?!1:n.canDrag(this,e)}canDropOnTarget(e){if(!e)return!1;let n=this.registry.getTarget(e);if(T(n,`Expected to find a valid target. targetId=${e}`),!this.isDragging()||this.didDrop())return!1;let l=this.registry.getTargetType(e),u=this.getItemType();return zu(l,u)&&n.canDrop(this,e)}isDragging(){return!!this.getItemType()}isDraggingSource(e){if(!e)return!1;let n=this.registry.getSource(e,!0);if(T(n,`Expected to find a valid source. sourceId=${e}`),!this.isDragging()||!this.isSourcePublic())return!1;let l=this.registry.getSourceType(e),u=this.getItemType();return l!==u?!1:n.isDragging(this,e)}isOverTarget(e,n={shallow:!1}){if(!e)return!1;let{shallow:l}=n;if(!this.isDragging())return!1;let u=this.registry.getTargetType(e),a=this.getItemType();if(a&&!zu(u,a))return!1;let i=this.getTargetIds();if(!i.length)return!1;let r=i.indexOf(e);return l?r===i.length-1:r>-1}getItemType(){return this.store.getState().dragOperation.itemType}getItem(){return this.store.getState().dragOperation.item}getSourceId(){return this.store.getState().dragOperation.sourceId}getTargetIds(){return this.store.getState().dragOperation.targetIds}getDropResult(){return this.store.getState().dragOperation.dropResult}didDrop(){return this.store.getState().dragOperation.didDrop}isSourcePublic(){return!!this.store.getState().dragOperation.isSourcePublic}getInitialClientOffset(){return this.store.getState().dragOffset.initialClientOffset}getInitialSourceClientOffset(){return this.store.getState().dragOffset.initialSourceClientOffset}getClientOffset(){return this.store.getState().dragOffset.clientOffset}getSourceClientOffset(){return Eg(this.store.getState().dragOffset)}getDifferenceFromInitialOffset(){return Og(this.store.getState().dragOffset)}constructor(e,n){this.store=e,this.registry=n}};var Dg=typeof global<"u"?global:self,Mg=Dg.MutationObserver||Dg.WebKitMutationObserver;function yf(t){return function(){let n=setTimeout(u,0),l=setInterval(u,50);function u(){clearTimeout(n),clearInterval(l),t()}}}function o0(t){let e=1,n=new Mg(t),l=document.createTextNode("");return n.observe(l,{characterData:!0}),function(){e=-e,l.data=e}}var Ag=typeof Mg=="function"?o0:yf;var bi=class{enqueueTask(e){let{queue:n,requestFlush:l}=this;n.length||(l(),this.flushing=!0),n[n.length]=e}constructor(){this.queue=[],this.pendingErrors=[],this.flushing=!1,this.index=0,this.capacity=1024,this.flush=()=>{let{queue:e}=this;for(;this.indexthis.capacity){for(let l=0,u=e.length-this.index;l{this.pendingErrors.push(e),this.requestErrorThrow()},this.requestFlush=Ag(this.flush),this.requestErrorThrow=yf(()=>{if(this.pendingErrors.length)throw this.pendingErrors.shift()})}};var Ei=class{call(){try{this.task&&this.task()}catch(e){this.onError(e)}finally{this.task=null,this.release(this)}}constructor(e,n){this.onError=e,this.release=n,this.task=null}};var Oi=class{create(e){let n=this.freeTasks,l=n.length?n.pop():new Ei(this.onError,u=>n[n.length]=u);return l.task=e,l}constructor(e){this.onError=e,this.freeTasks=[]}};var _g=new bi,s0=new Oi(_g.registerPendingError);function Rg(t){_g.enqueueTask(s0.create(t))}var Uu="dnd-core/ADD_SOURCE",Hu="dnd-core/ADD_TARGET",wu="dnd-core/REMOVE_SOURCE",Cn="dnd-core/REMOVE_TARGET";function xg(t){return{type:Uu,payload:{sourceId:t}}}function Cg(t){return{type:Hu,payload:{targetId:t}}}function Ng(t){return{type:wu,payload:{sourceId:t}}}function zg(t){return{type:Cn,payload:{targetId:t}}}function Ug(t){T(typeof t.canDrag=="function","Expected canDrag to be a function."),T(typeof t.beginDrag=="function","Expected beginDrag to be a function."),T(typeof t.endDrag=="function","Expected endDrag to be a function.")}function Hg(t){T(typeof t.canDrop=="function","Expected canDrop to be a function."),T(typeof t.hover=="function","Expected hover to be a function."),T(typeof t.drop=="function","Expected beginDrag to be a function.")}function Ti(t,e){if(e&&Array.isArray(t)){t.forEach(n=>Ti(n,!1));return}T(typeof t=="string"||typeof t=="symbol",e?"Type can only be a string, a symbol, or an array of either.":"Type can only be a string or a symbol.")}var Ct;(function(t){t.SOURCE="SOURCE",t.TARGET="TARGET"})(Ct||(Ct={}));var d0=0;function wg(){return d0++}function h0(t){let e=wg().toString();switch(t){case Ct.SOURCE:return`S${e}`;case Ct.TARGET:return`T${e}`;default:throw new Error(`Unknown Handler Role: ${t}`)}}function qg(t){switch(t[0]){case"S":return Ct.SOURCE;case"T":return Ct.TARGET;default:throw new Error(`Cannot parse handler ID: ${t}`)}}function Gg(t,e){let n=t.entries(),l=!1;do{let{done:u,value:[,a]}=n.next();if(a===e)return!0;l=!!u}while(!l);return!1}var Di=class{addSource(e,n){Ti(e),Ug(n);let l=this.addHandler(Ct.SOURCE,e,n);return this.store.dispatch(xg(l)),l}addTarget(e,n){Ti(e,!0),Hg(n);let l=this.addHandler(Ct.TARGET,e,n);return this.store.dispatch(Cg(l)),l}containsHandler(e){return Gg(this.dragSources,e)||Gg(this.dropTargets,e)}getSource(e,n=!1){return T(this.isSourceId(e),"Expected a valid source ID."),n&&e===this.pinnedSourceId?this.pinnedSource:this.dragSources.get(e)}getTarget(e){return T(this.isTargetId(e),"Expected a valid target ID."),this.dropTargets.get(e)}getSourceType(e){return T(this.isSourceId(e),"Expected a valid source ID."),this.types.get(e)}getTargetType(e){return T(this.isTargetId(e),"Expected a valid target ID."),this.types.get(e)}isSourceId(e){return qg(e)===Ct.SOURCE}isTargetId(e){return qg(e)===Ct.TARGET}removeSource(e){T(this.getSource(e),"Expected an existing source."),this.store.dispatch(Ng(e)),Rg(()=>{this.dragSources.delete(e),this.types.delete(e)})}removeTarget(e){T(this.getTarget(e),"Expected an existing target."),this.store.dispatch(zg(e)),this.dropTargets.delete(e),this.types.delete(e)}pinSource(e){let n=this.getSource(e);T(n,"Expected an existing source."),this.pinnedSourceId=e,this.pinnedSource=n}unpinSource(){T(this.pinnedSource,"No source is pinned at the time."),this.pinnedSourceId=null,this.pinnedSource=null}addHandler(e,n,l){let u=h0(e);return this.types.set(u,n),e===Ct.SOURCE?this.dragSources.set(u,l):e===Ct.TARGET&&this.dropTargets.set(u,l),u}constructor(e){this.types=new Map,this.dragSources=new Map,this.dropTargets=new Map,this.pinnedSourceId=null,this.pinnedSource=null,this.store=e}};var g0=(t,e)=>t===e;function Bg(t,e){return!t&&!e?!0:!t||!e?!1:t.x===e.x&&t.y===e.y}function Yg(t,e,n=g0){if(t.length!==e.length)return!1;for(let l=0;l0||!Yg(n,l)))return Tl;let i=l[l.length-1],r=n[n.length-1];return i!==r&&(i&&u.push(i),r&&u.push(r)),u}function v0(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function m0(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,l)&&(n[l]=t[l])}return n}function T0(t,e){if(t==null)return{};var n={},l=Object.keys(t),u,a;for(a=0;a=0)&&(n[u]=t[u]);return n}var kg=0,Mi=Symbol.for("__REACT_DND_CONTEXT_INSTANCE__"),Pg=(0,Ai.memo)(function(e){var{children:n}=e,l=O0(e,["children"]);let[u,a]=D0(l);return(0,Ai.useEffect)(()=>{if(a){let i=$g();return++kg,()=>{--kg===0&&(i[Mi]=null)}}},[]),(0,Wg.jsx)(gi.Provider,{value:u,children:n})});function D0(t){if("manager"in t)return[{dragDropManager:t.manager},!1];let e=M0(t.backend,t.context,t.options,t.debugMode),n=!t.context;return[e,n]}function M0(t,e=$g(),n,l){let u=e;return u[Mi]||(u[Mi]={dragDropManager:Jg(t,e,n,l)}),u[Mi]}function $g(){return typeof global<"u"?global:window}var tv=C(Ig(),1),Ri=C(P(),1);var _i=C(P(),1),Me=typeof window<"u"?_i.useLayoutEffect:_i.useEffect;function xi(t,e,n){let[l,u]=(0,Ri.useState)(()=>e(t)),a=(0,Ri.useCallback)(()=>{let i=e(t);(0,tv.default)(l,i)||(u(i),n&&n())},[l,t,n]);return Me(a),[l,a]}function ev(t,e,n){let[l,u]=xi(t,e,n);return Me(function(){let i=t.getHandlerId();if(i!=null)return t.subscribeToStateChange(u,{handlerIds:[i]})},[t,u]),l}function nv(t,e,n){return ev(e,t||(()=>({})),()=>n.reconnect())}var lv=C(P(),1);function uv(t,e){let n=[...e||[]];return e==null&&typeof t!="function"&&n.push(t),(0,lv.useMemo)(()=>typeof t=="function"?t():t,n)}var pf=C(P(),1);function av(t){return(0,pf.useMemo)(()=>t.hooks.dragSource(),[t])}function iv(t){return(0,pf.useMemo)(()=>t.hooks.dragPreview(),[t])}var sv=C(P(),1);var Sf=!1,bf=!1,Ci=class{receiveHandlerId(e){this.sourceId=e}getHandlerId(){return this.sourceId}canDrag(){T(!Sf,"You may not call monitor.canDrag() inside your canDrag() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return Sf=!0,this.internalMonitor.canDragSource(this.sourceId)}finally{Sf=!1}}isDragging(){if(!this.sourceId)return!1;T(!bf,"You may not call monitor.isDragging() inside your isDragging() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return bf=!0,this.internalMonitor.isDraggingSource(this.sourceId)}finally{bf=!1}}subscribeToStateChange(e,n){return this.internalMonitor.subscribeToStateChange(e,n)}isDraggingSource(e){return this.internalMonitor.isDraggingSource(e)}isOverTarget(e,n){return this.internalMonitor.isOverTarget(e,n)}getTargetIds(){return this.internalMonitor.getTargetIds()}isSourcePublic(){return this.internalMonitor.isSourcePublic()}getSourceId(){return this.internalMonitor.getSourceId()}subscribeToOffsetChange(e){return this.internalMonitor.subscribeToOffsetChange(e)}canDragSource(e){return this.internalMonitor.canDragSource(e)}canDropOnTarget(e){return this.internalMonitor.canDropOnTarget(e)}getItemType(){return this.internalMonitor.getItemType()}getItem(){return this.internalMonitor.getItem()}getDropResult(){return this.internalMonitor.getDropResult()}didDrop(){return this.internalMonitor.didDrop()}getInitialClientOffset(){return this.internalMonitor.getInitialClientOffset()}getInitialSourceClientOffset(){return this.internalMonitor.getInitialSourceClientOffset()}getSourceClientOffset(){return this.internalMonitor.getSourceClientOffset()}getClientOffset(){return this.internalMonitor.getClientOffset()}getDifferenceFromInitialOffset(){return this.internalMonitor.getDifferenceFromInitialOffset()}constructor(e){this.sourceId=null,this.internalMonitor=e.getMonitor()}};function rv(t,e,n){let l=n.getRegistry(),u=l.addSource(t,e);return[u,()=>l.removeSource(u)]}function Ef(t,e,n,l){let u=n?n.call(l,t,e):void 0;if(u!==void 0)return!!u;if(t===e)return!0;if(typeof t!="object"||!t||typeof e!="object"||!e)return!1;let a=Object.keys(t),i=Object.keys(e);if(a.length!==i.length)return!1;let r=Object.prototype.hasOwnProperty.bind(e);for(let c=0;c, or turn it into a drag source or a drop target itself.`)}function _0(t){return(e=null,n=null)=>{if(!(0,qu.isValidElement)(e)){let a=e;return t(a,n),a}let l=e;return A0(l),R0(l,n?a=>t(a,n):t)}}function fv(t){let e={};return Object.keys(t).forEach(n=>{let l=t[n];if(n.endsWith("Ref"))e[n]=t[n];else{let u=_0(l);e[n]=()=>u}}),e}function cv(t,e){typeof t=="function"?t(e):t.current=e}function R0(t,e){let n=t.ref;return T(typeof n!="string","Cannot connect React DnD to an element with an existing string ref. Please convert it to use a callback ref instead, or wrap it into a or
. Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs"),n?(0,qu.cloneElement)(t,{ref:l=>{cv(n,l),cv(e,l)}}):(0,qu.cloneElement)(t,{ref:e})}var Ni=class{receiveHandlerId(e){this.handlerId!==e&&(this.handlerId=e,this.reconnect())}get connectTarget(){return this.dragSource}get dragSourceOptions(){return this.dragSourceOptionsInternal}set dragSourceOptions(e){this.dragSourceOptionsInternal=e}get dragPreviewOptions(){return this.dragPreviewOptionsInternal}set dragPreviewOptions(e){this.dragPreviewOptionsInternal=e}reconnect(){let e=this.reconnectDragSource();this.reconnectDragPreview(e)}reconnectDragSource(){let e=this.dragSource,n=this.didHandlerIdChange()||this.didConnectedDragSourceChange()||this.didDragSourceOptionsChange();return n&&this.disconnectDragSource(),this.handlerId?e?(n&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragSource=e,this.lastConnectedDragSourceOptions=this.dragSourceOptions,this.dragSourceUnsubscribe=this.backend.connectDragSource(this.handlerId,e,this.dragSourceOptions)),n):(this.lastConnectedDragSource=e,n):n}reconnectDragPreview(e=!1){let n=this.dragPreview,l=e||this.didHandlerIdChange()||this.didConnectedDragPreviewChange()||this.didDragPreviewOptionsChange();if(l&&this.disconnectDragPreview(),!!this.handlerId){if(!n){this.lastConnectedDragPreview=n;return}l&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragPreview=n,this.lastConnectedDragPreviewOptions=this.dragPreviewOptions,this.dragPreviewUnsubscribe=this.backend.connectDragPreview(this.handlerId,n,this.dragPreviewOptions))}}didHandlerIdChange(){return this.lastConnectedHandlerId!==this.handlerId}didConnectedDragSourceChange(){return this.lastConnectedDragSource!==this.dragSource}didConnectedDragPreviewChange(){return this.lastConnectedDragPreview!==this.dragPreview}didDragSourceOptionsChange(){return!Ef(this.lastConnectedDragSourceOptions,this.dragSourceOptions)}didDragPreviewOptionsChange(){return!Ef(this.lastConnectedDragPreviewOptions,this.dragPreviewOptions)}disconnectDragSource(){this.dragSourceUnsubscribe&&(this.dragSourceUnsubscribe(),this.dragSourceUnsubscribe=void 0)}disconnectDragPreview(){this.dragPreviewUnsubscribe&&(this.dragPreviewUnsubscribe(),this.dragPreviewUnsubscribe=void 0,this.dragPreviewNode=null,this.dragPreviewRef=null)}get dragSource(){return this.dragSourceNode||this.dragSourceRef&&this.dragSourceRef.current}get dragPreview(){return this.dragPreviewNode||this.dragPreviewRef&&this.dragPreviewRef.current}clearDragSource(){this.dragSourceNode=null,this.dragSourceRef=null}clearDragPreview(){this.dragPreviewNode=null,this.dragPreviewRef=null}constructor(e){this.hooks=fv({dragSource:(n,l)=>{this.clearDragSource(),this.dragSourceOptions=l||null,Of(n)?this.dragSourceRef=n:this.dragSourceNode=n,this.reconnectDragSource()},dragPreview:(n,l)=>{this.clearDragPreview(),this.dragPreviewOptions=l||null,Of(n)?this.dragPreviewRef=n:this.dragPreviewNode=n,this.reconnectDragPreview()}}),this.handlerId=null,this.dragSourceRef=null,this.dragSourceOptionsInternal=null,this.dragPreviewRef=null,this.dragPreviewOptionsInternal=null,this.lastConnectedHandlerId=null,this.lastConnectedDragSource=null,this.lastConnectedDragSourceOptions=null,this.lastConnectedDragPreview=null,this.lastConnectedDragPreviewOptions=null,this.backend=e}};var ov=C(P(),1);function un(){let{dragDropManager:t}=(0,ov.useContext)(gi);return T(t!=null,"Expected drag drop context"),t}function dv(t,e){let n=un(),l=(0,sv.useMemo)(()=>new Ni(n.getBackend()),[n]);return Me(()=>(l.dragSourceOptions=t||null,l.reconnect(),()=>l.disconnectDragSource()),[l,t]),Me(()=>(l.dragPreviewOptions=e||null,l.reconnect(),()=>l.disconnectDragPreview()),[l,e]),l}var hv=C(P(),1);function gv(){let t=un();return(0,hv.useMemo)(()=>new Ci(t),[t])}var Ui=C(P(),1);var zi=class{beginDrag(){let e=this.spec,n=this.monitor,l=null;return typeof e.item=="object"?l=e.item:typeof e.item=="function"?l=e.item(n):l={},l??null}canDrag(){let e=this.spec,n=this.monitor;return typeof e.canDrag=="boolean"?e.canDrag:typeof e.canDrag=="function"?e.canDrag(n):!0}isDragging(e,n){let l=this.spec,u=this.monitor,{isDragging:a}=l;return a?a(u):n===e.getSourceId()}endDrag(){let e=this.spec,n=this.monitor,l=this.connector,{end:u}=e;u&&u(n.getItem(),n),l.reconnect()}constructor(e,n,l){this.spec=e,this.monitor=n,this.connector=l}};function vv(t,e,n){let l=(0,Ui.useMemo)(()=>new zi(t,e,n),[e,n]);return(0,Ui.useEffect)(()=>{l.spec=t},[t]),l}var mv=C(P(),1);function yv(t){return(0,mv.useMemo)(()=>{let e=t.type;return T(e!=null,"spec.type must be defined"),e},[t])}function pv(t,e,n){let l=un(),u=vv(t,e,n),a=yv(t);Me(function(){if(a!=null){let[r,c]=rv(a,u,l);return e.receiveHandlerId(r),n.receiveHandlerId(r),c}},[l,e,n,u,a])}function Sv(t,e){let n=uv(t,e);T(!n.begin,"useDrag::spec.begin was deprecated in v14. Replace spec.begin() with spec.item(). (see more here - https://react-dnd.github.io/react-dnd/docs/api/use-drag)");let l=gv(),u=dv(n.options,n.previewOptions);return pv(n,l,u),[nv(n.collect,l,u),av(u),iv(u)]}var Tf=C(P(),1);function bv(t){let n=un().getMonitor(),[l,u]=xi(n,t);return(0,Tf.useEffect)(()=>n.subscribeToOffsetChange(u)),(0,Tf.useEffect)(()=>n.subscribeToStateChange(u)),l}var Ae;(function(t){t.mouse="mouse",t.touch="touch",t.keyboard="keyboard"})(Ae||(Ae={}));var Hi=class{get delay(){var e;return(e=this.args.delay)!==null&&e!==void 0?e:0}get scrollAngleRanges(){return this.args.scrollAngleRanges}get getDropTargetElementsAtPoint(){return this.args.getDropTargetElementsAtPoint}get ignoreContextMenu(){var e;return(e=this.args.ignoreContextMenu)!==null&&e!==void 0?e:!1}get enableHoverOutsideTarget(){var e;return(e=this.args.enableHoverOutsideTarget)!==null&&e!==void 0?e:!1}get enableKeyboardEvents(){var e;return(e=this.args.enableKeyboardEvents)!==null&&e!==void 0?e:!1}get enableMouseEvents(){var e;return(e=this.args.enableMouseEvents)!==null&&e!==void 0?e:!1}get enableTouchEvents(){var e;return(e=this.args.enableTouchEvents)!==null&&e!==void 0?e:!0}get touchSlop(){return this.args.touchSlop||0}get delayTouchStart(){var e,n,l,u;return(u=(l=(e=this.args)===null||e===void 0?void 0:e.delayTouchStart)!==null&&l!==void 0?l:(n=this.args)===null||n===void 0?void 0:n.delay)!==null&&u!==void 0?u:0}get delayMouseStart(){var e,n,l,u;return(u=(l=(e=this.args)===null||e===void 0?void 0:e.delayMouseStart)!==null&&l!==void 0?l:(n=this.args)===null||n===void 0?void 0:n.delay)!==null&&u!==void 0?u:0}get window(){if(this.context&&this.context.window)return this.context.window;if(typeof window<"u")return window}get document(){var e;if(!((e=this.context)===null||e===void 0)&&e.document)return this.context.document;if(this.window)return this.window.document}get rootElement(){var e;return((e=this.args)===null||e===void 0?void 0:e.rootElement)||this.document}constructor(e,n){this.args=e,this.context=n}};function Ev(t,e,n,l){return Math.sqrt(Math.pow(Math.abs(n-t),2)+Math.pow(Math.abs(l-e),2))}function Ov(t,e,n,l,u){if(!u)return!1;let a=Math.atan2(l-e,n-t)*180/Math.PI+180;for(let i=0;i=r.start)&&(r.end==null||a<=r.end))return!0}return!1}var x0={Left:1,Right:2,Center:4},C0={Left:0,Center:1,Right:2};function wi(t){return t.button===void 0||t.button===C0.Left}function Tv(t){return t.buttons===void 0||(t.buttons&x0.Left)===0}function qi(t){return!!t.targetTouches}var N0=1;function Dv(t){let e=t.nodeType===N0?t:t.parentElement;if(!e)return;let{top:n,left:l}=e.getBoundingClientRect();return{x:l,y:n}}function z0(t,e){if(t.targetTouches.length===1)return Gu(t.targetTouches[0]);if(e&&t.touches.length===1&&t.touches[0].target===e.target)return Gu(t.touches[0])}function Gu(t,e){return qi(t)?z0(t,e):{x:t.clientX,y:t.clientY}}var Df=(()=>{let t=!1;try{addEventListener("test",()=>{},Object.defineProperty({},"passive",{get(){return t=!0,!0}}))}catch{}return t})();var Bu={[Ae.mouse]:{start:"mousedown",move:"mousemove",end:"mouseup",contextmenu:"contextmenu"},[Ae.touch]:{start:"touchstart",move:"touchmove",end:"touchend"},[Ae.keyboard]:{keydown:"keydown"}},Gi=class t{profile(){var e;return{sourceNodes:this.sourceNodes.size,sourcePreviewNodes:this.sourcePreviewNodes.size,sourcePreviewNodeOptions:this.sourcePreviewNodeOptions.size,targetNodes:this.targetNodes.size,dragOverTargetIds:((e=this.dragOverTargetIds)===null||e===void 0?void 0:e.length)||0}}get document(){return this.options.document}setup(){let e=this.options.rootElement;e&&(T(!t.isSetUp,"Cannot have two Touch backends at the same time."),t.isSetUp=!0,this.addEventListener(e,"start",this.getTopMoveStartHandler()),this.addEventListener(e,"start",this.handleTopMoveStartCapture,!0),this.addEventListener(e,"move",this.handleTopMove),this.addEventListener(e,"move",this.handleTopMoveCapture,!0),this.addEventListener(e,"end",this.handleTopMoveEndCapture,!0),this.options.enableMouseEvents&&!this.options.ignoreContextMenu&&this.addEventListener(e,"contextmenu",this.handleTopMoveEndCapture),this.options.enableKeyboardEvents&&this.addEventListener(e,"keydown",this.handleCancelOnEscape,!0))}teardown(){let e=this.options.rootElement;e&&(t.isSetUp=!1,this._mouseClientOffset={},this.removeEventListener(e,"start",this.handleTopMoveStartCapture,!0),this.removeEventListener(e,"start",this.handleTopMoveStart),this.removeEventListener(e,"move",this.handleTopMoveCapture,!0),this.removeEventListener(e,"move",this.handleTopMove),this.removeEventListener(e,"end",this.handleTopMoveEndCapture,!0),this.options.enableMouseEvents&&!this.options.ignoreContextMenu&&this.removeEventListener(e,"contextmenu",this.handleTopMoveEndCapture),this.options.enableKeyboardEvents&&this.removeEventListener(e,"keydown",this.handleCancelOnEscape,!0),this.uninstallSourceNodeRemovalObserver())}addEventListener(e,n,l,u=!1){let a=Df?{capture:u,passive:!1}:u;this.listenerTypes.forEach(function(i){let r=Bu[i][n];r&&e.addEventListener(r,l,a)})}removeEventListener(e,n,l,u=!1){let a=Df?{capture:u,passive:!1}:u;this.listenerTypes.forEach(function(i){let r=Bu[i][n];r&&e.removeEventListener(r,l,a)})}connectDragSource(e,n){let l=this.handleMoveStart.bind(this,e);return this.sourceNodes.set(e,n),this.addEventListener(n,"start",l),()=>{this.sourceNodes.delete(e),this.removeEventListener(n,"start",l)}}connectDragPreview(e,n,l){return this.sourcePreviewNodeOptions.set(e,l),this.sourcePreviewNodes.set(e,n),()=>{this.sourcePreviewNodes.delete(e),this.sourcePreviewNodeOptions.delete(e)}}connectDropTarget(e,n){let l=this.options.rootElement;if(!this.document||!l)return()=>{};let u=a=>{if(!this.document||!l||!this.monitor.isDragging())return;let i;switch(a.type){case Bu.mouse.move:i={x:a.clientX,y:a.clientY};break;case Bu.touch.move:var r,c;i={x:((r=a.touches[0])===null||r===void 0?void 0:r.clientX)||0,y:((c=a.touches[0])===null||c===void 0?void 0:c.clientY)||0};break}let f=i!=null?this.document.elementFromPoint(i.x,i.y):void 0,g=f&&n.contains(f);if(f===n||g)return this.handleMove(a,e)};return this.addEventListener(this.document.body,"move",u),this.targetNodes.set(e,n),()=>{this.document&&(this.targetNodes.delete(e),this.removeEventListener(this.document.body,"move",u))}}getTopMoveStartHandler(){return!this.options.delayTouchStart&&!this.options.delayMouseStart?this.handleTopMoveStart:this.handleTopMoveStartDelay}installSourceNodeRemovalObserver(e){this.uninstallSourceNodeRemovalObserver(),this.draggedSourceNode=e,this.draggedSourceNodeRemovalObserver=new MutationObserver(()=>{e&&!e.parentElement&&(this.resurrectSourceNode(),this.uninstallSourceNodeRemovalObserver())}),!(!e||!e.parentElement)&&this.draggedSourceNodeRemovalObserver.observe(e.parentElement,{childList:!0})}resurrectSourceNode(){this.document&&this.draggedSourceNode&&(this.draggedSourceNode.style.display="none",this.draggedSourceNode.removeAttribute("data-reactid"),this.document.body.appendChild(this.draggedSourceNode))}uninstallSourceNodeRemovalObserver(){this.draggedSourceNodeRemovalObserver&&this.draggedSourceNodeRemovalObserver.disconnect(),this.draggedSourceNodeRemovalObserver=void 0,this.draggedSourceNode=void 0}constructor(e,n,l){this.getSourceClientOffset=u=>{let a=this.sourceNodes.get(u);return a&&Dv(a)},this.handleTopMoveStartCapture=u=>{wi(u)&&(this.moveStartSourceIds=[])},this.handleMoveStart=u=>{Array.isArray(this.moveStartSourceIds)&&this.moveStartSourceIds.unshift(u)},this.handleTopMoveStart=u=>{if(!wi(u))return;let a=Gu(u);a&&(qi(u)&&(this.lastTargetTouchFallback=u.targetTouches[0]),this._mouseClientOffset=a),this.waitingForDelay=!1},this.handleTopMoveStartDelay=u=>{if(!wi(u))return;let a=u.type===Bu.touch.start?this.options.delayTouchStart:this.options.delayMouseStart;this.timeout=setTimeout(this.handleTopMoveStart.bind(this,u),a),this.waitingForDelay=!0},this.handleTopMoveCapture=()=>{this.dragOverTargetIds=[]},this.handleMove=(u,a)=>{this.dragOverTargetIds&&this.dragOverTargetIds.unshift(a)},this.handleTopMove=u=>{if(this.timeout&&clearTimeout(this.timeout),!this.document||this.waitingForDelay)return;let{moveStartSourceIds:a,dragOverTargetIds:i}=this,r=this.options.enableHoverOutsideTarget,c=Gu(u,this.lastTargetTouchFallback);if(!c)return;if(this._isScrolling||!this.monitor.isDragging()&&Ov(this._mouseClientOffset.x||0,this._mouseClientOffset.y||0,c.x,c.y,this.options.scrollAngleRanges)){this._isScrolling=!0;return}if(!this.monitor.isDragging()&&this._mouseClientOffset.hasOwnProperty("x")&&a&&Ev(this._mouseClientOffset.x||0,this._mouseClientOffset.y||0,c.x,c.y)>(this.options.touchSlop?this.options.touchSlop:0)&&(this.moveStartSourceIds=void 0,this.actions.beginDrag(a,{clientOffset:this._mouseClientOffset,getSourceClientOffset:this.getSourceClientOffset,publishSource:!1})),!this.monitor.isDragging())return;let f=this.sourceNodes.get(this.monitor.getSourceId());this.installSourceNodeRemovalObserver(f),this.actions.publishDragSource(),u.cancelable&&u.preventDefault();let g=(i||[]).map(S=>this.targetNodes.get(S)).filter(S=>!!S),m=this.options.getDropTargetElementsAtPoint?this.options.getDropTargetElementsAtPoint(c.x,c.y,g):this.document.elementsFromPoint(c.x,c.y),d=[];for(let S in m){if(!m.hasOwnProperty(S))continue;let b=m[S];for(b!=null&&d.push(b);b;)b=b.parentElement,b&&d.indexOf(b)===-1&&d.push(b)}let v=d.filter(S=>g.indexOf(S)>-1).map(S=>this._getDropTargetId(S)).filter(S=>!!S).filter((S,b,U)=>U.indexOf(S)===b);if(r)for(let S in this.targetNodes){let b=this.targetNodes.get(S);if(f&&b&&b.contains(f)&&v.indexOf(S)===-1){v.unshift(S);break}}v.reverse(),this.actions.hover(v,{clientOffset:c})},this._getDropTargetId=u=>{let a=this.targetNodes.keys(),i=a.next();for(;i.done===!1;){let r=i.value;if(u===this.targetNodes.get(r))return r;i=a.next()}},this.handleTopMoveEndCapture=u=>{if(this._isScrolling=!1,this.lastTargetTouchFallback=void 0,!!Tv(u)){if(!this.monitor.isDragging()||this.monitor.didDrop()){this.moveStartSourceIds=void 0;return}u.cancelable&&u.preventDefault(),this._mouseClientOffset={},this.uninstallSourceNodeRemovalObserver(),this.actions.drop(),this.actions.endDrag()}},this.handleCancelOnEscape=u=>{u.key==="Escape"&&this.monitor.isDragging()&&(this._mouseClientOffset={},this.uninstallSourceNodeRemovalObserver(),this.actions.endDrag())},this.options=new Hi(l,n),this.actions=e.getActions(),this.monitor=e.getMonitor(),this.sourceNodes=new Map,this.sourcePreviewNodes=new Map,this.sourcePreviewNodeOptions=new Map,this.targetNodes=new Map,this.listenerTypes=[],this._mouseClientOffset={},this._isScrolling=!1,this.options.enableMouseEvents&&this.listenerTypes.push(Ae.mouse),this.options.enableTouchEvents&&this.listenerTypes.push(Ae.touch),this.options.enableKeyboardEvents&&this.listenerTypes.push(Ae.keyboard)}};var Mv=function(e,n={},l={}){return new Gi(e,n,l)};var Av=C(P(),1);var Af=C(vt(),1),Mf=({style:t,size:e,color:n,children:l,ref:u})=>(0,Af.jsx)("div",{ref:u,style:{...t,backgroundColor:n,width:`${e}px`,height:`${e}px`},children:l}),_v=()=>{let[t,e]=Sv({type:"thing",item:{color:"#eedd00"}}),n=(0,Av.useCallback)(l=>{e(l)},[e]);return(0,Af.jsx)(Mf,{ref:n,style:{},size:100,color:"blue"})};var Rv=C(P(),1),Nn=(0,Rv.createContext)(void 0);var Cv=C(P(),1);var _f=(t,e)=>({x:t.x-e.x,y:t.y-e.y}),U0=(t,e)=>({x:t.x+e.x,y:t.y+e.y}),H0=t=>{let e=t.getInitialClientOffset(),n=t.getInitialSourceClientOffset();return e===null||n===null?{x:0,y:0}:_f(e,n)},w0=(t,e)=>{switch(t){case"left":case"top-start":case"bottom-start":return 0;case"right":case"top-end":case"bottom-end":return e.width;default:return e.width/2}},q0=(t,e)=>{switch(t){case"top":case"top-start":case"top-end":return 0;case"bottom":case"bottom-start":case"bottom-end":return e.height;default:return e.height/2}},xv=(t,e,n="center",l={x:0,y:0})=>{let u=t.getClientOffset();if(u===null)return null;if(!e.current||!e.current.getBoundingClientRect)return _f(u,H0(t));let a=e.current.getBoundingClientRect(),i={x:w0(n,a),y:q0(n,a)};return U0(_f(u,i),l)};var G0=t=>{let e=`translate(${t.x.toFixed(1)}px, ${t.y.toFixed(1)}px)`;return{pointerEvents:"none",position:"fixed",top:0,left:0,transform:e,WebkitTransform:e}},Yu=t=>{let e=(0,Cv.useRef)(null),n=bv(l=>({currentOffset:xv(l,e,t?.placement,t?.padding),isDragging:l.isDragging(),itemType:l.getItemType(),item:l.getItem(),monitor:l}));return!n.isDragging||n.currentOffset===null?{display:!1}:{display:!0,itemType:n.itemType,item:n.item,style:G0(n.currentOffset),monitor:n.monitor,ref:e}};var Nv=C(vt(),1),Ml=t=>{let e=Yu({placement:t.placement,padding:t.padding});if(!e.display)return null;let{display:n,...l}=e,u;return"children"in t?typeof t.children=="function"?u=t.children(l):u=t.children:u=t.generator(l),(0,Nv.jsx)(Nn.Provider,{value:l,children:u})};var zv=C(P(),1);var ju=C(vt(),1),Al=({itemType:t,item:e,style:n,ref:l},{row:u,col:a,title:i,method:r})=>(0,ju.jsxs)(Mf,{color:e.color,size:50,ref:l,style:{...n,top:`${u*60}px`,left:`${a*100}px`,whiteSpace:"nowrap"},children:[i,(0,ju.jsx)("br",{}),"Generated ",t?.toString(),(0,ju.jsx)("br",{}),r]}),Uv=({col:t,title:e})=>n=>Al(n,{row:0,col:t,title:e,method:"with prop function"}),Hv=({col:t,title:e})=>n=>Al(n,{row:1,col:t,title:e,method:"with child function"}),wv=({col:t,title:e})=>{let n=(0,zv.useContext)(Nn);if(!n)throw new Error("missing preview context");return Al(n,{row:2,col:t,title:e,method:"with child component (using context)"})},qv=({col:t,title:e})=>n=>Al(n,{row:3,col:t,title:e,method:"with child function (using context)"});var $t=C(vt(),1),Gv=({title:t,col:e})=>(0,$t.jsxs)($t.Fragment,{children:[(0,$t.jsx)(Ml,{generator:Uv({title:t,col:e})}),(0,$t.jsx)(Ml,{children:Hv({title:t,col:e})}),(0,$t.jsx)(Ml,{children:(0,$t.jsx)(wv,{title:t,col:e})}),(0,$t.jsx)(Ml,{children:(0,$t.jsx)(Nn.Consumer,{children:n=>{if(!n)throw new Error("missing preview context");return qv({title:t,col:e})(n)}})})]});var Xu=C(vt(),1),B0=t=>{let e=Yu();return e.display?Al(e,t):null},Bv=t=>(0,Xu.jsx)(Xu.Fragment,{children:(0,Xu.jsx)(B0,{row:0,method:"with hook",...t})});var zn=C(vt(),1),jv=()=>(0,zn.jsx)(Yv.StrictMode,{children:(0,zn.jsxs)(Pg,{backend:Mv,options:{enableMouseEvents:!0},children:[(0,zn.jsx)(_v,{}),(0,zn.jsx)(Gv,{title:"Components",col:0}),(0,zn.jsx)(Bv,{title:"Hooks",col:1})]})});var Vv=C(vt(),1),Lv=document.getElementById("root");if(!Lv)throw new Error("could not find root element");var Y0=(0,Xv.createRoot)(Lv);Y0.render((0,Vv.jsx)(jv,{}));})(); +/*! Bundled license information: + +scheduler/cjs/scheduler.production.js: + (** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react.production.js: + (** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom.production.js: + (** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom-client.production.js: + (** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react-jsx-runtime.production.js: + (** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/examples/examples_react-dnd-preview_offset.min.js b/examples/examples_react-dnd-preview_offset.min.js new file mode 100644 index 00000000..74c2e643 --- /dev/null +++ b/examples/examples_react-dnd-preview_offset.min.js @@ -0,0 +1,66 @@ +"use strict";(()=>{var Nv=Object.create;var Df=Object.defineProperty;var zv=Object.getOwnPropertyDescriptor;var Uv=Object.getOwnPropertyNames;var Hv=Object.getPrototypeOf,wv=Object.prototype.hasOwnProperty;var Zt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var qv=(t,e,l,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of Uv(e))!wv.call(t,u)&&u!==l&&Df(t,u,{get:()=>e[u],enumerable:!(n=zv(e,u))||n.enumerable});return t};var V=(t,e,l)=>(l=t!=null?Nv(Hv(t)):{},qv(e||!t||!t.__esModule?Df(l,"default",{value:t,enumerable:!0}):l,t));var Hf=Zt(Y=>{"use strict";function qi(t,e){var l=t.length;t.push(e);t:for(;0>>1,u=t[n];if(0>>1;nqu(c,l))rqu(f,c)?(t[n]=f,t[r]=l,n=r):(t[n]=c,t[i]=l,n=i);else if(rqu(f,l))t[n]=f,t[r]=l,n=r;else break t}}return e}function qu(t,e){var l=t.sortIndex-e.sortIndex;return l!==0?l:t.id-e.id}Y.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(Mf=performance,Y.unstable_now=function(){return Mf.now()}):(Ui=Date,Af=Ui.now(),Y.unstable_now=function(){return Ui.now()-Af});var Mf,Ui,Af,Pt=[],_e=[],Bv=1,Nt=null,ht=3,Gu=!1,al=!1,Mn=!1,xf=typeof setTimeout=="function"?setTimeout:null,Cf=typeof clearTimeout=="function"?clearTimeout:null,_f=typeof setImmediate<"u"?setImmediate:null;function Bu(t){for(var e=Kt(_e);e!==null;){if(e.callback===null)Yu(_e);else if(e.startTime<=t)Yu(_e),e.sortIndex=e.expirationTime,qi(Pt,e);else break;e=Kt(_e)}}function Bi(t){if(Mn=!1,Bu(t),!al)if(Kt(Pt)!==null)al=!0,Yi();else{var e=Kt(_e);e!==null&&Gi(Bi,e.startTime-t)}}var ju=!1,An=-1,Nf=5,zf=-1;function Uf(){return!(Y.unstable_now()-zft&&Uf());){var n=Nt.callback;if(typeof n=="function"){Nt.callback=null,ht=Nt.priorityLevel;var u=n(Nt.expirationTime<=t);if(t=Y.unstable_now(),typeof u=="function"){Nt.callback=u,Bu(t),e=!0;break e}Nt===Kt(Pt)&&Yu(Pt),Bu(t)}else Yu(Pt);Nt=Kt(Pt)}if(Nt!==null)e=!0;else{var a=Kt(_e);a!==null&&Gi(Bi,a.startTime-t),e=!1}}break t}finally{Nt=null,ht=l,Gu=!1}e=void 0}}finally{e?Dn():ju=!1}}}var Dn;typeof _f=="function"?Dn=function(){_f(Hi)}:typeof MessageChannel<"u"?(wi=new MessageChannel,Rf=wi.port2,wi.port1.onmessage=Hi,Dn=function(){Rf.postMessage(null)}):Dn=function(){xf(Hi,0)};var wi,Rf;function Yi(){ju||(ju=!0,Dn())}function Gi(t,e){An=xf(function(){t(Y.unstable_now())},e)}Y.unstable_IdlePriority=5;Y.unstable_ImmediatePriority=1;Y.unstable_LowPriority=4;Y.unstable_NormalPriority=3;Y.unstable_Profiling=null;Y.unstable_UserBlockingPriority=2;Y.unstable_cancelCallback=function(t){t.callback=null};Y.unstable_continueExecution=function(){al||Gu||(al=!0,Yi())};Y.unstable_forceFrameRate=function(t){0>t||125n?(t.sortIndex=l,qi(_e,t),Kt(Pt)===null&&t===Kt(_e)&&(Mn?(Cf(An),An=-1):Mn=!0,Gi(Bi,l-n))):(t.sortIndex=u,qi(Pt,t),al||Gu||(al=!0,Yi())),t};Y.unstable_shouldYield=Uf;Y.unstable_wrapCallback=function(t){var e=ht;return function(){var l=ht;ht=e;try{return t.apply(this,arguments)}finally{ht=l}}}});var qf=Zt((_0,wf)=>{"use strict";wf.exports=Hf()});var kf=Zt(A=>{"use strict";var Xi=Symbol.for("react.transitional.element"),Yv=Symbol.for("react.portal"),Gv=Symbol.for("react.fragment"),jv=Symbol.for("react.strict_mode"),Xv=Symbol.for("react.profiler"),Vv=Symbol.for("react.consumer"),Lv=Symbol.for("react.context"),Qv=Symbol.for("react.forward_ref"),Zv=Symbol.for("react.suspense"),Kv=Symbol.for("react.memo"),Vf=Symbol.for("react.lazy"),Bf=Symbol.iterator;function Jv(t){return t===null||typeof t!="object"?null:(t=Bf&&t[Bf]||t["@@iterator"],typeof t=="function"?t:null)}var Lf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Qf=Object.assign,Zf={};function zl(t,e,l){this.props=t,this.context=e,this.refs=Zf,this.updater=l||Lf}zl.prototype.isReactComponent={};zl.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};zl.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Kf(){}Kf.prototype=zl.prototype;function Vi(t,e,l){this.props=t,this.context=e,this.refs=Zf,this.updater=l||Lf}var Li=Vi.prototype=new Kf;Li.constructor=Vi;Qf(Li,zl.prototype);Li.isPureReactComponent=!0;var Yf=Array.isArray,K={H:null,A:null,T:null,S:null},Jf=Object.prototype.hasOwnProperty;function Qi(t,e,l,n,u,a){return l=a.ref,{$$typeof:Xi,type:t,key:e,ref:l!==void 0?l:null,props:a}}function kv(t,e){return Qi(t.type,e,void 0,void 0,void 0,t.props)}function Zi(t){return typeof t=="object"&&t!==null&&t.$$typeof===Xi}function Wv(t){var e={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(l){return e[l]})}var Gf=/\/+/g;function ji(t,e){return typeof t=="object"&&t!==null&&t.key!=null?Wv(""+t.key):e.toString(36)}function jf(){}function $v(t){switch(t.status){case"fulfilled":return t.value;case"rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(jf,jf):(t.status="pending",t.then(function(e){t.status==="pending"&&(t.status="fulfilled",t.value=e)},function(e){t.status==="pending"&&(t.status="rejected",t.reason=e)})),t.status){case"fulfilled":return t.value;case"rejected":throw t.reason}}throw t}function Nl(t,e,l,n,u){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var i=!1;if(t===null)i=!0;else switch(a){case"bigint":case"string":case"number":i=!0;break;case"object":switch(t.$$typeof){case Xi:case Yv:i=!0;break;case Vf:return i=t._init,Nl(i(t._payload),e,l,n,u)}}if(i)return u=u(t),i=n===""?"."+ji(t,0):n,Yf(u)?(l="",i!=null&&(l=i.replace(Gf,"$&/")+"/"),Nl(u,e,l,"",function(f){return f})):u!=null&&(Zi(u)&&(u=kv(u,l+(u.key==null||t&&t.key===u.key?"":(""+u.key).replace(Gf,"$&/")+"/")+i)),e.push(u)),1;i=0;var c=n===""?".":n+":";if(Yf(t))for(var r=0;r{"use strict";Wf.exports=kf()});var Pf=Zt(yt=>{"use strict";var Iv=et();function $f(t){var e="https://react.dev/errors/"+t;if(1{"use strict";function Ff(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ff)}catch(t){console.error(t)}}Ff(),If.exports=Pf()});var $h=Zt(ci=>{"use strict";var ut=qf(),bs=et(),lm=to();function p(t){var e="https://react.dev/errors/"+t;if(1)":-1u||r[n]!==f[u]){var g=` +`+r[n].replace(" at new "," at ");return t.displayName&&g.includes("")&&(g=g.replace("",t.displayName)),g}while(1<=n&&0<=u);break}}}finally{Ji=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Bn(l):""}function cm(t){switch(t.tag){case 26:case 27:case 5:return Bn(t.type);case 16:return Bn("Lazy");case 13:return Bn("Suspense");case 19:return Bn("SuspenseList");case 0:case 15:return t=ki(t.type,!1),t;case 11:return t=ki(t.type.render,!1),t;case 1:return t=ki(t.type,!0),t;default:return""}}function no(t){try{var e="";do e+=cm(t),t=t.return;while(t);return e}catch(l){return` +Error generating stack: `+l.message+` +`+l.stack}}function gn(t){var e=t,l=t;if(t.alternate)for(;e.return;)e=e.return;else{t=e;do e=t,e.flags&4098&&(l=e.return),t=e.return;while(t)}return e.tag===3?l:null}function Ms(t){if(t.tag===13){var e=t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e.dehydrated}return null}function uo(t){if(gn(t)!==t)throw Error(p(188))}function rm(t){var e=t.alternate;if(!e){if(e=gn(t),e===null)throw Error(p(188));return e!==t?null:t}for(var l=t,n=e;;){var u=l.return;if(u===null)break;var a=u.alternate;if(a===null){if(n=u.return,n!==null){l=n;continue}break}if(u.child===a.child){for(a=u.child;a;){if(a===l)return uo(u),t;if(a===n)return uo(u),e;a=a.sibling}throw Error(p(188))}if(l.return!==n.return)l=u,n=a;else{for(var i=!1,c=u.child;c;){if(c===l){i=!0,l=u,n=a;break}if(c===n){i=!0,n=u,l=a;break}c=c.sibling}if(!i){for(c=a.child;c;){if(c===l){i=!0,l=a,n=u;break}if(c===n){i=!0,n=a,l=u;break}c=c.sibling}if(!i)throw Error(p(189))}}if(l.alternate!==n)throw Error(p(190))}if(l.tag!==3)throw Error(p(188));return l.stateNode.current===l?t:e}function As(t){var e=t.tag;if(e===5||e===26||e===27||e===6)return t;for(t=t.child;t!==null;){if(e=As(t),e!==null)return e;t=t.sibling}return null}var Yn=Array.isArray,L=lm.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,dl={pending:!1,data:null,method:null,action:null},_c=[],jl=-1;function ue(t){return{current:t}}function ft(t){0>jl||(t.current=_c[jl],_c[jl]=null,jl--)}function Z(t,e){jl++,_c[jl]=t.current,t.current=e}var te=ue(null),lu=ue(null),Ge=ue(null),Sa=ue(null);function ba(t,e){switch(Z(Ge,e),Z(lu,t),Z(te,null),t=e.nodeType,t){case 9:case 11:e=(e=e.documentElement)&&(e=e.namespaceURI)?cs(e):0;break;default:if(t=t===8?e.parentNode:e,e=t.tagName,t=t.namespaceURI)t=cs(t),e=Yh(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}ft(te),Z(te,e)}function un(){ft(te),ft(lu),ft(Ge)}function Rc(t){t.memoizedState!==null&&Z(Sa,t);var e=te.current,l=Yh(e,t.type);e!==l&&(Z(lu,t),Z(te,l))}function Ea(t){lu.current===t&&(ft(te),ft(lu)),Sa.current===t&&(ft(Sa),hu._currentValue=dl)}var xc=Object.prototype.hasOwnProperty,pr=ut.unstable_scheduleCallback,Wi=ut.unstable_cancelCallback,fm=ut.unstable_shouldYield,om=ut.unstable_requestPaint,ee=ut.unstable_now,sm=ut.unstable_getCurrentPriorityLevel,_s=ut.unstable_ImmediatePriority,Rs=ut.unstable_UserBlockingPriority,Oa=ut.unstable_NormalPriority,dm=ut.unstable_LowPriority,xs=ut.unstable_IdlePriority,hm=ut.log,gm=ut.unstable_setDisableYieldValue,yu=null,At=null;function vm(t){if(At&&typeof At.onCommitFiberRoot=="function")try{At.onCommitFiberRoot(yu,t,void 0,(t.current.flags&128)===128)}catch{}}function Be(t){if(typeof hm=="function"&&gm(t),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(yu,t)}catch{}}var _t=Math.clz32?Math.clz32:pm,mm=Math.log,ym=Math.LN2;function pm(t){return t>>>=0,t===0?32:31-(mm(t)/ym|0)|0}var Qu=128,Zu=4194304;function cl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Ja(t,e){var l=t.pendingLanes;if(l===0)return 0;var n=0,u=t.suspendedLanes,a=t.pingedLanes,i=t.warmLanes;t=t.finishedLanes!==0;var c=l&134217727;return c!==0?(l=c&~u,l!==0?n=cl(l):(a&=c,a!==0?n=cl(a):t||(i=c&~i,i!==0&&(n=cl(i))))):(c=l&~u,c!==0?n=cl(c):a!==0?n=cl(a):t||(i=l&~i,i!==0&&(n=cl(i)))),n===0?0:e!==0&&e!==n&&!(e&u)&&(u=n&-n,i=e&-e,u>=i||u===32&&(i&4194176)!==0)?e:n}function pu(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Sm(t,e){switch(t){case 1:case 2:case 4:case 8:return e+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Cs(){var t=Qu;return Qu<<=1,!(Qu&4194176)&&(Qu=128),t}function Ns(){var t=Zu;return Zu<<=1,!(Zu&62914560)&&(Zu=4194304),t}function $i(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function Su(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function bm(t,e,l,n,u,a){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var c=t.entanglements,r=t.expirationTimes,f=t.hiddenUpdates;for(l=i&~l;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Dm=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),io={},co={};function Mm(t){return xc.call(co,t)?!0:xc.call(io,t)?!1:Dm.test(t)?co[t]=!0:(io[t]=!0,!1)}function ca(t,e,l){if(Mm(e))if(l===null)t.removeAttribute(e);else{switch(typeof l){case"undefined":case"function":case"symbol":t.removeAttribute(e);return;case"boolean":var n=e.toLowerCase().slice(0,5);if(n!=="data-"&&n!=="aria-"){t.removeAttribute(e);return}}t.setAttribute(e,""+l)}}function Ku(t,e,l){if(l===null)t.removeAttribute(e);else{switch(typeof l){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(e);return}t.setAttribute(e,""+l)}}function ie(t,e,l,n){if(n===null)t.removeAttribute(l);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(l);return}t.setAttributeNS(e,l,""+n)}}function wt(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Ys(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function Am(t){var e=Ys(t)?"checked":"value",l=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),n=""+t[e];if(!t.hasOwnProperty(e)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var u=l.get,a=l.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(i){n=""+i,a.call(this,i)}}),Object.defineProperty(t,e,{enumerable:l.enumerable}),{getValue:function(){return n},setValue:function(i){n=""+i},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Ta(t){t._valueTracker||(t._valueTracker=Am(t))}function Gs(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var l=e.getValue(),n="";return t&&(n=Ys(t)?t.checked?"true":"false":t.value),t=n,t!==l?(e.setValue(t),!0):!1}function Da(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var _m=/[\n"\\]/g;function Yt(t){return t.replace(_m,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Nc(t,e,l,n,u,a,i,c){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+wt(e)):t.value!==""+wt(e)&&(t.value=""+wt(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?zc(t,i,wt(e)):l!=null?zc(t,i,wt(l)):n!=null&&t.removeAttribute("value"),u==null&&a!=null&&(t.defaultChecked=!!a),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?t.name=""+wt(c):t.removeAttribute("name")}function js(t,e,l,n,u,a,i,c){if(a!=null&&typeof a!="function"&&typeof a!="symbol"&&typeof a!="boolean"&&(t.type=a),e!=null||l!=null){if(!(a!=="submit"&&a!=="reset"||e!=null))return;l=l!=null?""+wt(l):"",e=e!=null?""+wt(e):l,c||e===t.value||(t.value=e),t.defaultValue=e}n=n??u,n=typeof n!="function"&&typeof n!="symbol"&&!!n,t.checked=c?t.checked:!!n,t.defaultChecked=!!n,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function zc(t,e,l){e==="number"&&Da(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Pl(t,e,l,n){if(t=t.options,e){e={};for(var u=0;u=Xn),vo=" ",mo=!1;function Js(t,e){switch(t){case"keyup":return ey.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ks(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Vl=!1;function ny(t,e){switch(t){case"compositionend":return ks(e);case"keypress":return e.which!==32?null:(mo=!0,vo);case"textInput":return t=e.data,t===vo&&mo?null:t;default:return null}}function uy(t,e){if(Vl)return t==="compositionend"||!Dr&&Js(t,e)?(t=Zs(),fa=Or=Ye=null,Vl=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=n}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=bo(l)}}function Fs(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Fs(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Is(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Da(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=Da(t.document)}return e}function Mr(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function dy(t,e){var l=Is(e);e=t.focusedElem;var n=t.selectionRange;if(l!==e&&e&&e.ownerDocument&&Fs(e.ownerDocument.documentElement,e)){if(n!==null&&Mr(e)){if(t=n.start,l=n.end,l===void 0&&(l=t),"selectionStart"in e)e.selectionStart=t,e.selectionEnd=Math.min(l,e.value.length);else if(l=(t=e.ownerDocument||document)&&t.defaultView||window,l.getSelection){l=l.getSelection();var u=e.textContent.length,a=Math.min(n.start,u);n=n.end===void 0?a:Math.min(n.end,u),!l.extend&&a>n&&(u=n,n=a,a=u),u=Eo(e,a);var i=Eo(e,n);u&&i&&(l.rangeCount!==1||l.anchorNode!==u.node||l.anchorOffset!==u.offset||l.focusNode!==i.node||l.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(u.node,u.offset),l.removeAllRanges(),a>n?(l.addRange(t),l.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),l.addRange(t)))}}for(t=[],l=e;l=l.parentNode;)l.nodeType===1&&t.push({element:l,left:l.scrollLeft,top:l.scrollTop});for(typeof e.focus=="function"&&e.focus(),e=0;e=document.documentMode,Ll=null,wc=null,Ln=null,qc=!1;function Oo(t,e,l){var n=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;qc||Ll==null||Ll!==Da(n)||(n=Ll,"selectionStart"in n&&Mr(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ln&&iu(Ln,n)||(Ln=n,n=ja(wc,"onSelect"),0>=i,u-=i,ge=1<<32-_t(e)+u|l<D?(at=O,O=null):at=O.sibling;var H=d(s,O,h[D],y);if(H===null){O===null&&(O=at);break}t&&O&&H.alternate===null&&e(s,O),o=a(H,o,D),R===null?E=H:R.sibling=H,R=H,O=at}if(D===h.length)return l(s,O),w&&rl(s,D),E;if(O===null){for(;DD?(at=O,O=null):at=O.sibling;var Ae=d(s,O,H.value,y);if(Ae===null){O===null&&(O=at);break}t&&O&&Ae.alternate===null&&e(s,O),o=a(Ae,o,D),R===null?E=Ae:R.sibling=Ae,R=Ae,O=at}if(H.done)return l(s,O),w&&rl(s,D),E;if(O===null){for(;!H.done;D++,H=h.next())H=m(s,H.value,y),H!==null&&(o=a(H,o,D),R===null?E=H:R.sibling=H,R=H);return w&&rl(s,D),E}for(O=n(O);!H.done;D++,H=h.next())H=v(O,s,D,H.value,y),H!==null&&(t&&H.alternate!==null&&O.delete(H.key===null?D:H.key),o=a(H,o,D),R===null?E=H:R.sibling=H,R=H);return t&&O.forEach(function(Cv){return e(s,Cv)}),w&&rl(s,D),E}function U(s,o,h,y){if(typeof h=="object"&&h!==null&&h.type===Gl&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Lu:t:{for(var E=h.key;o!==null;){if(o.key===E){if(E=h.type,E===Gl){if(o.tag===7){l(s,o.sibling),y=u(o,h.props.children),y.return=s,s=y;break t}}else if(o.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Ne&&xo(E)===o.type){l(s,o.sibling),y=u(o,h.props),Nn(y,h),y.return=s,s=y;break t}l(s,o);break}else e(s,o);o=o.sibling}h.type===Gl?(y=vl(h.props.children,s.mode,y,h.key),y.return=s,s=y):(y=va(h.type,h.key,h.props,null,s.mode,y),Nn(y,h),y.return=s,s=y)}return i(s);case qn:t:{for(E=h.key;o!==null;){if(o.key===E)if(o.tag===4&&o.stateNode.containerInfo===h.containerInfo&&o.stateNode.implementation===h.implementation){l(s,o.sibling),y=u(o,h.children||[]),y.return=s,s=y;break t}else{l(s,o);break}else e(s,o);o=o.sibling}y=vc(h,s.mode,y),y.return=s,s=y}return i(s);case Ne:return E=h._init,h=E(h._payload),U(s,o,h,y)}if(Yn(h))return S(s,o,h,y);if(Rn(h)){if(E=Rn(h),typeof E!="function")throw Error(p(150));return h=E.call(h),b(s,o,h,y)}if(typeof h.then=="function")return U(s,o,Pu(h),y);if(h.$$typeof===he)return U(s,o,Iu(s,h),y);Fu(s,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,o!==null&&o.tag===6?(l(s,o.sibling),y=u(o,h),y.return=s,s=y):(l(s,o),y=gc(h,s.mode,y),y.return=s,s=y),i(s)):l(s,o)}return function(s,o,h,y){try{ru=0;var E=U(s,o,h,y);return Il=null,E}catch(O){if(O===Qn)throw O;var R=jt(29,O,null,s.mode);return R.lanes=y,R.return=s,R}finally{}}}var Sl=od(!0),sd=od(!1),rn=ue(null),Ra=ue(0);function Co(t,e){t=Oe,Z(Ra,t),Z(rn,e),Oe=t|e.baseLanes}function Gc(){Z(Ra,Oe),Z(rn,rn.current)}function Cr(){Oe=Ra.current,ft(rn),ft(Ra)}var Vt=ue(null),le=null;function Ue(t){var e=t.alternate;Z(nt,nt.current&1),Z(Vt,t),le===null&&(e===null||rn.current!==null||e.memoizedState!==null)&&(le=t)}function dd(t){if(t.tag===22){if(Z(nt,nt.current),Z(Vt,t),le===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(le=t)}}else He(t)}function He(){Z(nt,nt.current),Z(Vt,Vt.current)}function me(t){ft(Vt),le===t&&(le=null),ft(nt)}var nt=ue(0);function xa(t){for(var e=t;e!==null;){if(e.tag===13){var l=e.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||l.data==="$?"||l.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if(e.flags&128)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var yy=typeof AbortController<"u"?AbortController:function(){var t=[],e=this.signal={aborted:!1,addEventListener:function(l,n){t.push(n)}};this.abort=function(){e.aborted=!0,t.forEach(function(l){return l()})}},py=ut.unstable_scheduleCallback,Sy=ut.unstable_NormalPriority,lt={$$typeof:he,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Nr(){return{controller:new yy,data:new Map,refCount:0}}function Ou(t){t.refCount--,t.refCount===0&&py(Sy,function(){t.controller.abort()})}var Kn=null,jc=0,fn=0,tn=null;function by(t,e){if(Kn===null){var l=Kn=[];jc=0,fn=tf(),tn={status:"pending",value:void 0,then:function(n){l.push(n)}}}return jc++,e.then(No,No),e}function No(){if(--jc===0&&Kn!==null){tn!==null&&(tn.status="fulfilled");var t=Kn;Kn=null,fn=0,tn=null;for(var e=0;ea?a:8;var i=M.T,c={};M.T=c,Qr(t,!1,e,l);try{var r=u(),f=M.S;if(f!==null&&f(c,r),r!==null&&typeof r=="object"&&typeof r.then=="function"){var g=Ey(r,n);Jn(t,e,g,Rt(t))}else Jn(t,e,n,Rt(t))}catch(m){Jn(t,e,{then:function(){},status:"rejected",reason:m},Rt())}finally{L.p=a,M.T=i}}function Ay(){}function Lc(t,e,l,n){if(t.tag!==5)throw Error(p(476));var u=Gd(t).queue;Yd(t,u,e,dl,l===null?Ay:function(){return jd(t),l(n)})}function Gd(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:dl,baseState:dl,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:be,lastRenderedState:dl},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:be,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function jd(t){var e=Gd(t).next.queue;Jn(t,e,{},Rt())}function Lr(){return vt(hu)}function Xd(){return tt().memoizedState}function Vd(){return tt().memoizedState}function _y(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=Rt();t=je(l);var n=Xe(e,t,l);n!==null&&(St(n,e,l),Wn(n,e,l)),e={cache:Nr()},t.payload=e;return}e=e.return}}function Ry(t,e,l){var n=Rt();l={lane:n,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null},li(t)?Qd(e,l):(l=_r(t,e,l,n),l!==null&&(St(l,t,n),Zd(l,e,n)))}function Ld(t,e,l){var n=Rt();Jn(t,e,l,n)}function Jn(t,e,l,n){var u={lane:n,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null};if(li(t))Qd(e,u);else{var a=t.alternate;if(t.lanes===0&&(a===null||a.lanes===0)&&(a=e.lastRenderedReducer,a!==null))try{var i=e.lastRenderedState,c=a(i,l);if(u.hasEagerState=!0,u.eagerState=c,xt(c,i))return Fa(t,e,u,0),X===null&&Pa(),!1}catch{}finally{}if(l=_r(t,e,u,n),l!==null)return St(l,t,n),Zd(l,e,n),!0}return!1}function Qr(t,e,l,n){if(n={lane:2,revertLane:tf(),action:n,hasEagerState:!1,eagerState:null,next:null},li(t)){if(e)throw Error(p(479))}else e=_r(t,l,n,2),e!==null&&St(e,t,2)}function li(t){var e=t.alternate;return t===_||e!==null&&e===_}function Qd(t,e){en=Ca=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Zd(t,e,l){if(l&4194176){var n=e.lanes;n&=t.pendingLanes,l|=n,e.lanes=l,Us(t,l)}}var ne={readContext:vt,use:ti,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useLayoutEffect:P,useInsertionEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useSyncExternalStore:P,useId:P};ne.useCacheRefresh=P;ne.useMemoCache=P;ne.useHostTransitionStatus=P;ne.useFormState=P;ne.useActionState=P;ne.useOptimistic=P;var Al={readContext:vt,use:ti,useCallback:function(t,e){return bt().memoizedState=[t,e===void 0?null:e],t},useContext:vt,useEffect:wo,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,ha(4194308,4,Ud.bind(null,e,t),l)},useLayoutEffect:function(t,e){return ha(4194308,4,t,e)},useInsertionEffect:function(t,e){ha(4,2,t,e)},useMemo:function(t,e){var l=bt();e=e===void 0?null:e;var n=t();if(bl){Be(!0);try{t()}finally{Be(!1)}}return l.memoizedState=[n,e],n},useReducer:function(t,e,l){var n=bt();if(l!==void 0){var u=l(e);if(bl){Be(!0);try{l(e)}finally{Be(!1)}}}else u=e;return n.memoizedState=n.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},n.queue=t,t=t.dispatch=Ry.bind(null,_,t),[n.memoizedState,t]},useRef:function(t){var e=bt();return t={current:t},e.memoizedState=t},useState:function(t){t=Xc(t);var e=t.queue,l=Ld.bind(null,_,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:Xr,useDeferredValue:function(t,e){var l=bt();return Vr(l,t,e)},useTransition:function(){var t=Xc(!1);return t=Yd.bind(null,_,t.queue,!0,!1),bt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var n=_,u=bt();if(w){if(l===void 0)throw Error(p(407));l=l()}else{if(l=e(),X===null)throw Error(p(349));N&60||yd(n,e,l)}u.memoizedState=l;var a={value:l,getSnapshot:e};return u.queue=a,wo(Sd.bind(null,n,a,t),[t]),n.flags|=2048,on(9,pd.bind(null,n,a,l,e),{destroy:void 0},null),l},useId:function(){var t=bt(),e=X.identifierPrefix;if(w){var l=ve,n=ge;l=(n&~(1<<32-_t(n)-1)).toString(32)+l,e=":"+e+"R"+l,l=Na++,0 title"))),dt(a,n,l),a[gt]=t,ct(a),n=a;break t;case"link":var i=hs("link","href",u).get(n+(l.href||""));if(i){for(var c=0;c<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof n.is=="string"?u.createElement("select",{is:n.is}):u.createElement("select"),n.multiple?t.multiple=!0:n.size&&(t.size=n.size);break;default:t=typeof n.is=="string"?u.createElement(l,{is:n.is}):u.createElement(l)}}t[gt]=e,t[Et]=n;t:for(u=e.child;u!==null;){if(u.tag===5||u.tag===6)t.appendChild(u.stateNode);else if(u.tag!==4&&u.tag!==27&&u.child!==null){u.child.return=u,u=u.child;continue}if(u===e)break t;for(;u.sibling===null;){if(u.return===null||u.return===e)break t;u=u.return}u.sibling.return=u.return,u=u.sibling}e.stateNode=t;t:switch(dt(t,l,n),l){case"button":case"input":case"select":case"textarea":t=!!n.autoFocus;break t;case"img":t=!0;break t;default:t=!1}t&&fe(e)}}return J(e),e.flags&=-16777217,null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==n&&fe(e);else{if(typeof n!="string"&&e.stateNode===null)throw Error(p(166));if(t=Ge.current,Cn(e)){if(t=e.stateNode,l=e.memoizedProps,n=null,u=pt,u!==null)switch(u.tag){case 27:case 5:n=u.memoizedProps}t[gt]=e,t=!!(t.nodeValue===l||n!==null&&n.suppressHydrationWarning===!0||Bh(t.nodeValue,l)),t||pl(e)}else t=Xa(t).createTextNode(n),t[gt]=e,e.stateNode=t}return J(e),null;case 13:if(n=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(u=Cn(e),n!==null&&n.dehydrated!==null){if(t===null){if(!u)throw Error(p(318));if(u=e.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(p(317));u[gt]=e}else Eu(),!(e.flags&128)&&(e.memoizedState=null),e.flags|=4;J(e),u=!1}else kt!==null&&(ar(kt),kt=null),u=!0;if(!u)return e.flags&256?(me(e),e):(me(e),null)}if(me(e),e.flags&128)return e.lanes=l,e;if(l=n!==null,t=t!==null&&t.memoizedState!==null,l){n=e.child,u=null,n.alternate!==null&&n.alternate.memoizedState!==null&&n.alternate.memoizedState.cachePool!==null&&(u=n.alternate.memoizedState.cachePool.pool);var a=null;n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(a=n.memoizedState.cachePool.pool),a!==u&&(n.flags|=2048)}return l!==t&&l&&(e.child.flags|=8192),ta(e,e.updateQueue),J(e),null;case 4:return un(),t===null&&ef(e.stateNode.containerInfo),J(e),null;case 10:return pe(e.type),J(e),null;case 19:if(ft(nt),u=e.memoizedState,u===null)return J(e),null;if(n=(e.flags&128)!==0,a=u.rendering,a===null)if(n)Un(u,!1);else{if($!==0||t!==null&&t.flags&128)for(t=e.child;t!==null;){if(a=xa(t),a!==null){for(e.flags|=128,Un(u,!1),t=a.updateQueue,e.updateQueue=t,ta(e,t),e.subtreeFlags=0,t=l,l=e.child;l!==null;)Eh(l,t),l=l.sibling;return Z(nt,nt.current&1|2),e.child}t=t.sibling}u.tail!==null&&ee()>qa&&(e.flags|=128,n=!0,Un(u,!1),e.lanes=4194304)}else{if(!n)if(t=xa(a),t!==null){if(e.flags|=128,n=!0,t=t.updateQueue,e.updateQueue=t,ta(e,t),Un(u,!0),u.tail===null&&u.tailMode==="hidden"&&!a.alternate&&!w)return J(e),null}else 2*ee()-u.renderingStartTime>qa&&l!==536870912&&(e.flags|=128,n=!0,Un(u,!1),e.lanes=4194304);u.isBackwards?(a.sibling=e.child,e.child=a):(t=u.last,t!==null?t.sibling=a:e.child=a,u.last=a)}return u.tail!==null?(e=u.tail,u.rendering=e,u.tail=e.sibling,u.renderingStartTime=ee(),e.sibling=null,t=nt.current,Z(nt,n?t&1|2:t&1),e):(J(e),null);case 22:case 23:return me(e),Cr(),n=e.memoizedState!==null,t!==null?t.memoizedState!==null!==n&&(e.flags|=8192):n&&(e.flags|=8192),n?l&536870912&&!(e.flags&128)&&(J(e),e.subtreeFlags&6&&(e.flags|=8192)):J(e),l=e.updateQueue,l!==null&&ta(e,l.retryQueue),l=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),n=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),n!==l&&(e.flags|=2048),t!==null&&ft(gl),null;case 24:return l=null,t!==null&&(l=t.memoizedState.cache),e.memoizedState.cache!==l&&(e.flags|=2048),pe(lt),J(e),null;case 25:return null}throw Error(p(156,e.tag))}function wy(t,e){switch(xr(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return pe(lt),un(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return Ea(e),null;case 13:if(me(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(p(340));Eu()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return ft(nt),null;case 4:return un(),null;case 10:return pe(e.type),null;case 22:case 23:return me(e),Cr(),t!==null&&ft(gl),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return pe(lt),null;case 25:return null;default:return null}}function Th(t,e){switch(xr(e),e.tag){case 3:pe(lt),un();break;case 26:case 27:case 5:Ea(e);break;case 4:un();break;case 13:me(e);break;case 19:ft(nt);break;case 10:pe(e.type);break;case 22:case 23:me(e),Cr(),t!==null&&ft(gl);break;case 24:pe(lt)}}var qy={getCacheForType:function(t){var e=vt(lt),l=e.data.get(t);return l===void 0&&(l=t(),e.data.set(t,l)),l}},By=typeof WeakMap=="function"?WeakMap:Map,k=0,X=null,x=null,N=0,j=0,Dt=null,se=!1,yn=!1,$r=!1,Oe=0,$=0,$e=0,ml=0,Pr=0,Xt=0,sn=0,In=null,It=null,er=!1,Fr=0,qa=1/0,Ba=null,Le=null,ea=!1,fl=null,tu=0,lr=0,nr=null,eu=0,ur=null;function Rt(){if(k&2&&N!==0)return N&-N;if(M.T!==null){var t=fn;return t!==0?t:tf()}return ws()}function Dh(){Xt===0&&(Xt=!(N&536870912)||w?Cs():536870912);var t=Vt.current;return t!==null&&(t.flags|=32),Xt}function St(t,e,l){(t===X&&j===2||t.cancelPendingCommit!==null)&&(dn(t,0),de(t,N,Xt,!1)),Su(t,l),(!(k&2)||t!==X)&&(t===X&&(!(k&2)&&(ml|=l),$===4&&de(t,N,Xt,!1)),ae(t))}function Mh(t,e,l){if(k&6)throw Error(p(327));var n=!l&&(e&60)===0&&(e&t.expiredLanes)===0||pu(t,e),u=n?jy(t,e):mc(t,e,!0),a=n;do{if(u===0){yn&&!n&&de(t,e,0,!1);break}else if(u===6)de(t,e,0,!se);else{if(l=t.current.alternate,a&&!Yy(l)){u=mc(t,e,!1),a=!1;continue}if(u===2){if(a=e,t.errorRecoveryDisabledLanes&a)var i=0;else i=t.pendingLanes&-536870913,i=i!==0?i:i&536870912?536870912:0;if(i!==0){e=i;t:{var c=t;u=In;var r=c.current.memoizedState.isDehydrated;if(r&&(dn(c,i).flags|=256),i=mc(c,i,!1),i!==2){if($r&&!r){c.errorRecoveryDisabledLanes|=a,ml|=a,u=4;break t}a=It,It=u,a!==null&&ar(a)}u=i}if(a=!1,u!==2)continue}}if(u===1){dn(t,0),de(t,e,0,!0);break}t:{switch(n=t,u){case 0:case 1:throw Error(p(345));case 4:if((e&4194176)===e){de(n,e,Xt,!se);break t}break;case 2:It=null;break;case 3:case 5:break;default:throw Error(p(329))}if(n.finishedWork=l,n.finishedLanes=e,(e&62914560)===e&&(a=Fr+300-ee(),10l?32:l,M.T=null,fl===null)var a=!1;else{l=nr,nr=null;var i=fl,c=tu;if(fl=null,tu=0,k&6)throw Error(p(331));var r=k;if(k|=4,Sh(i.current),mh(i,i.current,c,l),k=r,Au(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(yu,i)}catch{}a=!0}return a}finally{L.p=u,M.T=n,Nh(t,e)}}return!1}function Io(t,e,l){e=Gt(l,e),e=Zc(t.stateNode,e,2),t=Xe(t,e,2),t!==null&&(Su(t,2),ae(t))}function G(t,e,l){if(t.tag===3)Io(t,t,l);else for(;e!==null;){if(e.tag===3){Io(e,t,l);break}else if(e.tag===1){var n=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(Le===null||!Le.has(n))){t=Gt(l,t),l=Wd(2),n=Xe(e,l,2),n!==null&&($d(l,n,e,t),Su(n,2),ae(n));break}}e=e.return}}function yc(t,e,l){var n=t.pingCache;if(n===null){n=t.pingCache=new By;var u=new Set;n.set(e,u)}else u=n.get(e),u===void 0&&(u=new Set,n.set(e,u));u.has(l)||($r=!0,u.add(l),t=Ly.bind(null,t,e,l),e.then(t,t))}function Ly(t,e,l){var n=t.pingCache;n!==null&&n.delete(e),t.pingedLanes|=t.suspendedLanes&l,t.warmLanes&=~l,X===t&&(N&l)===l&&($===4||$===3&&(N&62914560)===N&&300>ee()-Fr?!(k&2)&&dn(t,0):Pr|=l,sn===N&&(sn=0)),ae(t)}function zh(t,e){e===0&&(e=Ns()),t=Je(t,e),t!==null&&(Su(t,e),ae(t))}function Qy(t){var e=t.memoizedState,l=0;e!==null&&(l=e.retryLane),zh(t,l)}function Zy(t,e){var l=0;switch(t.tag){case 13:var n=t.stateNode,u=t.memoizedState;u!==null&&(l=u.retryLane);break;case 19:n=t.stateNode;break;case 22:n=t.stateNode._retryCache;break;default:throw Error(p(314))}n!==null&&n.delete(e),zh(t,l)}function Ky(t,e){return pr(t,e)}var Ya=null,Yl=null,cr=!1,Ga=!1,pc=!1,yl=0;function ae(t){t!==Yl&&t.next===null&&(Yl===null?Ya=Yl=t:Yl=Yl.next=t),Ga=!0,cr||(cr=!0,ky(Jy))}function Au(t,e){if(!pc&&Ga){pc=!0;do for(var l=!1,n=Ya;n!==null;){if(!e)if(t!==0){var u=n.pendingLanes;if(u===0)var a=0;else{var i=n.suspendedLanes,c=n.pingedLanes;a=(1<<31-_t(42|t)+1)-1,a&=u&~(i&~c),a=a&201326677?a&201326677|1:a?a|2:0}a!==0&&(l=!0,ts(n,a))}else a=N,a=Ja(n,n===X?a:0),!(a&3)||pu(n,a)||(l=!0,ts(n,a));n=n.next}while(l);pc=!1}}function Jy(){Ga=cr=!1;var t=0;yl!==0&&(tp()&&(t=yl),yl=0);for(var e=ee(),l=null,n=Ya;n!==null;){var u=n.next,a=Uh(n,e);a===0?(n.next=null,l===null?Ya=u:l.next=u,u===null&&(Yl=l)):(l=n,(t!==0||a&3)&&(Ga=!0)),n=u}Au(t,!1)}function Uh(t,e){for(var l=t.suspendedLanes,n=t.pingedLanes,u=t.expirationTimes,a=t.pendingLanes&-62914561;0"u"?null:document;function Xh(t,e,l){var n=pn;if(n&&typeof e=="string"&&e){var u=Yt(e);u='link[rel="'+t+'"][href="'+u+'"]',typeof l=="string"&&(u+='[crossorigin="'+l+'"]'),os.has(u)||(os.add(u),t={rel:t,crossOrigin:l,href:e},n.querySelector(u)===null&&(e=n.createElement("link"),dt(e,"link",t),ct(e),n.head.appendChild(e)))}}function rp(t){Te.D(t),Xh("dns-prefetch",t,null)}function fp(t,e){Te.C(t,e),Xh("preconnect",t,e)}function op(t,e,l){Te.L(t,e,l);var n=pn;if(n&&t&&e){var u='link[rel="preload"][as="'+Yt(e)+'"]';e==="image"&&l&&l.imageSrcSet?(u+='[imagesrcset="'+Yt(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(u+='[imagesizes="'+Yt(l.imageSizes)+'"]')):u+='[href="'+Yt(t)+'"]';var a=u;switch(e){case"style":a=hn(t);break;case"script":a=Sn(t)}Lt.has(a)||(t=Q({rel:"preload",href:e==="image"&&l&&l.imageSrcSet?void 0:t,as:e},l),Lt.set(a,t),n.querySelector(u)!==null||e==="style"&&n.querySelector(_u(a))||e==="script"&&n.querySelector(Ru(a))||(e=n.createElement("link"),dt(e,"link",t),ct(e),n.head.appendChild(e)))}}function sp(t,e){Te.m(t,e);var l=pn;if(l&&t){var n=e&&typeof e.as=="string"?e.as:"script",u='link[rel="modulepreload"][as="'+Yt(n)+'"][href="'+Yt(t)+'"]',a=u;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":a=Sn(t)}if(!Lt.has(a)&&(t=Q({rel:"modulepreload",href:t},e),Lt.set(a,t),l.querySelector(u)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Ru(a)))return}n=l.createElement("link"),dt(n,"link",t),ct(n),l.head.appendChild(n)}}}function dp(t,e,l){Te.S(t,e,l);var n=pn;if(n&&t){var u=$l(n).hoistableStyles,a=hn(t);e=e||"default";var i=u.get(a);if(!i){var c={loading:0,preload:null};if(i=n.querySelector(_u(a)))c.loading=5;else{t=Q({rel:"stylesheet",href:t,"data-precedence":e},l),(l=Lt.get(a))&&lf(t,l);var r=i=n.createElement("link");ct(r),dt(r,"link",t),r._p=new Promise(function(f,g){r.onload=f,r.onerror=g}),r.addEventListener("load",function(){c.loading|=1}),r.addEventListener("error",function(){c.loading|=2}),c.loading|=4,ma(i,e,n)}i={type:"stylesheet",instance:i,count:1,state:c},u.set(a,i)}}}function hp(t,e){Te.X(t,e);var l=pn;if(l&&t){var n=$l(l).hoistableScripts,u=Sn(t),a=n.get(u);a||(a=l.querySelector(Ru(u)),a||(t=Q({src:t,async:!0},e),(e=Lt.get(u))&&nf(t,e),a=l.createElement("script"),ct(a),dt(a,"link",t),l.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},n.set(u,a))}}function gp(t,e){Te.M(t,e);var l=pn;if(l&&t){var n=$l(l).hoistableScripts,u=Sn(t),a=n.get(u);a||(a=l.querySelector(Ru(u)),a||(t=Q({src:t,async:!0,type:"module"},e),(e=Lt.get(u))&&nf(t,e),a=l.createElement("script"),ct(a),dt(a,"link",t),l.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},n.set(u,a))}}function ss(t,e,l,n){var u=(u=Ge.current)?Va(u):null;if(!u)throw Error(p(446));switch(t){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(e=hn(l.href),l=$l(u).hoistableStyles,n=l.get(e),n||(n={type:"style",instance:null,count:0,state:null},l.set(e,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){t=hn(l.href);var a=$l(u).hoistableStyles,i=a.get(t);if(i||(u=u.ownerDocument||u,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},a.set(t,i),(a=u.querySelector(_u(t)))&&!a._p&&(i.instance=a,i.state.loading=5),Lt.has(t)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},Lt.set(t,l),a||vp(u,t,l,i.state))),e&&n===null)throw Error(p(528,""));return i}if(e&&n!==null)throw Error(p(529,""));return null;case"script":return e=l.async,l=l.src,typeof l=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=Sn(l),l=$l(u).hoistableScripts,n=l.get(e),n||(n={type:"script",instance:null,count:0,state:null},l.set(e,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(p(444,t))}}function hn(t){return'href="'+Yt(t)+'"'}function _u(t){return'link[rel="stylesheet"]['+t+"]"}function Vh(t){return Q({},t,{"data-precedence":t.precedence,precedence:null})}function vp(t,e,l,n){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?n.loading=1:(e=t.createElement("link"),n.preload=e,e.addEventListener("load",function(){return n.loading|=1}),e.addEventListener("error",function(){return n.loading|=2}),dt(e,"link",l),ct(e),t.head.appendChild(e))}function Sn(t){return'[src="'+Yt(t)+'"]'}function Ru(t){return"script[async]"+t}function ds(t,e,l){if(e.count++,e.instance===null)switch(e.type){case"style":var n=t.querySelector('style[data-href~="'+Yt(l.href)+'"]');if(n)return e.instance=n,ct(n),n;var u=Q({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return n=(t.ownerDocument||t).createElement("style"),ct(n),dt(n,"style",u),ma(n,l.precedence,t),e.instance=n;case"stylesheet":u=hn(l.href);var a=t.querySelector(_u(u));if(a)return e.state.loading|=4,e.instance=a,ct(a),a;n=Vh(l),(u=Lt.get(u))&&lf(n,u),a=(t.ownerDocument||t).createElement("link"),ct(a);var i=a;return i._p=new Promise(function(c,r){i.onload=c,i.onerror=r}),dt(a,"link",n),e.state.loading|=4,ma(a,l.precedence,t),e.instance=a;case"script":return a=Sn(l.src),(u=t.querySelector(Ru(a)))?(e.instance=u,ct(u),u):(n=l,(u=Lt.get(a))&&(n=Q({},l),nf(n,u)),t=t.ownerDocument||t,u=t.createElement("script"),ct(u),dt(u,"link",n),t.head.appendChild(u),e.instance=u);case"void":return null;default:throw Error(p(443,e.type))}else e.type==="stylesheet"&&!(e.state.loading&4)&&(n=e.instance,e.state.loading|=4,ma(n,l.precedence,t));return e.instance}function ma(t,e,l){for(var n=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=n.length?n[n.length-1]:null,a=u,i=0;i title"):null)}function mp(t,e,l){if(l===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function Lh(t){return!(t.type==="stylesheet"&&!(t.state.loading&3))}var du=null;function yp(){}function pp(t,e,l){if(du===null)throw Error(p(475));var n=du;if(e.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&!(e.state.loading&4)){if(e.instance===null){var u=hn(l.href),a=t.querySelector(_u(u));if(a){t=a._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(n.count++,n=La.bind(n),t.then(n,n)),e.state.loading|=4,e.instance=a,ct(a);return}a=t.ownerDocument||t,l=Vh(l),(u=Lt.get(u))&&lf(l,u),a=a.createElement("link"),ct(a);var i=a;i._p=new Promise(function(c,r){i.onload=c,i.onerror=r}),dt(a,"link",l),e.instance=a}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(e,t),(t=e.state.preload)&&!(e.state.loading&3)&&(n.count++,e=La.bind(n),t.addEventListener("load",e),t.addEventListener("error",e))}}function Sp(){if(du===null)throw Error(p(475));var t=du;return t.stylesheets&&t.count===0&&hr(t,t.stylesheets),0{"use strict";function Ph(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ph)}catch(t){console.error(t)}}Ph(),Fh.exports=$h()});var lg=Zt(fi=>{"use strict";var Rp=Symbol.for("react.transitional.element"),xp=Symbol.for("react.fragment");function eg(t,e,l){var n=null;if(l!==void 0&&(n=""+l),e.key!==void 0&&(n=""+e.key),"key"in e){l={};for(var u in e)u!=="key"&&(l[u]=e[u])}else l=e;return e=l.ref,{$$typeof:Rp,type:t,key:n,ref:e!==void 0?e:null,props:l}}fi.Fragment=xp;fi.jsx=eg;fi.jsxs=eg});var Ie=Zt((q0,ng)=>{"use strict";ng.exports=lg()});var Wg=Zt((ZS,kg)=>{"use strict";kg.exports=function t(e,l){if(e===l)return!0;if(e&&l&&typeof e=="object"&&typeof l=="object"){if(e.constructor!==l.constructor)return!1;var n,u,a;if(Array.isArray(e)){if(n=e.length,n!=l.length)return!1;for(u=n;u--!==0;)if(!t(e[u],l[u]))return!1;return!0}if(e.constructor===RegExp)return e.source===l.source&&e.flags===l.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===l.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===l.toString();if(a=Object.keys(e),n=a.length,n!==Object.keys(l).length)return!1;for(u=n;u--!==0;)if(!Object.prototype.hasOwnProperty.call(l,a[u]))return!1;for(u=n;u--!==0;){var i=a[u];if(!t(e[i],l[i]))return!1}return!0}return e!==e&&l!==l}});var _v=V(Ih(),1);var Cl=V(et(),1);var tg=V(et(),1),ri=(0,tg.createContext)({dragDropManager:void 0});var Zg=V(Ie(),1);function Qt(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var ug=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),ff=function(){return Math.random().toString(36).substring(7).split("").join(".")},ag={INIT:"@@redux/INIT"+ff(),REPLACE:"@@redux/REPLACE"+ff(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+ff()}};function Np(t){if(typeof t!="object"||t===null)return!1;for(var e=t;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function of(t,e,l){var n;if(typeof e=="function"&&typeof l=="function"||typeof l=="function"&&typeof arguments[3]=="function")throw new Error(Qt(0));if(typeof e=="function"&&typeof l>"u"&&(l=e,e=void 0),typeof l<"u"){if(typeof l!="function")throw new Error(Qt(1));return l(of)(t,e)}if(typeof t!="function")throw new Error(Qt(2));var u=t,a=e,i=[],c=i,r=!1;function f(){c===i&&(c=i.slice())}function g(){if(r)throw new Error(Qt(3));return a}function m(b){if(typeof b!="function")throw new Error(Qt(4));if(r)throw new Error(Qt(5));var U=!0;return f(),c.push(b),function(){if(U){if(r)throw new Error(Qt(6));U=!1,f();var o=c.indexOf(b);c.splice(o,1),i=null}}}function d(b){if(!Np(b))throw new Error(Qt(7));if(typeof b.type>"u")throw new Error(Qt(8));if(r)throw new Error(Qt(9));try{r=!0,a=u(a,b)}finally{r=!1}for(var U=i=c,s=0;sn&&n[u]?n[u]:l||null,t)}function cg(t,e){return t.filter(l=>l!==e)}function oi(t){return typeof t=="object"}function rg(t,e){let l=new Map,n=a=>{l.set(a,l.has(a)?l.get(a)+1:1)};t.forEach(n),e.forEach(n);let u=[];return l.forEach((a,i)=>{a===1&&u.push(i)}),u}function fg(t,e){return t.filter(l=>e.indexOf(l)>-1)}var bn="dnd-core/INIT_COORDS",tl="dnd-core/BEGIN_DRAG",En="dnd-core/PUBLISH_DRAG_SOURCE",el="dnd-core/HOVER",ll="dnd-core/DROP",nl="dnd-core/END_DRAG";function sf(t,e){return{type:bn,payload:{sourceClientOffset:e||null,clientOffset:t||null}}}var Up={type:bn,payload:{clientOffset:null,sourceClientOffset:null}};function og(t){return function(l=[],n={publishSource:!0}){let{publishSource:u=!0,clientOffset:a,getSourceClientOffset:i}=n,c=t.getMonitor(),r=t.getRegistry();t.dispatch(sf(a)),Hp(l,c,r);let f=Bp(l,c);if(f==null){t.dispatch(Up);return}let g=null;if(a){if(!i)throw new Error("getSourceClientOffset must be defined");wp(i),g=i(f)}t.dispatch(sf(a,g));let d=r.getSource(f).beginDrag(c,f);if(d==null)return;qp(d),r.pinSource(f);let v=r.getSourceType(f);return{type:tl,payload:{itemType:v,item:d,sourceId:f,clientOffset:a||null,sourceClientOffset:g||null,isSourcePublic:!!u}}}}function Hp(t,e,l){T(!e.isDragging(),"Cannot call beginDrag while dragging."),t.forEach(function(n){T(l.getSource(n),"Expected sourceIds to be registered.")})}function wp(t){T(typeof t=="function","When clientOffset is provided, getSourceClientOffset must be a function.")}function qp(t){T(oi(t),"Item must be an object.")}function Bp(t,e){let l=null;for(let n=t.length-1;n>=0;n--)if(e.canDragSource(t[n])){l=t[n];break}return l}function Yp(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function Gp(t){for(var e=1;e{let r=Xp(i,c,u,n),f={type:ll,payload:{dropResult:Gp({},l,r)}};t.dispatch(f)})}}function jp(t){T(t.isDragging(),"Cannot call drop while not dragging."),T(!t.didDrop(),"Cannot call drop twice during one drag operation.")}function Xp(t,e,l,n){let u=l.getTarget(t),a=u?u.drop(n,t):void 0;return Vp(a),typeof a>"u"&&(a=e===0?{}:n.getDropResult()),a}function Vp(t){T(typeof t>"u"||oi(t),"Drop result must either be an object or undefined.")}function Lp(t){let e=t.getTargetIds().filter(t.canDropOnTarget,t);return e.reverse(),e}function dg(t){return function(){let l=t.getMonitor(),n=t.getRegistry();Qp(l);let u=l.getSourceId();return u!=null&&(n.getSource(u,!0).endDrag(l,u),n.unpinSource()),{type:nl}}}function Qp(t){T(t.isDragging(),"Cannot call endDrag while not dragging.")}function xu(t,e){return e===null?t===null:Array.isArray(t)?t.some(l=>l===e):t===e}function hg(t){return function(l,{clientOffset:n}={}){Zp(l);let u=l.slice(0),a=t.getMonitor(),i=t.getRegistry(),c=a.getItemType();return Jp(u,i,c),Kp(u,a,i),kp(u,a,i),{type:el,payload:{targetIds:u,clientOffset:n||null}}}}function Zp(t){T(Array.isArray(t),"Expected targetIds to be an array.")}function Kp(t,e,l){T(e.isDragging(),"Cannot call hover while not dragging."),T(!e.didDrop(),"Cannot call hover after drop.");for(let n=0;n=0;n--){let u=t[n],a=e.getTargetType(u);xu(a,l)||t.splice(n,1)}}function kp(t,e,l){t.forEach(function(n){l.getTarget(n).hover(e,n)})}function gg(t){return function(){if(t.getMonitor().isDragging())return{type:En}}}function vg(t){return{beginDrag:og(t),publishDragSource:gg(t),hover:hg(t),drop:sg(t),endDrag:dg(t)}}var si=class{receiveBackend(e){this.backend=e}getMonitor(){return this.monitor}getBackend(){return this.backend}getRegistry(){return this.monitor.registry}getActions(){let e=this,{dispatch:l}=this.store;function n(a){return(...i)=>{let c=a.apply(e,i);typeof c<"u"&&l(c)}}let u=vg(this);return Object.keys(u).reduce((a,i)=>{let c=u[i];return a[i]=n(c),a},{})}dispatch(e){this.store.dispatch(e)}constructor(e,l){this.isSetUp=!1,this.handleRefCountChange=()=>{let n=this.store.getState().refCount>0;this.backend&&(n&&!this.isSetUp?(this.backend.setup(),this.isSetUp=!0):!n&&this.isSetUp&&(this.backend.teardown(),this.isSetUp=!1))},this.store=e,this.monitor=l,e.subscribe(this.handleRefCountChange)}};function Wp(t,e){return{x:t.x+e.x,y:t.y+e.y}}function mg(t,e){return{x:t.x-e.x,y:t.y-e.y}}function yg(t){let{clientOffset:e,initialClientOffset:l,initialSourceClientOffset:n}=t;return!e||!l||!n?null:mg(Wp(e,n),l)}function pg(t){let{clientOffset:e,initialClientOffset:l}=t;return!e||!l?null:mg(e,l)}var On=[],di=[];On.__IS_NONE__=!0;di.__IS_ALL__=!0;function Sg(t,e){return t===On?!1:t===di||typeof e>"u"?!0:fg(e,t).length>0}var hi=class{subscribeToStateChange(e,l={}){let{handlerIds:n}=l;T(typeof e=="function","listener must be a function."),T(typeof n>"u"||Array.isArray(n),"handlerIds, when specified, must be an array of strings.");let u=this.store.getState().stateId,a=()=>{let i=this.store.getState(),c=i.stateId;try{c===u||c===u+1&&!Sg(i.dirtyHandlerIds,n)||e()}finally{u=c}};return this.store.subscribe(a)}subscribeToOffsetChange(e){T(typeof e=="function","listener must be a function.");let l=this.store.getState().dragOffset,n=()=>{let u=this.store.getState().dragOffset;u!==l&&(l=u,e())};return this.store.subscribe(n)}canDragSource(e){if(!e)return!1;let l=this.registry.getSource(e);return T(l,`Expected to find a valid source. sourceId=${e}`),this.isDragging()?!1:l.canDrag(this,e)}canDropOnTarget(e){if(!e)return!1;let l=this.registry.getTarget(e);if(T(l,`Expected to find a valid target. targetId=${e}`),!this.isDragging()||this.didDrop())return!1;let n=this.registry.getTargetType(e),u=this.getItemType();return xu(n,u)&&l.canDrop(this,e)}isDragging(){return!!this.getItemType()}isDraggingSource(e){if(!e)return!1;let l=this.registry.getSource(e,!0);if(T(l,`Expected to find a valid source. sourceId=${e}`),!this.isDragging()||!this.isSourcePublic())return!1;let n=this.registry.getSourceType(e),u=this.getItemType();return n!==u?!1:l.isDragging(this,e)}isOverTarget(e,l={shallow:!1}){if(!e)return!1;let{shallow:n}=l;if(!this.isDragging())return!1;let u=this.registry.getTargetType(e),a=this.getItemType();if(a&&!xu(u,a))return!1;let i=this.getTargetIds();if(!i.length)return!1;let c=i.indexOf(e);return n?c===i.length-1:c>-1}getItemType(){return this.store.getState().dragOperation.itemType}getItem(){return this.store.getState().dragOperation.item}getSourceId(){return this.store.getState().dragOperation.sourceId}getTargetIds(){return this.store.getState().dragOperation.targetIds}getDropResult(){return this.store.getState().dragOperation.dropResult}didDrop(){return this.store.getState().dragOperation.didDrop}isSourcePublic(){return!!this.store.getState().dragOperation.isSourcePublic}getInitialClientOffset(){return this.store.getState().dragOffset.initialClientOffset}getInitialSourceClientOffset(){return this.store.getState().dragOffset.initialSourceClientOffset}getClientOffset(){return this.store.getState().dragOffset.clientOffset}getSourceClientOffset(){return yg(this.store.getState().dragOffset)}getDifferenceFromInitialOffset(){return pg(this.store.getState().dragOffset)}constructor(e,l){this.store=e,this.registry=l}};var bg=typeof global<"u"?global:self,Eg=bg.MutationObserver||bg.WebKitMutationObserver;function df(t){return function(){let l=setTimeout(u,0),n=setInterval(u,50);function u(){clearTimeout(l),clearInterval(n),t()}}}function $p(t){let e=1,l=new Eg(t),n=document.createTextNode("");return l.observe(n,{characterData:!0}),function(){e=-e,n.data=e}}var Og=typeof Eg=="function"?$p:df;var gi=class{enqueueTask(e){let{queue:l,requestFlush:n}=this;l.length||(n(),this.flushing=!0),l[l.length]=e}constructor(){this.queue=[],this.pendingErrors=[],this.flushing=!1,this.index=0,this.capacity=1024,this.flush=()=>{let{queue:e}=this;for(;this.indexthis.capacity){for(let n=0,u=e.length-this.index;n{this.pendingErrors.push(e),this.requestErrorThrow()},this.requestFlush=Og(this.flush),this.requestErrorThrow=df(()=>{if(this.pendingErrors.length)throw this.pendingErrors.shift()})}};var vi=class{call(){try{this.task&&this.task()}catch(e){this.onError(e)}finally{this.task=null,this.release(this)}}constructor(e,l){this.onError=e,this.release=l,this.task=null}};var mi=class{create(e){let l=this.freeTasks,n=l.length?l.pop():new vi(this.onError,u=>l[l.length]=u);return n.task=e,n}constructor(e){this.onError=e,this.freeTasks=[]}};var Tg=new gi,Pp=new mi(Tg.registerPendingError);function Dg(t){Tg.enqueueTask(Pp.create(t))}var Cu="dnd-core/ADD_SOURCE",Nu="dnd-core/ADD_TARGET",zu="dnd-core/REMOVE_SOURCE",xl="dnd-core/REMOVE_TARGET";function Mg(t){return{type:Cu,payload:{sourceId:t}}}function Ag(t){return{type:Nu,payload:{targetId:t}}}function _g(t){return{type:zu,payload:{sourceId:t}}}function Rg(t){return{type:xl,payload:{targetId:t}}}function xg(t){T(typeof t.canDrag=="function","Expected canDrag to be a function."),T(typeof t.beginDrag=="function","Expected beginDrag to be a function."),T(typeof t.endDrag=="function","Expected endDrag to be a function.")}function Cg(t){T(typeof t.canDrop=="function","Expected canDrop to be a function."),T(typeof t.hover=="function","Expected hover to be a function."),T(typeof t.drop=="function","Expected beginDrag to be a function.")}function yi(t,e){if(e&&Array.isArray(t)){t.forEach(l=>yi(l,!1));return}T(typeof t=="string"||typeof t=="symbol",e?"Type can only be a string, a symbol, or an array of either.":"Type can only be a string or a symbol.")}var Ct;(function(t){t.SOURCE="SOURCE",t.TARGET="TARGET"})(Ct||(Ct={}));var Fp=0;function Ng(){return Fp++}function Ip(t){let e=Ng().toString();switch(t){case Ct.SOURCE:return`S${e}`;case Ct.TARGET:return`T${e}`;default:throw new Error(`Unknown Handler Role: ${t}`)}}function zg(t){switch(t[0]){case"S":return Ct.SOURCE;case"T":return Ct.TARGET;default:throw new Error(`Cannot parse handler ID: ${t}`)}}function Ug(t,e){let l=t.entries(),n=!1;do{let{done:u,value:[,a]}=l.next();if(a===e)return!0;n=!!u}while(!n);return!1}var pi=class{addSource(e,l){yi(e),xg(l);let n=this.addHandler(Ct.SOURCE,e,l);return this.store.dispatch(Mg(n)),n}addTarget(e,l){yi(e,!0),Cg(l);let n=this.addHandler(Ct.TARGET,e,l);return this.store.dispatch(Ag(n)),n}containsHandler(e){return Ug(this.dragSources,e)||Ug(this.dropTargets,e)}getSource(e,l=!1){return T(this.isSourceId(e),"Expected a valid source ID."),l&&e===this.pinnedSourceId?this.pinnedSource:this.dragSources.get(e)}getTarget(e){return T(this.isTargetId(e),"Expected a valid target ID."),this.dropTargets.get(e)}getSourceType(e){return T(this.isSourceId(e),"Expected a valid source ID."),this.types.get(e)}getTargetType(e){return T(this.isTargetId(e),"Expected a valid target ID."),this.types.get(e)}isSourceId(e){return zg(e)===Ct.SOURCE}isTargetId(e){return zg(e)===Ct.TARGET}removeSource(e){T(this.getSource(e),"Expected an existing source."),this.store.dispatch(_g(e)),Dg(()=>{this.dragSources.delete(e),this.types.delete(e)})}removeTarget(e){T(this.getTarget(e),"Expected an existing target."),this.store.dispatch(Rg(e)),this.dropTargets.delete(e),this.types.delete(e)}pinSource(e){let l=this.getSource(e);T(l,"Expected an existing source."),this.pinnedSourceId=e,this.pinnedSource=l}unpinSource(){T(this.pinnedSource,"No source is pinned at the time."),this.pinnedSourceId=null,this.pinnedSource=null}addHandler(e,l,n){let u=Ip(e);return this.types.set(u,l),e===Ct.SOURCE?this.dragSources.set(u,n):e===Ct.TARGET&&this.dropTargets.set(u,n),u}constructor(e){this.types=new Map,this.dragSources=new Map,this.dropTargets=new Map,this.pinnedSourceId=null,this.pinnedSource=null,this.store=e}};var t0=(t,e)=>t===e;function Hg(t,e){return!t&&!e?!0:!t||!e?!1:t.x===e.x&&t.y===e.y}function wg(t,e,l=t0){if(t.length!==e.length)return!1;for(let n=0;n0||!wg(l,n)))return On;let i=n[n.length-1],c=l[l.length-1];return i!==c&&(i&&u.push(i),c&&u.push(c)),u}function e0(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function l0(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,n)&&(l[n]=t[n])}return l}function f0(t,e){if(t==null)return{};var l={},n=Object.keys(t),u,a;for(a=0;a=0)&&(l[u]=t[u]);return l}var Qg=0,Si=Symbol.for("__REACT_DND_CONTEXT_INSTANCE__"),Kg=(0,bi.memo)(function(e){var{children:l}=e,n=r0(e,["children"]);let[u,a]=o0(n);return(0,bi.useEffect)(()=>{if(a){let i=Jg();return++Qg,()=>{--Qg===0&&(i[Si]=null)}}},[]),(0,Zg.jsx)(ri.Provider,{value:u,children:l})});function o0(t){if("manager"in t)return[{dragDropManager:t.manager},!1];let e=s0(t.backend,t.context,t.options,t.debugMode),l=!t.context;return[e,l]}function s0(t,e=Jg(),l,n){let u=e;return u[Si]||(u[Si]={dragDropManager:Lg(t,e,l,n)}),u[Si]}function Jg(){return typeof global<"u"?global:window}var $g=V(Wg(),1),Oi=V(et(),1);var Ei=V(et(),1),De=typeof window<"u"?Ei.useLayoutEffect:Ei.useEffect;function Ti(t,e,l){let[n,u]=(0,Oi.useState)(()=>e(t)),a=(0,Oi.useCallback)(()=>{let i=e(t);(0,$g.default)(n,i)||(u(i),l&&l())},[n,t,l]);return De(a),[n,a]}function Pg(t,e,l){let[n,u]=Ti(t,e,l);return De(function(){let i=t.getHandlerId();if(i!=null)return t.subscribeToStateChange(u,{handlerIds:[i]})},[t,u]),n}function Fg(t,e,l){return Pg(e,t||(()=>({})),()=>l.reconnect())}var Ig=V(et(),1);function tv(t,e){let l=[...e||[]];return e==null&&typeof t!="function"&&l.push(t),(0,Ig.useMemo)(()=>typeof t=="function"?t():t,l)}var hf=V(et(),1);function ev(t){return(0,hf.useMemo)(()=>t.hooks.dragSource(),[t])}function lv(t){return(0,hf.useMemo)(()=>t.hooks.dragPreview(),[t])}var cv=V(et(),1);var gf=!1,vf=!1,Di=class{receiveHandlerId(e){this.sourceId=e}getHandlerId(){return this.sourceId}canDrag(){T(!gf,"You may not call monitor.canDrag() inside your canDrag() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return gf=!0,this.internalMonitor.canDragSource(this.sourceId)}finally{gf=!1}}isDragging(){if(!this.sourceId)return!1;T(!vf,"You may not call monitor.isDragging() inside your isDragging() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return vf=!0,this.internalMonitor.isDraggingSource(this.sourceId)}finally{vf=!1}}subscribeToStateChange(e,l){return this.internalMonitor.subscribeToStateChange(e,l)}isDraggingSource(e){return this.internalMonitor.isDraggingSource(e)}isOverTarget(e,l){return this.internalMonitor.isOverTarget(e,l)}getTargetIds(){return this.internalMonitor.getTargetIds()}isSourcePublic(){return this.internalMonitor.isSourcePublic()}getSourceId(){return this.internalMonitor.getSourceId()}subscribeToOffsetChange(e){return this.internalMonitor.subscribeToOffsetChange(e)}canDragSource(e){return this.internalMonitor.canDragSource(e)}canDropOnTarget(e){return this.internalMonitor.canDropOnTarget(e)}getItemType(){return this.internalMonitor.getItemType()}getItem(){return this.internalMonitor.getItem()}getDropResult(){return this.internalMonitor.getDropResult()}didDrop(){return this.internalMonitor.didDrop()}getInitialClientOffset(){return this.internalMonitor.getInitialClientOffset()}getInitialSourceClientOffset(){return this.internalMonitor.getInitialSourceClientOffset()}getSourceClientOffset(){return this.internalMonitor.getSourceClientOffset()}getClientOffset(){return this.internalMonitor.getClientOffset()}getDifferenceFromInitialOffset(){return this.internalMonitor.getDifferenceFromInitialOffset()}constructor(e){this.sourceId=null,this.internalMonitor=e.getMonitor()}};function nv(t,e,l){let n=l.getRegistry(),u=n.addSource(t,e);return[u,()=>n.removeSource(u)]}function mf(t,e,l,n){let u=l?l.call(n,t,e):void 0;if(u!==void 0)return!!u;if(t===e)return!0;if(typeof t!="object"||!t||typeof e!="object"||!e)return!1;let a=Object.keys(t),i=Object.keys(e);if(a.length!==i.length)return!1;let c=Object.prototype.hasOwnProperty.bind(e);for(let r=0;r, or turn it into a drag source or a drop target itself.`)}function h0(t){return(e=null,l=null)=>{if(!(0,Uu.isValidElement)(e)){let a=e;return t(a,l),a}let n=e;return d0(n),g0(n,l?a=>t(a,l):t)}}function av(t){let e={};return Object.keys(t).forEach(l=>{let n=t[l];if(l.endsWith("Ref"))e[l]=t[l];else{let u=h0(n);e[l]=()=>u}}),e}function uv(t,e){typeof t=="function"?t(e):t.current=e}function g0(t,e){let l=t.ref;return T(typeof l!="string","Cannot connect React DnD to an element with an existing string ref. Please convert it to use a callback ref instead, or wrap it into a or
. Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs"),l?(0,Uu.cloneElement)(t,{ref:n=>{uv(l,n),uv(e,n)}}):(0,Uu.cloneElement)(t,{ref:e})}var Mi=class{receiveHandlerId(e){this.handlerId!==e&&(this.handlerId=e,this.reconnect())}get connectTarget(){return this.dragSource}get dragSourceOptions(){return this.dragSourceOptionsInternal}set dragSourceOptions(e){this.dragSourceOptionsInternal=e}get dragPreviewOptions(){return this.dragPreviewOptionsInternal}set dragPreviewOptions(e){this.dragPreviewOptionsInternal=e}reconnect(){let e=this.reconnectDragSource();this.reconnectDragPreview(e)}reconnectDragSource(){let e=this.dragSource,l=this.didHandlerIdChange()||this.didConnectedDragSourceChange()||this.didDragSourceOptionsChange();return l&&this.disconnectDragSource(),this.handlerId?e?(l&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragSource=e,this.lastConnectedDragSourceOptions=this.dragSourceOptions,this.dragSourceUnsubscribe=this.backend.connectDragSource(this.handlerId,e,this.dragSourceOptions)),l):(this.lastConnectedDragSource=e,l):l}reconnectDragPreview(e=!1){let l=this.dragPreview,n=e||this.didHandlerIdChange()||this.didConnectedDragPreviewChange()||this.didDragPreviewOptionsChange();if(n&&this.disconnectDragPreview(),!!this.handlerId){if(!l){this.lastConnectedDragPreview=l;return}n&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragPreview=l,this.lastConnectedDragPreviewOptions=this.dragPreviewOptions,this.dragPreviewUnsubscribe=this.backend.connectDragPreview(this.handlerId,l,this.dragPreviewOptions))}}didHandlerIdChange(){return this.lastConnectedHandlerId!==this.handlerId}didConnectedDragSourceChange(){return this.lastConnectedDragSource!==this.dragSource}didConnectedDragPreviewChange(){return this.lastConnectedDragPreview!==this.dragPreview}didDragSourceOptionsChange(){return!mf(this.lastConnectedDragSourceOptions,this.dragSourceOptions)}didDragPreviewOptionsChange(){return!mf(this.lastConnectedDragPreviewOptions,this.dragPreviewOptions)}disconnectDragSource(){this.dragSourceUnsubscribe&&(this.dragSourceUnsubscribe(),this.dragSourceUnsubscribe=void 0)}disconnectDragPreview(){this.dragPreviewUnsubscribe&&(this.dragPreviewUnsubscribe(),this.dragPreviewUnsubscribe=void 0,this.dragPreviewNode=null,this.dragPreviewRef=null)}get dragSource(){return this.dragSourceNode||this.dragSourceRef&&this.dragSourceRef.current}get dragPreview(){return this.dragPreviewNode||this.dragPreviewRef&&this.dragPreviewRef.current}clearDragSource(){this.dragSourceNode=null,this.dragSourceRef=null}clearDragPreview(){this.dragPreviewNode=null,this.dragPreviewRef=null}constructor(e){this.hooks=av({dragSource:(l,n)=>{this.clearDragSource(),this.dragSourceOptions=n||null,yf(l)?this.dragSourceRef=l:this.dragSourceNode=l,this.reconnectDragSource()},dragPreview:(l,n)=>{this.clearDragPreview(),this.dragPreviewOptions=n||null,yf(l)?this.dragPreviewRef=l:this.dragPreviewNode=l,this.reconnectDragPreview()}}),this.handlerId=null,this.dragSourceRef=null,this.dragSourceOptionsInternal=null,this.dragPreviewRef=null,this.dragPreviewOptionsInternal=null,this.lastConnectedHandlerId=null,this.lastConnectedDragSource=null,this.lastConnectedDragSourceOptions=null,this.lastConnectedDragPreview=null,this.lastConnectedDragPreviewOptions=null,this.backend=e}};var iv=V(et(),1);function ul(){let{dragDropManager:t}=(0,iv.useContext)(ri);return T(t!=null,"Expected drag drop context"),t}function rv(t,e){let l=ul(),n=(0,cv.useMemo)(()=>new Mi(l.getBackend()),[l]);return De(()=>(n.dragSourceOptions=t||null,n.reconnect(),()=>n.disconnectDragSource()),[n,t]),De(()=>(n.dragPreviewOptions=e||null,n.reconnect(),()=>n.disconnectDragPreview()),[n,e]),n}var fv=V(et(),1);function ov(){let t=ul();return(0,fv.useMemo)(()=>new Di(t),[t])}var _i=V(et(),1);var Ai=class{beginDrag(){let e=this.spec,l=this.monitor,n=null;return typeof e.item=="object"?n=e.item:typeof e.item=="function"?n=e.item(l):n={},n??null}canDrag(){let e=this.spec,l=this.monitor;return typeof e.canDrag=="boolean"?e.canDrag:typeof e.canDrag=="function"?e.canDrag(l):!0}isDragging(e,l){let n=this.spec,u=this.monitor,{isDragging:a}=n;return a?a(u):l===e.getSourceId()}endDrag(){let e=this.spec,l=this.monitor,n=this.connector,{end:u}=e;u&&u(l.getItem(),l),n.reconnect()}constructor(e,l,n){this.spec=e,this.monitor=l,this.connector=n}};function sv(t,e,l){let n=(0,_i.useMemo)(()=>new Ai(t,e,l),[e,l]);return(0,_i.useEffect)(()=>{n.spec=t},[t]),n}var dv=V(et(),1);function hv(t){return(0,dv.useMemo)(()=>{let e=t.type;return T(e!=null,"spec.type must be defined"),e},[t])}function gv(t,e,l){let n=ul(),u=sv(t,e,l),a=hv(t);De(function(){if(a!=null){let[c,r]=nv(a,u,n);return e.receiveHandlerId(c),l.receiveHandlerId(c),r}},[n,e,l,u,a])}function vv(t,e){let l=tv(t,e);T(!l.begin,"useDrag::spec.begin was deprecated in v14. Replace spec.begin() with spec.item(). (see more here - https://react-dnd.github.io/react-dnd/docs/api/use-drag)");let n=ov(),u=rv(l.options,l.previewOptions);return gv(l,n,u),[Fg(l.collect,n,u),ev(u),lv(u)]}var pf=V(et(),1);function mv(t){let l=ul().getMonitor(),[n,u]=Ti(l,t);return(0,pf.useEffect)(()=>l.subscribeToOffsetChange(u)),(0,pf.useEffect)(()=>l.subscribeToStateChange(u)),n}var Me;(function(t){t.mouse="mouse",t.touch="touch",t.keyboard="keyboard"})(Me||(Me={}));var Ri=class{get delay(){var e;return(e=this.args.delay)!==null&&e!==void 0?e:0}get scrollAngleRanges(){return this.args.scrollAngleRanges}get getDropTargetElementsAtPoint(){return this.args.getDropTargetElementsAtPoint}get ignoreContextMenu(){var e;return(e=this.args.ignoreContextMenu)!==null&&e!==void 0?e:!1}get enableHoverOutsideTarget(){var e;return(e=this.args.enableHoverOutsideTarget)!==null&&e!==void 0?e:!1}get enableKeyboardEvents(){var e;return(e=this.args.enableKeyboardEvents)!==null&&e!==void 0?e:!1}get enableMouseEvents(){var e;return(e=this.args.enableMouseEvents)!==null&&e!==void 0?e:!1}get enableTouchEvents(){var e;return(e=this.args.enableTouchEvents)!==null&&e!==void 0?e:!0}get touchSlop(){return this.args.touchSlop||0}get delayTouchStart(){var e,l,n,u;return(u=(n=(e=this.args)===null||e===void 0?void 0:e.delayTouchStart)!==null&&n!==void 0?n:(l=this.args)===null||l===void 0?void 0:l.delay)!==null&&u!==void 0?u:0}get delayMouseStart(){var e,l,n,u;return(u=(n=(e=this.args)===null||e===void 0?void 0:e.delayMouseStart)!==null&&n!==void 0?n:(l=this.args)===null||l===void 0?void 0:l.delay)!==null&&u!==void 0?u:0}get window(){if(this.context&&this.context.window)return this.context.window;if(typeof window<"u")return window}get document(){var e;if(!((e=this.context)===null||e===void 0)&&e.document)return this.context.document;if(this.window)return this.window.document}get rootElement(){var e;return((e=this.args)===null||e===void 0?void 0:e.rootElement)||this.document}constructor(e,l){this.args=e,this.context=l}};function yv(t,e,l,n){return Math.sqrt(Math.pow(Math.abs(l-t),2)+Math.pow(Math.abs(n-e),2))}function pv(t,e,l,n,u){if(!u)return!1;let a=Math.atan2(n-e,l-t)*180/Math.PI+180;for(let i=0;i=c.start)&&(c.end==null||a<=c.end))return!0}return!1}var v0={Left:1,Right:2,Center:4},m0={Left:0,Center:1,Right:2};function xi(t){return t.button===void 0||t.button===m0.Left}function Sv(t){return t.buttons===void 0||(t.buttons&v0.Left)===0}function Ci(t){return!!t.targetTouches}var y0=1;function bv(t){let e=t.nodeType===y0?t:t.parentElement;if(!e)return;let{top:l,left:n}=e.getBoundingClientRect();return{x:n,y:l}}function p0(t,e){if(t.targetTouches.length===1)return Hu(t.targetTouches[0]);if(e&&t.touches.length===1&&t.touches[0].target===e.target)return Hu(t.touches[0])}function Hu(t,e){return Ci(t)?p0(t,e):{x:t.clientX,y:t.clientY}}var Sf=(()=>{let t=!1;try{addEventListener("test",()=>{},Object.defineProperty({},"passive",{get(){return t=!0,!0}}))}catch{}return t})();var wu={[Me.mouse]:{start:"mousedown",move:"mousemove",end:"mouseup",contextmenu:"contextmenu"},[Me.touch]:{start:"touchstart",move:"touchmove",end:"touchend"},[Me.keyboard]:{keydown:"keydown"}},Ni=class t{profile(){var e;return{sourceNodes:this.sourceNodes.size,sourcePreviewNodes:this.sourcePreviewNodes.size,sourcePreviewNodeOptions:this.sourcePreviewNodeOptions.size,targetNodes:this.targetNodes.size,dragOverTargetIds:((e=this.dragOverTargetIds)===null||e===void 0?void 0:e.length)||0}}get document(){return this.options.document}setup(){let e=this.options.rootElement;e&&(T(!t.isSetUp,"Cannot have two Touch backends at the same time."),t.isSetUp=!0,this.addEventListener(e,"start",this.getTopMoveStartHandler()),this.addEventListener(e,"start",this.handleTopMoveStartCapture,!0),this.addEventListener(e,"move",this.handleTopMove),this.addEventListener(e,"move",this.handleTopMoveCapture,!0),this.addEventListener(e,"end",this.handleTopMoveEndCapture,!0),this.options.enableMouseEvents&&!this.options.ignoreContextMenu&&this.addEventListener(e,"contextmenu",this.handleTopMoveEndCapture),this.options.enableKeyboardEvents&&this.addEventListener(e,"keydown",this.handleCancelOnEscape,!0))}teardown(){let e=this.options.rootElement;e&&(t.isSetUp=!1,this._mouseClientOffset={},this.removeEventListener(e,"start",this.handleTopMoveStartCapture,!0),this.removeEventListener(e,"start",this.handleTopMoveStart),this.removeEventListener(e,"move",this.handleTopMoveCapture,!0),this.removeEventListener(e,"move",this.handleTopMove),this.removeEventListener(e,"end",this.handleTopMoveEndCapture,!0),this.options.enableMouseEvents&&!this.options.ignoreContextMenu&&this.removeEventListener(e,"contextmenu",this.handleTopMoveEndCapture),this.options.enableKeyboardEvents&&this.removeEventListener(e,"keydown",this.handleCancelOnEscape,!0),this.uninstallSourceNodeRemovalObserver())}addEventListener(e,l,n,u=!1){let a=Sf?{capture:u,passive:!1}:u;this.listenerTypes.forEach(function(i){let c=wu[i][l];c&&e.addEventListener(c,n,a)})}removeEventListener(e,l,n,u=!1){let a=Sf?{capture:u,passive:!1}:u;this.listenerTypes.forEach(function(i){let c=wu[i][l];c&&e.removeEventListener(c,n,a)})}connectDragSource(e,l){let n=this.handleMoveStart.bind(this,e);return this.sourceNodes.set(e,l),this.addEventListener(l,"start",n),()=>{this.sourceNodes.delete(e),this.removeEventListener(l,"start",n)}}connectDragPreview(e,l,n){return this.sourcePreviewNodeOptions.set(e,n),this.sourcePreviewNodes.set(e,l),()=>{this.sourcePreviewNodes.delete(e),this.sourcePreviewNodeOptions.delete(e)}}connectDropTarget(e,l){let n=this.options.rootElement;if(!this.document||!n)return()=>{};let u=a=>{if(!this.document||!n||!this.monitor.isDragging())return;let i;switch(a.type){case wu.mouse.move:i={x:a.clientX,y:a.clientY};break;case wu.touch.move:var c,r;i={x:((c=a.touches[0])===null||c===void 0?void 0:c.clientX)||0,y:((r=a.touches[0])===null||r===void 0?void 0:r.clientY)||0};break}let f=i!=null?this.document.elementFromPoint(i.x,i.y):void 0,g=f&&l.contains(f);if(f===l||g)return this.handleMove(a,e)};return this.addEventListener(this.document.body,"move",u),this.targetNodes.set(e,l),()=>{this.document&&(this.targetNodes.delete(e),this.removeEventListener(this.document.body,"move",u))}}getTopMoveStartHandler(){return!this.options.delayTouchStart&&!this.options.delayMouseStart?this.handleTopMoveStart:this.handleTopMoveStartDelay}installSourceNodeRemovalObserver(e){this.uninstallSourceNodeRemovalObserver(),this.draggedSourceNode=e,this.draggedSourceNodeRemovalObserver=new MutationObserver(()=>{e&&!e.parentElement&&(this.resurrectSourceNode(),this.uninstallSourceNodeRemovalObserver())}),!(!e||!e.parentElement)&&this.draggedSourceNodeRemovalObserver.observe(e.parentElement,{childList:!0})}resurrectSourceNode(){this.document&&this.draggedSourceNode&&(this.draggedSourceNode.style.display="none",this.draggedSourceNode.removeAttribute("data-reactid"),this.document.body.appendChild(this.draggedSourceNode))}uninstallSourceNodeRemovalObserver(){this.draggedSourceNodeRemovalObserver&&this.draggedSourceNodeRemovalObserver.disconnect(),this.draggedSourceNodeRemovalObserver=void 0,this.draggedSourceNode=void 0}constructor(e,l,n){this.getSourceClientOffset=u=>{let a=this.sourceNodes.get(u);return a&&bv(a)},this.handleTopMoveStartCapture=u=>{xi(u)&&(this.moveStartSourceIds=[])},this.handleMoveStart=u=>{Array.isArray(this.moveStartSourceIds)&&this.moveStartSourceIds.unshift(u)},this.handleTopMoveStart=u=>{if(!xi(u))return;let a=Hu(u);a&&(Ci(u)&&(this.lastTargetTouchFallback=u.targetTouches[0]),this._mouseClientOffset=a),this.waitingForDelay=!1},this.handleTopMoveStartDelay=u=>{if(!xi(u))return;let a=u.type===wu.touch.start?this.options.delayTouchStart:this.options.delayMouseStart;this.timeout=setTimeout(this.handleTopMoveStart.bind(this,u),a),this.waitingForDelay=!0},this.handleTopMoveCapture=()=>{this.dragOverTargetIds=[]},this.handleMove=(u,a)=>{this.dragOverTargetIds&&this.dragOverTargetIds.unshift(a)},this.handleTopMove=u=>{if(this.timeout&&clearTimeout(this.timeout),!this.document||this.waitingForDelay)return;let{moveStartSourceIds:a,dragOverTargetIds:i}=this,c=this.options.enableHoverOutsideTarget,r=Hu(u,this.lastTargetTouchFallback);if(!r)return;if(this._isScrolling||!this.monitor.isDragging()&&pv(this._mouseClientOffset.x||0,this._mouseClientOffset.y||0,r.x,r.y,this.options.scrollAngleRanges)){this._isScrolling=!0;return}if(!this.monitor.isDragging()&&this._mouseClientOffset.hasOwnProperty("x")&&a&&yv(this._mouseClientOffset.x||0,this._mouseClientOffset.y||0,r.x,r.y)>(this.options.touchSlop?this.options.touchSlop:0)&&(this.moveStartSourceIds=void 0,this.actions.beginDrag(a,{clientOffset:this._mouseClientOffset,getSourceClientOffset:this.getSourceClientOffset,publishSource:!1})),!this.monitor.isDragging())return;let f=this.sourceNodes.get(this.monitor.getSourceId());this.installSourceNodeRemovalObserver(f),this.actions.publishDragSource(),u.cancelable&&u.preventDefault();let g=(i||[]).map(S=>this.targetNodes.get(S)).filter(S=>!!S),m=this.options.getDropTargetElementsAtPoint?this.options.getDropTargetElementsAtPoint(r.x,r.y,g):this.document.elementsFromPoint(r.x,r.y),d=[];for(let S in m){if(!m.hasOwnProperty(S))continue;let b=m[S];for(b!=null&&d.push(b);b;)b=b.parentElement,b&&d.indexOf(b)===-1&&d.push(b)}let v=d.filter(S=>g.indexOf(S)>-1).map(S=>this._getDropTargetId(S)).filter(S=>!!S).filter((S,b,U)=>U.indexOf(S)===b);if(c)for(let S in this.targetNodes){let b=this.targetNodes.get(S);if(f&&b&&b.contains(f)&&v.indexOf(S)===-1){v.unshift(S);break}}v.reverse(),this.actions.hover(v,{clientOffset:r})},this._getDropTargetId=u=>{let a=this.targetNodes.keys(),i=a.next();for(;i.done===!1;){let c=i.value;if(u===this.targetNodes.get(c))return c;i=a.next()}},this.handleTopMoveEndCapture=u=>{if(this._isScrolling=!1,this.lastTargetTouchFallback=void 0,!!Sv(u)){if(!this.monitor.isDragging()||this.monitor.didDrop()){this.moveStartSourceIds=void 0;return}u.cancelable&&u.preventDefault(),this._mouseClientOffset={},this.uninstallSourceNodeRemovalObserver(),this.actions.drop(),this.actions.endDrag()}},this.handleCancelOnEscape=u=>{u.key==="Escape"&&this.monitor.isDragging()&&(this._mouseClientOffset={},this.uninstallSourceNodeRemovalObserver(),this.actions.endDrag())},this.options=new Ri(n,l),this.actions=e.getActions(),this.monitor=e.getMonitor(),this.sourceNodes=new Map,this.sourcePreviewNodes=new Map,this.sourcePreviewNodeOptions=new Map,this.targetNodes=new Map,this.listenerTypes=[],this._mouseClientOffset={},this._isScrolling=!1,this.options.enableMouseEvents&&this.listenerTypes.push(Me.mouse),this.options.enableTouchEvents&&this.listenerTypes.push(Me.touch),this.options.enableKeyboardEvents&&this.listenerTypes.push(Me.keyboard)}};var Ev=function(e,l={},n={}){return new Ni(e,l,n)};var Tv=V(et(),1);var bf=(t,e)=>({x:t.x-e.x,y:t.y-e.y}),S0=(t,e)=>({x:t.x+e.x,y:t.y+e.y}),b0=t=>{let e=t.getInitialClientOffset(),l=t.getInitialSourceClientOffset();return e===null||l===null?{x:0,y:0}:bf(e,l)},E0=(t,e)=>{switch(t){case"left":case"top-start":case"bottom-start":return 0;case"right":case"top-end":case"bottom-end":return e.width;default:return e.width/2}},O0=(t,e)=>{switch(t){case"top":case"top-start":case"top-end":return 0;case"bottom":case"bottom-start":case"bottom-end":return e.height;default:return e.height/2}},Ov=(t,e,l="center",n={x:0,y:0})=>{let u=t.getClientOffset();if(u===null)return null;if(!e.current||!e.current.getBoundingClientRect)return bf(u,b0(t));let a=e.current.getBoundingClientRect(),i={x:E0(l,a),y:O0(l,a)};return S0(bf(u,i),n)};var T0=t=>{let e=`translate(${t.x.toFixed(1)}px, ${t.y.toFixed(1)}px)`;return{pointerEvents:"none",position:"fixed",top:0,left:0,transform:e,WebkitTransform:e}},Ef=t=>{let e=(0,Tv.useRef)(null),l=mv(n=>({currentOffset:Ov(n,e,t?.placement,t?.padding),isDragging:n.isDragging(),itemType:n.getItemType(),item:n.getItem(),monitor:n}));return!l.isDragging||l.currentOffset===null?{display:!1}:{display:!0,itemType:l.itemType,item:l.item,style:T0(l.currentOffset),monitor:l.monitor,ref:e}};var Dv=V(et(),1);var Tf=V(Ie(),1),Of=({style:t,size:e,color:l,children:n,ref:u})=>(0,Tf.jsx)("div",{ref:u,style:{...t,backgroundColor:l,width:`${e}px`,height:`${e}px`},children:n}),Mv=()=>{let[t,e]=vv({type:"thing",item:{color:"#eedd00"}}),l=(0,Dv.useCallback)(n=>{e(n)},[e]);return(0,Tf.jsx)(Of,{ref:l,style:{},size:100,color:"blue"})};var z=V(Ie(),1),zi=({kind:t,text:e,placement:l,padding:n})=>{let u=Ef({placement:l,padding:n});if(!u.display)return null;let{style:a,ref:i,monitor:c}=u,r,f={...a,opacity:.5,whiteSpace:"nowrap"};if(t!=="default")if(t==="ref")r=i;else{let g,m;if(t==="custom_client")g=c.getClientOffset()?.x??0,m=c.getClientOffset()?.y??0;else if(t==="custom_source_client")g=c.getSourceClientOffset()?.x??0,m=c.getSourceClientOffset()?.y??0;else throw new Error("unknown kind");let d=`translate(${g}px, ${m}px)`;f={...f,transform:d,WebkitTransform:d}}return(0,z.jsx)(Of,{ref:r,style:f,size:50,color:"red",children:e})},Av=()=>{let[t,e]=(0,Cl.useState)(!1),[l,n]=(0,Cl.useState)("center"),[u,a]=(0,Cl.useState)("0"),[i,c]=(0,Cl.useState)("0");return(0,z.jsxs)(Cl.StrictMode,{children:[(0,z.jsxs)("p",{children:[(0,z.jsx)("label",{htmlFor:"previewPlacement",children:"Preview placement: "}),(0,z.jsxs)("select",{value:l,id:"previewPlacement",onChange:m=>{n(m.target.value)},children:[(0,z.jsx)("option",{value:"center",children:"center (default)"}),(0,z.jsx)("option",{value:"top-start",children:"top-start"}),(0,z.jsx)("option",{value:"top",children:"top"}),(0,z.jsx)("option",{value:"top-end",children:"top-end"}),(0,z.jsx)("option",{value:"bottom-start",children:"bottom-start"}),(0,z.jsx)("option",{value:"bottom",children:"bottom"}),(0,z.jsx)("option",{value:"bottom-end",children:"bottom-end"}),(0,z.jsx)("option",{value:"left",children:"left"}),(0,z.jsx)("option",{value:"right",children:"right"})]})]}),(0,z.jsxs)("p",{children:[(0,z.jsx)("label",{htmlFor:"previewPlacement",children:"Padding x: "}),(0,z.jsx)("input",{type:"text",value:u,onChange:m=>{a(m.target.value)}})]}),(0,z.jsxs)("p",{children:[(0,z.jsx)("label",{htmlFor:"previewPlacement",children:"Padding y: "}),(0,z.jsx)("input",{type:"text",value:i,onChange:m=>{c(m.target.value)}})]}),(0,z.jsxs)("p",{children:[(0,z.jsx)("input",{type:"checkbox",checked:t,onChange:m=>{e(m.target.checked)},id:"debug_mode"}),(0,z.jsx)("label",{htmlFor:"debug_mode",children:"Debug mode"})]}),(0,z.jsxs)(Kg,{backend:Ev,options:{enableMouseEvents:!0},children:[(0,z.jsx)(Mv,{}),(0,z.jsx)(zi,{text:"default",kind:"default"}),(0,z.jsx)(zi,{text:"with ref",kind:"ref",placement:l,padding:{x:Number(u),y:Number(i)}}),t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(zi,{text:"custom ClientOffset",kind:"custom_client"}),(0,z.jsx)(zi,{text:"custom SourceClientOffset",kind:"custom_source_client"})]}):null]})]})};var xv=V(Ie(),1),Rv=document.getElementById("root");if(!Rv)throw new Error("could not find root element");var D0=(0,_v.createRoot)(Rv);D0.render((0,xv.jsx)(Av,{}));})(); +/*! Bundled license information: + +scheduler/cjs/scheduler.production.js: + (** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react.production.js: + (** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom.production.js: + (** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom-client.production.js: + (** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react-jsx-runtime.production.js: + (** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 00000000..61f761a8 --- /dev/null +++ b/examples/index.html @@ -0,0 +1,15 @@ + + + + Examples + + +

Here are examples for each package:

+ + + diff --git a/examples/react-dnd-multi-backend.html b/examples/react-dnd-multi-backend.html new file mode 100644 index 00000000..2215696a --- /dev/null +++ b/examples/react-dnd-multi-backend.html @@ -0,0 +1,13 @@ + + + + react-dnd-multi-backend Examples + + +

This example demonstrates the backend switching mechanism between HTML5 and Touch, the useMulti* hooks and the DndProvider replacement.

+

You can drag different colored squares in the gray ones, the bottom ones are restricted to a particular backend and can only be used when that backend is in use.

+

You can use your browser Dev Tools to switch to the Touch backend (e.g. simulate a mobile device).

+
React is not working
+ + + diff --git a/examples/react-dnd-preview.html b/examples/react-dnd-preview.html new file mode 100644 index 00000000..10c80ab9 --- /dev/null +++ b/examples/react-dnd-preview.html @@ -0,0 +1,11 @@ + + + + react-dnd-preview Examples + + +

Dragging the square will display previews using different methods (see source for details) in order to showcase all the different APIs

+
React is not working
+ + + diff --git a/examples/react-dnd-preview_offset.html b/examples/react-dnd-preview_offset.html new file mode 100644 index 00000000..5b7dce9b --- /dev/null +++ b/examples/react-dnd-preview_offset.html @@ -0,0 +1,11 @@ + + + + react-dnd-preview (offset testing) Examples + + +

Dragging the square will display previews using different offsets (see source for details) in order to showcase all the different APIs

+
React is not working
+ + + diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..39d5bd98 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,30 @@ +import {defaults} from 'jest-config' + +export default { + notify: true, + notifyMode: 'failure-success', + + collectCoverage: true, + coverageReporters: process.env.CI ? ['lcov'] : ['text', 'text-summary', 'html'], + collectCoverageFrom: ['packages/*/src/**/*.{js,jsx,ts,tsx}'], + + projects: [ + { + displayName: 'test', + + testEnvironment: 'jsdom', + + setupFilesAfterEnv: ['/.jest-setup.ts'], + + transform: { + '^.+\\.[jt]sx?$': ['esbuild-jest', {sourcemap: true}], + }, + transformIgnorePatterns: ['/node_modules/(?!(dnd-core|@?react-dnd.*)/)'], + moduleNameMapper: { + '^@mocks/(.*)$': '/__mocks__/$1', + }, + + moduleFileExtensions: [...defaults.moduleFileExtensions, 'ts', 'tsx'], + }, + ], +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..44d7af5d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11409 @@ +{ + "name": "meta", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "meta", + "license": "MIT", + "workspaces": [ + "./packages/*" + ], + "devDependencies": { + "@babel/preset-typescript": "^7.26.0", + "@biomejs/biome": "^1.9.4", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.1.0", + "@types/jest": "^29.5.14", + "@types/jsdom": "^21.1.7", + "@types/react": "^19.0.2", + "@types/react-dom": "^19.0.2", + "esbuild": "^0.24", + "esbuild-jest": "^0.5.0", + "esbuild-node-externals": "^1.16.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "node-notifier": "^10.0.1", + "react": "^19.0.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-test-backend": "^16.0.1", + "react-dnd-test-utils": "^16.0.1", + "react-dnd-touch-backend": "^16.0.1", + "react-dom": "^19.0.0", + "typescript": "^5.7.2" + }, + "engines": { + "node": ">=20.0.0", + "npm": ">=7.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", + "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/core/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/environment/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/environment/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/environment/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/fake-timers/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/globals/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/globals/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/reporters/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-result/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/test-result/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-result/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/test-result/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-result/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-sequencer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/test-sequencer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-sequencer/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/test-sequencer/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@react-dnd/asap": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz", + "integrity": "sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==" + }, + "node_modules/@react-dnd/invariant": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-4.0.2.tgz", + "integrity": "sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", + "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.3.0.tgz", + "integrity": "sha512-pT/TYB2+IyMYkkB6lqpkzD7VFbsR0JBJtflK3cS68sCNWxmOhWwRm1XvVHlseNEorsNcxkYsb4sRDV3aNIpttg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "peer": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", + "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.1.0.tgz", + "integrity": "sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/react": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dnd-core": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz", + "integrity": "sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==", + "dependencies": { + "@react-dnd/asap": "^5.0.1", + "@react-dnd/invariant": "^4.0.1", + "redux": "^4.2.0" + } + }, + "node_modules/dnd-multi-backend": { + "resolved": "packages/dnd-multi-backend", + "link": true + }, + "node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" + } + }, + "node_modules/esbuild-jest": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/esbuild-jest/-/esbuild-jest-0.5.0.tgz", + "integrity": "sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.17", + "@babel/plugin-transform-modules-commonjs": "^7.12.13", + "babel-jest": "^26.6.3" + }, + "peerDependencies": { + "esbuild": ">=0.8.50" + } + }, + "node_modules/esbuild-node-externals": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/esbuild-node-externals/-/esbuild-node-externals-1.16.0.tgz", + "integrity": "sha512-g16pp/yDFqBJ9/9D+UIWPj5uC8MPslMK62HmAXW+ZomZWJifOFTuJgado86UUiMeBrk03z2uvdS6cIGi0OTRcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0", + "tslib": "^2.4.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "esbuild": "0.12 - 0.24" + } + }, + "node_modules/esbuild-node-externals/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esbuild-node-externals/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esbuild-node-externals/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-changed-files/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-changed-files/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/jest-config/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-config/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-node/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-haste-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-mock/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-mock/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-resolve/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-runner/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-runtime/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-snapshot/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-worker/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-worker/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-worker/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-worker/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-notifier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", + "dev": true + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/rdndmb-html5-to-touch": { + "resolved": "packages/rdndmb-html5-to-touch", + "link": true + }, + "node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dnd": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz", + "integrity": "sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==", + "dependencies": { + "@react-dnd/invariant": "^4.0.1", + "@react-dnd/shallowequal": "^4.0.1", + "dnd-core": "^16.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/hoist-non-react-statics": ">= 3.3.1", + "@types/node": ">= 12", + "@types/react": ">= 16", + "react": ">= 16.14" + }, + "peerDependenciesMeta": { + "@types/hoist-non-react-statics": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-dnd-html5-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz", + "integrity": "sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==", + "dependencies": { + "dnd-core": "^16.0.1" + } + }, + "node_modules/react-dnd-multi-backend": { + "resolved": "packages/react-dnd-multi-backend", + "link": true + }, + "node_modules/react-dnd-preview": { + "resolved": "packages/react-dnd-preview", + "link": true + }, + "node_modules/react-dnd-test-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-test-backend/-/react-dnd-test-backend-16.0.1.tgz", + "integrity": "sha512-sUsQKMmoachP3AGaHLZD4JZWq2dHPoiLRG3YVuC0gXJtGENk3PVR+uRIrml7BEnnTyv+RVeoNK2ziL38Ggh8cw==", + "dev": true, + "dependencies": { + "dnd-core": "^16.0.1" + } + }, + "node_modules/react-dnd-test-utils": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-test-utils/-/react-dnd-test-utils-16.0.1.tgz", + "integrity": "sha512-hKt6HYUAuN1oVtpVIpHwxeZLqtjwfzK2wFyfQUs7Pbi6muxXK+ZDOHEUmaI3WcoWb0nhZOyX3+FwmBsrA288Eg==", + "dev": true, + "peerDependencies": { + "@testing-library/react": ">= 11", + "@types/node": "*", + "@types/react": ">= 16", + "@types/react-dom": ">= 16", + "react": ">= 16.14", + "react-dnd": ">= 11.1.3", + "react-dnd-html5-backend": ">= 11.1.3", + "react-dnd-test-backend": ">= 10.0.0", + "react-dom": ">= 16.14" + }, + "peerDependenciesMeta": { + "@testing-library/react": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dnd-html5-backend": { + "optional": true + }, + "react-dnd-test-backend": { + "optional": true + } + } + }, + "node_modules/react-dnd-touch-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-touch-backend/-/react-dnd-touch-backend-16.0.1.tgz", + "integrity": "sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==", + "dependencies": { + "@react-dnd/invariant": "^4.0.1", + "dnd-core": "^16.0.1" + } + }, + "node_modules/react-dom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.25.0" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "peer": true + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/yargs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/dnd-multi-backend": { + "version": "8.1.2", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "peerDependencies": { + "dnd-core": "^16.0.1" + } + }, + "packages/rdndmb-html5-to-touch": { + "version": "8.1.2", + "license": "MIT", + "dependencies": { + "dnd-multi-backend": "^8.1.2", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-touch-backend": "^16.0.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + } + }, + "packages/react-dnd-multi-backend": { + "version": "8.1.2", + "license": "MIT", + "dependencies": { + "dnd-multi-backend": "^8.1.2", + "react-dnd-preview": "^8.1.2" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "peerDependencies": { + "dnd-core": "^16.0.1", + "react": "^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0", + "react-dnd": "^16.0.1", + "react-dom": "^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0" + } + }, + "packages/react-dnd-preview": { + "version": "8.1.2", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "peerDependencies": { + "react": "^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0", + "react-dnd": "^16.0.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..e39d0906 --- /dev/null +++ b/package.json @@ -0,0 +1,60 @@ +{ + "name": "meta", + "type": "module", + "license": "MIT", + "private": true, + "browserslist": ["defaults"], + "engines": { + "npm": ">=7.0.0", + "node": ">=20.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "scripts": { + "clean": "rm -rf packages/*/dist examples/*.js coverage", + "build:types": "node esbuild/run-all.js tsc -p ./tsconfig.json --declarationDir dist", + "build:esm": "node esbuild/run-all.js node ../../esbuild/build.js", + "build:examples": "node esbuild/examples.js", + "build:all": "npm run build && npm run build:examples", + "build": "npm run build:esm && npm run build:types", + "typecheck": "tsc --noEmit", + "format:fix:internal": "npx @biomejs/biome format --write", + "format:fix": "npm run format:fix:internal -- .", + "vet": "npm run typecheck && npx @biomejs/biome check", + "vet:ci": "npm run typecheck && npx @biomejs/biome ci", + "test": "jest --config jest.config.js", + "test:watch": "npm run test -- --watch", + "test:ci": "CI=yes npm run test", + "start": "node esbuild/dev.js", + "start:dev": "NODE_ENV=development npm run start", + "publish": "npm run prepare && node esbuild/publish.js", + "prepare": "npm run clean && npm run build && npm run vet && npm run test" + }, + "devDependencies": { + "@babel/preset-typescript": "^7.26.0", + "@biomejs/biome": "^1.9.4", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.1.0", + "@types/jest": "^29.5.14", + "@types/jsdom": "^21.1.7", + "@types/react-dom": "^19.0.2", + "@types/react": "^19.0.2", + "esbuild": "^0.24", + "esbuild-jest": "^0.5.0", + "esbuild-node-externals": "^1.16.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "node-notifier": "^10.0.1", + "react": "^19.0.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-test-backend": "^16.0.1", + "react-dnd-test-utils": "^16.0.1", + "react-dnd-touch-backend": "^16.0.1", + "react-dom": "^19.0.0", + "typescript": "^5.7.2" + }, + "workspaces": ["./packages/*"] +} diff --git a/packages/dnd-multi-backend/.npmignore b/packages/dnd-multi-backend/.npmignore new file mode 100644 index 00000000..cc296803 --- /dev/null +++ b/packages/dnd-multi-backend/.npmignore @@ -0,0 +1,10 @@ +# Input +examples +__mocks__ +__tests__ +src +tsconfig.json + +# npm +node_modules +npm-debug.log diff --git a/packages/dnd-multi-backend/README.md b/packages/dnd-multi-backend/README.md new file mode 100644 index 00000000..ffc854d4 --- /dev/null +++ b/packages/dnd-multi-backend/README.md @@ -0,0 +1,149 @@ +# DnD Multi Backend [![NPM Version][npm-image]][npm-url] [![dependencies Status][deps-image]][deps-url] [![devDependencies Status][deps-dev-image]][deps-dev-url] + +[Try it here!](https://louisbrunner.github.io/dnd-multi-backend/examples/dnd-multi-backend.html) + +This project is a Drag'n'Drop backend compatible with [DnD Core](https://github.com/react-dnd/react-dnd/tree/master/packages/dnd-core). +It enables your application to use different DnD backends depending on the situation. This package is completely frontend-agnostic, you can refer to [this page](https://github.com/LouisBrunner/dnd-multi-backend) for frontend-specific packages. This means if your front-end is not yet supported, you'll have to roll out your own. + +See the [migration section](#migrating) for instructions when switching from `5.0.x` or `6.x.x`. + +## Installation + +```sh +npm install -S dnd-multi-backend +``` + +## Usage & Example + +You should only use this package if your framework is not in the supported list: + - [React](../react-dnd-multi-backend) + - [Angular](https://github.com/cormacrelf/angular-skyhook) + +In this case, you will need to write a [custom pipeline](../react-dnd-multi-backend#create-a-custom-pipeline) including as many `dnd-core` backends as you wish. See also the [examples](examples/) for more information. + +```js +import { createDragDropManager } from 'dnd-core' +import { MultiBackend } from 'dnd-multi-backend' + +// Define the backend and pipeline +class HTML5Backend { + constructor(manager) { + this.manager = manager + } + + setup() {} + teardown() {} + + connectDragSource(sourceId, node, options) { + ... + + return () => {} + } + + connectDragPreview(previewId, node, options) { + ... + + return () => {} + } + + connectDropTarget(targetId, node, options) { + ... + + return () => {} + } +} + +... + +const pipeline = { + backends: [ + { + id: 'html5', + backend: HTML5Backend, + transition: MouseTransition, + }, + { + id: 'touch', + backend: TouchBackend, + preview: true, + transition: TouchTransition, + }, + ], +} + +// Setup the manager +const manager = createDragDropManager(MultiBackend, {}, pipeline) +const registry = manager.getRegistry() + +// Setup your DnD logic +class Source { + ... + + canDrag() {} + beginDrag() {} + isDragging() {} + endDrag() {} +} + +class Target { + ... + + canDrop() {} + hover() {} + drop() {} +} + +// Define the DnD logic on the manager +const Item = 'item' +const src = new Source() +const dst = new Target() + +const srcId = registry.addSource(Item, src) +const dstId = registry.addTarget(Item, dst) + +// Link the DOM with the logic +const srcP = document.createElement('p') +const srcTxt = document.createTextNode('Source') +srcP.appendChild(srcTxt) +document.body.appendChild(srcP) +manager.getBackend().connectDragSource(srcId, srcP) + +const dstP = document.createElement('p') +const dstTxt = document.createTextNode('Target') +dstP.appendChild(dstTxt) +document.body.appendChild(dstP) +manager.getBackend().connectDropTarget(dstId, dstP) +``` + +## Migrating + +### Migrating from 6.x.x + +Starting with `7.0.0`, `dnd-multi-backend` doesn't have a default export anymore. + +Previously: +```js +import MultiBackend from 'dnd-multi-backend' +``` + +Now: +```js +import { MultiBackend } from 'dnd-multi-backend' +``` + +### Migrating from 5.0.x + +Starting with `5.1.0`, every backend in a pipeline will now need a new property called `id` and the library will warn if it isn't specified. The `MultiBackend` will try to guess it if possible, but that might fail and you will need to define them explicitly. + +## License + +MIT, Copyright (c) 2016-2022 Louis Brunner + + + +[npm-image]: https://img.shields.io/npm/v/dnd-multi-backend.svg +[npm-url]: https://npmjs.org/package/dnd-multi-backend +[deps-image]: https://david-dm.org/louisbrunner/dnd-multi-backend/status.svg +[deps-url]: https://david-dm.org/louisbrunner/dnd-multi-backend +[deps-dev-image]: https://david-dm.org/louisbrunner/dnd-multi-backend/dev-status.svg +[deps-dev-url]: https://david-dm.org/louisbrunner/dnd-multi-backend?type=dev diff --git a/packages/dnd-multi-backend/examples/Backends.ts b/packages/dnd-multi-backend/examples/Backends.ts new file mode 100644 index 00000000..dbf75008 --- /dev/null +++ b/packages/dnd-multi-backend/examples/Backends.ts @@ -0,0 +1,150 @@ +import type {Backend, BackendFactory, DragDropActions, DragDropManager, Identifier, Unsubscribe} from 'dnd-core' + +type Options = { + draggable?: boolean +} + +class DnDBackend implements Backend { + #manager: DragDropManager + #actions: DragDropActions + #label: string + #startEvents: string[] + #hoverEvents: string[] + #stopEvents: string[] + #draggable: boolean + + constructor(manager: DragDropManager, label: string, startEvents: string[], hoverEvents: string[], stopEvents: string[], {draggable = false}: Options = {}) { + this.#manager = manager + this.#actions = manager.getActions() + this.#label = label + this.#startEvents = startEvents + this.#hoverEvents = hoverEvents + this.#stopEvents = stopEvents + this.#draggable = draggable + } + + setup(): void { + console.log(`${this.#label}: setup`) + for (const event of this.#stopEvents) { + window.addEventListener(event, this.#drop) + } + } + + teardown(): void { + console.log(`${this.#label}: teardown`) + for (const event of this.#stopEvents) { + window.removeEventListener(event, this.#drop) + } + } + + // biome-ignore lint/suspicious/noExplicitAny: interface is like that + connectDragSource(sourceId: Identifier, nodeRaw?: any, _options?: any): Unsubscribe { + const node = nodeRaw as Element + + const drag = () => { + if (this.#manager.getMonitor().isDragging()) { + console.log(`${this.#label}: end drag`) + this.#actions.endDrag() + } + + console.log(`${this.#label}: drag`) + this.#actions.beginDrag([sourceId], { + clientOffset: this.#getXY(node), + getSourceClientOffset: (_id: unknown): {x: number; y: number} => { + return this.#getXY(node) + }, + }) + } + + console.log(`${this.#label}: add drag source`) + if (this.#draggable) { + node.setAttribute('draggable', 'true') + } + for (const event of this.#startEvents) { + window.addEventListener(event, drag) + } + + return () => { + console.log(`${this.#label}: remove drag source`) + for (const event of this.#startEvents) { + window.removeEventListener(event, drag) + } + if (this.#draggable) { + node.setAttribute('draggable', 'false') + } + } + } + + // biome-ignore lint/suspicious/noExplicitAny: interface is like that + connectDragPreview(_sourceId: any, _node?: any, _options?: any): Unsubscribe { + return () => {} + } + + // biome-ignore lint/suspicious/noExplicitAny: interface is like that + connectDropTarget(targetId: Identifier, node?: Element, _options?: any): Unsubscribe { + if (node === undefined) { + return () => {} + } + + const hover = (e: Event) => { + if (!this.#manager.getMonitor().isDragging()) { + return + } + + console.log(`${this.#label}: hover`) + this.#actions.hover([targetId], { + clientOffset: this.#getXY(node), + }) + if (this.#draggable && this.#manager.getMonitor().canDropOnTarget(targetId)) { + e.preventDefault() + } + } + + console.log(`${this.#label}: add drop target`) + for (const event of this.#hoverEvents) { + window.addEventListener(event, hover) + } + + return () => { + console.log(`${this.#label}: remove drop target`) + for (const event of this.#hoverEvents) { + window.removeEventListener(event, hover) + } + } + } + + profile(): Record { + return {} + } + + #drop = () => { + console.log(`${this.#label}: drop`) + this.#actions.drop() + this.#actions.endDrag() + } + + #getXY = (node: Element): {x: number; y: number} => { + const {top: x, left: y} = node.getBoundingClientRect() + return {x, y} + } +} + +class HTML5BackendImpl extends DnDBackend { + constructor(manager: DragDropManager) { + super(manager, 'HTML5', ['dragstart'], ['dragover', 'dragenter'], ['drop'], {draggable: true}) + } +} + +export const HTML5Backend: BackendFactory = (manager: DragDropManager) => { + return new HTML5BackendImpl(manager) +} + +class TouchBackendImpl extends DnDBackend { + constructor(manager: DragDropManager) { + super(manager, 'Touch', ['touchstart', 'mousedown'], ['touchmove', 'mousemove'], ['touchend', 'mouseup']) + } +} + +export const TouchBackend: BackendFactory = (manager: DragDropManager) => { + return new TouchBackendImpl(manager) +} diff --git a/packages/dnd-multi-backend/examples/DnD.ts b/packages/dnd-multi-backend/examples/DnD.ts new file mode 100644 index 00000000..3bf01e5d --- /dev/null +++ b/packages/dnd-multi-backend/examples/DnD.ts @@ -0,0 +1,68 @@ +import type {DragDropMonitor, DragSource as IDragSource, DropTarget as IDropTarget, Identifier} from 'dnd-core' + +type createElementProps = { + text: string + color: string +} + +const createElement = ({text, color}: createElementProps): Element => { + const p = document.createElement('p') + const textNode = document.createTextNode(text) + p.style.cssText = `width: 100px; height: 100px; margin: 10px; padding: 5px; background: ${color}` + p.appendChild(textNode) + return p +} + +export class DragSource implements IDragSource { + #node: Element + #color: string + + constructor({text, color}: createElementProps) { + this.#node = createElement({text, color}) + this.#color = color + } + + node(): Element { + return this.#node + } + + beginDrag(_monitor: DragDropMonitor, _targetId: Identifier): void { + // FIXME: the interface is actually wrong + // biome-ignore lint/correctness/noVoidTypeReturn: interface is wrong + return {color: this.#color} as unknown as undefined + } + + endDrag(_monitor: DragDropMonitor, _targetId: Identifier): void {} + + canDrag(_monitor: DragDropMonitor, _targetId: Identifier): boolean { + return true + } + + isDragging(_monitor: DragDropMonitor, _targetId: Identifier): boolean { + return false + } +} + +export class DropTarget implements IDropTarget { + #node: Element + #onDrop?: (r: T) => void + + constructor({text, color, onDrop}: createElementProps & {onDrop?: (r: T) => void}) { + this.#node = createElement({text, color}) + this.#onDrop = onDrop + } + + node(): Element { + return this.#node + } + + canDrop(_monitor: DragDropMonitor, _targetId: Identifier): boolean { + return true + } + + hover(_monitor: DragDropMonitor, _targetId: Identifier): void {} + + drop(monitor: DragDropMonitor, _targetId: Identifier): void { + this.#onDrop?.(monitor.getItem()) + } +} diff --git a/packages/dnd-multi-backend/examples/index.ts b/packages/dnd-multi-backend/examples/index.ts new file mode 100644 index 00000000..ce740c69 --- /dev/null +++ b/packages/dnd-multi-backend/examples/index.ts @@ -0,0 +1,48 @@ +import {createDragDropManager} from 'dnd-core' +import {MouseTransition, MultiBackend, TouchTransition} from '../src' +import {HTML5Backend, TouchBackend} from './Backends' +import {DragSource, DropTarget} from './DnD' + +// Setup pipeline +const pipeline = { + backends: [ + { + id: 'html5', + backend: HTML5Backend, + transition: MouseTransition, + }, + { + id: 'touch', + backend: TouchBackend, + preview: true, + transition: TouchTransition, + }, + ], +} + +// Create manager +const manager = createDragDropManager(MultiBackend, {}, pipeline) +const registry = manager.getRegistry() + +// Create logic +const src = new DragSource({text: 'Source', color: 'red'}) +const dst = new DropTarget<{color: string}>({ + text: 'Target', + color: 'orange', + onDrop: (item) => { + console.log(`Dropped: ${item.color}`) + }, +}) + +const Item = 'item' + +const srcId = registry.addSource(Item, src) +manager.getBackend().connectDragSource(srcId, src.node()) + +const dstId = registry.addTarget(Item, dst) +manager.getBackend().connectDropTarget(dstId, dst.node()) + +// Link to the DOM +document.body.appendChild(src.node()) +document.body.appendChild(dst.node()) +document.getElementById('placeholder')?.remove() diff --git a/packages/dnd-multi-backend/package.json b/packages/dnd-multi-backend/package.json new file mode 100644 index 00000000..3df2211c --- /dev/null +++ b/packages/dnd-multi-backend/package.json @@ -0,0 +1,26 @@ +{ + "name": "dnd-multi-backend", + "version": "8.1.2", + "sideEffects": false, + "description": "Multi Backend system compatible with DnD Core / React DnD", + "author": "Louis Brunner (https://github.com/LouisBrunner)", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/LouisBrunner/dnd-multi-backend.git", + "directory": "packages/dnd-multi-backend" + }, + "homepage": "https://louisbrunner.github.io/dnd-multi-backend/packages/dnd-multi-backend/", + "keywords": ["agnostic", "dnd", "drag", "drop", "backend", "multi"], + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "module": "dist/index.js", + "peerDependencies": { + "dnd-core": "^16.0.1" + } +} diff --git a/packages/dnd-multi-backend/src/MultiBackendImpl.ts b/packages/dnd-multi-backend/src/MultiBackendImpl.ts new file mode 100644 index 00000000..89e1193a --- /dev/null +++ b/packages/dnd-multi-backend/src/MultiBackendImpl.ts @@ -0,0 +1,227 @@ +import type {BackendFactory, DragDropManager, Unsubscribe} from 'dnd-core' +import {PreviewListImpl} from './PreviewListImpl' +import type {BackendEntry, MultiBackendSwitcher, PreviewList, Transition} from './types' + +interface EventConstructor { + new (type: string, eventInitDict?: EventInit): Event +} + +type DnDNode = { + func: ConnectFunction + args: [unknown, unknown?, unknown?] + unsubscribe: Unsubscribe +} + +type ConnectFunction = 'connectDragSource' | 'connectDragPreview' | 'connectDropTarget' + +export type MultiBackendContext = unknown + +export type MultiBackendPipelineStep = { + id: string + backend: BackendFactory + transition?: Transition + preview?: boolean + skipDispatchOnTransition?: boolean + options?: unknown +} + +export type MultiBackendPipeline = MultiBackendPipelineStep[] + +export type MultiBackendOptions = { + backends: MultiBackendPipeline +} + +export class MultiBackendImpl implements MultiBackendSwitcher { + private static /*#*/ isSetUp = false + + /*private*/ #current: string + /*private*/ #previews: PreviewList + /*private*/ #backends: Record + /*private*/ #backendsList: BackendEntry[] + /*private*/ #nodes: Record + + constructor(manager: DragDropManager, context?: MultiBackendContext, options?: MultiBackendOptions) { + if (!options || !options.backends || options.backends.length < 1) { + throw new Error( + `You must specify at least one Backend, if you are coming from 2.x.x (or don't understand this error) + see this guide: https://github.com/louisbrunner/dnd-multi-backend/tree/master/packages/react-dnd-multi-backend#migrating-from-2xx`, + ) + } + + this.#previews = new PreviewListImpl() + + this.#backends = {} + this.#backendsList = [] + for (const backend of options.backends) { + const backendRecord = this.#createBackend(manager, context, backend) + this.#backends[backendRecord.id] = backendRecord + this.#backendsList.push(backendRecord) + } + this.#current = this.#backendsList[0].id + + this.#nodes = {} + } + + #createBackend = (manager: DragDropManager, context: MultiBackendContext, backend: MultiBackendPipelineStep): BackendEntry => { + if (!backend.backend) { + throw new Error(`You must specify a 'backend' property in your Backend entry: ${JSON.stringify(backend)}`) + } + + const instance = backend.backend(manager, context, backend.options) + + let id = backend.id + // Try to infer an `id` if one doesn't exist + const inferName = !backend.id && instance && instance.constructor + if (inferName) { + id = instance.constructor.name + } + if (!id) { + throw new Error( + `You must specify an 'id' property in your Backend entry: ${JSON.stringify(backend)} + see this guide: https://github.com/louisbrunner/dnd-multi-backend/tree/master/packages/react-dnd-multi-backend#migrating-from-5xx`, + ) + } + if (inferName) { + console.warn( + `Deprecation notice: You are using a pipeline which doesn't include backends' 'id'. + This might be unsupported in the future, please specify 'id' explicitely for every backend.`, + ) + } + if (this.#backends[id]) { + throw new Error( + `You must specify a unique 'id' property in your Backend entry: + ${JSON.stringify(backend)} (conflicts with: ${JSON.stringify(this.#backends[id])})`, + ) + } + + return { + id, + instance, + preview: backend.preview ?? false, + transition: backend.transition, + skipDispatchOnTransition: backend.skipDispatchOnTransition ?? false, + } + } + + // DnD Backend API + setup = (): void => { + if (typeof window === 'undefined') { + return + } + + if (MultiBackendImpl.isSetUp) { + throw new Error('Cannot have two MultiBackends at the same time.') + } + MultiBackendImpl.isSetUp = true + this.#addEventListeners(window) + this.#backends[this.#current].instance.setup() + } + + teardown = (): void => { + if (typeof window === 'undefined') { + return + } + + MultiBackendImpl.isSetUp = false + this.#removeEventListeners(window) + this.#backends[this.#current].instance.teardown() + } + + connectDragSource = (sourceId: unknown, node?: unknown, options?: unknown): Unsubscribe => { + return this.#connectBackend('connectDragSource', sourceId, node, options) + } + + connectDragPreview = (sourceId: unknown, node?: unknown, options?: unknown): Unsubscribe => { + return this.#connectBackend('connectDragPreview', sourceId, node, options) + } + + connectDropTarget = (sourceId: unknown, node?: unknown, options?: unknown): Unsubscribe => { + return this.#connectBackend('connectDropTarget', sourceId, node, options) + } + + profile = (): Record => { + return this.#backends[this.#current].instance.profile() + } + + // Used by Preview component + previewEnabled = (): boolean => { + return this.#backends[this.#current].preview + } + + previewsList = (): PreviewList => { + return this.#previews + } + + backendsList = (): BackendEntry[] => { + return this.#backendsList + } + + // Multi Backend Listeners + #addEventListeners = (target: EventTarget): void => { + for (const backend of this.#backendsList) { + if (backend.transition) { + target.addEventListener(backend.transition.event, this.#backendSwitcher) + } + } + } + + #removeEventListeners = (target: EventTarget): void => { + for (const backend of this.#backendsList) { + if (backend.transition) { + target.removeEventListener(backend.transition.event, this.#backendSwitcher) + } + } + } + + // Switching logic + #backendSwitcher = (event: Event): void => { + const oldBackend = this.#current + + this.#backendsList.some((backend) => { + if (backend.id !== this.#current && backend.transition && backend.transition.check(event)) { + this.#current = backend.id + return true + } + return false + }) + + if (this.#current !== oldBackend) { + this.#backends[oldBackend].instance.teardown() + for (const [_, node] of Object.entries(this.#nodes)) { + node.unsubscribe() + node.unsubscribe = this.#callBackend(node.func, ...node.args) + } + this.#previews.backendChanged(this) + + const newBackend = this.#backends[this.#current] + newBackend.instance.setup() + + if (newBackend.skipDispatchOnTransition) { + return + } + + const Class = event.constructor as EventConstructor + const newEvent = new Class(event.type, event) + event.target?.dispatchEvent(newEvent) + } + } + + #callBackend = (func: ConnectFunction, sourceId: unknown, node?: unknown, options?: unknown): Unsubscribe => { + return this.#backends[this.#current].instance[func](sourceId, node, options) + } + + #connectBackend = (func: ConnectFunction, sourceId: unknown, node?: unknown, options?: unknown): Unsubscribe => { + const nodeId = `${func}_${sourceId as number}` + const unsubscribe = this.#callBackend(func, sourceId, node, options) + this.#nodes[nodeId] = { + func, + args: [sourceId, node, options], + unsubscribe, + } + + return (): void => { + this.#nodes[nodeId].unsubscribe() + delete this.#nodes[nodeId] + } + } +} diff --git a/packages/dnd-multi-backend/src/MultiFactory.ts b/packages/dnd-multi-backend/src/MultiFactory.ts new file mode 100644 index 00000000..615b3148 --- /dev/null +++ b/packages/dnd-multi-backend/src/MultiFactory.ts @@ -0,0 +1,7 @@ +import type {BackendFactory, DragDropManager} from 'dnd-core' +import {type MultiBackendContext, MultiBackendImpl, type MultiBackendOptions} from './MultiBackendImpl' +import type {MultiBackendSwitcher} from './types' + +export const MultiFactory: BackendFactory = (manager: DragDropManager, context: MultiBackendContext, options: MultiBackendOptions): MultiBackendSwitcher => { + return new MultiBackendImpl(manager, context, options) +} diff --git a/packages/dnd-multi-backend/src/PreviewListImpl.ts b/packages/dnd-multi-backend/src/PreviewListImpl.ts new file mode 100644 index 00000000..b032baf0 --- /dev/null +++ b/packages/dnd-multi-backend/src/PreviewListImpl.ts @@ -0,0 +1,25 @@ +import type {MultiBackendSwitcher, PreviewList, PreviewListener} from './types' + +export class PreviewListImpl implements PreviewList { + /*private*/ #previews: PreviewListener[] + + constructor() { + this.#previews = [] + } + + register = (preview: PreviewListener): void => { + this.#previews.push(preview) + } + + unregister = (preview: PreviewListener): void => { + while (this.#previews.indexOf(preview) !== -1) { + this.#previews.splice(this.#previews.indexOf(preview), 1) + } + } + + backendChanged = (backend: MultiBackendSwitcher): void => { + for (const preview of this.#previews) { + preview.backendChanged(backend) + } + } +} diff --git a/packages/dnd-multi-backend/src/__tests__/MultiBackendImpl.test.ts b/packages/dnd-multi-backend/src/__tests__/MultiBackendImpl.test.ts new file mode 100644 index 00000000..cbf516d8 --- /dev/null +++ b/packages/dnd-multi-backend/src/__tests__/MultiBackendImpl.test.ts @@ -0,0 +1,427 @@ +import {TestBackends, TestPipeline, TestPipelineWithSkip} from '@mocks/pipeline' +import type {DragDropManager} from 'dnd-core' +import {type MultiBackendContext, MultiBackendImpl, type MultiBackendOptions} from '../MultiBackendImpl' + +describe('MultiBackendImpl class', () => { + let _defaultManager: DragDropManager + let _defaultContext: MultiBackendContext + + beforeEach(() => { + jest.clearAllMocks() + _defaultManager = { + getMonitor: jest.fn(), + getActions: jest.fn(), + getRegistry: jest.fn(), + getBackend: jest.fn(), + dispatch: jest.fn(), + } + _defaultContext = {qrt: Math.random()} + }) + + const createBackend = (pipeline: MultiBackendOptions = TestPipeline) => { + return new MultiBackendImpl(_defaultManager, _defaultContext, pipeline) + } + + const switchTouchBackend = (): void => { + expect(TestBackends[0].teardown).not.toHaveBeenCalled() + expect(TestBackends[1].setup).not.toHaveBeenCalled() + const event = new TouchEvent('touchstart', {bubbles: true, touches: []}) + window.dispatchEvent(event) + expect(TestBackends[0].teardown).toHaveBeenCalled() + expect(TestBackends[1].setup).toHaveBeenCalled() + } + + describe('constructor', () => { + let warn: jest.SpyInstance + + beforeEach(() => { + warn = jest.spyOn(console, 'warn').mockImplementation() + }) + + afterEach(() => { + warn.mockRestore() + }) + + test('fails if no backend are specified', () => { + const pipeline = {backends: []} + expect(() => { + createBackend(pipeline as unknown as MultiBackendOptions) + }).toThrow(Error) + }) + + test('fails if no backend are specified (prototype trick)', () => { + const pipeline = Object.create({backends: []}) as Record + expect(() => { + createBackend(pipeline as unknown as MultiBackendOptions) + }).toThrow(Error) + }) + + test('fails if a backend lacks the `backend` property', () => { + const pipeline = {backends: [{}]} + expect(() => { + createBackend(pipeline as unknown as MultiBackendOptions) + }).toThrow(Error) + }) + + test('fails if a backend specifies an invalid `transition` property', () => { + const pipeline = {backends: [{backend: () => {}, transition: {}}]} + expect(() => { + createBackend(pipeline as unknown as MultiBackendOptions) + }).toThrow(Error) + }) + + test('fails if a backend lacks an `id` property and one cannot be infered', () => { + const pipeline = {backends: [{backend: () => {}}]} + expect(() => { + createBackend(pipeline as unknown as MultiBackendOptions) + }).toThrow(Error) + }) + + test('fails if a backend has a duplicate `id` property', () => { + const pipeline = { + backends: [ + {id: 'abc', backend: () => {}}, + {id: 'abc', backend: () => {}}, + ], + } + expect(() => { + createBackend(pipeline as unknown as MultiBackendOptions) + }).toThrow(Error) + }) + + test('warns if a backend lacks an `id` property but one can be infered', () => { + const pipeline = { + backends: [ + { + backend: () => { + return {} + }, + }, + ], + } + expect(() => { + createBackend(pipeline as unknown as MultiBackendOptions) + }).not.toThrow() + expect(warn).toHaveBeenCalled() + }) + + test('constructs correctly', () => { + const pipeline = TestPipeline + createBackend(pipeline) + + expect(pipeline.backends[0].backend).toHaveBeenCalledTimes(1) + expect(pipeline.backends[0].backend).toHaveBeenCalledWith(_defaultManager, _defaultContext, undefined) + + expect(pipeline.backends[1].backend).toHaveBeenCalledTimes(1) + expect(pipeline.backends[1].backend).toHaveBeenCalledWith(_defaultManager, _defaultContext, pipeline.backends[1].options) + }) + }) + + describe('setup function', () => { + test('does nothing if it has no window', () => { + const windowSpy = jest.spyOn(window, 'window', 'get') + const spyAdd = jest.spyOn(window, 'addEventListener') + // @ts-expect-error + windowSpy.mockImplementation(() => undefined) + + const backend = createBackend() + backend.setup() + expect(() => { + backend.setup() + }).not.toThrow() + expect(spyAdd).not.toHaveBeenCalled() + expect(TestBackends[0].setup).not.toHaveBeenCalled() + + backend.teardown() + + spyAdd.mockRestore() + windowSpy.mockRestore() + }) + + test('fails if a backend already exist', () => { + const spyAdd = jest.spyOn(window, 'addEventListener') + + const backend = createBackend() + expect(TestBackends[0].setup).not.toHaveBeenCalled() + backend.setup() + expect(TestBackends[0].setup).toHaveBeenCalled() + expect(spyAdd).toHaveBeenCalledWith('touchstart', expect.any(Function)) + + TestBackends[0].setup.mockClear() + spyAdd.mockClear() + + const backend2 = createBackend() + expect(TestBackends[0].setup).not.toHaveBeenCalled() + expect(() => { + backend2.setup() + }).toThrow(Error) + expect(TestBackends[0].setup).not.toHaveBeenCalled() + expect(spyAdd).not.toHaveBeenCalled() + + backend.teardown() + spyAdd.mockRestore() + }) + + test('sets up the events and sub-backends', () => { + const spyAdd = jest.spyOn(window, 'addEventListener') + + const backend = createBackend() + expect(TestBackends[0].setup).not.toHaveBeenCalled() + backend.setup() + expect(TestBackends[0].setup).toHaveBeenCalled() + expect(spyAdd).toHaveBeenCalledWith('touchstart', expect.any(Function)) + + backend.teardown() + spyAdd.mockRestore() + }) + }) + + describe('teardown function', () => { + test('does nothing if it has no window', () => { + const windowSpy = jest.spyOn(window, 'window', 'get') + const spyRemove = jest.spyOn(window, 'removeEventListener') + // @ts-expect-error + windowSpy.mockImplementation(() => undefined) + + const backend = createBackend() + backend.setup() + backend.teardown() + expect(spyRemove).not.toHaveBeenCalled() + expect(TestBackends[0].teardown).not.toHaveBeenCalled() + + spyRemove.mockRestore() + windowSpy.mockRestore() + }) + + test('cleans up the events and sub-backends', () => { + const spyRemove = jest.spyOn(window, 'removeEventListener') + + const backend = createBackend() + backend.setup() + expect(TestBackends[0].teardown).not.toHaveBeenCalled() + backend.teardown() + expect(TestBackends[0].teardown).toHaveBeenCalled() + expect(spyRemove).toHaveBeenCalledWith('touchstart', expect.any(Function)) + + spyRemove.mockRestore() + }) + + test('can recreate a second backend', () => { + const spyRemove = jest.spyOn(window, 'removeEventListener') + + const backend = createBackend() + backend.setup() + expect(TestBackends[0].teardown).not.toHaveBeenCalled() + backend.teardown() + expect(TestBackends[0].teardown).toHaveBeenCalled() + expect(spyRemove).toHaveBeenCalledWith('touchstart', expect.any(Function)) + + TestBackends[0].teardown.mockClear() + spyRemove.mockClear() + + const backend2 = createBackend() + backend2.setup() + expect(TestBackends[0].teardown).not.toHaveBeenCalled() + backend2.teardown() + expect(TestBackends[0].teardown).toHaveBeenCalled() + expect(spyRemove).toHaveBeenCalledWith('touchstart', expect.any(Function)) + + spyRemove.mockRestore() + }) + }) + + describe('connectDragSource function', () => { + test('pass data correctly', () => { + const unsub = jest.fn() + const backend = createBackend() + TestBackends[0].connectDragSource.mockReturnValue(unsub) + expect(TestBackends[0].connectDragSource).not.toHaveBeenCalled() + const wrappedUnsub = backend.connectDragSource(1, 2, 3) + expect(TestBackends[0].connectDragSource).toHaveBeenCalledWith(1, 2, 3) + expect(unsub).not.toHaveBeenCalled() + wrappedUnsub() + expect(unsub).toHaveBeenCalled() + }) + + test('handles backend switch correctly', () => { + const unsub1 = jest.fn() + TestBackends[0].connectDragSource.mockReturnValue(unsub1) + + const unsub2 = jest.fn() + TestBackends[1].connectDragSource.mockReturnValue(unsub2) + + const backend = createBackend() + backend.setup() + + expect(TestBackends[0].connectDragSource).not.toHaveBeenCalled() + const wrappedUnsub = backend.connectDragSource(1, 2, 3) + expect(TestBackends[0].connectDragSource).toHaveBeenCalledWith(1, 2, 3) + + expect(TestBackends[1].connectDragSource).not.toHaveBeenCalled() + switchTouchBackend() + expect(unsub1).toHaveBeenCalled() + expect(TestBackends[1].connectDragSource).toHaveBeenCalledWith(1, 2, 3) + + expect(unsub2).not.toHaveBeenCalled() + wrappedUnsub() + expect(unsub2).toHaveBeenCalled() + + backend.teardown() + }) + }) + + describe('connectDragPreview function', () => { + test('pass data correctly', () => { + const unsub = jest.fn() + const backend = createBackend() + TestBackends[0].connectDragPreview.mockReturnValue(unsub) + expect(TestBackends[0].connectDragPreview).not.toHaveBeenCalled() + const wrappedUnsub = backend.connectDragPreview(1, 2, 3) + expect(TestBackends[0].connectDragPreview).toHaveBeenCalledWith(1, 2, 3) + expect(unsub).not.toHaveBeenCalled() + wrappedUnsub() + expect(unsub).toHaveBeenCalled() + }) + + test('handles backend switch correctly', () => { + const unsub1 = jest.fn() + TestBackends[0].connectDragPreview.mockReturnValue(unsub1) + + const unsub2 = jest.fn() + TestBackends[1].connectDragPreview.mockReturnValue(unsub2) + + const backend = createBackend() + backend.setup() + + expect(TestBackends[0].connectDragPreview).not.toHaveBeenCalled() + const wrappedUnsub = backend.connectDragPreview(1, 2, 3) + expect(TestBackends[0].connectDragPreview).toHaveBeenCalledWith(1, 2, 3) + + expect(TestBackends[1].connectDragPreview).not.toHaveBeenCalled() + switchTouchBackend() + expect(unsub1).toHaveBeenCalled() + expect(TestBackends[1].connectDragPreview).toHaveBeenCalledWith(1, 2, 3) + + expect(unsub2).not.toHaveBeenCalled() + wrappedUnsub() + expect(unsub2).toHaveBeenCalled() + + backend.teardown() + }) + }) + + describe('connectDropTarget function', () => { + test('pass data correctly', () => { + const unsub = jest.fn() + const backend = createBackend() + TestBackends[0].connectDropTarget.mockReturnValue(unsub) + expect(TestBackends[0].connectDropTarget).not.toHaveBeenCalled() + const wrappedUnsub = backend.connectDropTarget(1, 2, 3) + expect(TestBackends[0].connectDropTarget).toHaveBeenCalledWith(1, 2, 3) + expect(unsub).not.toHaveBeenCalled() + wrappedUnsub() + expect(unsub).toHaveBeenCalled() + }) + + test('handles backend switch correctly', () => { + const unsub1 = jest.fn() + TestBackends[0].connectDropTarget.mockReturnValue(unsub1) + + const unsub2 = jest.fn() + TestBackends[1].connectDropTarget.mockReturnValue(unsub2) + + const backend = createBackend() + backend.setup() + + expect(TestBackends[0].connectDropTarget).not.toHaveBeenCalled() + const wrappedUnsub = backend.connectDropTarget(1, 2, 3) + expect(TestBackends[0].connectDropTarget).toHaveBeenCalledWith(1, 2, 3) + + expect(TestBackends[1].connectDropTarget).not.toHaveBeenCalled() + switchTouchBackend() + expect(unsub1).toHaveBeenCalled() + expect(TestBackends[1].connectDropTarget).toHaveBeenCalledWith(1, 2, 3) + + expect(unsub2).not.toHaveBeenCalled() + wrappedUnsub() + expect(unsub2).toHaveBeenCalled() + + backend.teardown() + }) + }) + + describe('profile function', () => { + test('returns the profiling data', () => { + const data = {abc: 123} as Record + TestBackends[0].profile.mockReturnValue(data) + + const backend = createBackend() + + expect(TestBackends[0].profile).not.toHaveBeenCalled() + expect(backend.profile()).toBe(data) + expect(TestBackends[0].profile).toHaveBeenCalledWith() + }) + }) + + describe('previewEnabled/previewsList functions', () => { + test('returns the current backend preview attribute', () => { + const backend = createBackend() + backend.setup() + expect(backend.previewEnabled()).toBe(false) + switchTouchBackend() + expect(backend.previewEnabled()).toBe(true) + + backend.teardown() + }) + + test('notifies the preview list', () => { + const listener = { + backendChanged: jest.fn(), + } + + const backend = createBackend() + backend.previewsList().register(listener) + backend.setup() + expect(listener.backendChanged).not.toHaveBeenCalled() + switchTouchBackend() + expect(listener.backendChanged).toHaveBeenCalledWith(backend) + + backend.teardown() + }) + }) + + describe('backendsList function', () => { + test('returns the backends list based on the pipeline', () => { + const backend = createBackend() + expect(backend.backendsList()[0].id).toBe(TestPipeline.backends[0].id) + }) + }) + + describe('#backendSwitcher function', () => { + test('does not skip the transition', () => { + const handler = jest.fn() + window.addEventListener('touchstart', handler) + + const backend = createBackend(TestPipeline) + backend.setup() + switchTouchBackend() + expect(handler).toHaveBeenCalledTimes(2) + backend.teardown() + + window.removeEventListener('touchstart', handler) + }) + + test('skips the transition', () => { + const handler = jest.fn() + window.addEventListener('touchstart', handler) + + const backend = createBackend(TestPipelineWithSkip) + backend.setup() + switchTouchBackend() + expect(handler).toHaveBeenCalledTimes(1) + backend.teardown() + + window.removeEventListener('touchstart', handler) + }) + }) +}) diff --git a/packages/dnd-multi-backend/src/__tests__/MultiFactory.test.ts b/packages/dnd-multi-backend/src/__tests__/MultiFactory.test.ts new file mode 100644 index 00000000..2de48c3b --- /dev/null +++ b/packages/dnd-multi-backend/src/__tests__/MultiFactory.test.ts @@ -0,0 +1,20 @@ +import {TestPipeline} from '@mocks/pipeline' +import type {DragDropManager} from 'dnd-core' +import {MultiBackendImpl} from '../MultiBackendImpl' +import {MultiFactory} from '../MultiFactory' + +describe('MultiFactory function', () => { + test('exports a function to create a MultiBackend', () => { + const fakeManager: DragDropManager = { + getMonitor: jest.fn(), + getActions: jest.fn(), + getRegistry: jest.fn(), + getBackend: jest.fn(), + dispatch: jest.fn(), + } + expect(MultiFactory(fakeManager, {}, TestPipeline)).toBeInstanceOf(MultiBackendImpl) + expect(() => { + MultiFactory(fakeManager, {}) + }).toThrow(Error) + }) +}) diff --git a/packages/dnd-multi-backend/src/__tests__/PreviewListImpl.test.ts b/packages/dnd-multi-backend/src/__tests__/PreviewListImpl.test.ts new file mode 100644 index 00000000..52bdc3bd --- /dev/null +++ b/packages/dnd-multi-backend/src/__tests__/PreviewListImpl.test.ts @@ -0,0 +1,52 @@ +import {TestPipeline} from '@mocks/pipeline' +import type {DragDropManager} from 'dnd-core' +import {MultiBackendImpl} from '../MultiBackendImpl' +import {PreviewListImpl} from '../PreviewListImpl' +import type {MultiBackendSwitcher, PreviewList} from '../types' + +describe('PreviewListImpl class', () => { + let list: PreviewList + let mb: MultiBackendSwitcher + + beforeEach(() => { + list = new PreviewListImpl() + mb = new MultiBackendImpl(undefined as unknown as DragDropManager, undefined, TestPipeline) + }) + + const createPreview = () => { + return {backendChanged: jest.fn()} + } + + test('does nothing when empty', () => { + expect(() => { + list.backendChanged(mb) + }).not.toThrow() + }) + + test('notifies registered previews', () => { + const preview1 = createPreview() + const preview2 = createPreview() + list.register(preview1) + list.register(preview2) + list.backendChanged(mb) + expect(preview1.backendChanged).toHaveBeenCalledWith(mb) + expect(preview2.backendChanged).toHaveBeenCalledWith(mb) + list.unregister(preview1) + list.unregister(preview2) + }) + + test('stops notifying after unregistering', () => { + const preview1 = createPreview() + const preview2 = createPreview() + list.register(preview1) + list.register(preview2) + list.backendChanged(mb) + expect(preview1.backendChanged).toHaveBeenCalledTimes(1) + expect(preview2.backendChanged).toHaveBeenCalledTimes(1) + list.unregister(preview2) + list.backendChanged(mb) + expect(preview1.backendChanged).toHaveBeenCalledTimes(2) + expect(preview2.backendChanged).toHaveBeenCalledTimes(1) + list.unregister(preview1) + }) +}) diff --git a/packages/dnd-multi-backend/src/__tests__/createTransition.test.ts b/packages/dnd-multi-backend/src/__tests__/createTransition.test.ts new file mode 100644 index 00000000..d00facd1 --- /dev/null +++ b/packages/dnd-multi-backend/src/__tests__/createTransition.test.ts @@ -0,0 +1,18 @@ +import {createTransition} from '../createTransition' + +describe('createTransition function', () => { + test('creates a valid transition', () => { + const eventName = 'test_event' + const func = jest.fn() + + const transition = createTransition(eventName, func) + + expect(transition.event).toBe(eventName) + + const fakeEvent = document.createEvent('Event') + expect(func).not.toHaveBeenCalled() + transition.check(fakeEvent) + expect(func).toHaveBeenCalledTimes(1) + expect(func).toHaveBeenCalledWith(fakeEvent) + }) +}) diff --git a/packages/dnd-multi-backend/src/__tests__/index.test.ts b/packages/dnd-multi-backend/src/__tests__/index.test.ts new file mode 100644 index 00000000..0ebfd0ba --- /dev/null +++ b/packages/dnd-multi-backend/src/__tests__/index.test.ts @@ -0,0 +1,15 @@ +import * as Module from '../index' + +import {MultiFactory} from '../MultiFactory' +import {createTransition} from '../createTransition' +import {HTML5DragTransition, MouseTransition, TouchTransition} from '../transitions' + +describe('dnd-multi-backend module', () => { + test('exports correctly', () => { + expect(Module.MultiBackend).toBe(MultiFactory) + expect(Module.HTML5DragTransition).toBe(HTML5DragTransition) + expect(Module.TouchTransition).toBe(TouchTransition) + expect(Module.MouseTransition).toBe(MouseTransition) + expect(Module.createTransition).toBe(createTransition) + }) +}) diff --git a/packages/dnd-multi-backend/src/__tests__/transitions.test.ts b/packages/dnd-multi-backend/src/__tests__/transitions.test.ts new file mode 100644 index 00000000..c73b8cdd --- /dev/null +++ b/packages/dnd-multi-backend/src/__tests__/transitions.test.ts @@ -0,0 +1,99 @@ +// FIXME: jsdom still doesn't support pointer events... +class PointerEventFake extends MouseEvent { + readonly height: number + readonly isPrimary: boolean + readonly pointerId: number + readonly pointerType: string + readonly pressure: number + readonly tangentialPressure: number + readonly tiltX: number + readonly tiltY: number + readonly twist: number + readonly width: number + readonly altitudeAngle: number + readonly azimuthAngle: number + + private coalescedEvents: PointerEvent[] + private predictedEvents: PointerEvent[] + + constructor(type: string, props?: PointerEventInit) { + super(type, props) + + const rprops = props ?? {} + + this.height = rprops.height ?? 1 + this.isPrimary = rprops.isPrimary ?? false + this.pointerId = rprops.pointerId ?? 1 + this.pointerType = rprops.pointerType ?? 'mouse' + this.pressure = rprops.pressure ?? 0.5 + this.tangentialPressure = rprops.tangentialPressure ?? 0 + this.tiltX = rprops.tiltX ?? 0 + this.tiltY = rprops.tiltY ?? 0 + this.twist = rprops.twist ?? 0 + this.width = rprops.width ?? 1 + this.altitudeAngle = 0 + this.azimuthAngle = 0 + + this.coalescedEvents = rprops.coalescedEvents ?? [] + this.predictedEvents = rprops.predictedEvents ?? [] + } + + getCoalescedEvents(): PointerEvent[] { + return this.coalescedEvents + } + + getPredictedEvents(): PointerEvent[] { + return this.predictedEvents + } +} +global.PointerEvent = PointerEventFake + +import {HTML5DragTransition, MouseTransition, PointerTransition, TouchTransition} from '../transitions' + +describe('Transitions collection', () => { + const fakeDragEvent = (type: string): Event => { + const event = document.createEvent('Event') + event.initEvent(type, true, true) + return event + } + + describe('HTML5DragTransition', () => { + test('calls createTransition correctly', () => { + expect(HTML5DragTransition.event).toBe('dragstart') + + expect(HTML5DragTransition.check(fakeDragEvent('dragenter'))).toBe(true) + expect(HTML5DragTransition.check(fakeDragEvent('drop'))).toBe(true) + expect(HTML5DragTransition.check(new TouchEvent('touchstart'))).toBe(false) + }) + }) + + describe('TouchTransition', () => { + test('calls createTransition correctly', () => { + expect(TouchTransition.event).toBe('touchstart') + + expect(TouchTransition.check(new TouchEvent('touchstart'))).toBe(true) + expect(TouchTransition.check(new MouseEvent('mousemove'))).toBe(false) + }) + }) + + describe('MouseTransition', () => { + test('calls createTransition correctly', () => { + expect(MouseTransition.event).toBe('mousedown') + + expect(MouseTransition.check(new TouchEvent('touchstart'))).toBe(false) + expect(MouseTransition.check(fakeDragEvent('dragenter'))).toBe(false) + expect(MouseTransition.check(new MouseEvent('mousemove'))).toBe(true) + }) + }) + + describe('PointerTransition', () => { + test('calls createTransition correctly', () => { + expect(PointerTransition.event).toBe('pointerdown') + + expect(PointerTransition.check(new TouchEvent('touchstart'))).toBe(false) + expect(PointerTransition.check(fakeDragEvent('dragenter'))).toBe(false) + expect(PointerTransition.check(new MouseEvent('mousemove'))).toBe(false) + expect(PointerTransition.check(new PointerEvent('pointerdown', {pointerType: 'mouse'}))).toBe(true) + }) + }) +}) diff --git a/packages/dnd-multi-backend/src/createTransition.ts b/packages/dnd-multi-backend/src/createTransition.ts new file mode 100644 index 00000000..9e666a41 --- /dev/null +++ b/packages/dnd-multi-backend/src/createTransition.ts @@ -0,0 +1,8 @@ +import type {Transition} from './types' + +export const createTransition = (event: Transition['event'], check: Transition['check']): Transition => { + return { + event, + check, + } +} diff --git a/packages/dnd-multi-backend/src/index.ts b/packages/dnd-multi-backend/src/index.ts new file mode 100644 index 00000000..98d51123 --- /dev/null +++ b/packages/dnd-multi-backend/src/index.ts @@ -0,0 +1,24 @@ +export {MultiFactory as MultiBackend} from './MultiFactory' + +export {createTransition} from './createTransition' +export { + HTML5DragTransition, + TouchTransition, + MouseTransition, + PointerTransition, +} from './transitions' + +export type { + MultiBackendOptions, + MultiBackendPipeline, + MultiBackendPipelineStep, + MultiBackendContext, +} from './MultiBackendImpl' + +export type { + MultiBackendSwitcher, + PreviewList, + PreviewListener, + BackendEntry, + Transition, +} from './types' diff --git a/packages/dnd-multi-backend/src/transitions.ts b/packages/dnd-multi-backend/src/transitions.ts new file mode 100644 index 00000000..6c79aa0d --- /dev/null +++ b/packages/dnd-multi-backend/src/transitions.ts @@ -0,0 +1,19 @@ +import {createTransition} from './createTransition' + +export const TouchTransition = createTransition('touchstart', (rawEvent: Event) => { + const event = rawEvent as TouchEvent + return event.touches !== null && event.touches !== undefined +}) + +export const HTML5DragTransition = createTransition('dragstart', (event) => { + return event.type.indexOf('drag') !== -1 || event.type.indexOf('drop') !== -1 +}) + +export const MouseTransition = createTransition('mousedown', (event) => { + return event.type.indexOf('touch') === -1 && event.type.indexOf('mouse') !== -1 +}) + +export const PointerTransition = createTransition('pointerdown', (rawEvent: Event) => { + const event = rawEvent as PointerEvent + return event.pointerType === 'mouse' +}) diff --git a/packages/dnd-multi-backend/src/types.ts b/packages/dnd-multi-backend/src/types.ts new file mode 100644 index 00000000..0481b00e --- /dev/null +++ b/packages/dnd-multi-backend/src/types.ts @@ -0,0 +1,30 @@ +import type {Backend} from 'dnd-core' + +export type Transition = { + event: string + check: (e: Event) => boolean +} + +export type BackendEntry = { + id: string + instance: Backend + preview: boolean + transition?: Transition + skipDispatchOnTransition: boolean +} + +export interface MultiBackendSwitcher extends Backend { + backendsList(): BackendEntry[] + previewsList(): PreviewList + previewEnabled(): boolean +} + +export interface PreviewListener { + backendChanged(backend: MultiBackendSwitcher): void +} + +export interface PreviewList { + register(listener: PreviewListener): void + unregister(listener: PreviewListener): void + backendChanged(backend: MultiBackendSwitcher): void +} diff --git a/packages/dnd-multi-backend/tsconfig.json b/packages/dnd-multi-backend/tsconfig.json new file mode 100644 index 00000000..e40c8697 --- /dev/null +++ b/packages/dnd-multi-backend/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.build.json", + "include": ["src/**/*.ts*"] +} diff --git a/packages/rdndmb-html5-to-touch/.npmignore b/packages/rdndmb-html5-to-touch/.npmignore new file mode 100644 index 00000000..cc296803 --- /dev/null +++ b/packages/rdndmb-html5-to-touch/.npmignore @@ -0,0 +1,10 @@ +# Input +examples +__mocks__ +__tests__ +src +tsconfig.json + +# npm +node_modules +npm-debug.log diff --git a/packages/rdndmb-html5-to-touch/README.md b/packages/rdndmb-html5-to-touch/README.md new file mode 100644 index 00000000..a0eb2a3d --- /dev/null +++ b/packages/rdndmb-html5-to-touch/README.md @@ -0,0 +1,69 @@ +# React DnD: HTML5 to Touch Pipeline [![NPM Version][npm-image]][npm-url] [![dependencies Status][deps-image]][deps-url] [![devDependencies Status][deps-dev-image]][deps-dev-url] + +[Try it here!](https://louisbrunner.github.io/dnd-multi-backend/examples/react-dnd-multi-backend.html) + +This project is a Drag'n'Drop backend pipeline compatible with [React DnD Multi Backend](../react-dnd-multi-backend/). **It cannot be used standalone.** + +This pipeline starts by using the [React DnD HTML5 Backend](https://react-dnd.github.io/react-dnd/docs/backends/html5), but switches to the [React DnD Touch Backend](https://react-dnd.github.io/react-dnd/docs/backends/touch) if a touch event is triggered. +You application can smoothly use the nice HTML5 compatible backend and fallback on the Touch one on mobile devices! + +See the [migration section](#migrating) for instructions when switching from `6.x.x`. + +## Installation + +```sh +npm install -S rdndmb-html5-to-touch +``` + +You can then import the pipeline using `import { HTML5toTouch } from 'rdndmb-html5-to-touch'`. + +## Usage + +This package should be used with [`react-dnd-multi-backend`](../react-dnd-multi-backend). + +```js +import { DndProvider } from 'react-dnd-multi-backend' +import { HTML5toTouch } from 'rdndmb-html5-to-touch' + +const App = () => { + return ( + + + + ) +} +``` + +## Examples + +You can see an example [here](examples/). + +## Migrating + +### Migrating from 6.x.x and earlier + +`HTML5toTouch` used to be provided as part of `react-dnd-multi-backend` which made importing different builds (commonjs vs esm) more difficult. It also used to be a default export. + +Previously: +```js +import HTML5toTouch from 'react-dnd-multi-backend/dist/esm/HTML5toTouch' +// or +import HTML5toTouch from 'react-dnd-multi-backend/dist/cjs/HTML5toTouch' +``` + +Now: +```js +import { HTML5toTouch } from 'rdndmb-html5-to-touch' +``` + +## License + +MIT, Copyright (c) 2021-2022 Louis Brunner + + +[npm-image]: https://img.shields.io/npm/v/rdndmb-html5-to-touch.svg +[npm-url]: https://npmjs.org/package/rdndmb-html5-to-touch +[deps-image]: https://david-dm.org/louisbrunner/rdndmb-html5-to-touch/status.svg +[deps-url]: https://david-dm.org/louisbrunner/rdndmb-html5-to-touch +[deps-dev-image]: https://david-dm.org/louisbrunner/rdndmb-html5-to-touch/dev-status.svg +[deps-dev-url]: https://david-dm.org/louisbrunner/rdndmb-html5-to-touch?type=dev diff --git a/packages/rdndmb-html5-to-touch/package.json b/packages/rdndmb-html5-to-touch/package.json new file mode 100644 index 00000000..a19e9611 --- /dev/null +++ b/packages/rdndmb-html5-to-touch/package.json @@ -0,0 +1,28 @@ +{ + "name": "rdndmb-html5-to-touch", + "version": "8.1.2", + "sideEffects": false, + "description": "Multi Backend pipeline for react-dnd-multi-backend (HTML5 <-> Touch)", + "author": "Louis Brunner (https://github.com/LouisBrunner)", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/LouisBrunner/dnd-multi-backend.git", + "directory": "packages/rdndmb-html5-to-touch" + }, + "homepage": "https://louisbrunner.github.io/dnd-multi-backend/packages/rdndmb-html5-to-touch/", + "keywords": ["react", "dnd", "drag", "drop", "html5", "touch", "react-dnd", "react-dnd-multi-backend"], + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "module": "dist/index.js", + "dependencies": { + "dnd-multi-backend": "^8.1.2", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-touch-backend": "^16.0.1" + } +} diff --git a/packages/rdndmb-html5-to-touch/src/__tests__/index.test.ts b/packages/rdndmb-html5-to-touch/src/__tests__/index.test.ts new file mode 100644 index 00000000..5d559546 --- /dev/null +++ b/packages/rdndmb-html5-to-touch/src/__tests__/index.test.ts @@ -0,0 +1,23 @@ +import {PointerTransition, TouchTransition} from 'dnd-multi-backend' +import {HTML5toTouch} from '../index' + +describe('HTML5toTouch pipeline', () => { + test('has the HTML5 and Touch backends', () => { + expect(HTML5toTouch).toBeInstanceOf(Object) + expect(HTML5toTouch.backends).toBeInstanceOf(Array) + expect(HTML5toTouch.backends).toHaveLength(2) + + expect(HTML5toTouch.backends[0]).toBeInstanceOf(Object) + expect(HTML5toTouch.backends[0].id).toBe('html5') + expect(HTML5toTouch.backends[0].backend).not.toBeUndefined() + expect(HTML5toTouch.backends[0].preview).toBeUndefined() + expect(HTML5toTouch.backends[0].transition).toBe(PointerTransition) + + expect(HTML5toTouch.backends[1]).toBeInstanceOf(Object) + expect(HTML5toTouch.backends[1].id).toBe('touch') + expect(HTML5toTouch.backends[1].backend).not.toBeUndefined() + expect(HTML5toTouch.backends[1].options).toBeInstanceOf(Object) + expect(HTML5toTouch.backends[1].preview).toBe(true) + expect(HTML5toTouch.backends[1].transition).toBe(TouchTransition) + }) +}) diff --git a/packages/rdndmb-html5-to-touch/src/index.ts b/packages/rdndmb-html5-to-touch/src/index.ts new file mode 100644 index 00000000..5eb470b2 --- /dev/null +++ b/packages/rdndmb-html5-to-touch/src/index.ts @@ -0,0 +1,21 @@ +import {HTML5Backend} from 'react-dnd-html5-backend' +import {TouchBackend} from 'react-dnd-touch-backend' + +import {type MultiBackendOptions, PointerTransition, TouchTransition} from 'dnd-multi-backend' + +export const HTML5toTouch: MultiBackendOptions = { + backends: [ + { + id: 'html5', + backend: HTML5Backend, + transition: PointerTransition, + }, + { + id: 'touch', + backend: TouchBackend, + options: {enableMouseEvents: true}, + preview: true, + transition: TouchTransition, + }, + ], +} diff --git a/packages/rdndmb-html5-to-touch/tsconfig.json b/packages/rdndmb-html5-to-touch/tsconfig.json new file mode 100644 index 00000000..9675ea7c --- /dev/null +++ b/packages/rdndmb-html5-to-touch/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "baseUrl": "." + }, + "include": ["src/**/*.ts*"] +} diff --git a/packages/react-dnd-multi-backend/.npmignore b/packages/react-dnd-multi-backend/.npmignore new file mode 100644 index 00000000..cc296803 --- /dev/null +++ b/packages/react-dnd-multi-backend/.npmignore @@ -0,0 +1,10 @@ +# Input +examples +__mocks__ +__tests__ +src +tsconfig.json + +# npm +node_modules +npm-debug.log diff --git a/packages/react-dnd-multi-backend/README.md b/packages/react-dnd-multi-backend/README.md new file mode 100644 index 00000000..842def91 --- /dev/null +++ b/packages/react-dnd-multi-backend/README.md @@ -0,0 +1,411 @@ +# React DnD Multi Backend [![NPM Version][npm-image]][npm-url] [![dependencies Status][deps-image]][deps-url] [![devDependencies Status][deps-dev-image]][deps-dev-url] + +[Try it here!](https://louisbrunner.github.io/dnd-multi-backend/examples/react-dnd-multi-backend.html) + +This project is a Drag'n'Drop backend compatible with [React DnD](https://github.com/react-dnd/react-dnd). +It enables your application to use different DnD backends depending on the situation. +You can either generate your own backend pipeline or use the default one (see [`rdndmb-html5-to-touch`](../rdndmb-html5-to-touch)). + +[`rdndmb-html5-to-touch`](../rdndmb-html5-to-touch) starts by using the [React DnD HTML5 Backend](https://react-dnd.github.io/react-dnd/docs/backends/html5), but switches to the [React DnD Touch Backend](https://react-dnd.github.io/react-dnd/docs/backends/touch) if a touch event is triggered. +You application can smoothly use the nice HTML5 compatible backend and fallback on the Touch one on mobile devices! + +Moreover, because some backends don't support preview, a `Preview` component has been added to make it easier to mock the Drag'n'Drop "ghost". + +See the [migration section](#migrating) for instructions when switching from `2.x.x`, `3.x.x`, `4.x.x`, `5.0.x` or `6.x.x`. + +## Installation + +```sh +npm install -S react-dnd-multi-backend +``` + +You can then import the backend using `import { MultiBackend } from 'react-dnd-multi-backend'`. + +### Backends pipeline + +In order to use [`rdndmb-html5-to-touch`](../rdndmb-html5-to-touch), you will now need to install it separately: + +```sh +npm install -S rdndmb-html5-to-touch +``` + +## Usage + +### DndProvider (new API) + +You can use the `DndProvider` component the same way you do the one from `react-dnd` ([docs](https://react-dnd.github.io/react-dnd/docs/api/dnd-provider) for more information), at the difference that you don't need to specify `backend` as a prop, it is implied to be `MultiBackend`. + +You must pass a 'pipeline' to use as argument. [`rdndmb-html5-to-touch`](../rdndmb-html5-to-touch) is provided as another package but you can also write your own. + +```js +import { DndProvider } from 'react-dnd-multi-backend' +import { HTML5toTouch } from 'rdndmb-html5-to-touch' // or any other pipeline + +const App = () => { + return ( + + + + ) +} +``` + +### Backend (old API) + +You can plug this backend in the `DragDropContext` the same way you do for any backend (e.g. `ReactDnDHTML5Backend`), you can see [the docs](https://react-dnd.github.io/react-dnd/docs/backends/html5) for more information. + +You must pass a 'pipeline' to use as argument. [`rdndmb-html5-to-touch`](../rdndmb-html5-to-touch) is provided as another package but you can also write your own. + +```js +import { DndProvider } from 'react-dnd' +import { MultiBackend } from 'react-dnd-multi-backend' +import { HTML5toTouch } from 'rdndmb-html5-to-touch' // or any other pipeline + +const App = () => { + return ( + + + + ) +} +``` + +### Create a custom pipeline + +Creating a pipeline is fairly easy. A pipeline is composed of a list of backends, the first one will be the default one, loaded at the start of the **MultiBackend**, the order of the rest isn't important. + +Each backend entry must specify one property: `backend`, containing the class of the Backend to instantiate. +But other options are available: + + - `id`: a string identifying that backend uniquely + - `backend`: a function used to create the actual backend (usually provided by the corresponding package, e.g. `import { HTML5Backend } from 'react-dnd-html5-backend`) + - `options`: optional, any type, this will be passed to the `backend` factory when creating that backend + - `preview`: optional, a boolean indicating if `Preview` components should be shown + - `transition`: optional, an object returned by the `createTransition` function + - `skipDispatchOnTransition`: optional, a boolean indicating transition events should not be dispatched to new backend, defaults to `false`. See [note below](#note-on-skipdispatchontransition) for details and use cases.) + +Here is the `rdndmb-html5-to-touch` pipeline's code as an example: +```js +import { HTML5Backend } from 'react-dnd-html5-backend' +import { TouchBackend } from 'react-dnd-touch-backend' + +import { DndProvider, TouchTransition, MouseTransition } from 'react-dnd-multi-backend' + +export const HTML5toTouch = { + backends: [ + { + id: 'html5', + backend: HTML5Backend, + transition: MouseTransition, + }, + { + id: 'touch', + backend: TouchBackend, + options: {enableMouseEvents: true}, + preview: true, + transition: TouchTransition, + }, + ], +} + +const App = () => { + return ( + + + + ) +} +``` + +#### Transitions + +Transitions are required to allow switching between backends. They really easy to write, here is an example: + +```js +import { createTransition } from 'react-dnd-multi-backend' + +const TouchTransition = createTransition('touchstart', (event) => { + return event.touches != null +}) +``` + +The following transitions are provided: + + - `TouchTransition`: triggered when a *touchstart* is received + - `HTML5DragTransition`: triggered when a HTML5 DragEvent is received + - `MouseTransition`: triggered when a MouseEvent is received + +#### Note on `skipDispatchOnTransition` + +By default, when an event triggers a transition, `dnd-multi-backend` dispatches a cloned version of the event after setting up the new backend. This allows the newly activated backend to handle the original event. + +If your app code or another library has registered event listeners for the same events that are being used for transitions, this duplicate event may cause problems. + +You can optionally disable this behavior per backend: + +```js +const CustomHTML5toTouch = { + backends: [ + { + backend: HTML5Backend, + transition: MouseTransition + // by default, will dispatch a duplicate `mousedown` event when this backend is activated + }, + { + backend: TouchBackend, + // Note that you can call your backends with options + options: {enableMouseEvents: true}, + preview: true, + transition: TouchTransition, + // will not dispatch a duplicate `touchstart` event when this backend is activated + skipDispatchOnTransition: true + } + ] +} +``` + +**WARNING:** if you enable `skipDispatchOnTransition`, the backend transition will happen as expected, but the new backend may not handle the first event! + +In this example, the first `touchstart` event would trigger the `TouchBackend` to replace the `HTML5Backend`—but the user would have to start a new touch event for the `TouchBackend` to register a drag. + +### Hooks + +The library provides a set of hooks to expand `useDrag` and `useDrop`. + +#### `useMultiDrag` + +It expands `useDrag` and takes the same arguments but returns an array of: + + - `Index 0`: the original return of `useDrag` + - `Index 1`: an object containing the same types as `useDrag` but specific to each backend (the key being the backend `id`) + - `backend.id`: + - `Index 0`: an object containing collected properties from the collect function. If no `collect` function is defined, an empty object is returned (`Index 0` in `useDrag`'s return) + - `Index 1`: a connector function for the drag source. This must be attached to the draggable portion of the DOM (`Index 1` in `useDrag`'s return) + - `Index 2`: a connector function for the drag preview. This may be attached to the preview portion of the DOM (`Index 2` in `useDrag`'s return) + +Example: +```js +import { useMultiDrag } from 'react-dnd-multi-backend' + +const MultiCard = (props) => { + const [[dragProps], {html5: [html5Props, html5Drag], touch: [touchProps, touchDrag]}] = useMultiDrag({ + type: 'card', + item: {color: props.color}, + collect: (monitor) => { + return { + isDragging: monitor.isDragging(), + } + }, + }) + + const containerStyle = {opacity: dragProps.isDragging ? 0.5 : 1} + const html5DragStyle = {backgroundColor: props.color, opacity: html5Props.isDragging ? 0.5 : 1} + const touchDragStyle = {backgroundColor: props.color, opacity: touchProps.isDragging ? 0.5 : 1} + return ( +
+
HTML5
+
Touch
+
+ ) +} +``` + +#### `useMultiDrop` + +It expands `useDrop` and takes the same arguments but returns an array of: + + - `Index 0`: the original return of `useDrop` + - `Index 1`: an object containing the same types as `useDrop` but specific to each backend (the key being the backend `id`) + - `backend.id`: + - `Index 0`: an object containing collected properties from the collect function. If no `collect` function is defined, an empty object is returned (`Index 0` in `useDrop`'s return) + - `Index 1`: A connector function for the drop target. This must be attached to the drop-target portion of the DOM (`Index 1` in `useDrop`'s return) + +Example: +```js +import { useMultiDrop } from 'react-dnd-multi-backend' + +const MultiBasket = (props) => { + const [[dropProps], {html5: [html5DropStyle, html5Drop], touch: [touchDropStyle, touchDrop]}] = useMultiDrop({ + accept: 'card', + drop: (item) => { + const message = `Dropped: ${item.color}` + logs.current.innerHTML += `${message}
` + }, + collect: (monitor) => { + return { + isOver: monitor.isOver(), + canDrop: monitor.canDrop(), + } + }, + }) + + const containerStyle = {border: '1px dashed black'} + const html5DropStyle = {backgroundColor: (html5Props.isOver && html5Props.canDrop) ? '#f3f3f3' : '#bbbbbb'} + const touchDropStyle = {backgroundColor: (touchProps.isOver && touchProps.canDrop) ? '#f3f3f3' : '#bbbbbb'} + return ( +
+
HTML5
+
Touch
+
+ ) +} +``` + +### Preview + +The `Preview` class is usable in different ways: hook-based, function-based and context-based. +All of them receive the same data formatted the same way, an object containing the following properties: + + - `display`: only with `usePreview`, boolean indicating if you should render your preview + - `itemType`: the type of the item (`monitor.getItemType()`) + - `item`: the item (`monitor.getItem()`) + - `style`: an object representing the style (used for positioning), it should be passed to the `style` property of your preview component + - `ref`: a reference which can be passed to the final component that will use `style`, it will allow `Preview` to position the previewed component correctly (closer to what HTML5 DnD can do) + - `monitor`: the actual [`DragLayerMonitor`](https://react-dnd.github.io/react-dnd/docs/api/drag-layer-monitor) from `react-dnd` + +Note that this component will only be showed while using a backend flagged with `preview: true` (see [Create a custom pipeline](#create-a-custom-pipeline)) which is the case for the Touch backend in the `rdndmb-html5-to-touch` pipeline. + +#### Hook-based + +```js +import { DndProvider, usePreview } from 'react-dnd-multi-backend' + +const MyPreview = () => { + const preview = usePreview() + if (!preview.display) { + return null + } + const {itemType, item, style} = preview; + // render your preview +} + +const App = () => { + return ( + + + + ) +} +``` + +#### Function-based + +```js +import { DndProvider, Preview } from 'react-dnd-multi-backend' + +const generatePreview = ({itemType, item, style}) => { + // render your preview +} + +const App = () => { + return ( + + + {/* or */} + {generatePreview} + + ) +} +``` + +#### Context-based + +```js +import { DndProvider, Preview } from 'react-dnd-multi-backend' + +const MyPreview = () => { + const {itemType, item, style} = useContext(Preview.Context) + // render your preview +} + +const App = () => { + return ( + + + + // or + + {({itemType, item, style}) => /* render your preview */} + + + + ) +} +``` + +### Examples + +You can see an example [here](examples/). + +## Migrating + +### Migrating from 6.x.x + +Starting with `7.0.0`, `HTML5toTouch` will not be provided through this package anymore but through its own: [`rdndmb-html5-to-touch`](../rdndmb-html5-to-touch/). It also doesn't have a default export anymore. + +Previously: +```js +import MultiBackend from 'react-dnd-multi-backend' +import HTML5toTouch from 'react-dnd-multi-backend/dist/esm/HTML5toTouch' +// or +import HTML5toTouch from 'react-dnd-multi-backend/dist/cjs/HTML5toTouch' +``` + +Now: +```js +import { MultiBackend } from 'react-dnd-multi-backend' +import { HTML5toTouch } from 'rdndmb-html5-to-touch' +``` + +### Migrating from 5.0.x + +Starting with `5.1.0`, `react-dnd-multi-backend` will export a new `DndProvider` which you can use instead of the one from `react-dnd`. You don't need to pass the `backend` prop to that component as it's implied you are using `MultiBackend`, however the major benefits is under the hood: + + - No longer relying on global values, allowing better encapsulation of the backend and previews + - `Preview` will be mounted with `DndProvider` using a `React.createPortal`, thus you don't need to worry about mounting your `Preview` at the top of the tree for the absolute positioning to work correctly + +Moreover, every backend in a pipeline will now need a new property called `id` and the library will warn if it isn't specified. The `MultiBackend` will try to guess it if possible, but that might fail and you will need to define them explicitly. + +Note that these aren't breaking changes, you can continue using the library as before. + +### Migrating from 4.x.x + +Starting with `5.0.0`, `react-dnd-preview` (which provides the `Preview` component) will start passing its arguments packed in one argument, an object `{itemType, item, style}`, instead of 3 different arguments (`itemType`, `item` and `style`). This means that will need to change your generator function to receive arguments correctly. + +### Migrating from 3.x.x + +Starting with `4.0.0`, `react-dnd-multi-backend` will start using `react-dnd` (and the corresponding backends) `9.0.0` and later. + +This means you need to transition from `DragDropContext(MultiBackend(HTML5toTouch))(App)` to ``. +Accordingly, the pipeline syntax changes and you should specify backend options as a separate property, e.g. `{backend: TouchBackend({enableMouseEvents: true})}` becomes `{backend: TouchBackend, options: {enableMouseEvents: true}}`. +Note that if you use the `HTML5toTouch` pipeline, the same is true for `react-dnd-html5-backend` and `react-dnd-touch-backend`. + +### Migrating from 3.1.2 + +Starting with `3.1.8`, the dependencies of `react-dnd-multi-backend` changed. `react`, `react-dom`, `react-dnd` become peer dependencies and you need to install them manually as `dependencies` in your project `package.json`. + +Note that if you use the `HTML5toTouch` pipeline, the same is true for `react-dnd-html5-backend` and `react-dnd-touch-backend`. + +### Migrating from 2.x.x + +In 2.x.x, the pipeline was static but corresponded with the behavior of `HTML5toTouch`, so just [including and passing this pipeline as a parameter](#backend) would give you the same experience as before. + +If you used the `start` option, it's a bit different. +With `start: 0` or `start: Backend.HTML5`, **MultiBackend** simply used the default pipeline, so you can also just pass `HTML5toTouch`. +With `start: 1` or `start: Backend.TOUCH`, **MultiBackend** would only use the TouchBackend, so you can replace **MultiBackend** with **TouchBackend** (however, you would lose the `Preview` component) or create a simple pipeline (see [Create a custom pipeline](#create-a-custom-pipeline)) and pass it as a parameter: +```js +var TouchOnly = { backends: [{ backend: TouchBackend, preview: true }] } +``` + +## License + +MIT, Copyright (c) 2016-2022 Louis Brunner + + + +[npm-image]: https://img.shields.io/npm/v/react-dnd-multi-backend.svg +[npm-url]: https://npmjs.org/package/react-dnd-multi-backend +[deps-image]: https://david-dm.org/louisbrunner/react-dnd-multi-backend/status.svg +[deps-url]: https://david-dm.org/louisbrunner/react-dnd-multi-backend +[deps-dev-image]: https://david-dm.org/louisbrunner/react-dnd-multi-backend/dev-status.svg +[deps-dev-url]: https://david-dm.org/louisbrunner/react-dnd-multi-backend?type=dev diff --git a/packages/react-dnd-multi-backend/examples/App.tsx b/packages/react-dnd-multi-backend/examples/App.tsx new file mode 100644 index 00000000..03d729e7 --- /dev/null +++ b/packages/react-dnd-multi-backend/examples/App.tsx @@ -0,0 +1,119 @@ +import {type CSSProperties, type JSX, type RefObject, StrictMode, useContext, useRef, useState} from 'react' +import {DndProvider as ReactDndProvider} from 'react-dnd' + +import {HTML5toTouch} from 'rdndmb-html5-to-touch' +import {DndProvider, MultiBackend, Preview, PreviewContext, type PreviewState, usePreview} from '../src' + +import {Basket} from './Basket' +import {Card} from './Card' +import {MultiBasket} from './MultiBasket' +import {MultiCard} from './MultiCard' +import type {DragContent} from './common' + +const Block = ({row, text, item, style}: {row: number; text: string; item: DragContent; style: CSSProperties}): JSX.Element => { + return ( +
+ Generated {text} +
+ ) +} + +const ContextPreview = ({text}: {text: string}): JSX.Element => { + const preview = useContext(PreviewContext) + if (!preview) { + throw new Error('missing preview context') + } + const {style, item} = preview as PreviewState + return +} + +const HookPreview = ({text}: {text: string}): JSX.Element | null => { + const preview = usePreview() + if (!preview.display) { + return null + } + const {style, item} = preview + return +} + +const ComponentPreview = ({text}: {text: string}): JSX.Element => { + return ( + ): JSX.Element => { + return + }} + /> + ) +} + +const Content = ({title, fref}: {title: string; fref: RefObject}) => { + return ( + <> +

{title} API

+ + + + + +
+ + + + +
+ +
+ + + + + + + + ) +} + +export const App = (): JSX.Element => { + const [useNew, setAPI] = useState(true) + + const refOld = useRef(null) + const refNew = useRef(null) + + const oldAPI = ( + + + + ) + + const newAPI = ( + + + + ) + + return ( + +
+ { + setAPI(e.target.checked) + }} + /> + +
+ {useNew ? newAPI : oldAPI} +
+ ) +} diff --git a/packages/react-dnd-multi-backend/examples/Basket.tsx b/packages/react-dnd-multi-backend/examples/Basket.tsx new file mode 100644 index 00000000..0c46bf46 --- /dev/null +++ b/packages/react-dnd-multi-backend/examples/Basket.tsx @@ -0,0 +1,35 @@ +import type {CSSProperties, JSX, RefObject} from 'react' +import {useDrop} from 'react-dnd' +import {type DragContent, useFixRDnDRef} from './common' + +export const Basket = ({logs}: {logs: RefObject}): JSX.Element => { + const [collectedProps, drop] = useDrop({ + accept: 'card', + drop: (item) => { + const message = `Dropped: ${item.color}` + if (logs.current) { + logs.current.innerHTML += `${message}
` + } + }, + collect: (monitor) => { + return { + isOver: monitor.isOver(), + canDrop: monitor.canDrop(), + } + }, + }) + + const isOver = collectedProps.isOver + const canDrop = collectedProps.canDrop + const style: CSSProperties = { + backgroundColor: isOver && canDrop ? '#f3f3f3' : '#cccccc', + border: '1px dashed black', + display: 'inline-block', + width: '100px', + height: '100px', + margin: '10px', + } + + const dropRef = useFixRDnDRef(drop) + return
+} diff --git a/packages/react-dnd-multi-backend/examples/Card.tsx b/packages/react-dnd-multi-backend/examples/Card.tsx new file mode 100644 index 00000000..0e53820e --- /dev/null +++ b/packages/react-dnd-multi-backend/examples/Card.tsx @@ -0,0 +1,27 @@ +import type {CSSProperties, JSX} from 'react' +import {useDrag} from 'react-dnd' +import {useFixRDnDRef} from './common' + +export const Card = (props: {color: string}): JSX.Element => { + const [collectedProps, drag] = useDrag({ + type: 'card', + item: {color: props.color}, + collect: (monitor) => { + return { + isDragging: monitor.isDragging(), + } + }, + }) + const isDragging = collectedProps.isDragging + const style: CSSProperties = { + backgroundColor: props.color, + opacity: isDragging ? 0.5 : 1, + display: 'inline-block', + width: '100px', + height: '100px', + margin: '10px', + } + + const dragRef = useFixRDnDRef(drag) + return
+} diff --git a/packages/react-dnd-multi-backend/examples/MultiBasket.tsx b/packages/react-dnd-multi-backend/examples/MultiBasket.tsx new file mode 100644 index 00000000..bfc2485b --- /dev/null +++ b/packages/react-dnd-multi-backend/examples/MultiBasket.tsx @@ -0,0 +1,64 @@ +import type {CSSProperties, JSX, RefObject} from 'react' +import {useMultiDrop} from '../src' +import {type DragContent, useFixRDnDRef} from './common' + +export const MultiBasket = ({logs}: {logs: RefObject}): JSX.Element => { + const [ + _, + { + html5: [html5Props, html5Drop], + touch: [touchProps, touchDrop], + }, + ] = useMultiDrop({ + accept: 'card', + drop: (item) => { + const message = `Dropped: ${item.color}` + if (logs.current) { + logs.current.innerHTML += `${message}
` + } + }, + collect: (monitor) => { + return { + isOver: monitor.isOver(), + canDrop: monitor.canDrop(), + } + }, + }) + + // TODO: replace with autoprefixer+astroturf + const containerStyle: CSSProperties = { + border: '1px dashed black', + display: 'inline-block', + margin: '10px', + } + const html5DropStyle: CSSProperties = { + backgroundColor: html5Props.isOver && html5Props.canDrop ? '#f3f3f3' : '#bbbbbb', + display: 'inline-block', + margin: '5px', + width: '90px', + height: '90px', + textAlign: 'center', + userSelect: 'none', + } + const touchDropStyle: CSSProperties = { + backgroundColor: touchProps.isOver && touchProps.canDrop ? '#f3f3f3' : '#bbbbbb', + display: 'inline-block', + margin: '5px', + width: '90px', + height: '90px', + textAlign: 'center', + userSelect: 'none', + } + const html5DropRef = useFixRDnDRef(html5Drop) + const touchDropRef = useFixRDnDRef(touchDrop) + return ( +
+
+ HTML5 +
+
+ Touch +
+
+ ) +} diff --git a/packages/react-dnd-multi-backend/examples/MultiCard.tsx b/packages/react-dnd-multi-backend/examples/MultiCard.tsx new file mode 100644 index 00000000..7d4f8f7c --- /dev/null +++ b/packages/react-dnd-multi-backend/examples/MultiCard.tsx @@ -0,0 +1,58 @@ +import type {CSSProperties, JSX} from 'react' +import {useMultiDrag} from '../src' +import {type DragContent, useFixRDnDRef} from './common' + +export const MultiCard = (props: {color: string}): JSX.Element => { + const [ + _, + { + html5: [html5Props, html5Drag], + touch: [touchProps, touchDrag], + }, + ] = useMultiDrag({ + type: 'card', + item: {color: props.color}, + collect: (monitor) => { + return { + isDragging: monitor.isDragging(), + } + }, + }) + + const containerStyle: CSSProperties = { + display: 'inline-block', + margin: '10px', + } + const html5DragStyle: CSSProperties = { + backgroundColor: props.color, + opacity: html5Props.isDragging ? 0.5 : 1, + display: 'inline-block', + margin: '5px', + width: '90px', + height: '90px', + textAlign: 'center', + userSelect: 'none', + } + const touchDragStyle: CSSProperties = { + backgroundColor: props.color, + opacity: touchProps.isDragging ? 0.5 : 1, + display: 'inline-block', + margin: '5px', + width: '90px', + height: '90px', + textAlign: 'center', + userSelect: 'none', + } + const html5DragRef = useFixRDnDRef(html5Drag) + const touchDragRef = useFixRDnDRef(touchDrag) + return ( +
+
+ HTML5 +
+
+ Touch +
+
+ ) +} diff --git a/packages/react-dnd-multi-backend/examples/common.ts b/packages/react-dnd-multi-backend/examples/common.ts new file mode 100644 index 00000000..890028d5 --- /dev/null +++ b/packages/react-dnd-multi-backend/examples/common.ts @@ -0,0 +1,16 @@ +import {useCallback} from 'react' +import type {ConnectDragSource, ConnectDropTarget} from 'react-dnd' + +export type DragContent = { + color: string +} + +// FIXME: issue with react-dnd when using React v19 +export const useFixRDnDRef = (ref: ConnectDropTarget | ConnectDragSource) => { + return useCallback( + (node: T | null) => { + ref(node) + }, + [ref], + ) +} diff --git a/packages/react-dnd-multi-backend/examples/index.tsx b/packages/react-dnd-multi-backend/examples/index.tsx new file mode 100644 index 00000000..e0d50c60 --- /dev/null +++ b/packages/react-dnd-multi-backend/examples/index.tsx @@ -0,0 +1,9 @@ +import {createRoot} from 'react-dom/client' +import {App} from './App' + +const rootElement = document.getElementById('root') +if (!rootElement) { + throw new Error('could not find root element') +} +const root = createRoot(rootElement) +root.render() diff --git a/packages/react-dnd-multi-backend/package.json b/packages/react-dnd-multi-backend/package.json new file mode 100644 index 00000000..1c5fa3e6 --- /dev/null +++ b/packages/react-dnd-multi-backend/package.json @@ -0,0 +1,33 @@ +{ + "name": "react-dnd-multi-backend", + "version": "8.1.2", + "sideEffects": false, + "description": "Multi Backend system compatible with React DnD", + "author": "Louis Brunner (https://github.com/LouisBrunner)", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/LouisBrunner/dnd-multi-backend.git", + "directory": "packages/react-dnd-multi-backend" + }, + "homepage": "https://louisbrunner.github.io/dnd-multi-backend/packages/react-dnd-multi-backend/", + "keywords": ["react", "dnd", "drag", "drop", "html5", "touch", "react-dnd"], + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "module": "dist/index.js", + "dependencies": { + "dnd-multi-backend": "^8.1.2", + "react-dnd-preview": "^8.1.2" + }, + "peerDependencies": { + "dnd-core": "^16.0.1", + "react": "^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0", + "react-dnd": "^16.0.1", + "react-dom": "^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0" + } +} diff --git a/packages/react-dnd-multi-backend/src/__tests__/index.test.ts b/packages/react-dnd-multi-backend/src/__tests__/index.test.ts new file mode 100644 index 00000000..cba01cca --- /dev/null +++ b/packages/react-dnd-multi-backend/src/__tests__/index.test.ts @@ -0,0 +1,25 @@ +import * as Module from '../index' + +import {HTML5DragTransition, MouseTransition, MultiBackend, TouchTransition, createTransition} from 'dnd-multi-backend' +import {DndProvider} from '../components/DndProvider' +import {Preview, PreviewContext} from '../components/Preview' +import {useMultiDrag, useMultiDrop, usePreview} from '../hooks' + +describe('react-dnd-multi-backend module', () => { + test('exports correctly', () => { + expect(Module.DndProvider).toBe(DndProvider) + + expect(Module.Preview).toBe(Preview) + expect(Module.PreviewContext).toBe(PreviewContext) + + expect(Module.usePreview).toBe(usePreview) + expect(Module.useMultiDrag).toBe(useMultiDrag) + expect(Module.useMultiDrop).toBe(useMultiDrop) + + expect(Module.MultiBackend).toBe(MultiBackend) + expect(Module.HTML5DragTransition).toBe(HTML5DragTransition) + expect(Module.TouchTransition).toBe(TouchTransition) + expect(Module.MouseTransition).toBe(MouseTransition) + expect(Module.createTransition).toBe(createTransition) + }) +}) diff --git a/packages/react-dnd-multi-backend/src/components/DndProvider.tsx b/packages/react-dnd-multi-backend/src/components/DndProvider.tsx new file mode 100644 index 00000000..003c6e44 --- /dev/null +++ b/packages/react-dnd-multi-backend/src/components/DndProvider.tsx @@ -0,0 +1,25 @@ +import {MultiBackend, type MultiBackendOptions} from 'dnd-multi-backend' +import {type JSX, type ReactNode, createContext, useState} from 'react' +import {DndProvider as ReactDndProvider} from 'react-dnd' + +export const PreviewPortalContext = createContext(null) + +export type DndProviderProps = { + // biome-ignore lint/suspicious/noExplicitAny: not sure why + context?: any + options: MultiBackendOptions + children?: ReactNode + debugMode?: boolean + portal?: Element +} + +export const DndProvider = ({portal, ...props}: DndProviderProps): JSX.Element => { + const [previewPortal, setPreviewPortal] = useState(null) + + return ( + + + {portal ? null :
} + + ) +} diff --git a/packages/react-dnd-multi-backend/src/components/Preview.tsx b/packages/react-dnd-multi-backend/src/components/Preview.tsx new file mode 100644 index 00000000..e609783f --- /dev/null +++ b/packages/react-dnd-multi-backend/src/components/Preview.tsx @@ -0,0 +1,24 @@ +import {type JSX, useContext} from 'react' +import {Preview as DnDPreview, Context as PreviewContext, type PreviewProps, type PreviewState} from 'react-dnd-preview' +import {createPortal} from 'react-dom' + +import {useObservePreviews} from '../hooks/useObservePreviews' +import {PreviewPortalContext} from './DndProvider' + +export const Preview = (props: PreviewProps): JSX.Element | null => { + const enabled = useObservePreviews() + const portal = useContext(PreviewPortalContext) + if (!enabled) { + return null + } + + const result = {...props} /> + if (portal !== null) { + return createPortal(result, portal) + } + return result +} + +Preview.Context = PreviewContext +export {PreviewContext} +export type {PreviewState} diff --git a/packages/react-dnd-multi-backend/src/components/__tests__/DndProvider.test.tsx b/packages/react-dnd-multi-backend/src/components/__tests__/DndProvider.test.tsx new file mode 100644 index 00000000..0b4bf34a --- /dev/null +++ b/packages/react-dnd-multi-backend/src/components/__tests__/DndProvider.test.tsx @@ -0,0 +1,59 @@ +import {TestPipeline} from '@mocks/pipeline' +import {render} from '@testing-library/react' +import {type ReactNode, useContext} from 'react' + +import {DndProvider, PreviewPortalContext} from '../DndProvider' + +describe('DndProvider component', () => { + const createComponent = (child: ReactNode, element?: Element) => { + return render( + + {child} + , + ) + } + + test('contexts have sensible defaults', () => { + const Child = () => { + const portal = useContext(PreviewPortalContext) + expect(portal).toBeNull() + return null + } + render() + }) + + test('can access both contexts', () => { + const spy = jest.fn() + const Child = () => { + const portal = useContext(PreviewPortalContext) + spy(portal) + return null + } + createComponent() + expect(spy).toHaveBeenCalledTimes(2) + expect(spy).toHaveBeenNthCalledWith(1, null) + expect(spy).toHaveBeenNthCalledWith(2, expect.any(HTMLElement)) + }) + + test('can pass an external reference', () => { + document.body.innerHTML = ` +
+ +
{ + spy(useContext(PreviewPortalContext)) + return null + } + createComponent(, portal) + expect(spy).toHaveBeenCalledTimes(1) + expect(spy).toHaveBeenNthCalledWith(1, portal) + }) +}) diff --git a/packages/react-dnd-multi-backend/src/components/__tests__/Preview.test.tsx b/packages/react-dnd-multi-backend/src/components/__tests__/Preview.test.tsx new file mode 100644 index 00000000..ce346973 --- /dev/null +++ b/packages/react-dnd-multi-backend/src/components/__tests__/Preview.test.tsx @@ -0,0 +1,138 @@ +import {MockMultiBackend, MockPreviewList, type MockedMultiBackend, type MockedPreviewList} from '@mocks/mocks' +import {act, render, screen} from '@testing-library/react' +import {type JSX, useState} from 'react' +import {DndContext, type DndContextType} from 'react-dnd' +import type {PreviewGenerator} from 'react-dnd-preview' +import {PreviewPortalContext} from '../DndProvider' +import {Preview, PreviewContext} from '../Preview' + +type TestProps = { + generator: PreviewGenerator +} + +describe('Preview component', () => { + let list: MockedPreviewList + let backend: MockedMultiBackend + let context: DndContextType + + beforeEach(() => { + list = MockPreviewList() + backend = MockMultiBackend() + backend.previewsList.mockReturnValue(list) + context = { + dragDropManager: { + getBackend: () => { + return backend + }, + getMonitor: jest.fn(), + getRegistry: jest.fn(), + getActions: jest.fn(), + dispatch: jest.fn(), + }, + } + }) + + const Simple = () => { + return
abc
+ } + + const getLastRegister = () => { + return list.register.mock.calls[list.register.mock.calls.length - 1][0] + } + + test('exports a context', () => { + expect(Preview.Context).toBe(PreviewContext) + }) + + describe('using previews context', () => { + const createComponent = ({generator}: TestProps) => { + return render( + + + , + ) + } + + test('registers with the backend', () => { + expect(list.register).not.toHaveBeenCalled() + const {unmount} = createComponent({generator: jest.fn()}) + expect(list.register).toHaveBeenCalled() + expect(list.unregister).not.toHaveBeenCalled() + unmount() + expect(list.unregister).toHaveBeenCalled() + }) + + describe('it renders correctly', () => { + const testRender = async ({init}: {init: boolean}) => { + backend.previewEnabled.mockReturnValue(init) + + createComponent({generator: Simple}) + + const expectNull = () => { + expect(screen.queryByText('abc')).not.toBeInTheDocument() + } + + const expectNotNull = () => { + expect(screen.getByText('abc')).toBeInTheDocument() + } + + if (init) { + expectNotNull() + } else { + expectNull() + } + + await act(() => { + backend.previewEnabled.mockReturnValue(true) + getLastRegister().backendChanged(backend) + }) + expectNotNull() + + // No notification, no change + await act(() => { + backend.previewEnabled.mockReturnValue(false) + }) + expectNotNull() + + await act(() => { + getLastRegister().backendChanged(backend) + }) + expectNull() + } + + test('not showing at first', async () => { + await testRender({init: false}) + }) + + test('showing at first', async () => { + await testRender({init: true}) + }) + }) + }) + + describe('using previews and portal context', () => { + const Component = ({generator}: TestProps): JSX.Element => { + const [ref, setRef] = useState(null) + + return ( + <> + + + + + +
+ + ) + } + + test('portal is in detached div', async () => { + render() + await act(() => { + backend.previewEnabled.mockReturnValue(true) + getLastRegister().backendChanged(backend) + }) + expect(screen.getByText('abc')).toBeInTheDocument() + }) + }) +}) diff --git a/packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrag.test.tsx b/packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrag.test.tsx new file mode 100644 index 00000000..119f6adf --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrag.test.tsx @@ -0,0 +1,43 @@ +import {TestPipeline} from '@mocks/pipeline' +import {renderHook} from '@testing-library/react' +import type {ReactNode} from 'react' +import {DndProvider} from '../..' +import {useMultiDrag} from '../useMultiDrag' + +describe('useMultiDrag component', () => { + const MultiAction = () => { + return useMultiDrag({ + type: 'card', + item: {}, + collect: (monitor) => { + return { + isDragging: monitor.isDragging(), + } + }, + }) + } + + test('fails without a context', () => { + const spy = jest.spyOn(console, 'error') + spy.mockImplementation(() => {}) + expect(() => renderHook(MultiAction)).toThrow() + spy.mockRestore() + }) + + test('it works', () => { + const wrapper = ({children}: {children?: ReactNode}) => { + return {children} + } + const {result} = renderHook(MultiAction, {wrapper}) + + const [props, backends] = result.current + expect(props).toHaveLength(3) + expect(props[0]).toHaveProperty('isDragging', false) + expect(backends).toHaveProperty('back1') + expect(backends).toHaveProperty('back2') + expect(backends).not.toHaveProperty('back3') + expect(backends.back1).toHaveLength(3) + expect(backends.back1[0]).toHaveProperty('isDragging', false) + expect(backends.back2).toHaveLength(3) + }) +}) diff --git a/packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrop.test.tsx b/packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrop.test.tsx new file mode 100644 index 00000000..aa4e8816 --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/__tests__/useMultiDrop.test.tsx @@ -0,0 +1,46 @@ +import {TestPipeline} from '@mocks/pipeline' +import {renderHook} from '@testing-library/react' +import type {ReactNode} from 'react' + +import {DndProvider} from '../..' +import {useMultiDrop} from '../useMultiDrop' + +describe('useMultiDrop component', () => { + const MultiAction = () => { + return useMultiDrop({ + accept: 'card', + collect: (monitor) => { + return { + isOver: monitor.isOver(), + canDrop: monitor.canDrop(), + } + }, + }) + } + + test('fails without a context', () => { + const spy = jest.spyOn(console, 'error') + spy.mockImplementation(() => {}) + expect(() => renderHook(MultiAction)).toThrow() + spy.mockRestore() + }) + + test('it works', () => { + const wrapper = ({children}: {children?: ReactNode}) => { + return {children} + } + const {result} = renderHook(MultiAction, {wrapper}) + + const [props, backends] = result.current + expect(props).toHaveLength(2) + expect(props[0]).toHaveProperty('isOver', false) + expect(props[0]).toHaveProperty('canDrop', false) + expect(backends).toHaveProperty('back1') + expect(backends).toHaveProperty('back2') + expect(backends).not.toHaveProperty('back3') + expect(backends.back1).toHaveLength(2) + expect(backends.back1[0]).toHaveProperty('isOver', false) + expect(backends.back1[0]).toHaveProperty('canDrop', false) + expect(backends.back2).toHaveLength(2) + }) +}) diff --git a/packages/react-dnd-multi-backend/src/hooks/__tests__/usePreview.test.tsx b/packages/react-dnd-multi-backend/src/hooks/__tests__/usePreview.test.tsx new file mode 100644 index 00000000..792537fb --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/__tests__/usePreview.test.tsx @@ -0,0 +1,101 @@ +import {MockMultiBackend, MockPreviewList, type MockedMultiBackend, type MockedPreviewList} from '@mocks/mocks' +import {act, renderHook} from '@testing-library/react' +import type {ReactNode} from 'react' +import {DndContext, type DndContextType} from 'react-dnd' +import {usePreview} from '../usePreview' + +describe('usePreview component', () => { + let list: MockedPreviewList + let backend: MockedMultiBackend + let context: DndContextType + + beforeEach(() => { + list = MockPreviewList() + backend = MockMultiBackend() + backend.previewsList.mockReturnValue(list) + context = { + dragDropManager: { + getBackend: () => { + return backend + }, + getMonitor: jest.fn(), + getRegistry: jest.fn(), + getActions: jest.fn(), + dispatch: jest.fn(), + }, + } + }) + + const getLastRegister = () => { + return list.register.mock.calls[list.register.mock.calls.length - 1][0] + } + + const createComponent = () => { + const wrapper = ({children}: {children?: ReactNode}) => { + return {children} + } + return renderHook( + () => { + return usePreview() + }, + {wrapper}, + ) + } + + test('registers with the backend', () => { + backend.previewEnabled.mockReturnValue(false) + expect(list.register).not.toHaveBeenCalled() + const {unmount} = createComponent() + expect(list.register).toHaveBeenCalled() + expect(list.unregister).not.toHaveBeenCalled() + unmount() + expect(list.unregister).toHaveBeenCalled() + }) + + describe('it renders correctly', () => { + const testRender = async ({init}: {init: boolean}) => { + backend.previewEnabled.mockReturnValue(init) + + const {result} = createComponent() + + const expectNull = () => { + expect(result.current.display).toBe(false) + } + + const expectNotNull = () => { + expect(result.current.display).toBe(true) + } + + if (init) { + expectNotNull() + } else { + expectNull() + } + + await act(() => { + backend.previewEnabled.mockReturnValue(true) + getLastRegister().backendChanged(backend) + }) + expectNotNull() + + // No notification, no change + await act(() => { + backend.previewEnabled.mockReturnValue(false) + }) + expectNotNull() + + await act(() => { + getLastRegister().backendChanged(backend) + }) + expectNull() + } + + test('not showing at first', async () => { + await testRender({init: false}) + }) + + test('showing at first', async () => { + await testRender({init: true}) + }) + }) +}) diff --git a/packages/react-dnd-multi-backend/src/hooks/index.ts b/packages/react-dnd-multi-backend/src/hooks/index.ts new file mode 100644 index 00000000..cbb355dc --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/index.ts @@ -0,0 +1,3 @@ +export * from './useMultiDrag' +export * from './useMultiDrop' +export * from './usePreview' diff --git a/packages/react-dnd-multi-backend/src/hooks/useMultiCommon.ts b/packages/react-dnd-multi-backend/src/hooks/useMultiCommon.ts new file mode 100644 index 00000000..4a71f324 --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/useMultiCommon.ts @@ -0,0 +1,35 @@ +import type {Backend, DragDropManager} from 'dnd-core' +import type {MultiBackendSwitcher} from 'dnd-multi-backend' +import {useContext} from 'react' +import {DndContext, type DndContextType} from 'react-dnd' + +type Fn = (spec: Spec) => Res + +interface DragDropManagerImpl extends DragDropManager { + receiveBackend(backend: Backend): void +} + +const useForBackend = (spec: Spec, fn: Fn, manager: DragDropManagerImpl, backend: Backend): Res => { + const previous = manager.getBackend() + manager.receiveBackend(backend) + const result = fn(spec) + manager.receiveBackend(previous) + return result +} + +export const useMultiCommon = (spec: Spec, fn: Fn): [Res, Record] => { + const dndContext = useContext(DndContext) + const dndBackend = dndContext?.dragDropManager?.getBackend() + if (dndBackend === undefined) { + throw new Error('could not find backend, make sure you are using a ') + } + + const result = fn(spec) + const multiResult: Record = {} + const backends = (dndBackend as MultiBackendSwitcher).backendsList() + for (const backend of backends) { + multiResult[backend.id] = useForBackend(spec, fn, dndContext.dragDropManager as DragDropManagerImpl, backend.instance) + } + + return [result, multiResult] +} diff --git a/packages/react-dnd-multi-backend/src/hooks/useMultiDrag.ts b/packages/react-dnd-multi-backend/src/hooks/useMultiDrag.ts new file mode 100644 index 00000000..8f2e1f5f --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/useMultiDrag.ts @@ -0,0 +1,10 @@ +import {type ConnectDragPreview, type ConnectDragSource, type DragSourceHookSpec, useDrag} from 'react-dnd' +import {useMultiCommon} from './useMultiCommon' + +export type useMultiDragOneState = [Props, ConnectDragSource, ConnectDragPreview] + +export type useMultiDragState = [useMultiDragOneState, Record>] + +export const useMultiDrag = (spec: DragSourceHookSpec): useMultiDragState => { + return useMultiCommon, useMultiDragOneState>(spec, useDrag) +} diff --git a/packages/react-dnd-multi-backend/src/hooks/useMultiDrop.ts b/packages/react-dnd-multi-backend/src/hooks/useMultiDrop.ts new file mode 100644 index 00000000..4ac1294f --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/useMultiDrop.ts @@ -0,0 +1,10 @@ +import {type ConnectDropTarget, type DropTargetHookSpec, useDrop} from 'react-dnd' +import {useMultiCommon} from './useMultiCommon' + +export type useMultiDropOneState = [Props, ConnectDropTarget] + +export type useMultiDropState = [useMultiDropOneState, Record>] + +export const useMultiDrop = (spec: DropTargetHookSpec): useMultiDropState => { + return useMultiCommon, useMultiDropOneState>(spec, useDrop) +} diff --git a/packages/react-dnd-multi-backend/src/hooks/useObservePreviews.ts b/packages/react-dnd-multi-backend/src/hooks/useObservePreviews.ts new file mode 100644 index 00000000..9d19d44b --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/useObservePreviews.ts @@ -0,0 +1,27 @@ +import type {MultiBackendSwitcher} from 'dnd-multi-backend' +import {useContext, useEffect, useState} from 'react' +import {DndContext, type DndContextType} from 'react-dnd' + +export const useObservePreviews = (): boolean => { + const [enabled, setEnabled] = useState(false) + const dndContext = useContext(DndContext) + + useEffect(() => { + const backend = dndContext?.dragDropManager?.getBackend() as MultiBackendSwitcher + + const observer = { + backendChanged: (cbackend: MultiBackendSwitcher) => { + setEnabled(cbackend.previewEnabled()) + }, + } + + setEnabled(backend.previewEnabled()) + + backend.previewsList().register(observer) + return () => { + backend.previewsList().unregister(observer) + } + }, [dndContext, dndContext.dragDropManager]) + + return enabled +} diff --git a/packages/react-dnd-multi-backend/src/hooks/usePreview.ts b/packages/react-dnd-multi-backend/src/hooks/usePreview.ts new file mode 100644 index 00000000..2f440a8a --- /dev/null +++ b/packages/react-dnd-multi-backend/src/hooks/usePreview.ts @@ -0,0 +1,14 @@ +import {usePreview as usePreviewDnd, type usePreviewOptions, type usePreviewState, type usePreviewStateContent} from 'react-dnd-preview' + +import {useObservePreviews} from './useObservePreviews' + +export type {usePreviewState, usePreviewStateContent} + +export const usePreview = (props?: usePreviewOptions): usePreviewState => { + const enabled = useObservePreviews() + const result = usePreviewDnd(props) + if (!enabled) { + return {display: false} + } + return result +} diff --git a/packages/react-dnd-multi-backend/src/index.ts b/packages/react-dnd-multi-backend/src/index.ts new file mode 100644 index 00000000..9f3d7839 --- /dev/null +++ b/packages/react-dnd-multi-backend/src/index.ts @@ -0,0 +1,5 @@ +export * from 'dnd-multi-backend' +export {DndProvider} from './components/DndProvider' +export type {DndProviderProps} from './components/DndProvider' +export * from './components/Preview' +export * from './hooks' diff --git a/packages/react-dnd-multi-backend/tsconfig.json b/packages/react-dnd-multi-backend/tsconfig.json new file mode 100644 index 00000000..9675ea7c --- /dev/null +++ b/packages/react-dnd-multi-backend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "baseUrl": "." + }, + "include": ["src/**/*.ts*"] +} diff --git a/packages/react-dnd-preview/.npmignore b/packages/react-dnd-preview/.npmignore new file mode 100644 index 00000000..cc296803 --- /dev/null +++ b/packages/react-dnd-preview/.npmignore @@ -0,0 +1,10 @@ +# Input +examples +__mocks__ +__tests__ +src +tsconfig.json + +# npm +node_modules +npm-debug.log diff --git a/packages/react-dnd-preview/README.md b/packages/react-dnd-preview/README.md new file mode 100644 index 00000000..982dd8da --- /dev/null +++ b/packages/react-dnd-preview/README.md @@ -0,0 +1,137 @@ +# React DnD Preview [![NPM Version][npm-image]][npm-url] [![dependencies Status][deps-image]][deps-url] [![devDependencies Status][deps-dev-image]][deps-dev-url] + +[Try it here!](https://louisbrunner.github.io/dnd-multi-backend/examples/react-dnd-preview.html) + +This project is a React component compatible with [React DnD](https://github.com/react-dnd/react-dnd) that can be used to emulate a Drag'n'Drop "ghost" when a Backend system doesn't have one (e.g. `react-dnd-touch-backend`). + +See the [migration section](#migrating) for instructions when switching from `4.x.x` or `6.x.x`. + +## Installation + +```sh +npm install -S react-dnd-preview +``` + +## Usage & Example + +Just include the `Preview` component close to the top component of your application (it places itself absolutely). + +It is usable in different ways: hook-based, function-based and context-based. +All of them receive the same data formatted the same way, an object containing the following properties: + + - `display`: only with `usePreview`, boolean indicating if you should render your preview + - `itemType`: the type of the item (`monitor.getItemType()`) + - `item`: the item (`monitor.getItem()`) + - `style`: an object representing the style (used for positioning), it should be passed to the `style` property of your preview component + - `ref`: a reference which can be passed to the final component that will use `style`, it will allow `Preview` to position the previewed component correctly (closer to what HTML5 DnD can do) + - `monitor`: the actual [`DragLayerMonitor`](https://react-dnd.github.io/react-dnd/docs/api/drag-layer-monitor) from `react-dnd` + +The function needs to return something that React can render (React component, `null`, etc). + +See also the [examples](examples/) for more information. + +### Hook-based + +```js +import { usePreview } from 'react-dnd-preview' + +const MyPreview = () => { + const preview = usePreview({ placement: 'top', padding: {x: -20, y: 0 }}) + if (!preview.display) { + return null + } + const {itemType, item, style, ref} = preview; + return
{itemType}
+} + +const App = () => { + return ( + + + + + ) +} +``` + +### Function-based + +```js +import { Preview } from 'react-dnd-preview' + +const generatePreview = ({itemType, item, style}) => { + return
{itemType}
+} + +class App extends React.Component { + render() { + return ( + + + + // or + {generatePreview} + + ) + } +} +``` + +### Context-based + +```js +import { Preview, Context } from 'react-dnd-preview' + +const MyPreview = () => { + const {itemType, item, style} = useContext(Preview.Component) + return
{itemType}
+} + +const App = () => { + return ( + + + + + // or + + {({itemType, item, style}) =>
{itemType}
} +
+
+
+ ) +} +``` + +## Migrating + +### Migrating from 6.x.x + +Starting with `7.0.0`, `react-dnd-preview` doesn't have a default export anymore. + +Previously: +```js +import Preview from 'react-dnd-preview' +``` + +Now: +```js +import { Preview } from 'react-dnd-preview' +``` + +### Migrating from 4.x.x + +Starting with `5.0.0`, `react-dnd-preview` will start passing its arguments packed in one argument, an object `{itemType, item, style}`, instead of 3 different arguments (`itemType`, `item` and `style`). This means that will need to change your generator function to receive arguments correctly. + +## License + +MIT, Copyright (c) 2016-2022 Louis Brunner + + + +[npm-image]: https://img.shields.io/npm/v/react-dnd-preview.svg +[npm-url]: https://npmjs.org/package/react-dnd-preview +[deps-image]: https://david-dm.org/louisbrunner/react-dnd-preview/status.svg +[deps-url]: https://david-dm.org/louisbrunner/react-dnd-preview +[deps-dev-image]: https://david-dm.org/louisbrunner/react-dnd-preview/dev-status.svg +[deps-dev-url]: https://david-dm.org/louisbrunner/react-dnd-preview?type=dev diff --git a/packages/react-dnd-preview/examples/main/App.tsx b/packages/react-dnd-preview/examples/main/App.tsx new file mode 100644 index 00000000..e013893e --- /dev/null +++ b/packages/react-dnd-preview/examples/main/App.tsx @@ -0,0 +1,18 @@ +import {type JSX, StrictMode} from 'react' +import {DndProvider} from 'react-dnd' +import {TouchBackend} from 'react-dnd-touch-backend' +import {Draggable} from '../shared' +import {Components} from './methods/Components' +import {Hooks} from './methods/Hooks' + +export const App = (): JSX.Element => { + return ( + + + + + + + + ) +} diff --git a/packages/react-dnd-preview/examples/main/index.tsx b/packages/react-dnd-preview/examples/main/index.tsx new file mode 100644 index 00000000..e0d50c60 --- /dev/null +++ b/packages/react-dnd-preview/examples/main/index.tsx @@ -0,0 +1,9 @@ +import {createRoot} from 'react-dom/client' +import {App} from './App' + +const rootElement = document.getElementById('root') +if (!rootElement) { + throw new Error('could not find root element') +} +const root = createRoot(rootElement) +root.render() diff --git a/packages/react-dnd-preview/examples/main/methods/Components.tsx b/packages/react-dnd-preview/examples/main/methods/Components.tsx new file mode 100644 index 00000000..fa241407 --- /dev/null +++ b/packages/react-dnd-preview/examples/main/methods/Components.tsx @@ -0,0 +1,30 @@ +import {Context, Preview, type PreviewState} from '../../../src' +import type {DragContent} from '../../shared' +import {type GenPreviewLiteProps, WithChildComponent, WithChildFunction, WithChildFunctionContext, WithPropFunction} from './common' + +import type {JSX} from 'react' + +export const Components = ({title, col}: GenPreviewLiteProps): JSX.Element => { + return ( + <> + + + {WithChildFunction({title, col})} + + + + + + + + {(props) => { + if (!props) { + throw new Error('missing preview context') + } + return WithChildFunctionContext({title, col})(props as PreviewState) + }} + + + + ) +} diff --git a/packages/react-dnd-preview/examples/main/methods/Hooks.tsx b/packages/react-dnd-preview/examples/main/methods/Hooks.tsx new file mode 100644 index 00000000..5457881e --- /dev/null +++ b/packages/react-dnd-preview/examples/main/methods/Hooks.tsx @@ -0,0 +1,21 @@ +import {usePreview} from '../../../src' +import type {DragContent} from '../../shared' +import {type GenPreviewLiteProps, type GenPreviewProps, generatePreview} from './common' + +import type {JSX} from 'react' + +const WithHook = (props: GenPreviewProps): JSX.Element | null => { + const preview = usePreview() + if (!preview.display) { + return null + } + return generatePreview(preview, props) +} + +export const Hooks = (props: GenPreviewLiteProps): JSX.Element => { + return ( + <> + + + ) +} diff --git a/packages/react-dnd-preview/examples/main/methods/common.tsx b/packages/react-dnd-preview/examples/main/methods/common.tsx new file mode 100644 index 00000000..ad8d07df --- /dev/null +++ b/packages/react-dnd-preview/examples/main/methods/common.tsx @@ -0,0 +1,64 @@ +import {type JSX, useContext} from 'react' +import {Context, type PreviewState, type usePreviewStateContent} from '../../../src' +import {type DragContent, Shape} from '../../shared' + +export type PreviewProps = usePreviewStateContent + +export type GenPreviewProps = { + row: number + col: number + title: string + method: string +} + +export const generatePreview = ({itemType, item, style, ref}: PreviewProps, {row, col, title, method}: GenPreviewProps): JSX.Element => { + return ( + + {title} +
+ Generated {itemType?.toString()} +
+ {method} +
+ ) +} + +export type WithPreviewState = (props: PreviewProps) => JSX.Element + +export type GenPreviewLiteProps = Pick + +export const WithPropFunction = ({col, title}: GenPreviewLiteProps): WithPreviewState => { + return (props) => { + return generatePreview(props, {row: 0, col, title, method: 'with prop function'}) + } +} +export const WithChildFunction = ({col, title}: GenPreviewLiteProps): WithPreviewState => { + return (props) => { + return generatePreview(props, {row: 1, col, title, method: 'with child function'}) + } +} + +export const WithChildComponent = ({col, title}: GenPreviewLiteProps): JSX.Element => { + const props = useContext(Context) + if (!props) { + throw new Error('missing preview context') + } + // FIXME: any better way? + return generatePreview(props as PreviewState, {row: 2, col, title, method: 'with child component (using context)'}) +} + +export const WithChildFunctionContext = ({col, title}: GenPreviewLiteProps): WithPreviewState => { + return (props) => { + return generatePreview(props, {row: 3, col, title, method: 'with child function (using context)'}) + } +} diff --git a/packages/react-dnd-preview/examples/offset/App.tsx b/packages/react-dnd-preview/examples/offset/App.tsx new file mode 100644 index 00000000..f569fecb --- /dev/null +++ b/packages/react-dnd-preview/examples/offset/App.tsx @@ -0,0 +1,124 @@ +import {type CSSProperties, type JSX, type Ref, StrictMode, useState} from 'react' +import {DndProvider} from 'react-dnd' +import {TouchBackend} from 'react-dnd-touch-backend' +import {type Point, usePreview} from '../../src' +import type {PreviewPlacement} from '../../src/' +import {type DragContent, Draggable, Shape} from '../shared' + +type Kinds = 'default' | 'ref' | 'custom_client' | 'custom_source_client' + +type PreviewProps = { + kind: Kinds + text: string + placement?: PreviewPlacement + padding?: Point +} + +export const Preview = ({kind, text, placement, padding}: PreviewProps): JSX.Element | null => { + const preview = usePreview({placement, padding}) + if (!preview.display) { + return null + } + const {style, ref, monitor} = preview + + let finalRef: Ref | undefined + let finalStyle: CSSProperties = {...style, opacity: 0.5, whiteSpace: 'nowrap'} + if (kind === 'default') { + // Keep as-is + } else if (kind === 'ref') { + finalRef = ref + } else { + let x: number + let y: number + if (kind === 'custom_client') { + x = monitor.getClientOffset()?.x ?? 0 + y = monitor.getClientOffset()?.y ?? 0 + } else if (kind === 'custom_source_client') { + x = monitor.getSourceClientOffset()?.x ?? 0 + y = monitor.getSourceClientOffset()?.y ?? 0 + } else { + throw new Error('unknown kind') + } + const transform = `translate(${x}px, ${y}px)` + finalStyle = { + ...finalStyle, + transform, + WebkitTransform: transform, + } + } + + return ( + + {text} + + ) +} + +export const App = (): JSX.Element => { + const [debug, setDebug] = useState(false) + const [previewPlacement, setPreviewPlacement] = useState('center') + + const [paddingX, setPaddingX] = useState('0') + const [paddingY, setPaddingY] = useState('0') + + const handlePlacementChange = (e: React.ChangeEvent) => { + setPreviewPlacement(e.target.value as PreviewPlacement) + } + + const handlePaddingXChange = (e: React.ChangeEvent) => { + setPaddingX(e.target.value) + } + + const handlePaddingYChange = (e: React.ChangeEvent) => { + setPaddingY(e.target.value) + } + + return ( + +

+ + +

+

+ + +

+

+ + +

+

+ { + setDebug(e.target.checked) + }} + id="debug_mode" + /> + +

+ + + + + {debug ? ( + <> + + + + ) : null} + +
+ ) +} diff --git a/packages/react-dnd-preview/examples/offset/index.tsx b/packages/react-dnd-preview/examples/offset/index.tsx new file mode 100644 index 00000000..e0d50c60 --- /dev/null +++ b/packages/react-dnd-preview/examples/offset/index.tsx @@ -0,0 +1,9 @@ +import {createRoot} from 'react-dom/client' +import {App} from './App' + +const rootElement = document.getElementById('root') +if (!rootElement) { + throw new Error('could not find root element') +} +const root = createRoot(rootElement) +root.render() diff --git a/packages/react-dnd-preview/examples/shared.tsx b/packages/react-dnd-preview/examples/shared.tsx new file mode 100644 index 00000000..82fcd461 --- /dev/null +++ b/packages/react-dnd-preview/examples/shared.tsx @@ -0,0 +1,48 @@ +import {type CSSProperties, type JSX, type ReactNode, type Ref, useCallback} from 'react' +import {useDrag} from 'react-dnd' + +export type DragContent = { + type: string + color: string +} + +export type ShapeProps = { + style: CSSProperties + size: number + color: string + children?: ReactNode + ref?: Ref +} + +export const Shape = ({style, size, color, children, ref}: ShapeProps) => { + return ( +
+ {children} +
+ ) +} + +export const Draggable = (): JSX.Element => { + const [_, drag] = useDrag({ + type: 'thing', + item: { + color: '#eedd00', + }, + }) + // FIXME: issue with react-dnd when using React v19 + const refTrampoline = useCallback( + (node: HTMLDivElement | null) => { + drag(node) + }, + [drag], + ) + return +} diff --git a/packages/react-dnd-preview/package.json b/packages/react-dnd-preview/package.json new file mode 100644 index 00000000..1252862e --- /dev/null +++ b/packages/react-dnd-preview/package.json @@ -0,0 +1,27 @@ +{ + "name": "react-dnd-preview", + "version": "8.1.2", + "sideEffects": false, + "description": "Preview component for React DnD", + "author": "Louis Brunner (https://github.com/LouisBrunner)", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/LouisBrunner/dnd-multi-backend.git", + "directory": "packages/react-dnd-preview" + }, + "homepage": "https://louisbrunner.github.io/dnd-multi-backend/packages/react-dnd-preview/", + "keywords": ["react", "dnd", "drag", "drop", "react-dnd", "preview"], + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "module": "dist/index.js", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0", + "react-dnd": "^16.0.1" + } +} diff --git a/packages/react-dnd-preview/src/Context.ts b/packages/react-dnd-preview/src/Context.ts new file mode 100644 index 00000000..c3bf374a --- /dev/null +++ b/packages/react-dnd-preview/src/Context.ts @@ -0,0 +1,6 @@ +import {createContext} from 'react' +import type {usePreviewStateContent} from './usePreview' + +export type PreviewState = usePreviewStateContent + +export const Context = createContext(undefined) diff --git a/packages/react-dnd-preview/src/Preview.tsx b/packages/react-dnd-preview/src/Preview.tsx new file mode 100644 index 00000000..fd34c800 --- /dev/null +++ b/packages/react-dnd-preview/src/Preview.tsx @@ -0,0 +1,42 @@ +import type {JSX, ReactNode} from 'react' +import {Context, type PreviewState} from './Context' +import type {Point, PreviewPlacement} from './offsets' +import {usePreview} from './usePreview' + +export type PreviewGenerator = (state: PreviewState) => JSX.Element + +export type PreviewProps = ( + | { + children: PreviewGenerator | ReactNode + } + | { + generator: PreviewGenerator + } +) & { + placement?: PreviewPlacement + padding?: Point +} + +export const Preview = (props: PreviewProps): JSX.Element | null => { + const result = usePreview({ + placement: props.placement, + padding: props.padding, + }) + + if (!result.display) { + return null + } + const {display: _display, ...data} = result + + let child: ReactNode + if ('children' in props) { + if (typeof props.children === 'function') { + child = props.children(data) + } else { + child = props.children + } + } else { + child = props.generator(data) + } + return {child} +} diff --git a/packages/react-dnd-preview/src/__mocks__/usePreview.ts b/packages/react-dnd-preview/src/__mocks__/usePreview.ts new file mode 100644 index 00000000..dee7398f --- /dev/null +++ b/packages/react-dnd-preview/src/__mocks__/usePreview.ts @@ -0,0 +1,11 @@ +import type {usePreviewState} from '../usePreview' + +let mockReturn: usePreviewState + +export const __setMockReturn = (state: usePreviewState): void => { + mockReturn = state +} + +export const usePreview = (): usePreviewState => { + return mockReturn +} diff --git a/packages/react-dnd-preview/src/__tests__/Preview.test.tsx b/packages/react-dnd-preview/src/__tests__/Preview.test.tsx new file mode 100644 index 00000000..5b099590 --- /dev/null +++ b/packages/react-dnd-preview/src/__tests__/Preview.test.tsx @@ -0,0 +1,113 @@ +import {render, screen} from '@testing-library/react' +// FIXME: esbuild-jest is struggling in this file because of jest.mock (I think), so we need: +// - a special React import +// - @babel/preset-typescript installed (and set in a tiny babel.config.json) +import {useContext} from 'react' + +import {MockDragMonitor} from '@mocks/mocks' +import {Context, type PreviewState} from '../Context' +import {Preview, type PreviewProps} from '../Preview' +import type {usePreviewState} from '../usePreview' + +jest.mock('../usePreview') + +type DragContent = { + coucou: string +} + +type GeneratorProps = PreviewState + +const {__setMockReturn} = require('../usePreview') as { + __setMockReturn: (state: usePreviewState) => void +} + +describe('Preview subcomponent', () => { + const createComponent = (props: PreviewProps) => { + return render() + } + + const generator = ({itemType, item, style}: GeneratorProps) => { + return ( +
+ {item.coucou}: {itemType?.toString()} +
+ ) + } + + const setupTest = (props: PreviewProps): void => { + test('is null when DnD is not in progress', () => { + __setMockReturn({display: false}) + createComponent(props) + expect(screen.queryByText('dauphin: toto')).not.toBeInTheDocument() + }) + + test('is valid when DnD is in progress', () => { + __setMockReturn({ + display: true, + style: { + pointerEvents: 'none', + position: 'fixed', + top: 0, + left: 0, + transform: 'translate(1000px, 2000px)', + WebkitTransform: 'translate(1000px, 2000px)', + }, + item: {coucou: 'dauphin'}, + itemType: 'toto', + monitor: MockDragMonitor<{coucou: string}>({coucou: 'dauphin'}), + ref: {current: null}, + }) + createComponent(props) + const node = screen.queryByText('dauphin: toto') + expect(node).toBeInTheDocument() + // FIXME: toHaveStyle ignores pointer-events and WebkitTransform + // expect(node).toHaveStyle({ + // pointerEvents: 'none', + // position: 'fixed', + // top: 0, + // left: 0, + // transform: 'translate(1000px, 2000px)', + // WebkitTransform: 'translate(1000px, 2000px)', + // }) + expect(node).toHaveAttribute('style', ['pointer-events: none', 'position: fixed', 'top: 0px', 'left: 0px', 'transform: translate(1000px, 2000px);'].join('; ')) + }) + } + + describe('using generator prop', () => { + setupTest({generator}) + }) + + describe('using generator child', () => { + setupTest({children: generator}) + }) + + describe('using component child', () => { + const Child = () => { + const props = useContext(Context) + if (props === undefined) { + return null + } + // FIXME: gross + return generator(props as GeneratorProps) + } + + setupTest({ + children: , + }) + }) + + describe('using child context', () => { + setupTest({ + children: ( + + {(props?: PreviewState) => { + if (props === undefined) { + return null + } + return generator(props as GeneratorProps) + }} + + ), + }) + }) +}) diff --git a/packages/react-dnd-preview/src/__tests__/index.test.ts b/packages/react-dnd-preview/src/__tests__/index.test.ts new file mode 100644 index 00000000..123fe8f6 --- /dev/null +++ b/packages/react-dnd-preview/src/__tests__/index.test.ts @@ -0,0 +1,13 @@ +import * as Module from '../index' + +import {Context} from '../Context' +import {Preview} from '../Preview' +import {usePreview} from '../usePreview' + +describe('react-dnd-preview module', () => { + test('exports correctly', () => { + expect(Module.Preview).toBe(Preview) + expect(Module.Context).toBe(Context) + expect(Module.usePreview).toBe(usePreview) + }) +}) diff --git a/packages/react-dnd-preview/src/__tests__/usePreview.test.ts b/packages/react-dnd-preview/src/__tests__/usePreview.test.ts new file mode 100644 index 00000000..7067c35f --- /dev/null +++ b/packages/react-dnd-preview/src/__tests__/usePreview.test.ts @@ -0,0 +1,305 @@ +import {MockDragMonitor} from '@mocks/mocks' +import {__setMockMonitor} from '@mocks/react-dnd' +import {act, renderHook} from '@testing-library/react' +import type {MutableRefObject} from 'react' +import type {PreviewPlacement} from '../offsets' +import {usePreview, type usePreviewStateFull} from '../usePreview' + +const DraggingMonitor = { + isDragging() { + return true + }, + getItemType() { + return 'no' + }, + getClientOffset() { + return {x: 1, y: 2} + }, +} + +describe('usePreview hook', () => { + beforeEach(() => { + __setMockMonitor(MockDragMonitor(null)) + }) + + test('return false when DnD is not in progress (neither dragging or offset)', () => { + __setMockMonitor(MockDragMonitor(null)) + const { + result: { + current: {display}, + }, + } = renderHook(() => { + return usePreview() + }) + expect(display).toBe(false) + }) + + test('return false when DnD is not in progress (no dragging)', () => { + __setMockMonitor({ + ...MockDragMonitor(null), + getClientOffset() { + return {x: 1, y: 2} + }, + }) + const { + result: { + current: {display}, + }, + } = renderHook(() => { + return usePreview() + }) + expect(display).toBe(false) + }) + + test('return false when DnD is not in progress (no offset)', () => { + __setMockMonitor({ + ...MockDragMonitor(null), + isDragging() { + return true + }, + }) + const { + result: { + current: {display}, + }, + } = renderHook(() => { + return usePreview() + }) + expect(display).toBe(false) + }) + + test('return true and data when DnD is in progress', () => { + __setMockMonitor({ + ...MockDragMonitor<{bluh: string}>({bluh: 'fake'}), + ...DraggingMonitor, + }) + const {result} = renderHook(() => { + return usePreview() as usePreviewStateFull + }) + const { + current: {display, monitor: _monitor, ref, ...rest}, + } = result + expect(display).toBe(true) + expect(ref).not.toBeNull() + expect(rest).toEqual({ + item: {bluh: 'fake'}, + itemType: 'no', + style: { + pointerEvents: 'none', + position: 'fixed', + left: 0, + top: 0, + WebkitTransform: 'translate(1.0px, 2.0px)', + transform: 'translate(1.0px, 2.0px)', + }, + }) + }) + + test('return true and data when DnD is in progress (with parent offset)', () => { + __setMockMonitor({ + ...MockDragMonitor<{bluh: string}>({bluh: 'fake'}), + ...DraggingMonitor, + getInitialClientOffset() { + return {x: 1, y: 2} + }, + getInitialSourceClientOffset() { + return {x: 0, y: 1} + }, + }) + const {result} = renderHook(() => { + return usePreview() as usePreviewStateFull + }) + const { + current: {display, monitor: _monitor, ref, ...rest}, + } = result + expect(display).toBe(true) + expect(ref).not.toBeNull() + expect(rest).toEqual({ + item: {bluh: 'fake'}, + itemType: 'no', + style: { + pointerEvents: 'none', + position: 'fixed', + left: 0, + top: 0, + WebkitTransform: 'translate(0.0px, 1.0px)', + transform: 'translate(0.0px, 1.0px)', + }, + }) + }) + + test('return true and data when DnD is in progress (with ref)', async () => { + __setMockMonitor({ + ...MockDragMonitor<{bluh: string}>({bluh: 'fake'}), + ...DraggingMonitor, + getInitialClientOffset() { + return {x: 1, y: 2} + }, + }) + const {result, rerender} = renderHook(() => { + return usePreview() as usePreviewStateFull + }) + const { + current: {display, monitor: _monitor, ref, ...rest}, + } = result + expect(display).toBe(true) + expect(ref).not.toBeNull() + expect(rest).toEqual({ + item: {bluh: 'fake'}, + itemType: 'no', + style: { + pointerEvents: 'none', + position: 'fixed', + left: 0, + top: 0, + WebkitTransform: 'translate(1.0px, 2.0px)', + transform: 'translate(1.0px, 2.0px)', + }, + }) + await act(() => { + // FIXME: not great... + ;(ref as MutableRefObject).current = { + ...document.createElement('div'), + getBoundingClientRect() { + return { + width: 100, + height: 70, + x: 0, + y: 0, + bottom: 0, + left: 0, + right: 0, + top: 0, + toJSON() {}, + } + }, + } + }) + rerender() + const { + current: {display: _display, monitor: _monitor2, ref: _ref, ...rest2}, + } = result + expect(rest2).toEqual({ + item: {bluh: 'fake'}, + itemType: 'no', + style: { + pointerEvents: 'none', + position: 'fixed', + left: 0, + top: 0, + WebkitTransform: 'translate(-49.0px, -33.0px)', + transform: 'translate(-49.0px, -33.0px)', + }, + }) + }) + + const cases: {placement?: PreviewPlacement; expectedTransform: string}[] = [ + { + expectedTransform: 'translate(-49.0px, -33.0px)', + }, + { + placement: 'center', + expectedTransform: 'translate(-49.0px, -33.0px)', + }, + { + placement: 'top', + expectedTransform: 'translate(-49.0px, 2.0px)', + }, + { + placement: 'top-start', + expectedTransform: 'translate(1.0px, 2.0px)', + }, + { + placement: 'top-end', + expectedTransform: 'translate(-99.0px, 2.0px)', + }, + { + placement: 'bottom', + expectedTransform: 'translate(-49.0px, -68.0px)', + }, + { + placement: 'bottom-start', + expectedTransform: 'translate(1.0px, -68.0px)', + }, + { + placement: 'bottom-end', + expectedTransform: 'translate(-99.0px, -68.0px)', + }, + { + placement: 'left', + expectedTransform: 'translate(1.0px, -33.0px)', + }, + { + placement: 'right', + expectedTransform: 'translate(-99.0px, -33.0px)', + }, + ] + + test.each(cases)('return true and data when DnD is in progress (with ref, parent offset and placement $placement)', async ({placement, expectedTransform}) => { + __setMockMonitor({ + ...MockDragMonitor<{bluh: string}>({bluh: 'fake'}), + ...DraggingMonitor, + getInitialClientOffset() { + return {x: 1, y: 2} + }, + getInitialSourceClientOffset() { + return {x: 0, y: 1} + }, + }) + const {result, rerender} = renderHook(() => { + return usePreview({placement}) as usePreviewStateFull + }) + const { + current: {display, monitor: _monitor, ref, ...rest}, + } = result + expect(display).toBe(true) + expect(ref).not.toBeNull() + expect(rest).toEqual({ + item: {bluh: 'fake'}, + itemType: 'no', + style: { + pointerEvents: 'none', + position: 'fixed', + left: 0, + top: 0, + WebkitTransform: 'translate(0.0px, 1.0px)', + transform: 'translate(0.0px, 1.0px)', + }, + }) + await act(() => { + // FIXME: not great... + ;(ref as MutableRefObject).current = { + ...document.createElement('div'), + getBoundingClientRect() { + return { + width: 100, + height: 70, + x: 0, + y: 0, + bottom: 0, + left: 0, + right: 0, + top: 0, + toJSON() {}, + } + }, + } + }) + rerender({placement}) + const { + current: {display: _display, monitor: _monitor2, ref: _ref, ...rest2}, + } = result + expect(rest2).toEqual({ + item: {bluh: 'fake'}, + itemType: 'no', + style: { + pointerEvents: 'none', + position: 'fixed', + left: 0, + top: 0, + WebkitTransform: expectedTransform, + transform: expectedTransform, + }, + }) + }) +}) diff --git a/packages/react-dnd-preview/src/index.ts b/packages/react-dnd-preview/src/index.ts new file mode 100644 index 00000000..e5026ee5 --- /dev/null +++ b/packages/react-dnd-preview/src/index.ts @@ -0,0 +1,7 @@ +export {Preview} from './Preview' +export type {PreviewProps, PreviewGenerator} from './Preview' +export {usePreview} from './usePreview' +export type {PreviewPlacement, Point} from './offsets' +export type {usePreviewState, usePreviewStateContent, usePreviewOptions} from './usePreview' +export {Context} from './Context' +export type {PreviewState} from './Context' diff --git a/packages/react-dnd-preview/src/offsets.ts b/packages/react-dnd-preview/src/offsets.ts new file mode 100644 index 00000000..0a4b4f95 --- /dev/null +++ b/packages/react-dnd-preview/src/offsets.ts @@ -0,0 +1,88 @@ +import type {RefObject} from 'react' +import type {DragLayerMonitor} from 'react-dnd' + +// Reminder: +// getInitialClientOffset: clientX/clientY when drag started +// getInitialSourceClientOffset: parent top/left bounding box when drag started +// getClientOffset: current clientX/clientY +// getSourceClientOffset: difference between parent top/left and current clientX/clientY +// = (getClientOffset + getInitialSourceClientOffset) - getInitialClientOffset +// getDifferenceFromInitialOffset: difference between clientX/clientY when drag started and current one + +export type Point = { + x: number + y: number +} + +export type PreviewPlacement = 'center' | 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right' + +const subtract = (a: Point, b: Point): Point => { + return { + x: a.x - b.x, + y: a.y - b.y, + } +} + +const add = (a: Point, b: Point): Point => { + return { + x: a.x + b.x, + y: a.y + b.y, + } +} + +const calculateParentOffset = (monitor: DragLayerMonitor): Point => { + const client = monitor.getInitialClientOffset() + const source = monitor.getInitialSourceClientOffset() + if (client === null || source === null) { + return {x: 0, y: 0} + } + return subtract(client, source) +} + +const calculateXOffset = (placement: PreviewPlacement, bb: DOMRect): number => { + switch (placement) { + case 'left': + case 'top-start': + case 'bottom-start': + return 0 + case 'right': + case 'top-end': + case 'bottom-end': + return bb.width + default: + return bb.width / 2 + } +} + +const calculateYOffset = (placement: PreviewPlacement, bb: DOMRect): number => { + switch (placement) { + case 'top': + case 'top-start': + case 'top-end': + return 0 + case 'bottom': + case 'bottom-start': + case 'bottom-end': + return bb.height + default: + return bb.height / 2 + } +} + +export const calculatePointerPosition = (monitor: DragLayerMonitor, childRef: RefObject, placement: PreviewPlacement = 'center', padding: Point = {x: 0, y: 0}): Point | null => { + const offset = monitor.getClientOffset() + if (offset === null) { + return null + } + + // If we don't have a reference to a valid child, use the default offset: + // current cursor - initial parent/drag source offset + if (!childRef.current || !childRef.current.getBoundingClientRect) { + return subtract(offset, calculateParentOffset(monitor)) + } + + const bb = childRef.current.getBoundingClientRect() + const previewOffset = {x: calculateXOffset(placement, bb), y: calculateYOffset(placement, bb)} + + return add(subtract(offset, previewOffset), padding) +} diff --git a/packages/react-dnd-preview/src/usePreview.ts b/packages/react-dnd-preview/src/usePreview.ts new file mode 100644 index 00000000..89dd6b7d --- /dev/null +++ b/packages/react-dnd-preview/src/usePreview.ts @@ -0,0 +1,59 @@ +import type {Identifier} from 'dnd-core' +import {type CSSProperties, type MutableRefObject, useRef} from 'react' +import {type DragLayerMonitor, useDragLayer} from 'react-dnd' +import {type Point, type PreviewPlacement, calculatePointerPosition} from './offsets' + +const getStyle = (currentOffset: Point): CSSProperties => { + const transform = `translate(${currentOffset.x.toFixed(1)}px, ${currentOffset.y.toFixed(1)}px)` + return { + pointerEvents: 'none', + position: 'fixed', + top: 0, + left: 0, + transform, + WebkitTransform: transform, + } +} + +export type usePreviewState = {display: false} | usePreviewStateFull + +export type usePreviewStateFull = {display: true} & usePreviewStateContent + +export type usePreviewStateContent = { + ref: MutableRefObject + itemType: Identifier | null + item: T + style: CSSProperties + monitor: DragLayerMonitor +} + +export type usePreviewOptions = { + placement?: PreviewPlacement + padding?: Point +} + +export const usePreview = (options?: usePreviewOptions): usePreviewState => { + const child = useRef(null) + const collectedProps = useDragLayer((monitor: DragLayerMonitor) => { + return { + currentOffset: calculatePointerPosition(monitor, child, options?.placement, options?.padding), + isDragging: monitor.isDragging(), + itemType: monitor.getItemType(), + item: monitor.getItem(), + monitor, + } + }) + + if (!collectedProps.isDragging || collectedProps.currentOffset === null) { + return {display: false} + } + + return { + display: true, + itemType: collectedProps.itemType, + item: collectedProps.item, + style: getStyle(collectedProps.currentOffset), + monitor: collectedProps.monitor, + ref: child, + } +} diff --git a/packages/react-dnd-preview/tsconfig.json b/packages/react-dnd-preview/tsconfig.json new file mode 100644 index 00000000..e40c8697 --- /dev/null +++ b/packages/react-dnd-preview/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.build.json", + "include": ["src/**/*.ts*"] +} diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..a208a6b2 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true + }, + "exclude": ["node_modules", "**/__tests__/**/*", "**/__mocks__/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..4e505a3d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "es2020", + "module": "esnext", + "moduleResolution": "node", + "lib": ["dom", "dom.iterable", "esnext"], + "jsx": "react-jsx", + "strict": true, + "allowJs": false, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveConstEnums": true, + "paths": { + "@mocks/*": ["__mocks__/*"], + "dnd-multi-backend": ["packages/dnd-multi-backend/src"], + "rdndmb-html5-to-touch": ["packages/rdndmb-html5-to-touch/src"], + "react-dnd-preview": ["packages/react-dnd-preview/src"] + }, + "skipLibCheck": true + }, + "include": [".jest-setup.ts", "__mocks__/**/*.ts", "packages/*/examples/**/*.ts*", "packages/*/src/**/*.ts*"], + "exclude": ["node_modules"] +}