diff --git a/packages/dflex-dnd-playground/package.json b/packages/dflex-dnd-playground/package.json index 7fee97644..a03e3a107 100644 --- a/packages/dflex-dnd-playground/package.json +++ b/packages/dflex-dnd-playground/package.json @@ -12,6 +12,7 @@ "@dflex/dnd": "workspace:^3.9.4" }, "devDependencies": { + "dflex-e2e-utils": "workspace:^1.0.0", "cypress": "^13.2.0", "eslint": "^8.49.0", "eslint-config-dflex-react": "workspace:*", diff --git a/packages/dflex-dnd-playground/tests/core/cases/consistency.spec.ts b/packages/dflex-dnd-playground/tests/core/cases/consistency.spec.ts index 16ab6885f..00baf1cf5 100644 --- a/packages/dflex-dnd-playground/tests/core/cases/consistency.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/cases/consistency.spec.ts @@ -14,7 +14,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Moves out, goes back to the same position, settles in, moves another element", async () => { diff --git a/packages/dflex-dnd-playground/tests/core/cases/orphan.outList.spec.ts b/packages/dflex-dnd-playground/tests/core/cases/orphan.outList.spec.ts index 915b2ed52..a3d950602 100644 --- a/packages/dflex-dnd-playground/tests/core/cases/orphan.outList.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/cases/orphan.outList.spec.ts @@ -11,7 +11,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Orphan dragged won't break", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/core/cases/outContainer.threshold.spec.ts b/packages/dflex-dnd-playground/tests/core/cases/outContainer.threshold.spec.ts index f43705ea5..59d5e90af 100644 --- a/packages/dflex-dnd-playground/tests/core/cases/outContainer.threshold.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/cases/outContainer.threshold.spec.ts @@ -13,7 +13,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Moves the element above the container testing threshold for coming back", async () => { diff --git a/packages/dflex-dnd-playground/tests/core/newPosition/continuity.multiPositions.spec.ts b/packages/dflex-dnd-playground/tests/core/newPosition/continuity.multiPositions.spec.ts index a960dad61..7466e9ee1 100644 --- a/packages/dflex-dnd-playground/tests/core/newPosition/continuity.multiPositions.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/newPosition/continuity.multiPositions.spec.ts @@ -14,7 +14,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Drag and release multiples positions", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/core/newPosition/continuity.noRelease.spec.ts b/packages/dflex-dnd-playground/tests/core/newPosition/continuity.noRelease.spec.ts index 755227147..11a4419ee 100644 --- a/packages/dflex-dnd-playground/tests/core/newPosition/continuity.noRelease.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/newPosition/continuity.noRelease.spec.ts @@ -13,7 +13,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Moving out then insert - Up/Down - No release", async () => { diff --git a/packages/dflex-dnd-playground/tests/core/newPosition/continuity.release.spec.ts b/packages/dflex-dnd-playground/tests/core/newPosition/continuity.release.spec.ts index 5fceaa5bb..745318900 100644 --- a/packages/dflex-dnd-playground/tests/core/newPosition/continuity.release.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/newPosition/continuity.release.spec.ts @@ -13,7 +13,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Moving out then insert - Up/Down - Release", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/core/obliquity/bottomUp.spec.ts b/packages/dflex-dnd-playground/tests/core/obliquity/bottomUp.spec.ts index fa1200352..250f6ecc2 100644 --- a/packages/dflex-dnd-playground/tests/core/obliquity/bottomUp.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/obliquity/bottomUp.spec.ts @@ -13,7 +13,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Dragging from bottom up", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/core/obliquity/upBottom.spec.ts b/packages/dflex-dnd-playground/tests/core/obliquity/upBottom.spec.ts index ff1ab5969..bbd8e898b 100644 --- a/packages/dflex-dnd-playground/tests/core/obliquity/upBottom.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/obliquity/upBottom.spec.ts @@ -14,7 +14,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Dragging from bottom up", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/core/outList/horizontally.spec.ts b/packages/dflex-dnd-playground/tests/core/outList/horizontally.spec.ts index 2ed4a8464..df4c27675 100644 --- a/packages/dflex-dnd-playground/tests/core/outList/horizontally.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/outList/horizontally.spec.ts @@ -14,7 +14,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Dragged is strictly out container list horizontally", async () => { diff --git a/packages/dflex-dnd-playground/tests/core/outList/vertically.spec.ts b/packages/dflex-dnd-playground/tests/core/outList/vertically.spec.ts index 2b737bc53..e4982e2d0 100644 --- a/packages/dflex-dnd-playground/tests/core/outList/vertically.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/outList/vertically.spec.ts @@ -14,7 +14,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Dragged is strictly out container list vertically", async () => { diff --git a/packages/dflex-dnd-playground/tests/core/outPosition/horizontally.spec.ts b/packages/dflex-dnd-playground/tests/core/outPosition/horizontally.spec.ts index cc665e6dc..f1ef34809 100644 --- a/packages/dflex-dnd-playground/tests/core/outPosition/horizontally.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/outPosition/horizontally.spec.ts @@ -11,7 +11,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Dragged is out position horizontally", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/core/outPosition/vertically.spec.ts b/packages/dflex-dnd-playground/tests/core/outPosition/vertically.spec.ts index c8ca9ee45..5f425b427 100644 --- a/packages/dflex-dnd-playground/tests/core/outPosition/vertically.spec.ts +++ b/packages/dflex-dnd-playground/tests/core/outPosition/vertically.spec.ts @@ -11,7 +11,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Dragged is out position vertically", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/features/grid.spec.ts b/packages/dflex-dnd-playground/tests/features/grid.spec.ts index 46f347098..058f6e39e 100644 --- a/packages/dflex-dnd-playground/tests/features/grid.spec.ts +++ b/packages/dflex-dnd-playground/tests/features/grid.spec.ts @@ -18,7 +18,7 @@ import { moveDragged, DEVELOPMENT_ONLY_ASSERTION, isProdBundle, -} from "../utils"; +} from "dflex-e2e-utils"; import { DOMGenKeysType } from "../utils/sharedTypes"; test.describe("Transformation inside grid container", async () => { diff --git a/packages/dflex-dnd-playground/tests/features/multiDepth.spec.ts b/packages/dflex-dnd-playground/tests/features/multiDepth.spec.ts index 988d0f9e4..91dcdbee8 100644 --- a/packages/dflex-dnd-playground/tests/features/multiDepth.spec.ts +++ b/packages/dflex-dnd-playground/tests/features/multiDepth.spec.ts @@ -14,7 +14,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe("Testing horizontal transformation in depth (1). Vertical in depth (1)", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/features/resize.reconcile.spec.ts b/packages/dflex-dnd-playground/tests/features/resize.reconcile.spec.ts index 54fd616ab..db61be98e 100644 --- a/packages/dflex-dnd-playground/tests/features/resize.reconcile.spec.ts +++ b/packages/dflex-dnd-playground/tests/features/resize.reconcile.spec.ts @@ -16,7 +16,7 @@ import { initialize, // invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Resizing window will automatically reconcile elements and refresh elements DOMRect", async () => { diff --git a/packages/dflex-dnd-playground/tests/features/stabilizer.spec.ts b/packages/dflex-dnd-playground/tests/features/stabilizer.spec.ts index 94b5242af..af5434dc2 100644 --- a/packages/dflex-dnd-playground/tests/features/stabilizer.spec.ts +++ b/packages/dflex-dnd-playground/tests/features/stabilizer.spec.ts @@ -11,7 +11,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe("Testing stabilizer between two intersected thresholds", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/keys/grid.keys.spec.ts b/packages/dflex-dnd-playground/tests/keys/grid.keys.spec.ts index 4fd3b8051..19f19ac6b 100644 --- a/packages/dflex-dnd-playground/tests/keys/grid.keys.spec.ts +++ b/packages/dflex-dnd-playground/tests/keys/grid.keys.spec.ts @@ -5,7 +5,7 @@ import { DEVELOPMENT_ONLY_ASSERTION, isProdBundle, DFlexPageTest as test, -} from "../utils"; +} from "dflex-e2e-utils"; import { DOMGenKeysType } from "../utils/sharedTypes"; test.describe diff --git a/packages/dflex-dnd-playground/tests/keys/landing.keys.spec.ts b/packages/dflex-dnd-playground/tests/keys/landing.keys.spec.ts index 6531dad04..5bc0eef82 100644 --- a/packages/dflex-dnd-playground/tests/keys/landing.keys.spec.ts +++ b/packages/dflex-dnd-playground/tests/keys/landing.keys.spec.ts @@ -5,7 +5,7 @@ import { DEVELOPMENT_ONLY_ASSERTION, isProdBundle, DFlexPageTest as test, -} from "../utils"; +} from "dflex-e2e-utils"; import { DOMGenKeysType } from "../utils/sharedTypes"; test.describe diff --git a/packages/dflex-dnd-playground/tests/keys/migration.keys.spec.ts b/packages/dflex-dnd-playground/tests/keys/migration.keys.spec.ts index 00bdbeb68..597c803ce 100644 --- a/packages/dflex-dnd-playground/tests/keys/migration.keys.spec.ts +++ b/packages/dflex-dnd-playground/tests/keys/migration.keys.spec.ts @@ -5,7 +5,7 @@ import { DEVELOPMENT_ONLY_ASSERTION, isProdBundle, DFlexPageTest as test, -} from "../utils"; +} from "dflex-e2e-utils"; import { DOMGenKeysType } from "../utils/sharedTypes"; test.describe diff --git a/packages/dflex-dnd-playground/tests/keys/stream.inc.keys.spec.ts b/packages/dflex-dnd-playground/tests/keys/stream.inc.keys.spec.ts index f29d81d22..0369c9b6c 100644 --- a/packages/dflex-dnd-playground/tests/keys/stream.inc.keys.spec.ts +++ b/packages/dflex-dnd-playground/tests/keys/stream.inc.keys.spec.ts @@ -5,7 +5,7 @@ import { DEVELOPMENT_ONLY_ASSERTION, isProdBundle, DFlexPageTest as test, -} from "../utils"; +} from "dflex-e2e-utils"; import { DOMGenKeysType } from "../utils/sharedTypes"; test.describe diff --git a/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts b/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts index 0659b1b9a..db399ca0d 100644 --- a/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts +++ b/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts @@ -15,7 +15,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Migrate element into new container reconcile then migrate to its origin container when it's empty", async () => { diff --git a/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts b/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts index 5683ce541..82b0448dd 100644 --- a/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts +++ b/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts @@ -15,7 +15,7 @@ import { initialize, invokeKeyboardAndAssertEmittedMsg, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Transitioning the last element into the bottom of a bigger container horizontally", async () => { diff --git a/packages/dflex-dnd-playground/tests/scroll/scroll.container.spec.ts b/packages/dflex-dnd-playground/tests/scroll/scroll.container.spec.ts index c62d93f89..61a092f8c 100644 --- a/packages/dflex-dnd-playground/tests/scroll/scroll.container.spec.ts +++ b/packages/dflex-dnd-playground/tests/scroll/scroll.container.spec.ts @@ -6,7 +6,7 @@ import { expect, } from "@playwright/test"; -import { DFlexPageTest as test } from "../utils"; +import { DFlexPageTest as test } from "dflex-e2e-utils"; test.describe.parallel("Resolve scroll container correctly", async () => { let context: BrowserContext; diff --git a/packages/dflex-dnd-playground/tests/scroll/scrollV.inside.spec.ts b/packages/dflex-dnd-playground/tests/scroll/scrollV.inside.spec.ts index 8bca4f205..bbccc6755 100644 --- a/packages/dflex-dnd-playground/tests/scroll/scrollV.inside.spec.ts +++ b/packages/dflex-dnd-playground/tests/scroll/scrollV.inside.spec.ts @@ -14,7 +14,7 @@ import { initialize, moveDragged, TransformTimeout, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Drag the first element down vertically", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/scroll/scrollV.upDown.spec.ts b/packages/dflex-dnd-playground/tests/scroll/scrollV.upDown.spec.ts index c010f0ee9..137ea0b28 100644 --- a/packages/dflex-dnd-playground/tests/scroll/scrollV.upDown.spec.ts +++ b/packages/dflex-dnd-playground/tests/scroll/scrollV.upDown.spec.ts @@ -14,7 +14,7 @@ import { initialize, moveDragged, TransformTimeout, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe.serial("Drag the first element down vertically", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/scroll/visibility.continuity.spec.ts b/packages/dflex-dnd-playground/tests/scroll/visibility.continuity.spec.ts index ac31ad6c9..64bb17a6e 100644 --- a/packages/dflex-dnd-playground/tests/scroll/visibility.continuity.spec.ts +++ b/packages/dflex-dnd-playground/tests/scroll/visibility.continuity.spec.ts @@ -13,7 +13,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Visible elements have transformation test focusing on continuity", async () => { diff --git a/packages/dflex-dnd-playground/tests/scroll/visibility.isolation.spec.ts b/packages/dflex-dnd-playground/tests/scroll/visibility.isolation.spec.ts index 7e7e2063a..cd1caf627 100644 --- a/packages/dflex-dnd-playground/tests/scroll/visibility.isolation.spec.ts +++ b/packages/dflex-dnd-playground/tests/scroll/visibility.isolation.spec.ts @@ -13,7 +13,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe .serial("Visible elements have transformation after scrolling in isolation", async () => { diff --git a/packages/dflex-dnd-playground/tests/stream/stream.inc.spec.ts b/packages/dflex-dnd-playground/tests/stream/stream.inc.spec.ts index 74e171e8a..9917202ea 100644 --- a/packages/dflex-dnd-playground/tests/stream/stream.inc.spec.ts +++ b/packages/dflex-dnd-playground/tests/stream/stream.inc.spec.ts @@ -13,7 +13,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe("Stream incremental element then transform mutate and check the new positions", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tests/stream/stream.newELm.spec.ts b/packages/dflex-dnd-playground/tests/stream/stream.newELm.spec.ts index aad4721f2..ca3e7d70d 100644 --- a/packages/dflex-dnd-playground/tests/stream/stream.newELm.spec.ts +++ b/packages/dflex-dnd-playground/tests/stream/stream.newELm.spec.ts @@ -7,7 +7,7 @@ import { getDraggedRect, initialize, moveDragged, -} from "../utils"; +} from "dflex-e2e-utils"; test.describe("Stream new element then transform mutate and check the new positions", async () => { let page: Page; diff --git a/packages/dflex-dnd-playground/tsconfig.json b/packages/dflex-dnd-playground/tsconfig.json index eb440cacf..1faed411b 100644 --- a/packages/dflex-dnd-playground/tsconfig.json +++ b/packages/dflex-dnd-playground/tsconfig.json @@ -6,5 +6,5 @@ "outDir": "./types", "rootDir": "." }, - "references": [{ "path": "../dflex-dnd" }] + "references": [{ "path": "../dflex-dnd" }, { "path": "../dflex-e2e-utils" }] } diff --git a/packages/dflex-e2e-utils/package.json b/packages/dflex-e2e-utils/package.json new file mode 100644 index 000000000..e2b283708 --- /dev/null +++ b/packages/dflex-e2e-utils/package.json @@ -0,0 +1,10 @@ +{ + "name": "dflex-e2e-utils", + "version": "1.0.0", + "license": "MIT", + "main": "src/index.ts", + "private": true, + "scripts": {}, + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/dflex-dnd-playground/tests/utils/DFlexPageTest.ts b/packages/dflex-e2e-utils/src/DFlexPageTest.ts similarity index 93% rename from packages/dflex-dnd-playground/tests/utils/DFlexPageTest.ts rename to packages/dflex-e2e-utils/src/DFlexPageTest.ts index 9db2c7479..94f61339a 100644 --- a/packages/dflex-dnd-playground/tests/utils/DFlexPageTest.ts +++ b/packages/dflex-e2e-utils/src/DFlexPageTest.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { test as base, expect } from "@playwright/test"; export const DFlexPageTest = base.extend({ diff --git a/packages/dflex-dnd-playground/tests/utils/index.ts b/packages/dflex-e2e-utils/src/index.ts similarity index 98% rename from packages/dflex-dnd-playground/tests/utils/index.ts rename to packages/dflex-e2e-utils/src/index.ts index 6c1e830c9..6460fd38a 100644 --- a/packages/dflex-dnd-playground/tests/utils/index.ts +++ b/packages/dflex-e2e-utils/src/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { Page, Locator, expect, ConsoleMessage } from "@playwright/test"; export { DFlexPageTest } from "./DFlexPageTest"; diff --git a/packages/dflex-e2e-utils/tsconfig.json b/packages/dflex-e2e-utils/tsconfig.json new file mode 100644 index 000000000..9aee03565 --- /dev/null +++ b/packages/dflex-e2e-utils/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*", "../../dflex-env.d.ts"], + "compilerOptions": { + "composite": true, + "outDir": "./types", + "rootDir": "." + }, + "references": [{ "path": "../dflex-dnd" }] +} diff --git a/packages/dflex-next-playground/package.json b/packages/dflex-next-playground/package.json index cd86011c7..25a7aed47 100644 --- a/packages/dflex-next-playground/package.json +++ b/packages/dflex-next-playground/package.json @@ -13,9 +13,9 @@ "@types/node": "^20.6.3", "@types/react": "^18.2.22", "@types/react-dom": "^18.2.7", - "autoprefixer": "10.4.15", + "autoprefixer": "10.4.16", "classnames": "^2.3.2", - "next": "13.5.1", + "next": "13.5.2", "postcss": "8.4.30", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -23,6 +23,7 @@ "typescript": "^5.2.2" }, "devDependencies": { + "dflex-e2e-utils": "workspace:^1.0.0", "eslint": "^8.49.0", "eslint-config-dflex-react": "workspace:*" } diff --git a/packages/dflex-next-playground/src/components/TodoContainer.tsx b/packages/dflex-next-playground/src/components/TodoContainer.tsx new file mode 100644 index 000000000..0daeb95e2 --- /dev/null +++ b/packages/dflex-next-playground/src/components/TodoContainer.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import cn from "classnames"; + +const TodoContainer = ({ + children, + isCenterV = true, + isCenterH = true, +}: { + children: React.ReactNode; + isCenterH?: boolean; + isCenterV?: boolean; +}) => { + const containerClasses = cn("flex", "min-h-screen", "p-6", { + "justify-center": isCenterV, + "items-center": isCenterH, + }); + + return ( +
+ +
+ ); +}; + +export default TodoContainer; diff --git a/packages/dflex-next-playground/src/components/index.ts b/packages/dflex-next-playground/src/components/index.ts new file mode 100644 index 000000000..383bec6b1 --- /dev/null +++ b/packages/dflex-next-playground/src/components/index.ts @@ -0,0 +1,2 @@ +export { default as TodoContainer } from "./TodoContainer"; +export { default as TodoItem } from "./TodoItem"; diff --git a/packages/dflex-next-playground/src/pages/index.tsx b/packages/dflex-next-playground/src/pages/index.tsx index 1634deab4..5aa479f54 100644 --- a/packages/dflex-next-playground/src/pages/index.tsx +++ b/packages/dflex-next-playground/src/pages/index.tsx @@ -1,6 +1,10 @@ import React from "react"; import Link from "next/link"; +function replaceSlashWithUnderscore(inputString: string): string { + return inputString.replace(/\//g, "_"); +} + function ClickableBox({ link, title, @@ -13,6 +17,7 @@ function ClickableBox({ return (

diff --git a/packages/dflex-next-playground/src/pages/list/asymmetric.tsx b/packages/dflex-next-playground/src/pages/list/asymmetric.tsx index 14c7c21e4..dc0bf72fa 100644 --- a/packages/dflex-next-playground/src/pages/list/asymmetric.tsx +++ b/packages/dflex-next-playground/src/pages/list/asymmetric.tsx @@ -1,6 +1,6 @@ /* eslint-disable react/no-array-index-key */ import React from "react"; -import TodoItem from "../../components/TodoItem"; +import { TodoItem, TodoContainer } from "../../components"; const AsymmetricPage = () => { const tasks = [ @@ -27,15 +27,13 @@ const AsymmetricPage = () => { ]; return ( -
- -
+ + {tasks.map(({ task, id }) => ( + + {task} + + ))} + ); }; diff --git a/packages/dflex-next-playground/src/pages/list/symmetric.tsx b/packages/dflex-next-playground/src/pages/list/symmetric.tsx index 3c3081fc9..32f4b1fe2 100644 --- a/packages/dflex-next-playground/src/pages/list/symmetric.tsx +++ b/packages/dflex-next-playground/src/pages/list/symmetric.tsx @@ -1,6 +1,6 @@ /* eslint-disable react/no-array-index-key */ import React from "react"; -import TodoItem from "../../components/TodoItem"; +import { TodoItem, TodoContainer } from "../../components"; const SymmetricList = () => { const tasks = [ @@ -14,15 +14,13 @@ const SymmetricList = () => { ]; return ( -
- -
+ + {tasks.map(({ task, id }) => ( + + {task} + + ))} + ); }; diff --git a/packages/dflex-next-playground/src/pages/list/transformation.tsx b/packages/dflex-next-playground/src/pages/list/transformation.tsx index 9587f5529..26a4ad84d 100644 --- a/packages/dflex-next-playground/src/pages/list/transformation.tsx +++ b/packages/dflex-next-playground/src/pages/list/transformation.tsx @@ -1,6 +1,6 @@ /* eslint-disable react/no-array-index-key */ import React from "react"; -import TodoItem from "../../components/TodoItem"; +import { TodoItem, TodoContainer } from "../../components"; const TransformationPage = () => { const tasks = [ @@ -13,22 +13,13 @@ const TransformationPage = () => { ]; return ( -
- -
+ + {tasks.map(({ task, id }) => ( + + {task} + + ))} + ); }; diff --git a/packages/dflex-next-playground/tests/client-side-routing.spec.ts b/packages/dflex-next-playground/tests/client-side-routing.spec.ts new file mode 100644 index 000000000..a1439dfa6 --- /dev/null +++ b/packages/dflex-next-playground/tests/client-side-routing.spec.ts @@ -0,0 +1,41 @@ +import test from "@playwright/test"; + +test.describe("Stream incremental element then transform mutate and check the new positions", async () => { + // let page: Page; + // let context: BrowserContext; + // let activeBrowser: Browser; + // let elmAParent: Locator; + // let elmBParent: Locator; + // let elmA00: Locator; + // let elmB00: Locator; + // test.beforeAll(async ({ browser, browserName }) => { + // activeBrowser = browser; + // context = await activeBrowser.newContext(); + // page = await context.newPage(); + // initialize(page, browserName, 50); + // await page.goto("/stream-inc"); + // [elmAParent, elmA00, elmBParent, elmB00] = await Promise.all([ + // page.locator("#dflex_id_0"), + // page.locator("#a-0"), + // page.locator("#dflex_id_1"), + // page.locator("#b-0"), + // ]); + // }); + // test.afterAll(async () => { + // await page.close(); + // await context.close(); + // // await activeBrowser.close(); + // }); + // test("Visit main page, navigate, and check", async ({ page }) => { + // // Visit the main page + // await page.goto("https://example.com"); + // // Click a link to navigate to /list/asymmetric + // await page.click('a[href="/list/asymmetric"]'); + // // Wait for the new page to load (replace 'selector-on-new-page' with your actual selector) + // await page.waitForSelector("selector-on-new-page"); + // // Perform your checks on the new page + // const textContent = await page.textContent("selector-on-new-page"); + // // Example check: Make sure the text contains "Expected Text" + // expect(textContent).toContain("Expected Text"); + // }); +}); diff --git a/packages/dflex-next-playground/tsconfig.json b/packages/dflex-next-playground/tsconfig.json index 69c3d78b0..599ec4a89 100644 --- a/packages/dflex-next-playground/tsconfig.json +++ b/packages/dflex-next-playground/tsconfig.json @@ -20,5 +20,5 @@ }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"], - "references": [{ "path": "../dflex-dnd" }] + "references": [{ "path": "../dflex-dnd" }, { "path": "../dflex-e2e-utils" }] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c263998dc..f82d87633 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,6 +123,9 @@ importers: cypress: specifier: ^13.2.0 version: 13.2.0 + dflex-e2e-utils: + specifier: workspace:^1.0.0 + version: link:../dflex-e2e-utils eslint: specifier: ^8.49.0 version: 8.49.0 @@ -164,6 +167,8 @@ importers: specifier: workspace:* version: link:../../scripts/eslint-config-dflex-react + packages/dflex-e2e-utils: {} + packages/dflex-next-playground: dependencies: '@dflex/dnd': @@ -179,14 +184,14 @@ importers: specifier: ^18.2.7 version: 18.2.7 autoprefixer: - specifier: 10.4.15 - version: 10.4.15(postcss@8.4.30) + specifier: 10.4.16 + version: 10.4.16(postcss@8.4.30) classnames: specifier: ^2.3.2 version: 2.3.2 next: - specifier: 13.5.1 - version: 13.5.1(@babel/core@7.22.20)(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.2 + version: 13.5.2(@babel/core@7.22.20)(react-dom@18.2.0)(react@18.2.0) postcss: specifier: 8.4.30 version: 8.4.30 @@ -203,6 +208,9 @@ importers: specifier: ^5.2.2 version: 5.2.2 devDependencies: + dflex-e2e-utils: + specifier: workspace:^1.0.0 + version: link:../dflex-e2e-utils eslint: specifier: ^8.49.0 version: 8.49.0 @@ -1198,7 +1206,7 @@ packages: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 - globals: 13.21.0 + globals: 13.22.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1537,12 +1545,12 @@ packages: read-yaml-file: 1.1.0 dev: true - /@next/env@13.5.1: - resolution: {integrity: sha512-CIMWiOTyflFn/GFx33iYXkgLSQsMQZV4jB91qaj/TfxGaGOXxn8C1j72TaUSPIyN7ziS/AYG46kGmnvuk1oOpg==} + /@next/env@13.5.2: + resolution: {integrity: sha512-dUseBIQVax+XtdJPzhwww4GetTjlkRSsXeQnisIJWBaHsnxYcN2RGzsPHi58D6qnkATjnhuAtQTJmR1hKYQQPg==} dev: false - /@next/swc-darwin-arm64@13.5.1: - resolution: {integrity: sha512-Bcd0VFrLHZnMmJy6LqV1CydZ7lYaBao8YBEdQUVzV8Ypn/l5s//j5ffjfvMzpEQ4mzlAj3fIY+Bmd9NxpWhACw==} + /@next/swc-darwin-arm64@13.5.2: + resolution: {integrity: sha512-7eAyunAWq6yFwdSQliWMmGhObPpHTesiKxMw4DWVxhm5yLotBj8FCR4PXGkpRP2tf8QhaWuVba+/fyAYggqfQg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1550,8 +1558,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@13.5.1: - resolution: {integrity: sha512-uvTZrZa4D0bdWa1jJ7X1tBGIxzpqSnw/ATxWvoRO9CVBvXSx87JyuISY+BWsfLFF59IRodESdeZwkWM2l6+Kjg==} + /@next/swc-darwin-x64@13.5.2: + resolution: {integrity: sha512-WxXYWE7zF1ch8rrNh5xbIWzhMVas6Vbw+9BCSyZvu7gZC5EEiyZNJsafsC89qlaSA7BnmsDXVWQmc+s1feSYbQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1559,8 +1567,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@13.5.1: - resolution: {integrity: sha512-/52ThlqdORPQt3+AlMoO+omicdYyUEDeRDGPAj86ULpV4dg+/GCFCKAmFWT0Q4zChFwsAoZUECLcKbRdcc0SNg==} + /@next/swc-linux-arm64-gnu@13.5.2: + resolution: {integrity: sha512-URSwhRYrbj/4MSBjLlefPTK3/tvg95TTm6mRaiZWBB6Za3hpHKi8vSdnCMw5D2aP6k0sQQIEG6Pzcfwm+C5vrg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1568,8 +1576,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@13.5.1: - resolution: {integrity: sha512-L4qNXSOHeu1hEAeeNsBgIYVnvm0gg9fj2O2Yx/qawgQEGuFBfcKqlmIE/Vp8z6gwlppxz5d7v6pmHs1NB6R37w==} + /@next/swc-linux-arm64-musl@13.5.2: + resolution: {integrity: sha512-HefiwAdIygFyNmyVsQeiJp+j8vPKpIRYDlmTlF9/tLdcd3qEL/UEBswa1M7cvO8nHcr27ZTKXz5m7dkd56/Esg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1577,8 +1585,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@13.5.1: - resolution: {integrity: sha512-QVvMrlrFFYvLtABk092kcZ5Mzlmsk2+SV3xYuAu8sbTuIoh0U2+HGNhVklmuYCuM3DAAxdiMQTNlRQmNH11udw==} + /@next/swc-linux-x64-gnu@13.5.2: + resolution: {integrity: sha512-htGVVroW0tdHgMYwKWkxWvVoG2RlAdDXRO1RQxYDvOBQsaV0nZsgKkw0EJJJ3urTYnwKskn/MXm305cOgRxD2w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1586,8 +1594,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@13.5.1: - resolution: {integrity: sha512-bBnr+XuWc28r9e8gQ35XBtyi5KLHLhTbEvrSgcWna8atI48sNggjIK8IyiEBO3KIrcUVXYkldAzGXPEYMnKt1g==} + /@next/swc-linux-x64-musl@13.5.2: + resolution: {integrity: sha512-UBD333GxbHVGi7VDJPPDD1bKnx30gn2clifNJbla7vo5nmBV+x5adyARg05RiT9amIpda6yzAEEUu+s774ldkw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1595,8 +1603,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@13.5.1: - resolution: {integrity: sha512-EQGeE4S5c9v06jje9gr4UlxqUEA+zrsgPi6kg9VwR+dQHirzbnVJISF69UfKVkmLntknZJJI9XpWPB6q0Z7mTg==} + /@next/swc-win32-arm64-msvc@13.5.2: + resolution: {integrity: sha512-Em9ApaSFIQnWXRT3K6iFnr9uBXymixLc65Xw4eNt7glgH0eiXpg+QhjmgI2BFyc7k4ZIjglfukt9saNpEyolWA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1604,8 +1612,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@13.5.1: - resolution: {integrity: sha512-1y31Q6awzofVjmbTLtRl92OX3s+W0ZfO8AP8fTnITcIo9a6ATDc/eqa08fd6tSpFu6IFpxOBbdevOjwYTGx/AQ==} + /@next/swc-win32-ia32-msvc@13.5.2: + resolution: {integrity: sha512-TBACBvvNYU+87X0yklSuAseqdpua8m/P79P0SG1fWUvWDDA14jASIg7kr86AuY5qix47nZLEJ5WWS0L20jAUNw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1613,8 +1621,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@13.5.1: - resolution: {integrity: sha512-+9XBQizy7X/GuwNegq+5QkkxAPV7SBsIwapVRQd9WSvvU20YO23B3bZUpevdabi4fsd25y9RJDDncljy/V54ww==} + /@next/swc-win32-x64-msvc@13.5.2: + resolution: {integrity: sha512-LfTHt+hTL8w7F9hnB3H4nRasCzLD/fP+h4/GUVBTxrkMJOnh/7OZ0XbYDKO/uuWwryJS9kZjhxcruBiYwc5UDw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1766,7 +1774,7 @@ packages: rollup: 3.29.2 serialize-javascript: 6.0.1 smob: 1.4.1 - terser: 5.19.4 + terser: 5.20.0 dev: false /@rollup/pluginutils@5.0.4(rollup@3.29.2): @@ -1953,8 +1961,8 @@ packages: /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - /@types/graceful-fs@4.1.6: - resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + /@types/graceful-fs@4.1.7: + resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} dependencies: '@types/node': 20.6.3 dev: true @@ -2624,8 +2632,8 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer@10.4.15(postcss@8.4.30): - resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} + /autoprefixer@10.4.16(postcss@8.4.30): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2825,9 +2833,9 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001538 - electron-to-chromium: 1.4.525 + electron-to-chromium: 1.4.526 node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) + update-browserslist-db: 1.0.12(browserslist@4.21.10) /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -3486,8 +3494,8 @@ packages: safer-buffer: 2.1.2 dev: true - /electron-to-chromium@1.4.525: - resolution: {integrity: sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==} + /electron-to-chromium@1.4.526: + resolution: {integrity: sha512-tjjTMjmZAx1g6COrintLTa2/jcafYKxKoiEkdQOrVdbLaHh2wCt2nsAF8ZHweezkrP+dl/VG9T5nabcYoo0U5Q==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3773,7 +3781,7 @@ packages: eslint: '>= 3.2.1' dependencies: eslint: 8.49.0 - globals: 13.21.0 + globals: 13.22.0 dev: true /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0): @@ -3937,7 +3945,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 + globals: 13.22.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -4429,8 +4437,8 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - /glob@10.3.4: - resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} + /glob@10.3.5: + resolution: {integrity: sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: @@ -4484,8 +4492,8 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + /globals@13.22.0: + resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -5217,7 +5225,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.6 + '@types/graceful-fs': 4.1.7 '@types/node': 20.6.3 anymatch: 3.1.3 fb-watchman: 2.0.2 @@ -5968,8 +5976,8 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /next@13.5.1(@babel/core@7.22.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-GIudNR7ggGUZoIL79mSZcxbXK9f5pwAIPZxEM8+j2yLqv5RODg4TkmUlaKSYVqE1bPQueamXSqdC3j7axiTSEg==} + /next@13.5.2(@babel/core@7.22.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vog4UhUaMYAzeqfiAAmgB/QWLW7p01/sg+2vn6bqc/CxHFYizMzLv6gjxKzl31EVFkfl/F+GbxlKizlkTE9RdA==} engines: {node: '>=16.14.0'} hasBin: true peerDependencies: @@ -5983,7 +5991,7 @@ packages: sass: optional: true dependencies: - '@next/env': 13.5.1 + '@next/env': 13.5.2 '@swc/helpers': 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001538 @@ -5994,15 +6002,15 @@ packages: watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: - '@next/swc-darwin-arm64': 13.5.1 - '@next/swc-darwin-x64': 13.5.1 - '@next/swc-linux-arm64-gnu': 13.5.1 - '@next/swc-linux-arm64-musl': 13.5.1 - '@next/swc-linux-x64-gnu': 13.5.1 - '@next/swc-linux-x64-musl': 13.5.1 - '@next/swc-win32-arm64-msvc': 13.5.1 - '@next/swc-win32-ia32-msvc': 13.5.1 - '@next/swc-win32-x64-msvc': 13.5.1 + '@next/swc-darwin-arm64': 13.5.2 + '@next/swc-darwin-x64': 13.5.2 + '@next/swc-linux-arm64-gnu': 13.5.2 + '@next/swc-linux-arm64-musl': 13.5.2 + '@next/swc-linux-x64-gnu': 13.5.2 + '@next/swc-linux-x64-musl': 13.5.2 + '@next/swc-win32-arm64-msvc': 13.5.2 + '@next/swc-win32-ia32-msvc': 13.5.2 + '@next/swc-win32-x64-msvc': 13.5.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -6801,7 +6809,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.3.4 + glob: 10.3.5 dev: true /rollup@3.29.2: @@ -7377,12 +7385,12 @@ packages: jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.19.4 + terser: 5.20.0 webpack: 5.88.2 dev: true - /terser@5.19.4: - resolution: {integrity: sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==} + /terser@5.20.0: + resolution: {integrity: sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -7704,8 +7712,8 @@ packages: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + /update-browserslist-db@1.0.12(browserslist@4.21.10): + resolution: {integrity: sha512-tE1smlR58jxbFMtrMpFNRmsrOXlpNXss965T1CrpwuZUzUAg/TBQc94SpyhDLSzrqrJS9xTRBthnZAGcE1oaxg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0'