diff --git a/apps/docs/package.json b/apps/docs/package.json index 78e030da..62226341 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -13,12 +13,14 @@ "@dnd-kit/dom": "*", "@dnd-kit/react": "*", "@dnd-kit/state-management": "*", + "@tanstack/react-virtual": "^3.0.0-beta.54", "prismjs": "^1.29.0", "clipboard": "^2.0.11", "react": "^18.2.0", "react-dom": "^18.2.0", "use-pan-and-zoom": "^0.6.5", - "@tanstack/react-virtual": "^3.0.0-beta.54" + "react-tiny-virtual-list": "^2.2.0", + "react-window": "1.8.9" }, "devDependencies": { "@dnd-kit/abstract": "*", diff --git a/apps/docs/stories/react/Sortable/MultipleContainers/docs/MultipleLists.mdx b/apps/docs/stories/react/Sortable/MultipleContainers/docs/MultipleLists.mdx deleted file mode 100644 index c1d83b8c..00000000 --- a/apps/docs/stories/react/Sortable/MultipleContainers/docs/MultipleLists.mdx +++ /dev/null @@ -1,21 +0,0 @@ -import {Code, Preview} from '../../../../components'; - -import {MultipleLists} from '../MultipleLists.tsx'; - -# Multiple lists - -Reorder sortable elements across multiple lists. - - -
- -
-
diff --git a/apps/docs/stories/react/Sortable/MultipleContainers/MultipleLists.stories.tsx b/apps/docs/stories/react/Sortable/MultipleLists/MultipleLists.stories.tsx similarity index 100% rename from apps/docs/stories/react/Sortable/MultipleContainers/MultipleLists.stories.tsx rename to apps/docs/stories/react/Sortable/MultipleLists/MultipleLists.stories.tsx diff --git a/apps/docs/stories/react/Sortable/MultipleContainers/MultipleLists.tsx b/apps/docs/stories/react/Sortable/MultipleLists/MultipleLists.tsx similarity index 99% rename from apps/docs/stories/react/Sortable/MultipleContainers/MultipleLists.tsx rename to apps/docs/stories/react/Sortable/MultipleLists/MultipleLists.tsx index b2e8af7b..296d1097 100644 --- a/apps/docs/stories/react/Sortable/MultipleContainers/MultipleLists.tsx +++ b/apps/docs/stories/react/Sortable/MultipleLists/MultipleLists.tsx @@ -166,7 +166,7 @@ function SortableItem({ style={style} transitionId={`sortable-${column}-${id}`} > - {id} {index} + {id} ); } diff --git a/apps/docs/stories/react/Sortable/MultipleLists/docs/MultipleLists.mdx b/apps/docs/stories/react/Sortable/MultipleLists/docs/MultipleLists.mdx new file mode 100644 index 00000000..6bc67e78 --- /dev/null +++ b/apps/docs/stories/react/Sortable/MultipleLists/docs/MultipleLists.mdx @@ -0,0 +1,42 @@ +import {Code, Preview} from '../../../../components'; + +import {MultipleLists} from '../MultipleLists.tsx'; +import {Example} from './examples/QuickStart'; +import ExampleSource from './examples/QuickStart?raw'; +import ColumnSource from './examples/Column?raw'; +import ItemSource from './examples/Item?raw'; + +# Multiple lists + +Reorder sortable elements across multiple lists. + + +
+ +
+
+ +## Installation + +Before getting started, make sure to install the `@dnd-kit/react` package: + +```bash +npm install @dnd-kit/react +``` + +## Getting started + + + + diff --git a/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/Column.jsx b/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/Column.jsx new file mode 100644 index 00000000..728123ff --- /dev/null +++ b/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/Column.jsx @@ -0,0 +1,28 @@ +import React from 'react'; +import {useDroppable} from '@dnd-kit/react'; +import {CollisionPriority} from '@dnd-kit/abstract'; + +const styles = { + display: 'flex', + flexDirection: 'column', + gap: 10, + padding: 20, + minWidth: 200, + backgroundColor: 'rgba(0,0,0,0.1)', + borderRadius: 10, +}; + +export function Column({children, id}) { + const {ref} = useDroppable({ + id, + type: 'column', + accept: ['item'], + collisionPriority: CollisionPriority.Low, + }); + + return ( +
+ {children} +
+ ); +} diff --git a/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/Item.jsx b/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/Item.jsx new file mode 100644 index 00000000..865d6e45 --- /dev/null +++ b/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/Item.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import {useSortable} from '@dnd-kit/react/sortable'; + +export function Item({id, index}) { + const {ref} = useSortable({id, index, type: 'item', accept: ['item']}); + + return ( + + ); +} diff --git a/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/QuickStart.jsx b/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/QuickStart.jsx new file mode 100644 index 00000000..9b310e7f --- /dev/null +++ b/apps/docs/stories/react/Sortable/MultipleLists/docs/examples/QuickStart.jsx @@ -0,0 +1,38 @@ +import React, {useState} from 'react'; +import {DragDropProvider} from '@dnd-kit/react'; +import {move} from '@dnd-kit/state-management'; + +import {Column} from './Column'; +import {Item} from './Item'; + +const styles = {display: 'inline-flex', flexDirection: 'row', gap: 20}; + +export function Example({style = styles}) { + const [items, setItems] = useState({ + A: ['A0', 'A1', 'A2'], + B: ['B0', 'B1'], + C: [], + }); + + return ( + { + const {source, target} = event.operation; + + if (source && target) { + setItems((items) => move(items, source, target)); + } + }} + > +
+ {Object.entries(items).map(([column, items]) => ( + + {items.map((id, index) => ( + + ))} + + ))} +
+
+ ); +} diff --git a/apps/docs/stories/react/Sortable/Virtualized/ReactTinyVirtualListExample.tsx b/apps/docs/stories/react/Sortable/Virtualized/ReactTinyVirtualListExample.tsx new file mode 100644 index 00000000..c0e7fe14 --- /dev/null +++ b/apps/docs/stories/react/Sortable/Virtualized/ReactTinyVirtualListExample.tsx @@ -0,0 +1,83 @@ +import React, {useRef, useState} from 'react'; +import type {UniqueIdentifier} from '@dnd-kit/abstract'; +import {DragDropProvider} from '@dnd-kit/react'; +import {useSortable} from '@dnd-kit/react/sortable'; +import {defaultPreset} from '@dnd-kit/dom'; +import {Debug} from '@dnd-kit/dom/plugins/debug'; +import {move} from '@dnd-kit/state-management'; +import VirtualList from 'react-tiny-virtual-list'; + +import {Item, Handle} from '../../components'; +import {createRange, cloneDeep} from '../../../utilities'; + +interface Props { + debug?: boolean; +} + +export function ReactTinyVirtualListExample({debug}: Props) { + const [items, setItems] = useState(createRange(1000)); + const snapshot = useRef(cloneDeep(items)); + + return ( + { + snapshot.current = cloneDeep(items); + }} + onDragOver={(event) => { + const {source, target} = event.operation; + + if (!source || !target) { + return; + } + + setItems((items) => move(items, source, target)); + }} + onDragEnd={(event) => { + if (event.canceled) { + setItems(snapshot.current); + } + }} + > + { + const id = items[index]; + + return ; + }} + /> + + ); +} + +interface SortableProps { + id: UniqueIdentifier; + index: number; + style: React.CSSProperties; +} + +function Sortable({id, index, style}: SortableProps) { + const {isDragSource, ref, handleRef} = useSortable({ + id, + index, + }); + + return ( +
+ } + data-index={index} + shadow={isDragSource} + > + {id} + +
+ ); +} diff --git a/apps/docs/stories/react/Sortable/Virtualized/ReactVirtualExample.tsx b/apps/docs/stories/react/Sortable/Virtualized/ReactVirtualExample.tsx index 783d798c..5c932319 100644 --- a/apps/docs/stories/react/Sortable/Virtualized/ReactVirtualExample.tsx +++ b/apps/docs/stories/react/Sortable/Virtualized/ReactVirtualExample.tsx @@ -24,7 +24,7 @@ export function ReactVirtualExample({debug}: Props) { const virtualizer = useWindowVirtualizer({ count: items.length, - estimateSize: () => 62, + estimateSize: () => 72, scrollMargin: parentOffsetRef.current, getItemKey: (index) => items[index], }); diff --git a/apps/docs/stories/react/Sortable/Virtualized/ReactWindowExample.tsx b/apps/docs/stories/react/Sortable/Virtualized/ReactWindowExample.tsx new file mode 100644 index 00000000..d8396f55 --- /dev/null +++ b/apps/docs/stories/react/Sortable/Virtualized/ReactWindowExample.tsx @@ -0,0 +1,101 @@ +import React, {useRef, useEffect, useState} from 'react'; +import type {UniqueIdentifier} from '@dnd-kit/abstract'; +import {DragDropProvider} from '@dnd-kit/react'; +import {useSortable} from '@dnd-kit/react/sortable'; +import {defaultPreset} from '@dnd-kit/dom'; +import {Debug} from '@dnd-kit/dom/plugins/debug'; +import {move} from '@dnd-kit/state-management'; +import {FixedSizeList as List} from 'react-window'; + +import {Item, Handle} from '../../components'; +import {createRange, cloneDeep} from '../../../utilities'; + +interface Props { + debug?: boolean; +} + +export function ReactWindowExample({debug}: Props) { + const [items, setItems] = useState(createRange(1000)); + const snapshot = useRef(cloneDeep(items)); + + return ( + { + snapshot.current = cloneDeep(items); + }} + onDragOver={(event) => { + const {source, target} = event.operation; + + if (!source || !target) { + return; + } + + setItems((items) => move(items, source, target)); + }} + onDragEnd={(event) => { + if (event.canceled) { + setItems(snapshot.current); + } + }} + > + items[index]} + style={{margin: '0 auto'}} + > + {Row} + + + ); +} + +function Row({ + data, + index, + style, +}: { + data: UniqueIdentifier[]; + index: number; + style: React.CSSProperties; +}) { + return ; +} + +interface SortableProps { + id: UniqueIdentifier; + index: number; + style: React.CSSProperties; +} + +function Sortable({id, index, style}: SortableProps) { + const {isDragSource, ref, handleRef} = useSortable({ + id, + index, + }); + + useEffect(() => { + return () => { + console.log('unmount', id); + }; + }, [id]); + + return ( +
+ } + data-index={index} + shadow={isDragSource} + > + {id} + +
+ ); +} diff --git a/apps/docs/stories/react/Sortable/Virtualized/Virtualized.stories.tsx b/apps/docs/stories/react/Sortable/Virtualized/Virtualized.stories.tsx index bd5b84e8..a9df9454 100644 --- a/apps/docs/stories/react/Sortable/Virtualized/Virtualized.stories.tsx +++ b/apps/docs/stories/react/Sortable/Virtualized/Virtualized.stories.tsx @@ -1,18 +1,27 @@ import type {Meta, StoryObj} from '@storybook/react'; +import {ReactWindowExample} from './ReactWindowExample'; import {ReactVirtualExample} from './ReactVirtualExample'; +import {ReactTinyVirtualListExample} from './ReactTinyVirtualListExample'; const meta: Meta = { title: 'React/Sortable/Virtualized', - component: ReactVirtualExample, }; export default meta; type Story = StoryObj; +export const ReactWindow: Story = { + name: 'react-window', + render: ReactWindowExample, +}; + +export const ReactTinyVirtualList: Story = { + name: 'react-tiny-virtual-list', + render: ReactTinyVirtualListExample, +}; + export const ReactVirtual: Story = { name: 'react-virtual', - args: { - debug: false, - }, + render: ReactVirtualExample, }; diff --git a/packages/dom/src/core/entities/droppable/droppable.ts b/packages/dom/src/core/entities/droppable/droppable.ts index 6a99ab61..47a92432 100644 --- a/packages/dom/src/core/entities/droppable/droppable.ts +++ b/packages/dom/src/core/entities/droppable/droppable.ts @@ -34,11 +34,10 @@ export class Droppable extends AbstractDroppable { const {destroy} = this; - this.refreshShape = this.refreshShape.bind(this); - this.internal = { element: signal(element), }; + this.refreshShape = this.refreshShape.bind(this); /* * If a droppable target mounts during a drag operation, assume it is visible @@ -144,7 +143,7 @@ export class Droppable extends AbstractDroppable { } public get element() { - return this.placeholder ?? this.internal.element.value; + return this.placeholder ?? this.internal?.element.value; } public refreshShape(ignoreTransform?: boolean): Shape | undefined { diff --git a/packages/dom/src/core/plugins/feedback/Feedback.css b/packages/dom/src/core/plugins/feedback/Feedback.css index acab3f87..d3141204 100644 --- a/packages/dom/src/core/plugins/feedback/Feedback.css +++ b/packages/dom/src/core/plugins/feedback/Feedback.css @@ -17,6 +17,12 @@ translate: var(--dnd-kit-feedback-translate) !important; } +[data-dnd-kit-feedback][popover] { + background: var(--dnd-kit-feedback-background, inherit) !important; + border: var(--dnd-kit-feedback-border, inherit) !important; + overflow: visible; +} + [data-dnd-kit-feedback]::backdrop { display: none } diff --git a/packages/dom/src/core/plugins/feedback/Feedback.ts b/packages/dom/src/core/plugins/feedback/Feedback.ts index 66102b17..4acabbd9 100644 --- a/packages/dom/src/core/plugins/feedback/Feedback.ts +++ b/packages/dom/src/core/plugins/feedback/Feedback.ts @@ -6,6 +6,7 @@ import { DOMRectangle, getWindow, isKeyboardEvent, + showPopover, supportsPopover, supportsStyle, Styles, @@ -30,6 +31,7 @@ export class Feedback extends Plugin { let initialCoordinates: Coordinates | undefined; let currentTransform: Transform | undefined; let transformOrigin: Coordinates | undefined; + let moved = false; const styleInjectionCleanup = effect(() => { if (!style && manager.dragOperation.status.initialized) { @@ -49,6 +51,7 @@ export class Feedback extends Plugin { initialCoordinates = undefined; currentTransform = undefined; transformOrigin = undefined; + moved = false; return; } @@ -61,7 +64,7 @@ export class Feedback extends Plugin { const shape = new DOMRectangle(element, true); const {width, height, top, left} = shape; const styles = new Styles(element); - const {padding, margin, transition} = + const {border, background, padding, margin, transition} = getWindow(element).getComputedStyle(element); const droppable = manager.registry.droppables.get(source.id); const clone = feedback === 'clone'; @@ -94,7 +97,6 @@ export class Feedback extends Plugin { left: left + delta.x, }; - element.parentElement?.insertBefore(placeholder, element); element.setAttribute(ATTRIBUTE, ''); styles.set( { @@ -102,18 +104,27 @@ export class Feedback extends Plugin { height: height, top: projected.top, left: projected.left, - padding: padding, - margin: margin, + padding, + margin, + border, + background, + translate: currentTransform + ? `${currentTransform.x}px ${currentTransform.y}px 0` + : '', }, CSS_PREFIX ); + element.parentElement?.insertBefore( + placeholder, + element.nextElementSibling + ); if (supportsPopover(element)) { element.setAttribute('popover', ''); - element.showPopover(); + showPopover(element); } - const actual = new DOMRectangle(element); + const actual = new DOMRectangle(element, true); const offset = { top: projected.top - actual.top, left: projected.left - actual.left, @@ -212,15 +223,13 @@ export class Feedback extends Plugin { for (const entry of entries) { if (Array.from(entry.addedNodes).includes(element)) { /* Update the position of the placeholder when the source element is moved */ - entry.target.insertBefore(placeholder, element); - - if (supportsPopover(element)) { - /* - * Any update in DOM order that affects the source element hide the popover - * so we need to force the source element to be promoted to the top layer again - */ - element.showPopover(); - } + entry.target.insertBefore(placeholder, element.nextElementSibling); + + /* + * Any update in DOM order that affects the source element hide the popover + * so we need to force the source element to be promoted to the top layer again + */ + showPopover(element); } } }); @@ -232,8 +241,6 @@ export class Feedback extends Plugin { }); } - let moved = false; - const cleanupEffect = effect(function updateTransform() { const {transform, status} = dragOperation; const {x, y} = transform; @@ -309,10 +316,8 @@ export class Feedback extends Plugin { } manager.renderer.rendering.then(() => { - if (supportsPopover(element)) { - /* Force the source element to be promoted to the top layer before animating it */ - element.showPopover(); - } + /* Force the source element to be promoted to the top layer before animating it */ + showPopover(element); const shape = new DOMRectangle(placeholder, true); const currentShape = new DOMRectangle(element, true).translate( diff --git a/packages/dom/src/core/plugins/feedback/Overlay.css b/packages/dom/src/core/plugins/feedback/Overlay.css index 7a286fb8..859fa3af 100644 --- a/packages/dom/src/core/plugins/feedback/Overlay.css +++ b/packages/dom/src/core/plugins/feedback/Overlay.css @@ -1,5 +1,4 @@ [data-dnd-kit-overlay] { - all: initial; position: fixed; pointer-events: none; touch-action: none; @@ -10,7 +9,8 @@ [data-dnd-kit-overlay] > * { width: 100%; height: 100%; - margin: 0; + inset: 0 !important; + margin: 0 !important; } dialog[data-dnd-kit-overlay]::backdrop { diff --git a/packages/dom/src/sortable/sortable.ts b/packages/dom/src/sortable/sortable.ts index 922ab577..611b3937 100644 --- a/packages/dom/src/sortable/sortable.ts +++ b/packages/dom/src/sortable/sortable.ts @@ -140,6 +140,7 @@ export class Sortable { const {idle} = manager.dragOperation.status; if (!shape || !transition || (idle && !transition.idle)) { + console.log('animate'); return; } @@ -164,6 +165,8 @@ export class Sortable { }; if (delta.x || delta.y) { + console.log('animate'); + animateTransform({ element, keyframes: { diff --git a/packages/dom/src/utilities/element/createPlaceholder.ts b/packages/dom/src/utilities/element/createPlaceholder.ts index 7264d407..19dc6ec4 100644 --- a/packages/dom/src/utilities/element/createPlaceholder.ts +++ b/packages/dom/src/utilities/element/createPlaceholder.ts @@ -4,11 +4,11 @@ import {supportsStyle} from '../type-guards/supportsStyle.js'; export function createPlaceholder(element: Element, clone = false): Element { const placeholder = cloneElement(element); - // if (supportsStyle(placeholder)) { - // if (!clone) { - // placeholder.style.setProperty('opacity', '0'); - // } - // } + if (supportsStyle(placeholder)) { + if (!clone) { + placeholder.style.setProperty('opacity', '0'); + } + } placeholder.setAttribute('tab-index', '-1'); placeholder.setAttribute('aria-hidden', 'true'); diff --git a/packages/dom/src/utilities/index.ts b/packages/dom/src/utilities/index.ts index 28c80263..ce458a3f 100644 --- a/packages/dom/src/utilities/index.ts +++ b/packages/dom/src/utilities/index.ts @@ -9,6 +9,8 @@ export {cloneElement, createPlaceholder} from './element/index.js'; export {Listeners} from './event-listeners/index.js'; +export {showPopover, supportsPopover} from './popover/index.js'; + export { canScroll, detectScrollIntent, @@ -27,7 +29,6 @@ export {Styles} from './styles/index.js'; export { supportsViewTransition, - supportsPopover, supportsStyle, isKeyboardEvent, } from './type-guards/index.js'; diff --git a/packages/dom/src/utilities/popover/index.ts b/packages/dom/src/utilities/popover/index.ts new file mode 100644 index 00000000..8464f221 --- /dev/null +++ b/packages/dom/src/utilities/popover/index.ts @@ -0,0 +1,2 @@ +export {showPopover} from './showPopover.js'; +export {supportsPopover} from './supportsPopover.js'; diff --git a/packages/dom/src/utilities/popover/showPopover.ts b/packages/dom/src/utilities/popover/showPopover.ts new file mode 100644 index 00000000..7dbf96c3 --- /dev/null +++ b/packages/dom/src/utilities/popover/showPopover.ts @@ -0,0 +1,7 @@ +import {supportsPopover} from './supportsPopover.js'; + +export function showPopover(element: Element) { + if (supportsPopover(element) && element.isConnected) { + element.showPopover(); + } +} diff --git a/packages/dom/src/utilities/type-guards/supportsPopover.ts b/packages/dom/src/utilities/popover/supportsPopover.ts similarity index 100% rename from packages/dom/src/utilities/type-guards/supportsPopover.ts rename to packages/dom/src/utilities/popover/supportsPopover.ts diff --git a/packages/dom/src/utilities/type-guards/index.ts b/packages/dom/src/utilities/type-guards/index.ts index 211d9e2b..04738d77 100644 --- a/packages/dom/src/utilities/type-guards/index.ts +++ b/packages/dom/src/utilities/type-guards/index.ts @@ -5,5 +5,4 @@ export {isNode} from './isNode.js'; export {isSVGElement} from './isSVGElement.js'; export {isWindow} from './isWindow.js'; export {supportsViewTransition} from './supportsViewTransition.js'; -export {supportsPopover} from './supportsPopover.js'; export {supportsStyle} from './supportsStyle.js'; diff --git a/yarn.lock b/yarn.lock index ff13036c..6732237b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1042,6 +1042,13 @@ core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" +"@babel/runtime@^7.0.0": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" + integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.10.2", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.9", "@babel/runtime@^7.5.5": version "7.18.9" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" @@ -3050,14 +3057,14 @@ "@tanstack/react-virtual@^3.0.0-beta.54": version "3.0.0-beta.54" - resolved "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.0.0-beta.54.tgz" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.0.0-beta.54.tgz#755979455adf13f2584937204a3f38703e446037" integrity sha512-D1mDMf4UPbrtHRZZriCly5bXTBMhylslm4dhcHqTtDJ6brQcgGmk8YD9JdWBGWfGSWPKoh2x1H3e7eh+hgPXtQ== dependencies: "@tanstack/virtual-core" "3.0.0-beta.54" "@tanstack/virtual-core@3.0.0-beta.54": version "3.0.0-beta.54" - resolved "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0-beta.54.tgz" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.0.0-beta.54.tgz#12259d007911ad9fce1388385c54a9141f4ecdc4" integrity sha512-jtkwqdP2rY2iCCDVAFuaNBH3fiEi29aTn2RhtIoky8DTTiCdc48plpHHreLwmv1PICJ4AJUUESaq3xa8fZH8+g== "@types/babel__core@^7.0.0": @@ -6747,6 +6754,11 @@ media-typer@0.3.0: resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +"memoize-one@>=3.1.1 <6": + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + memoizerific@^1.11.3: version "1.11.3" resolved "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz" @@ -7522,7 +7534,7 @@ prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.5.7, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7750,6 +7762,21 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" +react-tiny-virtual-list@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/react-tiny-virtual-list/-/react-tiny-virtual-list-2.2.0.tgz#eafb6fcf764e4ed41150ff9752cdaad8b35edf4a" + integrity sha512-MDiy2xyqfvkWrRiQNdHFdm36lfxmcLLKuYnUqcf9xIubML85cmYCgzBJrDsLNZ3uJQ5LEHH9BnxGKKSm8+C0Bw== + dependencies: + prop-types "^15.5.7" + +react-window@1.8.9: + version "1.8.9" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.9.tgz#24bc346be73d0468cdf91998aac94e32bc7fa6a8" + integrity sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q== + dependencies: + "@babel/runtime" "^7.0.0" + memoize-one ">=3.1.1 <6" + react@^18.1.0, react@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" @@ -7866,6 +7893,11 @@ regenerator-runtime@^0.13.4: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regenerator-transform@^0.15.2: version "0.15.2" resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz"